數據結構課程設計報告書_第1頁
數據結構課程設計報告書_第2頁
數據結構課程設計報告書_第3頁
數據結構課程設計報告書_第4頁
數據結構課程設計報告書_第5頁
已閱讀5頁,還剩21頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、課程設計說明書課程名稱數據結構課程設計設計課題模擬旅館管理系統課 程設計 任務書設計題目:模擬旅館管理系統的一個功能一一床位的分配與回收設計內容與要求:某旅館有n個等級的房間,第I等級有a個房間,每個等級有bi個床位(1<i <n)。試模擬旅館管理系統中床位分配和回收的功能,設計能為單個旅客分配床 位,在其離店便回收床位(供下次分配)的算法。基本要求(1)輸入數據分配時,輸入旅客姓名、年齡、性別、到達日期和所需房間等級。回收時,輸入房間等級、房問號和床位號。(2)輸出數據分配成功時打印旅客姓名、年齡、到達日期、房間等級、房間號碼和床位號碼。分配不成功時,如所有等級均無床位,則打印“

2、客滿”信息;如旅客需要的等 級均無空床位,則打印“是否愿意更換等級?”的詢問信息。若旅客愿意更換,則 重新輸入有關信息,再進行分配,否則分配工作結束。2014 年12月16日課程設計評語成績:指導教師:年 月 日【問題描述】某旅館有n個等級的房間,第I等級有a個房間,每個等級有bi個床位(1<i <n)。試模擬旅館管理系統中床位分配和回收的功能,設計能為單個旅客分 配床位,在其離店便回收床位(供下次分配)的算法。【基本要求】(1)輸入數據分配時,輸入旅客姓名、年齡、性別、到達日期和所需房間等級。回收時,輸入房間等級、房問號和床位號。(2)輸出數據分配成功時打印旅客姓名、年齡、到達日

3、期、房間等級、房間號碼和床位號碼。分配不成功時,如所有等級均無床位,則打印“客滿”信息;如旅客需要的 等級均無空床位,則打印“是否愿意更換等級?”的詢問信息。若旅客愿意更換, 則重新輸入有關信息,再進行分配,否則分配工作結束。【測試數據】旅客姓名:w性別:男 年齡:20入住時間:2015 3 4所需等級:1旅客姓名:d性別:男 年齡:22入住時間:2015 1 2所需等級:2【模塊劃分】本程序主要劃分為四個模塊【算法思想】采用鏈表方式,進行旅店的初始化操作。給旅店的等級設置了頭結點。該程 序有三條鏈表,等級構成一條鏈表,房間構成一條鏈表,旅客構成一條鏈表。入 住時,先輸入旅客所需的等級,判斷是

4、否有該等級,依次判斷有無房間和床位。 有該等級的房間時,采用尾插法判斷是否有空床位,有就進行旅客的入住操作。 床位沒有設頭結點,所以第一個床位要進行判斷。退房時,需要輸入等級號、房 問號、床位號來進行查找,從而完成退房操作。查詢時,通過輸入旅客的姓名進 行查詢,存在此人時,打印客人信息。統計賓館的人數時,先一個等級一個等級 的統計,統計這個等級的每一個房間和每個房間當前的所有人數。旅客住宿登記旅客住宿是是否有客滿無法入住“否,V否是否更換等否無法入住是否有房間是1否人是否有床位 二一下一個房間是a1,分配客人打印客人信息返回主菜單Ljl輸入所旅客退房旅客退房是打印客人信息是否退房旅客信息查詢否

5、-4未找到此人打印客人信息【數據結構】typedef struct traver/旅客結構體char name20;/ 姓名 int sex; 性別int age; /年齡int g;/旅客住宿的等級int bednum;/ 床號int year;int month;int day;struct traver*next;/ 下一個旅客 tra;typedef struct hotel/旅店結構體int l_num;旅店等級struct hotel*next;/下一個等級struct room*r_next;/指向房間hotel;typedef struct room/ 房間結構體int r_n

6、um;/ 房問號int max;/ 房間的最大床位數int renshu;/房間當前的人數struct room*next;/下一個房間struct traver*tra_next;/ 指向旅客 room;【測試情況】 房間的初始化。r'CAUsersY su sDe &ktopD e b ugk l.exeT靖輸入房間等級;請輸入房間等級為工的房間個數:,輸入房間等級為1的房間號為1的床位數.£輸入房間等級為1的房間號為史的床位數; 輸i入房間等級為2的房間個數.手輸入房間等級為2的房間號為1的床位數; 褊入房間等級為Z的房間號為Z的床位數;旅客入住登記測試CU 三

7、曰 rsa £ii sD e sktopD ebugk l.exeT:統"nhxxkhmhyml更官務務 答服服記 1013息 一-房房客客 -S1 7tzu計 -進進查統取霸爨知請輸客人姓名請輸入性別:L為男,修為女請輸入旅客入住時間如皿9舊12 i3> = 2015 1 2旅客退房測試記錄回"C;Usersa5U5De5ktopDebugkl,eKe,H一豆一 If魯信片 f房房客客f進進查統*12 3 4充石*-系有理f務務 客服服 游記普心息請輸入處理種類”-外二包丁退房靖床卑務:請輸入該退房式房間的等級號碼工 工輸入該退房人房間的房間號碼;4輸入該

8、退房人的床位號碼; h房為床位驪歿稿間 w12015-3-4昌否與要退房人信息相符? “.】 假房成功!查詢測試統計測試【心得】這周是我們自己選題做課程設計的的時間,我選的題目是做一個旅店管理系 統,對床位進行分配和回收。本程序采用了三個鏈表,剛拿到這個題目時,我覺 得很這個應該和學生管理系統差不多,但是,在對床位的分配時,要采用鏈表。 剛開始我本來想把房間作為一個數組,將床位構成一個單鏈表。當時,沒有考慮 到房間的等級,最后又想了一下,改變了我原來的想法。將房間的等級、房間、 旅客各構成一個鏈表,采用鏈表的好處是節約空間,有幾個人就申請多大的空間, 不會造成很大的浪費。在編寫代碼的過程中,先

9、對旅館每個等級的每個房間進行 初始化,旅客的住宿這個函數對于我是最難的,因為要先判斷旅客所需等級的房 間存不存在,存在時,要判斷這個房間有沒有空床位,沒有空床位時,鏈表的指 針指向下一個房間。如果沒有這個等級的房間時,征詢旅客是否要更換房間等級。 在他同意更換的情況下,再重復上述過程進行登記。給旅客進行床位分配時,是 按照床位號的大小順序依次分配的。如果這個房間的所有床位都住滿的話,再給 同等級的另一間房間進行分配。在寫退房的函數時,要輸入等級、房問號、床位 號,找到相應的旅客打印旅客信息確認正確再進行退房操作。統計住宿的人數時,統計同等級的每一個房間的所有旅客。旅客的鏈表不空時,計數器就加加

10、。進行編程的時候,一定要先清楚自己的思路,比如我寫的住宿函數,要入住 就必須先判斷有沒有空房間和空床位,有的話才能進行分配。該程序的鏈表比較 多,自己寫的時候,一個一個子函數寫,寫完調試好了再進行下一個函數的編寫。 定義了三個結構體,一定要清楚每個結構體中所包含的量,切不可混淆。編寫時 if和else語句比較多,要清楚哪個與哪個對應,每個循環結束的條件。調試代 碼的時候有時就是一個很小的錯導致整個程序不能運行,每當程序錯誤時我都非 常焦躁,甚至想到了放棄,但我最終還是一步一步慢慢來,經過無數次的檢查程 序錯誤的原因后慢慢懂得了耐心是一個人成功的必然具備的條件!同時,通過此 次課程設計使我了解到

11、數據結構可以說是計算機里一門基礎課程,它需要把理論變為上機調試,所以一定要把基礎知識學扎實。雖然我現在還不會成功的編寫一 個完整的程序,但是在看程序的過程中,不斷的上網查資料以及翻閱相關書籍, 通過不斷的模索,測試,發現問題,解決問題和在老師的幫助下一步一步慢慢的 正確運行程序。在本課程設計中,我明白了理論與實際應用相結合的重要性,并提高了自己 組織數據及編寫大型程序的能力。培養了基本的、良好的程序設計技能以及合作 能力。這次課程設計同樣提高了我的綜合運用所學知識的能力。并對VC有了更深入的了解。數據結構是一門實踐性很強的課程,上機實習是對學生全面綜合素 質進行訓練的一種最基本的方法,是與課堂

12、聽講、自學和練習相輔相成的、必不 可少的一個教學環節。上機實習一方面能使書本上的知識變“活”,起到深化理解 和靈活掌握教學內容的目的;另一方面,上機實習是對學生軟件設計的綜合能力的 訓練,包括問題分析,總體結構設計,程序設計基本技能和技巧的訓練。止匕外, 還有更重要的一點是:機器是比任何教師更嚴厲的檢查者。因此,在“數據結構” 的學習過程中,必須嚴格按照老師的要求,主動地、積極地、認真地做好每一個 實驗,以不斷提高自己的編程能力與專業素質。【源程序】#include <stdio.h>#include <string.h>#include <malloc.h>

13、;#include <stdlib.h>typedef struct traver旅客結構體char name20;/ 姓名int sex; 性別int age; /年齡int g;/ 旅客住宿的等級int bednum;/ 床號int year;int month;int day;struct traver*next;/下一個旅客tra;typedef struct hotel/旅店結構體int l_num;/ 旅店等級struct hotel*next;/下一個等級struct room*r_next;/ 指向房間hotel;typedef struct room/房間結構體i

14、nt r_num;房間號int max;/ 房間的最大床位數int renshu;/ 房間當前的人數struct room*next;/下一個房間struct traver*tra_next;/ 指向旅客room;void menu_select()/ 菜單函數printf(”*旅客管理查詢系統 *n"); / 菜單選擇printf("1.進行訂房登記服務n");printf("2.進行退房結賬服務n");printf("3.查詢旅客信息n");printf("4.統計旅客信息n");printf(”*n

15、");void Init(hotel*L)/ 旅店等級設置頭結點int i,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-&g

16、t;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;/ 指

17、向該等級的下一個房間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;/ 等級鏈表尾

18、指針為空 system("cls");int full(hotel*L)/ 判斷客滿hotel*l;l=L->next;room *t;while(l!=NULL)t=l->r_next;/ 指向房間while(t!=NULL)if(t->renshu!=t->max)return 0;else t=t->next;/ 指向下一個房間l=l->next;if(!l)return 1;void print(tra*s,room*p)printf(" 輸出旅客信息: n");printf(" 姓 名 %s, 性

19、別 %d, 年 齡 %d, 房 間 等 級 %d, 房 間 號 碼 %d, 床 號 %d, 入 住 時間 %d,%d,%dn",s->name,s->sex,s->age,s->g,p->r_num,s->bednum,s->year,s->month,s->day);void zhusu(hotel*L)tra *q1,*q2,*q3;char c;hotel*l;l=L->next;room *t;int i,g;if(full(L)printf(" 客滿,不能入住! n"); elseprintf(

20、" 請輸入房間等級n");/ 輸入旅客所需要的等級等級不空時有該等級時房間不空scanf("%d",&g); while(g!=NULL)/ if(l->l_num!=g) l=l->next;elset=l->r_next;/ while(t!=NULL)/是否有空床位if(t->renshu=t->max)/* t=t->next;/ 指向下一個房間if(t=NULL)getchar();printf(" 等級為的所有房間均無空位n 是否愿意更換等級 y/n",g);scanf(&quo

21、t;%c",&c);/ 是否更換等級if(c='y')zhusu(L);else return;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("請輸客人

22、年齡n");scanf("%d",&(q1->age);printf(" 請輸入旅客入住時間 (如 1990 12 13):");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;elseq2=

23、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 為

24、女 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=

25、i;print(q1,t);break; system("cls");break; tra*tuifang(hotel*L)int g,hotel_num,bednum;hotel*l;l=L->next;room *t;tra*p,*q;char c;printf(" 請輸入該退房人房間的等級號碼: n");scanf("%d",&g); / 輸入退房人的房間等級getchar();while(l!=NULL) if(l->l_num!=g) l=l->next;else/ t=l->r_next;p

26、rintf(" 請輸入該退房人房間的房間號碼: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(" 請輸入該退房人的床位號碼:scanf("%d",&bednum);/getchar();while(q!=NULL) if(q->bednum!=bednum) q=q->next;else/i

27、f(bednum=p->bednum) /特別判斷找到該等級n");/輸入退房人的房間號碼n");輸入退房人的床位號碼查找該床位因為床位沒有設置頭結點,所以對于第一個結點要找到該房間/直接打印旅客信息printf(" 等級、房間、床位旅客的信息為: n");printf(" 姓名 t 性別 t 年齡 t 入住時間 n");printf("%st%dt%dt%d-%d-%dn",q->name,q->sex,q->age,q->year,q->month,q->day);pr

28、intf(" 是否與要退房人信息相符? y/nn");scanf("%c",&c);if(c='y')/ t->tra_next=q->next;t->renshu-;printf(" 退房成功! n");return(q); elsereturn NULL; else/while(p->next!=q) /p=p->next;/做出是否退房的選擇如果床位不為 1指向下一床位打印旅客信息printf(" 等級、房間、床位旅客的信息為: n");printf(&q

29、uot; 該名顧客的信息:n");printf(" 姓名 t 性別 t 年齡 t 入住時間 n");printf("%st%dt%dt%d-%d-%dn",q->name,q->sex,q->age,q->year,q->month,q->day);printf(" 是否與要退房人信息相符? y/nn");scanf("%c",&c);if(c='y')/做出是否退房的選擇p->next=q->next;t->renshu-;p

30、rintf(" 退房成功! n");return(q);elsereturn NULL; if(q=NULL)/ printf("未找到該床位號!n"); if(t=NULL)/ printf("未找到該房間號!n"); if(l=NULL)/ printf(" 未找到該房間等級!n"); void chaxun(hotel *L) / 查詢旅客信息函數 char c15;hotel *l;room *t;tra *s;int flag=0;/ 設置標志量printf(" 請輸入要查詢的旅客姓名: n&q

31、uot;);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+;/elses=s->next;t=t->next;

溫馨提示

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

評論

0/150

提交評論