軟件工程綜合實踐專題個人博客第一次作業,這個系統來自https://blog.csdn.net/sinat_16590595/article/details/48245347,這是用c語言編寫的一個點餐系統。
首先附上源代碼:
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語言不再困難!