C语言实现餐饮点餐管理系统

本文实例为大家分享了C语言实现餐饮点餐管理系统的具体代码,供大家参考,具体内容如下

具体代码如下

/*

项目名称:南航餐饮管理系统

组员:梁文新,刘青林,刘艺,施瑞文(组长)

*/

//当注册用户名为:root,密码为:root的账号时,系统默认为初始管理员

//头文件

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

#include<conio.h>

#include<windows.h>

#include<string.h>

//宏定义区

#define M sizeof(struct User)//用户表的大小

#define N sizeof(struct stapleFood)//主食 表大小

#define P sizeof(struct non_stapleFood)//副食表大小

#define Q sizeof(struct Drink_beverage) //饮品表大小

#define X sizeof(struct Table)//餐桌表大小

#define Y sizeof(struct Form)//订单表大小

//结构体

struct User //用户表

{

char userName[10];//用户名

char passWord[18];//密码

int isVIP;//会员标记

int isAdministrator;//管理员标记

float money;//余额

struct User *next;//指针域

};

typedef struct User user;

typedef user* pUser;

struct stapleFood //主食

{

char name[20];

float price;

struct stapleFood *next;

};

typedef struct stapleFood staple_food;

typedef staple_food *pStapleFood;

struct non_stapleFood //副食

{

char name[20];

float price;

struct non_stapleFood *next;

};

typedef struct non_stapleFood non_staple_food;

typedef non_staple_food *pNon_stapleFood;

struct Drink_beverage //饮品

{

char name[20];

float price;

struct Drink_beverage *next;

};

typedef struct Drink_beverage drinkBeverage;

typedef drinkBeverage *pDrinkBeverage;

struct Table //餐桌

{

int ID;//餐桌编号

int People;//已坐人数

int count;//可容纳人数

char Username[10];//订餐人

struct Table *next;

};

typedef struct Table table;

typedef table *pTable;

struct Form //订单

{

char name[20];

float price;

struct Form *next;

};

typedef struct Form orderForm;

typedef orderForm *pOrder;

//自定义函数区

//用户客户端

void Default();//欢迎界面

void User_Login();//用户登录界面

void Logon();//注册界面

pUser readUserFile();//从文件中读取用户信息,返回一个表头地址

void save_User(pUser p1);//将用户信息保存到文件中

void User_Menu();//用户菜单

void User_Order();//点餐

void Order_StapleFood();//主食

void Order_nonStapleFood();//副食

void Order_DrinkBeverage();//饮品

void Order_Form(int ID,int number);//订单

void User_List_Table();//餐桌列表

void Apply_VIP_Menu();//会员办理菜单

void Add_money(pUser head);//充值

void Updata_User(pUser head);//更新用户表

void Apply_VIP(pUser head);//办理会员

void User_Wallet();//我的钱包

//管理员客户端

void Administrator_Menu();//管理员菜单

void Administrator_Login();//管理员登录

void Check_User();//查看用户

void Find_User();//查找用户

void All_User();//查看所有用户

void All_VIP();//本店会员

void Setup_administrator();//设置管理员

void Food();//菜品信息

void Add_Food();//添加菜单

void save_stapleFood(pStapleFood p);//保存主食信息

void save_non_stapleFood(pNon_stapleFood p);//保存副食信息

void save_drinkBeverage(pDrinkBeverage p);//保存饮品信息

pStapleFood readStapleFoodFile();//从主食文件中读取用户信息,返回一个表头地址

pNon_stapleFood readNonStapleFoodFile();//从副食文件中读取用户信息,返回一个表头地址

pDrinkBeverage readDrinkBeverageFile();//从饮品文件中读取用户信息,返回一个表头地址

void Table();//餐桌管理

void Add_Table();//添加餐桌

void save_Table(pTable p);//保存餐桌信息

pTable readTableFile(); //从餐桌文件中读取用户信息,返回一个表头地址

void Clear_Table();//清理餐桌

void Clear_oneTable();//清理指定餐桌

void Clear_allTable();//清理所有餐桌

void Updata_Table(pTable head);//更新餐桌文件

void Administrator_List_Table();//餐桌列表

//公共函数

void toxy(int x,int y);//将光标移动到x,y坐标处

void HideCursor(int x);//隐藏光标

char *HidePassword();//隐藏密码

void Exit();//退出系统

void Change();//切换账号

void Amend_passWord();//修改密码

void List_Food();//菜单列表

//全局变量区

char _userName[10];

char _passWord[18];//记录当前用户

pOrder orderHead=NULL,p2=NULL;//记录当前用户的订单

int num=0;

//函数实现区

void toxy(int x,int y)//将光标移动到x,y坐标处

{

COORD pos={x,y};

HANDLE Out = GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleCursorPosition(Out,pos);

}

void HideCursor(int x)//隐藏光标 ,当x为0时,隐藏,为1时,显示

{

CONSOLE_CURSOR_INFO cursor_info ={1,x};

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);

}

void Default()//欢迎界面

{

char t;//用于选择

do

{

HideCursor(0); //隐藏光标

system("color 72");

toxy(28,8);

printf(" 欢迎来到南航餐饮! ");

toxy(26,9);

printf("-----------------------------");

toxy(27,11);

printf("1.登录 2.注册 3.管理员登录");

while(1) //死循环为防止其他按键干扰

{

t=getch();//不回显函数

if(t=='1')//如果按1,则进入登录界面

User_Login();

else if(t=='2')//如果按2,则进入注册界面

Logon();

else if(t=='3')

Administrator_Login();

}//如果既不是1也不是2和3,则循环输入

}while(1);//永远为真

}

void User_Menu()//用户菜单

{

char t;//用于选择菜单选项

do

{

system("cls");

HideCursor(0); //隐藏光标

system("color 74");

toxy(32,3);

printf("南航餐饮点餐系统!");

toxy(32,4);

printf("当前用户:%s",_userName);

toxy(30,5);

printf("*********************");

toxy(32,7);

printf("| 1.菜单列表 |");

toxy(32,9);

printf("| 2.餐桌列表 |");

toxy(32,11);

printf("| 3.会员办理 |");

toxy(32,13);

printf("| 4.修改密码 |");

toxy(32,15);

printf("| 5.我的钱包 |");

toxy(32,17);

printf("| 6.切换账号 |");

toxy(32,19);

printf("| 7.退出系统 |");

t=getch();//不回显函数,输入一个值

switch(t)

{

case '1':User_Order();break;

case '2':User_List_Table();break;

case '3':Apply_VIP_Menu();break;

case '4':Amend_passWord();break;

case '5':User_Wallet();break;

case '6':Change();break;

case '7':Exit();break;

default :break;

}

}while(1);//永远 为真

}

char *HidePassword()//隐藏密码

{

char password[18];//密码

char *p;//指向密码的指针

int i=0;//记录密码位数

char t;//输入密码

for(;;) //此处为输入密码不回显操作

{

t=getch(); //输入k

if(t=='\r') //如果输入k为回车,则跳出循环

{

break;

}

else if(t=='\b') //如果输入k为删除键

{

if(i>0) //如若密码还没完全删除

{

printf("\b");

printf(" ");

printf("\b");

i--;

}

}

else //如果输入的k既不是删除键,也不是回车键

{

password[i]=t; //把k的值赋给_password[i];

printf("*"); //输出*号,保护用户隐私

i++; //密码位数加1

}

}

password[i]='\0';//在数组末端加一个结束符

p=password;//让p指向该数组

return p; //返回一个指向密码的指针

}

pUser readUserFile()//从文件中读取用户信息,返回一个表头地址

{

FILE *fp; //文件指针

int n=0;//记录链表 的结点数

pUser head=NULL;//定义头指针

pUser p2,p,pre;

fp=fopen("User.txt","a+"); //以只读的方式打开文件

if(fp==NULL)

{

printf("cannot open file\n");

}

else

{

while(!feof(fp)) //判断文件位置标志是否移动到文件末尾

{

n++;

p=(pUser)malloc(M); //向内存申请一段空间

fread(p,M,1,fp); //将fp所指向的文件中的内容赋给p

if(n==1)

{

head=p;

p2=p;

}

else //创建链表

{

pre=p2;

p2->next=p;

p2=p;

}

}

p2->next=NULL;

}

if(n<=2)

head->next=NULL;

else

pre->next=NULL;

fclose(fp); //关闭文件

return head; //返回头指针

}

void save_User(pUser p1) //将p1所指向的内容存储到文件中

{

FILE *fp; //文件指针

fp=fopen("User.txt","a+"); //以追加的方式打开文件

if(fp==NULL)

{

printf("cannot open file\n");

}

if(fwrite(p1,M,1,fp)!=1) //将p1所指向的1个大小为N的数据结构写入fp所指向的文件中

{

printf("file write error\n");

}

fclose(fp); //关闭文件

}

void User_Login()//登录页面

{

char *q,t,c;//q指针用于接收 *HidePassword()函数返回的指向密码的指针,t和c均用于选择

pUser p=readUserFile();//从文件中读取用户信息,返回一个表头地址

do

{

HideCursor(1);//显示管光标

system("cls");//清屏

system("color 73");//设置颜色

toxy(28,8);

printf("南航餐饮管理系统登录界面");

toxy(26,9);

printf("-----------------------------");

toxy(32,11);

printf("用户名:");

toxy(32,13);

printf("密 码:");

toxy(40,11);

scanf("%s",_userName);

toxy(40,13);

q=HidePassword();//输入密码

strcpy(_passWord,q);//将获得的密码复制给_passWord[]数组

while(p!=NULL&&strcmp(p->userName,_userName)!=0) //遍历链表,寻找当前输入的账户的账号

{

p=p->next;

}

if(p!=NULL) //如果p不为空

{

if(strcmp(p->passWord,_passWord)==0) //如果输入的密码正确

{

toxy(32,16);

printf("正在登陆....");

Sleep(500); //暂停0.5秒

system("cls");

toxy(32,10);

printf("登陆成功!");

break; //跳出循环

}

else //如果输入的密码错误

{

toxy(32,16);

printf("正在登陆....");

Sleep(500);

system("cls");

toxy(30,8);

printf("-------------------------");

toxy(30,9);

printf("| |");

toxy(30,10);

printf("| 密码错误!是否继续? |");

toxy(30,12);

printf("| 1.是 2.否 |");

toxy(30,13);

printf("| |");

toxy(30,14);

printf("-------------------------");

while(1)//无限循环为防止其他按键干扰

{

t=getch(); //输入t

if(t=='1')

{

system("cls"); //清屏

break;

}

else if(t=='2') //如果输入t为n,进入开始界面

{

system("cls"); //清屏

Default();break;

}

}

}

}

else //如果p为空,即输入的账号不正确

{

toxy(32,16);

printf("正在登陆....");

Sleep(500);

system("cls");

toxy(30,8);

printf("-------------------------");

toxy(30,9);

printf("| |");

toxy(30,10);

printf("| 账号错误!是否继续? |");

toxy(30,11);

printf("| |");

toxy(30,12);

printf("| 1.是 2.否 |");

toxy(30,13);

printf("| |");

toxy(30,14);

printf("-------------------------");

while(1) //死循环防止其他按键干扰

{

c=getch();

if(c=='1')

{

system("cls");

break;

}

else if(c=='2')

{

system("cls"); //清屏

Default();

}

}

}

}while(1);

Sleep(500); //暂停0.5秒

User_Menu(); //账号密码均正确,进入用户主菜单

}

void Logon()//注册界面

{

pUser p1;

pUser p=readUserFile();//从文件中读取用户信息,返回一个表头地址

p1=(pUser)malloc(M); //向内存申请一段空间

char *q1,*q2;//q1,q2分别用于接收 *HidePassword()函数返回的值

char userName[10],passWord[18],againPassword[18],c,k,t;//c,k,t均用于选择

do{

system("cls");

system("color 73");

HideCursor(1);//显示光标

int flag=0;//标记信息库中是否存在要注册用户名

toxy(28,8);

printf("南航餐饮管理系统注册界面");

toxy(26,9);

printf("-----------------------------");

toxy(32,11);

printf("用 户 名:");

toxy(32,13);

printf("密 码:");

toxy(32,15);

printf("确认密码:");

toxy(42,11);

scanf("%s",userName);//输入用户名

toxy(42,13);

q1=HidePassword();//输入密码

strcpy(passWord,q1);

toxy(42,15);

q2=HidePassword();//输入确认密码

strcpy(againPassword,q2);

while(p!=NULL) //遍历链表,寻找当前输入的账户的账号

{

if(strcmp(p->userName,userName)==0)//如果信息库中存在该用户名

{

toxy(32,17);

printf("用户名已存在,请重新注册!");

flag=1;//flag为1时表示用户名已存在

break;//跳出循环

}

p=p->next;

}

if(flag)//如果用户名已存在

{

HideCursor(0);//隐藏光标

toxy(32,19);

printf("是否继续?");//询问是否继续

toxy(32,21);

printf("1.是\t2.否");

while(1)

{

t=getch();

if(t=='1')

break;

else if(t=='2')

break;

}

if(t=='1')//如果继续,则重新注册

continue;

else if(t=='2')//如果不继续,则回到首页

{

system("cls");//清屏

Default();//回到首页

}

}

if(strcmp(passWord,againPassword)==0) //如果输入的两次密码均正确

{

strcpy(p1->userName,userName);

strcpy(p1->passWord,passWord);

strcpy(_userName,userName);

strcpy(_passWord,passWord);

p1->isVIP=0;

p1->money=0;

if(strcmp(userName,"root")==0&&strcmp(passWord,"root")==0)

p1->isAdministrator=1;

else

p1->isAdministrator=0;

toxy(32,16);

printf("正在注册....");

Sleep(500);

break; //跳出循环

}

else //如果输入的两次密码不同

{

toxy(32,16);

printf("正在注册....");

Sleep(500);

system("cls");

toxy(30,8);

printf("------------------------------");

toxy(30,9);

printf("| |");

toxy(30,10);

printf("|两次密码不一致!是否继续注册?|");

toxy(30,11);

printf("| |");

toxy(30,12);

printf("| 1.是 2.否 |");

toxy(30,13);

printf("| |");

toxy(30,14);

printf("------------------------------");

while(1)

{

c=getch();

if(c=='1')

{

system("cls");

break;

}

else if(c=='2')

{

system("cls");

Default();

break;

}

}

}

}while(1);

save_User(p1); //调用函数,将p1所指向的内容存储到文件中

system("cls");

toxy(32,10);

printf("注册成功!");

Sleep(500); //暂停0.5秒

toxy(32,12);

printf("正在自动为您登陆....");

Sleep(500);

User_Menu(); //注册成功后进入主菜单

}

void User_Order()//点餐

{

char ch='0';

char t='0';

int ID;

int number;

do

{

while(1)

{

system("cls");

HideCursor(1);

int flag=0;

pTable T,Thead;

Thead=readTableFile();

T=Thead;

int j=11;

toxy(12,6);

printf("餐桌列表(按任意键继续)");

toxy(2,8);

printf("餐桌编号 | 可坐人数 | 已坐人数");

toxy(0,9);

printf("--------------------------------------");

while(T!=NULL)

{

toxy(6,j);

printf("%-10d%-10d%d",T->ID,T->count,T->People);

j++;

T=T->next;

}

toxy(38,12);

printf("请选择餐桌号:");

scanf("%d",&ID);

toxy(40,14);

printf("请选择人数:");

scanf("%d",&number);

T=Thead;

while(T!=NULL)

{

if(T->ID==ID)

{

if((T->count)-(T->People)>=number)

{

toxy(38,16);

printf("占座成功!按任意键继续点餐");

flag=1;

break;

}

else

{

toxy(38,16);

printf("占座失败!该餐桌座位不够");

flag=0;

break;

}

}

T=T->next;

}

if(T==NULL&&flag==0)

{

toxy(38,16);

printf("该餐桌编号不存在,请重新输入");

Sleep(1000);

continue;

}

else if(T!=NULL&&flag==0)

{

toxy(38,17);

printf("是否继续 1.是 2.否");

while(1)

{

ch=getch();

if(ch=='1'||ch=='2')

break;

}

if(ch=='1')

continue;

else if(ch=='2')

break;

}

else if(flag)

break;

}

if(ch=='2')

break;

getch();

do

{

system("cls");

toxy(32,6);

printf("点餐");

toxy(24,8);

printf("-----------------");

toxy(28,10);

printf("1) 主 食");

toxy(28,12);

printf("2) 副 食");

toxy(28,14);

printf("3) 饮 品");

toxy(28,16);

printf("4)订 单");

toxy(28,18);

printf("5)返 回");

t=getch();

switch(t)

{

case '1':Order_StapleFood();break;

case '2':Order_nonStapleFood();break;

case '3':Order_DrinkBeverage();break;

case '4':Order_Form(ID,number);break;

case '5':break;

default :break;

}

if(t=='5')

break;

}while(1);

if(t=='5')

break;

}while(1);

}

void Order_StapleFood()//主食

{

char t;

do

{

system("cls");

pStapleFood p,head=readStapleFoodFile();

pOrder p1;

p=head;

char foodName[20];

int i=8;

toxy(10,4);

printf("主食菜单");

toxy(6,6);

printf("菜名\t\t\t价格");

toxy(0,7);

printf("-----------------------------------");

while(p!=NULL)

{

toxy(6,i);

printf("%-22s%.2f",p->name,p->price);

i++;

p=p->next;

}

toxy(40,8);

printf("请输入您要点的菜名:");

scanf("%s",foodName);

p=head;

while(p!=NULL&&strcmp(p->name,foodName)!=0)

{

p=p->next;

}

if(p)

{

p1=(pOrder)malloc(Y);

strcpy(p1->name,foodName);

p1->price=p->price;

num++;

if(num==1)

{

orderHead=p1;

p2=p1;

}

else

{

p2->next=p1;

p2=p1;

}

p2->next=NULL;

toxy(40,10);

printf("点餐成功!是否继续?1.是 2.否");

while(1)

{

t=getch();

if(t=='1')

break;

else if(t=='2')

break;

}

if(t=='2')

break;

}

else

{

toxy(36,10);

printf("没有找到这道菜,请检查您输入的菜名是否正确!");

Sleep(1500);

}

}while(1);

}

void Order_nonStapleFood()//副食

{

char t;

do

{

system("cls");

pNon_stapleFood p,head=readNonStapleFoodFile();

pOrder p1;

p=head;

char foodName[20];

int i=8;

toxy(10,4);

printf("副食菜单");

toxy(6,6);

printf("菜名\t\t\t价格");

toxy(0,7);

printf("-----------------------------------");

while(p!=NULL)

{

toxy(6,i);

printf("%-22s%.2f",p->name,p->price);

i++;

p=p->next;

}

toxy(40,8);

printf("请输入您要点的菜名:");

scanf("%s",foodName);

p=head;

while(p!=NULL&&strcmp(p->name,foodName)!=0)

{

p=p->next;

}

if(p)

{

p1=(pOrder)malloc(Y);

strcpy(p1->name,foodName);

p1->price=p->price;

num++;

if(num==1)

{

orderHead=p1;

p2=p1;

}

else

{

p2->next=p1;

p2=p1;

}

p2->next=NULL;

toxy(36,10);

printf("点餐成功!是否继续?1.是 2.否");

while(1)

{

t=getch();

if(t=='1')

break;

else if(t=='2')

break;

}

if(t=='2')

break;

}

else

{

toxy(36,10);

printf("没有找到这道菜,请检查您输入的菜名是否正确!");

Sleep(1500);

}

}while(1);

}

void Order_DrinkBeverage()//饮品

{

char t;

do

{

system("cls");

pDrinkBeverage p,head=readDrinkBeverageFile();

pOrder p1;

p=head;

char foodName[20];

int i=8;

toxy(10,4);

printf("饮品菜单");

toxy(6,6);

printf("菜名\t\t\t价格");

toxy(0,7);

printf("-----------------------------------");

while(p!=NULL)

{

toxy(6,i);

printf("%-22s%.2f",p->name,p->price);

i++;

p=p->next;

}

toxy(40,8);

printf("请输入您要点的菜名:");

scanf("%s",foodName);

p=head;

while(p!=NULL&&strcmp(p->name,foodName)!=0)

{

p=p->next;

}

if(p)

{

p1=(pOrder)malloc(Y);

strcpy(p1->name,foodName);

p1->price=p->price;

num++;

if(num==1)

{

orderHead=p1;

p2=p1;

}

else

{

p2->next=p1;

p2=p1;

}

p2->next=NULL;

toxy(36,10);

printf("点餐成功!是否继续?1.是 2.否");

while(1)

{

t=getch();

if(t=='1')

break;

else if(t=='2')

break;

}

if(t=='2')

break;

}

else

{

toxy(36,10);

printf("没有找到这道菜,请检查您输入的菜名是否正确!");

Sleep(1500);

}

}while(1);

}

void Order_Form(int ID,int number)//订单

{

do

{

system("cls");

int i=10;

char t;

float totalPrice=0;

float actualPayment=0;

pOrder p=orderHead;

pUser q,head;

pTable T,Thead;

q=head;

if(orderHead==NULL)

{

toxy(26,8);

printf("您还没有点任何东西,赶紧去点吧!(按任意键返回)");

getch();

break;

}

else

{

toxy(26,6);

printf("我的订单");

toxy(22,8);

printf("菜品名称\t\t价格");

toxy(20,9);

printf("***************************");

while(p!=NULL)

{

toxy(22,i);

printf("%-18s%.2f",p->name,p->price);

i++;

totalPrice+=p->price;

p=p->next;

}

head=readUserFile();

q=head;

toxy(20,i);

printf("***************************");

while(q!=NULL&&strcmp(q->userName,_userName)!=0)

{

q=q->next;

}

if(q)

{

toxy(24,++i);

printf("总价: %.2f",totalPrice);

if(q->isVIP)

actualPayment=totalPrice*0.85;

else

actualPayment=totalPrice;

toxy(24,++i);

printf("实付: %.2f",actualPayment);

}

toxy(22,++i);

printf("1.确认支付 2.取消订单 3.返回");

while(1)

{

t=getch();

if(t=='1'||t=='2'||t=='3')

break;

}

if(t=='1')

{

Thead=readTableFile();

T=Thead;

while(T!=NULL&&T->ID!=ID)

{

T=T->next;

}

toxy(24,++i);

printf("正在支付....");

if(q->money>=actualPayment)

{

q->money-=actualPayment;

T->People+=number;

Updata_User(head);

Updata_Table(Thead);

Sleep(1500);

system("cls");

toxy(24,10);

printf("支付成功!按任意键返回");

orderHead=NULL;

getch();

break;

}

else

{

Sleep(1500);

system("cls");

toxy(24,10);

printf("余额不足!按任意键返回");

getch();

break;

}

}

else if(t=='2')

{

orderHead=NULL;

break;

}

else if(t=='3')

break;

}

}while(1);

}

void User_List_Table()//餐桌列表

{

system("cls");

pTable p,head;

head=readTableFile();

p=head;

int i=11;

toxy(32,6);

printf("餐桌列表(按任意键继续)");

toxy(22,8);

printf("餐桌编号 | 可坐人数 | 已坐人数");

toxy(20,9);

printf("--------------------------------------");

while(p!=NULL)

{

toxy(26,i);

printf("%-10d%-10d%d",p->ID,p->count,p->People);

i++;

p=p->next;

}

getch();

}

void Apply_VIP_Menu()//办理会员

{

char t; //t用于选择

do

{

system("cls");

system("color 75");

HideCursor(0);

pUser head=readUserFile();//从文件中读取用户信息,返回一个表头地址

toxy(32,6);

printf("会员办理");

toxy(30,8);

printf("1) 充值 ");

toxy(30,10);

printf("2) 办理会员");

toxy(30,12);

printf("3) 返回");

t=getch();

switch(t)

{

case '1':Add_money(head);break;

case '2':Apply_VIP(head);break;

case '3':break;

default :break;

}

if(t=='3')//如果输入3,则跳出循环,该函数生命周期结束,回到上一级菜单

break;

}while(1);

}

void Add_money(pUser head)//充值

{

float money;//输入要充值的钱

pUser p;

p=head;//head为从 上一级菜单传过来的参数,为用户信息链表的头结点

while(p!=NULL&&strcmp(p->userName,_userName)!=0)//遍历链表,寻找当前登录账户的信息

{

p=p->next;

}

while(1)

{

system("cls");

system("color 76");

toxy(32,6);

printf("南航餐饮充值中心");

if(p!=NULL)

{

if(p->isVIP==0)//如果不是会员

{

toxy(20,8);

printf("对不起,您还不是会员,请先办理会员后再来充值!");

toxy(32,10);

printf("请按任意键返回!");

break;

}

else if(p->isVIP==1)//如果是会员

{

HideCursor(1);

toxy(32,8);

printf("请输入充值金额(一次不少于200):");

scanf("%f",&money);

if(money>=200)//如果充值金额大于200

{

p->money+=money;

toxy(32,10);

printf("正在充值....");

Updata_User(head);//更新用户表

toxy(32,10);

printf("充值成功 ");

toxy(32,12);

printf("请按任意键返回!");

break;

}

else//如果充值金额小于200

{

toxy(32,10);

printf("一次至少充值200元!");

Sleep(1500);

continue;

}

}

}

}

getch();

}

void Apply_VIP(pUser head)//办理会员

{

system("cls");

system("color 76");

pUser p=head;//head为从 上一级菜单传过来的参数,为用户信息链表的头结点

char t;

float money;

toxy(32,6);

printf("南航餐饮会员办理中心");

while(p!=NULL&&strcmp(p->userName,_userName)!=0)//遍历链表,寻找当前登录账户的信息

{

p=p->next;

}

do

{

if(p!=NULL)

{

if(p->isVIP==1)//如果已经是会员

{

toxy(20,8);

printf("您已是本店尊贵会员,无需再次办理!");

toxy(32,10);

printf("请按任意键返回!");

getch();

break;

}

else if(p->isVIP==0)//如果还没办理会员

{

toxy(30,8);

printf("提示:");

toxy(30,9);

printf("1.办理会员至少充值500");

toxy(30,10);

printf("2.冲500送200,冲1000送500");

toxy(32,12);

printf("是否确认办理会员?");

toxy(32,13);

printf("1.是\t2.否");

while(1)

{

t=getch();

if(t=='1')

break;

else if(t=='2')

break;

}

if(t=='1')

{

while(1)

{

system("cls");

HideCursor(1);

toxy(32,10);

printf("请输入充值金额:");

scanf("%f",&money);

if(money>=500&&money<1000)

{

money+=200;

p->money+=money;

p->isVIP=1;

Updata_User(head);

toxy(32,12);

printf("恭喜,您已成为本店尊贵会员!");

toxy(32,14);

printf("请按任意键返回主菜单");

getch();

User_Menu();

}

else if(money>=1000)

{

money+=500;

p->money+=money;

p->isVIP=1;

Updata_User(head);

toxy(32,12);

printf("恭喜,您已成为本店尊贵会员!");

toxy(32,14);

printf("请按任意键返回主菜单");

getch();

User_Menu();

}

else

{

toxy(32,12);

printf("办理会员至少充值500");

Sleep(2000);

}

}

}

else if(t=='2')

break;

}

}

}while(1);

}

void Updata_User(pUser head)//更新文件

{

FILE *fp;

pUser p=head->next; //使p指向第二个结点

fp=fopen("User.txt","w"); //先清空原文件内容再将修改后的信息写入文件

if(fp==NULL)

{

printf("cannot open file\n");

}

if(fwrite(head,M,1,fp)!=1) //将head所指向的数据写入fp所指向的文件

{

printf("file write error\n");

}

fclose(fp); //关闭文件

fp=fopen("User.txt","a"); // 打开User.txt文件,方式为追加

while(p!=NULL) //p不为空就执行循环体

{

if(fwrite(p,M,1,fp)!=1) //将p所指向的1个大小为N的数据结构写入fp所指向的文件

{

printf("file write error\n");

}

p=p->next; //使p指向下一个结点

}

fclose(fp); //关闭文件

}

void Amend_passWord()//修改密码

{

system("cls"); //清屏

HideCursor(0); //隐藏光标,看着更舒服

pUser p,head;

head=readUserFile();

do

{

p=head;

char password[18],newpassword[18],t,k,*q1,*q2;

int i=0;

toxy(34,5); //将光标移动到坐标为(50,5)的位置

printf("南航餐饮点餐系统");

toxy(34,8);

printf("修改密码");

toxy(32,10);

printf("请输入旧密码:");

q1=HidePassword();

strcpy(password,q1);

toxy(32,12);

printf("请输入新密码:");

q2=HidePassword();

strcpy(newpassword,q2);

while(p!=NULL&&strcmp(p->userName,_userName)!=0)//遍历链表,寻找当前登陆账户的账号

{

p=p->next;

}

if(p!=NULL) //如果p不为空

{

if(strcmp(p->passWord,password)==0) //如果旧密码输入正确

{

strcpy(p->passWord,newpassword); //将旧密码改为新密码

break; //跳出循环

}

else //如果旧密码输入错误

{

system("cls");

toxy(30,8);

printf("--------------------------");

toxy(30,9);

printf("| |");

toxy(30,10);

printf("| 密码错误!是否继续? |");

toxy(30,11);

printf("| |");

toxy(30,12);

printf("| 1.是 2.否 |");

toxy(30,13);

printf("| |");

toxy(30,14);

printf("--------------------------");

while(1)

{

t=getch(); //输入t

if(t=='1')

{

system("cls");

break;

}

else if(t=='2')

User_Menu();

}

}

}

}while(1); //永远为真

Updata_User(head);//修改密码

toxy(32,14);

printf("修改成功!正在跳转...");

Sleep(500); //暂停0.5秒

}

void User_Wallet()//我的钱包

{

system("cls");

system("color 78");

pUser p,head;

head=readUserFile();

p=head;

while(p!=NULL&&strcmp(p->userName,_userName)!=0)

{

p=p->next;

}

if(p!=NULL)

{

toxy(32,10);

printf("账户余额为:%.2f",p->money);

toxy(32,12);

printf("请按任意键返回");

}

getch();

}

void Change()//切换账号

{

system("cls");

Default();

}

void Exit()//退出点餐系统

{

char t;

toxy(30,10);

printf("-----------------------");

toxy(30,11);

printf("| 您确定要退出吗? |");

toxy(30,13);

printf("| 1.确定 2.取消 |");

toxy(30,14);

printf("-----------------------");

while(1)

{

t=getch(); //输入t

switch(t)

{

case '1':

system("cls");

toxy(32,10);

printf("正在安全退出....");

Sleep(1000); //暂停1秒

system("cls");

toxy(32,10);

printf("已安全退出软件");

toxy(32,12);

printf("谢谢使用!");

toxy(32,14);

printf("by-by^_^");

exit(0); break; //终止程序

case '2':

break; //调用函数,进入菜单

default :break;

}

if(t=='2')

break;

}

}

void Administrator_Menu()//管理员菜单

{

char t;//用于选择菜单选项

do

{

system("cls");

HideCursor(0); //隐藏光标

system("color 74");

toxy(32,3);

printf("南航餐饮管理系统!");

toxy(32,4);

printf("当前管理员:%s",_userName);

toxy(30,5);

printf("*********************");

toxy(32,7);

printf("| 1.菜品 信息 |");

toxy(32,9);

printf("| 2.餐桌 管理 |");

toxy(32,11);

printf("| 3.查看 用户 |");

toxy(32,13);

printf("| 4.本店 会员 |");

toxy(32,15);

printf("| 5.设置管理员 |");

toxy(32,17);

printf("| 6.修改 密码 |");

toxy(32,19);

printf("| 7.切换 账号 |");

toxy(32,21);

printf("| 8.退出 系统 |");

t=getch();//不回显函数,输入一个值

switch(t)

{

case '1':Food();break;

case '2':Table();break;

case '3':Check_User();break;

case '4':All_VIP();break;

case '5':Setup_administrator();break;

case '6':Amend_passWord();break;

case '7':Change();break;

case '8':Exit();break;

default :break;

}

}while(1);//永远 为真

}

void Administrator_Login()//管理员登录

{

char *q,t,c;//q指针用于接收 *HidePassword()函数返回的指向密码的指针,t和c均用于选择

pUser p=readUserFile();//从文件中读取用户信息,返回一个表头地址

do

{

HideCursor(1);//显示管光标

system("cls");//清屏

system("color 73");//设置颜色

toxy(28,8);

printf("南航餐饮管理员登录界面");

toxy(26,9);

printf("-----------------------------");

toxy(32,11);

printf("用户名:");

toxy(32,13);

printf("密 码:");

toxy(40,11);

scanf("%s",_userName);

toxy(40,13);

q=HidePassword();//输入密码

strcpy(_passWord,q);//将获得的密码复制给_passWord[]数组

while(p!=NULL&&strcmp(p->userName,_userName)!=0) //遍历链表,寻找当前输入的账户的账号

{

p=p->next;

}

if(p!=NULL) //如果p不为空

{

if(strcmp(p->passWord,_passWord)==0&&p->isAdministrator==1) //如果输入的密码正确

{

toxy(32,16);

printf("正在登陆....");

Sleep(500); //暂停0.5秒

system("cls");

toxy(32,10);

printf("登陆成功!");

break; //跳出循环

}

else //如果输入的密码错误

{

toxy(32,16);

printf("正在登陆....");

Sleep(500);

system("cls");

toxy(30,8);

printf("-------------------------");

toxy(30,9);

printf("| |");

toxy(30,10);

printf("| 密码错误!是否继续? |");

toxy(30,12);

printf("| 1.是 2.否 |");

toxy(30,13);

printf("| |");

toxy(30,14);

printf("-------------------------");

while(1)//无限循环为防止其他按键干扰

{

t=getch(); //输入t

if(t=='1')

{

system("cls"); //清屏

break;

}

else if(t=='2') //如果输入t为n,进入开始界面

{

system("cls"); //清屏

Default();break;

}

}

}

}

else //如果p为空,即输入的账号不正确

{

toxy(32,16);

printf("正在登陆....");

Sleep(500);

system("cls");

toxy(30,8);

printf("-------------------------");

toxy(30,9);

printf("| |");

toxy(30,10);

printf("| 账号错误!是否继续? |");

toxy(30,11);

printf("| |");

toxy(30,12);

printf("| 1.是 2.否 |");

toxy(30,13);

printf("| |");

toxy(30,14);

printf("-------------------------");

while(1) //死循环防止其他按键干扰

{

c=getch();

if(c=='1')

{

system("cls");

break;

}

else if(c=='2')

{

system("cls"); //清屏

Default();

}

}

}

}while(1);

Sleep(500); //暂停0.5秒

Administrator_Menu(); //账号密码均正确,进入管理员主菜单

}

void Food()//菜品信息

{

system("color 74");

char t;

do

{

system("cls");

toxy(32,6);

printf("菜品信息");

toxy(28,7);

printf("-----------------");

toxy(30,9);

printf(" 1) 添加菜单");

toxy(30,11);

printf(" 2) 菜单列表");

toxy(30,13);

printf(" 3) 返回上一级");

t=getch();

switch(t)

{

case '1':Add_Food();break;

case '2':List_Food();break;

case '3':break;

default :break;

}

if(t=='3')

break;

}while(1);

}

void save_stapleFood(pStapleFood p)//保存主食信息

{

FILE *fp; //文件指针

fp=fopen("StapleFood.txt","a+"); //以追加的方式打开文件

if(fp==NULL)

{

printf("cannot open file\n");

}

if(fwrite(p,N,1,fp)!=1) //将p1所指向的1个大小为N的数据结构写入fp所指向的文件中

{

printf("file write error\n");

}

fclose(fp); //关闭文件

}

void save_non_stapleFood(pNon_stapleFood p)//保存副食信息

{

FILE *fp; //文件指针

fp=fopen("non_StapleFood.txt","a+"); //以追加的方式打开文件

if(fp==NULL)

{

printf("cannot open file\n");

}

if(fwrite(p,P,1,fp)!=1) //将p1所指向的1个大小为N的数据结构写入fp所指向的文件中

{

printf("file write error\n");

}

fclose(fp); //关闭文件

}

void save_drinkBeverage(pDrinkBeverage p)//保存饮品信息

{

FILE *fp; //文件指针

fp=fopen("DrinkBeverage.txt","a+"); //以追加的方式打开文件

if(fp==NULL)

{

printf("cannot open file\n");

}

if(fwrite(p,Q,1,fp)!=1) //将p1所指向的1个大小为N的数据结构写入fp所指向的文件中

{

printf("file write error\n");

}

fclose(fp); //关闭文件

}

pStapleFood readStapleFoodFile()//从主食文件中读取用户信息,返回一个表头地址

{

FILE *fp; //文件指针

int n=0;//记录链表 的结点数

pStapleFood head=NULL;//定义头指针

pStapleFood p2,p,pre;

fp=fopen("StapleFood.txt","a+"); //以只读的方式打开文件

if(fp==NULL)

{

printf("cannot open file\n");

}

else

{

while(!feof(fp)) //判断文件位置标志是否移动到文件末尾

{

n++;

p=(pStapleFood)malloc(N); //向内存申请一段空间

fread(p,N,1,fp); //将fp所指向的文件中的内容赋给p

if(n==1)

{

head=p;

p2=p;

}

else //创建链表

{

pre=p2;

p2->next=p;

p2=p;

}

}

p2->next=NULL;

}

if(n<=2)

head->next=NULL;

else

pre->next=NULL;

fclose(fp); //关闭文件

return head; //返回头指针

}

pNon_stapleFood readNonStapleFoodFile()//从副食文件中读取用户信息,返回一个表头地址

{

FILE *fp; //文件指针

int n=0;//记录链表 的结点数

pNon_stapleFood head=NULL;//定义头指针

pNon_stapleFood p2,p,pre;

fp=fopen("non_StapleFood.txt","a+"); //以只读的方式打开文件

if(fp==NULL)

{

printf("cannot open file\n");

}

else

{

while(!feof(fp)) //判断文件位置标志是否移动到文件末尾

{

n++;

p=(pNon_stapleFood)malloc(P); //向内存申请一段空间

fread(p,P,1,fp); //将fp所指向的文件中的内容赋给p

if(n==1)

{

head=p;

p2=p;

}

else //创建链表

{

pre=p2;

p2->next=p;

p2=p;

}

}

p2->next=NULL;

}

if(n<=2)

head->next=NULL;

else

pre->next=NULL;

fclose(fp); //关闭文件

return head; //返回头指针

}

pDrinkBeverage readDrinkBeverageFile()//从饮品文件中读取用户信息,返回一个表头地址

{

FILE *fp; //文件指针

int n=0;//记录链表 的结点数

pDrinkBeverage head=NULL;//定义头指针

pDrinkBeverage p2,p,pre;

fp=fopen("DrinkBeverage.txt","a+"); //以只读的方式打开文件

if(fp==NULL)

{

printf("cannot open file\n");

}

else

{

while(!feof(fp)) //判断文件位置标志是否移动到文件末尾

{

n++;

p=(pDrinkBeverage)malloc(Q); //向内存申请一段空间

fread(p,Q,1,fp); //将fp所指向的文件中的内容赋给p

if(n==1)

{

head=p;

p2=p;

}

else //创建链表

{

pre=p2;

p2->next=p;

p2=p;

}

}

p2->next=NULL;

}

if(n<=2)

head->next=NULL;

else

pre->next=NULL;

fclose(fp); //关闭文件

return head; //返回头指针

}

void Add_Food() //添加菜单

{

HideCursor(1);//显示光标

pStapleFood p1;//主食

pNon_stapleFood p2;//副食

pDrinkBeverage p3;//饮品

char name[20];

float price=0;

int type=1;

char t;

do

{

system("cls");

p1=(pStapleFood)malloc(N);

p2=(pNon_stapleFood)malloc(P);

p3=(pDrinkBeverage)malloc(Q);

toxy(30,6);

printf("请输入菜名:");

toxy(30,8);

printf("请输入价格:");

toxy(30,10);

printf("请输入类型:");

toxy(30,12);

printf("(1:主食 2.副食 3.饮品)");

toxy(42,6);

scanf("%s",name);

toxy(42,8);

scanf("%f",&price);

toxy(42,10);

scanf("%d",&type);

if(type==1)

{

strcpy(p1->name,name);

p1->price=price;

save_stapleFood(p1);

}

else if(type==2)

{

strcpy(p2->name,name);

p2->price=price;

save_non_stapleFood(p2);

}

else if(type==3)

{

strcpy(p3->name,name);

p3->price=price;

save_drinkBeverage(p3);

}

toxy(28,14);

printf("添加成功!是否继续?(1.是 2.否)");

while(1)

{

t=getch();

if(t=='1')

break;

else if(t=='2')

break;

}

if(t=='2')

break;

}while(1);

}

void List_Food() //菜单列表

{

system("cls");

int i=8;

toxy(30,4);

printf("菜单列表(按任意键继续)");

pStapleFood p1;//主食

pNon_stapleFood p2;//副食

pDrinkBeverage p3;//饮品

p1=readStapleFoodFile();//从主食文件中读取用户信息,返回一个表头地址

p2=readNonStapleFoodFile();//从副食文件中读取用户信息,返回一个表头地址

p3=readDrinkBeverageFile();//从饮品文件中读取用户信息,返回一个表头地址

toxy(26,6);

printf("菜名\t\t\t价格");

toxy(20,7);

printf("-----------------------------------");

toxy(24,i);

printf("主食:");

i++;

while(p1!=NULL)

{

toxy(26,i);

printf("%-22s%.2f",p1->name,p1->price);

i++;

p1=p1->next;

}

toxy(24,i);

printf("副食:");

i++;

while(p2!=NULL)

{

toxy(26,i);

printf("%-22s%.2f",p2->name,p2->price);

i++;

p2=p2->next;

}

toxy(24,i);

printf("饮品:");

i++;

while(p3!=NULL)

{

toxy(26,i);

printf("%-22s%.2f",p3->name,p3->price);

i++;

p3=p3->next;

}

getch();

}

void Table()//餐桌管理

{

char t;

do

{

system("cls");

HideCursor(0);

toxy(32,4);

printf("餐桌管理");

toxy(26,5);

printf("-------------------");

toxy(30,7);

printf("1) 添加餐桌");

toxy(30,9);

printf("2) 餐桌列表");

toxy(30,11);

printf("3) 清理餐桌");

toxy(30,13);

printf("4) 返回上一级");

t=getch();

switch(t)

{

case '1':Add_Table();break;

case '2':Administrator_List_Table();break;

case '3':Clear_Table();break;

case '4':break;

default :break;

}

if(t=='4')

break;

}while(1);

}

void save_Table(pTable p)//保存餐桌信息

{

FILE *fp; //文件指针

fp=fopen("Table.txt","a+"); //以追加的方式打开文件

if(fp==NULL)

{

printf("cannot open file\n");

}

if(fwrite(p,X,1,fp)!=1) //将p1所指向的1个大小为N的数据结构写入fp所指向的文件中

{

printf("file write error\n");

}

fclose(fp); //关闭文件

}

pTable readTableFile()//从餐桌文件中读取用户信息,返回一个表头地址

{

FILE *fp; //文件指针

int n=0;//记录链表 的结点数

pTable head=NULL;//定义头指针

pTable p2,p,pre;

fp=fopen("Table.txt","a+"); //以只读的方式打开文件

if(fp==NULL)

{

printf("cannot open file\n");

}

else

{

while(!feof(fp)) //判断文件位置标志是否移动到文件末尾

{

n++;

p=(pTable)malloc(X); //向内存申请一段空间

fread(p,X,1,fp); //将fp所指向的文件中的内容赋给p

if(n==1)

{

head=p;

p2=p;

}

else //创建链表

{

pre=p2;

p2->next=p;

p2=p;

}

}

p2->next=NULL;

}

if(n<=2)

head->next=NULL;

else

pre->next=NULL;

fclose(fp); //关闭文件

return head; //返回头指针

}

void Add_Table()//添加餐桌

{

HideCursor(1);//显示光标

pTable p,p1;

p1=readTableFile();

char t;

int ID;

int count;

do

{

system("cls");

p=(pTable)malloc(X);

toxy(26,6);

printf("请输入餐桌编号:");

toxy(26,8);

printf("请输入可坐人数:");

toxy(42,6);

scanf("%d",&ID);

toxy(42,8);

scanf("%d",&count);

while(p1!=NULL&&p1->ID!=ID)

{

p1=p1->next;

}

if(p1!=NULL)

{

toxy(30,10);

printf("该餐桌编号已存在,请重新输入!");

Sleep(2000);

continue;

}

p->ID=ID;

p->People=0;

p->count=count;

strcpy(p->Username,"无");

save_Table(p);

toxy(24,10);

printf("添加成功!是否继续?(1.是 2.否)");

while(1)

{

t=getch();

if(t=='1')

break;

else if(t=='2')

break;

}

if(t=='2')

break;

}while(1);

}

void Administrator_List_Table()//餐桌列表

{

system("cls");

pTable p,head;

head=readTableFile();

p=head;

int i=11;

toxy(32,6);

printf("餐桌列表(按任意键继续)");

toxy(22,8);

printf("餐桌编号 | 可坐人数 | 已坐人数 | 订餐人");

toxy(20,9);

printf("--------------------------------------------");

while(p!=NULL)

{

toxy(26,i);

printf("%-10d%-10d%-10d%s",p->ID,p->count,p->People,p->Username);

i++;

p=p->next;

}

getch();

}

void Clear_Table()//清理餐桌

{

char t;

do

{

system("cls");

toxy(32,4);

printf("清理餐桌");

toxy(26,5);

printf("-------------------");

toxy(30,7);

printf("1) 清理指定餐桌");

toxy(30,9);

printf("2) 清理所有餐桌");

toxy(30,11);

printf("3) 返回上一级");

t=getch();

switch(t)

{

case '1':Clear_oneTable();break;

case '2':Clear_allTable();break;

case '3':break;

default :break;

}

if(t=='3')

break;

}while(1);

}

void Updata_Table(pTable head)//更新餐桌文件

{

FILE *fp;

pTable p=head->next; //使p指向第二个结点

fp=fopen("Table.txt","w"); //先清空原文件内容再将修改后的信息写入文件

if(fp==NULL)

{

printf("cannot open file\n");

}

if(fwrite(head,X,1,fp)!=1) //将head所指向的数据写入fp所指向的文件

{

printf("file write error\n");

}

fclose(fp); //关闭文件

fp=fopen("Table.txt","a"); // 打开User.txt文件,方式为追加

while(p!=NULL) //p不为空就执行循环体

{

if(fwrite(p,X,1,fp)!=1) //将p所指向的1个大小为N的数据结构写入fp所指向的文件

{

printf("file write error\n");

}

p=p->next; //使p指向下一个结点

}

fclose(fp); //关闭文件

}

void Clear_oneTable()//清理指定餐桌

{

int ID;

pTable p,head;

char t;

do

{

system("cls");

head=readTableFile();

p=head;

toxy(28,8);

printf("请输入您要清理的餐桌编号:");

scanf("%d",&ID);

while(p!=NULL&&p->ID!=ID)

{

p=p->next;

}

if(p)

{

toxy(32,10);

printf("正在清理....");

p->People=0;

strcpy(p->Username,"无");

Updata_Table(head);

Sleep(2000);

toxy(24,10);

printf("清理成功!是否继续?1.是 2.否");

while(1)

{

t=getch();

if(t=='1')

break;

else if(t=='2')

break;

}

if(t=='2')

break;

}

else

{

toxy(32,10);

printf("该餐桌不存在!请重新输入");

Sleep(1500);

}

}while(1);

}

void Clear_allTable()//清理所有餐桌

{

system("cls");

toxy(32,10);

printf("正在清理....");

pTable p,head;

head=readTableFile();

p=head;

while(p!=NULL)

{

p->People=0;

strcpy(p->Username,"无");

p=p->next;

}

Updata_Table(head);

Sleep(2000);

toxy(32,10);

printf("清理成功!按任意键继续");

getch();

}

void Check_User()//查看用户

{

char t;

do

{

system("cls");

system("color 79");

toxy(32,6);

printf(" 查看用户 ");

toxy(32,7);

printf("----------------");

toxy(32,9);

printf(" 1) 查找用户 ");

toxy(32,11);

printf(" 2) 所有用户 ");

toxy(32,13);

printf(" 3)返回上一级");

t=getch();

switch(t)

{

case '1':Find_User();break;

case '2':All_User();break;

case '3':break;

default :break;

}

if(t=='3')

break;

}while(1);

}

void Find_User()//查找用户

{

system("cls");

char username[10];

pUser p, head=readUserFile();

p=head;

toxy(32,10);

printf("请输入您要查找的用户名:");

scanf("%s",username);

toxy(24,12);

printf("用户名\t\t余额\t\t会员状态");

while(p!=NULL&&strcmp(p->userName,username)!=0)

p=p->next;

if(p!=NULL)

{

toxy(24,14);

printf("%s\t\t%.2f\t\t%d",p->userName,p->money,p->isVIP);

}

else

{

toxy(28,14);

printf("没有找到相关信息");

}

toxy(30,16);

printf("请按任意键返回");

getch();

}

void All_User()//打印所有用户信息

{

system("cls");

pUser p,head;

head=readUserFile();

p=head;

int i=9;

toxy(32,4);

printf("所有用户");

toxy(20,5);

printf("--------------------------------------------------");

toxy(30,6);

printf("按任意键返回");

toxy(24,7);

printf("用户名\t\t余额\t\t会员状态");

while(p!=NULL)

{

toxy(24,i);

printf("%s\t\t%.2f\t\t%d",p->userName,p->money,p->isVIP);

p=p->next;

i+=2;

}

getch();

}

void All_VIP()//查看所有VIP

{

system("cls");

system("color 79");

pUser p,head;

head=readUserFile();

p=head;

int i=11;

toxy(32,6);

printf("本店会员");

toxy(26,8);

printf("用户名\t\t余额");

toxy(24,9);

printf("--------------------------------");

while(p!=NULL)

{

if(p->isVIP)

{

toxy(26,i);

printf("%s\t\t\t%.2f",p->userName,p->money);

i+=2;

}

p=p->next;

}

toxy(30,i);

printf("按任意键返回");

getch();

}

void Setup_administrator()//设置管理员

{

system("color 80");

char t;

char username[10];

pUser p,head;

head=readUserFile();

do

{

system("cls");

p=head;

toxy(26,8);

printf("请输入您要设置为管理员的用户名:");

scanf("%s",username);

while(p!=NULL&&strcmp(p->userName,username)!=0)

{

p=p->next;

}

if(p!=NULL)

{

p->isAdministrator=1;

Updata_User(head);

toxy(32,10);

printf("设置成功!请按任意键返回");

getch();

break;

}

else

{

toxy(24,10);

printf("您所输入的用户名不存在!是否继续?(1.是 2.否)");

while(1)

{

t=getch();

if(t=='1')

break;

else if(t=='2')

break;

}

if(t=='2')

break;

}

}while(1);

}

int main()

{

Default();//进入欢迎界面

return 0;

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是 C语言实现餐饮点餐管理系统 的全部内容, 来源链接: utcz.com/p/244313.html

回到顶部