C語言實現(xiàn)簡單餐飲管理與點餐系統(tǒng)
更新時間:2022年05月30日 08:44:29 作者:Sriven
這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單餐飲管理與點餐系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了C語言實現(xiàn)餐飲管理與點餐系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
/* ?? ?項目名稱:南航餐飲管理系統(tǒng) ?? ?組員:梁文新,劉青林,劉藝,施瑞文(組長) */ ? ? //當注冊用戶名為:root,密碼為:root的賬號時,系統(tǒng)默認為初始管理員 ? //頭文件? #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;//會員標記? ?? ?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;//已坐人數(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();//注冊界面? 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();//設(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();//從主食文件中讀取用戶信息,返回一個表頭地址 ? 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();//餐桌列表? ? ? ?? ?//公共函數(shù) void toxy(int x,int y);//將光標移動到x,y坐標處 void HideCursor(int x);//隱藏光標? char *HidePassword();//隱藏密碼? void Exit();//退出系統(tǒng) ? void Change();//切換賬號? void Amend_passWord();//修改密碼? void List_Food();//菜單列表? ? //全局變量區(qū) char _userName[10];? char _passWord[18];//記錄當前用戶? pOrder orderHead=NULL,p2=NULL;//記錄當前用戶的訂單? int num=0; ? //函數(shù)實現(xiàn)區(qū) ? 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) ? ?//死循環(huán)為防止其他按鍵干擾? ?? ??? ?{ ?? ??? ??? ?t=getch();//不回顯函數(shù)? ?? ??? ??? ?if(t=='1')//如果按1,則進入登錄界面? ?? ??? ??? ??? ?User_Login(); ?? ??? ??? ?else if(t=='2')//如果按2,則進入注冊界面? ?? ??? ??? ??? ?Logon(); ?? ??? ??? ?else if(t=='3') ?? ??? ??? ??? ?Administrator_Login(); ?? ??? ?}//如果既不是1也不是2和3,則循環(huán)輸入? ?? ?}while(1);//永遠為真? ?? ? }? ? void User_Menu()//用戶菜單? { ?? ? ?? ?char t;//用于選擇菜單選項? ?? ?do ?? ?{?? ? ?? ??? ?system("cls"); ?? ??? ?HideCursor(0); //隱藏光標? ?? ??? ?system("color 74"); ?? ??? ?toxy(32,3); ?? ??? ?printf("南航餐飲點餐系統(tǒng)!"); ?? ??? ?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ǒng) ?|"); ?? ??? ?t=getch();//不回顯函數(shù),輸入一個值? ?? ??? ?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;//記錄密碼位數(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("*"); ? ? ?//輸出*號,保護用戶隱私? ?? ??? ??? ??? ?i++; ? ? ? ? ? ? ?//密碼位數(shù)加1? ?? ??? ??? ?} ?? ??? ?} ?? ??? ?password[i]='\0';//在數(shù)組末端加一個結(jié)束符? ?? ??? ?p=password;//讓p指向該數(shù)組? ?? ??? ?return p; //返回一個指向密碼的指針? }? ? pUser readUserFile()//從文件中讀取用戶信息,返回一個表頭地址? { ?? ?FILE *fp; ? ? ? //文件指針? ?? ?int n=0;//記錄鏈表 的結(jié)點數(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)) ? ? ? ?//判斷文件位置標志是否移動到文件末尾? ?? ??? ?{ ?? ??? ? ? ?n++; ?? ??? ??? ?p=(pUser)malloc(M); //向內(nèi)存申請一段空間? ?? ??? ? ? 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)容存儲到文件中? { ?? ?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的數(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();//從文件中讀取用戶信息,返回一個表頭地址? ?? ?do ?? ?{ ?? ??? ?HideCursor(1);//顯示管光標? ?? ??? ?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);//將獲得的密碼復制給_passWord[]數(shù)組? ?? ??? ?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; ? ?//跳出循環(huán) ?? ??? ??? ?} ?? ??? ??? ?else ? ? ?//如果輸入的密碼錯誤 ?? ??? ??? ?{? ?? ??? ??? ??? ?toxy(32,16); ?? ??? ??? ??? ?printf("正在登陸...."); ?? ??? ??? ??? ?Sleep(500); ?? ??? ??? ??? ?system("cls"); ?? ??? ??? ??? ?toxy(30,8); ?? ??? ??? ??? ?printf("-------------------------"); ?? ??? ??? ??? ?toxy(30,9); ?? ??? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? |"); ?? ??? ??? ??? ?toxy(30,10); ?? ??? ??? ??? ?printf("| 密碼錯誤!是否繼續(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,進入開始界面? ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?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("| ?賬號錯誤!是否繼續(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(); ? ? ? ? //賬號密碼均正確,進入用戶主菜單? }? ? void Logon()//注冊界面 { ?? ?pUser p1;? ?? ?pUser p=readUserFile();//從文件中讀取用戶信息,返回一個表頭地址? ?? ?p1=(pUser)malloc(M); ? ? //向內(nèi)存申請一段空間? ?? ?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);//顯示光標? ?? ??? ?int flag=0;//標記信息庫中是否存在要注冊用戶名? ?? ??? ?toxy(28,8); ?? ??? ?printf("南航餐飲管理系統(tǒng)注冊界面"); ?? ??? ?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;//跳出循環(huán)? ?? ??? ??? ?} ?? ??? ??? ?p=p->next; ?? ??? ?} ?? ??? ?if(flag)//如果用戶名已存在? ?? ??? ?{ ?? ??? ??? ?HideCursor(0);//隱藏光標? ?? ??? ??? ?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ù),則重新注冊? ?? ??? ??? ??? ?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("正在注冊...."); ?? ??? ??? ?Sleep(500); ?? ??? ??? ?break; ? ? ? ? ? ? ?//跳出循環(huán)? ?? ??? ?} ?? ??? ?else ? ?//如果輸入的兩次密碼不同? ?? ??? ?{ ?? ??? ??? ?toxy(32,16); ?? ??? ??? ?printf("正在注冊...."); ?? ??? ??? ?Sleep(500); ?? ??? ??? ?system("cls"); ?? ??? ??? ?toxy(30,8); ?? ??? ??? ?printf("------------------------------"); ?? ??? ??? ?toxy(30,9); ?? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? ? ? ?|"); ?? ??? ??? ?toxy(30,10); ?? ??? ??? ?printf("|兩次密碼不一致!是否繼續(xù)注冊?|"); ?? ??? ??? ?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)容存儲到文件中? ?? ?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("餐桌列表(按任意鍵繼續(xù))"); ?? ??? ??? ?toxy(2,8); ?? ??? ??? ?printf("餐桌編號 | 可坐人數(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("請選擇餐桌號:"); ?? ??? ??? ?scanf("%d",&ID); ?? ??? ??? ?toxy(40,14); ?? ??? ??? ?printf("請選擇人數(shù):"); ?? ??? ??? ?scanf("%d",&number); ?? ??? ??? ?T=Thead; ?? ??? ??? ?while(T!=NULL) ?? ??? ??? ?{ ?? ??? ??? ??? ?if(T->ID==ID) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?if((T->count)-(T->People)>=number) ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?toxy(38,16); ?? ??? ??? ??? ??? ??? ?printf("占座成功!按任意鍵繼續(xù)點餐"); ?? ??? ??? ??? ??? ??? ?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("是否繼續(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("點餐"); ?? ??? ??? ?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("點餐成功!是否繼續(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("沒有找到這道菜,請檢查您輸入的菜名是否正確!"); ?? ??? ??? ?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("點餐成功!是否繼續(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("沒有找到這道菜,請檢查您輸入的菜名是否正確!"); ?? ??? ??? ?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("點餐成功!是否繼續(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("沒有找到這道菜,請檢查您輸入的菜名是否正確!"); ?? ??? ??? ?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("餐桌列表(按任意鍵繼續(xù))"); ?? ?toxy(22,8); ?? ?printf("餐桌編號 | 可坐人數(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()//辦理會員 { ?? ?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,則跳出循環(huán),該函數(shù)生命周期結(jié)束,回到上一級菜單? ?? ??? ??? ?break; ?? ?}while(1); }? ? void Add_money(pUser head)//充值 { ?? ?float money;//輸入要充值的錢? ?? ?pUser p; ?? ?p=head;//head為從 上一級菜單傳過來的參數(shù),為用戶信息鏈表的頭結(jié)點? ?? ?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為從 上一級菜單傳過來的參數(shù),為用戶信息鏈表的頭結(jié)點 ?? ?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)//如果已經(jīng)是會員? ?? ??? ??? ?{ ?? ??? ??? ??? ?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指向第二個結(jié)點? ?? ?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個大小為N的數(shù)據(jù)結(jié)構(gòu)寫入fp所指向的文件? ?? ? ? ?{ ?? ??? ??? ?printf("file write error\n"); ?? ? ? ?} ?? ? ? ?p=p->next; ? ? ? ? ? ? ? ? ? ? //使p指向下一個結(jié)點? ?? ?} ?? ?fclose(fp); ? ? ? ? ? ? ?//關(guān)閉文件? }? ? 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("南航餐飲點餐系統(tǒng)"); ?? ??? ?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; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //跳出循環(huán)? ?? ??? ??? ?} ?? ??? ??? ?else ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //如果舊密碼輸入錯誤? ?? ??? ??? ?{ ?? ??? ??? ??? ?system("cls"); ?? ??? ??? ??? ?toxy(30,8); ?? ??? ??? ??? ?printf("--------------------------"); ?? ??? ??? ??? ?toxy(30,9); ?? ??? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? ?|"); ?? ??? ??? ??? ?toxy(30,10); ?? ??? ??? ??? ?printf("| ?密碼錯誤!是否繼續(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); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//永遠為真? ?? ?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("請按任意鍵返回"); ?? ?} ?? ?getch(); }? ? void Change()//切換賬號? { ?? ?system("cls"); ?? ?Default(); } ? void Exit()//退出點餐系統(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ù),進入菜單? ?? ??? ??? ?default :break; ?? ??? ?} ?? ??? ?if(t=='2') ?? ??? ??? ?break; ?? ?} ?}? ? void Administrator_Menu()//管理員菜單 { ?? ?char t;//用于選擇菜單選項? ?? ?do ?? ?{?? ? ?? ??? ?system("cls"); ?? ??? ?HideCursor(0); //隱藏光標? ?? ??? ?system("color 74"); ?? ??? ?toxy(32,3); ?? ??? ?printf("南航餐飲管理系統(tǒng)!"); ?? ??? ?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.設(shè)置管理員 ?|");? ?? ??? ?toxy(32,17); ?? ??? ?printf("| ?6.修改 ?密碼 ?|"); ?? ??? ?toxy(32,19); ?? ??? ?printf("| ?7.切換 ?賬號 ?|");? ?? ??? ?toxy(32,21); ?? ??? ?printf("| ?8.退出 ?系統(tǒng) ?|");? ?? ??? ?t=getch();//不回顯函數(shù),輸入一個值? ?? ??? ?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()函數(shù)返回的指向密碼的指針,t和c均用于選擇? ?? ?pUser p=readUserFile();//從文件中讀取用戶信息,返回一個表頭地址? ?? ?do ?? ?{ ?? ??? ?HideCursor(1);//顯示管光標? ?? ??? ?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);//將獲得的密碼復制給_passWord[]數(shù)組? ?? ??? ?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; ? ?//跳出循環(huán) ?? ??? ??? ?} ?? ??? ??? ?else ? ? ?//如果輸入的密碼錯誤 ?? ??? ??? ?{? ?? ??? ??? ??? ?toxy(32,16); ?? ??? ??? ??? ?printf("正在登陸...."); ?? ??? ??? ??? ?Sleep(500); ?? ??? ??? ??? ?system("cls"); ?? ??? ??? ??? ?toxy(30,8); ?? ??? ??? ??? ?printf("-------------------------"); ?? ??? ??? ??? ?toxy(30,9); ?? ??? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? |"); ?? ??? ??? ??? ?toxy(30,10); ?? ??? ??? ??? ?printf("| 密碼錯誤!是否繼續(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,進入開始界面? ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?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("| ?賬號錯誤!是否繼續(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(); ? ? ? ? //賬號密碼均正確,進入管理員主菜單? ?}? ? 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的數(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個大小為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個大小為N的數(shù)據(jù)結(jié)構(gòu)寫入fp所指向的文件中? ?? ?{ ?? ??? ?printf("file write error\n"); ?? ?} ?? ?fclose(fp); ? ? ? ?//關(guān)閉文件? }? ? pStapleFood readStapleFoodFile()//從主食文件中讀取用戶信息,返回一個表頭地址? { ?? ?FILE *fp; ? ? ? //文件指針? ?? ?int n=0;//記錄鏈表 的結(jié)點數(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)) ? ? ? ?//判斷文件位置標志是否移動到文件末尾? ?? ??? ?{ ?? ??? ? ? ?n++; ?? ??? ??? ?p=(pStapleFood)malloc(N); //向內(nèi)存申請一段空間? ?? ??? ? ? 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()//從副食文件中讀取用戶信息,返回一個表頭地址 { ?? ?FILE *fp; ? ? ? //文件指針? ?? ?int n=0;//記錄鏈表 的結(jié)點數(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)) ? ? ? ?//判斷文件位置標志是否移動到文件末尾? ?? ??? ?{ ?? ??? ? ? ?n++; ?? ??? ??? ?p=(pNon_stapleFood)malloc(P); //向內(nèi)存申請一段空間? ?? ??? ? ? 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()//從飲品文件中讀取用戶信息,返回一個表頭地址 { ?? ?FILE *fp; ? ? ? //文件指針? ?? ?int n=0;//記錄鏈表 的結(jié)點數(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)) ? ? ? ?//判斷文件位置標志是否移動到文件末尾? ?? ??? ?{ ?? ??? ? ? ?n++; ?? ??? ??? ?p=(pDrinkBeverage)malloc(Q); //向內(nèi)存申請一段空間? ?? ??? ? ? 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);//顯示光標? ?? ?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("添加成功!是否繼續(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();//從主食文件中讀取用戶信息,返回一個表頭地址? ?? ?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的數(shù)據(jù)結(jié)構(gòu)寫入fp所指向的文件中? ?? ?{ ?? ??? ?printf("file write error\n"); ?? ?} ?? ?fclose(fp); ? ? ? ?//關(guān)閉文件? }? ? pTable readTableFile()//從餐桌文件中讀取用戶信息,返回一個表頭地址 { ?? ?FILE *fp; ? ? ? //文件指針? ?? ?int n=0;//記錄鏈表 的結(jié)點數(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)) ? ? ? ?//判斷文件位置標志是否移動到文件末尾? ?? ??? ?{ ?? ??? ? ? ?n++; ?? ??? ??? ?p=(pTable)malloc(X); //向內(nèi)存申請一段空間? ?? ??? ? ? 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);//顯示光標? ?? ?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("請輸入可坐人數(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("該餐桌編號已存在,請重新輸入!"); ?? ??? ??? ?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("餐桌編號 | 可坐人數(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) 返回上一級"); ?? ??? ?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指向第二個結(jié)點? ?? ?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個大小為N的數(shù)據(jù)結(jié)構(gòu)寫入fp所指向的文件? ?? ? ? ?{ ?? ??? ??? ?printf("file write error\n"); ?? ? ? ?} ?? ? ? ?p=p->next; ? //使p指向下一個結(jié)點? ?? ?} ?? ?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("請輸入您要清理的餐桌編號:"); ?? ??? ?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("該餐桌不存在!請重新輸入"); ?? ??? ??? ?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)返回上一級"); ?? ??? ?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會員狀態(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("請按任意鍵返回"); ?? ?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會員狀態(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("本店會員"); ?? ?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("請輸入您要設(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è)置成功!請按任意鍵返回"); ?? ??? ??? ?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();//進入歡迎界面? ?? ?return 0; }
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
淺析C++中memset,memcpy,strcpy的區(qū)別
本篇文章是對C++中memset,memcpy,strcpy的區(qū)別進行了詳細的分析介紹,需要的朋友參考下2013-07-07C++命名空間using?namespace?std是什么意思
namespace中文意思是命名空間或者叫名字空間,傳統(tǒng)的C++只有一個全局的namespace,下面這篇文章主要給大家介紹了關(guān)于C++命名空間using?namespace?std是什么意思的相關(guān)資料,需要的朋友可以參考下2023-01-01C++代碼和可執(zhí)行程序在x86和arm上的區(qū)別介紹
這篇文章主要介紹了C++代碼和可執(zhí)行程序在x86和arm上的區(qū)別,X86和ARM是占據(jù)CPU市場的兩大處理器,各有優(yōu)劣,本文給大家詳細介紹了兩者的區(qū)別,需要的朋友可以參考下2022-07-07詳解如何在C/C++中測量一個函數(shù)或功能的運行時間
本文算是一個比較完整的關(guān)于在 C/C++ 中測量一個函數(shù)或者功能的總結(jié),最后會演示三種方法的對比,文章通過代碼示例給大家介紹的非常詳細,需要的朋友可以參考下2023-12-12