发布时间:2024-04-19 16:01
本文实例为大家分享了C语言实现餐厅点餐系统的具体代码,供大家参考,具体内容如下
这应该是比较简单的c语言程序了,因为学校c语言结课结的早,我当时才学到结构体指针,所以我就把我当时能运用的知识点全用在这个程序上了。虽说这个程序对当时的我来说是天花板,但是当我继续学习,我逐渐发现这个程序能升级的点实在是太多了。但我也一直没去完善。所以就硬着头皮把他发出来了。
代码涉及的知识点:顺序结构,选择分支结构,循环结构,数组,自定义函数,指针和结构体。
定义的一个结构体数组,包含了三个成员,分别是菜品编号(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
数组赋值问题应使用strcmp函数,而且不能调用结构体指针,因为结构体内的数组名就是他的首地址,再用地址会报错。
在使用清屏函数时,应该加一个getch或者scanf,防止还未输出就已经被清屏的情况。
解决了程序后台系统中,修改菜品名称时无法输入的问题,应加一行getch,把输入的回车吃掉。
代码如下:
#include#include #include struct menu { int serial_number; char dishes_name[50]; int money; }dishes[50]={ {1,\"麻婆豆腐\",20}, {2,\"鱼香鸡丝\",25}, {3,\"北京烤鸭\",67}, {4,\"乱炖\",54}, {5,\"海带丝\",12}, {6,\"土豆丝\",12}, {7,\"可乐鸡翅\",44}, {8,\"分米鸡\",77}, {9,\"牛肉面\",24}, {10,\"葱油饼\",5}, {11,\"米饭\",3} }; int outside(void) { printf(\"--------------------------------\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| 欢迎来到餐厅点餐系统 |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"--------------------------------\\n\"); } int welcome(int PEOPLENUMBER,int DESK) { printf(\"--------------------------------\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| 第%d号的%d位客人,欢迎光临 |\\n\",PEOPLENUMBER,DESK); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"--------------------------------\\n\"); } int menu(struct menu* b) { printf(\"------编号------名称-----价格---\\n\"); printf(\"| %d\\t %s\\t %d\\t |\\t\\n\",(b)->serial_number,(b)->dishes_name,(b)->money); printf(\"| %d\\t %s\\t %d\\t |\\t\\n\",(b+1)->serial_number,(b+1)->dishes_name,(b+1)->money); printf(\"| %d\\t %s\\t %d\\t |\\t\\n\",(b+2)->serial_number,(b+2)->dishes_name,(b+2)->money); printf(\"| %d\\t %s\\t %d\\t |\\t\\n\",(b+3)->serial_number,(b+3)->dishes_name,(b+3)->money); printf(\"| %d\\t %s\\t %d\\t |\\t\\n\",(b+4)->serial_number,(b+4)->dishes_name,(b+4)->money); printf(\"| %d\\t %s\\t %d\\t |\\t\\n\",(b+5)->serial_number,(b+5)->dishes_name,(b+5)->money); printf(\"| %d\\t %s\\t %d\\t |\\t\\n\",(b+6)->serial_number,(b+6)->dishes_name,(b+6)->money); printf(\"| %d\\t %s\\t %d\\t |\\t\\n\",(b+7)->serial_number,(b+7)->dishes_name,(b+7)->money); printf(\"| %d\\t %s\\t %d\\t |\\t\\n\",(b+8)->serial_number,(b+8)->dishes_name,(b+8)->money); printf(\"| %d\\t%s\\t %d\\t |\\t\\n\",(b+9)->serial_number,(b+9)->dishes_name,(b+9)->money); printf(\"| %d\\t%s\\t %d\\t |\\t\\n\",(b+10)->serial_number,(b+10)->dishes_name,(b+10)->money); printf(\"--------------------------------\\n\"); } int waiting(void) { printf(\"--------------------------------\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| 已收到您的菜单,请等待上餐 |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"--------------------------------\\n\"); } int bill(int NUM[50],struct menu* b,int PAYMONEY) { printf(\"--------------------------------\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| 请查收您的账单 |\\n\"); printf(\"| 如有异议请联系服务员 |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"--------------------------------\\n\"); int i; for(i=0;;i++) { if(NUM[i]==0) { break; } printf(\" %d\\t %s\\t %d\\t\\n\",NUM[i],(b+NUM[i]-1)->dishes_name,(b+NUM[i]-1)->money); } printf(\"总共为%d元\\n\",PAYMONEY); } int goodbye(void) { printf(\"--------------------------------\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| 谢谢您的回顾 |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"--------------------------------\\n\"); } int backstage_welcome(void) { printf(\"--------------------------------\\n\"); printf(\"| |\\n\"); printf(\"| 欢迎进入后台管理系统 |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"| 修改价格请输入1 |\\n\"); printf(\"| |\\n\"); printf(\"| 修改菜品请输入2 |\\n\"); printf(\"| |\\n\"); printf(\"| 退出管理员界面请输入3 |\\n\"); printf(\"| |\\n\"); printf(\"| |\\n\"); printf(\"--------------------------------\\n\"); } int main() { start: outside(); int desknumber,human; int n,i,num[50],paymoney=0; int keyword; int change; struct menu* pmenu=&dishes; printf(\"请输入餐桌号(输入1009进入管理界面)\"); scanf(\"%d\",&desknumber); if(desknumber==1009) { goto start_backstage; } printf(\"请输入就餐人数\"); scanf(\"%d\",&human); system(\"cls\"); welcome(human,desknumber); printf(\"输入任意阿拉伯数字点击回车进入下一步\"); scanf(\"%d\"); system(\"cls\"); menu(pmenu); pmenu=&dishes; printf(\"请输入想吃的菜的编号,可一次输入多个编号,每个编号后请输入“,”,最后以0结束\\n\"); for(i=0;;i++) { scanf(\"%d,\",&num[i]); if(num[i]==0) { break; } else { paymoney+=((pmenu+num[i]-1)->money); } } system(\"cls\"); waiting(); start_to_bill: printf(\"查看账单请输入1\\n\"); scanf(\"%d\",&n); system(\"cls\"); start_to_pay: if(n==1) { bill(num,pmenu,paymoney); } else { printf(\"输入有误,请重新输入\\n\"); goto start_to_bill; } printf(\"已经帮您联系服务员,服务员将很快到达,请您稍等\\n\"); printf(\"请服务员确认后输入密码(1111)\\n\"); scanf(\"%d\",&keyword); system(\"cls\"); if(keyword==1111) { goodbye(); printf(\"请输入任意一个阿拉伯数字,重置点餐系统\\n\"); scanf(\"%d\"); system(\"cls\"); goto start; } else { printf(\"输入错误,请重新输入\\n\"); goto start_to_pay; } start_backstage: printf(\"请输入管理员密码(1111)\"); scanf(\"%d\",&keyword); if(keyword!=1111) { printf(\"密码错误,随意输入一个阿拉伯数字返回\"); scanf(\"%d\"); system(\"cls\"); goto start; } system(\"cls\"); start_manage: backstage_welcome(); scanf(\"%d\",&change); if(change==1) { int bianhao,changemoney; printf(\"请输入菜品编号\"); scanf(\"%d\",&bianhao); printf(\"\\n请输入修改的价格\\n\"); scanf(\"%d\",&changemoney); (pmenu+bianhao-1)->money=changemoney; printf(\"修改成功,输入任意阿拉伯数字返回管理员界面\\n\"); scanf(\"%d\"); system(\"cls\"); goto start_manage; } else if(change==3) { system(\"cls\"); goto start; } else if(change==2) { int bianhao; char dish_name[50]; char *pname=&(pmenu+bianhao-1)->dishes_name; printf(\"请输入菜品编号\"); scanf(\"%d\",&bianhao); getchar(); printf(\"\\n请输入修改的名称\\n\"); gets(dish_name); strcpy(dishes[bianhao-1].dishes_name,dish_name); //strcpy(pname,dish_name); printf(\"修改成功,输入任意阿拉伯数字返回管理员界面\\n\"); scanf(\"%d\"); system(\"cls\"); goto start_manage; } else { printf(\"请输入有效的数\"); system(\"cls\"); goto start_manage; } }
这个程序能升级的点还是有很多的,比如:可以写一个链表,自动录入菜品的名称和价格;还可以定义一个文件指针,用fopen和fclose,将菜单和流水保存在txt文件中,方便后续查阅。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
[Datawhale-李宏毅机器学习-39期]-001-机器学习介绍
VueCli+SpringBoot(项目搭建、依赖引入、配置信息)一
企业自建私有云-openstack-负载keepalive+haproxy(容灾节点)
火山引擎支持 Pico 完成业界首场 8K 3D 实时互动 VR 演唱会
c语言c 语言基本知识,学好c语言必读,c语言的基本知识点总结
kubernetes Volume存储卷configMap学习笔记
Android Flutter利用CustomPaint绘制基本图形详解
一文教你将Visual Studio Code变成Python开发神器
python turtle绕原点旋转_中秋节,我们用Python代码做个五仁月饼吧
苹果icloud登录_如何在Windows电脑上使用苹果iCloud服务?
【Todo】【转载】深度学习&神经网络 科普及八卦 学习笔记 & GPU & SIMD