數(shù)據(jù)結(jié)構(gòu)旅店管理系統(tǒng)課程設(shè)計報告_第1頁
數(shù)據(jù)結(jié)構(gòu)旅店管理系統(tǒng)課程設(shè)計報告_第2頁
數(shù)據(jù)結(jié)構(gòu)旅店管理系統(tǒng)課程設(shè)計報告_第3頁
數(shù)據(jù)結(jié)構(gòu)旅店管理系統(tǒng)課程設(shè)計報告_第4頁
數(shù)據(jù)結(jié)構(gòu)旅店管理系統(tǒng)課程設(shè)計報告_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上課 程 設(shè) 計 報 告 課程名稱 數(shù)據(jù)結(jié)構(gòu) 設(shè)計題目 旅店管理系統(tǒng)床位的分配與回收 專 業(yè) 計算機與信息工程系 班 級 學 號 姓 名 完成日期 2012年6月8日 課 程 設(shè) 計 任 務(wù) 書設(shè)計題目: 模擬旅館管理系統(tǒng)的一個功能床位的分配與回收 _設(shè)計內(nèi)容與要求:1.【問題描述】某旅館有n個等級的房間,第I等級有ai個房間,每個等級有bi個床位(1in)。試模擬旅館管理系統(tǒng)中床位分配和回收的功能,設(shè)計能為單個旅客分配床位,在其離店便回收床位(供下次分配)的算法。2.【基本要求】(1)輸入數(shù)據(jù)分配時,輸入旅客姓名、年齡、性別、到達日期和所需房間等級?;厥諘r,輸入房間等

2、級、房間號和床位號。(2)輸出數(shù)據(jù)分配成功時打印旅客姓名、年齡、到達日期、房間等級、房間號碼和床位號碼。分配不成功時,如所有等級均無床位,則打印“客滿”信息;如旅客需要的等級均無空床位,則打印“是否愿意更換等級?”的詢問信息。若旅客愿意更換,則重新輸入有關(guān)信息,再進行分配,否則分配工作結(jié)束。 指導教師: 2012年 6月 8日課 程 設(shè) 計 評 語 成績: 指導教師:_ 年 月 日3. 數(shù)據(jù)結(jié)構(gòu)本次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計,做的是旅店管理系統(tǒng),定義了三個結(jié)構(gòu)體鏈表,給等級鏈表設(shè)置了一個頭結(jié)點,采用鏈表嵌套方法,等級鏈表嵌套房間鏈表,房間鏈表再嵌套旅客鏈表。(1)對旅客結(jié)構(gòu)體定義typedef stru

3、ct customer char name15; /旅客姓名int age; /旅客年齡int sex; /旅客性別 int lv; /旅客住宿時的等級號 int bed_num; /旅客的床位號int year; /開始住宿日期:年 int month; /開始住宿日期:月int day; /開始住宿日期:日struct customer* next; /指向下一旅客cus;(2)對旅店結(jié)構(gòu)體定義typedef struct hotel_lv int lv_num; /旅店等級號struct hotel_lv *next; /指向下一等級struct fangjian *fj_next; /

4、指向房間hotel_lv;(3)房間結(jié)構(gòu)體定義typedef struct fangjian int fj_num; /房間號int max; /房間的最大床位數(shù)目int mem_num; /房間內(nèi)的當前人數(shù)struct fangjian *next; /指向下一房間struct customer *cus_next; /指向旅客fangjian;4. 總體設(shè)計(1) 主函數(shù)初始化旅店main主函數(shù)旅 客 入 住 事 件旅客住宿情況查詢旅 客 退 房 事 件 統(tǒng)計旅店當前住宿人數(shù)退 出 管 理 系 統(tǒng)(2) 有旅客來住宿時:否否是打印旅客信息姓名性別年齡開始入住時間分配房間成功打印房間分配表是

5、重新輸入旅客入住事件是否有空床位輸入所需房間等級是否客滿無法入住返回主菜單(3) 有旅客來退房時:是打印旅客信息姓名性別年齡開始入住時間是重新輸入否重新輸入否是重新輸入否是否是否退房是否有該房間是否有該床位是否有該等級輸入要退房的房間等級輸入房間號輸入床位號旅客退房事件返回主菜單退房成功(4)查詢旅客信息時:打印旅客信息姓名性別年齡開始入住時間是否返回主菜單遍歷各房間不為空是不為空是輸入要查詢旅客的姓名遍歷各等級遍歷各床位不為空是否有待查找人旅客信息查詢 (5)統(tǒng)計旅店當前入住人數(shù):遍歷各房間不為空是不為空是遍歷各等級遍歷各床位不為空計數(shù)器count+統(tǒng)計旅店當前入住人數(shù)打印信息返回主菜單(5

6、)各函數(shù)名初始化函數(shù):void Init(hotel_lv *L) 判斷是否客滿:int full(hotel_lv *L)打印旅客信息:void Pr_divide(cus* p,fangjian* q )旅客住宿函數(shù):void Pr_divide(cus* p,fangjian* q )旅客退房函數(shù):cus* Delete(hotel_lv *L)查詢旅客信息:void cx_customer(hotel_lv *L)統(tǒng)計旅店當前入住人數(shù):void Tongji_cus(hotel_lv *L)主函數(shù):void main()5. 詳細設(shè)計關(guān)鍵步驟設(shè)計(1) 初始化旅店函數(shù)采用鏈表方式,進行

7、旅店的初始化操作,給旅店等級設(shè)置了頭結(jié)點。輸入房間等級,每個等級的房間數(shù)目,每個房間的床位數(shù)目。void Init(hotel_lv *L) /初始化 int i,j,k,l;hotel_lv *p,*q; fangjian *p1,*p2,*p3;printf("請輸入房間分為幾個等級:n"); scanf("%d",&j); /輸入房間共分為幾個等級q=L;for(i=1;i<=j;i+)/初始化該等級的房間p=(hotel_lv*)malloc(sizeof(hotel_lv);q->next=p;p->lv_num=i;

8、 /給房間等級賦值printf("請輸入房間等級為%d的房間個數(shù):n",p->lv_num); scanf("%d",&l); /輸入該等級的房間數(shù)目if(l=0)continue;else /初始化該房間內(nèi)的床位p2=(fangjian*)malloc(sizeof(fangjian);p2->fj_num=1;printf("請輸入房間等級為%d房間號為1的床位個數(shù)的最大值:n",p->lv_num,k);scanf("%d",&(p2->max); /輸入房間1的床位數(shù)

9、目p2->mem_num=0; /該房間內(nèi)當前人數(shù)賦為零 p->fj_next=p2; p3=p2; for(k=2;k<=l;k+) p1=(fangjian*)malloc(sizeof(fangjian); p3->next=p1; p1->fj_num=k; printf("請輸入房間等級為%d房間號為%d的床位個數(shù)的最大值:n",p->lv_num,k); scanf("%d",&(p1->max); /輸入房間k的床位數(shù)目 p1->mem_num=0; /該房間內(nèi)的當前人數(shù)賦為零 p3=

10、p1;p3->next=NULL; /房間鏈表尾指針賦為空q=q->next; q->next=NULL; /等級鏈表尾指針域賦為空(2)旅客住宿情況采用尾插法,判斷是否有空床位,有就進行旅客的入住操作。void input(hotel_lv *L)char c;cus *s,*p2,*p3;hotel_lv *l;l=L->next; fangjian *p1;int i,lv;if(full(L) /判斷是否旅店客滿printf(" 旅店客滿,不能入住。n");system("pause");elseprintf("

11、請輸入旅客所需的房間等級:"); /輸入旅客所需的等級 scanf("%d",&lv); while(l!=NULL) /等級不為空時 if(l->lv_num!=lv) l=l->next; else /有此等級時p1=l->fj_next; while(p1!=NULL) /房間不為空 if(p1->mem_num=p1->max) /是否有空床位p1=p1->next;if(p1=NULL)getchar(); printf("此等級為%d的所有房間均無空位n是否愿意更換等級y/n",lv);

12、scanf("%c",&c); /做出選擇 if(c='y')input(L);elsereturn ;else /進行旅客登記 /因為床位沒有設(shè)置頭結(jié)點,所以對于第一個結(jié)點要特別判斷if(p1->mem_num=0)s=(cus*)malloc(sizeof(cus);printf("n-n");printf("n 旅客的信息: ");printf("n 請輸入旅客姓名:");scanf("%s",s->name);printf("n 請輸入旅客年

13、齡:");scanf("%d",&(s->age);printf("n 請輸入旅客性別(如:男1:女0):");scanf("%d",&(s->sex);printf("n 請輸入旅客住宿開始日期(如:1991 10 21):");scanf("%d %d %d",&s->year,&s->month,&s->day);s->lv=lv; /修改指針p1->cus_next=s;p1->mem_nu

14、m+; /房間當前人數(shù)加1s->bed_num=1;s->next=NULL; /尾指針置為空Pr_divide(s,p1); /打印房間分配表system("cls"); break;elsep2=p1->cus_next;p3=p2;i=1;while(i<=p1->mem_num)if(i=p3->bed_num)p3=p3->next;i+;elsei+;break;if(p3=NULL)s=(cus*)malloc(sizeof(cus); printf("n-n"); printf("n 旅

15、客的信息: "); printf("n 請輸入旅客姓名:"); scanf("%s",s->name); printf("n 請輸入旅客年齡:"); scanf("%d",&s->age); printf("n 請輸入旅客性別(如:男1:女0):"); scanf("%d",&s->sex); printf("n 請輸入旅客住宿開始日期(如:1991 10 21):"); scanf("%d %d %d

16、",&s->year,&s->month,&s->day); s->lv=lv; while(p2->next!=p3)p2=p2->next;p2->next=s;p1->mem_num+;s->bed_num=i;s->next=NULL;Pr_divide(s,p1);system("cls"); break;elsewhile(p2->bed_num=i)p2=p2->next;s=(cus*)malloc(sizeof(cus);printf("n-

17、n");printf("n 旅客的信息: ");printf("n 請輸入旅客姓名:");scanf("%s",s->name);printf("n 請輸入旅客年齡:");scanf("%d",&s->age);printf("n 請輸入旅客性別(如:男1:女0):");scanf("%d",&s->sex);printf("n 請輸入旅客住宿開始日期(如:1991 10 21):");sca

18、nf("%d %d %d",&s->year,&s->month,&s->day);s->lv=lv;s->next=p2->next;p2->next=s;p1->mem_num+;s->bed_num=i-1;Pr_divide(s,p1);system("cls"); break;break; (3)旅客退房情況輸入退房旅客的房間等級號、房間號碼、床位號碼,進行查找。完成旅客退房操作。cus* Delete(hotel_lv *L) int lv,hotel_num,be

19、d_num; hotel_lv *l;l=L->next;fangjian *f;cus *p,*q;char c;printf("請輸入該退房人房間的等級號碼:n");scanf("%d",&lv); /輸入退房人的房間等級getchar();while(l!=NULL)if(l->lv_num!=lv)l=l->next;else /找到該等級f=l->fj_next;printf("請輸入該退房人房間的房間號碼:n"); scanf("%d",&hotel_num);

20、/輸入退房人的房間號碼getchar();while(f!=NULL)if(f->fj_num!=hotel_num)f=f->next;else /找到該房間p=f->cus_next;q=f->cus_next;printf("請輸入該退房人的床位號碼:n"); scanf("%d",&bed_num); /輸入退房人的床位號碼getchar();while(q!=NULL)if(q->bed_num!=bed_num)q=q->next;else /查找該床位if(bed_num=1) /因為床位沒有設(shè)置

21、頭結(jié)點,所以對于第一個結(jié)點要特別判斷 /直接打印旅客信息printf("此等級、此房間、此床位旅客的信息為: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); printf("是否與要退房人信息相符?y/nn"); scanf("%c",&

22、amp;c); if(c='y') /做出是否退房的選擇f->mem_num-;printf("退房成功!n");system("pause"); return(q); elsereturn NULL;else /如果床位不為1 while(p->next!=q) /指向下一床位p=p->next; /打印旅客信息printf("此等級、此房間、此床位旅客的信息為:n"); printf("該名顧客的信息:n"); printf("姓名t性別t年齡t入住時間n"

23、); 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;f->mem_num-;printf("退房成功!n");system("pause"); return

24、(q); else return NULL;if(q=NULL) /如果該房間內(nèi)床位為空printf("未找到該床位號,請核實信息后重新輸入。n");if(f=NULL) /如果該等級的房間為空printf("未找到該房間號,請核實信息后重新輸入。n");if(l=NULL) /如果等級鏈表為空printf("未找到該房間等級,請核實信息后重新輸入。n");system("pause");6. 測試與調(diào)試(1)編寫時出現(xiàn)的問題剛開始,我想旅店管理系統(tǒng)的算法思想與剛做過的學生宿舍管理系統(tǒng)一樣,所以最開始,我定義的結(jié)構(gòu)

25、體數(shù)組,進行編寫??墒窃诔跏蓟臅r候,因為旅店跟旅店的情況不一樣,而數(shù)組大小有不能用變量來指示,所以在用數(shù)組進行初始化的時候遇到了麻煩。又想到如果用鏈表的話,不用定義鏈表的長度,所以改用鏈表來編寫。在旅客進行入住情況中,開始沒有設(shè)置頭結(jié)點,寫到后面越來越不對勁,因為有好多種情況要進行考慮(如:判斷是否客滿、是否所需等級無空床位等)所以又加入頭結(jié)點。在床位分配的時候,因為沒有設(shè)置床位的頭結(jié)點,所以要對第一個床位進行特別判斷。然后經(jīng)過多次調(diào)試與修改,最終能實現(xiàn)旅客的入住情況。旅客退房跟入住時一樣,有好多種情況要考慮。在床位回收的時候,還是因為沒有設(shè)置床位的頭結(jié)點,所以要對第一個床位進行特別判斷。還

26、有就是一開始我把那個輸入退房人房間號和床位號的語句放在了循環(huán)體內(nèi),出現(xiàn)了循環(huán)一次要輸入一個。后來經(jīng)過調(diào)試發(fā)現(xiàn)了問題,移出來后沒有再出現(xiàn)這個問題。最后進行主函數(shù)的界面編寫。查詢操作與統(tǒng)計操作比較簡單,沒有出現(xiàn)什么問題。由于自己不會文件的保存與讀取函數(shù)的編寫,向其他同學請教的時候,他們也沒有寫出來。所以就沒有加入文件保存與讀取函數(shù)。(2) 測試數(shù)據(jù)與結(jié)果初始化輸入旅客 本測試數(shù)據(jù)共輸入了五名旅客(1)第一人旅客所需的房間等級無空位情況(2)第二人(3)第三人(4)第四人(5)第五人旅店已客滿,無法入住統(tǒng)計旅店當前入住人數(shù)旅客退房情況(1)正常退房退房之后又有人入住且與以助旅客同名(2)退房輸入錯誤

27、時候查詢旅客信息時候(1) 無旅客同名時:(2) 有旅客同名時(3) 查詢錯誤時候7. 源程序清單#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct customer /旅客結(jié)構(gòu)體char name15;int age;int sex; int lv; int bed_num;int year;int month;int day;struct customer* next;cus;typedef struct hotel_lv /旅店結(jié)構(gòu)體int lv_num;struct

28、hotel_lv *next;struct fangjian *fj_next;hotel_lv;typedef struct fangjian /房間結(jié)構(gòu)體int fj_num;int max;int mem_num;struct fangjian *next;struct customer *cus_next;fangjian;void Init(hotel_lv *L) /初始化函數(shù) int i,j,k,l;hotel_lv *p,*q; fangjian *p1,*p2,*p3;printf("請輸入房間分為幾個等級:n"); scanf("%d"

29、;,&j); /輸入房間共分為幾個等級q=L;for(i=1;i<=j;i+)/初始化該等級的房間p=(hotel_lv*)malloc(sizeof(hotel_lv);q->next=p;p->lv_num=i; /給房間等級賦值printf("請輸入房間等級為%d的房間個數(shù):n",p->lv_num); scanf("%d",&l); /輸入該等級的房間數(shù)目if(l=0)continue;else /初始化該房間內(nèi)的床位p2=(fangjian*)malloc(sizeof(fangjian);p2->

30、fj_num=1;printf("請輸入房間等級為%d房間號為1的床位個數(shù)的最大值:n",p->lv_num,k);scanf("%d",&(p2->max); /輸入房間1的床位數(shù)目p2->mem_num=0; /該房間內(nèi)當前人數(shù)賦為零 p->fj_next=p2; p3=p2; for(k=2;k<=l;k+) p1=(fangjian*)malloc(sizeof(fangjian); p3->next=p1; p1->fj_num=k; printf("請輸入房間等級為%d房間號為%d的

31、床位個數(shù)的最大值:n",p->lv_num,k); scanf("%d",&(p1->max); /輸入房間k的床位數(shù)目 p1->mem_num=0; /該房間內(nèi)的當前人數(shù)賦為零 p3=p1;p3->next=NULL; /房間鏈表尾指針賦為空q=q->next; q->next=NULL; /等級鏈表尾指針域賦為空system("pause");int full(hotel_lv *L) /判是否客滿hotel_lv *l;l=L->next;fangjian *f;while(l!=NULL

32、)f=l->fj_next;while(f!=NULL)if(f->mem_num!=f->max) /如果有房間的當前人數(shù)不等于房間的最大人數(shù),則返回0return 0; elsef=f->next;l=l->next;if(!l) /否則返回1return 1;void Pr_divide(cus* p,fangjian* q ) /打印旅客信息printf(" n");printf(" 旅客房間分配表 n");printf(" n"); printf(" 姓名 性別年齡等級號房間號床位號

33、入住時間 n");printf(" n");printf(" %12s %d %2d %2d %2d %2d %4d-%2d-%2d n",p->name,p->sex,p->age,p->lv,q->fj_num,p->bed_num,p->year,p->month,p->day);printf(" n"); printf("n");system("pause");void input(hotel_lv *L) /旅客入住函數(shù)c

34、har c;cus *s,*p2,*p3;hotel_lv *l;l=L->next; fangjian *p1;int i,lv;if(full(L) /判斷是否旅店客滿printf(" 旅店客滿,不能入住。n");system("pause");elseprintf("請輸入旅客所需的房間等級:"); /輸入旅客所需的等級 scanf("%d",&lv); while(l!=NULL) /等級不為空時 if(l->lv_num!=lv) l=l->next; else /有此等級時p1

35、=l->fj_next; while(p1!=NULL) /房間不為空 if(p1->mem_num=p1->max) /是否有空床位p1=p1->next;if(p1=NULL)getchar(); printf("此等級為%d的所有房間均無空位n是否愿意更換等級y/n",lv); scanf("%c",&c); /做出選擇 if(c='y')input(L);elsereturn ;else /進行旅客登記 /因為床位沒有設(shè)置頭結(jié)點,所以對于第一個結(jié)點要特別判斷if(p1->mem_num=0)s

36、=(cus*)malloc(sizeof(cus);printf("n-n");printf("n 旅客的信息: ");printf("n 請輸入旅客姓名:");scanf("%s",s->name);printf("n 請輸入旅客年齡:");scanf("%d",&(s->age);printf("n 請輸入旅客性別(如:男1:女0):");scanf("%d",&(s->sex);printf(&q

37、uot;n 請輸入旅客住宿開始日期(如:1991 10 21):");scanf("%d %d %d",&s->year,&s->month,&s->day);s->lv=lv; /修改指針p1->cus_next=s;p1->mem_num+; /房間當前人數(shù)加1s->bed_num=1;s->next=NULL; /尾指針置為空Pr_divide(s,p1); /打印房間分配表system("cls"); break;elsep2=p1->cus_next;p3=p2;i=1;while(i<=p1->mem_num)if(i=p3->bed_num)p3=p3->next;i+;elsei+;break;if(p3=NULL)

溫馨提示

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

評論

0/150

提交評論