⽤c语⾔编写简单的餐厅点餐系统(带后台)
这应该是⽐较简单的c语⾔程序了,因为学校c语⾔结课结的早,我当时才学到结构体指针,所以我就把我当时能运⽤的知识点全⽤在这个程序上了。虽说这个程序对当时的我来说是天花板,但是当我继续学习,我逐渐发现这个程序能升级的点实在是太多了。但我也⼀直没去完善emmmm(其实就是懒)。所以就硬着头⽪把他发出来了。 代码涉及的知识点:顺序结构,选择分⽀结构,循环结构,数组,⾃定义函数,指针和结构体。 主要思路是:
定义的⼀个结构体数组,包含了三个成员,分别是菜品编号(serial_number),菜品名称(dishes_name[50]),和餐品价格(money)。定义⼀个结构体数组dishes[50],并给他赋值。然后再定义多个函数,使⽤多个printf分别输出交互后的页⾯。⽐如:开始的界⾯,命名为outside,欢迎界⾯,命名为welcome,菜单函数,命名为menu,等待函数,命名为waiting,账单函数,命名为bill,送客函数,命名为goodbye,后台函数,命名为backstage_welcome。这些是主函数需要的部分。 程序中多次设置可供goto使⽤的节点,⽤于使⽤后的返回,使程序更加完整。并合理使⽤清屏函数system("cls");,使程序保持简介的页⾯。
点餐系统的主要实现的功能是:
(1)点餐前输⼊桌号和⼈数
(2)菜单浏览功能
(3)输⼊选的菜单
(4)计算账单总⾦额;
(5)按点菜的顺序进⾏排序等功能;
(6)菜品信息的删除与修改;
难理解的知识点有:
在菜单函数中,输⼊的值为结构体地址,⽅便表格中数值引⽤。\t的作⽤是对齐,让界⾯更加整洁。\n是回车。struct menu* b中的b表⽰结构体struct menu的地址,b指向结构体的⾸地址,即结构体数组dishes[1],b+1指向结构体数组dishes[2],以此类推。->表⽰引⽤该地址下某⼀成员的值。⽤%d,%s输出结构体数组中对应的值。
在⾃定义账单函数中,⽤于输出菜品编号,名称,并计算总⾦额。NUM[50]中存放⽤户输⼊的菜品编号,struct menu* b⽤于输出菜单时对应菜品名称的调⽤,PAYMONEY⽤于输⼊主函数中已经计算好的总⾦额。然后再定义⼀个整型变量i,⽤于for循环计数。将i赋为0,执⾏后⾯的循环结构,if是判断结束循环的关键,循环到输⼊的数组int NUM[50]中的0后break结束本次循环,如果不是0,则持续输出菜单。循环结束后,输出总⾦额。
清屏函数在#include<conio.h>中。
实验问题
数组赋值问题应使⽤strcmp函数,⽽且不能调⽤结构体指针,因为结构体内的数组名就是他的⾸地址,再⽤地址会报错。
在使⽤清屏函数时,应该加⼀个getch或者scanf,防⽌还未输出就已经被清屏的情况。
解决了程序后台系统中,修改菜品名称时⽆法输⼊的问题,应加⼀⾏getch,把输⼊的回车吃掉。
代码如下:
1#include<stdio.h>
2#include<conio.h>
3#include<string.h>
4struct menu
5{
6 int serial_number;
7 char dishes_name[50];
8 int money;
9}dishes[50]={
9}dishes[50]={
10 {1,"⿇婆⾖腐",20},
11 {2,"鱼⾹鸡丝",25},
12 {3,"北京烤鸭",67},
13 {4,"乱炖",54},
14 {5,"海带丝",12},
15 {6,"⼟⾖丝",12},
16 {7,"可乐鸡翅",44},
17 {8,"分⽶鸡",77},
18 {9,"⽜⾁⾯",24},
19 {10,"葱油饼",5},
20 {11,"⽶饭",3}
21 };
22int outside(void)
23{
24 printf("--------------------------------\n");
25 printf("| |\n");
26 printf("| |\n");
27 printf("| |\n");
28 printf("| |\n");
29 printf("| |\n");
30 printf("| 欢迎来到餐厅点餐系统 |\n");
31 printf("| |\n");
32 printf("| |\n");
33 printf("| |\n");
34 printf("| |\n");
35 printf("| |\n");
36 printf("--------------------------------\n");
37}
38int welcome(int PEOPLENUMBER,int DESK)
39{
40 printf("--------------------------------\n");
41 printf("| |\n");
42 printf("| |\n");
43 printf("| |\n");
44 printf("| |\n");
45 printf("| |\n");
46 printf("| 第%d号的%d位客⼈,欢迎光临 |\n",PEOPLENUMBER,DESK);
47 printf("| |\n");
48 printf("| |\n");
49 printf("| |\n");
50 printf("| |\n");
51 printf("| |\n");
52 printf("--------------------------------\n");
53}
54
55int menu(struct menu* b)
56{
57 printf("------编号------名称-----价格---\n");
58 printf("| %d\t %s\t %d\t |\t\n",(b)->serial_number,(b)->dishes_name,(b)->money);
59 printf("| %d\t %s\t %d\t |\t\n",(b+1)->serial_number,(b+1)->dishes_name,(b+1)->money);
60 printf("| %d\t %s\t %d\t |\t\n",(b+2)->serial_number,(b+2)->dishes_name,(b+2)->money);
61 printf("| %d\t %s\t %d\t |\t\n",(b+3)->serial_number,(b+3)->dishes_name,(b+3)->money);
62 printf("| %d\t %s\t %d\t |\t\n",(b+4)->serial_number,(b+4)->dishes_name,(b+4)->money);
63 printf("| %d\t %s\t %d\t |\t\n",(b+5)->serial_number,(b+5)->dishes_name,(b+5)->money);
64 printf("| %d\t %s\t %d\t |\t\n",(b+6)->serial_number,(b+6)->dishes_name,(b+6)->money);
65 printf("| %d\t %s\t %d\t |\t\n",(b+7)->serial_number,(b+7)->dishes_name,(b+7)->money);
66 printf("| %d\t %s\t %d\t |\t\n",(b+8)->serial_number,(b+8)->dishes_name,(b+8)->money);
67 printf("| %d\t%s\t %d\t |\t\n",(b+9)->serial_number,(b+9)->dishes_name,(b+9)->money);
68 printf("| %d\t%s\t %d\t |\t\n",(b+10)->serial_number,(b+10)->dishes_name,(b+10)->money);
69 printf("--------------------------------\n");
70
71}
72int waiting(void)
73{
74 printf("--------------------------------\n");
74 printf("--------------------------------\n");
75 printf("| |\n");
76 printf("| |\n");
77 printf("| |\n");
78 printf("| |\n");
79 printf("| |\n");
80 printf("| 已收到您的菜单,请等待上餐 |\n");
81 printf("| |\n");
82 printf("| |\n");
83 printf("| |\n");
84 printf("| |\n");
85 printf("| |\n");
86 printf("--------------------------------\n");
87}
88int bill(int NUM[50],struct menu* b,int PAYMONEY)
89{
90 printf("--------------------------------\n");
91 printf("| |\n");
92 printf("| |\n");
93 printf("| |\n");
94 printf("| |\n");
95 printf("| |\n");
96 printf("| 请查收您的账单 |\n");
97 printf("| 如有异议请联系服务员 |\n");
98 printf("| |\n");
99 printf("| |\n");
100 printf("| |\n");
101 printf("| |\n");
102 printf("--------------------------------\n");
103 int i;
104 for(i=0;;i++)
105 {
106 if(NUM[i]==0)
107 {
108 break;
109 }
科协论坛110 printf(" %d\t %s\t %d\t\n",NUM[i],(b+NUM[i]-1)->dishes_name,(b+NUM[i]-1)->money); 111 }
112 printf("总共为%d元\n",PAYMONEY);
113}
114int goodbye(void)
115{
116 printf("--------------------------------\n");
117 printf("| |\n");
118 printf("| |\n");
119 printf("| |\n");
120 printf("| |\n");
121 printf("| |\n");
122 printf("| 谢谢您的回顾 |\n");
123 printf("| |\n");
124 printf("| |\n");
成人性行为125 printf("| |\n");
126 printf("| |\n");
127 printf("| |\n");
128 printf("--------------------------------\n");
129}
130int backstage_welcome(void)
131{
132 printf("--------------------------------\n");
133 printf("| |\n");
134 printf("| 欢迎进⼊后台管理系统 |\n");
135 printf("| |\n");
136 printf("| |\n");
高速公路服务区设计137 printf("| 修改价格请输⼊1 |\n");
138 printf("| |\n");
139 printf("| 修改菜品请输⼊2 |\n");
139 printf("| 修改菜品请输⼊2 |\n");
140 printf("| |\n");
最大功率点跟踪
141 printf("| 退出管理员界⾯请输⼊3 |\n");
142 printf("| |\n");
称呼后缀
143 printf("| |\n");
144 printf("--------------------------------\n");
145}
146
147int main()
148{
149 start:
150 outside();
151 int desknumber,human;
152 int n,i,num[50],paymoney=0;
153 int keyword;
154 int change;
155 struct menu* pmenu=&dishes;
156 printf("请输⼊餐桌号(输⼊1009进⼊管理界⾯)");
157 scanf("%d",&desknumber);
158 if(desknumber==1009)
159 {
160 goto start_backstage;
161 }
162 printf("请输⼊就餐⼈数");
163 scanf("%d",&human);
164 system("cls");
165 welcome(human,desknumber);
166 printf("输⼊任意阿拉伯数字点击回车进⼊下⼀步");
167 scanf("%d");
168 system("cls");
169 menu(pmenu);
170 pmenu=&dishes;
171 printf("请输⼊想吃的菜的编号,可⼀次输⼊多个编号,每个编号后请输⼊“,”,最后以0结束\n"); 172 for(i=0;;i++)
173 {
174 scanf("%d,",&num[i]);
175 if(num[i]==0)
176 {
177 break;
178 }
179 else
180 {
181 paymoney+=((pmenu+num[i]-1)->money);
182 }
183 }
184 system("cls");
185 waiting();
186 start_to_bill:
187 printf("查看账单请输⼊1\n");
188 scanf("%d",&n);
189 system("cls");
190 start_to_pay:
191 if(n==1)
192 {
193 bill(num,pmenu,paymoney);
194 }nk
195 else
196 {
197 printf("输⼊有误,请重新输⼊\n");
198 goto start_to_bill;
199 }
200 printf("已经帮您联系服务员,服务员将很快到达,请您稍等\n");
201 printf("请服务员确认后输⼊密码(1111)\n");
202 scanf("%d",&keyword);
203 system("cls");
204 if(keyword==1111)
204 if(keyword==1111)
205 {
206 goodbye();
207 printf("请输⼊任意⼀个阿拉伯数字,重置点餐系统\n"); 208 scanf("%d");
209 system("cls");
210 goto start;
211 }
212 else
213 {
214 printf("输⼊错误,请重新输⼊\n");
215 goto start_to_pay;
216 }
217
218
219 start_backstage:
220 printf("请输⼊管理员密码(1111)");
221 scanf("%d",&keyword);
222 if(keyword!=1111)
223 {
224 printf("密码错误,随意输⼊⼀个阿拉伯数字返回");
225 scanf("%d");
226 system("cls");
227 goto start;
228 }
229 system("cls");
230 start_manage:
231 backstage_welcome();
232 scanf("%d",&change);
233 if(change==1)
234 {
235 int bianhao,changemoney;
236 printf("请输⼊菜品编号");
237 scanf("%d",&bianhao);
238 printf("\n请输⼊修改的价格\n");
239 scanf("%d",&changemoney);
240 (pmenu+bianhao-1)->money=changemoney;
241 printf("修改成功,输⼊任意阿拉伯数字返回管理员界⾯\n"); 242 scanf("%d");
243 system("cls");
244 goto start_manage;
245
246 }
247 else if(change==3)
248 {
249 system("cls");
250 goto start;
251 }
252 else if(change==2)
253 {
254 int bianhao;
255 char dish_name[50];
256 char *pname=&(pmenu+bianhao-1)->dishes_name; 257 printf("请输⼊菜品编号");
258 scanf("%d",&bianhao);
259 getchar();
260 printf("\n请输⼊修改的名称\n");
261 gets(dish_name);
262 strcpy(dishes[bianhao-1].dishes_name,dish_name); 263 //strcpy(pname,dish_name);
264 printf("修改成功,输⼊任意阿拉伯数字返回管理员界⾯\n"); 265 scanf("%d");
266 system("cls");
267 goto start_manage;
268 }
269 else