




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
課程設計說明書課程名稱數據結構課程設計設計課題模擬旅館管理系統
課程設計任務書設計題目:模擬旅館管理系統的一個功能——床位的分配與回收設計內容與要求:某旅館有n個等級的房間,第I等級有ai個房間,每個等級有bi個床位(1≤i≤n)。試模擬旅館管理系統中床位分配和回收的功能,設計能為單個旅客分配床位,在其離店便回收床位(供下次分配)的算法。[基本要求](1)輸入數據分配時,輸入旅客姓名、年齡、性別、到達日期和所需房間等級。回收時,輸入房間等級、房間號和床位號。(2)輸出數據分配成功時打印旅客姓名、年齡、到達日期、房間等級、房間號碼和床位號碼。分配不成功時,如所有等級均無床位,則打印“客滿”信息;如旅客需要的等級均無空床位,則打印“是否愿意更換等級?”的詢問信息。若旅客愿意更換,則重新輸入有關信息,再進行分配,否則分配工作結束。2014年12月16日課程設計評語成績:指導教師:年月日【問題描述】某旅館有n個等級的房間,第I等級有ai個房間,每個等級有bi個床位(1≤i≤n)。試模擬旅館管理系統中床位分配和回收的功能,設計能為單個旅客分配床位,在其離店便回收床位(供下次分配)的算法。【基本要求】(1)輸入數據分配時,輸入旅客姓名、年齡、性別、到達日期和所需房間等級。回收時,輸入房間等級、房間號和床位號。(2)輸出數據分配成功時打印旅客姓名、年齡、到達日期、房間等級、房間號碼和床位號碼。分配不成功時,如所有等級均無床位,則打印“客滿”信息;如旅客需要的等級均無空床位,則打印“是否愿意更換等級?”的詢問信息。若旅客愿意更換,則重新輸入有關信息,再進行分配,否則分配工作結束。【測試數據】旅客姓名:w性別:男年齡:20入住時間:201534所需等級:1旅客姓名:d性別:男年齡:22入住時間:201512所需等級:2【模塊劃分】本程序主要劃分為四個模塊主函數旅客住房登記旅客退房管理旅客住房查詢旅客住宿統計【算法思想】采用鏈表方式,進行旅店的初始化操作。給旅店的等級設置了頭結點。該程序有三條鏈表,等級構成一條鏈表,房間構成一條鏈表,旅客構成一條鏈表。入住時,先輸入旅客所需的等級,判斷是否有該等級,依次判斷有無房間和床位。有該等級的房間時,采用尾插法判斷是否有空床位,有就進行旅客的入住操作。床位沒有設頭結點,所以第一個床位要進行判斷。退房時,需要輸入等級號、房間號、床位號來進行查找,從而完成退房操作。查詢時,通過輸入旅客的姓名進行查詢,存在此人時,打印客人信息。統計賓館的人數時,先一個等級一個等級的統計,統計這個等級的每一個房間和每個房間當前的所有人數。旅客住宿登記是是下一個房間旅客住宿無法入住輸入所需等級分配客人返回主菜單打印客人信息是否是否有房間是否有床位是是否更換等級否否無法入住是是否有客滿否 旅客退房否否重新輸入是否退房退房成功打印客人信息是否有該房號輸入床位號是否有該床號輸入房間號是否有該等級輸入退房等級旅客退房重新輸入否否是是是是是重新輸入打印客人信息打印客人信息否旅客信息查詢輸入旅客姓名是否有待查找人未找到此人是否有待查等級是否有待查房間是是否否旅客信息統計旅客信息統計統計下一個房間統計人數是等級存在房間人數是否為0房間存在結束否否是是。【數據結構】typedefstructtraver//旅客結構體{charname[20];//姓名intsex;//性別intage;//年齡intg;//旅客住宿的等級intbednum;//床號intyear;intmonth;intday;structtraver*next;//下一個旅客}tra;typedefstructhotel//旅店結構體{intl_num;//旅店等級structhotel*next;//下一個等級structroom*r_next;//指向房間}hotel;typedefstructroom//房間結構體{intr_num;//房間號intmax;//房間的最大床位數intrenshu;//房間當前的人數structroom*next;//下一個房間structtraver*tra_next;//指向旅客}room;【測試情況】房間的初始化。旅客入住登記測試旅客退房測試記錄查詢測試統計測試【心得】這周是我們自己選題做課程設計的的時間,我選的題目是做一個旅店管理系統,對床位進行分配和回收。本程序采用了三個鏈表,剛拿到這個題目時,我覺得很這個應該和學生管理系統差不多,但是,在對床位的分配時,要采用鏈表。剛開始我本來想把房間作為一個數組,將床位構成一個單鏈表。當時,沒有考慮到房間的等級,最后又想了一下,改變了我原來的想法。將房間的等級、房間、旅客各構成一個鏈表,采用鏈表的好處是節約空間,有幾個人就申請多大的空間,不會造成很大的浪費。在編寫代碼的過程中,先對旅館每個等級的每個房間進行初始化,旅客的住宿這個函數對于我是最難的,因為要先判斷旅客所需等級的房間存不存在,存在時,要判斷這個房間有沒有空床位,沒有空床位時,鏈表的指針指向下一個房間。如果沒有這個等級的房間時,征詢旅客是否要更換房間等級。在他同意更換的情況下,再重復上述過程進行登記。給旅客進行床位分配時,是按照床位號的大小順序依次分配的。如果這個房間的所有床位都住滿的話,再給同等級的另一間房間進行分配。在寫退房的函數時,要輸入等級、房間號、床位號,找到相應的旅客打印旅客信息確認正確再進行退房操作。統計住宿的人數時,統計同等級的每一個房間的所有旅客。旅客的鏈表不空時,計數器就加加。進行編程的時候,一定要先清楚自己的思路,比如我寫的住宿函數,要入住就必須先判斷有沒有空房間和空床位,有的話才能進行分配。該程序的鏈表比較多,自己寫的時候,一個一個子函數寫,寫完調試好了再進行下一個函數的編寫。定義了三個結構體,一定要清楚每個結構體中所包含的量,切不可混淆。編寫時if和else語句比較多,要清楚哪個與哪個對應,每個循環結束的條件。調試代碼的時候有時就是一個很小的錯導致整個程序不能運行,每當程序錯誤時我都非常焦躁,甚至想到了放棄,但我最終還是一步一步慢慢來,經過無數次的檢查程序錯誤的原因后慢慢懂得了耐心是一個人成功的必然具備的條件!同時,通過此次課程設計使我了解到數據結構可以說是計算機里一門基礎課程,它需要把理論變為上機調試,所以一定要把基礎知識學扎實。雖然我現在還不會成功的編寫一個完整的程序,但是在看程序的過程中,不斷的上網查資料以及翻閱相關書籍,通過不斷的模索,測試,發現問題,解決問題和在老師的幫助下一步一步慢慢的正確運行程序。在本課程設計中,我明白了理論與實際應用相結合的重要性,并提高了自己組織數據及編寫大型程序的能力。培養了基本的、良好的程序設計技能以及合作能力。這次課程設計同樣提高了我的綜合運用所學知識的能力。并對VC有了更深入的了解。《數據結構》是一門實踐性很強的課程,上機實習是對學生全面綜合素質進行訓練的一種最基本的方法,是與課堂聽講、自學和練習相輔相成的、必不可少的一個教學環節。上機實習一方面能使書本上的知識變“活”,起到深化理解和靈活掌握教學內容的目的;另一方面,上機實習是對學生軟件設計的綜合能力的訓練,包括問題分析,總體結構設計,程序設計基本技能和技巧的訓練。此外,還有更重要的一點是:機器是比任何教師更嚴厲的檢查者。因此,在“數據結構”的學習過程中,必須嚴格按照老師的要求,主動地、積極地、認真地做好每一個實驗,以不斷提高自己的編程能力與專業素質。【源程序】#include<stdio.h>#include<string.h>#include<malloc.h>#include<stdlib.h>typedefstructtraver//旅客結構體{charname[20];//姓名intsex;//性別intage;//年齡intg;//旅客住宿的等級intbednum;//床號intyear;intmonth;intday;structtraver*next;//下一個旅客}tra;typedefstructhotel//旅店結構體{intl_num;//旅店等級structhotel*next;//下一個等級structroom*r_next;//指向房間}hotel;typedefstructroom//房間結構體{intr_num;//房間號intmax;//房間的最大床位數intrenshu;//房間當前的人數structroom*next;//下一個房間structtraver*tra_next;//指向旅客}room;voidmenu_select()//菜單函數{printf("************旅客管理查詢系統************\n");//菜單選擇printf("1.進行訂房登記服務\n");printf("2.進行退房結賬服務\n");printf("3.查詢旅客信息\n");printf("4.統計旅客信息\n");printf("****************************************\n");}voidInit(hotel*L)//旅店等級設置頭結點{inti,j,k,n;//k床位數,j房間等級,n房間個數hotel*p,*q;room*p1,*p2,*p3;printf("請輸入房間等級:\n");scanf("%d",&j);q=L;for(i=1;i<=j;i++)//初始化房間的等級{p=(hotel*)malloc(sizeof(hotel));q->next=p;p->l_num=i;//房間等級賦值printf("請輸入房間等級為%d的房間個數:\n",p->l_num);scanf("%d",&n);//輸入該等級的房間數if(n==0)//不存在該等級的房間數時continue;else{//初始化床位p2=(room*)malloc(sizeof(room));//為該等級的房間申請空間p2->r_num=1;printf("請輸入房間等級為%d的房間號為1的床位數:\n",p->l_num,k);scanf("%d",&(p2->max));//房號為l的床位數p2->renshu=0;//房間當前人數為0p->r_next=p2;//指向該等級的下一個房間p3=p2;for(k=2;k<=n;k++)//房間號為2的房間信息初始化{p1=(room*)malloc(sizeof(room));p3->next=p1;p1->r_num=k;printf("請輸入房間等級為%d的房間號為%d的床位數:\n",p->l_num,k);scanf("%d",&(p1->max));p1->renshu=0;p3=p1;}p3->next=NULL;}//房間鏈表尾指針為空q=q->next;}//指向下一個等級q->next=NULL;//等級鏈表尾指針為空system("cls");}intfull(hotel*L)//判斷客滿{hotel*l;l=L->next;room*t;while(l!=NULL){t=l->r_next;//指向房間while(t!=NULL){if(t->renshu!=t->max)return0;elset=t->next;}//指向下一個房間l=l->next;}if(!l)return1;}voidprint(tra*s,room*p){printf("輸出旅客信息:\n");printf("姓名%s,性別%d,年齡%d,房間等級%d,房間號碼%d,床號%d,入住時間%d,%d,%d\n",s->name,s->sex,s->age,s->g,p->r_num,s->bednum,s->year,s->month,s->day);}voidzhusu(hotel*L){tra*q1,*q2,*q3;charc;hotel*l;l=L->next;room*t;inti,g;if(full(L)){printf("客滿,不能入住!\n");}else{printf("請輸入房間等級\n");//輸入旅客所需要的等級scanf("%d",&g);while(g!=NULL)//等級不空時{if(l->l_num!=g)l=l->next;else{t=l->r_next;//有該等級時while(t!=NULL)//房間不空{if(t->renshu==t->max)//*是否有空床位{t=t->next;//指向下一個房間if(t==NULL){getchar();printf("等級為的所有房間均無空位\n是否愿意更換等級[y/n]",g);scanf("%c",&c);//是否更換等級if(c=='y')zhusu(L);elsereturn;}}else//進行旅客登記{if(t->renshu==0)//床位沒有設置頭結點,所以要進行判斷{q1=(tra*)malloc(sizeof(tra));printf("請輸客人姓名\n");scanf("%s",q1->name);printf("請輸入性別:1為男,0為女\n");scanf("%d",&(q1->sex));printf("請輸客人年齡\n");scanf("%d",&(q1->age));printf("請輸入旅客入住時間(如19901213):");scanf("%d%d%d",&q1->year,&q1->month,&q1->day);q1->g=g;//修改指針t->tra_next=q1;//t->renshu++;//房間人數加1q1->bednum=1;q1->next=NULL;//尾指針為空print(q1,t);break;}else{q2=t->tra_next;q3=q2;i=1;for(;q3!=NULL;q3=q3->next){if(i==q3->bednum){++i;q3=q2;}}for(;q2->next!=NULL;q2=q2->next);q1=(tra*)malloc(sizeof(tra)); printf("請輸入旅客姓名:\n"); q1=(tra*)malloc(sizeof(tra));printf("請輸客人姓名\n");scanf("%s",q1->name);printf("請輸入性別:1為男,0為女\n");scanf("%d",&(q1->sex));printf("請輸客人年齡\n");scanf("%d",&(q1->age));printf("請輸入旅客入住時間:");scanf("%d%d%d",&q1->year,&q1->month,&q1->day);q1->g=g;q2->next=q1;q1->next=NULL;t->renshu++;q1->bednum=i;print(q1,t);break;}}}system("cls");break;}}}} tra*tuifang(hotel*L){intg,hotel_num,bednum;hotel*l;l=L->next;room*t;tra*p,*q;charc;printf("請輸入該退房人房間的等級號碼:\n");scanf("%d",&g);//輸入退房人的房間等級getchar();while(l!=NULL){if(l->l_num!=g)l=l->next;else//找到該等級{t=l->r_next;printf("請輸入該退房人房間的房間號碼:\n");scanf("%d",&hotel_num);//輸入退房人的房間號碼getchar();while(t!=NULL){if(t->r_num!=hotel_num)t=t->next;else//找到該房間{p=t->tra_next;q=t->tra_next;printf("請輸入該退房人的床位號碼:\n");scanf("%d",&bednum);//輸入退房人的床位號碼getchar();while(q!=NULL){if(q->bednum!=bednum)q=q->next;else//查找該床位{if(bednum==p->bednum)//因為床位沒有設置頭結點,所以對于第一個結點要特別判斷{//直接打印旅客信息printf("等級、房間、床位旅客的信息為:\n");printf("姓名\t性別\t年齡\t入住時間\n");printf("%s\t%d\t%d\t%d-%d-%d\n",q->name,q->sex,q->age,q->year,q->month,q->day);printf("是否與要退房人信息相符?[y/n]\n");scanf("%c",&c);if(c=='y')//做出是否退房的選擇{t->tra_next=q->next;t->renshu--;printf("退房成功!\n");return(q);}elsereturnNULL;}else//如果床位不為1{while(p->next!=q)//指向下一床位p=p->next;//打印旅客信息printf("等級、房間、床位旅客的信息為:\n");printf("該名顧客的信息:\n");printf("姓名\t性別\t年齡\t入住時間\n");printf("%s\t%d\t%d\t%d-%d-%d\n",q->name,q->sex,q->age,q->year,q->month,q->day);printf("是否與要退房人信息相符?[y/n]\n");scanf("%c",&c);if(c=='y')//做出是否退房的選擇{p->next=q->next;t->renshu--;printf("退房成功!\n");return(q);}elsereturnNULL;}}}if(q==NULL)//如果該房間內床位為空{printf("未找到該床位號!\n");}}}if(t==NULL)//如果該等級的房間為空{printf("未找到該房間號!\n");}}}if(l==NULL)//如果等級鏈表為空{printf("未找到該房間等級!\n");}}voidchaxun(hotel*L)//查詢旅客信息函數{charc[15];hotel*l;room*t;tra*s;intflag=0;//設置標志量printf("請輸入要查詢的旅客姓名:\n");scanf("%s",c);getchar();l=L->next;while(l!=NULL)//等級不為空時,指向房間{t=l->r_next;while(t!=NULL)//房間不為空時,指向床位{if(t->renshu==0)//若此房間當前人數為零,指向下一房間t=t->next;else{s=t->tra_next;while(s!=NULL){if(!strcmp(s->name,c))//如果找到該旅客{print(s,t);//打印信息s=s->next;//指向下一人,繼續查找flag++;//標志量加1}elses=s->next;}t=t->next;//指向下
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年注冊會計師職場挑戰及試題及答案
- 2025年證券業務合規管理考題及答案
- 注會內部控制體系試題及答案
- 職業生涯與微生物檢驗實踐試題及答案
- 細胞培養技術在檢驗中的重要性試題及答案
- 課程建設課題申報書
- 2025年證券從業資格證多元學習試題及答案
- 注冊會計師各科目交叉復習技巧試題及答案
- 保安工作總結計劃護理行業保安工作的安全護理
- 2025年證券從業資格證考試策略總結試題及答案
- 江蘇省建筑與裝飾工程計價定額(2014)電子表格版
- 2023年陜西高考理科數學試題
- 巧克力糖包裝機機械原理課程設計
- 《空氣動力學與飛行原理》空氣動力學-課件
- 廣東省佛山市各縣區鄉鎮行政村村莊村名明細
- 杭氧膨脹機課件
- 發電車保電作業流程
- 土壤有機質課件
- WNS系列蒸汽鍋爐使用說明書
- 砂石篩校驗方法
- 點亮小燈泡說課稿(課堂PPT)
評論
0/150
提交評論