床位的分配與回收_第1頁
床位的分配與回收_第2頁
床位的分配與回收_第3頁
床位的分配與回收_第4頁
床位的分配與回收_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、洛 陽 理 工 學(xué) 院課 程 設(shè) 計(jì) 說 明 書課程名稱 數(shù)據(jù)結(jié)構(gòu) 設(shè)計(jì)課題 模擬旅店管理系統(tǒng)床位的分配與回收 專 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù)專業(yè) 班 級(jí) B120506 學(xué) 號(hào) B12050606 姓 名 翟 完成日期 2014年6月13號(hào) 課 程 設(shè) 計(jì) 任 務(wù) 書設(shè)計(jì)題目:模擬旅館管理系統(tǒng)的一個(gè)功能床位的分配與回收 _設(shè)計(jì)內(nèi)容與要求:某旅館有n個(gè)等級(jí)的房間,第I等級(jí)有ai個(gè)房間,每個(gè)等級(jí)有bi個(gè)床位(1in)。試模擬旅館管理系統(tǒng)中床位分配和回收的功能,設(shè)計(jì)能為單個(gè)旅客分配床位,在其離店便回收床位(供下次分配)的算法?;疽螅?)輸入數(shù)據(jù)分配時(shí),輸入旅客姓名、年齡、性別、到達(dá)日期和所需房間等級(jí)

2、?;厥諘r(shí),輸入房間等級(jí)、房間號(hào)和床位號(hào)。(2)輸出數(shù)據(jù)分配成功時(shí)打印旅客姓名、年齡、到達(dá)日期、房間等級(jí)、房間號(hào)碼和床位號(hào)碼。分配不成功時(shí),如所有等級(jí)均無床位,則打印“客滿”信息;如旅客需要的等級(jí)均無空床位,則打印“是否愿意更換等級(jí)?”的詢問信息。若旅客愿意更換,則重新輸入有關(guān)信息,再進(jìn)行分配,否則分配工作結(jié)束。 指導(dǎo)教師:張 新 顏 2014 年 6 月 3 日課 程 設(shè) 計(jì) 評(píng) 語 成績(jī): 指導(dǎo)教師:張 新 顏 年 月 日洛 陽 理 工 學(xué) 院 課 程 設(shè) 計(jì) 報(bào) 告一、【問題描述】 某旅館有n個(gè)等級(jí)的房間,第I等級(jí)有ai個(gè)房間,每個(gè)等級(jí)有bi個(gè)床位(1in)。試模擬旅館管理系統(tǒng)中床位分配和

3、回收的功能,設(shè)計(jì)能為單個(gè)旅客分配床位,在其離店便回收床位(供下次分配)的算法。二、【基本與要求】(1)輸入數(shù)據(jù)分配時(shí),輸入旅客姓名、年齡、性別、到達(dá)日期和所需房間等級(jí)?;厥諘r(shí),輸入房間等級(jí)、房間號(hào)和床位號(hào)。(2)輸出數(shù)據(jù)分配成功時(shí)打印旅客姓名、年齡、到達(dá)日期、房間等級(jí)、房間號(hào)碼和床位號(hào)碼。分配不成功時(shí),如所有等級(jí)均無床位,則打印“客滿”信息;如旅客需要的等級(jí)均無空床位,則打印“是否愿意更換等級(jí)?”的詢問信息。若旅客愿意更換,則重新輸入有關(guān)信息,再進(jìn)行分配,否則分配工作結(jié)束。三、【測(cè)試數(shù)據(jù)】 首先,初始化旅館,定義為旅館:房間等級(jí)為兩個(gè)(1和2);定義級(jí)別為1的房間為一個(gè),床位個(gè)數(shù)為一個(gè);定義級(jí)

4、別為2的房間個(gè)數(shù)為兩個(gè),其中1號(hào)房有床位2個(gè),2號(hào)房間床位個(gè)數(shù)也為2;然后開始測(cè)試。輸入:分別輸入信息如下表:房間級(jí)別姓名年齡性別(0女/1男)入住時(shí)間1Zhang2502014 06 082Wang2402014 06 082Li2502014 06 082Zhao2402014 06 092Liu2612014 06 10輸出:每輸入一個(gè)旅客的信息都會(huì)輸出下表(第一位房客)旅客房間分配表姓名性別年齡等級(jí)房號(hào)床位時(shí)間zhang0251112014 06 08輸入第二位房客后輸出:旅客房間分配表姓名性別年齡等級(jí)房號(hào)床位時(shí)間wang0242112014 06 08輸入第三位房客后輸出:旅客房間分

5、配表姓名性別年齡等級(jí)房號(hào)床位時(shí)間li0252122014 06 08輸入第四個(gè)房客后輸出:旅客房間分配表姓名性別年齡等級(jí)房號(hào)床位時(shí)間zhao0242212014 06 09輸入第五個(gè)房客后輸出:旅客房間分配表姓名性別年齡等級(jí)房號(hào)床位時(shí)間liu1262222014 06 10如果再次輸入功能選項(xiàng)“1”,則會(huì)輸出“旅店客滿,不能入住”退房操作:輸入功能選項(xiàng)“2”執(zhí)行退房操作,輸入退房的等級(jí)“2”,輸入房號(hào)“1”,輸入床號(hào)“2”。則輸出以下內(nèi)容:此等級(jí)、此房間、此床位旅客的信息為:該名旅客的信息:姓名 性別 年齡 入住時(shí)間Li 0 25 2014-6-8輸入功能選項(xiàng)“2”,繼續(xù)退房,等級(jí)“2”,房號(hào)

6、“2”,床號(hào)“1”,則輸出以下內(nèi)容:此等級(jí)、此房間、此床位旅客的信息為:該名旅客的信息:姓名 性別 年齡 入住時(shí)間zhao 0 24 2014-6-9再次入住操作:輸入功能鍵“1”,房間等級(jí)“2”然后輸入以下表格信息:姓名年齡性別入住日期chen2402014 06 11則輸出:旅客房間分配表姓名性別年齡等級(jí)號(hào)房號(hào)床位時(shí)間chen0242122014 06 11繼續(xù)入住操作:輸入功能鍵“1”,房間等級(jí)“2” 然后輸入以下表格信息:姓名年齡性別入住時(shí)間hu2202014 06 12則輸出旅客房間分配表姓名性別年齡等級(jí)號(hào)房號(hào)床位時(shí)間hu0222212014 06 12查詢房客信息:輸入“3”,然后

7、輸入查詢房客的名字“zhao ” 輸出“未找到該旅客,請(qǐng)核實(shí)后再輸入” 再次, 輸入“3”,然后輸入查詢房客的名字“hu” 輸出以下表格:旅客房間分配表姓名性別年齡等級(jí)號(hào)房號(hào)床位入住時(shí)間hu0222212014 06 12統(tǒng)計(jì)旅客信息:輸入“4”,則輸出:等級(jí)為1的房間入住人數(shù)為1 等級(jí)為2的房間入住人數(shù)為4退出本程序:輸入“0”,則可以退出本程序。四、【算法思想】客人入住旅店是否已滿所需房間等級(jí)房間是否已滿打印客戶信息房間分配成功打印房客表N重新輸入結(jié)束1、客人入?。寒?dāng)入住的是某房間的第一個(gè)旅客,需要對(duì)其特別處理,以其客戶信息作為本房間旅客鏈的第一個(gè)結(jié)點(diǎn)。若非第一位乘客,則要對(duì)空的床號(hào)進(jìn)行查

8、找,首先設(shè)置一變量“i”,初始化i=1,使其與現(xiàn)有空房的旅客鏈的每位旅客的床號(hào)比較,若發(fā)現(xiàn)有床號(hào)與i相等,則i自加1,再進(jìn)行與本房間所有旅客床號(hào)比較,若無旅客床號(hào)與i的值相等,則返回i,作為本次入住旅客的床號(hào)。2、旅客退房退房要退的房的等級(jí)等級(jí)?房間號(hào)房間?床號(hào)床號(hào)?旅客信息退房?退房成功重輸入N重入N重入N返回菜單N退房,若是某房間第一個(gè)乘客退房,因?yàn)槭孜宦每托畔卧锹每玩湹牡谝坏逆渾卧?,所以刪除時(shí)應(yīng)將下一位旅客的地址賦給本房間存儲(chǔ)單元中存放客戶指針的單元中,以防止客戶鏈的丟失。 若非第一個(gè)旅客退房,則只需要將本旅客的下一位旅客的地址放到這位旅客的前一位旅客的next域里面,然后釋放退出旅

9、客的信息單元就行了。五、【模塊劃分】重要模塊:初始化旅館信息主函數(shù)旅客入住旅客退房旅客信息查詢旅客統(tǒng)計(jì)退出本程序判斷是旅店是否已滿分配房間床號(hào)入住是否有此旅客退出成功是否有此旅客顯示旅客信息顯示旅館各等級(jí)房間入住人數(shù)主要功能函數(shù):初始化函數(shù): void Init(hotel_lv *L)(逐級(jí)進(jìn)行初始化) 判斷是否客滿:int full(hotel_lv *L)(主機(jī)進(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)級(jí)別查找,有空床位則入?。┞每屯朔亢瘮?shù):cus* Delete(hotel_lv *L)(逐級(jí)查詢直至床位,有次床位則刪除)查詢旅客信息:void cx_customer(hotel_lv *L)(按名字逐級(jí)順序查詢)統(tǒng)計(jì)旅店當(dāng)前入住人數(shù):void Tongji_cus(hotel_lv *L)(逐級(jí)按房間順序統(tǒng)計(jì))主函數(shù):void main()(調(diào)用各功能函數(shù))六、【數(shù)據(jù)結(jié)構(gòu)】本次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì),做的是旅店管理系統(tǒng),定義了三個(gè)結(jié)構(gòu)體鏈表,給等級(jí)鏈表設(shè)置了一個(gè)頭結(jié)點(diǎn),采用鏈表嵌套方法,等級(jí)鏈表嵌套房間鏈表,房間鏈表再嵌套旅客鏈表。(1)對(duì)旅店結(jié)構(gòu)體定義typedef struct ho

11、tel_lv int lv_num; /旅店等級(jí)號(hào)struct hotel_lv *next; /指向下一等級(jí)struct fangjian *fj_next; /指向房間hotel_lv;(2)房間結(jié)構(gòu)體定義typedef struct fangjian int fj_num; /房間號(hào)int max; /房間的最大床位數(shù)目int mem_num; /房間內(nèi)的當(dāng)前人數(shù)struct fangjian *next; /指向下一房間struct customer *cus_next; /指向旅客fangjian;(3)對(duì)旅客結(jié)構(gòu)體定義typedef struct customer char nam

12、e15; /旅客姓名int age; /旅客年齡int sex; /旅客性別 int lv; /旅客住宿時(shí)的等級(jí)號(hào) int bed_num; /旅客的床位號(hào)int year; /住宿日期 int month; /住宿日期int day; /住宿日期struct customer* next; /指向下一旅客cus;七、【測(cè)試情況】八、【心得】 在開始這個(gè)課題之初,自己感覺對(duì)這個(gè)題目自己應(yīng)該可以很好地完成這以課題,但到后來自己深入的研究了一下發(fā)現(xiàn),這道題目還是很難得至少對(duì)于我來說,自己也曾有放棄的想法,但后來在指導(dǎo)老師的指導(dǎo)和幫助下最終完成了這個(gè)程序。首先,定義的結(jié)構(gòu)體數(shù)組,進(jìn)行編寫。如果用順序

13、表的話對(duì)于不同的旅館是不適用的,因?yàn)楦鱾€(gè)旅館的房間的級(jí)別、房間的個(gè)數(shù)、房間的床位都是不相同的,如果用鏈表就不一樣了,所以改用鏈表來編寫。對(duì)后面的處理在旅客進(jìn)行入住情況中,在床位分配的時(shí)候,因?yàn)闆]有設(shè)置床位的頭結(jié)點(diǎn),所以要對(duì)第一個(gè)床位進(jìn)行特別判斷。然后經(jīng)過多次調(diào)試與修改,最終能實(shí)現(xiàn)旅客的入住情況。旅客退房跟入住時(shí)一樣,在床位回收的時(shí)候,因沒有設(shè)置床位的頭結(jié)點(diǎn),所以要對(duì)第一個(gè)床位進(jìn)行特別判斷。再次對(duì)非空非滿的房間進(jìn)行入住的時(shí)候要進(jìn)行判斷,哪些床位是空的,對(duì)空的床位可以分配給相應(yīng)的旅客。對(duì)退房的旅客同樣需要對(duì)是否是第一位房客和非第一位房客區(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("請(qǐng)輸入房間分為幾個(gè)等級(jí):n"); scanf("%d",&j); /輸入房間共分為幾個(gè)等級(jí)q=L;for(i=1;i<

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

17、號(hào)為1的床位個(gè)數(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("請(qǐng)輸入房間等級(jí)為%d房間號(hào)為%d的床位個(gè)數(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; /等級(jí)鏈表尾指針域賦為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(" 姓名 性別年齡等級(jí)號(hào)房間號(hào)床位號(hào) 入住時(shí)間 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("請(qǐng)輸入旅客所需的房間等級(jí):"); /輸入旅客所需的等級(jí) scanf("%d",&lv); while(l!=NULL) /等級(jí)不為空時(shí) if(l->lv_num!=lv) l=l->next; else /有此等級(jí)時(shí)p1=l->fj_next; while(p1!=NULL) /房間不為空 if(p1->mem_num=p1->max) /是否有空床位p1=p1->next;if(p1=NU

22、LL)getchar(); printf("此等級(jí)為%d的所有房間均無空位n是否愿意更換等級(jí)y/n",lv); scanf("%c",&c); /做出選擇 if(c='y')input(L);elsereturn ;else /進(jìn)行旅客登記 /第一個(gè)結(jié)點(diǎn)要特別判斷if(p1->mem_num=0)s=(cus*)malloc(sizeof(cus);printf("n-n");printf("n 旅客的信息: ");printf("n 請(qǐng)輸入旅客姓名:");scan

23、f("%s",s->name);printf("n 請(qǐng)輸入旅客年齡:");scanf("%d",&(s->age);printf("n 請(qǐng)輸入旅客性別(如:男1:女0):");scanf("%d",&(s->sex);printf("n 請(qǐng)輸入旅客住宿開始日期;”);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 請(qǐng)輸入旅客姓名:");scanf("%s",s->name);printf("n 請(qǐng)輸入旅客年齡:");scanf("%d",&s->age);printf("n 請(qǐng)輸入旅客性別");scanf("%d",&s->sex);printf("n 請(qǐng)輸入旅客住宿開始日期");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("請(qǐng)輸入該退房人房間的等級(jí)號(hào)碼:n");scanf(&qu

27、ot;%d",&lv); /輸入退房人的房間等級(jí)getchar();while(l!=NULL)if(l->lv_num!=lv)l=l->next;else /找到該等級(jí)f=l->fj_next;printf("請(qǐng)輸入該退房人房間的房間號(hào)碼:n"); scanf("%d",&hotel_num); /輸入退房人的房間號(hào)碼getchar();while(f!=NULL)if(f->fj_num!=hotel_num)f=f->next;else /找到該房間p=f->cus_next;q=f-

28、>cus_next;printf("請(qǐng)輸入該退房人的床位號(hào)碼:n"); scanf("%d",&bed_num); /輸入退房人的床位號(hào)碼getchar();while(q!=NULL)if(q->bed_num!=bed_num)q=q->next;else /查找該床位if(bed_num=p->bed_num) /第一結(jié)點(diǎn)特別判斷 /直接打印旅客信息printf("此等級(jí)、此房間、此床位旅客的信息為:n"); printf("該名顧客的信息:n"); printf("

29、姓名t性別t年齡t入住時(shí)間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("此等級(jí)、此房間、此床位旅客的信息為:n"); printf("該名顧客的信息:n"); printf("姓名t性別t年齡t入住時(shí)間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("未找到該床位號(hào),請(qǐng)核實(shí)信息后重新輸入n");if(f=NULL) /如果該等級(jí)的房間為空printf("未找到該房間號(hào),請(qǐng)核實(shí)信息后重新輸入

32、。n");if(l=NULL) /如果等級(jí)鏈表為空printf("未找到該房間等級(jí),請(qǐng)核實(shí)信息后重新輸入。n");void cx_customer(hotel_lv *L) /查詢旅客信息函數(shù)char s15;hotel_lv *l;fangjian *f;cus *t;int flag=0; /設(shè)置標(biāo)志量printf("請(qǐng)輸入要查詢的旅客姓名:n");scanf("%s",s); /輸入要查找旅客的姓名getchar();l=L->next;while(l!=NULL) /等級(jí)不為空時(shí),走向房間f=l->fj_next;while(f!=NULL) /房間不為空時(shí),走向床位 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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論