91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用C語言怎么實現一個餐飲點餐管理系統

發布時間:2021-04-20 17:28:11 來源:億速云 閱讀:456 作者:Leah 欄目:編程語言

使用C語言怎么實現一個餐飲點餐管理系統?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

C語言是什么

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語言怎么實現一個餐飲點餐管理系統問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

余江县| 宜丰县| 沈丘县| 越西县| 宜川县| 芷江| 东兰县| 宁陕县| 青州市| 常州市| 清徐县| 祥云县| 乐平市| 花莲市| 威海市| 林芝县| 蒙阴县| 重庆市| 成都市| 深水埗区| 衡阳县| 海淀区| 无棣县| 南江县| 屏边| 库伦旗| 伊春市| 昆山市| 大丰市| 奉化市| 股票| 北川| 阿瓦提县| 龙里县| 衡阳县| 枣强县| 嘉义市| 许昌市| 酉阳| 正阳县| 顺义区|