東北大學(xué)面向過程程序設(shè)計實(shí)踐報告資料_第1頁
東北大學(xué)面向過程程序設(shè)計實(shí)踐報告資料_第2頁
東北大學(xué)面向過程程序設(shè)計實(shí)踐報告資料_第3頁
東北大學(xué)面向過程程序設(shè)計實(shí)踐報告資料_第4頁
東北大學(xué)面向過程程序設(shè)計實(shí)踐報告資料_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

課程編號:面向過程程序設(shè)計實(shí)踐姓名學(xué)號班級軟件工程1502指導(dǎo)教師韓春燕程序?qū)嵺`名稱面向過程程序設(shè)計實(shí)踐開設(shè)學(xué)期2015-2016第二學(xué)期開設(shè)時間第1周——第3周報告日期2016.3.26評定人簽字評定成績評定日期東北大學(xué)軟件學(xué)院#一、程序?qū)嵺`概述1一、程序?qū)嵺`概述1、題目名稱:餐廳信息管理系統(tǒng)2、時間進(jìn)度:2016.3.12至3.27(2、時間進(jìn)度:系統(tǒng)大概構(gòu)思;第二周完成各個函數(shù)的內(nèi)容;第三周檢測系統(tǒng)各項漏洞及不足,完成修補(bǔ)并完成報告)3、開發(fā)環(huán)境:MicrosoftVisualC++6.0(C語言)3、開發(fā)環(huán)境:二、問題分析1、功能說明:(1)就餐系統(tǒng)①餐桌查詢功能,輸入就餐人數(shù),程序自動輸出餐廳所有餐桌情況,包括容量(最①餐桌查詢功能,輸入就餐人數(shù),程序自動輸出餐廳所有餐桌情況,包括容量(最多容納人數(shù))、狀態(tài)(是否有人)和類型(大廳或包廂)。0結(jié)0結(jié)束選擇后,完成訂單的創(chuàng)建。③結(jié)賬功能,請用戶輸入選定的餐桌,口為已點(diǎn)菜餐桌將顯示點(diǎn)菜情況,核對無誤后,進(jìn)入支付頁面,顯示點(diǎn)菜數(shù)和消費(fèi)額,用戶輸入付款金額后,顯示找零,結(jié)束結(jié)賬。④返回上一菜單⑤退出系統(tǒng)2)密碼驗證功能,用戶登錄管理系統(tǒng)時,需輸入密碼驗證,2)密碼驗證功能,用戶登錄管理系統(tǒng)時,需輸入密碼驗證,輸入錯誤三次后自動退出系統(tǒng)。3)管理系統(tǒng)①查看賬目功能,查看餐廳近期消費(fèi)記錄(消費(fèi)金額和消費(fèi)時間)。②菜品歡迎度統(tǒng)計功能,顯示餐廳近期各種菜被點(diǎn)次數(shù),并顯示比較受顧客歡迎的三道菜。③修改密碼功能,用戶輸入新的密碼,修改管理系統(tǒng)驗證密碼。④返回上一菜單⑤退出系統(tǒng)2、解決方案:(1)就餐系統(tǒng)①餐桌查詢功能:調(diào)用search()函數(shù),輸入就餐人數(shù)后①餐桌查詢功能:調(diào)用search()函數(shù),輸入就餐人數(shù)后,用if-elseif-else判斷人數(shù)是否符合餐桌容量要求,若符合,則輸出餐廳所有餐桌的當(dāng)前情況。②點(diǎn)菜功能:保存,然后調(diào)用利用Load_Dish()函數(shù)獲得了菜譜數(shù)據(jù)后,Select。函數(shù)選定餐桌,調(diào)用②點(diǎn)菜功能:保存,然后調(diào)用利用Load_Dish()函數(shù)獲得了菜譜數(shù)據(jù)后,Select。函數(shù)選定餐桌,調(diào)用將菜的信息以結(jié)構(gòu)體的形式Dish_Menu()函數(shù)打印菜譜,接著調(diào)用CreateOne(float)函數(shù)創(chuàng)建一個訂單節(jié)點(diǎn)保存本次點(diǎn)菜所有信息,最后調(diào)用Dish_Order()函數(shù),將新創(chuàng)建的訂單鏈到鏈表表尾。③結(jié)賬功能:先讓客戶輸入自己就餐的餐桌編號,根據(jù)編號查找客戶消費(fèi)的具體情況,并調(diào)用Display。函數(shù)打印客戶點(diǎn)的菜的信息,接著調(diào)用Save_Inform()函數(shù)將訂單信息寫③結(jié)賬功能:先讓客戶輸入自己就餐的餐桌編號,根據(jù)編號查找客戶消費(fèi)的具體情況,并調(diào)用Display。函數(shù)打印客戶點(diǎn)的菜的信息,接著調(diào)用Save_Inform()函數(shù)將訂單信息寫入歷史記錄文本文件中進(jìn)行保存,作為菜品歡迎度統(tǒng)計的基礎(chǔ),然后調(diào)用和saveInList()函數(shù)將客戶消費(fèi)總額和消費(fèi)的具體時間存入名為“賬本”的文件中,作為賬目管理的基礎(chǔ)。④返回上一菜單:調(diào)用Main_Menu()函數(shù)返回主菜單。⑤退出系統(tǒng):使用exit(0)退出。(2)密碼驗證功能:用fopen以讀的形式打開“密碼.txt”文件,再使用fread函數(shù)讀取存儲在一變量中,通過與輸入數(shù)據(jù)對比判斷是否相同。(3)管理系統(tǒng)①查看賬目功能:調(diào)用Observe。函數(shù),用fopen以讀的形式打開“賬本.txt”文件,再使用fscanf讀取文件中數(shù)據(jù)并輸出打印。②菜品歡迎度統(tǒng)計功能:調(diào)用Popularity_Statistics()函數(shù),用fopen以讀的形式打開“歷史紀(jì)錄.txt”文件,使用fscanf讀取文件中數(shù)據(jù),利用for循環(huán)打印出各道菜的點(diǎn)菜情況,再利用嵌套的for循環(huán)和if語句存儲被點(diǎn)次數(shù)最高的三道菜編號,再打印出來。③修改密碼功能:利用ModifyPW()函數(shù),用fopen以寫的形式打開“密碼.txt”文件,再使用fwrite將輸入的新密碼寫入文件。④返回上一菜單:調(diào)用Main_Menu()函數(shù)返回主菜單。⑤退出系統(tǒng):使用exit(0)退出。三、方案設(shè)計1、模塊結(jié)構(gòu):程序由頭文件restaurant.h和源文件main.c、menu.c、restaurant.c、dining.c、management.。構(gòu)成,五個源文件中具體包含的函數(shù)如下所示:源文件函數(shù)原型功能說明main.cmain()總控整個程序menu.cvoidMain_Menu()顯示主菜單,接受用戶選擇的命令代碼voidDining_System()顯示就餐系統(tǒng)菜單,接受用戶選擇的命令代碼voidManagement_System()顯示管理系統(tǒng)菜單,接受用戶選擇的命令代碼restaurant.cvoidEnter()顯示歡迎使用界面voidTable_Init()餐桌信息初始化voidLoad_Dish()從文件中讀取菜譜voidPass_Word()密碼驗證dining.cvoidsearch()顯示所有餐桌狀態(tài)voidSelect()選定餐桌voidDish_Menu()打印顯示菜譜ORDER*CreateOne(int)點(diǎn)菜并創(chuàng)建一個客戶節(jié)點(diǎn),參數(shù)為餐桌編號,返回訂單節(jié)點(diǎn)指針ORDER*Dish_Order(ORDER*,ORDER*)將訂單節(jié)點(diǎn)添加至主鏈,參數(shù)分別為訂單頭指針和客戶節(jié)點(diǎn)指針,返回訂單頭指針ORDER*Payment(ORDER*)客戶結(jié)賬,參數(shù)為訂單頭指針,返回訂單頭指針voidDisplay(int)打印菜信息,參數(shù)為菜的編號voidsavelnList(float)將客戶消費(fèi)金額存入賬目,參數(shù)為消費(fèi)額voidSave_Inform(ORDER*,int)將客戶消費(fèi)金額存入賬目,參數(shù)為消費(fèi)額management.。voidObserve。查看賬目voidPopularity_Statistics()顯示各道菜消費(fèi)情況,并對口進(jìn)行統(tǒng)計排名voidModifyPW()修改登錄管理系統(tǒng)密碼2、數(shù)據(jù)結(jié)構(gòu):1)定義一個結(jié)構(gòu)體用于存儲餐桌信息,具體如下:typedefstructTable{intTable_ID;//餐桌編號intCapacity;//餐桌最多能容納的人數(shù)intTable_State;//1有人在用,0沒人用intTable_Type;//1包廂,2大廳}TABLE;2)定義一個結(jié)構(gòu)體存儲訂單信息,該結(jié)構(gòu)體使用了鏈表,具體如下:typedefstructOrder{intTable_ID;//記錄餐桌號intDish_ID[N];//記錄菜的編號intDish_State[N];//記錄菜的狀態(tài)structOrder*next;}ORDER;3)定義一個結(jié)構(gòu)體來存儲菜的各項信息,具體如下:typedefstructDish{intDish_ID;//菜的編號charDish_Name[10];//菜名floatDish_Price;//價格}DISH;天宇餐廳信息管理系統(tǒng)返回主菜單4、關(guān)鍵算法:創(chuàng)建一份訂單節(jié)點(diǎn)(部分):p=(ORDER*)malloc(sizeof(ORDER));p->Table_ID=result;for(i=0;i<N;i++){fflush(stdin);printf("\t\t\t請輸入口的編號,按0結(jié)束選擇:”);scanf("%d",&p->Dish_ID[i]);if(p->Dish_ID[i]<0||p->Dish_ID[i]>10){printf("\t\t\t超出菜譜范圍,請重新輸入\n");i--;}elseif(p->Dish_ID[i]==0)//為結(jié)賬做準(zhǔn)備break;elsep->Dish_State[i]=0;}if(i==0){printf("\t\t\t您未選擇任何菜,請重新輸入\n");CreateOne(result);}tb[result-1].Table_State=1;p->next=NULL;添加到訂單節(jié)點(diǎn)至主鏈(部分):p1=head;system("cls");if(p1!=NULL){if(p!=NULL){while(p1->next!=NULL){p1=p1->next;//找到鏈表結(jié)尾}p1->next=p;請耐心等待printf("\n\n\n\n\n\n\n\n\t\t訂單創(chuàng)建成功,已提交至后廚,請耐心等待\n");}else{printf("\n\n\n\n\n\n\n\n\t\t\t\t訂單創(chuàng)建失敗\n");exit(0);}}else{

if(head==NULL&&p!=NULL){head=p;printf("\n\n\n\n\n\n\n\n\t\t訂單創(chuàng)建成功,\n");}else{printf("\n\n\n\n\n\n\n\n\t\t\t\t訂單創(chuàng)建失敗\n");exit(0);}}密碼驗證(部分):if((fp=fopen("密碼.txt","r+"))==NULL){printf("\n\n\n\n\n\n\t\t\t密碼文件打開失敗\n"”\t\t管理系統(tǒng)暫時不可使用,口檢查相應(yīng)文件后重新登錄系統(tǒng)"\t\t\t3秒后將返回主菜單\n");Sleep(3000);Main_Menu();}fread(&temp,sizeof(long),1,fp);fclose(fp);printf("\n\n\n\n\n\n\t\t\t\t請輸入密碼\n""\t\t\t(若取消并返回,請輸入0并按Enter)\n\t\t\t\t");scanf("%ld",&password);if(password==0)Main_Menu();if(password==temp){frequency=0;fflush(stdin);Management_System();}else{system("cls");fflush(stdin);frequency++;if(frequency==3){printf("\n\n\n\n\n\n\t\t\t\t密碼錯誤\n""\t\t\t您已3次輸錯密碼,系統(tǒng)3秒后自動退出Sleep(3000);exit(1);}printf("\n\n\n\n\n\n\t\t\t\t密碼錯誤,是否重新輸入\n已提交至后廚,請耐心等待\n"\n");\n\t\t\t\t");"\t\t\tY表示重新輸入,N已提交至后廚,請耐心等待\n"\n");\n\t\t\t\t");again:scanf("%c",&j);if(j=='y'||j=='Y'){fflush(stdin);Pass_Word();}elseif(j=='n'||j=='N'){fflush(stdin);Main_Menu();}else{system("cls");fflush(stdin);printf("\n\n\n\n\n\n\t\t\t\t錯誤的輸入,請重新選擇也\n\t\t\t\t");\n"\t\t\tY表示重新輸入,N表示取消并返回主菜單\n\t\t\t\t");\ngotoagain;}}顯示近期點(diǎn)菜情況(部分):if((fp=fopen("歷史記錄.txt","r"))==NULL){printf("\n\n\n\n\n\t\t\t打開歷史紀(jì)錄文件失敗\n""\t\t該功能暫時無法使用,口檢查相應(yīng)文件后重新登錄系統(tǒng)"\t\t\t3秒后將返回上一菜單\n");Sleep(3000);Management_System();}while(!feof(fp)){fscanf(fp,"%d\n",&n);i=0;while(i!=n){fscanf(fp,"%d%*s%*s",&m,s,s);for(j=0;j<10;j++){if(m==dish[j].Dish_ID){count[j]++;break;}}i++;if(i==n)fscanf(fp,"%*s%*s%*s%*s%*s\n",s,s,s,s,s);}}printf("\n\n\n\t\t\t菜的受歡迎程度如下:\n");for(i=0;i<10;i++){printf("\n\t\t\t%d菜:",i+1);for(j=0;j<count[i];j++)printf("*");}5、界面設(shè)計:1)歡迎的進(jìn)入界面調(diào)用的是自定義Enter()函數(shù),函數(shù)中使用了color和sleep函數(shù),做出了一段簡單的色彩變換動畫,色彩絢麗,吸引眼球。2)主菜單與各分系統(tǒng)菜單與各功能之間緊密連接,多用switch函數(shù),在各功能結(jié)束后自動返回上一級,十分便捷。.就餐系統(tǒng).管理系統(tǒng)M.退出系統(tǒng)請選擇對應(yīng)數(shù)字就饕系統(tǒng).餐桌查詢.點(diǎn)菜M.結(jié)賬.疲向上一菜單.退出系統(tǒng)請選擇對應(yīng)數(shù)字二二m:三京二二.查看賬目.菜品歡迎度統(tǒng)計?.修改密碼.返向上一菜單.退出系統(tǒng)請選擇對應(yīng)數(shù)字四、調(diào)試記錄1)在使用點(diǎn)口功能測試voidSelect。及其調(diào)用的ORDER*CreateOne(int)ORDER*Dish_Order(ORDER*,ORDER*)函數(shù)時,運(yùn)行時出現(xiàn)未知錯誤,在研究中發(fā)現(xiàn)原因為未將head初始化為空指針,調(diào)試該功能花費(fèi)我很長時間,使我加深了對鏈表的了解。2)在測試密碼修改功能即voidModifyPW()函數(shù)時,發(fā)現(xiàn)若想取消修改輸入0返回后,再次進(jìn)入管理系統(tǒng)的時候,輸入原密碼提示不正確。后來在查看“密碼.txt”文件的時候發(fā)現(xiàn)內(nèi)容為空,得出此問題原因為在voidModifyPW()函數(shù)中,以寫的方式打開文件,文件原內(nèi)容清空,后改為先讀取文件中數(shù)據(jù)保存于一變量中,再以寫的方式打開文件,若取消修改,將保存原數(shù)據(jù)的變量寫入文件中。五、創(chuàng)新說明1)密碼驗證功能:通過從保存密碼的文件中讀取數(shù)據(jù),并根據(jù)輸入的密碼進(jìn)行比對,判斷是否正確,若錯誤,可選擇是否繼續(xù)輸入,當(dāng)輸錯次數(shù)達(dá)到3次的時候,系統(tǒng)自動退出。密碼錯誤,是否重新輸入Y表示重新輸入,口表示取消并返回主菜單密碼錯誤您已M次輸錯密碼,系統(tǒng)M秒后自動退出2)餐桌查詢功能:拋棄了原有的系統(tǒng)自動選定餐桌功能,2)餐桌查詢功能:拋棄了原有的系統(tǒng)自動選定餐桌功能,當(dāng)輸入就餐人數(shù)后一旦符合可容納最大人數(shù)時,打印出所有餐桌狀況,供用戶自己選擇。請輸入就餐人數(shù):(若取消查詢并返回,請輸入0并按Enter)101號饕桌容量1,狀態(tài):無人,類型:大廳2號餐桌容量1,狀態(tài):無人,類型:大廳M號餐桌容量2,狀態(tài):無人,類型:大廳4號餐桌容量2,狀態(tài):無人,類型:大廳5號餐桌容量2,狀態(tài):無人,類型:大廳6號饕桌容量&狀態(tài):無人,類型:大廳7號餐桌容量4,狀態(tài):無人,類型:大廳8號饕桌容量4,狀態(tài):無人,類型:大廳9號餐桌容量4,狀態(tài):無人,類型:大廳10號餐桌容量瓦狀態(tài):無人,類型:大廳U號餐桌容量&狀態(tài):無人,類型:包廂12號餐桌容量&狀態(tài):無人,類型:包廂1M號餐桌容量&狀態(tài):無人,類型:包廂14號餐桌容量12,狀態(tài):無人,類型:包廂15號餐桌容量12,狀態(tài):無人,類型:包廂按Enter榛返

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論