




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、洛 陽 理 工 學 院課 程 設 計 說 明 書課程名稱 數據結構 設計課題 模擬旅店管理系統床位的分配與回收 專 業(yè) 計算機科學與技術專業(yè) 班 級 B120506 學 號 B12050606 姓 名 翟 完成日期 2014年6月13號 課 程 設 計 任 務 書設計題目:模擬旅館管理系統的一個功能床位的分配與回收 _設計內容與要求:某旅館有n個等級的房間,第I等級有ai個房間,每個等級有bi個床位(1in)。試模擬旅館管理系統中床位分配和回收的功能,設計能為單個旅客分配床位,在其離店便回收床位(供下次分配)的算法。基本要求(1)輸入數據分配時,輸入旅客姓名、年齡、性別、到達日期和所需房間等級
2、。回收時,輸入房間等級、房間號和床位號。(2)輸出數據分配成功時打印旅客姓名、年齡、到達日期、房間等級、房間號碼和床位號碼。分配不成功時,如所有等級均無床位,則打印“客滿”信息;如旅客需要的等級均無空床位,則打印“是否愿意更換等級?”的詢問信息。若旅客愿意更換,則重新輸入有關信息,再進行分配,否則分配工作結束。 指導教師:張 新 顏 2014 年 6 月 3 日課 程 設 計 評 語 成績: 指導教師:張 新 顏 年 月 日洛 陽 理 工 學 院 課 程 設 計 報 告一、【問題描述】 某旅館有n個等級的房間,第I等級有ai個房間,每個等級有bi個床位(1in)。試模擬旅館管理系統中床位分配和
3、回收的功能,設計能為單個旅客分配床位,在其離店便回收床位(供下次分配)的算法。二、【基本與要求】(1)輸入數據分配時,輸入旅客姓名、年齡、性別、到達日期和所需房間等級?;厥諘r,輸入房間等級、房間號和床位號。(2)輸出數據分配成功時打印旅客姓名、年齡、到達日期、房間等級、房間號碼和床位號碼。分配不成功時,如所有等級均無床位,則打印“客滿”信息;如旅客需要的等級均無空床位,則打印“是否愿意更換等級?”的詢問信息。若旅客愿意更換,則重新輸入有關信息,再進行分配,否則分配工作結束。三、【測試數據】 首先,初始化旅館,定義為旅館:房間等級為兩個(1和2);定義級別為1的房間為一個,床位個數為一個;定義級
4、別為2的房間個數為兩個,其中1號房有床位2個,2號房間床位個數也為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”。則輸出以下內容:此等級、此房間、此床位旅客的信息為:該名旅客的信息:姓名 性別 年齡 入住時間Li 0 25 2014-6-8輸入功能選項“2”,繼續(xù)退房,等級“2”,房號
6、“2”,床號“1”,則輸出以下內容:此等級、此房間、此床位旅客的信息為:該名旅客的信息:姓名 性別 年齡 入住時間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統計旅客信息:輸入“4”,則輸出:等級為1的房間入住人數為1 等級為2的房間入住人數為4退出本程序:輸入“0”,則可以退出本程序。四、【算法思想】客人入住旅店是否已滿所需房間等級房間是否已滿打印客戶信息房間分配成功打印房客表N重新輸入結束1、客人入?。寒斎胱〉氖悄撤块g的第一個旅客,需要對其特別處理,以其客戶信息作為本房間旅客鏈的第一個結點。若非第一位乘客,則要對空的床號進行查
8、找,首先設置一變量“i”,初始化i=1,使其與現有空房的旅客鏈的每位旅客的床號比較,若發(fā)現有床號與i相等,則i自加1,再進行與本房間所有旅客床號比較,若無旅客床號與i的值相等,則返回i,作為本次入住旅客的床號。2、旅客退房退房要退的房的等級等級?房間號房間?床號床號?旅客信息退房?退房成功重輸入N重入N重入N返回菜單N退房,若是某房間第一個乘客退房,因為首位旅客信息單元是旅客鏈的第一的鏈單元,所以刪除時應將下一位旅客的地址賦給本房間存儲單元中存放客戶指針的單元中,以防止客戶鏈的丟失。 若非第一個旅客退房,則只需要將本旅客的下一位旅客的地址放到這位旅客的前一位旅客的next域里面,然后釋放退出旅
9、客的信息單元就行了。五、【模塊劃分】重要模塊:初始化旅館信息主函數旅客入住旅客退房旅客信息查詢旅客統計退出本程序判斷是旅店是否已滿分配房間床號入住是否有此旅客退出成功是否有此旅客顯示旅客信息顯示旅館各等級房間入住人數主要功能函數:初始化函數: void Init(hotel_lv *L)(逐級進行初始化) 判斷是否客滿:int full(hotel_lv *L)(主機進行查詢直到發(fā)現空床位截止)打印旅客信息:void Pr_divide(cus* p,fangjian* q )旅客住宿函數:void Pr_divide(cus* p,fangjian* q )(首先調用full()函數,若非滿
10、,相應級別查找,有空床位則入?。┞每屯朔亢瘮担篶us* Delete(hotel_lv *L)(逐級查詢直至床位,有次床位則刪除)查詢旅客信息:void cx_customer(hotel_lv *L)(按名字逐級順序查詢)統計旅店當前入住人數:void Tongji_cus(hotel_lv *L)(逐級按房間順序統計)主函數:void main()(調用各功能函數)六、【數據結構】本次數據結構課程設計,做的是旅店管理系統,定義了三個結構體鏈表,給等級鏈表設置了一個頭結點,采用鏈表嵌套方法,等級鏈表嵌套房間鏈表,房間鏈表再嵌套旅客鏈表。(1)對旅店結構體定義typedef struct ho
11、tel_lv int lv_num; /旅店等級號struct hotel_lv *next; /指向下一等級struct fangjian *fj_next; /指向房間hotel_lv;(2)房間結構體定義typedef struct fangjian int fj_num; /房間號int max; /房間的最大床位數目int mem_num; /房間內的當前人數struct fangjian *next; /指向下一房間struct customer *cus_next; /指向旅客fangjian;(3)對旅客結構體定義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;七、【測試情況】八、【心得】 在開始這個課題之初,自己感覺對這個題目自己應該可以很好地完成這以課題,但到后來自己深入的研究了一下發(fā)現,這道題目還是很難得至少對于我來說,自己也曾有放棄的想法,但后來在指導老師的指導和幫助下最終完成了這個程序。首先,定義的結構體數組,進行編寫。如果用順序
13、表的話對于不同的旅館是不適用的,因為各個旅館的房間的級別、房間的個數、房間的床位都是不相同的,如果用鏈表就不一樣了,所以改用鏈表來編寫。對后面的處理在旅客進行入住情況中,在床位分配的時候,因為沒有設置床位的頭結點,所以要對第一個床位進行特別判斷。然后經過多次調試與修改,最終能實現旅客的入住情況。旅客退房跟入住時一樣,在床位回收的時候,因沒有設置床位的頭結點,所以要對第一個床位進行特別判斷。再次對非空非滿的房間進行入住的時候要進行判斷,哪些床位是空的,對空的床位可以分配給相應的旅客。對退房的旅客同樣需要對是否是第一位房客和非第一位房客區(qū)別開來進行修改指針。完成了這些,本程序的基本重要的問題都已解
14、決了。九、【源程序】#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct hotel_lv /旅店結構體int lv_num;struct hotel_lv *next;struct fangjian *fj_next;hotel_lv;typedef struct fangjian /房間結構體int fj_num;int max;int mem_num;struct fangjian *next;struct customer *cus_next;fangjian;type
15、def struct customer /旅客結構體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) /初始化函數 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的房間個數:n",p->lv_num); scanf("%d",&l); /輸入該等級的房間數目if(l=0)continue;else /初始化該房間內的床位 p2=(fangjian*)malloc(sizeof(fangjian);p2->fj_num=1;printf("請輸入房間等級為%d房間
17、號為1的床位個數的最大值:n",p->lv_num,k);scanf("%d",&(p2->max); /輸入房間1的床位數目p2->mem_num=0; /該房間內當前人數賦為零 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的床位個數的最大值:n",p->lv_num,k);
18、scanf("%d",&(p1->max); /輸入房間k的床位數目 p1->mem_num=0; /該房間內的當前人數賦為零 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、) /如果有房間的當前人數不等于房間的最大人數,則返回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) /旅客入住函數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 /進行旅客登記 /第一個結點要特別判斷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+; /房間當前人數加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) /旅客退房函數 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) /第一結點特別判斷 /直接打印旅客信息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) /如果該房間內床位為空printf("未找到該床位號,請核實信息后重新輸入n");if(f=NULL) /如果該等級的房間為空printf("未找到該房間號,請核實信息后重新輸入
32、。n");if(l=NULL) /如果等級鏈表為空printf("未找到該房間等級,請核實信息后重新輸入。n");void cx_customer(hotel_lv *L) /查詢旅客信息函數char s15;hotel_lv *l;fangjian *f;cus *t;int flag=0; /設置標志量printf("請輸入要查詢的旅客姓名:n");scanf("%s",s); /輸入要查找旅客的姓名getchar();l=L->next;while(l!=NULL) /等級不為空時,走向房間f=l->fj_next;while(f!=NULL) /房間不為空時,走向床位 if(f->mem_num=0) /若此房間當前人數為零,走向下一房間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+; /標志量加1elset=t->next;f=f->next;l=l->next;if(!flag) /標志量為零,則未查找到
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年三醋酸纖維素膜項目建議書
- 2025辦公室租賃合同范本4
- 2025年解除商業(yè)租賃合同范本標準版
- 2025標準管理咨詢服務合同
- 2025辦公設備采購合同協議
- 2025標準版權許可合同樣式
- 2025中國鋼鐵產業(yè)陜西分公司集體合同
- 2025設備租賃合同版范本
- 2025蘇州市購房合同樣本
- 2025四川公共租賃住房租賃合同范本
- 科技領域實驗室質量控制關鍵技術與方法
- 商場運營部的培訓
- 四年級 人教版 數學《小數的意義》課件
- 《糖尿病與肥胖》課件
- 醫(yī)療糾紛防范與醫(yī)患溝通
- 服裝設計與工藝基礎知識單選題100道及答案
- 鋼結構施工管理培訓課件
- 護理MDT多學科聯合查房
- 易制毒化學品采購員崗位職責
- 《淺析我國綠色金融體系的構建》5600字(論文)
- 兒科病例分析課件
評論
0/150
提交評論