经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C 语言 » 查看文章
C语言实现简单餐饮管理与点餐系统
来源:jb51  时间:2022/5/30 9:37:28  对本文有异议

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

  1. /*
  2. ?? ?项目名称:南航餐饮管理系统
  3. ?? ?组员:梁文新,刘青林,刘艺,施瑞文(组长)
  4. */
  5. ?
  6. ?
  7. //当注册用户名为:root,密码为:root的账号时,系统默认为初始管理员
  8. ?
  9. //头文件?
  10. #include<stdio.h>
  11. #include<stdlib.h>
  12. #include<time.h>
  13. #include<conio.h>
  14. #include<windows.h>
  15. #include<string.h>
  16. ?
  17. ?
  18. //宏定义区
  19. #define M ?sizeof(struct User)//用户表的大小?
  20. #define N ?sizeof(struct stapleFood)//主食 表大小?
  21. #define P ?sizeof(struct non_stapleFood)//副食表大小
  22. #define Q ?sizeof(struct Drink_beverage) //饮品表大小?
  23. #define X ?sizeof(struct Table)//餐桌表大小?
  24. #define Y ?sizeof(struct Form)//订单表大小?
  25. ?
  26. //结构体
  27. ?
  28. struct User ? ?//用户表?
  29. {
  30. ?? ?char userName[10];//用户名?
  31. ?? ?char passWord[18];//密码?
  32. ?? ?int isVIP;//会员标记?
  33. ?? ?int isAdministrator;//管理员标记?
  34. ?? ?float money;//余额?
  35. ?? ?struct User *next;//指针域?
  36. };
  37. typedef struct User user;
  38. typedef user* pUser;
  39. ?
  40. struct stapleFood ? //主食?
  41. {
  42. ?? ?char name[20];
  43. ?? ?float price;
  44. ?? ?struct stapleFood *next;
  45. };
  46. typedef struct stapleFood staple_food;
  47. typedef staple_food *pStapleFood;
  48. ?
  49. struct non_stapleFood ? //副食?
  50. {
  51. ?? ?char name[20];
  52. ?? ?float price;
  53. ?? ?struct non_stapleFood *next;
  54. };?
  55. typedef struct non_stapleFood non_staple_food;
  56. typedef non_staple_food *pNon_stapleFood;
  57. ?
  58. struct Drink_beverage ?//饮品?
  59. {
  60. ?? ?char name[20];
  61. ?? ?float price;
  62. ?? ?struct Drink_beverage *next;
  63. };
  64. typedef struct Drink_beverage drinkBeverage;
  65. typedef drinkBeverage *pDrinkBeverage;
  66. ?
  67. struct Table ? //餐桌?
  68. {
  69. ?? ?int ID;//餐桌编号
  70. ?? ?int People;//已坐人数
  71. ?? ?int count;//可容纳人数
  72. ?? ?char Username[10];//订餐人?
  73. ?? ?struct Table *next;?
  74. };
  75. typedef struct Table table;
  76. typedef table *pTable;
  77. ?
  78. ?
  79. struct Form ? ?//订单?
  80. {
  81. ?? ?char name[20];
  82. ?? ?float price;
  83. ?? ?struct Form *next;
  84. };
  85. typedef struct Form orderForm;
  86. typedef orderForm *pOrder;
  87. ?
  88. ?
  89. //自定义函数区
  90. ?
  91. ?? ?//用户客户端?
  92. ?
  93. void Default();//欢迎界面?
  94. void User_Login();//用户登录界面
  95. void Logon();//注册界面?
  96. pUser readUserFile();//从文件中读取用户信息,返回一个表头地址?
  97. void save_User(pUser p1);//将用户信息保存到文件中?
  98. void User_Menu();//用户菜单 ?
  99. void User_Order();//点餐?
  100. void Order_StapleFood();//主食
  101. void Order_nonStapleFood();//副食
  102. void Order_DrinkBeverage();//饮品
  103. void Order_Form(int ID,int number);//订单?
  104. void User_List_Table();//餐桌列表?
  105. void Apply_VIP_Menu();//会员办理菜单?
  106. void Add_money(pUser head);//充值?
  107. void Updata_User(pUser head);//更新用户表?
  108. void Apply_VIP(pUser head);//办理会员?
  109. void User_Wallet();//我的钱包?
  110. ?
  111. ?
  112. ?? ?//管理员客户端?
  113. void Administrator_Menu();//管理员菜单?
  114. void Administrator_Login();//管理员登录?
  115. void Check_User();//查看用户?
  116. void Find_User();//查找用户
  117. void All_User();//查看所有用户?
  118. void All_VIP();//本店会员?
  119. void Setup_administrator();//设置管理员?
  120. void Food();//菜品信息?
  121. void Add_Food();//添加菜单?
  122. void save_stapleFood(pStapleFood p);//保存主食信息?
  123. void save_non_stapleFood(pNon_stapleFood p);//保存副食信息
  124. void save_drinkBeverage(pDrinkBeverage p);//保存饮品信息
  125. pStapleFood readStapleFoodFile();//从主食文件中读取用户信息,返回一个表头地址 ?
  126. pNon_stapleFood readNonStapleFoodFile();//从副食文件中读取用户信息,返回一个表头地址
  127. pDrinkBeverage readDrinkBeverageFile();//从饮品文件中读取用户信息,返回一个表头地址
  128. void Table();//餐桌管理?
  129. void Add_Table();//添加餐桌?
  130. void save_Table(pTable p);//保存餐桌信息
  131. pTable readTableFile(); //从餐桌文件中读取用户信息,返回一个表头地址
  132. void Clear_Table();//清理餐桌?
  133. void Clear_oneTable();//清理指定餐桌
  134. void Clear_allTable();//清理所有餐桌?
  135. void Updata_Table(pTable head);//更新餐桌文件?
  136. void Administrator_List_Table();//餐桌列表?
  137. ?
  138. ?
  139. ?? ?//公共函数
  140. void toxy(int x,int y);//将光标移动到x,y坐标处
  141. void HideCursor(int x);//隐藏光标?
  142. char *HidePassword();//隐藏密码?
  143. void Exit();//退出系统 ?
  144. void Change();//切换账号?
  145. void Amend_passWord();//修改密码?
  146. void List_Food();//菜单列表?
  147. ?
  148. //全局变量区
  149. char _userName[10];?
  150. char _passWord[18];//记录当前用户?
  151. pOrder orderHead=NULL,p2=NULL;//记录当前用户的订单?
  152. int num=0;
  153. ?
  154. //函数实现区
  155. ?
  156. void toxy(int x,int y)//将光标移动到x,y坐标处
  157. {
  158. ?? ?COORD pos={x,y};
  159. ?? ?HANDLE Out = GetStdHandle(STD_OUTPUT_HANDLE);
  160. ?? ?SetConsoleCursorPosition(Out,pos);?
  161. }
  162. ?
  163. void HideCursor(int x)//隐藏光标 ,当x为0时,隐藏,为1时,显示?
  164. {
  165. ?? ?CONSOLE_CURSOR_INFO cursor_info ={1,x};
  166. ?? ?SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
  167. ?}?
  168. ?
  169. void Default()//欢迎界面?
  170. {
  171. ?? ?char t;//用于选择?
  172. ?? ?do
  173. ?? ?{
  174. ?? ??? ?HideCursor(0); //隐藏光标?
  175. ?? ??? ?system("color 72");
  176. ?? ??? ?toxy(28,8);
  177. ?? ??? ?printf(" ? ? 欢迎来到南航餐饮! ? ?");
  178. ?? ??? ?toxy(26,9);
  179. ?? ??? ?printf("-----------------------------");
  180. ?? ??? ?toxy(27,11);
  181. ?? ??? ?printf("1.登录 ?2.注册 ?3.管理员登录");
  182. ?? ??? ?while(1) ? ?//死循环为防止其他按键干扰?
  183. ?? ??? ?{
  184. ?? ??? ??? ?t=getch();//不回显函数?
  185. ?? ??? ??? ?if(t=='1')//如果按1,则进入登录界面?
  186. ?? ??? ??? ??? ?User_Login();
  187. ?? ??? ??? ?else if(t=='2')//如果按2,则进入注册界面?
  188. ?? ??? ??? ??? ?Logon();
  189. ?? ??? ??? ?else if(t=='3')
  190. ?? ??? ??? ??? ?Administrator_Login();
  191. ?? ??? ?}//如果既不是1也不是2和3,则循环输入?
  192. ?? ?}while(1);//永远为真?
  193. ?? ?
  194. }?
  195. ?
  196. void User_Menu()//用户菜单?
  197. {
  198. ?? ?
  199. ?? ?char t;//用于选择菜单选项?
  200. ?? ?do
  201. ?? ?{?? ?
  202. ?? ??? ?system("cls");
  203. ?? ??? ?HideCursor(0); //隐藏光标?
  204. ?? ??? ?system("color 74");
  205. ?? ??? ?toxy(32,3);
  206. ?? ??? ?printf("南航餐饮点餐系统!");
  207. ?? ??? ?toxy(32,4);
  208. ?? ??? ?printf("当前用户:%s",_userName);
  209. ?? ??? ?toxy(30,5);
  210. ?? ??? ?printf("*********************");
  211. ?? ??? ?toxy(32,7);
  212. ?? ??? ?printf("| ?1.菜单列表 ?|");
  213. ?? ??? ?toxy(32,9);
  214. ?? ??? ?printf("| ?2.餐桌列表 ?|");
  215. ?? ??? ?toxy(32,11);
  216. ?? ??? ?printf("| ?3.会员办理 ?|");
  217. ?? ??? ?toxy(32,13);
  218. ?? ??? ?printf("| ?4.修改密码 ?|");
  219. ?? ??? ?toxy(32,15);
  220. ?? ??? ?printf("| ?5.我的钱包 ?|");?
  221. ?? ??? ?toxy(32,17);
  222. ?? ??? ?printf("| ?6.切换账号 ?|");?
  223. ?? ??? ?toxy(32,19);
  224. ?? ??? ?printf("| ?7.退出系统 ?|");
  225. ?? ??? ?t=getch();//不回显函数,输入一个值?
  226. ?? ??? ?switch(t)
  227. ?? ??? ?{
  228. ?? ??? ??? ?case '1':User_Order();break;
  229. ?? ??? ??? ?case '2':User_List_Table();break;
  230. ?? ??? ??? ?case '3':Apply_VIP_Menu();break;
  231. ?? ??? ??? ?case '4':Amend_passWord();break;
  232. ?? ??? ??? ?case '5':User_Wallet();break;
  233. ?? ??? ??? ?case '6':Change();break;
  234. ?? ??? ??? ?case '7':Exit();break;
  235. ?? ??? ??? ?default :break;?
  236. ?? ??? ?}
  237. ?? ?}while(1);//永远 为真?
  238. }?
  239. ?
  240. char *HidePassword()//隐藏密码?
  241. {
  242. ?? ?char password[18];//密码?
  243. ?? ?char *p;//指向密码的指针?
  244. ?? ?int i=0;//记录密码位数?
  245. ?? ?char t;//输入密码?
  246. ?? ?for(;;) ? ? ? ? ? ? ?//此处为输入密码不回显操作?
  247. ?? ??? ?{
  248. ?? ??? ??? ?t=getch(); ? ? ? //输入k?
  249. ?? ??? ??? ?if(t=='\r') ? ? ?//如果输入k为回车,则跳出循环?
  250. ?? ??? ??? ?{
  251. ?? ??? ??? ??? ?break;
  252. ?? ??? ??? ?}
  253. ?? ??? ??? ?else if(t=='\b') ?//如果输入k为删除键?
  254. ?? ??? ??? ?{
  255. ?? ??? ??? ??? ?if(i>0) ? ? ? //如若密码还没完全删除?
  256. ?? ??? ??? ??? ?{
  257. ?? ??? ??? ??? ??? ?printf("\b");
  258. ?? ??? ??? ??? ??? ?printf(" ");
  259. ?? ??? ??? ??? ??? ?printf("\b");
  260. ?? ??? ??? ??? ??? ?i--;
  261. ?? ??? ??? ??? ?}
  262. ?? ??? ??? ?}
  263. ?? ??? ??? ?else ? ? ? ? ? ? ?//如果输入的k既不是删除键,也不是回车键?
  264. ?? ??? ??? ?{
  265. ?? ??? ??? ??? ?password[i]=t; ? //把k的值赋给_password[i];?
  266. ?? ??? ??? ??? ?printf("*"); ? ? ?//输出*号,保护用户隐私?
  267. ?? ??? ??? ??? ?i++; ? ? ? ? ? ? ?//密码位数加1?
  268. ?? ??? ??? ?}
  269. ?? ??? ?}
  270. ?? ??? ?password[i]='\0';//在数组末端加一个结束符?
  271. ?? ??? ?p=password;//让p指向该数组?
  272. ?? ??? ?return p; //返回一个指向密码的指针?
  273. }?
  274. ?
  275. pUser readUserFile()//从文件中读取用户信息,返回一个表头地址?
  276. {
  277. ?? ?FILE *fp; ? ? ? //文件指针?
  278. ?? ?int n=0;//记录链表 的结点数?
  279. ?? ?pUser head=NULL;//定义头指针?
  280. ?? ?pUser p2,p,pre;
  281. ?? ?fp=fopen("User.txt","a+"); ? ? //以只读的方式打开文件?
  282. ?? ?if(fp==NULL)
  283. ?? ?{
  284. ?? ??? ?printf("cannot open file\n");
  285. ?? ?}
  286. ?? ?else
  287. ?? ?{
  288. ?? ??? ?while(!feof(fp)) ? ? ? ?//判断文件位置标志是否移动到文件末尾?
  289. ?? ??? ?{
  290. ?? ??? ? ? ?n++;
  291. ?? ??? ??? ?p=(pUser)malloc(M); //向内存申请一段空间?
  292. ?? ??? ? ? fread(p,M,1,fp); ? ? //将fp所指向的文件中的内容赋给p
  293. ?? ??? ? ? if(n==1)
  294. ?? ??? ? ? {
  295. ?? ??? ? ? ? ?head=p;
  296. ?? ??? ? ? ? ?p2=p;
  297. ?? ??? ? ? ?}
  298. ?? ??? ? ? ?else ? ? ? ? ? ? //创建链表?
  299. ?? ??? ? ? ?{
  300. ?? ??? ? ? ??? ?pre=p2;
  301. ?? ??? ? ? ??? ?p2->next=p;
  302. ?? ??? ? ? ??? ?p2=p;
  303. ?? ??? ??? ?}
  304. ?? ? ? ?}
  305. ?? ? ? ?p2->next=NULL;
  306. ?? ?}
  307. ?? ?if(n<=2)
  308. ?? ??? ?head->next=NULL;
  309. ?? ?else
  310. ?? ??? ?pre->next=NULL;
  311. ? ? fclose(fp); ? ?//关闭文件?
  312. ? ? return head; ? //返回头指针?
  313. }
  314. ?
  315. void save_User(pUser p1) ? ? //将p1所指向的内容存储到文件中?
  316. {
  317. ?? ?FILE *fp; ? ? ? //文件指针?
  318. ?? ?fp=fopen("User.txt","a+"); ? ?//以追加的方式打开文件?
  319. ?? ?if(fp==NULL)
  320. ?? ?{
  321. ?? ??? ?printf("cannot open file\n");
  322. ?? ?}
  323. ?? ?if(fwrite(p1,M,1,fp)!=1) ? ?//将p1所指向的1个大小为N的数据结构写入fp所指向的文件中?
  324. ?? ?{
  325. ?? ??? ?printf("file write error\n");
  326. ?? ?}
  327. ?? ?fclose(fp); ? ? ? ?//关闭文件?
  328. }
  329. ?
  330. void User_Login()//登录页面?
  331. {?
  332. ?? ?char *q,t,c;//q指针用于接收 *HidePassword()函数返回的指向密码的指针,t和c均用于选择?
  333. ?? ?pUser p=readUserFile();//从文件中读取用户信息,返回一个表头地址?
  334. ?? ?do
  335. ?? ?{
  336. ?? ??? ?HideCursor(1);//显示管光标?
  337. ?? ??? ?system("cls");//清屏?
  338. ?? ??? ?system("color 73");//设置颜色?
  339. ?? ??? ?toxy(28,8);
  340. ?? ??? ?printf("南航餐饮管理系统登录界面");
  341. ?? ??? ?toxy(26,9);
  342. ?? ??? ?printf("-----------------------------");
  343. ?? ??? ?toxy(32,11);
  344. ?? ??? ?printf("用户名:");
  345. ?? ??? ?toxy(32,13);
  346. ?? ??? ?printf("密 ?码:");
  347. ?? ??? ?toxy(40,11);
  348. ?? ??? ?scanf("%s",_userName);
  349. ?? ??? ?toxy(40,13);
  350. ?? ??? ?q=HidePassword();//输入密码?
  351. ?? ??? ?strcpy(_passWord,q);//将获得的密码复制给_passWord[]数组?
  352. ?? ??? ?while(p!=NULL&&strcmp(p->userName,_userName)!=0) ? //遍历链表,寻找当前输入的账户的账号?
  353. ?? ??? ?{
  354. ?? ??? ??? ?p=p->next;
  355. ?? ??? ?}
  356. ?? ??? ?if(p!=NULL) ? //如果p不为空?
  357. ?? ??? ?{
  358. ?? ? ? ??? ?if(strcmp(p->passWord,_passWord)==0) ? ? //如果输入的密码正确?
  359. ?? ??? ??? ?{
  360. ?? ??? ??? ??? ?toxy(32,16);
  361. ?? ??? ??? ??? ?printf("正在登陆....");
  362. ?? ??? ??? ??? ?Sleep(500); ? ? ?//暂停0.5秒
  363. ?? ??? ??? ??? ?system("cls");
  364. ?? ??? ??? ??? ?toxy(32,10);
  365. ?? ??? ??? ??? ?printf("登陆成功!");
  366. ?? ??? ??? ??? ?break; ? ?//跳出循环
  367. ?? ??? ??? ?}
  368. ?? ??? ??? ?else ? ? ?//如果输入的密码错误
  369. ?? ??? ??? ?{?
  370. ?? ??? ??? ??? ?toxy(32,16);
  371. ?? ??? ??? ??? ?printf("正在登陆....");
  372. ?? ??? ??? ??? ?Sleep(500);
  373. ?? ??? ??? ??? ?system("cls");
  374. ?? ??? ??? ??? ?toxy(30,8);
  375. ?? ??? ??? ??? ?printf("-------------------------");
  376. ?? ??? ??? ??? ?toxy(30,9);
  377. ?? ??? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? |");
  378. ?? ??? ??? ??? ?toxy(30,10);
  379. ?? ??? ??? ??? ?printf("| 密码错误!是否继续? ?|");
  380. ?? ??? ??? ??? ?toxy(30,12);
  381. ?? ??? ??? ??? ?printf("| 1.是 ? ? ? ? ? ? 2.否 |");
  382. ?? ??? ??? ??? ?toxy(30,13);
  383. ?? ??? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? |");
  384. ?? ??? ??? ??? ?toxy(30,14);
  385. ?? ??? ??? ??? ?printf("-------------------------");
  386. ?? ??? ??? ??? ?while(1)//无限循环为防止其他按键干扰?
  387. ?? ??? ??? ??? ?{
  388. ?? ??? ??? ??? ??? ?t=getch(); ?//输入t ? ?
  389. ?? ??? ??? ??? ??? ?if(t=='1') ? ? ? ? ?
  390. ?? ??? ??? ??? ??? ?{
  391. ?? ??? ??? ??? ??? ??? ?system("cls"); ?//清屏?
  392. ?? ??? ??? ??? ??? ??? ?break;
  393. ?? ??? ??? ??? ??? ?}
  394. ?? ??? ??? ??? ??? ?else if(t=='2') ? ? //如果输入t为n,进入开始界面?
  395. ?? ??? ??? ??? ??? ?{
  396. ?? ??? ??? ??? ??? ??? ?system("cls"); ?//清屏
  397. ?? ??? ??? ??? ??? ??? ?Default();break;
  398. ?? ??? ??? ??? ??? ?}
  399. ?? ??? ??? ??? ?}
  400. ?? ??? ??? ?}?
  401. ?? ? ? }
  402. ?? ? ? else ? ? ? ? ? ? ?//如果p为空,即输入的账号不正确?
  403. ?? ? ? {
  404. ?? ? ? ?? ? ? ?toxy(32,16);
  405. ?? ? ? ?? ? ? ?printf("正在登陆....");
  406. ?? ? ? ?? ? ? ?Sleep(500);
  407. ?? ? ? ?? ? ? ?system("cls");
  408. ?? ? ? ?? ? ? ?toxy(30,8);
  409. ?? ? ? ?? ? ? ?printf("-------------------------");
  410. ?? ? ? ?? ? ? ?toxy(30,9);
  411. ?? ? ? ?? ? ? ?printf("| ? ? ? ? ? ? ? ? ? ? ? |");
  412. ?? ? ? ?? ??? ?toxy(30,10);
  413. ?? ??? ??? ?printf("| ?账号错误!是否继续? |");
  414. ?? ??? ??? ?toxy(30,11);
  415. ?? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? |");
  416. ?? ??? ??? ?toxy(30,12);
  417. ?? ??? ??? ?printf("| ?1.是 ? ? ? ? ? ?2.否 |");?
  418. ?? ??? ??? ?toxy(30,13);
  419. ?? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? |");
  420. ?? ??? ??? ?toxy(30,14);
  421. ?? ??? ??? ?printf("-------------------------");
  422. ?? ??? ??? ?while(1) ? ? ?//死循环防止其他按键干扰?
  423. ?? ??? ??? ?{
  424. ?? ??? ??? ??? ?c=getch();
  425. ?? ??? ??? ??? ?if(c=='1')
  426. ?? ??? ??? ??? ?{ ?
  427. ?? ??? ??? ??? ??? ?system("cls");
  428. ?? ??? ??? ??? ??? ?break;
  429. ?? ??? ??? ??? ?}
  430. ?? ??? ??? ??? ?else if(c=='2')
  431. ?? ??? ??? ??? ?{
  432. ?? ??? ??? ??? ??? ?system("cls"); ?//清屏
  433. ?? ??? ??? ??? ??? ?Default();
  434. ?? ??? ??? ??? ?}
  435. ?? ??? ??? ?}
  436. ?? ? ? }
  437. ?? ?}while(1);
  438. ?? ?Sleep(500); ? ? ?//暂停0.5秒?
  439. ? ? User_Menu(); ? ? ? ? //账号密码均正确,进入用户主菜单?
  440. }?
  441. ?
  442. void Logon()//注册界面
  443. {
  444. ?? ?pUser p1;?
  445. ?? ?pUser p=readUserFile();//从文件中读取用户信息,返回一个表头地址?
  446. ?? ?p1=(pUser)malloc(M); ? ? //向内存申请一段空间?
  447. ?? ?char *q1,*q2;//q1,q2分别用于接收 *HidePassword()函数返回的值?
  448. ?? ?char userName[10],passWord[18],againPassword[18],c,k,t;//c,k,t均用于选择?
  449. ?? ?do{?? ?
  450. ?? ??? ?system("cls");?
  451. ?? ??? ?system("color 73");
  452. ?? ??? ?HideCursor(1);//显示光标?
  453. ?? ??? ?int flag=0;//标记信息库中是否存在要注册用户名?
  454. ?? ??? ?toxy(28,8);
  455. ?? ??? ?printf("南航餐饮管理系统注册界面");
  456. ?? ??? ?toxy(26,9);
  457. ?? ??? ?printf("-----------------------------");
  458. ?? ??? ?toxy(32,11);
  459. ?? ??? ?printf("用 户 名:");
  460. ?? ??? ?toxy(32,13);
  461. ?? ??? ?printf("密 ? ?码:");
  462. ?? ??? ?toxy(32,15);
  463. ?? ??? ?printf("确认密码:");
  464. ?? ??? ?toxy(42,11);
  465. ?? ??? ?scanf("%s",userName);//输入用户名?
  466. ?? ??? ?toxy(42,13);
  467. ?? ??? ?q1=HidePassword();//输入密码?
  468. ?? ??? ?strcpy(passWord,q1);
  469. ?? ??? ?toxy(42,15);
  470. ?? ??? ?q2=HidePassword();//输入确认密码?
  471. ?? ??? ?strcpy(againPassword,q2);
  472. ?? ??? ?while(p!=NULL) ? //遍历链表,寻找当前输入的账户的账号?
  473. ?? ??? ?{
  474. ?? ??? ??? ?if(strcmp(p->userName,userName)==0)//如果信息库中存在该用户名?
  475. ?? ??? ??? ?{
  476. ?? ??? ??? ??? ?toxy(32,17);
  477. ?? ??? ??? ??? ?printf("用户名已存在,请重新注册!");
  478. ?? ??? ??? ??? ?flag=1;//flag为1时表示用户名已存在?
  479. ?? ??? ??? ??? ?break;//跳出循环?
  480. ?? ??? ??? ?}
  481. ?? ??? ??? ?p=p->next;
  482. ?? ??? ?}
  483. ?? ??? ?if(flag)//如果用户名已存在?
  484. ?? ??? ?{
  485. ?? ??? ??? ?HideCursor(0);//隐藏光标?
  486. ?? ??? ??? ?toxy(32,19);
  487. ?? ??? ??? ?printf("是否继续?");//询问是否继续?
  488. ?? ??? ??? ?toxy(32,21);
  489. ?? ??? ??? ?printf("1.是\t2.否");
  490. ?? ??? ??? ?while(1)
  491. ?? ??? ??? ?{
  492. ?? ??? ??? ??? ?t=getch();
  493. ?? ??? ??? ??? ?if(t=='1')
  494. ?? ??? ??? ??? ??? ?break;
  495. ?? ??? ??? ??? ?else if(t=='2')
  496. ?? ??? ??? ??? ??? ?break;
  497. ?? ??? ??? ?}
  498. ?? ??? ??? ?if(t=='1')//如果继续,则重新注册?
  499. ?? ??? ??? ??? ?continue;
  500. ?? ??? ??? ?else if(t=='2')//如果不继续,则回到首页?
  501. ?? ??? ??? ?{
  502. ?? ??? ??? ??? ?system("cls");//清屏?
  503. ?? ??? ??? ??? ?Default();//回到首页?
  504. ?? ??? ??? ?} ?? ?
  505. ?? ??? ?}
  506. ?? ??? ??? ?
  507. ?? ??? ?if(strcmp(passWord,againPassword)==0) ? ? ? ?//如果输入的两次密码均正确?
  508. ?? ??? ?{
  509. ?? ??? ??? ?strcpy(p1->userName,userName);
  510. ?? ??? ??? ?strcpy(p1->passWord,passWord);
  511. ?? ??? ??? ?strcpy(_userName,userName);
  512. ?? ??? ??? ?strcpy(_passWord,passWord);
  513. ?? ??? ??? ?p1->isVIP=0;
  514. ?? ??? ??? ?p1->money=0;
  515. ?? ??? ??? ?if(strcmp(userName,"root")==0&&strcmp(passWord,"root")==0)
  516. ?? ??? ??? ??? ?p1->isAdministrator=1;
  517. ?? ??? ??? ?else
  518. ?? ??? ??? ??? ?p1->isAdministrator=0;
  519. ?? ??? ??? ?toxy(32,16);
  520. ?? ??? ??? ?printf("正在注册....");
  521. ?? ??? ??? ?Sleep(500);
  522. ?? ??? ??? ?break; ? ? ? ? ? ? ?//跳出循环?
  523. ?? ??? ?}
  524. ?? ??? ?else ? ?//如果输入的两次密码不同?
  525. ?? ??? ?{
  526. ?? ??? ??? ?toxy(32,16);
  527. ?? ??? ??? ?printf("正在注册....");
  528. ?? ??? ??? ?Sleep(500);
  529. ?? ??? ??? ?system("cls");
  530. ?? ??? ??? ?toxy(30,8);
  531. ?? ??? ??? ?printf("------------------------------");
  532. ?? ??? ??? ?toxy(30,9);
  533. ?? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? ? ? ?|");
  534. ?? ??? ??? ?toxy(30,10);
  535. ?? ??? ??? ?printf("|两次密码不一致!是否继续注册?|");
  536. ?? ??? ??? ?toxy(30,11);
  537. ?? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? ? ? ?|");
  538. ?? ??? ??? ?toxy(30,12);
  539. ?? ??? ??? ?printf("| ?1.是 ? ? ? ? ? ? ? ?2.否 ?|");?
  540. ?? ??? ??? ?toxy(30,13);
  541. ?? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? ? ? ?|");
  542. ?? ??? ??? ?toxy(30,14);
  543. ?? ??? ??? ?printf("------------------------------");
  544. ?? ??? ??? ?while(1)
  545. ?? ??? ??? ?{
  546. ?? ??? ??? ??? ?c=getch();
  547. ?? ??? ??? ??? ?if(c=='1')
  548. ?? ??? ??? ??? ?{
  549. ?? ??? ??? ??? ??? ?system("cls");
  550. ?? ??? ??? ??? ??? ?break;
  551. ?? ??? ??? ??? ?}
  552. ?? ??? ??? ??? ?else if(c=='2')
  553. ?? ??? ??? ??? ?{
  554. ?? ??? ??? ??? ??? ?system("cls");
  555. ?? ??? ??? ??? ??? ?Default();
  556. ?? ??? ??? ??? ??? ?break;
  557. ?? ??? ??? ??? ?}
  558. ?? ??? ??? ?}
  559. ?? ??? ?}
  560. ?? ?}while(1);
  561. ?? ?save_User(p1); ? ? //调用函数,将p1所指向的内容存储到文件中?
  562. ?? ?system("cls");
  563. ?? ?toxy(32,10);
  564. ?? ?printf("注册成功!");
  565. ?? ?Sleep(500); ? ? ? ? //暂停0.5秒?
  566. ?? ?toxy(32,12);
  567. ?? ?printf("正在自动为您登陆....");
  568. ?? ?Sleep(500);
  569. ?? ?User_Menu(); ? ?//注册成功后进入主菜单?
  570. }?
  571. ?
  572. void User_Order()//点餐
  573. {
  574. ?? ?char ch='0';
  575. ?? ?char t='0';
  576. ?? ?int ID;
  577. ?? ?int number;
  578. ?? ?do
  579. ?? ?{
  580. ?? ??? ?while(1)
  581. ?? ??? ?{?? ?
  582. ?? ??? ??? ?system("cls");
  583. ?? ??? ??? ?HideCursor(1);
  584. ?? ??? ??? ?int flag=0;
  585. ?? ??? ??? ?pTable T,Thead;
  586. ?? ??? ??? ?Thead=readTableFile();
  587. ?? ??? ??? ?T=Thead;
  588. ?? ??? ??? ?int j=11;
  589. ?? ??? ??? ?toxy(12,6);
  590. ?? ??? ??? ?printf("餐桌列表(按任意键继续)");
  591. ?? ??? ??? ?toxy(2,8);
  592. ?? ??? ??? ?printf("餐桌编号 | 可坐人数 | 已坐人数");
  593. ?? ??? ??? ?toxy(0,9);
  594. ?? ??? ??? ?printf("--------------------------------------");
  595. ?? ??? ??? ?while(T!=NULL)
  596. ?? ??? ??? ?{
  597. ?? ??? ??? ??? ?toxy(6,j);
  598. ?? ??? ??? ??? ?printf("%-10d%-10d%d",T->ID,T->count,T->People);
  599. ?? ??? ??? ??? ?j++;
  600. ?? ??? ??? ??? ?T=T->next;
  601. ?? ??? ??? ?}
  602. ?? ??? ??? ?toxy(38,12);
  603. ?? ??? ??? ?printf("请选择餐桌号:");
  604. ?? ??? ??? ?scanf("%d",&ID);
  605. ?? ??? ??? ?toxy(40,14);
  606. ?? ??? ??? ?printf("请选择人数:");
  607. ?? ??? ??? ?scanf("%d",&number);
  608. ?? ??? ??? ?T=Thead;
  609. ?? ??? ??? ?while(T!=NULL)
  610. ?? ??? ??? ?{
  611. ?? ??? ??? ??? ?if(T->ID==ID)
  612. ?? ??? ??? ??? ?{
  613. ?? ??? ??? ??? ??? ?if((T->count)-(T->People)>=number)
  614. ?? ??? ??? ??? ??? ?{
  615. ?? ??? ??? ??? ??? ??? ?toxy(38,16);
  616. ?? ??? ??? ??? ??? ??? ?printf("占座成功!按任意键继续点餐");
  617. ?? ??? ??? ??? ??? ??? ?flag=1;
  618. ?? ??? ??? ??? ??? ??? ?break;
  619. ?? ??? ??? ??? ??? ?}
  620. ?? ??? ??? ??? ??? ?else
  621. ?? ??? ??? ??? ??? ?{
  622. ?? ??? ??? ??? ??? ??? ?toxy(38,16);
  623. ?? ??? ??? ??? ??? ??? ?printf("占座失败!该餐桌座位不够");
  624. ?? ??? ??? ??? ??? ??? ?flag=0;
  625. ?? ??? ??? ??? ??? ??? ?break;
  626. ?? ??? ??? ??? ??? ?}
  627. ?? ??? ??? ??? ?}
  628. ?? ??? ??? ??? ?T=T->next;
  629. ?? ??? ??? ?}
  630. ?? ??? ??? ?if(T==NULL&&flag==0)
  631. ?? ??? ??? ?{
  632. ?? ??? ??? ??? ?toxy(38,16);
  633. ?? ??? ??? ??? ?printf("该餐桌编号不存在,请重新输入");
  634. ?? ??? ??? ??? ?Sleep(1000);
  635. ?? ??? ??? ??? ?continue;
  636. ?? ??? ??? ?}
  637. ?? ??? ??? ?else if(T!=NULL&&flag==0)
  638. ?? ??? ??? ?{
  639. ?? ??? ??? ??? ?toxy(38,17);
  640. ?? ??? ??? ??? ?printf("是否继续 ?1.是 ? 2.否");
  641. ?? ??? ??? ??? ?while(1)
  642. ?? ??? ??? ??? ?{
  643. ?? ??? ??? ??? ??? ?ch=getch();
  644. ?? ??? ??? ??? ??? ?if(ch=='1'||ch=='2')
  645. ?? ??? ??? ??? ??? ??? ?break;
  646. ?? ??? ??? ??? ?}
  647. ?? ??? ??? ??? ?if(ch=='1')
  648. ?? ??? ??? ??? ??? ?continue;
  649. ?? ??? ??? ??? ?else if(ch=='2')
  650. ?? ??? ??? ??? ??? ?break;
  651. ?? ??? ??? ?}
  652. ?? ??? ??? ?else if(flag)
  653. ?? ??? ??? ??? ?break;
  654. ?? ??? ?}
  655. ?? ??? ?if(ch=='2')
  656. ?? ??? ??? ?break;
  657. ?? ??? ?getch();
  658. ?? ??? ?do
  659. ?? ??? ?{
  660. ?? ??? ??? ?
  661. ?? ??? ??? ?system("cls");
  662. ?? ??? ??? ?toxy(32,6);
  663. ?? ??? ??? ?printf("点餐");
  664. ?? ??? ??? ?toxy(24,8);
  665. ?? ??? ??? ?printf("-----------------");
  666. ?? ??? ??? ?toxy(28,10);
  667. ?? ??? ??? ?printf("1) 主 ?食");
  668. ?? ??? ??? ?toxy(28,12);
  669. ?? ??? ??? ?printf("2) 副 ?食");
  670. ?? ??? ??? ?toxy(28,14);
  671. ?? ??? ??? ?printf("3) 饮 ?品");
  672. ?? ??? ??? ?toxy(28,16);
  673. ?? ??? ??? ?printf("4)订 ?单");
  674. ?? ??? ??? ?toxy(28,18);
  675. ?? ??? ??? ?printf("5)返 ?回");
  676. ?? ??? ??? ?t=getch();
  677. ?? ??? ??? ?switch(t)
  678. ?? ??? ??? ?{
  679. ?? ??? ??? ??? ?case '1':Order_StapleFood();break;
  680. ?? ??? ??? ??? ?case '2':Order_nonStapleFood();break;
  681. ?? ??? ??? ??? ?case '3':Order_DrinkBeverage();break;
  682. ?? ??? ??? ??? ?case '4':Order_Form(ID,number);break;
  683. ?? ??? ??? ??? ?case '5':break;
  684. ?? ??? ??? ??? ?default :break;?
  685. ?? ??? ??? ? }?
  686. ?? ??? ??? ? if(t=='5')
  687. ?? ??? ??? ? ?? ?break;
  688. ?? ??? ?}while(1);
  689. ?? ??? ?if(t=='5')
  690. ?? ??? ??? ?break;
  691. ?? ?}while(1);
  692. }?
  693. ?
  694. ?
  695. void Order_StapleFood()//主食
  696. {
  697. ?? ?char t;
  698. ?? ?do
  699. ?? ?{
  700. ?? ??? ?system("cls");
  701. ?? ??? ?pStapleFood p,head=readStapleFoodFile();
  702. ?? ??? ?pOrder p1;
  703. ?? ??? ?p=head;
  704. ?? ??? ?char foodName[20];
  705. ?? ??? ?int i=8;
  706. ?? ??? ?toxy(10,4);
  707. ?? ??? ?printf("主食菜单");
  708. ?? ??? ?toxy(6,6);
  709. ?? ??? ?printf("菜名\t\t\t价格");
  710. ?? ??? ?toxy(0,7);
  711. ?? ??? ?printf("-----------------------------------");
  712. ?? ??? ?while(p!=NULL)
  713. ?? ??? ?{
  714. ?? ??? ??? ?toxy(6,i);
  715. ?? ??? ??? ?printf("%-22s%.2f",p->name,p->price);
  716. ?? ??? ??? ?i++;
  717. ?? ??? ??? ?p=p->next;
  718. ?? ??? ?}
  719. ?? ??? ?toxy(40,8);
  720. ?? ??? ?printf("请输入您要点的菜名:");
  721. ?? ??? ?scanf("%s",foodName);
  722. ?? ??? ?p=head;
  723. ?? ??? ?while(p!=NULL&&strcmp(p->name,foodName)!=0)
  724. ?? ??? ?{
  725. ?? ??? ??? ?p=p->next;
  726. ?? ??? ?}
  727. ?? ??? ?if(p)
  728. ?? ??? ?{
  729. ?? ??? ??? ?p1=(pOrder)malloc(Y);
  730. ?? ??? ??? ?strcpy(p1->name,foodName);
  731. ?? ??? ??? ?p1->price=p->price;
  732. ?? ??? ??? ?num++;
  733. ?? ??? ??? ?if(num==1)
  734. ?? ??? ??? ?{
  735. ?? ??? ??? ??? ?orderHead=p1;
  736. ?? ??? ??? ??? ?p2=p1;
  737. ?? ??? ??? ?}
  738. ?? ??? ??? ?else
  739. ?? ??? ??? ?{
  740. ?? ??? ??? ??? ?p2->next=p1;
  741. ?? ??? ??? ??? ?p2=p1;
  742. ?? ??? ??? ?}
  743. ?? ??? ??? ?p2->next=NULL;
  744. ?? ??? ??? ?toxy(40,10);
  745. ?? ??? ??? ?printf("点餐成功!是否继续?1.是 ? 2.否");
  746. ?? ??? ??? ?while(1)
  747. ?? ??? ??? ?{
  748. ?? ??? ??? ??? ?t=getch();
  749. ?? ??? ??? ??? ?if(t=='1')
  750. ?? ??? ??? ??? ??? ?break;
  751. ?? ??? ??? ??? ?else if(t=='2')
  752. ?? ??? ??? ??? ??? ?break;
  753. ?? ??? ??? ?}
  754. ?? ??? ??? ?if(t=='2')
  755. ?? ??? ??? ??? ?break;
  756. ?? ??? ?}
  757. ?? ??? ?else
  758. ?? ??? ?{
  759. ?? ??? ??? ?toxy(36,10);
  760. ?? ??? ??? ?printf("没有找到这道菜,请检查您输入的菜名是否正确!");
  761. ?? ??? ??? ?Sleep(1500);
  762. ?? ??? ?}
  763. ?? ?}while(1);
  764. ?? ?
  765. }?
  766. ?
  767. void Order_nonStapleFood()//副食
  768. {
  769. ?? ?char t;
  770. ?? ?do
  771. ?? ?{
  772. ?? ??? ?system("cls");
  773. ?? ??? ?pNon_stapleFood p,head=readNonStapleFoodFile();
  774. ?? ??? ?pOrder p1;
  775. ?? ??? ?p=head;
  776. ?? ??? ?char foodName[20];
  777. ?? ??? ?int i=8;
  778. ?? ??? ?toxy(10,4);
  779. ?? ??? ?printf("副食菜单");
  780. ?? ??? ?toxy(6,6);
  781. ?? ??? ?printf("菜名\t\t\t价格");
  782. ?? ??? ?toxy(0,7);
  783. ?? ??? ?printf("-----------------------------------");
  784. ?? ??? ?while(p!=NULL)
  785. ?? ??? ?{
  786. ?? ??? ??? ?toxy(6,i);
  787. ?? ??? ??? ?printf("%-22s%.2f",p->name,p->price);
  788. ?? ??? ??? ?i++;
  789. ?? ??? ??? ?p=p->next;
  790. ?? ??? ?}
  791. ?? ??? ?toxy(40,8);
  792. ?? ??? ?printf("请输入您要点的菜名:");
  793. ?? ??? ?scanf("%s",foodName);
  794. ?? ??? ?p=head;
  795. ?? ??? ?while(p!=NULL&&strcmp(p->name,foodName)!=0)
  796. ?? ??? ?{
  797. ?? ??? ??? ?p=p->next;
  798. ?? ??? ?}
  799. ?? ??? ?if(p)
  800. ?? ??? ?{
  801. ?? ??? ??? ?p1=(pOrder)malloc(Y);
  802. ?? ??? ??? ?strcpy(p1->name,foodName);
  803. ?? ??? ??? ?p1->price=p->price;
  804. ?? ??? ??? ?num++;
  805. ?? ??? ??? ?if(num==1)
  806. ?? ??? ??? ?{
  807. ?? ??? ??? ??? ?orderHead=p1;
  808. ?? ??? ??? ??? ?p2=p1;
  809. ?? ??? ??? ?}
  810. ?? ??? ??? ?else
  811. ?? ??? ??? ?{
  812. ?? ??? ??? ??? ?p2->next=p1;
  813. ?? ??? ??? ??? ?p2=p1;
  814. ?? ??? ??? ?}
  815. ?? ??? ??? ?p2->next=NULL;
  816. ?? ??? ??? ?toxy(36,10);
  817. ?? ??? ??? ?printf("点餐成功!是否继续?1.是 ? 2.否");
  818. ?? ??? ??? ?while(1)
  819. ?? ??? ??? ?{
  820. ?? ??? ??? ??? ?t=getch();
  821. ?? ??? ??? ??? ?if(t=='1')
  822. ?? ??? ??? ??? ??? ?break;
  823. ?? ??? ??? ??? ?else if(t=='2')
  824. ?? ??? ??? ??? ??? ?break;
  825. ?? ??? ??? ?}
  826. ?? ??? ??? ?if(t=='2')
  827. ?? ??? ??? ??? ?break;
  828. ?? ??? ?}
  829. ?? ??? ?else
  830. ?? ??? ?{
  831. ?? ??? ??? ?toxy(36,10);
  832. ?? ??? ??? ?printf("没有找到这道菜,请检查您输入的菜名是否正确!");
  833. ?? ??? ??? ?Sleep(1500);
  834. ?? ??? ?}
  835. ?? ?}while(1);
  836. }?
  837. ?
  838. void Order_DrinkBeverage()//饮品
  839. {
  840. ?? ??? ?char t;
  841. ?? ?do
  842. ?? ?{
  843. ?? ??? ?system("cls");
  844. ?? ??? ?pDrinkBeverage p,head=readDrinkBeverageFile();
  845. ?? ??? ?pOrder p1;
  846. ?? ??? ?p=head;
  847. ?? ??? ?char foodName[20];
  848. ?? ??? ?int i=8;
  849. ?? ??? ?toxy(10,4);
  850. ?? ??? ?printf("饮品菜单");
  851. ?? ??? ?toxy(6,6);
  852. ?? ??? ?printf("菜名\t\t\t价格");
  853. ?? ??? ?toxy(0,7);
  854. ?? ??? ?printf("-----------------------------------");
  855. ?? ??? ?while(p!=NULL)
  856. ?? ??? ?{
  857. ?? ??? ??? ?toxy(6,i);
  858. ?? ??? ??? ?printf("%-22s%.2f",p->name,p->price);
  859. ?? ??? ??? ?i++;
  860. ?? ??? ??? ?p=p->next;
  861. ?? ??? ?}
  862. ?? ??? ?toxy(40,8);
  863. ?? ??? ?printf("请输入您要点的菜名:");
  864. ?? ??? ?scanf("%s",foodName);
  865. ?? ??? ?p=head;
  866. ?? ??? ?while(p!=NULL&&strcmp(p->name,foodName)!=0)
  867. ?? ??? ?{
  868. ?? ??? ??? ?p=p->next;
  869. ?? ??? ?}
  870. ?? ??? ?if(p)
  871. ?? ??? ?{
  872. ?? ??? ??? ?p1=(pOrder)malloc(Y);
  873. ?? ??? ??? ?strcpy(p1->name,foodName);
  874. ?? ??? ??? ?p1->price=p->price;
  875. ?? ??? ??? ?num++;
  876. ?? ??? ??? ?if(num==1)
  877. ?? ??? ??? ?{
  878. ?? ??? ??? ??? ?orderHead=p1;
  879. ?? ??? ??? ??? ?p2=p1;
  880. ?? ??? ??? ?}
  881. ?? ??? ??? ?else
  882. ?? ??? ??? ?{
  883. ?? ??? ??? ??? ?p2->next=p1;
  884. ?? ??? ??? ??? ?p2=p1;
  885. ?? ??? ??? ?}
  886. ?? ??? ??? ?p2->next=NULL;
  887. ?? ??? ??? ?toxy(36,10);
  888. ?? ??? ??? ?printf("点餐成功!是否继续?1.是 ? 2.否");
  889. ?? ??? ??? ?while(1)
  890. ?? ??? ??? ?{
  891. ?? ??? ??? ??? ?t=getch();
  892. ?? ??? ??? ??? ?if(t=='1')
  893. ?? ??? ??? ??? ??? ?break;
  894. ?? ??? ??? ??? ?else if(t=='2')
  895. ?? ??? ??? ??? ??? ?break;
  896. ?? ??? ??? ?}
  897. ?? ??? ??? ?if(t=='2')
  898. ?? ??? ??? ??? ?break;
  899. ?? ??? ?}
  900. ?? ??? ?else
  901. ?? ??? ?{
  902. ?? ??? ??? ?toxy(36,10);
  903. ?? ??? ??? ?printf("没有找到这道菜,请检查您输入的菜名是否正确!");
  904. ?? ??? ??? ?Sleep(1500);
  905. ?? ??? ?}
  906. ?? ?}while(1);
  907. }?
  908. ?
  909. void Order_Form(int ID,int number)//订单
  910. {
  911. ?? ?do
  912. ?? ?{
  913. ?? ??? ?system("cls");
  914. ?? ??? ?int i=10;
  915. ?? ??? ?char t;
  916. ?? ??? ?float totalPrice=0;
  917. ?? ??? ?float actualPayment=0;
  918. ?? ??? ?pOrder p=orderHead;
  919. ?? ??? ?pUser q,head;
  920. ?? ??? ?pTable T,Thead;
  921. ?? ??? ?q=head;
  922. ?? ??? ?if(orderHead==NULL)
  923. ?? ??? ?{
  924. ?? ??? ??? ?toxy(26,8);
  925. ?? ??? ??? ?printf("您还没有点任何东西,赶紧去点吧!(按任意键返回)");
  926. ?? ??? ??? ?getch();
  927. ?? ??? ??? ?break;
  928. ?? ??? ?}
  929. ?? ??? ?else
  930. ?? ??? ?{
  931. ?? ??? ??? ?toxy(26,6);
  932. ?? ??? ??? ?printf("我的订单");
  933. ?? ??? ??? ?toxy(22,8);
  934. ?? ??? ??? ?printf("菜品名称\t\t价格");
  935. ?? ??? ??? ?toxy(20,9);
  936. ?? ??? ??? ?printf("***************************");
  937. ?? ??? ??? ?while(p!=NULL)
  938. ?? ??? ??? ?{
  939. ?? ??? ??? ??? ?toxy(22,i);
  940. ?? ??? ??? ??? ?printf("%-18s%.2f",p->name,p->price);
  941. ?? ??? ??? ??? ?i++;
  942. ?? ??? ??? ??? ?totalPrice+=p->price;
  943. ?? ??? ??? ??? ?p=p->next;
  944. ?? ??? ??? ?}
  945. ?? ??? ??? ?head=readUserFile();
  946. ?? ??? ??? ?q=head;
  947. ?? ??? ??? ?toxy(20,i);
  948. ?? ??? ??? ?printf("***************************");
  949. ?? ??? ??? ?while(q!=NULL&&strcmp(q->userName,_userName)!=0)
  950. ?? ??? ??? ?{
  951. ?? ??? ??? ??? ?q=q->next;
  952. ?? ??? ??? ?}
  953. ?? ??? ??? ?if(q)
  954. ?? ??? ??? ?{
  955. ?? ??? ??? ??? ?toxy(24,++i);
  956. ?? ??? ??? ??? ?printf("总价: ?%.2f",totalPrice);
  957. ?? ??? ??? ??? ?if(q->isVIP)
  958. ?? ??? ??? ??? ??? ?actualPayment=totalPrice*0.85;
  959. ?? ??? ??? ??? ?else
  960. ?? ??? ??? ??? ??? ?actualPayment=totalPrice;
  961. ?? ??? ??? ??? ?toxy(24,++i);
  962. ?? ??? ??? ??? ?printf("实付: ?%.2f",actualPayment);
  963. ?? ??? ??? ?}
  964. ?? ??? ??? ?toxy(22,++i);
  965. ?? ??? ??? ?printf("1.确认支付 ? 2.取消订单 ? 3.返回");
  966. ?? ??? ??? ?while(1)
  967. ?? ??? ??? ?{
  968. ?? ??? ??? ??? ?t=getch();
  969. ?? ??? ??? ??? ?if(t=='1'||t=='2'||t=='3')
  970. ?? ??? ??? ??? ??? ?break;
  971. ?? ??? ??? ?}
  972. ?? ??? ??? ?if(t=='1')
  973. ?? ??? ??? ?{
  974. ?? ??? ??? ??? ?Thead=readTableFile();
  975. ?? ??? ??? ??? ?T=Thead;
  976. ?? ??? ??? ??? ?while(T!=NULL&&T->ID!=ID)
  977. ?? ??? ??? ??? ?{
  978. ?? ??? ??? ??? ??? ?T=T->next;
  979. ?? ??? ??? ??? ?}
  980. ?? ??? ??? ??? ?toxy(24,++i);
  981. ?? ??? ??? ??? ?printf("正在支付....");
  982. ?? ??? ??? ??? ?if(q->money>=actualPayment)
  983. ?? ??? ??? ??? ?{
  984. ?? ??? ??? ??? ??? ?q->money-=actualPayment;
  985. ?? ??? ??? ??? ??? ?T->People+=number;
  986. ?? ??? ??? ??? ??? ?Updata_User(head);
  987. ?? ??? ??? ??? ??? ?Updata_Table(Thead);
  988. ?? ??? ??? ??? ??? ?Sleep(1500);
  989. ?? ??? ??? ??? ??? ?system("cls");
  990. ?? ??? ??? ??? ??? ?toxy(24,10);
  991. ?? ??? ??? ??? ??? ?printf("支付成功!按任意键返回");
  992. ?? ??? ??? ??? ??? ?orderHead=NULL;
  993. ?? ??? ??? ??? ??? ?getch();
  994. ?? ??? ??? ??? ??? ?break;
  995. ?? ??? ??? ??? ?}
  996. ?? ??? ??? ??? ?else
  997. ?? ??? ??? ??? ?{
  998. ?? ??? ??? ??? ??? ?Sleep(1500);
  999. ?? ??? ??? ??? ??? ?system("cls");
  1000. ?? ??? ??? ??? ??? ?toxy(24,10);
  1001. ?? ??? ??? ??? ??? ?printf("余额不足!按任意键返回");
  1002. ?? ??? ??? ??? ??? ?getch();
  1003. ?? ??? ??? ??? ??? ?break;
  1004. ?? ??? ??? ??? ?}
  1005. ?? ??? ??? ?}
  1006. ?? ??? ??? ?else if(t=='2')
  1007. ?? ??? ??? ?{
  1008. ?? ??? ??? ??? ?orderHead=NULL;
  1009. ?? ??? ??? ??? ?break;
  1010. ?? ??? ??? ?}
  1011. ?? ??? ??? ?else if(t=='3')
  1012. ?? ??? ??? ??? ?break;
  1013. ?? ??? ?}
  1014. ?? ?}while(1);
  1015. }?
  1016. ?
  1017. void User_List_Table()//餐桌列表
  1018. {
  1019. ?? ?system("cls");
  1020. ?? ?pTable p,head;
  1021. ?? ?head=readTableFile();
  1022. ?? ?p=head;
  1023. ?? ?int i=11;
  1024. ?? ?toxy(32,6);
  1025. ?? ?printf("餐桌列表(按任意键继续)");
  1026. ?? ?toxy(22,8);
  1027. ?? ?printf("餐桌编号 | 可坐人数 | 已坐人数");
  1028. ?? ?toxy(20,9);
  1029. ?? ?printf("--------------------------------------");
  1030. ?? ?while(p!=NULL)
  1031. ?? ?{
  1032. ?? ??? ?toxy(26,i);
  1033. ?? ??? ?printf("%-10d%-10d%d",p->ID,p->count,p->People);
  1034. ?? ??? ?i++;
  1035. ?? ??? ?p=p->next;
  1036. ?? ?}
  1037. ?? ?getch();
  1038. }?
  1039. ?
  1040. void Apply_VIP_Menu()//办理会员
  1041. {
  1042. ?? ?char t; //t用于选择?
  1043. ?? ?do
  1044. ?? ?{
  1045. ?? ??? ?system("cls");
  1046. ?? ??? ?system("color 75");
  1047. ?? ??? ?HideCursor(0);
  1048. ?? ??? ?pUser head=readUserFile();//从文件中读取用户信息,返回一个表头地址
  1049. ?? ??? ?toxy(32,6);
  1050. ?? ??? ?printf("会员办理");
  1051. ?? ??? ?toxy(30,8);
  1052. ?? ??? ?printf("1) ?充值 ");
  1053. ?? ??? ?toxy(30,10);
  1054. ?? ??? ?printf("2) ?办理会员");
  1055. ?? ??? ?toxy(30,12);
  1056. ?? ??? ?printf("3) ?返回");?
  1057. ?? ??? ?t=getch();
  1058. ?? ??? ?switch(t)
  1059. ?? ??? ?{
  1060. ?? ??? ??? ?case '1':Add_money(head);break;
  1061. ?? ??? ??? ?case '2':Apply_VIP(head);break;
  1062. ?? ??? ??? ?case '3':break;
  1063. ?? ??? ??? ?default :break;
  1064. ?? ??? ?}
  1065. ?? ??? ?if(t=='3')//如果输入3,则跳出循环,该函数生命周期结束,回到上一级菜单?
  1066. ?? ??? ??? ?break;
  1067. ?? ?}while(1);
  1068. }?
  1069. ?
  1070. void Add_money(pUser head)//充值
  1071. {
  1072. ?? ?float money;//输入要充值的钱?
  1073. ?? ?pUser p;
  1074. ?? ?p=head;//head为从 上一级菜单传过来的参数,为用户信息链表的头结点?
  1075. ?? ?while(p!=NULL&&strcmp(p->userName,_userName)!=0)//遍历链表,寻找当前登录账户的信息?
  1076. ?? ?{
  1077. ?? ??? ?p=p->next;
  1078. ?? ?}
  1079. ?? ?while(1)
  1080. ?? ?{
  1081. ?? ??? ?system("cls");
  1082. ?? ??? ?system("color 76");
  1083. ?? ??? ?toxy(32,6);
  1084. ?? ??? ?printf("南航餐饮充值中心");
  1085. ?? ??? ?if(p!=NULL)
  1086. ?? ??? ?{
  1087. ?? ??? ??? ?if(p->isVIP==0)//如果不是会员?
  1088. ?? ??? ??? ?{
  1089. ?? ??? ??? ??? ?toxy(20,8);
  1090. ?? ??? ??? ??? ?printf("对不起,您还不是会员,请先办理会员后再来充值!");
  1091. ?? ??? ??? ??? ?toxy(32,10);
  1092. ?? ??? ??? ??? ?printf("请按任意键返回!");
  1093. ?? ??? ??? ??? ?break;
  1094. ?? ??? ??? ?}
  1095. ?? ??? ??? ?else if(p->isVIP==1)//如果是会员?
  1096. ?? ??? ??? ?{
  1097. ?? ??? ??? ??? ?HideCursor(1);
  1098. ?? ??? ??? ??? ?toxy(32,8);
  1099. ?? ??? ??? ??? ?printf("请输入充值金额(一次不少于200):");
  1100. ?? ??? ??? ??? ?scanf("%f",&money);
  1101. ?? ??? ??? ??? ?if(money>=200)//如果充值金额大于200?
  1102. ?? ??? ??? ??? ?{
  1103. ?? ??? ??? ??? ??? ?p->money+=money;
  1104. ?? ??? ??? ??? ??? ?toxy(32,10);
  1105. ?? ??? ??? ??? ??? ?printf("正在充值....");
  1106. ?? ??? ??? ??? ??? ?Updata_User(head);//更新用户表?
  1107. ?? ??? ??? ??? ??? ?toxy(32,10);
  1108. ?? ??? ??? ??? ??? ?printf("充值成功 ? ?");?
  1109. ?? ??? ??? ??? ??? ?toxy(32,12);
  1110. ?? ??? ??? ??? ??? ?printf("请按任意键返回!");
  1111. ?? ??? ??? ??? ??? ?break;
  1112. ?? ??? ??? ??? ?}
  1113. ?? ??? ??? ??? ?else//如果充值金额小于200
  1114. ?? ??? ??? ??? ?{
  1115. ?? ??? ??? ??? ??? ?toxy(32,10);
  1116. ?? ??? ??? ??? ??? ?printf("一次至少充值200元!");
  1117. ?? ??? ??? ??? ??? ?Sleep(1500);
  1118. ?? ??? ??? ??? ??? ?continue;
  1119. ?? ??? ??? ??? ?}
  1120. ?? ??? ??? ?}
  1121. ?? ??? ?}
  1122. ?? ?}
  1123. ?? ?getch();
  1124. }?
  1125. ?
  1126. void Apply_VIP(pUser head)//办理会员
  1127. {
  1128. ?? ?system("cls");
  1129. ?? ?system("color 76");
  1130. ?? ?pUser p=head;//head为从 上一级菜单传过来的参数,为用户信息链表的头结点
  1131. ?? ?char t;
  1132. ?? ?float money;
  1133. ?? ?toxy(32,6);
  1134. ?? ?printf("南航餐饮会员办理中心");
  1135. ?? ?while(p!=NULL&&strcmp(p->userName,_userName)!=0)//遍历链表,寻找当前登录账户的信息
  1136. ?? ?{
  1137. ?? ??? ?p=p->next;
  1138. ?? ?}
  1139. ?? ?do
  1140. ?? ?{
  1141. ?? ??? ?if(p!=NULL)
  1142. ?? ??? ?{
  1143. ?? ??? ??? ?if(p->isVIP==1)//如果已经是会员?
  1144. ?? ??? ??? ?{
  1145. ?? ??? ??? ??? ?toxy(20,8);
  1146. ?? ??? ??? ??? ?printf("您已是本店尊贵会员,无需再次办理!");
  1147. ?? ??? ??? ??? ?toxy(32,10);
  1148. ?? ??? ??? ??? ?printf("请按任意键返回!");
  1149. ?? ??? ??? ??? ?getch();
  1150. ?? ??? ??? ??? ?break;
  1151. ?? ??? ??? ?}
  1152. ?? ??? ??? ?else if(p->isVIP==0)//如果还没办理会员?
  1153. ?? ??? ??? ?{
  1154. ?? ??? ??? ??? ?toxy(30,8);
  1155. ?? ??? ??? ??? ?printf("提示:");
  1156. ?? ??? ??? ??? ?toxy(30,9);
  1157. ?? ??? ??? ??? ?printf("1.办理会员至少充值500");
  1158. ?? ??? ??? ??? ?toxy(30,10);
  1159. ?? ??? ??? ??? ?printf("2.冲500送200,冲1000送500");?
  1160. ?? ??? ??? ??? ?toxy(32,12);
  1161. ?? ??? ??? ??? ?printf("是否确认办理会员?");
  1162. ?? ??? ??? ??? ?toxy(32,13);
  1163. ?? ??? ??? ??? ?printf("1.是\t2.否");
  1164. ?? ??? ??? ??? ?while(1)
  1165. ?? ??? ??? ??? ?{
  1166. ?? ??? ??? ??? ??? ?t=getch();
  1167. ?? ??? ??? ??? ??? ?if(t=='1')
  1168. ?? ??? ??? ??? ??? ??? ?break;
  1169. ?? ??? ??? ??? ??? ?else if(t=='2')
  1170. ?? ??? ??? ??? ??? ??? ?break;
  1171. ?? ??? ??? ??? ?}
  1172. ?? ??? ??? ??? ?if(t=='1')
  1173. ?? ??? ??? ??? ?{
  1174. ?? ??? ??? ??? ??? ?while(1)
  1175. ?? ??? ??? ??? ??? ?{
  1176. ?? ??? ??? ??? ??? ??? ?system("cls");
  1177. ?? ??? ??? ??? ??? ??? ?HideCursor(1);
  1178. ?? ??? ??? ??? ??? ??? ?toxy(32,10);
  1179. ?? ??? ??? ??? ??? ??? ?printf("请输入充值金额:");
  1180. ?? ??? ??? ??? ??? ??? ?scanf("%f",&money);
  1181. ?? ??? ??? ??? ??? ??? ?if(money>=500&&money<1000)
  1182. ?? ??? ??? ??? ??? ??? ?{
  1183. ?? ??? ??? ??? ??? ??? ??? ?money+=200;
  1184. ?? ??? ??? ??? ??? ??? ??? ?p->money+=money;
  1185. ?? ??? ??? ??? ??? ??? ??? ?p->isVIP=1;
  1186. ?? ??? ??? ??? ??? ??? ??? ?Updata_User(head);
  1187. ?? ??? ??? ??? ??? ??? ??? ?toxy(32,12);
  1188. ?? ??? ??? ??? ??? ??? ??? ?printf("恭喜,您已成为本店尊贵会员!");
  1189. ?? ??? ??? ??? ??? ??? ??? ?toxy(32,14);
  1190. ?? ??? ??? ??? ??? ??? ??? ?printf("请按任意键返回主菜单");
  1191. ?? ??? ??? ??? ??? ??? ??? ?getch();
  1192. ?? ??? ??? ??? ??? ??? ??? ?User_Menu();?
  1193. ?? ??? ??? ??? ??? ??? ?}
  1194. ?? ??? ??? ??? ??? ??? ?else if(money>=1000)
  1195. ?? ??? ??? ??? ??? ??? ?{
  1196. ?? ??? ??? ??? ??? ??? ??? ?money+=500;
  1197. ?? ??? ??? ??? ??? ??? ??? ?p->money+=money;
  1198. ?? ??? ??? ??? ??? ??? ??? ?p->isVIP=1;
  1199. ?? ??? ??? ??? ??? ??? ??? ?Updata_User(head);
  1200. ?? ??? ??? ??? ??? ??? ??? ?toxy(32,12);
  1201. ?? ??? ??? ??? ??? ??? ??? ?printf("恭喜,您已成为本店尊贵会员!");
  1202. ?? ??? ??? ??? ??? ??? ??? ?toxy(32,14);
  1203. ?? ??? ??? ??? ??? ??? ??? ?printf("请按任意键返回主菜单");
  1204. ?? ??? ??? ??? ??? ??? ??? ?getch();
  1205. ?? ??? ??? ??? ??? ??? ??? ?User_Menu();?
  1206. ?? ??? ??? ??? ??? ??? ?}
  1207. ?? ??? ??? ??? ??? ??? ?else
  1208. ?? ??? ??? ??? ??? ??? ?{
  1209. ?? ??? ??? ??? ??? ??? ??? ?toxy(32,12);
  1210. ?? ??? ??? ??? ??? ??? ??? ?printf("办理会员至少充值500");
  1211. ?? ??? ??? ??? ??? ??? ??? ?Sleep(2000);
  1212. ?? ??? ??? ??? ??? ??? ?}
  1213. ?? ??? ??? ??? ??? ?}
  1214. ?? ??? ??? ??? ?}
  1215. ?? ??? ??? ??? ?else if(t=='2')
  1216. ?? ??? ??? ??? ??? ?break;
  1217. ?? ??? ??? ?}
  1218. ?? ??? ?}
  1219. ?? ?}while(1);
  1220. }?
  1221. ?
  1222. void Updata_User(pUser head)//更新文件?
  1223. {
  1224. ?? ?FILE *fp;
  1225. ?? ?pUser p=head->next; ? ? ? ? ? ? ? ? ? ? ? ? ? //使p指向第二个结点?
  1226. ?? ?fp=fopen("User.txt","w"); ? ? ? ? ? ? ? ? ?//先清空原文件内容再将修改后的信息写入文件?
  1227. ?? ?if(fp==NULL)
  1228. ?? ?{
  1229. ?? ??? ?printf("cannot open file\n");
  1230. ?? ?}
  1231. ?? ?if(fwrite(head,M,1,fp)!=1) ? ? ? ? ? ? ? ? //将head所指向的数据写入fp所指向的文件?
  1232. ?? ?{
  1233. ?? ??? ?printf("file write error\n");
  1234. ?? ?}
  1235. ?? ?fclose(fp); ? ? ? ? ? ? ? ? ? ? ? ? //关闭文件?
  1236. ?? ?fp=fopen("User.txt","a"); ? ? ? ? ?// 打开User.txt文件,方式为追加?
  1237. ?? ?while(p!=NULL) ? ? ? ? ? ? ? ? ? ?//p不为空就执行循环体?
  1238. ?? ?{
  1239. ?? ??? ?if(fwrite(p,M,1,fp)!=1) ? ? ? ? ? ?//将p所指向的1个大小为N的数据结构写入fp所指向的文件?
  1240. ?? ? ? ?{
  1241. ?? ??? ??? ?printf("file write error\n");
  1242. ?? ? ? ?}
  1243. ?? ? ? ?p=p->next; ? ? ? ? ? ? ? ? ? ? //使p指向下一个结点?
  1244. ?? ?}
  1245. ?? ?fclose(fp); ? ? ? ? ? ? ?//关闭文件?
  1246. }?
  1247. ?
  1248. void Amend_passWord()//修改密码
  1249. {
  1250. ?? ?system("cls"); ? ? ? ? //清屏?
  1251. ?? ?HideCursor(0); ?//隐藏光标,看着更舒服?
  1252. ?? ?pUser p,head; ? ? ??
  1253. ?? ?head=readUserFile();
  1254. ? ? do
  1255. ? ? {
  1256. ? ? ?? ?p=head;
  1257. ? ? ?? ?char password[18],newpassword[18],t,k,*q1,*q2;
  1258. ? ? ?? ?int i=0;
  1259. ? ? ?? ?toxy(34,5); ? ? ? ? ?//将光标移动到坐标为(50,5)的位置?
  1260. ?? ??? ?printf("南航餐饮点餐系统");
  1261. ?? ??? ?toxy(34,8);
  1262. ?? ??? ?printf("修改密码");
  1263. ?? ??? ?toxy(32,10);
  1264. ?? ??? ?printf("请输入旧密码:");
  1265. ?? ??? ?q1=HidePassword();
  1266. ?? ??? ?strcpy(password,q1);
  1267. ?? ??? ?toxy(32,12);
  1268. ?? ??? ?printf("请输入新密码:");
  1269. ?? ??? ?q2=HidePassword();
  1270. ?? ??? ?strcpy(newpassword,q2);
  1271. ?? ??? ?while(p!=NULL&&strcmp(p->userName,_userName)!=0)//遍历链表,寻找当前登陆账户的账号?
  1272. ?? ??? ?{
  1273. ?? ??? ??? ?p=p->next;
  1274. ?? ??? ?}
  1275. ?? ??? ?if(p!=NULL) ? ? ? ? ? ? ? ? ? //如果p不为空?
  1276. ?? ??? ?{
  1277. ?? ??? ??? ?if(strcmp(p->passWord,password)==0) ? ? ? ? ?//如果旧密码输入正确?
  1278. ?? ??? ??? ?{
  1279. ?? ??? ??? ??? ?strcpy(p->passWord,newpassword); ? ? ? ? //将旧密码改为新密码?
  1280. ?? ??? ??? ??? ?break; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //跳出循环?
  1281. ?? ??? ??? ?}
  1282. ?? ??? ??? ?else ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //如果旧密码输入错误?
  1283. ?? ??? ??? ?{
  1284. ?? ??? ??? ??? ?system("cls");
  1285. ?? ??? ??? ??? ?toxy(30,8);
  1286. ?? ??? ??? ??? ?printf("--------------------------");
  1287. ?? ??? ??? ??? ?toxy(30,9);
  1288. ?? ??? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? ?|");
  1289. ?? ??? ??? ??? ?toxy(30,10);
  1290. ?? ??? ??? ??? ?printf("| ?密码错误!是否继续? ?|");
  1291. ?? ??? ??? ??? ?toxy(30,11);
  1292. ?? ??? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? ?|");
  1293. ?? ??? ??? ??? ?toxy(30,12);
  1294. ?? ??? ??? ??? ?printf("| ?1.是 ? ? ? ? ? 2.否 ? |");
  1295. ?? ??? ??? ??? ?toxy(30,13);
  1296. ?? ??? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? ?|");
  1297. ?? ??? ??? ??? ?toxy(30,14);
  1298. ?? ??? ??? ??? ?printf("--------------------------");
  1299. ?? ??? ??? ??? ?while(1)
  1300. ?? ??? ??? ??? ?{
  1301. ?? ??? ??? ??? ??? ?t=getch(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//输入t?
  1302. ?? ??? ??? ??? ??? ?if(t=='1')
  1303. ?? ??? ??? ??? ??? ?{
  1304. ?? ??? ??? ??? ??? ??? ?system("cls");
  1305. ?? ??? ??? ??? ??? ??? ?break;
  1306. ?? ??? ??? ??? ??? ?}
  1307. ?? ??? ??? ??? ??? ?else if(t=='2')
  1308. ?? ??? ??? ??? ??? ? ?User_Menu();
  1309. ?? ??? ??? ??? ?}
  1310. ?? ??? ??? ?}
  1311. ?? ??? ?}
  1312. ?? ?}while(1); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//永远为真?
  1313. ?? ?Updata_User(head);//修改密码?
  1314. ?? ?toxy(32,14);
  1315. ?? ?printf("修改成功!正在跳转...");
  1316. ?? ?Sleep(500); ? ? ? //暂停0.5秒?
  1317. }?
  1318. ?
  1319. void User_Wallet()//我的钱包
  1320. {
  1321. ?? ?system("cls");
  1322. ?? ?system("color 78");
  1323. ?? ?pUser p,head;
  1324. ?? ?head=readUserFile();
  1325. ?? ?p=head;
  1326. ?? ?while(p!=NULL&&strcmp(p->userName,_userName)!=0)
  1327. ?? ?{
  1328. ?? ??? ?p=p->next;
  1329. ?? ?}
  1330. ?? ?if(p!=NULL)
  1331. ?? ?{
  1332. ?? ??? ?toxy(32,10);
  1333. ?? ??? ?printf("账户余额为:%.2f",p->money);
  1334. ?? ??? ?toxy(32,12);
  1335. ?? ??? ?printf("请按任意键返回");
  1336. ?? ?}
  1337. ?? ?getch();
  1338. }?
  1339. ?
  1340. void Change()//切换账号?
  1341. {
  1342. ?? ?system("cls");
  1343. ?? ?Default();
  1344. }
  1345. ?
  1346. void Exit()//退出点餐系统?
  1347. {
  1348. ?? ?char t;
  1349. ?? ?toxy(30,10);
  1350. ?? ?printf("-----------------------");
  1351. ?? ?toxy(30,11);
  1352. ?? ?printf("| ? 您确定要退出吗? ?|");
  1353. ?? ?toxy(30,13);
  1354. ?? ?printf("| 1.确定 ? ? 2.取消 ? |");
  1355. ?? ?toxy(30,14);
  1356. ?? ?printf("-----------------------");
  1357. ?? ?while(1)
  1358. ?? ?{
  1359. ?? ??? ?t=getch(); ? ? ? ? //输入t
  1360. ?? ??? ?switch(t)
  1361. ?? ??? ?{
  1362. ?? ??? ??? ?case '1':
  1363. ?? ??? ??? ?system("cls");
  1364. ?? ??? ??? ?toxy(32,10);
  1365. ?? ??? ??? ?printf("正在安全退出....");
  1366. ?? ??? ??? ?Sleep(1000); ? ? //暂停1秒?
  1367. ?? ??? ??? ?system("cls");
  1368. ?? ??? ??? ?toxy(32,10);
  1369. ?? ??? ??? ?printf("已安全退出软件");
  1370. ?? ??? ??? ?toxy(32,12);
  1371. ?? ??? ??? ?printf("谢谢使用!");
  1372. ?? ??? ??? ?toxy(32,14);
  1373. ?? ??? ??? ?printf("by-by^_^");
  1374. ?? ??? ??? ?exit(0); ?break; //终止程序?
  1375. ?? ??? ??? ?case '2':
  1376. ?? ??? ??? ? break; ? //调用函数,进入菜单?
  1377. ?? ??? ??? ?default :break;
  1378. ?? ??? ?}
  1379. ?? ??? ?if(t=='2')
  1380. ?? ??? ??? ?break;
  1381. ?? ?}
  1382. ?}?
  1383. ?
  1384. void Administrator_Menu()//管理员菜单
  1385. {
  1386. ?? ?char t;//用于选择菜单选项?
  1387. ?? ?do
  1388. ?? ?{?? ?
  1389. ?? ??? ?system("cls");
  1390. ?? ??? ?HideCursor(0); //隐藏光标?
  1391. ?? ??? ?system("color 74");
  1392. ?? ??? ?toxy(32,3);
  1393. ?? ??? ?printf("南航餐饮管理系统!");
  1394. ?? ??? ?toxy(32,4);
  1395. ?? ??? ?printf("当前管理员:%s",_userName);
  1396. ?? ??? ?toxy(30,5);
  1397. ?? ??? ?printf("*********************");
  1398. ?? ??? ?toxy(32,7);
  1399. ?? ??? ?printf("| ?1.菜品 ?信息 ?|");
  1400. ?? ??? ?toxy(32,9);
  1401. ?? ??? ?printf("| ?2.餐桌 ?管理 ?|");
  1402. ?? ??? ?toxy(32,11);
  1403. ?? ??? ?printf("| ?3.查看 ?用户 ?|");
  1404. ?? ??? ?toxy(32,13);
  1405. ?? ??? ?printf("| ?4.本店 ?会员 ?|");
  1406. ?? ??? ?toxy(32,15);
  1407. ?? ??? ?printf("| ?5.设置管理员 ?|");?
  1408. ?? ??? ?toxy(32,17);
  1409. ?? ??? ?printf("| ?6.修改 ?密码 ?|");
  1410. ?? ??? ?toxy(32,19);
  1411. ?? ??? ?printf("| ?7.切换 ?账号 ?|");?
  1412. ?? ??? ?toxy(32,21);
  1413. ?? ??? ?printf("| ?8.退出 ?系统 ?|");?
  1414. ?? ??? ?t=getch();//不回显函数,输入一个值?
  1415. ?? ??? ?switch(t)
  1416. ?? ??? ?{
  1417. ?? ??? ??? ?case '1':Food();break;
  1418. ?? ??? ??? ?case '2':Table();break;
  1419. ?? ??? ??? ?case '3':Check_User();break;
  1420. ?? ??? ??? ?case '4':All_VIP();break;
  1421. ?? ??? ??? ?case '5':Setup_administrator();break;
  1422. ?? ??? ??? ?case '6':Amend_passWord();break;
  1423. ?? ??? ??? ?case '7':Change();break;
  1424. ?? ??? ??? ?case '8':Exit();break;
  1425. ?? ??? ??? ?default :break;?
  1426. ?? ??? ?}
  1427. ?? ?}while(1);//永远 为真?
  1428. }?
  1429. ?
  1430. void Administrator_Login()//管理员登录?
  1431. {
  1432. ?? ?char *q,t,c;//q指针用于接收 *HidePassword()函数返回的指向密码的指针,t和c均用于选择?
  1433. ?? ?pUser p=readUserFile();//从文件中读取用户信息,返回一个表头地址?
  1434. ?? ?do
  1435. ?? ?{
  1436. ?? ??? ?HideCursor(1);//显示管光标?
  1437. ?? ??? ?system("cls");//清屏?
  1438. ?? ??? ?system("color 73");//设置颜色?
  1439. ?? ??? ?toxy(28,8);
  1440. ?? ??? ?printf("南航餐饮管理员登录界面");
  1441. ?? ??? ?toxy(26,9);
  1442. ?? ??? ?printf("-----------------------------");
  1443. ?? ??? ?toxy(32,11);
  1444. ?? ??? ?printf("用户名:");
  1445. ?? ??? ?toxy(32,13);
  1446. ?? ??? ?printf("密 ?码:");
  1447. ?? ??? ?toxy(40,11);
  1448. ?? ??? ?scanf("%s",_userName);
  1449. ?? ??? ?toxy(40,13);
  1450. ?? ??? ?q=HidePassword();//输入密码?
  1451. ?? ??? ?strcpy(_passWord,q);//将获得的密码复制给_passWord[]数组?
  1452. ?? ??? ?while(p!=NULL&&strcmp(p->userName,_userName)!=0) ? //遍历链表,寻找当前输入的账户的账号?
  1453. ?? ??? ?{
  1454. ?? ??? ??? ?p=p->next;
  1455. ?? ??? ?}
  1456. ?? ??? ?if(p!=NULL) ? //如果p不为空?
  1457. ?? ??? ?{
  1458. ?? ? ? ??? ?if(strcmp(p->passWord,_passWord)==0&&p->isAdministrator==1) ? ? //如果输入的密码正确?
  1459. ?? ??? ??? ?{
  1460. ?? ??? ??? ??? ?toxy(32,16);
  1461. ?? ??? ??? ??? ?printf("正在登陆....");
  1462. ?? ??? ??? ??? ?Sleep(500); ? ? ?//暂停0.5秒
  1463. ?? ??? ??? ??? ?system("cls");
  1464. ?? ??? ??? ??? ?toxy(32,10);
  1465. ?? ??? ??? ??? ?printf("登陆成功!");
  1466. ?? ??? ??? ??? ?break; ? ?//跳出循环
  1467. ?? ??? ??? ?}
  1468. ?? ??? ??? ?else ? ? ?//如果输入的密码错误
  1469. ?? ??? ??? ?{?
  1470. ?? ??? ??? ??? ?toxy(32,16);
  1471. ?? ??? ??? ??? ?printf("正在登陆....");
  1472. ?? ??? ??? ??? ?Sleep(500);
  1473. ?? ??? ??? ??? ?system("cls");
  1474. ?? ??? ??? ??? ?toxy(30,8);
  1475. ?? ??? ??? ??? ?printf("-------------------------");
  1476. ?? ??? ??? ??? ?toxy(30,9);
  1477. ?? ??? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? |");
  1478. ?? ??? ??? ??? ?toxy(30,10);
  1479. ?? ??? ??? ??? ?printf("| 密码错误!是否继续? ?|");
  1480. ?? ??? ??? ??? ?toxy(30,12);
  1481. ?? ??? ??? ??? ?printf("| 1.是 ? ? ? ? ? ? 2.否 |");
  1482. ?? ??? ??? ??? ?toxy(30,13);
  1483. ?? ??? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? |");
  1484. ?? ??? ??? ??? ?toxy(30,14);
  1485. ?? ??? ??? ??? ?printf("-------------------------");
  1486. ?? ??? ??? ??? ?while(1)//无限循环为防止其他按键干扰?
  1487. ?? ??? ??? ??? ?{
  1488. ?? ??? ??? ??? ??? ?t=getch(); ?//输入t ? ?
  1489. ?? ??? ??? ??? ??? ?if(t=='1') ? ? ? ? ?
  1490. ?? ??? ??? ??? ??? ?{
  1491. ?? ??? ??? ??? ??? ??? ?system("cls"); ?//清屏?
  1492. ?? ??? ??? ??? ??? ??? ?break;
  1493. ?? ??? ??? ??? ??? ?}
  1494. ?? ??? ??? ??? ??? ?else if(t=='2') ? ? //如果输入t为n,进入开始界面?
  1495. ?? ??? ??? ??? ??? ?{
  1496. ?? ??? ??? ??? ??? ??? ?system("cls"); ?//清屏
  1497. ?? ??? ??? ??? ??? ??? ?Default();break;
  1498. ?? ??? ??? ??? ??? ?}
  1499. ?? ??? ??? ??? ?}
  1500. ?? ??? ??? ?}?
  1501. ?? ? ? }
  1502. ?? ? ? else ? ? ? ? ? ? ?//如果p为空,即输入的账号不正确?
  1503. ?? ? ? {
  1504. ?? ? ? ?? ? ? ?toxy(32,16);
  1505. ?? ? ? ?? ? ? ?printf("正在登陆....");
  1506. ?? ? ? ?? ? ? ?Sleep(500);
  1507. ?? ? ? ?? ? ? ?system("cls");
  1508. ?? ? ? ?? ? ? ?toxy(30,8);
  1509. ?? ? ? ?? ? ? ?printf("-------------------------");
  1510. ?? ? ? ?? ? ? ?toxy(30,9);
  1511. ?? ? ? ?? ? ? ?printf("| ? ? ? ? ? ? ? ? ? ? ? |");
  1512. ?? ? ? ?? ??? ?toxy(30,10);
  1513. ?? ??? ??? ?printf("| ?账号错误!是否继续? |");
  1514. ?? ??? ??? ?toxy(30,11);
  1515. ?? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? |");
  1516. ?? ??? ??? ?toxy(30,12);
  1517. ?? ??? ??? ?printf("| ?1.是 ? ? ? ? ? ?2.否 |");?
  1518. ?? ??? ??? ?toxy(30,13);
  1519. ?? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? |");
  1520. ?? ??? ??? ?toxy(30,14);
  1521. ?? ??? ??? ?printf("-------------------------");
  1522. ?? ??? ??? ?while(1) ? ? ?//死循环防止其他按键干扰?
  1523. ?? ??? ??? ?{
  1524. ?? ??? ??? ??? ?c=getch();
  1525. ?? ??? ??? ??? ?if(c=='1')
  1526. ?? ??? ??? ??? ?{ ?
  1527. ?? ??? ??? ??? ??? ?system("cls");
  1528. ?? ??? ??? ??? ??? ?break;
  1529. ?? ??? ??? ??? ?}
  1530. ?? ??? ??? ??? ?else if(c=='2')
  1531. ?? ??? ??? ??? ?{
  1532. ?? ??? ??? ??? ??? ?system("cls"); ?//清屏
  1533. ?? ??? ??? ??? ??? ?Default();
  1534. ?? ??? ??? ??? ?}
  1535. ?? ??? ??? ?}
  1536. ?? ? ? }
  1537. ?? ?}while(1);
  1538. ?? ?Sleep(500); ? ? ?//暂停0.5秒?
  1539. ? ? Administrator_Menu(); ? ? ? ? //账号密码均正确,进入管理员主菜单?
  1540. ?}?
  1541. ?
  1542. void Food()//菜品信息
  1543. {
  1544. ?? ?system("color 74");
  1545. ?? ?char t;
  1546. ?? ?do
  1547. ?? ?{
  1548. ?? ??? ?system("cls");
  1549. ?? ??? ?toxy(32,6);
  1550. ?? ??? ?printf("菜品信息");
  1551. ?? ??? ?toxy(28,7);
  1552. ?? ??? ?printf("-----------------");
  1553. ?? ??? ?toxy(30,9);
  1554. ?? ??? ?printf(" 1) 添加菜单");
  1555. ?? ??? ?toxy(30,11);
  1556. ?? ??? ?printf(" 2) 菜单列表");
  1557. ?? ??? ?toxy(30,13);
  1558. ?? ??? ?printf(" 3) 返回上一级");
  1559. ?? ??? ?t=getch();
  1560. ?? ??? ?switch(t)
  1561. ?? ??? ?{
  1562. ?? ??? ??? ?case '1':Add_Food();break;
  1563. ?? ??? ??? ?case '2':List_Food();break;
  1564. ?? ??? ??? ?case '3':break;
  1565. ?? ??? ??? ?default :break;?
  1566. ?? ??? ?}
  1567. ?? ??? ?if(t=='3')
  1568. ?? ??? ??? ?break;?
  1569. ?? ?}while(1);
  1570. }
  1571. ?
  1572. void save_stapleFood(pStapleFood p)//保存主食信息?
  1573. {
  1574. ?? ?FILE *fp; ? ? ? //文件指针?
  1575. ?? ?fp=fopen("StapleFood.txt","a+"); ? ?//以追加的方式打开文件?
  1576. ?? ?if(fp==NULL)
  1577. ?? ?{
  1578. ?? ??? ?printf("cannot open file\n");
  1579. ?? ?}
  1580. ?? ?if(fwrite(p,N,1,fp)!=1) ? ?//将p1所指向的1个大小为N的数据结构写入fp所指向的文件中?
  1581. ?? ?{
  1582. ?? ??? ?printf("file write error\n");
  1583. ?? ?}
  1584. ?? ?fclose(fp); ? ? ? ?//关闭文件?
  1585. }?
  1586. ?
  1587. void save_non_stapleFood(pNon_stapleFood p)//保存副食信息
  1588. {
  1589. ?? ?FILE *fp; ? ? ? //文件指针?
  1590. ?? ?fp=fopen("non_StapleFood.txt","a+"); ? ?//以追加的方式打开文件?
  1591. ?? ?if(fp==NULL)
  1592. ?? ?{
  1593. ?? ??? ?printf("cannot open file\n");
  1594. ?? ?}
  1595. ?? ?if(fwrite(p,P,1,fp)!=1) ? ?//将p1所指向的1个大小为N的数据结构写入fp所指向的文件中?
  1596. ?? ?{
  1597. ?? ??? ?printf("file write error\n");
  1598. ?? ?}
  1599. ?? ?fclose(fp); ? ? ? ?//关闭文件?
  1600. }?
  1601. ?
  1602. void save_drinkBeverage(pDrinkBeverage p)//保存饮品信息
  1603. {
  1604. ?? ?FILE *fp; ? ? ? //文件指针?
  1605. ?? ?fp=fopen("DrinkBeverage.txt","a+"); ? ?//以追加的方式打开文件?
  1606. ?? ?if(fp==NULL)
  1607. ?? ?{
  1608. ?? ??? ?printf("cannot open file\n");
  1609. ?? ?}
  1610. ?? ?if(fwrite(p,Q,1,fp)!=1) ? ?//将p1所指向的1个大小为N的数据结构写入fp所指向的文件中?
  1611. ?? ?{
  1612. ?? ??? ?printf("file write error\n");
  1613. ?? ?}
  1614. ?? ?fclose(fp); ? ? ? ?//关闭文件?
  1615. }?
  1616. ?
  1617. pStapleFood readStapleFoodFile()//从主食文件中读取用户信息,返回一个表头地址?
  1618. {
  1619. ?? ?FILE *fp; ? ? ? //文件指针?
  1620. ?? ?int n=0;//记录链表 的结点数?
  1621. ?? ?pStapleFood head=NULL;//定义头指针?
  1622. ?? ?pStapleFood p2,p,pre;
  1623. ?? ?fp=fopen("StapleFood.txt","a+"); ? ? //以只读的方式打开文件?
  1624. ?? ?if(fp==NULL)
  1625. ?? ?{
  1626. ?? ??? ?printf("cannot open file\n");
  1627. ?? ?}
  1628. ?? ?else
  1629. ?? ?{
  1630. ?? ??? ?while(!feof(fp)) ? ? ? ?//判断文件位置标志是否移动到文件末尾?
  1631. ?? ??? ?{
  1632. ?? ??? ? ? ?n++;
  1633. ?? ??? ??? ?p=(pStapleFood)malloc(N); //向内存申请一段空间?
  1634. ?? ??? ? ? fread(p,N,1,fp); ? ? //将fp所指向的文件中的内容赋给p
  1635. ?? ??? ? ? if(n==1)
  1636. ?? ??? ? ? {
  1637. ?? ??? ? ? ? ?head=p;
  1638. ?? ??? ? ? ? ?p2=p;
  1639. ?? ??? ? ? ?}
  1640. ?? ??? ? ? ?else ? ? ? ? ? ? //创建链表?
  1641. ?? ??? ? ? ?{
  1642. ?? ??? ? ? ??? ?pre=p2;
  1643. ?? ??? ? ? ??? ?p2->next=p;
  1644. ?? ??? ? ? ??? ?p2=p;
  1645. ?? ??? ??? ?}
  1646. ?? ? ? ?}
  1647. ?? ? ? ?p2->next=NULL;
  1648. ?? ?}
  1649. ?? ?if(n<=2)
  1650. ?? ??? ?head->next=NULL;
  1651. ?? ?else
  1652. ?? ??? ?pre->next=NULL;
  1653. ? ? fclose(fp); ? ?//关闭文件?
  1654. ? ? return head; ? //返回头指针?
  1655. }
  1656. ?
  1657. pNon_stapleFood readNonStapleFoodFile()//从副食文件中读取用户信息,返回一个表头地址
  1658. {
  1659. ?? ?FILE *fp; ? ? ? //文件指针?
  1660. ?? ?int n=0;//记录链表 的结点数?
  1661. ?? ?pNon_stapleFood head=NULL;//定义头指针?
  1662. ?? ?pNon_stapleFood p2,p,pre;
  1663. ?? ?fp=fopen("non_StapleFood.txt","a+"); ? ? //以只读的方式打开文件?
  1664. ?? ?if(fp==NULL)
  1665. ?? ?{
  1666. ?? ??? ?printf("cannot open file\n");
  1667. ?? ?}
  1668. ?? ?else
  1669. ?? ?{
  1670. ?? ??? ?while(!feof(fp)) ? ? ? ?//判断文件位置标志是否移动到文件末尾?
  1671. ?? ??? ?{
  1672. ?? ??? ? ? ?n++;
  1673. ?? ??? ??? ?p=(pNon_stapleFood)malloc(P); //向内存申请一段空间?
  1674. ?? ??? ? ? fread(p,P,1,fp); ? ? //将fp所指向的文件中的内容赋给p
  1675. ?? ??? ? ? if(n==1)
  1676. ?? ??? ? ? {
  1677. ?? ??? ? ? ? ?head=p;
  1678. ?? ??? ? ? ? ?p2=p;
  1679. ?? ??? ? ? ?}
  1680. ?? ??? ? ? ?else ? ? ? ? ? ? //创建链表?
  1681. ?? ??? ? ? ?{
  1682. ?? ??? ? ? ??? ?pre=p2;
  1683. ?? ??? ? ? ??? ?p2->next=p;
  1684. ?? ??? ? ? ??? ?p2=p;
  1685. ?? ??? ??? ?}
  1686. ?? ? ? ?}
  1687. ?? ? ? ?p2->next=NULL;
  1688. ?? ?}
  1689. ?? ?if(n<=2)
  1690. ?? ??? ?head->next=NULL;
  1691. ?? ?else
  1692. ?? ??? ?pre->next=NULL;
  1693. ? ? fclose(fp); ? ?//关闭文件?
  1694. ? ? return head; ? //返回头指针?
  1695. }
  1696. ?
  1697. pDrinkBeverage readDrinkBeverageFile()//从饮品文件中读取用户信息,返回一个表头地址
  1698. {
  1699. ?? ?FILE *fp; ? ? ? //文件指针?
  1700. ?? ?int n=0;//记录链表 的结点数?
  1701. ?? ?pDrinkBeverage head=NULL;//定义头指针?
  1702. ?? ?pDrinkBeverage p2,p,pre;
  1703. ?? ?fp=fopen("DrinkBeverage.txt","a+"); ? ? //以只读的方式打开文件?
  1704. ?? ?if(fp==NULL)
  1705. ?? ?{
  1706. ?? ??? ?printf("cannot open file\n");
  1707. ?? ?}
  1708. ?? ?else
  1709. ?? ?{
  1710. ?? ??? ?while(!feof(fp)) ? ? ? ?//判断文件位置标志是否移动到文件末尾?
  1711. ?? ??? ?{
  1712. ?? ??? ? ? ?n++;
  1713. ?? ??? ??? ?p=(pDrinkBeverage)malloc(Q); //向内存申请一段空间?
  1714. ?? ??? ? ? fread(p,Q,1,fp); ? ? //将fp所指向的文件中的内容赋给p
  1715. ?? ??? ? ? if(n==1)
  1716. ?? ??? ? ? {
  1717. ?? ??? ? ? ? ?head=p;
  1718. ?? ??? ? ? ? ?p2=p;
  1719. ?? ??? ? ? ?}
  1720. ?? ??? ? ? ?else ? ? ? ? ? ? //创建链表?
  1721. ?? ??? ? ? ?{
  1722. ?? ??? ? ? ??? ?pre=p2;
  1723. ?? ??? ? ? ??? ?p2->next=p;
  1724. ?? ??? ? ? ??? ?p2=p;
  1725. ?? ??? ??? ?}
  1726. ?? ? ? ?}
  1727. ?? ? ? ?p2->next=NULL;
  1728. ?? ?}
  1729. ?? ?if(n<=2)
  1730. ?? ??? ?head->next=NULL;
  1731. ?? ?else
  1732. ?? ??? ?pre->next=NULL;
  1733. ? ? fclose(fp); ? ?//关闭文件?
  1734. ? ? return head; ? //返回头指针?
  1735. }
  1736. ?
  1737. void Add_Food() ?//添加菜单
  1738. {
  1739. ?? ?HideCursor(1);//显示光标?
  1740. ?? ?pStapleFood p1;//主食?
  1741. ?? ?pNon_stapleFood p2;//副食
  1742. ?? ?pDrinkBeverage p3;//饮品?
  1743. ?? ?char name[20];
  1744. ?? ?float price=0;
  1745. ?? ?int type=1;
  1746. ?? ?char t;
  1747. ?? ?do
  1748. ?? ?{
  1749. ?? ??? ?system("cls");
  1750. ?? ??? ?p1=(pStapleFood)malloc(N);
  1751. ?? ??? ?p2=(pNon_stapleFood)malloc(P);
  1752. ?? ??? ?p3=(pDrinkBeverage)malloc(Q);
  1753. ?? ??? ?toxy(30,6);
  1754. ?? ??? ?printf("请输入菜名:");
  1755. ?? ??? ?toxy(30,8);
  1756. ?? ??? ?printf("请输入价格:");
  1757. ?? ??? ?toxy(30,10);
  1758. ?? ??? ?printf("请输入类型:");
  1759. ?? ??? ?toxy(30,12);
  1760. ?? ??? ?printf("(1:主食 ?2.副食 ?3.饮品)");
  1761. ?? ??? ?toxy(42,6);
  1762. ?? ??? ?scanf("%s",name);
  1763. ?? ??? ?toxy(42,8);
  1764. ?? ??? ?scanf("%f",&price);
  1765. ?? ??? ?toxy(42,10);
  1766. ?? ??? ?scanf("%d",&type);
  1767. ?? ??? ?if(type==1)
  1768. ?? ??? ?{
  1769. ?? ??? ??? ?strcpy(p1->name,name);
  1770. ?? ??? ??? ?p1->price=price;
  1771. ?? ??? ??? ?save_stapleFood(p1);
  1772. ?? ??? ?}
  1773. ?? ??? ?else if(type==2)
  1774. ?? ??? ?{
  1775. ?? ??? ??? ?strcpy(p2->name,name);
  1776. ?? ??? ??? ?p2->price=price;
  1777. ?? ??? ??? ?save_non_stapleFood(p2);
  1778. ?? ??? ?}
  1779. ?? ??? ?else if(type==3)
  1780. ?? ??? ?{
  1781. ?? ??? ??? ?strcpy(p3->name,name);
  1782. ?? ??? ??? ?p3->price=price;
  1783. ?? ??? ??? ?save_drinkBeverage(p3);
  1784. ?? ??? ?}
  1785. ?? ??? ?toxy(28,14);
  1786. ?? ??? ?printf("添加成功!是否继续?(1.是 ?2.否)");
  1787. ?? ??? ?while(1)
  1788. ?? ??? ?{
  1789. ?? ??? ??? ?t=getch();
  1790. ?? ??? ??? ?if(t=='1')
  1791. ?? ??? ??? ??? ?break;
  1792. ?? ??? ??? ?else if(t=='2')
  1793. ?? ??? ??? ??? ?break;
  1794. ?? ??? ?}
  1795. ?? ??? ?if(t=='2')
  1796. ?? ??? ??? ?break;
  1797. ?? ?}while(1);
  1798. ?? ?
  1799. }?
  1800. ?
  1801. void List_Food() ?//菜单列表
  1802. {
  1803. ?? ?system("cls");
  1804. ?? ?int i=8;
  1805. ?? ?toxy(30,4);
  1806. ?? ?printf("菜单列表(按任意键继续)");
  1807. ?? ?pStapleFood p1;//主食?
  1808. ?? ?pNon_stapleFood p2;//副食
  1809. ?? ?pDrinkBeverage p3;//饮品?
  1810. ?? ?p1=readStapleFoodFile();//从主食文件中读取用户信息,返回一个表头地址?
  1811. ?? ?p2=readNonStapleFoodFile();//从副食文件中读取用户信息,返回一个表头地址?
  1812. ?? ?p3=readDrinkBeverageFile();//从饮品文件中读取用户信息,返回一个表头地址?
  1813. ?? ?toxy(26,6);
  1814. ?? ?printf("菜名\t\t\t价格");
  1815. ?? ?toxy(20,7);
  1816. ?? ?printf("-----------------------------------");
  1817. ?? ?toxy(24,i);
  1818. ?? ?printf("主食:");
  1819. ?? ?i++;
  1820. ?? ?while(p1!=NULL)
  1821. ?? ?{
  1822. ?? ??? ?toxy(26,i);
  1823. ?? ??? ?printf("%-22s%.2f",p1->name,p1->price);
  1824. ?? ??? ?i++;
  1825. ?? ??? ?p1=p1->next;
  1826. ?? ?}
  1827. ?? ?toxy(24,i);
  1828. ?? ?printf("副食:");
  1829. ?? ?i++;
  1830. ?? ?while(p2!=NULL)
  1831. ?? ?{
  1832. ?? ??? ?toxy(26,i);
  1833. ?? ??? ?printf("%-22s%.2f",p2->name,p2->price);
  1834. ?? ??? ?i++;
  1835. ?? ??? ?p2=p2->next;
  1836. ?? ?}
  1837. ?? ?toxy(24,i);
  1838. ?? ?printf("饮品:");
  1839. ?? ?i++;
  1840. ?? ?while(p3!=NULL)
  1841. ?? ?{
  1842. ?? ??? ?toxy(26,i);
  1843. ?? ??? ?printf("%-22s%.2f",p3->name,p3->price);
  1844. ?? ??? ?i++;
  1845. ?? ??? ?p3=p3->next;
  1846. ?? ?}
  1847. ?? ?getch();
  1848. }?
  1849. ?
  1850. void Table()//餐桌管理
  1851. {
  1852. ?? ?char t;
  1853. ?? ?do
  1854. ?? ?{
  1855. ?? ??? ?system("cls");
  1856. ?? ??? ?HideCursor(0);
  1857. ?? ??? ?toxy(32,4);
  1858. ?? ??? ?printf("餐桌管理");
  1859. ?? ??? ?toxy(26,5);
  1860. ?? ??? ?printf("-------------------");
  1861. ?? ??? ?toxy(30,7);
  1862. ?? ??? ?printf("1) 添加餐桌");
  1863. ?? ??? ?toxy(30,9);
  1864. ?? ??? ?printf("2) 餐桌列表");
  1865. ?? ??? ?toxy(30,11);
  1866. ?? ??? ?printf("3) 清理餐桌");
  1867. ?? ??? ?toxy(30,13);
  1868. ?? ??? ?printf("4) 返回上一级");
  1869. ?? ??? ?t=getch();
  1870. ?? ??? ?switch(t)
  1871. ?? ??? ?{
  1872. ?? ??? ??? ?case '1':Add_Table();break;
  1873. ?? ??? ??? ?case '2':Administrator_List_Table();break;
  1874. ?? ??? ??? ?case '3':Clear_Table();break;
  1875. ?? ??? ??? ?case '4':break;
  1876. ?? ??? ??? ?default :break;
  1877. ?? ??? ?}
  1878. ?? ??? ?if(t=='4')
  1879. ?? ??? ??? ?break;
  1880. ?? ?}while(1);
  1881. }?
  1882. ?
  1883. void save_Table(pTable p)//保存餐桌信息
  1884. {
  1885. ?? ?FILE *fp; ? ? ? //文件指针?
  1886. ?? ?fp=fopen("Table.txt","a+"); ? ?//以追加的方式打开文件?
  1887. ?? ?if(fp==NULL)
  1888. ?? ?{
  1889. ?? ??? ?printf("cannot open file\n");
  1890. ?? ?}
  1891. ?? ?if(fwrite(p,X,1,fp)!=1) ? ?//将p1所指向的1个大小为N的数据结构写入fp所指向的文件中?
  1892. ?? ?{
  1893. ?? ??? ?printf("file write error\n");
  1894. ?? ?}
  1895. ?? ?fclose(fp); ? ? ? ?//关闭文件?
  1896. }?
  1897. ?
  1898. pTable readTableFile()//从餐桌文件中读取用户信息,返回一个表头地址
  1899. {
  1900. ?? ?FILE *fp; ? ? ? //文件指针?
  1901. ?? ?int n=0;//记录链表 的结点数?
  1902. ?? ?pTable head=NULL;//定义头指针?
  1903. ?? ?pTable p2,p,pre;
  1904. ?? ?fp=fopen("Table.txt","a+"); ? ? //以只读的方式打开文件?
  1905. ?? ?if(fp==NULL)
  1906. ?? ?{
  1907. ?? ??? ?printf("cannot open file\n");
  1908. ?? ?}
  1909. ?? ?else
  1910. ?? ?{
  1911. ?? ??? ?while(!feof(fp)) ? ? ? ?//判断文件位置标志是否移动到文件末尾?
  1912. ?? ??? ?{
  1913. ?? ??? ? ? ?n++;
  1914. ?? ??? ??? ?p=(pTable)malloc(X); //向内存申请一段空间?
  1915. ?? ??? ? ? fread(p,X,1,fp); ? ? //将fp所指向的文件中的内容赋给p
  1916. ?? ??? ? ? if(n==1)
  1917. ?? ??? ? ? {
  1918. ?? ??? ? ? ? ?head=p;
  1919. ?? ??? ? ? ? ?p2=p;
  1920. ?? ??? ? ? ?}
  1921. ?? ??? ? ? ?else ? ? ? ? ? ? //创建链表?
  1922. ?? ??? ? ? ?{
  1923. ?? ??? ? ? ??? ?pre=p2;
  1924. ?? ??? ? ? ??? ?p2->next=p;
  1925. ?? ??? ? ? ??? ?p2=p;
  1926. ?? ??? ??? ?}
  1927. ?? ? ? ?}
  1928. ?? ? ? ?p2->next=NULL;
  1929. ?? ?}
  1930. ?? ?if(n<=2)
  1931. ?? ??? ?head->next=NULL;
  1932. ?? ?else
  1933. ?? ??? ?pre->next=NULL;
  1934. ? ? fclose(fp); ? ?//关闭文件?
  1935. ? ? return head; ? //返回头指针?
  1936. }
  1937. ?
  1938. void Add_Table()//添加餐桌?
  1939. {
  1940. ?? ?HideCursor(1);//显示光标?
  1941. ?? ?pTable p,p1;
  1942. ?? ?p1=readTableFile();?
  1943. ?? ?char t;
  1944. ?? ?int ID;
  1945. ?? ?int count;
  1946. ?? ?do
  1947. ?? ?{
  1948. ?? ??? ?system("cls");
  1949. ?? ??? ?p=(pTable)malloc(X);
  1950. ?? ??? ?toxy(26,6);
  1951. ?? ??? ?printf("请输入餐桌编号:");
  1952. ?? ??? ?toxy(26,8);
  1953. ?? ??? ?printf("请输入可坐人数:");
  1954. ?? ??? ?toxy(42,6);
  1955. ?? ??? ?scanf("%d",&ID);
  1956. ?? ??? ?toxy(42,8);
  1957. ?? ??? ?scanf("%d",&count);
  1958. ?? ??? ?while(p1!=NULL&&p1->ID!=ID)
  1959. ?? ??? ?{
  1960. ?? ??? ??? ?p1=p1->next;
  1961. ?? ??? ?}
  1962. ?? ??? ?if(p1!=NULL)
  1963. ?? ??? ?{
  1964. ?? ??? ??? ?toxy(30,10);
  1965. ?? ??? ??? ?printf("该餐桌编号已存在,请重新输入!");
  1966. ?? ??? ??? ?Sleep(2000);
  1967. ?? ??? ??? ?continue;
  1968. ?? ??? ?}
  1969. ?? ??? ?p->ID=ID;
  1970. ?? ??? ?p->People=0;
  1971. ?? ??? ?p->count=count;
  1972. ?? ??? ?strcpy(p->Username,"无");
  1973. ?? ??? ?save_Table(p);
  1974. ?? ??? ?toxy(24,10);
  1975. ?? ??? ?printf("添加成功!是否继续?(1.是 ? 2.否)");
  1976. ?? ??? ?while(1)
  1977. ?? ??? ?{
  1978. ?? ??? ??? ?t=getch();
  1979. ?? ??? ??? ?if(t=='1')
  1980. ?? ??? ??? ??? ?break;
  1981. ?? ??? ??? ?else if(t=='2')
  1982. ?? ??? ??? ??? ?break;
  1983. ?? ??? ?}
  1984. ?? ??? ?if(t=='2')
  1985. ?? ??? ??? ?break;
  1986. ?? ?}while(1);
  1987. }
  1988. ?
  1989. void Administrator_List_Table()//餐桌列表
  1990. {
  1991. ?? ?system("cls");
  1992. ?? ?pTable p,head;
  1993. ?? ?head=readTableFile();
  1994. ?? ?p=head;
  1995. ?? ?int i=11;
  1996. ?? ?toxy(32,6);
  1997. ?? ?printf("餐桌列表(按任意键继续)");
  1998. ?? ?toxy(22,8);
  1999. ?? ?printf("餐桌编号 | 可坐人数 | 已坐人数 | 订餐人");
  2000. ?? ?toxy(20,9);
  2001. ?? ?printf("--------------------------------------------");
  2002. ?? ?while(p!=NULL)
  2003. ?? ?{
  2004. ?? ??? ?toxy(26,i);
  2005. ?? ??? ?printf("%-10d%-10d%-10d%s",p->ID,p->count,p->People,p->Username);
  2006. ?? ??? ?i++;
  2007. ?? ??? ?p=p->next;
  2008. ?? ?}
  2009. ?? ?getch();
  2010. }?
  2011. ?
  2012. void Clear_Table()//清理餐桌
  2013. {
  2014. ?? ?char t;
  2015. ?? ?do
  2016. ?? ?{
  2017. ?? ??? ?system("cls");
  2018. ?? ??? ?toxy(32,4);
  2019. ?? ??? ?printf("清理餐桌");
  2020. ?? ??? ?toxy(26,5);
  2021. ?? ??? ?printf("-------------------");
  2022. ?? ??? ?toxy(30,7);
  2023. ?? ??? ?printf("1) 清理指定餐桌");
  2024. ?? ??? ?toxy(30,9);
  2025. ?? ??? ?printf("2) 清理所有餐桌");
  2026. ?? ??? ?toxy(30,11);
  2027. ?? ??? ?printf("3) 返回上一级");
  2028. ?? ??? ?t=getch();
  2029. ?? ??? ?switch(t)
  2030. ?? ??? ?{
  2031. ?? ??? ??? ?case '1':Clear_oneTable();break;
  2032. ?? ??? ??? ?case '2':Clear_allTable();break;
  2033. ?? ??? ??? ?case '3':break;
  2034. ?? ??? ??? ?default :break;
  2035. ?? ??? ?}
  2036. ?? ??? ?if(t=='3')
  2037. ?? ??? ??? ?break;
  2038. ?? ?}while(1);
  2039. }?
  2040. ?
  2041. void Updata_Table(pTable head)//更新餐桌文件
  2042. {
  2043. ?? ?FILE *fp;
  2044. ?? ?pTable p=head->next; ? //使p指向第二个结点?
  2045. ?? ?fp=fopen("Table.txt","w"); ? ?//先清空原文件内容再将修改后的信息写入文件?
  2046. ?? ?if(fp==NULL)
  2047. ?? ?{
  2048. ?? ??? ?printf("cannot open file\n");
  2049. ?? ?}
  2050. ?? ?if(fwrite(head,X,1,fp)!=1) ? //将head所指向的数据写入fp所指向的文件?
  2051. ?? ?{
  2052. ?? ??? ?printf("file write error\n");
  2053. ?? ?}
  2054. ?? ?fclose(fp); ? ?//关闭文件?
  2055. ?? ?fp=fopen("Table.txt","a"); ? // 打开User.txt文件,方式为追加?
  2056. ?? ?while(p!=NULL) ? ??//p不为空就执行循环体?
  2057. ?? ?{
  2058. ?? ??? ?if(fwrite(p,X,1,fp)!=1) ? ?//将p所指向的1个大小为N的数据结构写入fp所指向的文件?
  2059. ?? ? ? ?{
  2060. ?? ??? ??? ?printf("file write error\n");
  2061. ?? ? ? ?}
  2062. ?? ? ? ?p=p->next; ? //使p指向下一个结点?
  2063. ?? ?}
  2064. ?? ?fclose(fp); ??//关闭文件?
  2065. }?
  2066. ?
  2067. void Clear_oneTable()//清理指定餐桌
  2068. {
  2069. ?? ?int ID;
  2070. ?? ?pTable p,head;
  2071. ?? ?char t;
  2072. ?? ?do
  2073. ?? ?{
  2074. ?? ??? ?system("cls");
  2075. ?? ??? ?head=readTableFile();
  2076. ?? ??? ?p=head;
  2077. ?? ??? ?toxy(28,8);
  2078. ?? ??? ?printf("请输入您要清理的餐桌编号:");
  2079. ?? ??? ?scanf("%d",&ID);
  2080. ?? ??? ?while(p!=NULL&&p->ID!=ID)
  2081. ?? ??? ?{
  2082. ?? ??? ??? ?p=p->next;
  2083. ?? ??? ?}
  2084. ?? ??? ?if(p)
  2085. ?? ??? ?{
  2086. ?? ??? ??? ?toxy(32,10);
  2087. ?? ??? ??? ?printf("正在清理....");
  2088. ?? ??? ??? ?p->People=0;
  2089. ?? ??? ??? ?strcpy(p->Username,"无");
  2090. ?? ??? ??? ?Updata_Table(head);
  2091. ?? ??? ??? ?Sleep(2000);
  2092. ?? ??? ??? ?toxy(24,10);
  2093. ?? ??? ??? ?printf("清理成功!是否继续?1.是 ? 2.否");
  2094. ?? ??? ??? ?while(1)
  2095. ?? ??? ??? ?{
  2096. ?? ??? ??? ??? ?t=getch();
  2097. ?? ??? ??? ??? ?if(t=='1')
  2098. ?? ??? ??? ??? ??? ?break;
  2099. ?? ??? ??? ??? ?else if(t=='2')
  2100. ?? ??? ??? ??? ??? ?break;
  2101. ?? ??? ??? ?}
  2102. ?? ??? ??? ?if(t=='2')
  2103. ?? ??? ??? ??? ?break;
  2104. ?? ??? ?}
  2105. ?? ??? ?else
  2106. ?? ??? ?{
  2107. ?? ??? ??? ?toxy(32,10);
  2108. ?? ??? ??? ?printf("该餐桌不存在!请重新输入");
  2109. ?? ??? ??? ?Sleep(1500);
  2110. ?? ??? ?}
  2111. ?? ?}while(1);
  2112. }?
  2113. ?
  2114. void Clear_allTable()//清理所有餐桌
  2115. {
  2116. ?? ?system("cls");
  2117. ?? ?toxy(32,10);
  2118. ?? ?printf("正在清理....");
  2119. ?? ?pTable p,head;
  2120. ?? ?head=readTableFile();
  2121. ?? ?p=head;
  2122. ?? ?while(p!=NULL)
  2123. ?? ?{
  2124. ?? ??? ?p->People=0;
  2125. ?? ??? ?strcpy(p->Username,"无");
  2126. ?? ??? ?p=p->next;
  2127. ?? ?}
  2128. ?? ?Updata_Table(head);
  2129. ?? ?Sleep(2000);
  2130. ?? ?toxy(32,10);
  2131. ?? ?printf("清理成功!按任意键继续");
  2132. ?? ?getch();
  2133. }?
  2134. ?
  2135. void Check_User()//查看用户
  2136. {
  2137. ?? ?char t;
  2138. ?? ?do
  2139. ?? ?{
  2140. ?? ??? ?system("cls");
  2141. ?? ??? ?system("color 79");
  2142. ?? ??? ?toxy(32,6);
  2143. ?? ??? ?printf(" ?查看用户 ?");
  2144. ?? ??? ?toxy(32,7);
  2145. ?? ??? ?printf("----------------");
  2146. ?? ??? ?toxy(32,9);
  2147. ?? ??? ?printf(" 1) 查找用户 ");
  2148. ?? ??? ?toxy(32,11);
  2149. ?? ??? ?printf(" 2) 所有用户 ");
  2150. ?? ??? ?toxy(32,13);
  2151. ?? ??? ?printf(" 3)返回上一级");
  2152. ?? ??? ?t=getch();
  2153. ?? ??? ?switch(t)
  2154. ?? ??? ?{
  2155. ?? ??? ??? ?case '1':Find_User();break;
  2156. ?? ??? ??? ?case '2':All_User();break;
  2157. ?? ??? ??? ?case '3':break;
  2158. ?? ??? ??? ?default :break;
  2159. ?? ??? ?}
  2160. ?? ??? ?if(t=='3')
  2161. ?? ??? ??? ?break;
  2162. ?? ?}while(1);
  2163. ?}?
  2164. ?
  2165. void Find_User()//查找用户
  2166. {
  2167. ?? ?system("cls");
  2168. ?? ?char username[10];
  2169. ?? ?pUser p, head=readUserFile();
  2170. ?? ?p=head;
  2171. ?? ?toxy(32,10);
  2172. ?? ?printf("请输入您要查找的用户名:");
  2173. ?? ?scanf("%s",username);
  2174. ?? ?toxy(24,12);
  2175. ?? ?printf("用户名\t\t余额\t\t会员状态");
  2176. ?? ?while(p!=NULL&&strcmp(p->userName,username)!=0)
  2177. ?? ??? ?p=p->next;
  2178. ?? ?if(p!=NULL)
  2179. ?? ?{
  2180. ?? ??? ?toxy(24,14);
  2181. ?? ??? ?printf("%s\t\t%.2f\t\t%d",p->userName,p->money,p->isVIP);
  2182. ?? ?}
  2183. ?? ?else
  2184. ?? ?{
  2185. ?? ??? ?toxy(28,14);
  2186. ?? ??? ?printf("没有找到相关信息");
  2187. ?? ?}
  2188. ?? ?toxy(30,16);
  2189. ?? ?printf("请按任意键返回");
  2190. ?? ?getch();
  2191. }?
  2192. ?
  2193. void All_User()//打印所有用户信息
  2194. {
  2195. ?? ?system("cls");
  2196. ?? ?pUser p,head;
  2197. ?? ?head=readUserFile();
  2198. ?? ?p=head;
  2199. ?? ?int i=9;
  2200. ?? ?toxy(32,4);
  2201. ?? ?printf("所有用户");
  2202. ?? ?toxy(20,5);
  2203. ?? ?printf("--------------------------------------------------");
  2204. ?? ?toxy(30,6);
  2205. ?? ?printf("按任意键返回");
  2206. ?? ?toxy(24,7);
  2207. ?? ?printf("用户名\t\t余额\t\t会员状态");
  2208. ?? ?while(p!=NULL)
  2209. ?? ?{
  2210. ?? ??? ?toxy(24,i);
  2211. ?? ??? ?printf("%s\t\t%.2f\t\t%d",p->userName,p->money,p->isVIP);
  2212. ?? ??? ?p=p->next;
  2213. ?? ??? ?i+=2;
  2214. ?? ?}
  2215. ?? ?getch();
  2216. }?
  2217. ?
  2218. void All_VIP()//查看所有VIP?
  2219. {
  2220. ?? ?system("cls");
  2221. ?? ?system("color 79");
  2222. ?? ?pUser p,head;
  2223. ?? ?head=readUserFile();
  2224. ?? ?p=head;
  2225. ?? ?int i=11;
  2226. ?? ?toxy(32,6);
  2227. ?? ?printf("本店会员");
  2228. ?? ?toxy(26,8);
  2229. ?? ?printf("用户名\t\t余额");
  2230. ?? ?toxy(24,9);
  2231. ?? ?printf("--------------------------------");
  2232. ?? ?while(p!=NULL)
  2233. ?? ?{
  2234. ?? ??? ?if(p->isVIP)
  2235. ?? ??? ?{
  2236. ?? ??? ??? ?toxy(26,i);
  2237. ?? ??? ??? ?printf("%s\t\t\t%.2f",p->userName,p->money);
  2238. ?? ??? ??? ?i+=2;
  2239. ?? ??? ?}
  2240. ?? ??? ?p=p->next;
  2241. ?? ?}
  2242. ?? ?toxy(30,i);
  2243. ?? ?printf("按任意键返回");
  2244. ?? ?getch();
  2245. }
  2246. ?
  2247. void Setup_administrator()//设置管理员
  2248. {
  2249. ?? ?
  2250. ?? ?system("color 80");
  2251. ?? ?char t;
  2252. ?? ?char username[10];
  2253. ?? ?pUser p,head;
  2254. ?? ?head=readUserFile();
  2255. ?? ?do
  2256. ?? ?{
  2257. ?? ??? ?system("cls");
  2258. ?? ??? ?p=head;
  2259. ?? ??? ?toxy(26,8);
  2260. ?? ??? ?printf("请输入您要设置为管理员的用户名:");
  2261. ?? ??? ?scanf("%s",username);
  2262. ?? ??? ?while(p!=NULL&&strcmp(p->userName,username)!=0)
  2263. ?? ??? ?{
  2264. ?? ??? ??? ?p=p->next;
  2265. ?? ??? ?}
  2266. ?? ??? ?if(p!=NULL)
  2267. ?? ??? ?{
  2268. ?? ??? ??? ?p->isAdministrator=1;
  2269. ?? ??? ??? ?Updata_User(head);
  2270. ?? ??? ??? ?toxy(32,10);
  2271. ?? ??? ??? ?printf("设置成功!请按任意键返回");
  2272. ?? ??? ??? ?getch();
  2273. ?? ??? ??? ?break;
  2274. ?? ??? ?}
  2275. ?? ??? ?else
  2276. ?? ??? ?{
  2277. ?? ??? ??? ?toxy(24,10);
  2278. ?? ??? ??? ?printf("您所输入的用户名不存在!是否继续?(1.是 ? 2.否)");
  2279. ?? ??? ??? ?while(1)
  2280. ?? ??? ??? ?{
  2281. ?? ??? ??? ??? ?t=getch();
  2282. ?? ??? ??? ??? ?if(t=='1')
  2283. ?? ??? ??? ??? ??? ?break;
  2284. ?? ??? ??? ??? ?else if(t=='2')
  2285. ?? ??? ??? ??? ??? ?break;
  2286. ?? ??? ??? ?}
  2287. ?? ??? ??? ?if(t=='2')
  2288. ?? ??? ??? ??? ?break;
  2289. ?? ??? ?}
  2290. ?? ?}while(1);?? ?
  2291. }?
  2292. ?
  2293. ?
  2294. int main()
  2295. {?? ?
  2296. ?? ?Default();//进入欢迎界面?
  2297. ?? ?return 0;
  2298. }

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号