C語言實(shí)現(xiàn)餐飲點(diǎn)餐管理系統(tǒng)
本文實(shí)例為大家分享了C語言實(shí)現(xiàn)餐飲點(diǎn)餐管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
具體代碼如下
/*
項(xiàng)目名稱:南航餐飲管理系統(tǒng)
組員:梁文新,劉青林,劉藝,施瑞文(組長)
*/
//當(dāng)注冊(cè)用戶名為:root,密碼為:root的賬號(hào)時(shí),系統(tǒng)默認(rèn)為初始管理員
//頭文件
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#include<windows.h>
#include<string.h>
//宏定義區(qū)
#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)//訂單表大小
//結(jié)構(gòu)體
struct User //用戶表
{
char userName[10];//用戶名
char passWord[18];//密碼
int isVIP;//會(huì)員標(biāo)記
int isAdministrator;//管理員標(biāo)記
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;//餐桌編號(hào)
int People;//已坐人數(shù)
int count;//可容納人數(shù)
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;
//自定義函數(shù)區(qū)
//用戶客戶端
void Default();//歡迎界面
void User_Login();//用戶登錄界面
void Logon();//注冊(cè)界面
pUser readUserFile();//從文件中讀取用戶信息,返回一個(gè)表頭地址
void save_User(pUser p1);//將用戶信息保存到文件中
void User_Menu();//用戶菜單
void User_Order();//點(diǎn)餐
void Order_StapleFood();//主食
void Order_nonStapleFood();//副食
void Order_DrinkBeverage();//飲品
void Order_Form(int ID,int number);//訂單
void User_List_Table();//餐桌列表
void Apply_VIP_Menu();//會(huì)員辦理菜單
void Add_money(pUser head);//充值
void Updata_User(pUser head);//更新用戶表
void Apply_VIP(pUser head);//辦理會(huì)員
void User_Wallet();//我的錢包
//管理員客戶端
void Administrator_Menu();//管理員菜單
void Administrator_Login();//管理員登錄
void Check_User();//查看用戶
void Find_User();//查找用戶
void All_User();//查看所有用戶
void All_VIP();//本店會(huì)員
void Setup_administrator();//設(shè)置管理員
void Food();//菜品信息
void Add_Food();//添加菜單
void save_stapleFood(pStapleFood p);//保存主食信息
void save_non_stapleFood(pNon_stapleFood p);//保存副食信息
void save_drinkBeverage(pDrinkBeverage p);//保存飲品信息
pStapleFood readStapleFoodFile();//從主食文件中讀取用戶信息,返回一個(gè)表頭地址
pNon_stapleFood readNonStapleFoodFile();//從副食文件中讀取用戶信息,返回一個(gè)表頭地址
pDrinkBeverage readDrinkBeverageFile();//從飲品文件中讀取用戶信息,返回一個(gè)表頭地址
void Table();//餐桌管理
void Add_Table();//添加餐桌
void save_Table(pTable p);//保存餐桌信息
pTable readTableFile(); //從餐桌文件中讀取用戶信息,返回一個(gè)表頭地址
void Clear_Table();//清理餐桌
void Clear_oneTable();//清理指定餐桌
void Clear_allTable();//清理所有餐桌
void Updata_Table(pTable head);//更新餐桌文件
void Administrator_List_Table();//餐桌列表
//公共函數(shù)
void toxy(int x,int y);//將光標(biāo)移動(dòng)到x,y坐標(biāo)處
void HideCursor(int x);//隱藏光標(biāo)
char *HidePassword();//隱藏密碼
void Exit();//退出系統(tǒng)
void Change();//切換賬號(hào)
void Amend_passWord();//修改密碼
void List_Food();//菜單列表
//全局變量區(qū)
char _userName[10];
char _passWord[18];//記錄當(dāng)前用戶
pOrder orderHead=NULL,p2=NULL;//記錄當(dāng)前用戶的訂單
int num=0;
//函數(shù)實(shí)現(xiàn)區(qū)
void toxy(int x,int y)//將光標(biāo)移動(dòng)到x,y坐標(biāo)處
{
COORD pos={x,y};
HANDLE Out = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(Out,pos);
}
void HideCursor(int x)//隱藏光標(biāo) ,當(dāng)x為0時(shí),隱藏,為1時(shí),顯示
{
CONSOLE_CURSOR_INFO cursor_info ={1,x};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
}
void Default()//歡迎界面
{
char t;//用于選擇
do
{
HideCursor(0); //隱藏光標(biāo)
system("color 72");
toxy(28,8);
printf(" 歡迎來到南航餐飲! ");
toxy(26,9);
printf("-----------------------------");
toxy(27,11);
printf("1.登錄 2.注冊(cè) 3.管理員登錄");
while(1) //死循環(huán)為防止其他按鍵干擾
{
t=getch();//不回顯函數(shù)
if(t=='1')//如果按1,則進(jìn)入登錄界面
User_Login();
else if(t=='2')//如果按2,則進(jìn)入注冊(cè)界面
Logon();
else if(t=='3')
Administrator_Login();
}//如果既不是1也不是2和3,則循環(huán)輸入
}while(1);//永遠(yuǎn)為真
}
void User_Menu()//用戶菜單
{
char t;//用于選擇菜單選項(xiàng)
do
{
system("cls");
HideCursor(0); //隱藏光標(biāo)
system("color 74");
toxy(32,3);
printf("南航餐飲點(diǎn)餐系統(tǒng)!");
toxy(32,4);
printf("當(dāng)前用戶:%s",_userName);
toxy(30,5);
printf("*********************");
toxy(32,7);
printf("| 1.菜單列表 |");
toxy(32,9);
printf("| 2.餐桌列表 |");
toxy(32,11);
printf("| 3.會(huì)員辦理 |");
toxy(32,13);
printf("| 4.修改密碼 |");
toxy(32,15);
printf("| 5.我的錢包 |");
toxy(32,17);
printf("| 6.切換賬號(hào) |");
toxy(32,19);
printf("| 7.退出系統(tǒng) |");
t=getch();//不回顯函數(shù),輸入一個(gè)值
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);//永遠(yuǎn) 為真
}
char *HidePassword()//隱藏密碼
{
char password[18];//密碼
char *p;//指向密碼的指針
int i=0;//記錄密碼位數(shù)
char t;//輸入密碼
for(;;) //此處為輸入密碼不回顯操作
{
t=getch(); //輸入k
if(t=='\r') //如果輸入k為回車,則跳出循環(huán)
{
break;
}
else if(t=='\b') //如果輸入k為刪除鍵
{
if(i>0) //如若密碼還沒完全刪除
{
printf("\b");
printf(" ");
printf("\b");
i--;
}
}
else //如果輸入的k既不是刪除鍵,也不是回車鍵
{
password[i]=t; //把k的值賦給_password[i];
printf("*"); //輸出*號(hào),保護(hù)用戶隱私
i++; //密碼位數(shù)加1
}
}
password[i]='\0';//在數(shù)組末端加一個(gè)結(jié)束符
p=password;//讓p指向該數(shù)組
return p; //返回一個(gè)指向密碼的指針
}
pUser readUserFile()//從文件中讀取用戶信息,返回一個(gè)表頭地址
{
FILE *fp; //文件指針
int n=0;//記錄鏈表 的結(jié)點(diǎn)數(shù)
pUser head=NULL;//定義頭指針
pUser p2,p,pre;
fp=fopen("User.txt","a+"); //以只讀的方式打開文件
if(fp==NULL)
{
printf("cannot open file\n");
}
else
{
while(!feof(fp)) //判斷文件位置標(biāo)志是否移動(dòng)到文件末尾
{
n++;
p=(pUser)malloc(M); //向內(nèi)存申請(qǐng)一段空間
fread(p,M,1,fp); //將fp所指向的文件中的內(nèi)容賦給p
if(n==1)
{
head=p;
p2=p;
}
else //創(chuàng)建鏈表
{
pre=p2;
p2->next=p;
p2=p;
}
}
p2->next=NULL;
}
if(n<=2)
head->next=NULL;
else
pre->next=NULL;
fclose(fp); //關(guān)閉文件
return head; //返回頭指針
}
void save_User(pUser p1) //將p1所指向的內(nèi)容存儲(chǔ)到文件中
{
FILE *fp; //文件指針
fp=fopen("User.txt","a+"); //以追加的方式打開文件
if(fp==NULL)
{
printf("cannot open file\n");
}
if(fwrite(p1,M,1,fp)!=1) //將p1所指向的1個(gè)大小為N的數(shù)據(jù)結(jié)構(gòu)寫入fp所指向的文件中
{
printf("file write error\n");
}
fclose(fp); //關(guān)閉文件
}
void User_Login()//登錄頁面
{
char *q,t,c;//q指針用于接收 *HidePassword()函數(shù)返回的指向密碼的指針,t和c均用于選擇
pUser p=readUserFile();//從文件中讀取用戶信息,返回一個(gè)表頭地址
do
{
HideCursor(1);//顯示管光標(biāo)
system("cls");//清屏
system("color 73");//設(shè)置顏色
toxy(28,8);
printf("南航餐飲管理系統(tǒng)登錄界面");
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);//將獲得的密碼復(fù)制給_passWord[]數(shù)組
while(p!=NULL&&strcmp(p->userName,_userName)!=0) //遍歷鏈表,尋找當(dāng)前輸入的賬戶的賬號(hào)
{
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; //跳出循環(huán)
}
else //如果輸入的密碼錯(cuò)誤
{
toxy(32,16);
printf("正在登陸....");
Sleep(500);
system("cls");
toxy(30,8);
printf("-------------------------");
toxy(30,9);
printf("| |");
toxy(30,10);
printf("| 密碼錯(cuò)誤!是否繼續(xù)? |");
toxy(30,12);
printf("| 1.是 2.否 |");
toxy(30,13);
printf("| |");
toxy(30,14);
printf("-------------------------");
while(1)//無限循環(huán)為防止其他按鍵干擾
{
t=getch(); //輸入t
if(t=='1')
{
system("cls"); //清屏
break;
}
else if(t=='2') //如果輸入t為n,進(jìn)入開始界面
{
system("cls"); //清屏
Default();break;
}
}
}
}
else //如果p為空,即輸入的賬號(hào)不正確
{
toxy(32,16);
printf("正在登陸....");
Sleep(500);
system("cls");
toxy(30,8);
printf("-------------------------");
toxy(30,9);
printf("| |");
toxy(30,10);
printf("| 賬號(hào)錯(cuò)誤!是否繼續(xù)? |");
toxy(30,11);
printf("| |");
toxy(30,12);
printf("| 1.是 2.否 |");
toxy(30,13);
printf("| |");
toxy(30,14);
printf("-------------------------");
while(1) //死循環(huán)防止其他按鍵干擾
{
c=getch();
if(c=='1')
{
system("cls");
break;
}
else if(c=='2')
{
system("cls"); //清屏
Default();
}
}
}
}while(1);
Sleep(500); //暫停0.5秒
User_Menu(); //賬號(hào)密碼均正確,進(jìn)入用戶主菜單
}
void Logon()//注冊(cè)界面
{
pUser p1;
pUser p=readUserFile();//從文件中讀取用戶信息,返回一個(gè)表頭地址
p1=(pUser)malloc(M); //向內(nèi)存申請(qǐng)一段空間
char *q1,*q2;//q1,q2分別用于接收 *HidePassword()函數(shù)返回的值
char userName[10],passWord[18],againPassword[18],c,k,t;//c,k,t均用于選擇
do{
system("cls");
system("color 73");
HideCursor(1);//顯示光標(biāo)
int flag=0;//標(biāo)記信息庫中是否存在要注冊(cè)用戶名
toxy(28,8);
printf("南航餐飲管理系統(tǒng)注冊(cè)界面");
toxy(26,9);
printf("-----------------------------");
toxy(32,11);
printf("用 戶 名:");
toxy(32,13);
printf("密 碼:");
toxy(32,15);
printf("確認(rèn)密碼:");
toxy(42,11);
scanf("%s",userName);//輸入用戶名
toxy(42,13);
q1=HidePassword();//輸入密碼
strcpy(passWord,q1);
toxy(42,15);
q2=HidePassword();//輸入確認(rèn)密碼
strcpy(againPassword,q2);
while(p!=NULL) //遍歷鏈表,尋找當(dāng)前輸入的賬戶的賬號(hào)
{
if(strcmp(p->userName,userName)==0)//如果信息庫中存在該用戶名
{
toxy(32,17);
printf("用戶名已存在,請(qǐng)重新注冊(cè)!");
flag=1;//flag為1時(shí)表示用戶名已存在
break;//跳出循環(huán)
}
p=p->next;
}
if(flag)//如果用戶名已存在
{
HideCursor(0);//隱藏光標(biāo)
toxy(32,19);
printf("是否繼續(xù)?");//詢問是否繼續(xù)
toxy(32,21);
printf("1.是\t2.否");
while(1)
{
t=getch();
if(t=='1')
break;
else if(t=='2')
break;
}
if(t=='1')//如果繼續(xù),則重新注冊(cè)
continue;
else if(t=='2')//如果不繼續(xù),則回到首頁
{
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("正在注冊(cè)....");
Sleep(500);
break; //跳出循環(huán)
}
else //如果輸入的兩次密碼不同
{
toxy(32,16);
printf("正在注冊(cè)....");
Sleep(500);
system("cls");
toxy(30,8);
printf("------------------------------");
toxy(30,9);
printf("| |");
toxy(30,10);
printf("|兩次密碼不一致!是否繼續(xù)注冊(cè)?|");
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); //調(diào)用函數(shù),將p1所指向的內(nèi)容存儲(chǔ)到文件中
system("cls");
toxy(32,10);
printf("注冊(cè)成功!");
Sleep(500); //暫停0.5秒
toxy(32,12);
printf("正在自動(dòng)為您登陸....");
Sleep(500);
User_Menu(); //注冊(cè)成功后進(jìn)入主菜單
}
void User_Order()//點(diǎn)餐
{
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("餐桌列表(按任意鍵繼續(xù))");
toxy(2,8);
printf("餐桌編號(hào) | 可坐人數(shù) | 已坐人數(shù)");
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("請(qǐng)選擇餐桌號(hào):");
scanf("%d",&ID);
toxy(40,14);
printf("請(qǐng)選擇人數(shù):");
scanf("%d",&number);
T=Thead;
while(T!=NULL)
{
if(T->ID==ID)
{
if((T->count)-(T->People)>=number)
{
toxy(38,16);
printf("占座成功!按任意鍵繼續(xù)點(diǎn)餐");
flag=1;
break;
}
else
{
toxy(38,16);
printf("占座失??!該餐桌座位不夠");
flag=0;
break;
}
}
T=T->next;
}
if(T==NULL&&flag==0)
{
toxy(38,16);
printf("該餐桌編號(hào)不存在,請(qǐng)重新輸入");
Sleep(1000);
continue;
}
else if(T!=NULL&&flag==0)
{
toxy(38,17);
printf("是否繼續(xù) 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("點(diǎn)餐");
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價(jià)格");
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("請(qǐng)輸入您要點(diǎn)的菜名:");
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("點(diǎn)餐成功!是否繼續(xù)?1.是 2.否");
while(1)
{
t=getch();
if(t=='1')
break;
else if(t=='2')
break;
}
if(t=='2')
break;
}
else
{
toxy(36,10);
printf("沒有找到這道菜,請(qǐng)檢查您輸入的菜名是否正確!");
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價(jià)格");
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("請(qǐng)輸入您要點(diǎn)的菜名:");
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("點(diǎn)餐成功!是否繼續(xù)?1.是 2.否");
while(1)
{
t=getch();
if(t=='1')
break;
else if(t=='2')
break;
}
if(t=='2')
break;
}
else
{
toxy(36,10);
printf("沒有找到這道菜,請(qǐng)檢查您輸入的菜名是否正確!");
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價(jià)格");
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("請(qǐng)輸入您要點(diǎn)的菜名:");
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("點(diǎn)餐成功!是否繼續(xù)?1.是 2.否");
while(1)
{
t=getch();
if(t=='1')
break;
else if(t=='2')
break;
}
if(t=='2')
break;
}
else
{
toxy(36,10);
printf("沒有找到這道菜,請(qǐng)檢查您輸入的菜名是否正確!");
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("您還沒有點(diǎn)任何東西,趕緊去點(diǎn)吧!(按任意鍵返回)");
getch();
break;
}
else
{
toxy(26,6);
printf("我的訂單");
toxy(22,8);
printf("菜品名稱\t\t價(jià)格");
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("總價(jià): %.2f",totalPrice);
if(q->isVIP)
actualPayment=totalPrice*0.85;
else
actualPayment=totalPrice;
toxy(24,++i);
printf("實(shí)付: %.2f",actualPayment);
}
toxy(22,++i);
printf("1.確認(rèn)支付 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("餐桌列表(按任意鍵繼續(xù))");
toxy(22,8);
printf("餐桌編號(hào) | 可坐人數(shù) | 已坐人數(shù)");
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()//辦理會(huì)員
{
char t; //t用于選擇
do
{
system("cls");
system("color 75");
HideCursor(0);
pUser head=readUserFile();//從文件中讀取用戶信息,返回一個(gè)表頭地址
toxy(32,6);
printf("會(huì)員辦理");
toxy(30,8);
printf("1) 充值 ");
toxy(30,10);
printf("2) 辦理會(huì)員");
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,則跳出循環(huán),該函數(shù)生命周期結(jié)束,回到上一級(jí)菜單
break;
}while(1);
}
void Add_money(pUser head)//充值
{
float money;//輸入要充值的錢
pUser p;
p=head;//head為從 上一級(jí)菜單傳過來的參數(shù),為用戶信息鏈表的頭結(jié)點(diǎn)
while(p!=NULL&&strcmp(p->userName,_userName)!=0)//遍歷鏈表,尋找當(dāng)前登錄賬戶的信息
{
p=p->next;
}
while(1)
{
system("cls");
system("color 76");
toxy(32,6);
printf("南航餐飲充值中心");
if(p!=NULL)
{
if(p->isVIP==0)//如果不是會(huì)員
{
toxy(20,8);
printf("對(duì)不起,您還不是會(huì)員,請(qǐng)先辦理會(huì)員后再來充值!");
toxy(32,10);
printf("請(qǐng)按任意鍵返回!");
break;
}
else if(p->isVIP==1)//如果是會(huì)員
{
HideCursor(1);
toxy(32,8);
printf("請(qǐng)輸入充值金額(一次不少于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("請(qǐng)按任意鍵返回!");
break;
}
else//如果充值金額小于200
{
toxy(32,10);
printf("一次至少充值200元!");
Sleep(1500);
continue;
}
}
}
}
getch();
}
void Apply_VIP(pUser head)//辦理會(huì)員
{
system("cls");
system("color 76");
pUser p=head;//head為從 上一級(jí)菜單傳過來的參數(shù),為用戶信息鏈表的頭結(jié)點(diǎn)
char t;
float money;
toxy(32,6);
printf("南航餐飲會(huì)員辦理中心");
while(p!=NULL&&strcmp(p->userName,_userName)!=0)//遍歷鏈表,尋找當(dāng)前登錄賬戶的信息
{
p=p->next;
}
do
{
if(p!=NULL)
{
if(p->isVIP==1)//如果已經(jīng)是會(huì)員
{
toxy(20,8);
printf("您已是本店尊貴會(huì)員,無需再次辦理!");
toxy(32,10);
printf("請(qǐng)按任意鍵返回!");
getch();
break;
}
else if(p->isVIP==0)//如果還沒辦理會(huì)員
{
toxy(30,8);
printf("提示:");
toxy(30,9);
printf("1.辦理會(huì)員至少充值500");
toxy(30,10);
printf("2.沖500送200,沖1000送500");
toxy(32,12);
printf("是否確認(rèn)辦理會(huì)員?");
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("請(qǐng)輸入充值金額:");
scanf("%f",&money);
if(money>=500&&money<1000)
{
money+=200;
p->money+=money;
p->isVIP=1;
Updata_User(head);
toxy(32,12);
printf("恭喜,您已成為本店尊貴會(huì)員!");
toxy(32,14);
printf("請(qǐng)按任意鍵返回主菜單");
getch();
User_Menu();
}
else if(money>=1000)
{
money+=500;
p->money+=money;
p->isVIP=1;
Updata_User(head);
toxy(32,12);
printf("恭喜,您已成為本店尊貴會(huì)員!");
toxy(32,14);
printf("請(qǐng)按任意鍵返回主菜單");
getch();
User_Menu();
}
else
{
toxy(32,12);
printf("辦理會(huì)員至少充值500");
Sleep(2000);
}
}
}
else if(t=='2')
break;
}
}
}while(1);
}
void Updata_User(pUser head)//更新文件
{
FILE *fp;
pUser p=head->next; //使p指向第二個(gè)結(jié)點(diǎn)
fp=fopen("User.txt","w"); //先清空原文件內(nèi)容再將修改后的信息寫入文件
if(fp==NULL)
{
printf("cannot open file\n");
}
if(fwrite(head,M,1,fp)!=1) //將head所指向的數(shù)據(jù)寫入fp所指向的文件
{
printf("file write error\n");
}
fclose(fp); //關(guān)閉文件
fp=fopen("User.txt","a"); // 打開User.txt文件,方式為追加
while(p!=NULL) //p不為空就執(zhí)行循環(huán)體
{
if(fwrite(p,M,1,fp)!=1) //將p所指向的1個(gè)大小為N的數(shù)據(jù)結(jié)構(gòu)寫入fp所指向的文件
{
printf("file write error\n");
}
p=p->next; //使p指向下一個(gè)結(jié)點(diǎn)
}
fclose(fp); //關(guān)閉文件
}
void Amend_passWord()//修改密碼
{
system("cls"); //清屏
HideCursor(0); //隱藏光標(biāo),看著更舒服
pUser p,head;
head=readUserFile();
do
{
p=head;
char password[18],newpassword[18],t,k,*q1,*q2;
int i=0;
toxy(34,5); //將光標(biāo)移動(dòng)到坐標(biāo)為(50,5)的位置
printf("南航餐飲點(diǎn)餐系統(tǒng)");
toxy(34,8);
printf("修改密碼");
toxy(32,10);
printf("請(qǐng)輸入舊密碼:");
q1=HidePassword();
strcpy(password,q1);
toxy(32,12);
printf("請(qǐng)輸入新密碼:");
q2=HidePassword();
strcpy(newpassword,q2);
while(p!=NULL&&strcmp(p->userName,_userName)!=0)//遍歷鏈表,尋找當(dāng)前登陸賬戶的賬號(hào)
{
p=p->next;
}
if(p!=NULL) //如果p不為空
{
if(strcmp(p->passWord,password)==0) //如果舊密碼輸入正確
{
strcpy(p->passWord,newpassword); //將舊密碼改為新密碼
break; //跳出循環(huán)
}
else //如果舊密碼輸入錯(cuò)誤
{
system("cls");
toxy(30,8);
printf("--------------------------");
toxy(30,9);
printf("| |");
toxy(30,10);
printf("| 密碼錯(cuò)誤!是否繼續(xù)? |");
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); //永遠(yuǎn)為真
Updata_User(head);//修改密碼
toxy(32,14);
printf("修改成功!正在跳轉(zhuǎn)...");
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("請(qǐng)按任意鍵返回");
}
getch();
}
void Change()//切換賬號(hào)
{
system("cls");
Default();
}
void Exit()//退出點(diǎn)餐系統(tǒng)
{
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; //調(diào)用函數(shù),進(jìn)入菜單
default :break;
}
if(t=='2')
break;
}
}
void Administrator_Menu()//管理員菜單
{
char t;//用于選擇菜單選項(xiàng)
do
{
system("cls");
HideCursor(0); //隱藏光標(biāo)
system("color 74");
toxy(32,3);
printf("南航餐飲管理系統(tǒng)!");
toxy(32,4);
printf("當(dāng)前管理員:%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.本店 會(huì)員 |");
toxy(32,15);
printf("| 5.設(shè)置管理員 |");
toxy(32,17);
printf("| 6.修改 密碼 |");
toxy(32,19);
printf("| 7.切換 賬號(hào) |");
toxy(32,21);
printf("| 8.退出 系統(tǒng) |");
t=getch();//不回顯函數(shù),輸入一個(gè)值
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);//永遠(yuǎn) 為真
}
void Administrator_Login()//管理員登錄
{
char *q,t,c;//q指針用于接收 *HidePassword()函數(shù)返回的指向密碼的指針,t和c均用于選擇
pUser p=readUserFile();//從文件中讀取用戶信息,返回一個(gè)表頭地址
do
{
HideCursor(1);//顯示管光標(biāo)
system("cls");//清屏
system("color 73");//設(shè)置顏色
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);//將獲得的密碼復(fù)制給_passWord[]數(shù)組
while(p!=NULL&&strcmp(p->userName,_userName)!=0) //遍歷鏈表,尋找當(dāng)前輸入的賬戶的賬號(hào)
{
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; //跳出循環(huán)
}
else //如果輸入的密碼錯(cuò)誤
{
toxy(32,16);
printf("正在登陸....");
Sleep(500);
system("cls");
toxy(30,8);
printf("-------------------------");
toxy(30,9);
printf("| |");
toxy(30,10);
printf("| 密碼錯(cuò)誤!是否繼續(xù)? |");
toxy(30,12);
printf("| 1.是 2.否 |");
toxy(30,13);
printf("| |");
toxy(30,14);
printf("-------------------------");
while(1)//無限循環(huán)為防止其他按鍵干擾
{
t=getch(); //輸入t
if(t=='1')
{
system("cls"); //清屏
break;
}
else if(t=='2') //如果輸入t為n,進(jìn)入開始界面
{
system("cls"); //清屏
Default();break;
}
}
}
}
else //如果p為空,即輸入的賬號(hào)不正確
{
toxy(32,16);
printf("正在登陸....");
Sleep(500);
system("cls");
toxy(30,8);
printf("-------------------------");
toxy(30,9);
printf("| |");
toxy(30,10);
printf("| 賬號(hào)錯(cuò)誤!是否繼續(xù)? |");
toxy(30,11);
printf("| |");
toxy(30,12);
printf("| 1.是 2.否 |");
toxy(30,13);
printf("| |");
toxy(30,14);
printf("-------------------------");
while(1) //死循環(huán)防止其他按鍵干擾
{
c=getch();
if(c=='1')
{
system("cls");
break;
}
else if(c=='2')
{
system("cls"); //清屏
Default();
}
}
}
}while(1);
Sleep(500); //暫停0.5秒
Administrator_Menu(); //賬號(hào)密碼均正確,進(jìn)入管理員主菜單
}
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) 返回上一級(jí)");
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個(gè)大小為N的數(shù)據(jù)結(jié)構(gòu)寫入fp所指向的文件中
{
printf("file write error\n");
}
fclose(fp); //關(guān)閉文件
}
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個(gè)大小為N的數(shù)據(jù)結(jié)構(gòu)寫入fp所指向的文件中
{
printf("file write error\n");
}
fclose(fp); //關(guān)閉文件
}
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個(gè)大小為N的數(shù)據(jù)結(jié)構(gòu)寫入fp所指向的文件中
{
printf("file write error\n");
}
fclose(fp); //關(guān)閉文件
}
pStapleFood readStapleFoodFile()//從主食文件中讀取用戶信息,返回一個(gè)表頭地址
{
FILE *fp; //文件指針
int n=0;//記錄鏈表 的結(jié)點(diǎn)數(shù)
pStapleFood head=NULL;//定義頭指針
pStapleFood p2,p,pre;
fp=fopen("StapleFood.txt","a+"); //以只讀的方式打開文件
if(fp==NULL)
{
printf("cannot open file\n");
}
else
{
while(!feof(fp)) //判斷文件位置標(biāo)志是否移動(dòng)到文件末尾
{
n++;
p=(pStapleFood)malloc(N); //向內(nèi)存申請(qǐng)一段空間
fread(p,N,1,fp); //將fp所指向的文件中的內(nèi)容賦給p
if(n==1)
{
head=p;
p2=p;
}
else //創(chuàng)建鏈表
{
pre=p2;
p2->next=p;
p2=p;
}
}
p2->next=NULL;
}
if(n<=2)
head->next=NULL;
else
pre->next=NULL;
fclose(fp); //關(guān)閉文件
return head; //返回頭指針
}
pNon_stapleFood readNonStapleFoodFile()//從副食文件中讀取用戶信息,返回一個(gè)表頭地址
{
FILE *fp; //文件指針
int n=0;//記錄鏈表 的結(jié)點(diǎn)數(shù)
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)) //判斷文件位置標(biāo)志是否移動(dòng)到文件末尾
{
n++;
p=(pNon_stapleFood)malloc(P); //向內(nèi)存申請(qǐng)一段空間
fread(p,P,1,fp); //將fp所指向的文件中的內(nèi)容賦給p
if(n==1)
{
head=p;
p2=p;
}
else //創(chuàng)建鏈表
{
pre=p2;
p2->next=p;
p2=p;
}
}
p2->next=NULL;
}
if(n<=2)
head->next=NULL;
else
pre->next=NULL;
fclose(fp); //關(guān)閉文件
return head; //返回頭指針
}
pDrinkBeverage readDrinkBeverageFile()//從飲品文件中讀取用戶信息,返回一個(gè)表頭地址
{
FILE *fp; //文件指針
int n=0;//記錄鏈表 的結(jié)點(diǎn)數(shù)
pDrinkBeverage head=NULL;//定義頭指針
pDrinkBeverage p2,p,pre;
fp=fopen("DrinkBeverage.txt","a+"); //以只讀的方式打開文件
if(fp==NULL)
{
printf("cannot open file\n");
}
else
{
while(!feof(fp)) //判斷文件位置標(biāo)志是否移動(dòng)到文件末尾
{
n++;
p=(pDrinkBeverage)malloc(Q); //向內(nèi)存申請(qǐng)一段空間
fread(p,Q,1,fp); //將fp所指向的文件中的內(nèi)容賦給p
if(n==1)
{
head=p;
p2=p;
}
else //創(chuàng)建鏈表
{
pre=p2;
p2->next=p;
p2=p;
}
}
p2->next=NULL;
}
if(n<=2)
head->next=NULL;
else
pre->next=NULL;
fclose(fp); //關(guān)閉文件
return head; //返回頭指針
}
void Add_Food() //添加菜單
{
HideCursor(1);//顯示光標(biāo)
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("請(qǐng)輸入菜名:");
toxy(30,8);
printf("請(qǐng)輸入價(jià)格:");
toxy(30,10);
printf("請(qǐng)輸入類型:");
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("添加成功!是否繼續(xù)?(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("菜單列表(按任意鍵繼續(xù))");
pStapleFood p1;//主食
pNon_stapleFood p2;//副食
pDrinkBeverage p3;//飲品
p1=readStapleFoodFile();//從主食文件中讀取用戶信息,返回一個(gè)表頭地址
p2=readNonStapleFoodFile();//從副食文件中讀取用戶信息,返回一個(gè)表頭地址
p3=readDrinkBeverageFile();//從飲品文件中讀取用戶信息,返回一個(gè)表頭地址
toxy(26,6);
printf("菜名\t\t\t價(jià)格");
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) 返回上一級(jí)");
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個(gè)大小為N的數(shù)據(jù)結(jié)構(gòu)寫入fp所指向的文件中
{
printf("file write error\n");
}
fclose(fp); //關(guān)閉文件
}
pTable readTableFile()//從餐桌文件中讀取用戶信息,返回一個(gè)表頭地址
{
FILE *fp; //文件指針
int n=0;//記錄鏈表 的結(jié)點(diǎn)數(shù)
pTable head=NULL;//定義頭指針
pTable p2,p,pre;
fp=fopen("Table.txt","a+"); //以只讀的方式打開文件
if(fp==NULL)
{
printf("cannot open file\n");
}
else
{
while(!feof(fp)) //判斷文件位置標(biāo)志是否移動(dòng)到文件末尾
{
n++;
p=(pTable)malloc(X); //向內(nèi)存申請(qǐng)一段空間
fread(p,X,1,fp); //將fp所指向的文件中的內(nèi)容賦給p
if(n==1)
{
head=p;
p2=p;
}
else //創(chuàng)建鏈表
{
pre=p2;
p2->next=p;
p2=p;
}
}
p2->next=NULL;
}
if(n<=2)
head->next=NULL;
else
pre->next=NULL;
fclose(fp); //關(guān)閉文件
return head; //返回頭指針
}
void Add_Table()//添加餐桌
{
HideCursor(1);//顯示光標(biāo)
pTable p,p1;
p1=readTableFile();
char t;
int ID;
int count;
do
{
system("cls");
p=(pTable)malloc(X);
toxy(26,6);
printf("請(qǐng)輸入餐桌編號(hào):");
toxy(26,8);
printf("請(qǐng)輸入可坐人數(shù):");
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("該餐桌編號(hào)已存在,請(qǐng)重新輸入!");
Sleep(2000);
continue;
}
p->ID=ID;
p->People=0;
p->count=count;
strcpy(p->Username,"無");
save_Table(p);
toxy(24,10);
printf("添加成功!是否繼續(xù)?(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("餐桌列表(按任意鍵繼續(xù))");
toxy(22,8);
printf("餐桌編號(hào) | 可坐人數(shù) | 已坐人數(shù) | 訂餐人");
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) 返回上一級(jí)");
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指向第二個(gè)結(jié)點(diǎn)
fp=fopen("Table.txt","w"); //先清空原文件內(nèi)容再將修改后的信息寫入文件
if(fp==NULL)
{
printf("cannot open file\n");
}
if(fwrite(head,X,1,fp)!=1) //將head所指向的數(shù)據(jù)寫入fp所指向的文件
{
printf("file write error\n");
}
fclose(fp); //關(guān)閉文件
fp=fopen("Table.txt","a"); // 打開User.txt文件,方式為追加
while(p!=NULL) //p不為空就執(zhí)行循環(huán)體
{
if(fwrite(p,X,1,fp)!=1) //將p所指向的1個(gè)大小為N的數(shù)據(jù)結(jié)構(gòu)寫入fp所指向的文件
{
printf("file write error\n");
}
p=p->next; //使p指向下一個(gè)結(jié)點(diǎn)
}
fclose(fp); //關(guān)閉文件
}
void Clear_oneTable()//清理指定餐桌
{
int ID;
pTable p,head;
char t;
do
{
system("cls");
head=readTableFile();
p=head;
toxy(28,8);
printf("請(qǐng)輸入您要清理的餐桌編號(hào):");
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("清理成功!是否繼續(xù)?1.是 2.否");
while(1)
{
t=getch();
if(t=='1')
break;
else if(t=='2')
break;
}
if(t=='2')
break;
}
else
{
toxy(32,10);
printf("該餐桌不存在!請(qǐng)重新輸入");
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("清理成功!按任意鍵繼續(xù)");
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)返回上一級(jí)");
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("請(qǐng)輸入您要查找的用戶名:");
scanf("%s",username);
toxy(24,12);
printf("用戶名\t\t余額\t\t會(huì)員狀態(tài)");
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("沒有找到相關(guān)信息");
}
toxy(30,16);
printf("請(qǐng)按任意鍵返回");
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會(huì)員狀態(tài)");
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("本店會(huì)員");
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()//設(shè)置管理員
{
system("color 80");
char t;
char username[10];
pUser p,head;
head=readUserFile();
do
{
system("cls");
p=head;
toxy(26,8);
printf("請(qǐng)輸入您要設(shè)置為管理員的用戶名:");
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("設(shè)置成功!請(qǐng)按任意鍵返回");
getch();
break;
}
else
{
toxy(24,10);
printf("您所輸入的用戶名不存在!是否繼續(xù)?(1.是 2.否)");
while(1)
{
t=getch();
if(t=='1')
break;
else if(t=='2')
break;
}
if(t=='2')
break;
}
}while(1);
}
int main()
{
Default();//進(jìn)入歡迎界面
return 0;
}
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
上一篇:OpenCV鼠標(biāo)繪制矩形和截取矩形區(qū)域圖像
欄 目:C語言
下一篇:C++11/14 線程的創(chuàng)建與分離的實(shí)現(xiàn)
本文標(biāo)題:C語言實(shí)現(xiàn)餐飲點(diǎn)餐管理系統(tǒng)
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/485.html
您可能感興趣的文章
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用函數(shù)刪除字符
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)式函數(shù)庫
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言中對(duì)數(shù)函數(shù)的表達(dá)式 c語言中對(duì)數(shù)怎么表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段函數(shù)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排序法函數(shù)
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段函數(shù)
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求階乘


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對(duì)數(shù)函數(shù)的表達(dá)式 c語言中對(duì)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-10C#中split用法實(shí)例總結(jié)
- 01-10delphi制作wav文件的方法
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 04-02jquery與jsp,用jquery
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 08-05織夢dedecms什么時(shí)候用欄目交叉功能?
- 08-05DEDE織夢data目錄下的sessions文件夾有什


