首先附上源代码:
1 #include <stdio.h> 2 3 void main_munu(){ 4 //打印主菜单 5 char a[6][20]={"菜单","凉菜","热销菜","主食","饭后甜点","饮料"}; 6 int i; 7 printf("%s\n",a[0]); 8 for(i=1;i<6;i++) 9 { 10 printf("\t%d.%s\n",i,a[i]); 11 } 12 printf("\t0.点餐结束\n"); 13 } 14 15 void menu_liangcai(){ 16 //凉菜类打印 17 char a[3][20]={"木耳辣根","姜汁皮蛋","肉丝苦菊"};//定义字符数组,存放菜名 18 printf("请具体选择菜品:\n"); 19 for (int i = 0; i < 3; i ++) { 20 printf("\t\t%d.%s\n",i+1,a[i]); 21 } 22 printf("\t\t0.返回上层菜单\n"); 23 } 24 25 void menu_rexiao(){ 26 //热销菜打印 27 char a[3][20]={"葱烧排骨","麻婆豆腐","香辣小河虾"};//定义字符数组,存放菜名 28 printf("请具体选择菜品:\n"); 29 for (int i = 0; i < 3; i ++) { 30 printf("\t\t%d.%s\n",i+1,a[i]); 31 } 32 printf("\t\t0.返回上层菜单\n"); 33 } 34 35 void menu_zhushi(){ 36 // 主食类打印 37 char a[3][20]={"香肠焖饭","海鲜炒面","玉米馒头"};//定义字符数组,存放菜名 38 printf("请具体选择菜品:\n"); 39 for (int i = 0; i < 3; i ++) { 40 printf("\t\t%d.%s\n",i+1,a[i]); 41 } 42 printf("\t\t0.返回上层菜单\n"); 43 } 44 45 void menu_tiandian(){ 46 //甜点类打印 47 char a[3][20]={"草莓冰淇淋","懒人布丁","香橙果冻"};//定义字符数组,存放菜名 48 printf("请具体选择菜品:\n"); 49 for (int i = 0; i < 3; i ++) { 50 printf("\t\t%d.%s\n",i+1,a[i]); 51 } 52 printf("\t\t0.返回上层菜单\n"); 53 } 54 55 void menu_yinliao(){ 56 //饮料类打印 57 char a[3][20]={"倾橙汁恋","可口可乐","秘制凉茶"};//定义字符数组,存放菜名 58 printf("请具体选择菜品:\n"); 59 for (int i = 0; i < 3; i ++) { 60 printf("\t\t%d.%s\n",i+1,a[i]); 61 } 62 printf("\t\t0.返回上层菜单\n"); 63 }
(1)在打印菜单信息的过程中,采用了数组的方法,利用了for循环来打印输出各级菜单的菜品,同时通过顾客输入编号来控制要点的菜品。
1 int main(int argc, const char * argv[]) { 2 printf("***** 法克招牌快餐店 *****\n"); 3 printf(" ***** 欢迎您点餐 *****\n"); 4 int M;//定义用户选择的分类代号为M; 5 int n;//定义用户输入子菜单下的菜品代号为n; 6 int x[5][3] = {0};//定义每类菜品被点数量 7 int price1[5][3] = {0};//每种菜品的价格总价 8 int price[5][3] = {{12,15,13},{25,20,30},{5,5,10},{6,5,3},{3,4,5}};//定义每样菜品单价 9 int total = 0;//定义所有菜品总价 初始化为0; 10 char name[5][3][20] = {{"木耳辣根","姜汁皮蛋","肉丝苦菊"},{"葱烧排骨","麻婆豆腐","香辣小河虾"},{"香肠焖饭","海鲜炒面","玉米馒头"},{"草莓冰淇淋","懒人布丁","香橙果冻"},{"倾橙汁恋","可口可乐","秘制凉茶"}}; 11 while (1) { 12 main_munu(); 13 scanf("%d",&M);//接收用户输入的菜品分类代号 14 if (M == 0) { 15 break; 16 } 17 switch (M) { 18 case 1: 19 { 20 menu_liangcai(); 21 while (1) { 22 scanf("%d",&n); 23 if (n == 0) { 24 //如果输入为0,跳出循环(程序中表现为:跳出本菜单下的菜品选择); 25 break; 26 } 27 //统计 每样菜品总价格 与被点次数 28 price1[0][n-1] += price[0][n-1]; 29 x [0][n-1] ++; 30 } 31 } 32 if(n == 0)break;//如果输入为0,结束选菜; 33 case 2: 34 { 35 menu_rexiao(); 36 while (1) { 37 scanf("%d",&n); 38 if (n == 0) { 39 //如果输入为0,跳出循环(程序中表现为:跳出本菜单下的菜品选择); 40 break; 41 } 42 price1[1][n-1]+=price[1][n-1]; 43 x[1][n-1]++; 44 } 45 } 46 if(n == 0)break;//如果输入为0,结束选菜; 47 case 3: 48 { 49 menu_zhushi(); 50 while (1) { 51 scanf("%d",&n); 52 if (n == 0) { 53 //如果输入为0,跳出循环(程序中表现为:跳出本菜单下的菜品选择); 54 break; 55 } 56 price1[2][n-1] += price[2][n-1]; 57 x[2][n-1]++; 58 } 59 } 60 if(n == 0)break;//如果输入为0,结束选菜; 61 case 4: 62 { 63 menu_tiandian(); 64 while (1) { 65 scanf("%d",&n); 66 if (n == 0) { 67 //如果输入为0,跳出循环(程序中表现为:跳出本菜单下的菜品选择); 68 break; 69 } 70 price1[3][n-1] += price[3][n-1]; 71 x[3][n-1]++; 72 } 73 } 74 if(n == 0)break;//如果输入为0,结束选菜; 75 case 5: 76 { 77 menu_yinliao(); 78 while (1) { 79 scanf("%d",&n); 80 if (n == 0) { 81 //如果输入为0,跳出循环(程序中表现为:跳出本菜单下的菜品选择); 82 break; 83 } 84 price1[4][n-1] += price[4][n-1]; 85 x[4][n-1]++; 86 } 87 } 88 89 if(n == 0)break;//如果输入为0,结束选菜; 90 } 91 92 } 93
(2)通过数组x[5][3]、price1[5][3]、price[5][3]分别记录了每类菜品被点数量、每种菜品的价格总价、每样菜品单价。在从键盘输入菜品的编号后通过switch语句来控制点餐的进程,再利用数组x[5][3]、price1[5][3]来记录顾客点餐信息。,最后在经过统计累加起来得到顾客点餐信息以及总价格total。顾客在主菜单输入“0”结束点餐,在子菜单中输入“0”返回上一级菜单。
1 //打印相关信息 2 printf("菜名\t\t\t单价(元)\t数量\t总价格(元)\n-----------------------------------\n"); 3 for (int i = 0; i < 5; i++) { 4 for (int j = 0; j < 3; j++) { 5 if (price1[i][j] != 0) {//用价格判断顾客是否选择 确认打印 6 printf("%s\t\t%3d\t\t%3d\t%3d\n",name[i][j],price[i][j],x[i][j],price1[i][j]); 7 total += price1[i][j];//计算总价格 8 } 9 } 10 } 11 printf("总价格:\t\t\t\t\t%3d\n",total); 12 printf("祝您用餐愉快,期待您的下次光临!\n"); 13 return 0; 14 }
(3)通过两个for语句控制打印出顾客点餐信息。
这个系统的优点有很多:一、这个系统代码的思路很清楚,层层递进;二、亮点是通过数组控制点餐的数量和价格,在顾客每一次选择菜品之后,都会进行数组的更新,在计算总价的时候,无疑方便了很多;三、在最后打印了顾客的点菜信息,符合现实中的实际情况。
缺点就是在点菜的时候不能直接选择要点的菜品的数量,只能返回到上一级菜单中再点一次,这样操作起来有点麻烦。
在深入了解了这个简单的点餐系统之后,我从中学到了很多知识点,也有点明白了“实践是检验真理的唯一标准”这句话。我觉得在编程之前,要把自己的想法写在纸上,如果是简单一点的程序不需要这样,如果程序比较复杂,就写下来,这样可以让思路更加清晰。良好的编程习惯是学好C语言的重要因素,只有勤动手,多动脑才能学好C语言,光说不练是不行的。
学习C语言需要的是坚持下去的毅力,认真对待每次错误的耐心,还有孜孜不倦的努力。拥有一个良好的心态,相信自己,你就会发现学好C语言不再困难!
原文地址:https://www.cnblogs.com/duanjs815/p/10469962.html