鱼C论坛

 找回密码
 立即注册
查看: 2115|回复: 9

[已解决]急求作业题酒店点菜系统

[复制链接]
发表于 2020-12-22 18:44:39 From FishC Mobile | 显示全部楼层 |阅读模式
50鱼币
本帖最后由 ccczd666 于 2020-12-22 19:07 编辑

感谢大佬帮助,最好不用指针
最佳答案
2020-12-22 18:44:40
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5.     int num,m,n;
  6.     printf("欢迎光临\n");
  7.     printf("请选择餐桌号: ");
  8.     scanf("%d",&m);
  9.     printf("成功占座%d号!",m);
  10.     printf("1.酸菜鱼  2.宫保鸡丁 3.可口可乐\n");
  11.     printf("你好,请点餐:");
  12.     while(1)
  13.     {
  14.         scanf("%d",&n);
  15.     printf("1.确认 2.返回");
  16.     scanf("%d",&num);
  17.     if(num==1)
  18.         break;
  19.     else
  20.     {
  21.         return 0;
  22.         break;
  23.     }

  24.     }

  25.     switch(n)
  26.     {
  27.         case 1:printf("成功点餐酸菜鱼");break;
  28.         case 2:printf("成功点餐宫保鸡丁");break;
  29.         case 3:printf("成功点餐可口可乐");break;
  30.         default :printf("你走吧,小店没有你要的");
  31.     }

  32. }
复制代码
IMG_20201222_144059.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-22 18:44:40 | 显示全部楼层    本楼为最佳答案   
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5.     int num,m,n;
  6.     printf("欢迎光临\n");
  7.     printf("请选择餐桌号: ");
  8.     scanf("%d",&m);
  9.     printf("成功占座%d号!",m);
  10.     printf("1.酸菜鱼  2.宫保鸡丁 3.可口可乐\n");
  11.     printf("你好,请点餐:");
  12.     while(1)
  13.     {
  14.         scanf("%d",&n);
  15.     printf("1.确认 2.返回");
  16.     scanf("%d",&num);
  17.     if(num==1)
  18.         break;
  19.     else
  20.     {
  21.         return 0;
  22.         break;
  23.     }

  24.     }

  25.     switch(n)
  26.     {
  27.         case 1:printf("成功点餐酸菜鱼");break;
  28.         case 2:printf("成功点餐宫保鸡丁");break;
  29.         case 3:printf("成功点餐可口可乐");break;
  30.         default :printf("你走吧,小店没有你要的");
  31.     }

  32. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-22 20:16:16 | 显示全部楼层

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

  2. //头文件
  3. #include<stdio.h>
  4. #include<stdlib.h>
  5. #include<time.h>
  6. #include<conio.h>
  7. #include<windows.h>
  8. #include<string.h>


  9. //宏定义区
  10. #define M  sizeof(struct User)//用户表的大小
  11. #define N  sizeof(struct stapleFood)//主食 表大小
  12. #define P  sizeof(struct non_stapleFood)//副食表大小
  13. #define Q  sizeof(struct Drink_beverage) //饮品表大小
  14. #define X  sizeof(struct Table)//餐桌表大小
  15. #define Y  sizeof(struct Form)//订单表大小

  16. //结构体

  17. struct User    //用户表
  18. {
  19.         char userName[10];//用户名
  20.         char passWord[18];//密码
  21.         int isVIP;//会员标记
  22.         int isAdministrator;//管理员标记
  23.         float money;//余额
  24.         struct User *next;//指针域
  25. };
  26. typedef struct User user;
  27. typedef user* pUser;

  28. struct stapleFood   //主食
  29. {
  30.         char name[20];
  31.         float price;
  32.         struct stapleFood *next;
  33. };
  34. typedef struct stapleFood staple_food;
  35. typedef staple_food *pStapleFood;

  36. struct non_stapleFood   //副食
  37. {
  38.         char name[20];
  39.         float price;
  40.         struct non_stapleFood *next;
  41. };
  42. typedef struct non_stapleFood non_staple_food;
  43. typedef non_staple_food *pNon_stapleFood;

  44. struct Drink_beverage  //饮品
  45. {
  46.         char name[20];
  47.         float price;
  48.         struct Drink_beverage *next;
  49. };
  50. typedef struct Drink_beverage drinkBeverage;
  51. typedef drinkBeverage *pDrinkBeverage;

  52. struct Table   //餐桌
  53. {
  54.         int ID;//餐桌编号
  55.         int People;//已坐人数
  56.         int count;//可容纳人数
  57.         char Username[10];//订餐人
  58.         struct Table *next;
  59. };
  60. typedef struct Table table;
  61. typedef table *pTable;


  62. struct Form    //订单
  63. {
  64.         char name[20];
  65.         float price;
  66.         struct Form *next;
  67. };
  68. typedef struct Form orderForm;
  69. typedef orderForm *pOrder;


  70. //自定义函数区

  71.         //用户客户端

  72. void Default();//欢迎界面
  73. void User_Login();//用户登录界面
  74. void Logon();//注册界面
  75. pUser readUserFile();//从文件中读取用户信息,返回一个表头地址
  76. void save_User(pUser p1);//将用户信息保存到文件中
  77. void User_Menu();//用户菜单  
  78. void User_Order();//点餐
  79. void Order_StapleFood();//主食
  80. void Order_nonStapleFood();//副食
  81. void Order_DrinkBeverage();//饮品
  82. void Order_Form(int ID,int number);//订单
  83. void User_List_Table();//餐桌列表
  84. void Apply_VIP_Menu();//会员办理菜单
  85. void Add_money(pUser head);//充值
  86. void Updata_User(pUser head);//更新用户表
  87. void Apply_VIP(pUser head);//办理会员
  88. void User_Wallet();//我的钱包


  89.         //管理员客户端
  90. void Administrator_Menu();//管理员菜单
  91. void Administrator_Login();//管理员登录
  92. void Check_User();//查看用户
  93. void Find_User();//查找用户
  94. void All_User();//查看所有用户
  95. void All_VIP();//本店会员
  96. void Setup_administrator();//设置管理员
  97. void Food();//菜品信息
  98. void Add_Food();//添加菜单
  99. void save_stapleFood(pStapleFood p);//保存主食信息
  100. void save_non_stapleFood(pNon_stapleFood p);//保存副食信息
  101. void save_drinkBeverage(pDrinkBeverage p);//保存饮品信息
  102. pStapleFood readStapleFoodFile();//从主食文件中读取用户信息,返回一个表头地址  
  103. pNon_stapleFood readNonStapleFoodFile();//从副食文件中读取用户信息,返回一个表头地址
  104. pDrinkBeverage readDrinkBeverageFile();//从饮品文件中读取用户信息,返回一个表头地址
  105. void Table();//餐桌管理
  106. void Add_Table();//添加餐桌
  107. void save_Table(pTable p);//保存餐桌信息
  108. pTable readTableFile(); //从餐桌文件中读取用户信息,返回一个表头地址
  109. void Clear_Table();//清理餐桌
  110. void Clear_oneTable();//清理指定餐桌
  111. void Clear_allTable();//清理所有餐桌
  112. void Updata_Table(pTable head);//更新餐桌文件
  113. void Administrator_List_Table();//餐桌列表


  114.         //公共函数
  115. void toxy(int x,int y);//将光标移动到x,y坐标处
  116. void HideCursor(int x);//隐藏光标
  117. char *HidePassword();//隐藏密码
  118. void Exit();//退出系统  
  119. void Change();//切换账号
  120. void Amend_passWord();//修改密码
  121. void List_Food();//菜单列表

  122. //全局变量区
  123. char _userName[10];
  124. char _passWord[18];//记录当前用户
  125. pOrder orderHead=NULL,p2=NULL;//记录当前用户的订单
  126. int num=0;

  127. //函数实现区

  128. void toxy(int x,int y)//将光标移动到x,y坐标处
  129. {
  130.         COORD pos={x,y};
  131.         HANDLE Out = GetStdHandle(STD_OUTPUT_HANDLE);
  132.         SetConsoleCursorPosition(Out,pos);
  133. }

  134. void HideCursor(int x)//隐藏光标 ,当x为0时,隐藏,为1时,显示
  135. {
  136.         CONSOLE_CURSOR_INFO cursor_info ={1,x};
  137.         SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
  138. }

  139. void Default()//欢迎界面
  140. {
  141.         char t;//用于选择
  142.         do
  143.         {
  144.                 HideCursor(0); //隐藏光标
  145.                 system("color 72");
  146.                 toxy(28,8);
  147.                 printf("     欢迎来到南航餐饮!    ");
  148.                 toxy(26,9);
  149.                 printf("-----------------------------");
  150.                 toxy(27,11);
  151.                 printf("1.登录  2.注册  3.管理员登录");
  152.                 while(1)    //死循环为防止其他按键干扰
  153.                 {
  154.                         t=getch();//不回显函数
  155.                         if(t=='1')//如果按1,则进入登录界面
  156.                                 User_Login();
  157.                         else if(t=='2')//如果按2,则进入注册界面
  158.                                 Logon();
  159.                         else if(t=='3')
  160.                                 Administrator_Login();
  161.                 }//如果既不是1也不是2和3,则循环输入
  162.         }while(1);//永远为真
  163.        
  164. }

  165. void User_Menu()//用户菜单
  166. {
  167.        
  168.         char t;//用于选择菜单选项
  169.         do
  170.         {       
  171.                 system("cls");
  172.                 HideCursor(0); //隐藏光标
  173.                 system("color 74");
  174.                 toxy(32,3);
  175.                 printf("南航餐饮点餐系统!");
  176.                 toxy(32,4);
  177.                 printf("当前用户:%s",_userName);
  178.                 toxy(30,5);
  179.                 printf("*********************");
  180.                 toxy(32,7);
  181.                 printf("|  1.菜单列表  |");
  182.                 toxy(32,9);
  183.                 printf("|  2.餐桌列表  |");
  184.                 toxy(32,11);
  185.                 printf("|  3.会员办理  |");
  186.                 toxy(32,13);
  187.                 printf("|  4.修改密码  |");
  188.                 toxy(32,15);
  189.                 printf("|  5.我的钱包  |");
  190.                 toxy(32,17);
  191.                 printf("|  6.切换账号  |");
  192.                 toxy(32,19);
  193.                 printf("|  7.退出系统  |");
  194.                 t=getch();//不回显函数,输入一个值
  195.                 switch(t)
  196.                 {
  197.                         case '1':User_Order();break;
  198.                         case '2':User_List_Table();break;
  199.                         case '3':Apply_VIP_Menu();break;
  200.                         case '4':Amend_passWord();break;
  201.                         case '5':User_Wallet();break;
  202.                         case '6':Change();break;
  203.                         case '7':Exit();break;
  204.                         default :break;
  205.                 }
  206.         }while(1);//永远 为真
  207. }

  208. char *HidePassword()//隐藏密码
  209. {
  210.         char password[18];//密码
  211.         char *p;//指向密码的指针
  212.         int i=0;//记录密码位数
  213.         char t;//输入密码
  214.         for(;;)              //此处为输入密码不回显操作
  215.                 {
  216.                         t=getch();       //输入k
  217.                         if(t=='\r')      //如果输入k为回车,则跳出循环
  218.                         {
  219.                                 break;
  220.                         }
  221.                         else if(t=='\b')  //如果输入k为删除键
  222.                         {
  223.                                 if(i>0)       //如若密码还没完全删除
  224.                                 {
  225.                                         printf("\b");
  226.                                         printf(" ");
  227.                                         printf("\b");
  228.                                         i--;
  229.                                 }
  230.                         }
  231.                         else              //如果输入的k既不是删除键,也不是回车键
  232.                         {
  233.                                 password[i]=t;   //把k的值赋给_password[i];
  234.                                 printf("*");      //输出*号,保护用户隐私
  235.                                 i++;              //密码位数加1
  236.                         }
  237.                 }
  238.                 password[i]='\0';//在数组末端加一个结束符
  239.                 p=password;//让p指向该数组
  240.                 return p; //返回一个指向密码的指针
  241. }

  242. pUser readUserFile()//从文件中读取用户信息,返回一个表头地址
  243. {
  244.         FILE *fp;       //文件指针
  245.         int n=0;//记录链表 的结点数
  246.         pUser head=NULL;//定义头指针
  247.         pUser p2,p,pre;
  248.         fp=fopen("User.txt","a+");     //以只读的方式打开文件
  249.         if(fp==NULL)
  250.         {
  251.                 printf("cannot open file\n");
  252.         }
  253.         else
  254.         {
  255.                 while(!feof(fp))        //判断文件位置标志是否移动到文件末尾
  256.                 {
  257.                     n++;
  258.                         p=(pUser)malloc(M); //向内存申请一段空间
  259.                    fread(p,M,1,fp);     //将fp所指向的文件中的内容赋给p
  260.                    if(n==1)
  261.                    {
  262.                       head=p;
  263.                       p2=p;
  264.                     }
  265.                     else             //创建链表
  266.                     {
  267.                             pre=p2;
  268.                             p2->next=p;
  269.                             p2=p;
  270.                         }
  271.             }
  272.             p2->next=NULL;
  273.         }
  274.         if(n<=2)
  275.                 head->next=NULL;
  276.         else
  277.                 pre->next=NULL;
  278.     fclose(fp);    //关闭文件
  279.     return head;   //返回头指针
  280. }

  281. void save_User(pUser p1)     //将p1所指向的内容存储到文件中
  282. {
  283.         FILE *fp;       //文件指针
  284.         fp=fopen("User.txt","a+");    //以追加的方式打开文件
  285.         if(fp==NULL)
  286.         {
  287.                 printf("cannot open file\n");
  288.         }
  289.         if(fwrite(p1,M,1,fp)!=1)    //将p1所指向的1个大小为N的数据结构写入fp所指向的文件中
  290.         {
  291.                 printf("file write error\n");
  292.         }
  293.         fclose(fp);        //关闭文件
  294. }

  295. void User_Login()//登录页面
  296. {
  297.         char *q,t,c;//q指针用于接收 *HidePassword()函数返回的指向密码的指针,t和c均用于选择
  298.         pUser p=readUserFile();//从文件中读取用户信息,返回一个表头地址
  299.         do
  300.         {
  301.                 HideCursor(1);//显示管光标
  302.                 system("cls");//清屏
  303.                 system("color 73");//设置颜色
  304.                 toxy(28,8);
  305.                 printf("南航餐饮管理系统登录界面");
  306.                 toxy(26,9);
  307.                 printf("-----------------------------");
  308.                 toxy(32,11);
  309.                 printf("用户名:");
  310.                 toxy(32,13);
  311.                 printf("密  码:");
  312.                 toxy(40,11);
  313.                 scanf("%s",_userName);
  314.                 toxy(40,13);
  315.                 q=HidePassword();//输入密码
  316.                 strcpy(_passWord,q);//将获得的密码复制给_passWord[]数组
  317.                 while(p!=NULL&&strcmp(p->userName,_userName)!=0)   //遍历链表,寻找当前输入的账户的账号
  318.                 {
  319.                         p=p->next;
  320.                 }
  321.                 if(p!=NULL)   //如果p不为空
  322.                 {
  323.                     if(strcmp(p->passWord,_passWord)==0)     //如果输入的密码正确
  324.                         {
  325.                                 toxy(32,16);
  326.                                 printf("正在登陆....");
  327.                                 Sleep(500);      //暂停0.5秒
  328.                                 system("cls");
  329.                                 toxy(32,10);
  330.                                 printf("登陆成功!");
  331.                                 break;    //跳出循环
  332.                         }
  333.                         else      //如果输入的密码错误
  334.                         {
  335.                                 toxy(32,16);
  336.                                 printf("正在登陆....");
  337.                                 Sleep(500);
  338.                                 system("cls");
  339.                                 toxy(30,8);
  340.                                 printf("-------------------------");
  341.                                 toxy(30,9);
  342.                                 printf("|                       |");
  343.                                 toxy(30,10);
  344.                                 printf("| 密码错误!是否继续?  |");
  345.                                 toxy(30,12);
  346.                                 printf("| 1.是             2.否 |");
  347.                                 toxy(30,13);
  348.                                 printf("|                       |");
  349.                                 toxy(30,14);
  350.                                 printf("-------------------------");
  351.                                 while(1)//无限循环为防止其他按键干扰
  352.                                 {
  353.                                         t=getch();  //输入t   
  354.                                         if(t=='1')         
  355.                                         {
  356.                                                 system("cls");  //清屏
  357.                                                 break;
  358.                                         }
  359.                                         else if(t=='2')     //如果输入t为n,进入开始界面
  360.                                         {
  361.                                                 system("cls");  //清屏
  362.                                                 Default();break;
  363.                                         }
  364.                                 }
  365.                         }
  366.            }
  367.            else              //如果p为空,即输入的账号不正确
  368.            {
  369.                        toxy(32,16);
  370.                        printf("正在登陆....");
  371.                        Sleep(500);
  372.                        system("cls");
  373.                        toxy(30,8);
  374.                        printf("-------------------------");
  375.                        toxy(30,9);
  376.                        printf("|                       |");
  377.                            toxy(30,10);
  378.                         printf("|  账号错误!是否继续? |");
  379.                         toxy(30,11);
  380.                         printf("|                       |");
  381.                         toxy(30,12);
  382.                         printf("|  1.是            2.否 |");
  383.                         toxy(30,13);
  384.                         printf("|                       |");
  385.                         toxy(30,14);
  386.                         printf("-------------------------");
  387.                         while(1)      //死循环防止其他按键干扰
  388.                         {
  389.                                 c=getch();
  390.                                 if(c=='1')
  391.                                 {  
  392.                                         system("cls");
  393.                                         break;
  394.                                 }
  395.                                 else if(c=='2')
  396.                                 {
  397.                                         system("cls");  //清屏
  398.                                         Default();
  399.                                 }
  400.                         }
  401.            }
  402.         }while(1);
  403.         Sleep(500);      //暂停0.5秒
  404.     User_Menu();         //账号密码均正确,进入用户主菜单
  405. }

  406. void Logon()//注册界面
  407. {
  408.         pUser p1;
  409.         pUser p=readUserFile();//从文件中读取用户信息,返回一个表头地址
  410.         p1=(pUser)malloc(M);     //向内存申请一段空间
  411.         char *q1,*q2;//q1,q2分别用于接收 *HidePassword()函数返回的值
  412.         char userName[10],passWord[18],againPassword[18],c,k,t;//c,k,t均用于选择
  413.         do{       
  414.                 system("cls");
  415.                 system("color 73");
  416.                 HideCursor(1);//显示光标
  417.                 int flag=0;//标记信息库中是否存在要注册用户名
  418.                 toxy(28,8);
  419.                 printf("南航餐饮管理系统注册界面");
  420.                 toxy(26,9);
  421.                 printf("-----------------------------");
  422.                 toxy(32,11);
  423.                 printf("用 户 名:");
  424.                 toxy(32,13);
  425.                 printf("密    码:");
  426.                 toxy(32,15);
  427.                 printf("确认密码:");
  428.                 toxy(42,11);
  429.                 scanf("%s",userName);//输入用户名
  430.                 toxy(42,13);
  431.                 q1=HidePassword();//输入密码
  432.                 strcpy(passWord,q1);
  433.                 toxy(42,15);
  434.                 q2=HidePassword();//输入确认密码
  435.                 strcpy(againPassword,q2);
  436.                 while(p!=NULL)   //遍历链表,寻找当前输入的账户的账号
  437.                 {
  438.                         if(strcmp(p->userName,userName)==0)//如果信息库中存在该用户名
  439.                         {
  440.                                 toxy(32,17);
  441.                                 printf("用户名已存在,请重新注册!");
  442.                                 flag=1;//flag为1时表示用户名已存在
  443.                                 break;//跳出循环
  444.                         }
  445.                         p=p->next;
  446.                 }
  447.                 if(flag)//如果用户名已存在
  448.                 {
  449.                         HideCursor(0);//隐藏光标
  450.                         toxy(32,19);
  451.                         printf("是否继续?");//询问是否继续
  452.                         toxy(32,21);
  453.                         printf("1.是\t2.否");
  454.                         while(1)
  455.                         {
  456.                                 t=getch();
  457.                                 if(t=='1')
  458.                                         break;
  459.                                 else if(t=='2')
  460.                                         break;
  461.                         }
  462.                         if(t=='1')//如果继续,则重新注册
  463.                                 continue;
  464.                         else if(t=='2')//如果不继续,则回到首页
  465.                         {
  466.                                 system("cls");//清屏
  467.                                 Default();//回到首页
  468.                         }        
  469.                 }
  470.                        
  471.                 if(strcmp(passWord,againPassword)==0)        //如果输入的两次密码均正确
  472.                 {
  473.                         strcpy(p1->userName,userName);
  474.                         strcpy(p1->passWord,passWord);
  475.                         strcpy(_userName,userName);
  476.                         strcpy(_passWord,passWord);
  477.                         p1->isVIP=0;
  478.                         p1->money=0;
  479.                         if(strcmp(userName,"root")==0&&strcmp(passWord,"root")==0)
  480.                                 p1->isAdministrator=1;
  481.                         else
  482.                                 p1->isAdministrator=0;
  483.                         toxy(32,16);
  484.                         printf("正在注册....");
  485.                         Sleep(500);
  486.                         break;              //跳出循环
  487.                 }
  488.                 else    //如果输入的两次密码不同
  489.                 {
  490.                         toxy(32,16);
  491.                         printf("正在注册....");
  492.                         Sleep(500);
  493.                         system("cls");
  494.                         toxy(30,8);
  495.                         printf("------------------------------");
  496.                         toxy(30,9);
  497.                         printf("|                            |");
  498.                         toxy(30,10);
  499.                         printf("|两次密码不一致!是否继续注册?|");
  500.                         toxy(30,11);
  501.                         printf("|                            |");
  502.                         toxy(30,12);
  503.                         printf("|  1.是                2.否  |");
  504.                         toxy(30,13);
  505.                         printf("|                            |");
  506.                         toxy(30,14);
  507.                         printf("------------------------------");
  508.                         while(1)
  509.                         {
  510.                                 c=getch();
  511.                                 if(c=='1')
  512.                                 {
  513.                                         system("cls");
  514.                                         break;
  515.                                 }
  516.                                 else if(c=='2')
  517.                                 {
  518.                                         system("cls");
  519.                                         Default();
  520.                                         break;
  521.                                 }
  522.                         }
  523.                 }
  524.         }while(1);
  525.         save_User(p1);     //调用函数,将p1所指向的内容存储到文件中
  526.         system("cls");
  527.         toxy(32,10);
  528.         printf("注册成功!");
  529.         Sleep(500);         //暂停0.5秒
  530.         toxy(32,12);
  531.         printf("正在自动为您登陆....");
  532.         Sleep(500);
  533.         User_Menu();    //注册成功后进入主菜单
  534. }

  535. void User_Order()//点餐
  536. {
  537.         char ch='0';
  538.         char t='0';
  539.         int ID;
  540.         int number;
  541.         do
  542.         {
  543.                 while(1)
  544.                 {       
  545.                         system("cls");
  546.                         HideCursor(1);
  547.                         int flag=0;
  548.                         pTable T,Thead;
  549.                         Thead=readTableFile();
  550.                         T=Thead;
  551.                         int j=11;
  552.                         toxy(12,6);
  553.                         printf("餐桌列表(按任意键继续)");
  554.                         toxy(2,8);
  555.                         printf("餐桌编号 | 可坐人数 | 已坐人数");
  556.                         toxy(0,9);
  557.                         printf("--------------------------------------");
  558.                         while(T!=NULL)
  559.                         {
  560.                                 toxy(6,j);
  561.                                 printf("%-10d%-10d%d",T->ID,T->count,T->People);
  562.                                 j++;
  563.                                 T=T->next;
  564.                         }
  565.                         toxy(38,12);
  566.                         printf("请选择餐桌号:");
  567.                         scanf("%d",&ID);
  568.                         toxy(40,14);
  569.                         printf("请选择人数:");
  570.                         scanf("%d",&number);
  571.                         T=Thead;
  572.                         while(T!=NULL)
  573.                         {
  574.                                 if(T->ID==ID)
  575.                                 {
  576.                                         if((T->count)-(T->People)>=number)
  577.                                         {
  578.                                                 toxy(38,16);
  579.                                                 printf("占座成功!按任意键继续点餐");
  580.                                                 flag=1;
  581.                                                 break;
  582.                                         }
  583.                                         else
  584.                                         {
  585.                                                 toxy(38,16);
  586.                                                 printf("占座失败!该餐桌座位不够");
  587.                                                 flag=0;
  588.                                                 break;
  589.                                         }
  590.                                 }
  591.                                 T=T->next;
  592.                         }
  593.                         if(T==NULL&&flag==0)
  594.                         {
  595.                                 toxy(38,16);
  596.                                 printf("该餐桌编号不存在,请重新输入");
  597.                                 Sleep(1000);
  598.                                 continue;
  599.                         }
  600.                         else if(T!=NULL&&flag==0)
  601.                         {
  602.                                 toxy(38,17);
  603.                                 printf("是否继续  1.是   2.否");
  604.                                 while(1)
  605.                                 {
  606.                                         ch=getch();
  607.                                         if(ch=='1'||ch=='2')
  608.                                                 break;
  609.                                 }
  610.                                 if(ch=='1')
  611.                                         continue;
  612.                                 else if(ch=='2')
  613.                                         break;
  614.                         }
  615.                         else if(flag)
  616.                                 break;
  617.                 }
  618.                 if(ch=='2')
  619.                         break;
  620.                 getch();
  621.                 do
  622.                 {
  623.                        
  624.                         system("cls");
  625.                         toxy(32,6);
  626.                         printf("点餐");
  627.                         toxy(24,8);
  628.                         printf("-----------------");
  629.                         toxy(28,10);
  630.                         printf("1) 主  食");
  631.                         toxy(28,12);
  632.                         printf("2) 副  食");
  633.                         toxy(28,14);
  634.                         printf("3) 饮  品");
  635.                         toxy(28,16);
  636.                         printf("4)订  单");
  637.                         toxy(28,18);
  638.                         printf("5)返  回");
  639.                         t=getch();
  640.                         switch(t)
  641.                         {
  642.                                 case '1':Order_StapleFood();break;
  643.                                 case '2':Order_nonStapleFood();break;
  644.                                 case '3':Order_DrinkBeverage();break;
  645.                                 case '4':Order_Form(ID,number);break;
  646.                                 case '5':break;
  647.                                 default :break;
  648.                          }
  649.                          if(t=='5')
  650.                                  break;
  651.                 }while(1);
  652.                 if(t=='5')
  653.                         break;
  654.         }while(1);
  655. }


  656. void Order_StapleFood()//主食
  657. {
  658.         char t;
  659.         do
  660.         {
  661.                 system("cls");
  662.                 pStapleFood p,head=readStapleFoodFile();
  663.                 pOrder p1;
  664.                 p=head;
  665.                 char foodName[20];
  666.                 int i=8;
  667.                 toxy(10,4);
  668.                 printf("主食菜单");
  669.                 toxy(6,6);
  670.                 printf("菜名\t\t\t价格");
  671.                 toxy(0,7);
  672.                 printf("-----------------------------------");
  673.                 while(p!=NULL)
  674.                 {
  675.                         toxy(6,i);
  676.                         printf("%-22s%.2f",p->name,p->price);
  677.                         i++;
  678.                         p=p->next;
  679.                 }
  680.                 toxy(40,8);
  681.                 printf("请输入您要点的菜名:");
  682.                 scanf("%s",foodName);
  683.                 p=head;
  684.                 while(p!=NULL&&strcmp(p->name,foodName)!=0)
  685.                 {
  686.                         p=p->next;
  687.                 }
  688.                 if(p)
  689.                 {
  690.                         p1=(pOrder)malloc(Y);
  691.                         strcpy(p1->name,foodName);
  692.                         p1->price=p->price;
  693.                         num++;
  694.                         if(num==1)
  695.                         {
  696.                                 orderHead=p1;
  697.                                 p2=p1;
  698.                         }
  699.                         else
  700.                         {
  701.                                 p2->next=p1;
  702.                                 p2=p1;
  703.                         }
  704.                         p2->next=NULL;
  705.                         toxy(40,10);
  706.                         printf("点餐成功!是否继续?1.是   2.否");
  707.                         while(1)
  708.                         {
  709.                                 t=getch();
  710.                                 if(t=='1')
  711.                                         break;
  712.                                 else if(t=='2')
  713.                                         break;
  714.                         }
  715.                         if(t=='2')
  716.                                 break;
  717.                 }
  718.                 else
  719.                 {
  720.                         toxy(36,10);
  721.                         printf("没有找到这道菜,请检查您输入的菜名是否正确!");
  722.                         Sleep(1500);
  723.                 }
  724.         }while(1);
  725.        
  726. }

  727. void Order_nonStapleFood()//副食
  728. {
  729.         char t;
  730.         do
  731.         {
  732.                 system("cls");
  733.                 pNon_stapleFood p,head=readNonStapleFoodFile();
  734.                 pOrder p1;
  735.                 p=head;
  736.                 char foodName[20];
  737.                 int i=8;
  738.                 toxy(10,4);
  739.                 printf("副食菜单");
  740.                 toxy(6,6);
  741.                 printf("菜名\t\t\t价格");
  742.                 toxy(0,7);
  743.                 printf("-----------------------------------");
  744.                 while(p!=NULL)
  745.                 {
  746.                         toxy(6,i);
  747.                         printf("%-22s%.2f",p->name,p->price);
  748.                         i++;
  749.                         p=p->next;
  750.                 }
  751.                 toxy(40,8);
  752.                 printf("请输入您要点的菜名:");
  753.                 scanf("%s",foodName);
  754.                 p=head;
  755.                 while(p!=NULL&&strcmp(p->name,foodName)!=0)
  756.                 {
  757.                         p=p->next;
  758.                 }
  759.                 if(p)
  760.                 {
  761.                         p1=(pOrder)malloc(Y);
  762.                         strcpy(p1->name,foodName);
  763.                         p1->price=p->price;
  764.                         num++;
  765.                         if(num==1)
  766.                         {
  767.                                 orderHead=p1;
  768.                                 p2=p1;
  769.                         }
  770.                         else
  771.                         {
  772.                                 p2->next=p1;
  773.                                 p2=p1;
  774.                         }
  775.                         p2->next=NULL;
  776.                         toxy(36,10);
  777.                         printf("点餐成功!是否继续?1.是   2.否");
  778.                         while(1)
  779.                         {
  780.                                 t=getch();
  781.                                 if(t=='1')
  782.                                         break;
  783.                                 else if(t=='2')
  784.                                         break;
  785.                         }
  786.                         if(t=='2')
  787.                                 break;
  788.                 }
  789.                 else
  790.                 {
  791.                         toxy(36,10);
  792.                         printf("没有找到这道菜,请检查您输入的菜名是否正确!");
  793.                         Sleep(1500);
  794.                 }
  795.         }while(1);
  796. }

  797. void Order_DrinkBeverage()//饮品
  798. {
  799.                 char t;
  800.         do
  801.         {
  802.                 system("cls");
  803.                 pDrinkBeverage p,head=readDrinkBeverageFile();
  804.                 pOrder p1;
  805.                 p=head;
  806.                 char foodName[20];
  807.                 int i=8;
  808.                 toxy(10,4);
  809.                 printf("饮品菜单");
  810.                 toxy(6,6);
  811.                 printf("菜名\t\t\t价格");
  812.                 toxy(0,7);
  813.                 printf("-----------------------------------");
  814.                 while(p!=NULL)
  815.                 {
  816.                         toxy(6,i);
  817.                         printf("%-22s%.2f",p->name,p->price);
  818.                         i++;
  819.                         p=p->next;
  820.                 }
  821.                 toxy(40,8);
  822.                 printf("请输入您要点的菜名:");
  823.                 scanf("%s",foodName);
  824.                 p=head;
  825.                 while(p!=NULL&&strcmp(p->name,foodName)!=0)
  826.                 {
  827.                         p=p->next;
  828.                 }
  829.                 if(p)
  830.                 {
  831.                         p1=(pOrder)malloc(Y);
  832.                         strcpy(p1->name,foodName);
  833.                         p1->price=p->price;
  834.                         num++;
  835.                         if(num==1)
  836.                         {
  837.                                 orderHead=p1;
  838.                                 p2=p1;
  839.                         }
  840.                         else
  841.                         {
  842.                                 p2->next=p1;
  843.                                 p2=p1;
  844.                         }
  845.                         p2->next=NULL;
  846.                         toxy(36,10);
  847.                         printf("点餐成功!是否继续?1.是   2.否");
  848.                         while(1)
  849.                         {
  850.                                 t=getch();
  851.                                 if(t=='1')
  852.                                         break;
  853.                                 else if(t=='2')
  854.                                         break;
  855.                         }
  856.                         if(t=='2')
  857.                                 break;
  858.                 }
  859.                 else
  860.                 {
  861.                         toxy(36,10);
  862.                         printf("没有找到这道菜,请检查您输入的菜名是否正确!");
  863.                         Sleep(1500);
  864.                 }
  865.         }while(1);
  866. }

  867. void Order_Form(int ID,int number)//订单
  868. {
  869.         do
  870.         {
  871.                 system("cls");
  872.                 int i=10;
  873.                 char t;
  874.                 float totalPrice=0;
  875.                 float actualPayment=0;
  876.                 pOrder p=orderHead;
  877.                 pUser q,head;
  878.                 pTable T,Thead;
  879.                 q=head;
  880.                 if(orderHead==NULL)
  881.                 {
  882.                         toxy(26,8);
  883.                         printf("您还没有点任何东西,赶紧去点吧!(按任意键返回)");
  884.                         getch();
  885.                         break;
  886.                 }
  887.                 else
  888.                 {
  889.                         toxy(26,6);
  890.                         printf("我的订单");
  891.                         toxy(22,8);
  892.                         printf("菜品名称\t\t价格");
  893.                         toxy(20,9);
  894.                         printf("***************************");
  895.                         while(p!=NULL)
  896.                         {
  897.                                 toxy(22,i);
  898.                                 printf("%-18s%.2f",p->name,p->price);
  899.                                 i++;
  900.                                 totalPrice+=p->price;
  901.                                 p=p->next;
  902.                         }
  903.                         head=readUserFile();
  904.                         q=head;
  905.                         toxy(20,i);
  906.                         printf("***************************");
  907.                         while(q!=NULL&&strcmp(q->userName,_userName)!=0)
  908.                         {
  909.                                 q=q->next;
  910.                         }
  911.                         if(q)
  912.                         {
  913.                                 toxy(24,++i);
  914.                                 printf("总价:  %.2f",totalPrice);
  915.                                 if(q->isVIP)
  916.                                         actualPayment=totalPrice*0.85;
  917.                                 else
  918.                                         actualPayment=totalPrice;
  919.                                 toxy(24,++i);
  920.                                 printf("实付:  %.2f",actualPayment);
  921.                         }
  922.                         toxy(22,++i);
  923.                         printf("1.确认支付   2.取消订单   3.返回");
  924.                         while(1)
  925.                         {
  926.                                 t=getch();
  927.                                 if(t=='1'||t=='2'||t=='3')
  928.                                         break;
  929.                         }
  930.                         if(t=='1')
  931.                         {
  932.                                 Thead=readTableFile();
  933.                                 T=Thead;
  934.                                 while(T!=NULL&&T->ID!=ID)
  935.                                 {
  936.                                         T=T->next;
  937.                                 }
  938.                                 toxy(24,++i);
  939.                                 printf("正在支付....");
  940.                                 if(q->money>=actualPayment)
  941.                                 {
  942.                                         q->money-=actualPayment;
  943.                                         T->People+=number;
  944.                                         Updata_User(head);
  945.                                         Updata_Table(Thead);
  946.                                         Sleep(1500);
  947.                                         system("cls");
  948.                                         toxy(24,10);
  949.                                         printf("支付成功!按任意键返回");
  950.                                         orderHead=NULL;
  951.                                         getch();
  952.                                         break;
  953.                                 }
  954.                                 else
  955.                                 {
  956.                                         Sleep(1500);
  957.                                         system("cls");
  958.                                         toxy(24,10);
  959.                                         printf("余额不足!按任意键返回");
  960.                                         getch();
  961.                                         break;
  962.                                 }
  963.                         }
  964.                         else if(t=='2')
  965.                         {
  966.                                 orderHead=NULL;
  967.                                 break;
  968.                         }
  969.                         else if(t=='3')
  970.                                 break;
  971.                 }
  972.         }while(1);
  973. }

  974. void User_List_Table()//餐桌列表
  975. {
  976.         system("cls");
  977.         pTable p,head;
  978.         head=readTableFile();
  979.         p=head;
  980.         int i=11;
  981.         toxy(32,6);
  982.         printf("餐桌列表(按任意键继续)");
  983.         toxy(22,8);
  984.         printf("餐桌编号 | 可坐人数 | 已坐人数");
  985.         toxy(20,9);
  986.         printf("--------------------------------------");
  987.         while(p!=NULL)
  988.         {
  989.                 toxy(26,i);
  990.                 printf("%-10d%-10d%d",p->ID,p->count,p->People);
  991.                 i++;
  992.                 p=p->next;
  993.         }
  994.         getch();
  995. }

  996. void Apply_VIP_Menu()//办理会员
  997. {
  998.         char t; //t用于选择
  999.         do
  1000.         {
  1001.                 system("cls");
  1002.                 system("color 75");
  1003.                 HideCursor(0);
  1004.                 pUser head=readUserFile();//从文件中读取用户信息,返回一个表头地址
  1005.                 toxy(32,6);
  1006.                 printf("会员办理");
  1007.                 toxy(30,8);
  1008.                 printf("1)  充值 ");
  1009.                 toxy(30,10);
  1010.                 printf("2)  办理会员");
  1011.                 toxy(30,12);
  1012.                 printf("3)  返回");
  1013.                 t=getch();
  1014.                 switch(t)
  1015.                 {
  1016.                         case '1':Add_money(head);break;
  1017.                         case '2':Apply_VIP(head);break;
  1018.                         case '3':break;
  1019.                         default :break;
  1020.                 }
  1021.                 if(t=='3')//如果输入3,则跳出循环,该函数生命周期结束,回到上一级菜单
  1022.                         break;
  1023.         }while(1);
  1024. }

  1025. void Add_money(pUser head)//充值
  1026. {
  1027.         float money;//输入要充值的钱
  1028.         pUser p;
  1029.         p=head;//head为从 上一级菜单传过来的参数,为用户信息链表的头结点
  1030.         while(p!=NULL&&strcmp(p->userName,_userName)!=0)//遍历链表,寻找当前登录账户的信息
  1031.         {
  1032.                 p=p->next;
  1033.         }
  1034.         while(1)
  1035.         {
  1036.                 system("cls");
  1037.                 system("color 76");
  1038.                 toxy(32,6);
  1039.                 printf("南航餐饮充值中心");
  1040.                 if(p!=NULL)
  1041.                 {
  1042.                         if(p->isVIP==0)//如果不是会员
  1043.                         {
  1044.                                 toxy(20,8);
  1045.                                 printf("对不起,您还不是会员,请先办理会员后再来充值!");
  1046.                                 toxy(32,10);
  1047.                                 printf("请按任意键返回!");
  1048.                                 break;
  1049.                         }
  1050.                         else if(p->isVIP==1)//如果是会员
  1051.                         {
  1052.                                 HideCursor(1);
  1053.                                 toxy(32,8);
  1054.                                 printf("请输入充值金额(一次不少于200):");
  1055.                                 scanf("%f",&money);
  1056.                                 if(money>=200)//如果充值金额大于200
  1057.                                 {
  1058.                                         p->money+=money;
  1059.                                         toxy(32,10);
  1060.                                         printf("正在充值....");
  1061.                                         Updata_User(head);//更新用户表
  1062.                                         toxy(32,10);
  1063.                                         printf("充值成功    ");
  1064.                                         toxy(32,12);
  1065.                                         printf("请按任意键返回!");
  1066.                                         break;
  1067.                                 }
  1068.                                 else//如果充值金额小于200
  1069.                                 {
  1070.                                         toxy(32,10);
  1071.                                         printf("一次至少充值200元!");
  1072.                                         Sleep(1500);
  1073.                                         continue;
  1074.                                 }
  1075.                         }
  1076.                 }
  1077.         }
  1078.         getch();
  1079. }

  1080. void Apply_VIP(pUser head)//办理会员
  1081. {
  1082.         system("cls");
  1083.         system("color 76");
  1084.         pUser p=head;//head为从 上一级菜单传过来的参数,为用户信息链表的头结点
  1085.         char t;
  1086.         float money;
  1087.         toxy(32,6);
  1088.         printf("南航餐饮会员办理中心");
  1089.         while(p!=NULL&&strcmp(p->userName,_userName)!=0)//遍历链表,寻找当前登录账户的信息
  1090.         {
  1091.                 p=p->next;
  1092.         }
  1093.         do
  1094.         {
  1095.                 if(p!=NULL)
  1096.                 {
  1097.                         if(p->isVIP==1)//如果已经是会员
  1098.                         {
  1099.                                 toxy(20,8);
  1100.                                 printf("您已是本店尊贵会员,无需再次办理!");
  1101.                                 toxy(32,10);
  1102.                                 printf("请按任意键返回!");
  1103.                                 getch();
  1104.                                 break;
  1105.                         }
  1106.                         else if(p->isVIP==0)//如果还没办理会员
  1107.                         {
  1108.                                 toxy(30,8);
  1109.                                 printf("提示:");
  1110.                                 toxy(30,9);
  1111.                                 printf("1.办理会员至少充值500");
  1112.                                 toxy(30,10);
  1113.                                 printf("2.冲500送200,冲1000送500");
  1114.                                 toxy(32,12);
  1115.                                 printf("是否确认办理会员?");
  1116.                                 toxy(32,13);
  1117.                                 printf("1.是\t2.否");
  1118.                                 while(1)
  1119.                                 {
  1120.                                         t=getch();
  1121.                                         if(t=='1')
  1122.                                                 break;
  1123.                                         else if(t=='2')
  1124.                                                 break;
  1125.                                 }
  1126.                                 if(t=='1')
  1127.                                 {
  1128.                                         while(1)
  1129.                                         {
  1130.                                                 system("cls");
  1131.                                                 HideCursor(1);
  1132.                                                 toxy(32,10);
  1133.                                                 printf("请输入充值金额:");
  1134.                                                 scanf("%f",&money);
  1135.                                                 if(money>=500&&money<1000)
  1136.                                                 {
  1137.                                                         money+=200;
  1138.                                                         p->money+=money;
  1139.                                                         p->isVIP=1;
  1140.                                                         Updata_User(head);
  1141.                                                         toxy(32,12);
  1142.                                                         printf("恭喜,您已成为本店尊贵会员!");
  1143.                                                         toxy(32,14);
  1144.                                                         printf("请按任意键返回主菜单");
  1145.                                                         getch();
  1146.                                                         User_Menu();
  1147.                                                 }
  1148.                                                 else if(money>=1000)
  1149.                                                 {
  1150.                                                         money+=500;
  1151.                                                         p->money+=money;
  1152.                                                         p->isVIP=1;
  1153.                                                         Updata_User(head);
  1154.                                                         toxy(32,12);
  1155.                                                         printf("恭喜,您已成为本店尊贵会员!");
  1156.                                                         toxy(32,14);
  1157.                                                         printf("请按任意键返回主菜单");
  1158.                                                         getch();
  1159.                                                         User_Menu();
  1160.                                                 }
  1161.                                                 else
  1162.                                                 {
  1163.                                                         toxy(32,12);
  1164.                                                         printf("办理会员至少充值500");
  1165.                                                         Sleep(2000);
  1166.                                                 }
  1167.                                         }
  1168.                                 }
  1169.                                 else if(t=='2')
  1170.                                         break;
  1171.                         }
  1172.                 }
  1173.         }while(1);
  1174. }

  1175. void Updata_User(pUser head)//更新文件
  1176. {
  1177.         FILE *fp;
  1178.         pUser p=head->next;                           //使p指向第二个结点
  1179.         fp=fopen("User.txt","w");                  //先清空原文件内容再将修改后的信息写入文件
  1180.         if(fp==NULL)
  1181.         {
  1182.                 printf("cannot open file\n");
  1183.         }
  1184.         if(fwrite(head,M,1,fp)!=1)                 //将head所指向的数据写入fp所指向的文件
  1185.         {
  1186.                 printf("file write error\n");
  1187.         }
  1188.         fclose(fp);                         //关闭文件
  1189.         fp=fopen("User.txt","a");          // 打开User.txt文件,方式为追加
  1190.         while(p!=NULL)                    //p不为空就执行循环体
  1191.         {
  1192.                 if(fwrite(p,M,1,fp)!=1)            //将p所指向的1个大小为N的数据结构写入fp所指向的文件
  1193.             {
  1194.                         printf("file write error\n");
  1195.             }
  1196.             p=p->next;                     //使p指向下一个结点
  1197.         }
  1198.         fclose(fp);              //关闭文件
  1199. }

  1200. void Amend_passWord()//修改密码
  1201. {
  1202.         system("cls");         //清屏
  1203.         HideCursor(0);  //隐藏光标,看着更舒服
  1204.         pUser p,head;      
  1205.         head=readUserFile();
  1206.     do
  1207.     {
  1208.             p=head;
  1209.             char password[18],newpassword[18],t,k,*q1,*q2;
  1210.             int i=0;
  1211.             toxy(34,5);          //将光标移动到坐标为(50,5)的位置
  1212.                 printf("南航餐饮点餐系统");
  1213.                 toxy(34,8);
  1214.                 printf("修改密码");
  1215.                 toxy(32,10);
  1216.                 printf("请输入旧密码:");
  1217.                 q1=HidePassword();
  1218.                 strcpy(password,q1);
  1219.                 toxy(32,12);
  1220.                 printf("请输入新密码:");
  1221.                 q2=HidePassword();
  1222.                 strcpy(newpassword,q2);
  1223.                 while(p!=NULL&&strcmp(p->userName,_userName)!=0)//遍历链表,寻找当前登陆账户的账号
  1224.                 {
  1225.                         p=p->next;
  1226.                 }
  1227.                 if(p!=NULL)                   //如果p不为空
  1228.                 {
  1229.                         if(strcmp(p->passWord,password)==0)          //如果旧密码输入正确
  1230.                         {
  1231.                                 strcpy(p->passWord,newpassword);         //将旧密码改为新密码
  1232.                                 break;                                   //跳出循环
  1233.                         }
  1234.                         else                                         //如果旧密码输入错误
  1235.                         {
  1236.                                 system("cls");
  1237.                                 toxy(30,8);
  1238.                                 printf("--------------------------");
  1239.                                 toxy(30,9);
  1240.                                 printf("|                        |");
  1241.                                 toxy(30,10);
  1242.                                 printf("|  密码错误!是否继续?  |");
  1243.                                 toxy(30,11);
  1244.                                 printf("|                        |");
  1245.                                 toxy(30,12);
  1246.                                 printf("|  1.是           2.否   |");
  1247.                                 toxy(30,13);
  1248.                                 printf("|                        |");
  1249.                                 toxy(30,14);
  1250.                                 printf("--------------------------");
  1251.                                 while(1)
  1252.                                 {
  1253.                                         t=getch();                              //输入t
  1254.                                         if(t=='1')
  1255.                                         {
  1256.                                                 system("cls");
  1257.                                                 break;
  1258.                                         }
  1259.                                         else if(t=='2')
  1260.                                           User_Menu();
  1261.                                 }
  1262.                         }
  1263.                 }
  1264.         }while(1);                                //永远为真
  1265.         Updata_User(head);//修改密码
  1266.         toxy(32,14);
  1267.         printf("修改成功!正在跳转...");
  1268.         Sleep(500);       //暂停0.5秒
  1269. }

  1270. void User_Wallet()//我的钱包
  1271. {
  1272.         system("cls");
  1273.         system("color 78");
  1274.         pUser p,head;
  1275.         head=readUserFile();
  1276.         p=head;
  1277.         while(p!=NULL&&strcmp(p->userName,_userName)!=0)
  1278.         {
  1279.                 p=p->next;
  1280.         }
  1281.         if(p!=NULL)
  1282.         {
  1283.                 toxy(32,10);
  1284.                 printf("账户余额为:%.2f",p->money);
  1285.                 toxy(32,12);
  1286.                 printf("请按任意键返回");
  1287.         }
  1288.         getch();
  1289. }

  1290. void Change()//切换账号
  1291. {
  1292.         system("cls");
  1293.         Default();
  1294. }

  1295. void Exit()//退出点餐系统
  1296. {
  1297.         char t;
  1298.         toxy(30,10);
  1299.         printf("-----------------------");
  1300.         toxy(30,11);
  1301.         printf("|   您确定要退出吗?  |");
  1302.         toxy(30,13);
  1303.         printf("| 1.确定     2.取消   |");
  1304.         toxy(30,14);
  1305.         printf("-----------------------");
  1306.         while(1)
  1307.         {
  1308.                 t=getch();         //输入t
  1309.                 switch(t)
  1310.                 {
  1311.                         case '1':
  1312.                         system("cls");
  1313.                         toxy(32,10);
  1314.                         printf("正在安全退出....");
  1315.                         Sleep(1000);     //暂停1秒
  1316.                         system("cls");
  1317.                         toxy(32,10);
  1318.                         printf("已安全退出软件");
  1319.                         toxy(32,12);
  1320.                         printf("谢谢使用!");
  1321.                         toxy(32,14);
  1322.                         printf("by-by^_^");
  1323.                         exit(0);  break; //终止程序
  1324.                         case '2':
  1325.                          break;   //调用函数,进入菜单
  1326.                         default :break;
  1327.                 }
  1328.                 if(t=='2')
  1329.                         break;
  1330.         }
  1331. }

  1332. void Administrator_Menu()//管理员菜单
  1333. {
  1334.         char t;//用于选择菜单选项
  1335.         do
  1336.         {       
  1337.                 system("cls");
  1338.                 HideCursor(0); //隐藏光标
  1339.                 system("color 74");
  1340.                 toxy(32,3);
  1341.                 printf("南航餐饮管理系统!");
  1342.                 toxy(32,4);
  1343.                 printf("当前管理员:%s",_userName);
  1344.                 toxy(30,5);
  1345.                 printf("*********************");
  1346.                 toxy(32,7);
  1347.                 printf("|  1.菜品  信息  |");
  1348.                 toxy(32,9);
  1349.                 printf("|  2.餐桌  管理  |");
  1350.                 toxy(32,11);
  1351.                 printf("|  3.查看  用户  |");
  1352.                 toxy(32,13);
  1353.                 printf("|  4.本店  会员  |");
  1354.                 toxy(32,15);
  1355.                 printf("|  5.设置管理员  |");
  1356.                 toxy(32,17);
  1357.                 printf("|  6.修改  密码  |");
  1358.                 toxy(32,19);
  1359.                 printf("|  7.切换  账号  |");
  1360.                 toxy(32,21);
  1361.                 printf("|  8.退出  系统  |");
  1362.                 t=getch();//不回显函数,输入一个值
  1363.                 switch(t)
  1364.                 {
  1365.                         case '1':Food();break;
  1366.                         case '2':Table();break;
  1367.                         case '3':Check_User();break;
  1368.                         case '4':All_VIP();break;
  1369.                         case '5':Setup_administrator();break;
  1370.                         case '6':Amend_passWord();break;
  1371.                         case '7':Change();break;
  1372.                         case '8':Exit();break;
  1373.                         default :break;
  1374.                 }
  1375.         }while(1);//永远 为真
  1376. }

  1377. void Administrator_Login()//管理员登录
  1378. {
  1379.         char *q,t,c;//q指针用于接收 *HidePassword()函数返回的指向密码的指针,t和c均用于选择
  1380.         pUser p=readUserFile();//从文件中读取用户信息,返回一个表头地址
  1381.         do
  1382.         {
  1383.                 HideCursor(1);//显示管光标
  1384.                 system("cls");//清屏
  1385.                 system("color 73");//设置颜色
  1386.                 toxy(28,8);
  1387.                 printf("南航餐饮管理员登录界面");
  1388.                 toxy(26,9);
  1389.                 printf("-----------------------------");
  1390.                 toxy(32,11);
  1391.                 printf("用户名:");
  1392.                 toxy(32,13);
  1393.                 printf("密  码:");
  1394.                 toxy(40,11);
  1395.                 scanf("%s",_userName);
  1396.                 toxy(40,13);
  1397.                 q=HidePassword();//输入密码
  1398.                 strcpy(_passWord,q);//将获得的密码复制给_passWord[]数组
  1399.                 while(p!=NULL&&strcmp(p->userName,_userName)!=0)   //遍历链表,寻找当前输入的账户的账号
  1400.                 {
  1401.                         p=p->next;
  1402.                 }
  1403.                 if(p!=NULL)   //如果p不为空
  1404.                 {
  1405.                     if(strcmp(p->passWord,_passWord)==0&&p->isAdministrator==1)     //如果输入的密码正确
  1406.                         {
  1407.                                 toxy(32,16);
  1408.                                 printf("正在登陆....");
  1409.                                 Sleep(500);      //暂停0.5秒
  1410.                                 system("cls");
  1411.                                 toxy(32,10);
  1412.                                 printf("登陆成功!");
  1413.                                 break;    //跳出循环
  1414.                         }
  1415.                         else      //如果输入的密码错误
  1416.                         {
  1417.                                 toxy(32,16);
  1418.                                 printf("正在登陆....");
  1419.                                 Sleep(500);
  1420.                                 system("cls");
  1421.                                 toxy(30,8);
  1422.                                 printf("-------------------------");
  1423.                                 toxy(30,9);
  1424.                                 printf("|                       |");
  1425.                                 toxy(30,10);
  1426.                                 printf("| 密码错误!是否继续?  |");
  1427.                                 toxy(30,12);
  1428.                                 printf("| 1.是             2.否 |");
  1429.                                 toxy(30,13);
  1430.                                 printf("|                       |");
  1431.                                 toxy(30,14);
  1432.                                 printf("-------------------------");
  1433.                                 while(1)//无限循环为防止其他按键干扰
  1434.                                 {
  1435.                                         t=getch();  //输入t   
  1436.                                         if(t=='1')         
  1437.                                         {
  1438.                                                 system("cls");  //清屏
  1439.                                                 break;
  1440.                                         }
  1441.                                         else if(t=='2')     //如果输入t为n,进入开始界面
  1442.                                         {
  1443.                                                 system("cls");  //清屏
  1444.                                                 Default();break;
  1445.                                         }
  1446.                                 }
  1447.                         }
  1448.            }
  1449.            else              //如果p为空,即输入的账号不正确
  1450.            {
  1451.                        toxy(32,16);
  1452.                        printf("正在登陆....");
  1453.                        Sleep(500);
  1454.                        system("cls");
  1455.                        toxy(30,8);
  1456.                        printf("-------------------------");
  1457.                        toxy(30,9);
  1458.                        printf("|                       |");
  1459.                            toxy(30,10);
  1460.                         printf("|  账号错误!是否继续? |");
  1461.                         toxy(30,11);
  1462.                         printf("|                       |");
  1463.                         toxy(30,12);
  1464.                         printf("|  1.是            2.否 |");
  1465.                         toxy(30,13);
  1466.                         printf("|                       |");
  1467.                         toxy(30,14);
  1468.                         printf("-------------------------");
  1469.                         while(1)      //死循环防止其他按键干扰
  1470.                         {
  1471.                                 c=getch();
  1472.                                 if(c=='1')
  1473.                                 {  
  1474.                                         system("cls");
  1475.                                         break;
  1476.                                 }
  1477.                                 else if(c=='2')
  1478.                                 {
  1479.                                         system("cls");  //清屏
  1480.                                         Default();
  1481.                                 }
  1482.                         }
  1483.            }
  1484.         }while(1);
  1485.         Sleep(500);      //暂停0.5秒
  1486.     Administrator_Menu();         //账号密码均正确,进入管理员主菜单
  1487. }

  1488. void Food()//菜品信息
  1489. {
  1490.         system("color 74");
  1491.         char t;
  1492.         do
  1493.         {
  1494.                 system("cls");
  1495.                 toxy(32,6);
  1496.                 printf("菜品信息");
  1497.                 toxy(28,7);
  1498.                 printf("-----------------");
  1499.                 toxy(30,9);
  1500.                 printf(" 1) 添加菜单");
  1501.                 toxy(30,11);
  1502.                 printf(" 2) 菜单列表");
  1503.                 toxy(30,13);
  1504.                 printf(" 3) 返回上一级");
  1505.                 t=getch();
  1506.                 switch(t)
  1507.                 {
  1508.                         case '1':Add_Food();break;
  1509.                         case '2':List_Food();break;
  1510.                         case '3':break;
  1511.                         default :break;
  1512.                 }
  1513.                 if(t=='3')
  1514.                         break;
  1515.         }while(1);
  1516. }

  1517. void save_stapleFood(pStapleFood p)//保存主食信息
  1518. {
  1519.         FILE *fp;       //文件指针
  1520.         fp=fopen("StapleFood.txt","a+");    //以追加的方式打开文件
  1521.         if(fp==NULL)
  1522.         {
  1523.                 printf("cannot open file\n");
  1524.         }
  1525.         if(fwrite(p,N,1,fp)!=1)    //将p1所指向的1个大小为N的数据结构写入fp所指向的文件中
  1526.         {
  1527.                 printf("file write error\n");
  1528.         }
  1529.         fclose(fp);        //关闭文件
  1530. }

  1531. void save_non_stapleFood(pNon_stapleFood p)//保存副食信息
  1532. {
  1533.         FILE *fp;       //文件指针
  1534.         fp=fopen("non_StapleFood.txt","a+");    //以追加的方式打开文件
  1535.         if(fp==NULL)
  1536.         {
  1537.                 printf("cannot open file\n");
  1538.         }
  1539.         if(fwrite(p,P,1,fp)!=1)    //将p1所指向的1个大小为N的数据结构写入fp所指向的文件中
  1540.         {
  1541.                 printf("file write error\n");
  1542.         }
  1543.         fclose(fp);        //关闭文件
  1544. }

  1545. void save_drinkBeverage(pDrinkBeverage p)//保存饮品信息
  1546. {
  1547.         FILE *fp;       //文件指针
  1548.         fp=fopen("DrinkBeverage.txt","a+");    //以追加的方式打开文件
  1549.         if(fp==NULL)
  1550.         {
  1551.                 printf("cannot open file\n");
  1552.         }
  1553.         if(fwrite(p,Q,1,fp)!=1)    //将p1所指向的1个大小为N的数据结构写入fp所指向的文件中
  1554.         {
  1555.                 printf("file write error\n");
  1556.         }
  1557.         fclose(fp);        //关闭文件
  1558. }

  1559. pStapleFood readStapleFoodFile()//从主食文件中读取用户信息,返回一个表头地址
  1560. {
  1561.         FILE *fp;       //文件指针
  1562.         int n=0;//记录链表 的结点数
  1563.         pStapleFood head=NULL;//定义头指针
  1564.         pStapleFood p2,p,pre;
  1565.         fp=fopen("StapleFood.txt","a+");     //以只读的方式打开文件
  1566.         if(fp==NULL)
  1567.         {
  1568.                 printf("cannot open file\n");
  1569.         }
  1570.         else
  1571.         {
  1572.                 while(!feof(fp))        //判断文件位置标志是否移动到文件末尾
  1573.                 {
  1574.                     n++;
  1575.                         p=(pStapleFood)malloc(N); //向内存申请一段空间
  1576.                    fread(p,N,1,fp);     //将fp所指向的文件中的内容赋给p
  1577.                    if(n==1)
  1578.                    {
  1579.                       head=p;
  1580.                       p2=p;
  1581.                     }
  1582.                     else             //创建链表
  1583.                     {
  1584.                             pre=p2;
  1585.                             p2->next=p;
  1586.                             p2=p;
  1587.                         }
  1588.             }
  1589.             p2->next=NULL;
  1590.         }
  1591.         if(n<=2)
  1592.                 head->next=NULL;
  1593.         else
  1594.                 pre->next=NULL;
  1595.     fclose(fp);    //关闭文件
  1596.     return head;   //返回头指针
  1597. }

  1598. pNon_stapleFood readNonStapleFoodFile()//从副食文件中读取用户信息,返回一个表头地址
  1599. {
  1600.         FILE *fp;       //文件指针
  1601.         int n=0;//记录链表 的结点数
  1602.         pNon_stapleFood head=NULL;//定义头指针
  1603.         pNon_stapleFood p2,p,pre;
  1604.         fp=fopen("non_StapleFood.txt","a+");     //以只读的方式打开文件
  1605.         if(fp==NULL)
  1606.         {
  1607.                 printf("cannot open file\n");
  1608.         }
  1609.         else
  1610.         {
  1611.                 while(!feof(fp))        //判断文件位置标志是否移动到文件末尾
  1612.                 {
  1613.                     n++;
  1614.                         p=(pNon_stapleFood)malloc(P); //向内存申请一段空间
  1615.                    fread(p,P,1,fp);     //将fp所指向的文件中的内容赋给p
  1616.                    if(n==1)
  1617.                    {
  1618.                       head=p;
  1619.                       p2=p;
  1620.                     }
  1621.                     else             //创建链表
  1622.                     {
  1623.                             pre=p2;
  1624.                             p2->next=p;
  1625.                             p2=p;
  1626.                         }
  1627.             }
  1628.             p2->next=NULL;
  1629.         }
  1630.         if(n<=2)
  1631.                 head->next=NULL;
  1632.         else
  1633.                 pre->next=NULL;
  1634.     fclose(fp);    //关闭文件
  1635.     return head;   //返回头指针
  1636. }

  1637. pDrinkBeverage readDrinkBeverageFile()//从饮品文件中读取用户信息,返回一个表头地址
  1638. {
  1639.         FILE *fp;       //文件指针
  1640.         int n=0;//记录链表 的结点数
  1641.         pDrinkBeverage head=NULL;//定义头指针
  1642.         pDrinkBeverage p2,p,pre;
  1643.         fp=fopen("DrinkBeverage.txt","a+");     //以只读的方式打开文件
  1644.         if(fp==NULL)
  1645.         {
  1646.                 printf("cannot open file\n");
  1647.         }
  1648.         else
  1649.         {
  1650.                 while(!feof(fp))        //判断文件位置标志是否移动到文件末尾
  1651.                 {
  1652.                     n++;
  1653.                         p=(pDrinkBeverage)malloc(Q); //向内存申请一段空间
  1654.                    fread(p,Q,1,fp);     //将fp所指向的文件中的内容赋给p
  1655.                    if(n==1)
  1656.                    {
  1657.                       head=p;
  1658.                       p2=p;
  1659.                     }
  1660.                     else             //创建链表
  1661.                     {
  1662.                             pre=p2;
  1663.                             p2->next=p;
  1664.                             p2=p;
  1665.                         }
  1666.             }
  1667.             p2->next=NULL;
  1668.         }
  1669.         if(n<=2)
  1670.                 head->next=NULL;
  1671.         else
  1672.                 pre->next=NULL;
  1673.     fclose(fp);    //关闭文件
  1674.     return head;   //返回头指针
  1675. }

  1676. void Add_Food()  //添加菜单
  1677. {
  1678.         HideCursor(1);//显示光标
  1679.         pStapleFood p1;//主食
  1680.         pNon_stapleFood p2;//副食
  1681.         pDrinkBeverage p3;//饮品
  1682.         char name[20];
  1683.         float price=0;
  1684.         int type=1;
  1685.         char t;
  1686.         do
  1687.         {
  1688.                 system("cls");
  1689.                 p1=(pStapleFood)malloc(N);
  1690.                 p2=(pNon_stapleFood)malloc(P);
  1691.                 p3=(pDrinkBeverage)malloc(Q);
  1692.                 toxy(30,6);
  1693.                 printf("请输入菜名:");
  1694.                 toxy(30,8);
  1695.                 printf("请输入价格:");
  1696.                 toxy(30,10);
  1697.                 printf("请输入类型:");
  1698.                 toxy(30,12);
  1699.                 printf("(1:主食  2.副食  3.饮品)");
  1700.                 toxy(42,6);
  1701.                 scanf("%s",name);
  1702.                 toxy(42,8);
  1703.                 scanf("%f",&price);
  1704.                 toxy(42,10);
  1705.                 scanf("%d",&type);
  1706.                 if(type==1)
  1707.                 {
  1708.                         strcpy(p1->name,name);
  1709.                         p1->price=price;
  1710.                         save_stapleFood(p1);
  1711.                 }
  1712.                 else if(type==2)
  1713.                 {
  1714.                         strcpy(p2->name,name);
  1715.                         p2->price=price;
  1716.                         save_non_stapleFood(p2);
  1717.                 }
  1718.                 else if(type==3)
  1719.                 {
  1720.                         strcpy(p3->name,name);
  1721.                         p3->price=price;
  1722.                         save_drinkBeverage(p3);
  1723.                 }
  1724.                 toxy(28,14);
  1725.                 printf("添加成功!是否继续?(1.是  2.否)");
  1726.                 while(1)
  1727.                 {
  1728.                         t=getch();
  1729.                         if(t=='1')
  1730.                                 break;
  1731.                         else if(t=='2')
  1732.                                 break;
  1733.                 }
  1734.                 if(t=='2')
  1735.                         break;
  1736.         }while(1);
  1737.        
  1738. }

  1739. void List_Food()  //菜单列表
  1740. {
  1741.         system("cls");
  1742.         int i=8;
  1743.         toxy(30,4);
  1744.         printf("菜单列表(按任意键继续)");
  1745.         pStapleFood p1;//主食
  1746.         pNon_stapleFood p2;//副食
  1747.         pDrinkBeverage p3;//饮品
  1748.         p1=readStapleFoodFile();//从主食文件中读取用户信息,返回一个表头地址
  1749.         p2=readNonStapleFoodFile();//从副食文件中读取用户信息,返回一个表头地址
  1750.         p3=readDrinkBeverageFile();//从饮品文件中读取用户信息,返回一个表头地址
  1751.         toxy(26,6);
  1752.         printf("菜名\t\t\t价格");
  1753.         toxy(20,7);
  1754.         printf("-----------------------------------");
  1755.         toxy(24,i);
  1756.         printf("主食:");
  1757.         i++;
  1758.         while(p1!=NULL)
  1759.         {
  1760.                 toxy(26,i);
  1761.                 printf("%-22s%.2f",p1->name,p1->price);
  1762.                 i++;
  1763.                 p1=p1->next;
  1764.         }
  1765.         toxy(24,i);
  1766.         printf("副食:");
  1767.         i++;
  1768.         while(p2!=NULL)
  1769.         {
  1770.                 toxy(26,i);
  1771.                 printf("%-22s%.2f",p2->name,p2->price);
  1772.                 i++;
  1773.                 p2=p2->next;
  1774.         }
  1775.         toxy(24,i);
  1776.         printf("饮品:");
  1777.         i++;
  1778.         while(p3!=NULL)
  1779.         {
  1780.                 toxy(26,i);
  1781.                 printf("%-22s%.2f",p3->name,p3->price);
  1782.                 i++;
  1783.                 p3=p3->next;
  1784.         }
  1785.         getch();
  1786. }

  1787. void Table()//餐桌管理
  1788. {
  1789.         char t;
  1790.         do
  1791.         {
  1792.                 system("cls");
  1793.                 HideCursor(0);
  1794.                 toxy(32,4);
  1795.                 printf("餐桌管理");
  1796.                 toxy(26,5);
  1797.                 printf("-------------------");
  1798.                 toxy(30,7);
  1799.                 printf("1) 添加餐桌");
  1800.                 toxy(30,9);
  1801.                 printf("2) 餐桌列表");
  1802.                 toxy(30,11);
  1803.                 printf("3) 清理餐桌");
  1804.                 toxy(30,13);
  1805.                 printf("4) 返回上一级");
  1806.                 t=getch();
  1807.                 switch(t)
  1808.                 {
  1809.                         case '1':Add_Table();break;
  1810.                         case '2':Administrator_List_Table();break;
  1811.                         case '3':Clear_Table();break;
  1812.                         case '4':break;
  1813.                         default :break;
  1814.                 }
  1815.                 if(t=='4')
  1816.                         break;
  1817.         }while(1);
  1818. }

  1819. void save_Table(pTable p)//保存餐桌信息
  1820. {
  1821.         FILE *fp;       //文件指针
  1822.         fp=fopen("Table.txt","a+");    //以追加的方式打开文件
  1823.         if(fp==NULL)
  1824.         {
  1825.                 printf("cannot open file\n");
  1826.         }
  1827.         if(fwrite(p,X,1,fp)!=1)    //将p1所指向的1个大小为N的数据结构写入fp所指向的文件中
  1828.         {
  1829.                 printf("file write error\n");
  1830.         }
  1831.         fclose(fp);        //关闭文件
  1832. }

  1833. pTable readTableFile()//从餐桌文件中读取用户信息,返回一个表头地址
  1834. {
  1835.         FILE *fp;       //文件指针
  1836.         int n=0;//记录链表 的结点数
  1837.         pTable head=NULL;//定义头指针
  1838.         pTable p2,p,pre;
  1839.         fp=fopen("Table.txt","a+");     //以只读的方式打开文件
  1840.         if(fp==NULL)
  1841.         {
  1842.                 printf("cannot open file\n");
  1843.         }
  1844.         else
  1845.         {
  1846.                 while(!feof(fp))        //判断文件位置标志是否移动到文件末尾
  1847.                 {
  1848.                     n++;
  1849.                         p=(pTable)malloc(X); //向内存申请一段空间
  1850.                    fread(p,X,1,fp);     //将fp所指向的文件中的内容赋给p
  1851.                    if(n==1)
  1852.                    {
  1853.                       head=p;
  1854.                       p2=p;
  1855.                     }
  1856.                     else             //创建链表
  1857.                     {
  1858.                             pre=p2;
  1859.                             p2->next=p;
  1860.                             p2=p;
  1861.                         }
  1862.             }
  1863.             p2->next=NULL;
  1864.         }
  1865.         if(n<=2)
  1866.                 head->next=NULL;
  1867.         else
  1868.                 pre->next=NULL;
  1869.     fclose(fp);    //关闭文件
  1870.     return head;   //返回头指针
  1871. }

  1872. void Add_Table()//添加餐桌
  1873. {
  1874.         HideCursor(1);//显示光标
  1875.         pTable p,p1;
  1876.         p1=readTableFile();
  1877.         char t;
  1878.         int ID;
  1879.         int count;
  1880.         do
  1881.         {
  1882.                 system("cls");
  1883.                 p=(pTable)malloc(X);
  1884.                 toxy(26,6);
  1885.                 printf("请输入餐桌编号:");
  1886.                 toxy(26,8);
  1887.                 printf("请输入可坐人数:");
  1888.                 toxy(42,6);
  1889.                 scanf("%d",&ID);
  1890.                 toxy(42,8);
  1891.                 scanf("%d",&count);
  1892.                 while(p1!=NULL&&p1->ID!=ID)
  1893.                 {
  1894.                         p1=p1->next;
  1895.                 }
  1896.                 if(p1!=NULL)
  1897.                 {
  1898.                         toxy(30,10);
  1899.                         printf("该餐桌编号已存在,请重新输入!");
  1900.                         Sleep(2000);
  1901.                         continue;
  1902.                 }
  1903.                 p->ID=ID;
  1904.                 p->People=0;
  1905.                 p->count=count;
  1906.                 strcpy(p->Username,"无");
  1907.                 save_Table(p);
  1908.                 toxy(24,10);
  1909.                 printf("添加成功!是否继续?(1.是   2.否)");
  1910.                 while(1)
  1911.                 {
  1912.                         t=getch();
  1913.                         if(t=='1')
  1914.                                 break;
  1915.                         else if(t=='2')
  1916.                                 break;
  1917.                 }
  1918.                 if(t=='2')
  1919.                         break;
  1920.         }while(1);
  1921. }

  1922. void Administrator_List_Table()//餐桌列表
  1923. {
  1924.         system("cls");
  1925.         pTable p,head;
  1926.         head=readTableFile();
  1927.         p=head;
  1928.         int i=11;
  1929.         toxy(32,6);
  1930.         printf("餐桌列表(按任意键继续)");
  1931.         toxy(22,8);
  1932.         printf("餐桌编号 | 可坐人数 | 已坐人数 | 订餐人");
  1933.         toxy(20,9);
  1934.         printf("--------------------------------------------");
  1935.         while(p!=NULL)
  1936.         {
  1937.                 toxy(26,i);
  1938.                 printf("%-10d%-10d%-10d%s",p->ID,p->count,p->People,p->Username);
  1939.                 i++;
  1940.                 p=p->next;
  1941.         }
  1942.         getch();
  1943. }

  1944. void Clear_Table()//清理餐桌
  1945. {
  1946.         char t;
  1947.         do
  1948.         {
  1949.                 system("cls");
  1950.                 toxy(32,4);
  1951.                 printf("清理餐桌");
  1952.                 toxy(26,5);
  1953.                 printf("-------------------");
  1954.                 toxy(30,7);
  1955.                 printf("1) 清理指定餐桌");
  1956.                 toxy(30,9);
  1957.                 printf("2) 清理所有餐桌");
  1958.                 toxy(30,11);
  1959.                 printf("3) 返回上一级");
  1960.                 t=getch();
  1961.                 switch(t)
  1962.                 {
  1963.                         case '1':Clear_oneTable();break;
  1964.                         case '2':Clear_allTable();break;
  1965.                         case '3':break;
  1966.                         default :break;
  1967.                 }
  1968.                 if(t=='3')
  1969.                         break;
  1970.         }while(1);
  1971. }

  1972. void Updata_Table(pTable head)//更新餐桌文件
  1973. {
  1974.         FILE *fp;
  1975.         pTable p=head->next;                           //使p指向第二个结点
  1976.         fp=fopen("Table.txt","w");                  //先清空原文件内容再将修改后的信息写入文件
  1977.         if(fp==NULL)
  1978.         {
  1979.                 printf("cannot open file\n");
  1980.         }
  1981.         if(fwrite(head,X,1,fp)!=1)                 //将head所指向的数据写入fp所指向的文件
  1982.         {
  1983.                 printf("file write error\n");
  1984.         }
  1985.         fclose(fp);                         //关闭文件
  1986.         fp=fopen("Table.txt","a");          // 打开User.txt文件,方式为追加
  1987.         while(p!=NULL)                    //p不为空就执行循环体
  1988.         {
  1989.                 if(fwrite(p,X,1,fp)!=1)            //将p所指向的1个大小为N的数据结构写入fp所指向的文件
  1990.             {
  1991.                         printf("file write error\n");
  1992.             }
  1993.             p=p->next;                     //使p指向下一个结点
  1994.         }
  1995.         fclose(fp);              //关闭文件
  1996. }

  1997. void Clear_oneTable()//清理指定餐桌
  1998. {
  1999.         int ID;
  2000.         pTable p,head;
  2001.         char t;
  2002.         do
  2003.         {
  2004.                 system("cls");
  2005.                 head=readTableFile();
  2006.                 p=head;
  2007.                 toxy(28,8);
  2008.                 printf("请输入您要清理的餐桌编号:");
  2009.                 scanf("%d",&ID);
  2010.                 while(p!=NULL&&p->ID!=ID)
  2011.                 {
  2012.                         p=p->next;
  2013.                 }
  2014.                 if(p)
  2015.                 {
  2016.                         toxy(32,10);
  2017.                         printf("正在清理....");
  2018.                         p->People=0;
  2019.                         strcpy(p->Username,"无");
  2020.                         Updata_Table(head);
  2021.                         Sleep(2000);
  2022.                         toxy(24,10);
  2023.                         printf("清理成功!是否继续?1.是   2.否");
  2024.                         while(1)
  2025.                         {
  2026.                                 t=getch();
  2027.                                 if(t=='1')
  2028.                                         break;
  2029.                                 else if(t=='2')
  2030.                                         break;
  2031.                         }
  2032.                         if(t=='2')
  2033.                                 break;
  2034.                 }
  2035.                 else
  2036.                 {
  2037.                         toxy(32,10);
  2038.                         printf("该餐桌不存在!请重新输入");
  2039.                         Sleep(1500);
  2040.                 }
  2041.         }while(1);
  2042. }

  2043. void Clear_allTable()//清理所有餐桌
  2044. {
  2045.         system("cls");
  2046.         toxy(32,10);
  2047.         printf("正在清理....");
  2048.         pTable p,head;
  2049.         head=readTableFile();
  2050.         p=head;
  2051.         while(p!=NULL)
  2052.         {
  2053.                 p->People=0;
  2054.                 strcpy(p->Username,"无");
  2055.                 p=p->next;
  2056.         }
  2057.         Updata_Table(head);
  2058.         Sleep(2000);
  2059.         toxy(32,10);
  2060.         printf("清理成功!按任意键继续");
  2061.         getch();
  2062. }

  2063. void Check_User()//查看用户
  2064. {
  2065.         char t;
  2066.         do
  2067.         {
  2068.                 system("cls");
  2069.                 system("color 79");
  2070.                 toxy(32,6);
  2071.                 printf("  查看用户  ");
  2072.                 toxy(32,7);
  2073.                 printf("----------------");
  2074.                 toxy(32,9);
  2075.                 printf(" 1) 查找用户 ");
  2076.                 toxy(32,11);
  2077.                 printf(" 2) 所有用户 ");
  2078.                 toxy(32,13);
  2079.                 printf(" 3)返回上一级");
  2080.                 t=getch();
  2081.                 switch(t)
  2082.                 {
  2083.                         case '1':Find_User();break;
  2084.                         case '2':All_User();break;
  2085.                         case '3':break;
  2086.                         default :break;
  2087.                 }
  2088.                 if(t=='3')
  2089.                         break;
  2090.         }while(1);
  2091. }

  2092. void Find_User()//查找用户
  2093. {
  2094.         system("cls");
  2095.         char username[10];
  2096.         pUser p, head=readUserFile();
  2097.         p=head;
  2098.         toxy(32,10);
  2099.         printf("请输入您要查找的用户名:");
  2100.         scanf("%s",username);
  2101.         toxy(24,12);
  2102.         printf("用户名\t\t余额\t\t会员状态");
  2103.         while(p!=NULL&&strcmp(p->userName,username)!=0)
  2104.                 p=p->next;
  2105.         if(p!=NULL)
  2106.         {
  2107.                 toxy(24,14);
  2108.                 printf("%s\t\t%.2f\t\t%d",p->userName,p->money,p->isVIP);
  2109.         }
  2110.         else
  2111.         {
  2112.                 toxy(28,14);
  2113.                 printf("没有找到相关信息");
  2114.         }
  2115.         toxy(30,16);
  2116.         printf("请按任意键返回");
  2117.         getch();
  2118. }

  2119. void All_User()//打印所有用户信息
  2120. {
  2121.         system("cls");
  2122.         pUser p,head;
  2123.         head=readUserFile();
  2124.         p=head;
  2125.         int i=9;
  2126.         toxy(32,4);
  2127.         printf("所有用户");
  2128.         toxy(20,5);
  2129.         printf("--------------------------------------------------");
  2130.         toxy(30,6);
  2131.         printf("按任意键返回");
  2132.         toxy(24,7);
  2133.         printf("用户名\t\t余额\t\t会员状态");
  2134.         while(p!=NULL)
  2135.         {
  2136.                 toxy(24,i);
  2137.                 printf("%s\t\t%.2f\t\t%d",p->userName,p->money,p->isVIP);
  2138.                 p=p->next;
  2139.                 i+=2;
  2140.         }
  2141.         getch();
  2142. }

  2143. void All_VIP()//查看所有VIP
  2144. {
  2145.         system("cls");
  2146.         system("color 79");
  2147.         pUser p,head;
  2148.         head=readUserFile();
  2149.         p=head;
  2150.         int i=11;
  2151.         toxy(32,6);
  2152.         printf("本店会员");
  2153.         toxy(26,8);
  2154.         printf("用户名\t\t余额");
  2155.         toxy(24,9);
  2156.         printf("--------------------------------");
  2157.         while(p!=NULL)
  2158.         {
  2159.                 if(p->isVIP)
  2160.                 {
  2161.                         toxy(26,i);
  2162.                         printf("%s\t\t\t%.2f",p->userName,p->money);
  2163.                         i+=2;
  2164.                 }
  2165.                 p=p->next;
  2166.         }
  2167.         toxy(30,i);
  2168.         printf("按任意键返回");
  2169.         getch();
  2170. }

  2171. void Setup_administrator()//设置管理员
  2172. {
  2173.        
  2174.         system("color 80");
  2175.         char t;
  2176.         char username[10];
  2177.         pUser p,head;
  2178.         head=readUserFile();
  2179.         do
  2180.         {
  2181.                 system("cls");
  2182.                 p=head;
  2183.                 toxy(26,8);
  2184.                 printf("请输入您要设置为管理员的用户名:");
  2185.                 scanf("%s",username);
  2186.                 while(p!=NULL&&strcmp(p->userName,username)!=0)
  2187.                 {
  2188.                         p=p->next;
  2189.                 }
  2190.                 if(p!=NULL)
  2191.                 {
  2192.                         p->isAdministrator=1;
  2193.                         Updata_User(head);
  2194.                         toxy(32,10);
  2195.                         printf("设置成功!请按任意键返回");
  2196.                         getch();
  2197.                         break;
  2198.                 }
  2199.                 else
  2200.                 {
  2201.                         toxy(24,10);
  2202.                         printf("您所输入的用户名不存在!是否继续?(1.是   2.否)");
  2203.                         while(1)
  2204.                         {
  2205.                                 t=getch();
  2206.                                 if(t=='1')
  2207.                                         break;
  2208.                                 else if(t=='2')
  2209.                                         break;
  2210.                         }
  2211.                         if(t=='2')
  2212.                                 break;
  2213.                 }
  2214.         }while(1);       
  2215. }


  2216. int main()
  2217. {       
  2218.         Default();//进入欢迎界面
  2219.         return 0;
  2220. }
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
Yvonne! + 5 + 5 + 3 鱼C有你更精彩^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-12-22 20:28:09 From FishC Mobile | 显示全部楼层
782353676 发表于 2020-12-22 20:16

大佬,您这代码太复杂了这就是个小问题ヽ(_;)ノ
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-22 20:51:52 | 显示全部楼层
#include <stdio.h>

void main()
{
        int m,n;//m为餐桌号,n为菜编号
        printf("请输入你所在的餐桌号:");
        scanf("%d",&m);
        printf("\n请点菜:\n");
        printf("宫保鸡丁--1\n");
        printf("清炒油菜--2\n");
        printf("可口可乐--3\n");
        printf("请输入你要点菜的编号:");
        scanf("%d",&n);
        switch(n)
        {
        case 1:
                printf("餐桌号:%d,已点菜:宫保鸡丁\n",m);
                break;
        case 2:
                printf("餐桌号:%d,已点菜:清炒油菜\n",m);
                break;
        case 3:
                printf("餐桌号:%d,已点菜:可口可乐\n",m);
                break;
        default:
                printf("你输入的菜编号错误\n");
        }

}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-25 21:42:44 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-26 11:16:26 | 显示全部楼层
ccczd666 发表于 2020-12-22 20:28
大佬,您这代码太复杂了这就是个小问题ヽ(_;)ノ

大佬这是帮你把整个系统给搞出来了,你自己挖一下需要的内容就好了嘛O(∩_∩)O哈哈~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-26 11:18:15 | 显示全部楼层

我想知道你这段码是即兴还是认真的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-30 22:26:22 | 显示全部楼层
Yvonne! 发表于 2020-12-26 11:18
我想知道你这段码是即兴还是认真的

我们期末作业....
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-30 23:07:18 | 显示全部楼层

膜拜大佬
这太牛批了!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-3 16:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表