




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、洛 陽 理 工 學(xué) 院課 程 設(shè) 計 說 明 書課程名稱 數(shù)據(jù)結(jié)構(gòu) 設(shè)計課題 模擬旅店管理系統(tǒng)床位的分配與回收 專 業(yè) 計算機科學(xué)與技術(shù)專業(yè) 班 級 B120506 學(xué) 號 B12050606 姓 名 翟 完成日期 2014年6月13號 課 程 設(shè) 計 任 務(wù) 書設(shè)計題目:模擬旅館管理系統(tǒng)的一個功能床位的分配與回收 _設(shè)計內(nèi)容與要求:某旅館有n個等級的房間,第I等級有ai個房間,每個等級有bi個床位(1in)。試模擬旅館管理系統(tǒng)中床位分配和回收的功能,設(shè)計能為單個旅客分配床位,在其離店便回收床位(供下次分配)的算法?;疽螅?)輸入數(shù)據(jù)分配時,輸入旅客姓名、年齡、性別、到達(dá)日期和所需房間等級
2、。回收時,輸入房間等級、房間號和床位號。(2)輸出數(shù)據(jù)分配成功時打印旅客姓名、年齡、到達(dá)日期、房間等級、房間號碼和床位號碼。分配不成功時,如所有等級均無床位,則打印“客滿”信息;如旅客需要的等級均無空床位,則打印“是否愿意更換等級?”的詢問信息。若旅客愿意更換,則重新輸入有關(guān)信息,再進(jìn)行分配,否則分配工作結(jié)束。 指導(dǎo)教師:張 新 顏 2014 年 6 月 3 日課 程 設(shè) 計 評 語 成績: 指導(dǎo)教師:張 新 顏 年 月 日洛 陽 理 工 學(xué) 院 課 程 設(shè) 計 報 告一、【問題描述】 某旅館有n個等級的房間,第I等級有ai個房間,每個等級有bi個床位(1in)。試模擬旅館管理系統(tǒng)中床位分配和
3、回收的功能,設(shè)計能為單個旅客分配床位,在其離店便回收床位(供下次分配)的算法。二、【基本與要求】(1)輸入數(shù)據(jù)分配時,輸入旅客姓名、年齡、性別、到達(dá)日期和所需房間等級?;厥諘r,輸入房間等級、房間號和床位號。(2)輸出數(shù)據(jù)分配成功時打印旅客姓名、年齡、到達(dá)日期、房間等級、房間號碼和床位號碼。分配不成功時,如所有等級均無床位,則打印“客滿”信息;如旅客需要的等級均無空床位,則打印“是否愿意更換等級?”的詢問信息。若旅客愿意更換,則重新輸入有關(guān)信息,再進(jìn)行分配,否則分配工作結(jié)束。三、【測試數(shù)據(jù)】 首先,初始化旅館,定義為旅館:房間等級為兩個(1和2);定義級別為1的房間為一個,床位個數(shù)為一個;定義級
4、別為2的房間個數(shù)為兩個,其中1號房有床位2個,2號房間床位個數(shù)也為2;然后開始測試。輸入:分別輸入信息如下表:房間級別姓名年齡性別(0女/1男)入住時間1Zhang2502014 06 082Wang2402014 06 082Li2502014 06 082Zhao2402014 06 092Liu2612014 06 10輸出:每輸入一個旅客的信息都會輸出下表(第一位房客)旅客房間分配表姓名性別年齡等級房號床位時間zhang0251112014 06 08輸入第二位房客后輸出:旅客房間分配表姓名性別年齡等級房號床位時間wang0242112014 06 08輸入第三位房客后輸出:旅客房間分
5、配表姓名性別年齡等級房號床位時間li0252122014 06 08輸入第四個房客后輸出:旅客房間分配表姓名性別年齡等級房號床位時間zhao0242212014 06 09輸入第五個房客后輸出:旅客房間分配表姓名性別年齡等級房號床位時間liu1262222014 06 10如果再次輸入功能選項“1”,則會輸出“旅店客滿,不能入住”退房操作:輸入功能選項“2”執(zhí)行退房操作,輸入退房的等級“2”,輸入房號“1”,輸入床號“2”。則輸出以下內(nèi)容:此等級、此房間、此床位旅客的信息為:該名旅客的信息:姓名 性別 年齡 入住時間Li 0 25 2014-6-8輸入功能選項“2”,繼續(xù)退房,等級“2”,房號
6、“2”,床號“1”,則輸出以下內(nèi)容:此等級、此房間、此床位旅客的信息為:該名旅客的信息:姓名 性別 年齡 入住時間zhao 0 24 2014-6-9再次入住操作:輸入功能鍵“1”,房間等級“2”然后輸入以下表格信息:姓名年齡性別入住日期chen2402014 06 11則輸出:旅客房間分配表姓名性別年齡等級號房號床位時間chen0242122014 06 11繼續(xù)入住操作:輸入功能鍵“1”,房間等級“2” 然后輸入以下表格信息:姓名年齡性別入住時間hu2202014 06 12則輸出旅客房間分配表姓名性別年齡等級號房號床位時間hu0222212014 06 12查詢房客信息:輸入“3”,然后
7、輸入查詢房客的名字“zhao ” 輸出“未找到該旅客,請核實后再輸入” 再次, 輸入“3”,然后輸入查詢房客的名字“hu” 輸出以下表格:旅客房間分配表姓名性別年齡等級號房號床位入住時間hu0222212014 06 12統(tǒng)計旅客信息:輸入“4”,則輸出:等級為1的房間入住人數(shù)為1 等級為2的房間入住人數(shù)為4退出本程序:輸入“0”,則可以退出本程序。四、【算法思想】客人入住旅店是否已滿所需房間等級房間是否已滿打印客戶信息房間分配成功打印房客表N重新輸入結(jié)束1、客人入?。寒?dāng)入住的是某房間的第一個旅客,需要對其特別處理,以其客戶信息作為本房間旅客鏈的第一個結(jié)點。若非第一位乘客,則要對空的床號進(jìn)行查
8、找,首先設(shè)置一變量“i”,初始化i=1,使其與現(xiàn)有空房的旅客鏈的每位旅客的床號比較,若發(fā)現(xiàn)有床號與i相等,則i自加1,再進(jìn)行與本房間所有旅客床號比較,若無旅客床號與i的值相等,則返回i,作為本次入住旅客的床號。2、旅客退房退房要退的房的等級等級?房間號房間?床號床號?旅客信息退房?退房成功重輸入N重入N重入N返回菜單N退房,若是某房間第一個乘客退房,因為首位旅客信息單元是旅客鏈的第一的鏈單元,所以刪除時應(yīng)將下一位旅客的地址賦給本房間存儲單元中存放客戶指針的單元中,以防止客戶鏈的丟失。 若非第一個旅客退房,則只需要將本旅客的下一位旅客的地址放到這位旅客的前一位旅客的next域里面,然后釋放退出旅
9、客的信息單元就行了。五、【模塊劃分】重要模塊:初始化旅館信息主函數(shù)旅客入住旅客退房旅客信息查詢旅客統(tǒng)計退出本程序判斷是旅店是否已滿分配房間床號入住是否有此旅客退出成功是否有此旅客顯示旅客信息顯示旅館各等級房間入住人數(shù)主要功能函數(shù):初始化函數(shù): void Init(hotel_lv *L)(逐級進(jìn)行初始化) 判斷是否客滿:int full(hotel_lv *L)(主機進(jìn)行查詢直到發(fā)現(xiàn)空床位截止)打印旅客信息:void Pr_divide(cus* p,fangjian* q )旅客住宿函數(shù):void Pr_divide(cus* p,fangjian* q )(首先調(diào)用full()函數(shù),若非滿
10、,相應(yīng)級別查找,有空床位則入?。┞每屯朔亢瘮?shù):cus* Delete(hotel_lv *L)(逐級查詢直至床位,有次床位則刪除)查詢旅客信息:void cx_customer(hotel_lv *L)(按名字逐級順序查詢)統(tǒng)計旅店當(dāng)前入住人數(shù):void Tongji_cus(hotel_lv *L)(逐級按房間順序統(tǒng)計)主函數(shù):void main()(調(diào)用各功能函數(shù))六、【數(shù)據(jù)結(jié)構(gòu)】本次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計,做的是旅店管理系統(tǒng),定義了三個結(jié)構(gòu)體鏈表,給等級鏈表設(shè)置了一個頭結(jié)點,采用鏈表嵌套方法,等級鏈表嵌套房間鏈表,房間鏈表再嵌套旅客鏈表。(1)對旅店結(jié)構(gòu)體定義typedef struct ho
11、tel_lv int lv_num; /旅店等級號struct hotel_lv *next; /指向下一等級struct fangjian *fj_next; /指向房間hotel_lv;(2)房間結(jié)構(gòu)體定義typedef struct fangjian int fj_num; /房間號int max; /房間的最大床位數(shù)目int mem_num; /房間內(nèi)的當(dāng)前人數(shù)struct fangjian *next; /指向下一房間struct customer *cus_next; /指向旅客fangjian;(3)對旅客結(jié)構(gòu)體定義typedef struct customer char nam
12、e15; /旅客姓名int age; /旅客年齡int sex; /旅客性別 int lv; /旅客住宿時的等級號 int bed_num; /旅客的床位號int year; /住宿日期 int month; /住宿日期int day; /住宿日期struct customer* next; /指向下一旅客cus;七、【測試情況】八、【心得】 在開始這個課題之初,自己感覺對這個題目自己應(yīng)該可以很好地完成這以課題,但到后來自己深入的研究了一下發(fā)現(xiàn),這道題目還是很難得至少對于我來說,自己也曾有放棄的想法,但后來在指導(dǎo)老師的指導(dǎo)和幫助下最終完成了這個程序。首先,定義的結(jié)構(gòu)體數(shù)組,進(jìn)行編寫。如果用順序
13、表的話對于不同的旅館是不適用的,因為各個旅館的房間的級別、房間的個數(shù)、房間的床位都是不相同的,如果用鏈表就不一樣了,所以改用鏈表來編寫。對后面的處理在旅客進(jìn)行入住情況中,在床位分配的時候,因為沒有設(shè)置床位的頭結(jié)點,所以要對第一個床位進(jìn)行特別判斷。然后經(jīng)過多次調(diào)試與修改,最終能實現(xiàn)旅客的入住情況。旅客退房跟入住時一樣,在床位回收的時候,因沒有設(shè)置床位的頭結(jié)點,所以要對第一個床位進(jìn)行特別判斷。再次對非空非滿的房間進(jìn)行入住的時候要進(jìn)行判斷,哪些床位是空的,對空的床位可以分配給相應(yīng)的旅客。對退房的旅客同樣需要對是否是第一位房客和非第一位房客區(qū)別開來進(jìn)行修改指針。完成了這些,本程序的基本重要的問題都已解
14、決了。九、【源程序】#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct hotel_lv /旅店結(jié)構(gòu)體int lv_num;struct 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;type
15、def 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;void Init(hotel_lv *L) /初始化函數(shù) int i,j,k,l;hotel_lv *p,*q; fangjian *p1,*p2,*p3;printf("請輸入房間分為幾個等級:n"); scanf("%d",&j); /輸入房間共分為幾個等級q=L;for(i=1;i<
16、;=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->fj_num=1;printf("請輸入房間等級為%d房間
17、號為1的床位個數(shù)的最大值:n",p->lv_num,k);scanf("%d",&(p2->max); /輸入房間1的床位數(shù)目p2->mem_num=0; /該房間內(nèi)當(dāng)前人數(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);
18、scanf("%d",&(p1->max); /輸入房間k的床位數(shù)目 p1->mem_num=0; /該房間內(nèi)的當(dāng)前人數(shù)賦為零 p3=p1;p3->next=NULL; /房間鏈表尾指針賦為空q=q->next; q->next=NULL; /等級鏈表尾指針域賦為int full(hotel_lv *L) /判是否客滿hotel_lv *l;fangjian *f;l=L->next;while(l!=NULL) f=l->fj_next; while(f!=NULL) if(f->mem_num!=f->max
19、) /如果有房間的當(dāng)前人數(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(" 姓名 性別年齡等級號房間號床位號 入住時間 n");printf(" n");printf(" %12s %
20、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");void input(hotel_lv *L) /旅客入住函數(shù)char c;int lv;static int i;cus *s,*p2,*p3;fangjian *p1;hotel_lv *l;l=L->next; if(
21、full(L) /判斷是否旅店客滿printf("旅店客滿,不能入住。n");elseprintf("請輸入旅客所需的房間等級:"); /輸入旅客所需的等級 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=NU
22、LL)getchar(); printf("此等級為%d的所有房間均無空位n是否愿意更換等級y/n",lv); scanf("%c",&c); /做出選擇 if(c='y')input(L);elsereturn ;else /進(jìn)行旅客登記 /第一個結(jié)點要特別判斷if(p1->mem_num=0)s=(cus*)malloc(sizeof(cus);printf("n-n");printf("n 旅客的信息: ");printf("n 請輸入旅客姓名:");scan
23、f("%s",s->name);printf("n 請輸入旅客年齡:");scanf("%d",&(s->age);printf("n 請輸入旅客性別(如:男1:女0):");scanf("%d",&(s->sex);printf("n 請輸入旅客住宿開始日期;”);scanf("%d %d %d",&s->year,&s->month,&s->day);s->lv=lv; /修改指針
24、p1->cus_next=s;p1->mem_num+; /房間當(dāng)前人數(shù)加1s->bed_num=1;s->next=NULL; /尾指針置為空Pr_divide(s,p1); /打印房間分配表break;elsep2=p1->cus_next;p3=p2; i=1;for(;p3!=NULL;p3=p3->next)if(i=p3->bed_num) +i;p3=p2; for(;p2->next!=NULL;p2=p2->next);s=(cus*)malloc(sizeof(cus);printf("n-n");p
25、rintf("n 旅客的信息: ");printf("n 請輸入旅客姓名:");scanf("%s",s->name);printf("n 請輸入旅客年齡:");scanf("%d",&s->age);printf("n 請輸入旅客性別");scanf("%d",&s->sex);printf("n 請輸入旅客住宿開始日期");scanf("%d %d %d",&s->
26、year,&s->month,&s->day);s->lv=lv;p2->next=s;s->next=NULL;p1->mem_num+;s->bed_num=i;Pr_divide(s,p1);break;break; cus* Delete(hotel_lv *L) /旅客退房函數(shù) int lv,hotel_num,bed_num;char c;cus *p,*q;fangjian *f; hotel_lv *l;l=L->next;printf("請輸入該退房人房間的等級號碼:n");scanf(&qu
27、ot;%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); /輸入退房人的房間號碼getchar();while(f!=NULL)if(f->fj_num!=hotel_num)f=f->next;else /找到該房間p=f->cus_next;q=f-
28、>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=p->bed_num) /第一結(jié)點特別判斷 /直接打印旅客信息printf("此等級、此房間、此床位旅客的信息為:n"); printf("該名顧客的信息:n"); printf("
29、姓名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') /做出是否退房的選擇 f->cus_next=q->next; f->mem_num-;printf("退房成功!n"); return
30、(q); elsereturn NULL;else /如果床位不為1 while(p->next!=q) /指向下一床位p=p->next; /打印旅客信息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); prin
31、tf("是否與要退房人信息相符?y/nn"); scanf("%c",&c); if(c='y') /做出是否退房的選擇p->next=q->next;f->mem_num-;printf("退房成功!n"); return(q); else return NULL;if(q=NULL) /如果該房間內(nèi)床位為空printf("未找到該床位號,請核實信息后重新輸入n");if(f=NULL) /如果該等級的房間為空printf("未找到該房間號,請核實信息后重新輸入
32、。n");if(l=NULL) /如果等級鏈表為空printf("未找到該房間等級,請核實信息后重新輸入。n");void cx_customer(hotel_lv *L) /查詢旅客信息函數(shù)char s15;hotel_lv *l;fangjian *f;cus *t;int flag=0; /設(shè)置標(biāo)志量printf("請輸入要查詢的旅客姓名:n");scanf("%s",s); /輸入要查找旅客的姓名getchar();l=L->next;while(l!=NULL) /等級不為空時,走向房間f=l->fj_next;while(f!=NULL) /房間不為空時,走向床位 if(f->mem_num=0) /若此房間當(dāng)前人數(shù)為零,走向下一房間f=f->next;else t=f->cus_next;while(t!=NULL)if(!strcmp(t->name,s) /如果找到該旅客 Pr_divide(t,f); /打印信息t=t->next; /指向下一人,繼續(xù)查找flag+; /標(biāo)志量加1elset=t->next;f=f->next;l=l->next;if(!flag) /標(biāo)志量為零,則未查找到
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家具產(chǎn)品展示與陳列技巧試題及答案
- 建筑施工風(fēng)險識別試題及答案
- 最難政法考試題及答案
- 小學(xué)教育教學(xué)反思與改進(jìn)測驗試題及答案
- 知識框架大學(xué)化學(xué)考試試題及答案
- 智能駕駛技術(shù)實際應(yīng)用考察試題及答案
- 新能源汽車在城市可持續(xù)發(fā)展中的重要性研究試題及答案
- 提高商務(wù)反饋能力的試題與答案
- 安全工程師職場規(guī)劃2025年試題及答案
- 注冊土木工程師考生資源分享試題及答案
- 配電房防火安全施工技術(shù)措施
- 地鐵乘客滿意度影響因素組態(tài)效應(yīng)分析:出行鏈視角研究
- 數(shù)學(xué)三角形的高、中線、角平分線教案2024-2025學(xué)年北師大版(2024)七年級數(shù)學(xué)下冊
- 高低壓柜常見故障及檢修培訓(xùn)
- 2021水閘工程運行管理規(guī)程
- (高清版)DB51∕T 1292-2011 牧草種質(zhì)資源田間鑒定與評價技術(shù)規(guī)程
- 三農(nóng)項目申請操作流程指南
- 組織行為學(xué)(對外經(jīng)濟貿(mào)易大學(xué))知到課后答案智慧樹章節(jié)測試答案2025年春對外經(jīng)濟貿(mào)易大學(xué)
- 貼太陽膜知識培訓(xùn)課件
- 面粉廠粉塵防爆培訓(xùn)課件
- 1000道二年級數(shù)學(xué)口算練習(xí)題
評論
0/150
提交評論