C語言實現(xiàn)餐廳點餐系統(tǒng)
本文實例為大家分享了C語言實現(xiàn)餐廳點餐系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
這應(yīng)該是比較簡單的c語言程序了,因為學(xué)校c語言結(jié)課結(jié)的早,我當(dāng)時才學(xué)到結(jié)構(gòu)體指針,所以我就把我當(dāng)時能運用的知識點全用在這個程序上了。雖說這個程序?qū)Ξ?dāng)時的我來說是天花板,但是當(dāng)我繼續(xù)學(xué)習(xí),我逐漸發(fā)現(xiàn)這個程序能升級的點實在是太多了。但我也一直沒去完善。所以就硬著頭皮把他發(fā)出來了。
代碼涉及的知識點:順序結(jié)構(gòu),選擇分支結(jié)構(gòu),循環(huán)結(jié)構(gòu),數(shù)組,自定義函數(shù),指針和結(jié)構(gòu)體。
主要思路:
定義的一個結(jié)構(gòu)體數(shù)組,包含了三個成員,分別是菜品編號(serial_number),菜品名稱(dishes_name[50]),和餐品價格(money)。定義一個結(jié)構(gòu)體數(shù)組dishes[50],并給他賦值。然后再定義多個函數(shù),使用多個printf分別輸出交互后的頁面。比如:開始的界面,命名為outside,歡迎界面,命名為welcome,菜單函數(shù),命名為menu,等待函數(shù),命名為waiting,賬單函數(shù),命名為bill,送客函數(shù),命名為goodbye,后臺函數(shù),命名為backstage_welcome。這些是主函數(shù)需要的部分。
程序中多次設(shè)置可供goto使用的節(jié)點,用于使用后的返回,使程序更加完整。并合理使用清屏函數(shù)system("cls");,使程序保持簡介的頁面。
點餐系統(tǒng)的主要實現(xiàn)的功能是:
(1)點餐前輸入桌號和人數(shù)
(2)菜單瀏覽功能
(3)輸入選的菜單
(4)計算賬單總金額;
(5)按點菜的順序進行排序等功能;
(6)菜品信息的刪除與修改;
難理解的知識點:
在菜單函數(shù)中,輸入的值為結(jié)構(gòu)體地址,方便表格中數(shù)值引用。\t的作用是對齊,讓界面更加整潔。\n是回車。struct menu* b中的b表示結(jié)構(gòu)體struct menu的地址,b指向結(jié)構(gòu)體的首地址,即結(jié)構(gòu)體數(shù)組dishes[1],b+1指向結(jié)構(gòu)體數(shù)組dishes[2],以此類推。->表示引用該地址下某一成員的值。用%d,%s輸出結(jié)構(gòu)體數(shù)組中對應(yīng)的值。
在自定義賬單函數(shù)中,用于輸出菜品編號,名稱,并計算總金額。NUM[50]中存放用戶輸入的菜品編號,struct menu* b用于輸出菜單時對應(yīng)菜品名稱的調(diào)用,PAYMONEY用于輸入主函數(shù)中已經(jīng)計算好的總金額。然后再定義一個整型變量i,用于for循環(huán)計數(shù)。將i賦為0,執(zhí)行后面的循環(huán)結(jié)構(gòu),if是判斷結(jié)束循環(huán)的關(guān)鍵,循環(huán)到輸入的數(shù)組int NUM[50]中的0后break結(jié)束本次循環(huán),如果不是0,則持續(xù)輸出菜單。循環(huán)結(jié)束后,輸出總金額。
清屏函數(shù)在#include<conio.h>中。
實驗問題
數(shù)組賦值問題應(yīng)使用strcmp函數(shù),而且不能調(diào)用結(jié)構(gòu)體指針,因為結(jié)構(gòu)體內(nèi)的數(shù)組名就是他的首地址,再用地址會報錯。
在使用清屏函數(shù)時,應(yīng)該加一個getch或者scanf,防止還未輸出就已經(jīng)被清屏的情況。
解決了程序后臺系統(tǒng)中,修改菜品名稱時無法輸入的問題,應(yīng)加一行g(shù)etch,把輸入的回車吃掉。
代碼如下:
#include<stdio.h> #include<conio.h> #include<string.h> 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("| ? ? 歡迎來到餐廳點餐系統(tǒng) ? ? |\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("| ? ? ?如有異議請聯(lián)系服務(wù)員 ? ?|\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("| ? ? 歡迎進入后臺管理系統(tǒng) ? ? |\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("請輸入就餐人數(shù)"); ?? ?scanf("%d",&human); ?? ?system("cls"); ?? ?welcome(human,desknumber);? ?? ?printf("輸入任意阿拉伯?dāng)?shù)字點擊回車進入下一步"); ?? ?scanf("%d"); ?? ?system("cls"); ?? ?menu(pmenu); ?? ?pmenu=&dishes; ?? ?printf("請輸入想吃的菜的編號,可一次輸入多個編號,每個編號后請輸入“,”,最后以0結(jié)束\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("已經(jīng)幫您聯(lián)系服務(wù)員,服務(wù)員將很快到達,請您稍等\n"); ?? ?printf("請服務(wù)員確認(rèn)后輸入密碼(1111)\n"); ?? ?scanf("%d",&keyword); ?? ?system("cls"); ?? ?if(keyword==1111) ?? ?{ ?? ??? ?goodbye(); ?? ??? ?printf("請輸入任意一個阿拉伯?dāng)?shù)字,重置點餐系統(tǒng)\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("密碼錯誤,隨意輸入一個阿拉伯?dāng)?shù)字返回"); ?? ??? ?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("修改成功,輸入任意阿拉伯?dāng)?shù)字返回管理員界面\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("修改成功,輸入任意阿拉伯?dāng)?shù)字返回管理員界面\n"); ?? ??? ?scanf("%d"); ?? ??? ?system("cls"); ?? ??? ?goto start_manage; ?? ?} ?? ?else ?? ?{ ?? ??? ?printf("請輸入有效的數(shù)"); ?? ??? ?system("cls"); ?? ??? ?goto start_manage;? ?? ?} }
這個程序能升級的點還是有很多的,比如:可以寫一個鏈表,自動錄入菜品的名稱和價格;還可以定義一個文件指針,用fopen和fclose,將菜單和流水保存在txt文件中,方便后續(xù)查閱。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解C++中stoi/stol/stoll函數(shù)的用法
這篇文章主要為大家詳細(xì)介紹了C++中stoi、stol、stoll函數(shù)的具體用法,文中的示例代碼講解詳細(xì),對我們學(xué)校C++有一點的幫助,需要的可以參考一下2023-03-03C++實現(xiàn)LeetCode(84.直方圖中最大的矩形)
這篇文章主要介紹了C++實現(xiàn)LeetCode(84.直方圖中最大的矩形),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07華為云開發(fā)工具CodeArts IDE for C/C++開發(fā)使用指南
CodeArts IDE是一個集成開發(fā)環(huán)境(IDE),它提供了開發(fā)語言和調(diào)試服務(wù),本文主要介紹了華為云開發(fā)工具CodeArts IDE for C/C++ 開發(fā)使用指南,感興趣的可以了解一下2023-08-08