




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、課程設(shè)計(jì)說明書課程名稱數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)設(shè)計(jì)課題模擬旅館管理系統(tǒng)課 程設(shè)計(jì) 任務(wù)書設(shè)計(jì)題目:模擬旅館管理系統(tǒng)的一個(gè)功能一一床位的分配與回收設(shè)計(jì)內(nèi)容與要求:某旅館有n個(gè)等級的房間,第I等級有a個(gè)房間,每個(gè)等級有bi個(gè)床位(1<i <n)。試模擬旅館管理系統(tǒng)中床位分配和回收的功能,設(shè)計(jì)能為單個(gè)旅客分配床 位,在其離店便回收床位(供下次分配)的算法?;疽?1)輸入數(shù)據(jù)分配時(shí),輸入旅客姓名、年齡、性別、到達(dá)日期和所需房間等級?;厥諘r(shí),輸入房間等級、房問號和床位號。(2)輸出數(shù)據(jù)分配成功時(shí)打印旅客姓名、年齡、到達(dá)日期、房間等級、房間號碼和床位號碼。分配不成功時(shí),如所有等級均無床位,則打印“
2、客滿”信息;如旅客需要的等 級均無空床位,則打印“是否愿意更換等級?”的詢問信息。若旅客愿意更換,則 重新輸入有關(guān)信息,再進(jìn)行分配,否則分配工作結(jié)束。2014 年12月16日課程設(shè)計(jì)評語成績:指導(dǎo)教師:年 月 日【問題描述】某旅館有n個(gè)等級的房間,第I等級有a個(gè)房間,每個(gè)等級有bi個(gè)床位(1<i <n)。試模擬旅館管理系統(tǒng)中床位分配和回收的功能,設(shè)計(jì)能為單個(gè)旅客分 配床位,在其離店便回收床位(供下次分配)的算法?!净疽蟆?1)輸入數(shù)據(jù)分配時(shí),輸入旅客姓名、年齡、性別、到達(dá)日期和所需房間等級。回收時(shí),輸入房間等級、房問號和床位號。(2)輸出數(shù)據(jù)分配成功時(shí)打印旅客姓名、年齡、到達(dá)日
3、期、房間等級、房間號碼和床位號碼。分配不成功時(shí),如所有等級均無床位,則打印“客滿”信息;如旅客需要的 等級均無空床位,則打印“是否愿意更換等級?”的詢問信息。若旅客愿意更換, 則重新輸入有關(guān)信息,再進(jìn)行分配,否則分配工作結(jié)束。【測試數(shù)據(jù)】旅客姓名:w性別:男 年齡:20入住時(shí)間:2015 3 4所需等級:1旅客姓名:d性別:男 年齡:22入住時(shí)間:2015 1 2所需等級:2【模塊劃分】本程序主要?jiǎng)澐譃樗膫€(gè)模塊【算法思想】采用鏈表方式,進(jìn)行旅店的初始化操作。給旅店的等級設(shè)置了頭結(jié)點(diǎn)。該程 序有三條鏈表,等級構(gòu)成一條鏈表,房間構(gòu)成一條鏈表,旅客構(gòu)成一條鏈表。入 住時(shí),先輸入旅客所需的等級,判斷是
4、否有該等級,依次判斷有無房間和床位。 有該等級的房間時(shí),采用尾插法判斷是否有空床位,有就進(jìn)行旅客的入住操作。 床位沒有設(shè)頭結(jié)點(diǎn),所以第一個(gè)床位要進(jìn)行判斷。退房時(shí),需要輸入等級號、房 問號、床位號來進(jìn)行查找,從而完成退房操作。查詢時(shí),通過輸入旅客的姓名進(jìn) 行查詢,存在此人時(shí),打印客人信息。統(tǒng)計(jì)賓館的人數(shù)時(shí),先一個(gè)等級一個(gè)等級 的統(tǒng)計(jì),統(tǒng)計(jì)這個(gè)等級的每一個(gè)房間和每個(gè)房間當(dāng)前的所有人數(shù)。旅客住宿登記旅客住宿是是否有客滿無法入住“否,V否是否更換等否無法入住是否有房間是1否人是否有床位 二一下一個(gè)房間是a1,分配客人打印客人信息返回主菜單Ljl輸入所旅客退房旅客退房是打印客人信息是否退房旅客信息查詢否
5、-4未找到此人打印客人信息【數(shù)據(jù)結(jié)構(gòu)】typedef struct traver/旅客結(jié)構(gòu)體char name20;/ 姓名 int sex; 性別int age; /年齡int g;/旅客住宿的等級int bednum;/ 床號int year;int month;int day;struct traver*next;/ 下一個(gè)旅客 tra;typedef struct hotel/旅店結(jié)構(gòu)體int l_num;旅店等級struct hotel*next;/下一個(gè)等級struct room*r_next;/指向房間hotel;typedef struct room/ 房間結(jié)構(gòu)體int r_n
6、um;/ 房問號int max;/ 房間的最大床位數(shù)int renshu;/房間當(dāng)前的人數(shù)struct room*next;/下一個(gè)房間struct traver*tra_next;/ 指向旅客 room;【測試情況】 房間的初始化。r'CAUsersY su sDe &ktopD e b ugk l.exeT靖輸入房間等級;請輸入房間等級為工的房間個(gè)數(shù):,輸入房間等級為1的房間號為1的床位數(shù).£輸入房間等級為1的房間號為史的床位數(shù); 輸i入房間等級為2的房間個(gè)數(shù).手輸入房間等級為2的房間號為1的床位數(shù); 褊入房間等級為Z的房間號為Z的床位數(shù);旅客入住登記測試CU 三
7、曰 rsa £ii sD e sktopD ebugk l.exeT:統(tǒng)"nhxxkhmhyml更官務(wù)務(wù) 答服服記 1013息 一-房房客客 -S1 7tzu計(jì) -進(jìn)進(jìn)查統(tǒng)取霸爨知請輸客人姓名請輸入性別:L為男,修為女請輸入旅客入住時(shí)間如皿9舊12 i3> = 2015 1 2旅客退房測試記錄回"C;Usersa5U5De5ktopDebugkl,eKe,H一豆一 If魯信片 f房房客客f進(jìn)進(jìn)查統(tǒng)*12 3 4充石*-系有理f務(wù)務(wù) 客服服 游記普心息請輸入處理種類”-外二包丁退房靖床卑務(wù):請輸入該退房式房間的等級號碼工 工輸入該退房人房間的房間號碼;4輸入該
8、退房人的床位號碼; h房為床位驪歿稿間 w12015-3-4昌否與要退房人信息相符? “.】 假房成功!查詢測試統(tǒng)計(jì)測試【心得】這周是我們自己選題做課程設(shè)計(jì)的的時(shí)間,我選的題目是做一個(gè)旅店管理系 統(tǒng),對床位進(jìn)行分配和回收。本程序采用了三個(gè)鏈表,剛拿到這個(gè)題目時(shí),我覺 得很這個(gè)應(yīng)該和學(xué)生管理系統(tǒng)差不多,但是,在對床位的分配時(shí),要采用鏈表。 剛開始我本來想把房間作為一個(gè)數(shù)組,將床位構(gòu)成一個(gè)單鏈表。當(dāng)時(shí),沒有考慮 到房間的等級,最后又想了一下,改變了我原來的想法。將房間的等級、房間、 旅客各構(gòu)成一個(gè)鏈表,采用鏈表的好處是節(jié)約空間,有幾個(gè)人就申請多大的空間, 不會造成很大的浪費(fèi)。在編寫代碼的過程中,先
9、對旅館每個(gè)等級的每個(gè)房間進(jìn)行 初始化,旅客的住宿這個(gè)函數(shù)對于我是最難的,因?yàn)橐扰袛嗦每退璧燃壍姆?間存不存在,存在時(shí),要判斷這個(gè)房間有沒有空床位,沒有空床位時(shí),鏈表的指 針指向下一個(gè)房間。如果沒有這個(gè)等級的房間時(shí),征詢旅客是否要更換房間等級。 在他同意更換的情況下,再重復(fù)上述過程進(jìn)行登記。給旅客進(jìn)行床位分配時(shí),是 按照床位號的大小順序依次分配的。如果這個(gè)房間的所有床位都住滿的話,再給 同等級的另一間房間進(jìn)行分配。在寫退房的函數(shù)時(shí),要輸入等級、房問號、床位 號,找到相應(yīng)的旅客打印旅客信息確認(rèn)正確再進(jìn)行退房操作。統(tǒng)計(jì)住宿的人數(shù)時(shí),統(tǒng)計(jì)同等級的每一個(gè)房間的所有旅客。旅客的鏈表不空時(shí),計(jì)數(shù)器就加加
10、。進(jìn)行編程的時(shí)候,一定要先清楚自己的思路,比如我寫的住宿函數(shù),要入住 就必須先判斷有沒有空房間和空床位,有的話才能進(jìn)行分配。該程序的鏈表比較 多,自己寫的時(shí)候,一個(gè)一個(gè)子函數(shù)寫,寫完調(diào)試好了再進(jìn)行下一個(gè)函數(shù)的編寫。 定義了三個(gè)結(jié)構(gòu)體,一定要清楚每個(gè)結(jié)構(gòu)體中所包含的量,切不可混淆。編寫時(shí) if和else語句比較多,要清楚哪個(gè)與哪個(gè)對應(yīng),每個(gè)循環(huán)結(jié)束的條件。調(diào)試代 碼的時(shí)候有時(shí)就是一個(gè)很小的錯(cuò)導(dǎo)致整個(gè)程序不能運(yùn)行,每當(dāng)程序錯(cuò)誤時(shí)我都非 常焦躁,甚至想到了放棄,但我最終還是一步一步慢慢來,經(jīng)過無數(shù)次的檢查程 序錯(cuò)誤的原因后慢慢懂得了耐心是一個(gè)人成功的必然具備的條件!同時(shí),通過此 次課程設(shè)計(jì)使我了解到
11、數(shù)據(jù)結(jié)構(gòu)可以說是計(jì)算機(jī)里一門基礎(chǔ)課程,它需要把理論變?yōu)樯蠙C(jī)調(diào)試,所以一定要把基礎(chǔ)知識學(xué)扎實(shí)。雖然我現(xiàn)在還不會成功的編寫一 個(gè)完整的程序,但是在看程序的過程中,不斷的上網(wǎng)查資料以及翻閱相關(guān)書籍, 通過不斷的模索,測試,發(fā)現(xiàn)問題,解決問題和在老師的幫助下一步一步慢慢的 正確運(yùn)行程序。在本課程設(shè)計(jì)中,我明白了理論與實(shí)際應(yīng)用相結(jié)合的重要性,并提高了自己 組織數(shù)據(jù)及編寫大型程序的能力。培養(yǎng)了基本的、良好的程序設(shè)計(jì)技能以及合作 能力。這次課程設(shè)計(jì)同樣提高了我的綜合運(yùn)用所學(xué)知識的能力。并對VC有了更深入的了解。數(shù)據(jù)結(jié)構(gòu)是一門實(shí)踐性很強(qiáng)的課程,上機(jī)實(shí)習(xí)是對學(xué)生全面綜合素 質(zhì)進(jìn)行訓(xùn)練的一種最基本的方法,是與課堂
12、聽講、自學(xué)和練習(xí)相輔相成的、必不 可少的一個(gè)教學(xué)環(huán)節(jié)。上機(jī)實(shí)習(xí)一方面能使書本上的知識變“活”,起到深化理解 和靈活掌握教學(xué)內(nèi)容的目的;另一方面,上機(jī)實(shí)習(xí)是對學(xué)生軟件設(shè)計(jì)的綜合能力的 訓(xùn)練,包括問題分析,總體結(jié)構(gòu)設(shè)計(jì),程序設(shè)計(jì)基本技能和技巧的訓(xùn)練。止匕外, 還有更重要的一點(diǎn)是:機(jī)器是比任何教師更嚴(yán)厲的檢查者。因此,在“數(shù)據(jù)結(jié)構(gòu)” 的學(xué)習(xí)過程中,必須嚴(yán)格按照老師的要求,主動(dòng)地、積極地、認(rèn)真地做好每一個(gè) 實(shí)驗(yàn),以不斷提高自己的編程能力與專業(yè)素質(zhì)。【源程序】#include <stdio.h>#include <string.h>#include <malloc.h>
13、;#include <stdlib.h>typedef struct traver旅客結(jié)構(gòu)體char name20;/ 姓名int sex; 性別int age; /年齡int g;/ 旅客住宿的等級int bednum;/ 床號int year;int month;int day;struct traver*next;/下一個(gè)旅客tra;typedef struct hotel/旅店結(jié)構(gòu)體int l_num;/ 旅店等級struct hotel*next;/下一個(gè)等級struct room*r_next;/ 指向房間hotel;typedef struct room/房間結(jié)構(gòu)體i
14、nt r_num;房間號int max;/ 房間的最大床位數(shù)int renshu;/ 房間當(dāng)前的人數(shù)struct room*next;/下一個(gè)房間struct traver*tra_next;/ 指向旅客room;void menu_select()/ 菜單函數(shù)printf(”*旅客管理查詢系統(tǒng) *n"); / 菜單選擇printf("1.進(jìn)行訂房登記服務(wù)n");printf("2.進(jìn)行退房結(jié)賬服務(wù)n");printf("3.查詢旅客信息n");printf("4.統(tǒng)計(jì)旅客信息n");printf(”*n
15、");void Init(hotel*L)/ 旅店等級設(shè)置頭結(jié)點(diǎn)int i,j,k,n;/k 床位數(shù) ,j 房間等級 ,n 房間個(gè)數(shù) 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的房間個(gè)數(shù):n",p-&g
16、t;l_num);scanf("%d",&n);/ 輸入該等級的房間數(shù)if(n=0)/ 不存在該等級的房間數(shù)時(shí)continue;else/ 初始化床位p2=(room*)malloc(sizeof(room);/ 為該等級的房間申請空間p2->r_num=1;printf("請輸入房間等級為d的房間號為1的床位數(shù):n",p->l_num,k);scanf("%d",&(p2->max);/ 房號為 l 的床位數(shù)p2->renshu=0;/ 房間當(dāng)前人數(shù)為 0p->r_next=p2;/ 指
17、向該等級的下一個(gè)房間p3=p2;for(k=2;k<=n;k+)/ 房間號為 2 的房間信息初始化p1=(room*)malloc(sizeof(room);p3->next=p1;p1->r_num=k;printf("請輸入房間等級為 d的房間號為d的床位數(shù):n”,p->l_num,k);scanf("%d",&(p1->max);p1->renshu=0;p3=p1;p3->next=NULL;/ 房間鏈表尾指針為空 q=q->next;/ 指向下一個(gè)等級 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;/ 指向下一個(gè)房間l=l->next;if(!l)return 1;void print(tra*s,room*p)printf(" 輸出旅客信息: n");printf(" 姓 名 %s, 性
19、別 %d, 年 齡 %d, 房 間 等 級 %d, 房 間 號 碼 %d, 床 號 %d, 入 住 時(shí)間 %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");/ 輸入旅客所需要的等級等級不空時(shí)有該等級時(shí)房間不空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;/ 指向下一個(gè)房間if(t=NULL)getchar();printf(" 等級為的所有房間均無空位n 是否愿意更換等級 y/n",g);scanf(&quo
21、t;%c",&c);/ 是否更換等級if(c='y')zhusu(L);else return;else/ 進(jìn)行旅客登記if(t->renshu=0)/ 床位沒有設(shè)置頭結(jié)點(diǎn),所以要進(jìn)行判斷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(" 請輸入旅客入住時(shí)間 (如 1990 12 13):");scanf("%d %d %d",&q1->year,&q1->month,&q1->day);q1->g=g;/ 修改指針t->tra_next=q1;/t->renshu+;/ 房間人數(shù)加 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(" 請輸入旅客入住時(shí)間 :");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");輸入退房人的床位號碼查找該床位因?yàn)榇参粵]有設(shè)置頭結(jié)點(diǎn),所以對于第一個(gè)結(jié)點(diǎ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);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 入住時(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')/做出是否退房的選擇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) / 查詢旅客信息函數(shù) char c15;hotel *l;room *t;tra *s;int flag=0;/ 設(shè)置標(biāo)志量printf(" 請輸入要查詢的旅客姓名: n&q
31、uot;);scanf("%s",c);getchar();如果該房間內(nèi)床位為空如果該等級的房間為空如果等級鏈表為空l=L->next;while(l!=NULL) / 等級不為空時(shí),指向房間 t=l->r_next;while(t!=NULL)/ 房間不為空時(shí),指向床位 if(t->renshu=0) /若此房間當(dāng)前人數(shù)為零,指向下一房間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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 文化創(chuàng)意產(chǎn)業(yè)園區(qū)場地?zé)o償租賃協(xié)議
- 成都企業(yè)股權(quán)變更盡職調(diào)查與代辦合同
- 財(cái)務(wù)部內(nèi)部控制與審計(jì)合同范本
- 常規(guī)量具使用培訓(xùn)
- 氣化爐檢修培訓(xùn)主要內(nèi)容
- 中班組常規(guī)情況匯報(bào)
- 2025年教育事業(yè)統(tǒng)計(jì)培訓(xùn)
- ??谱o(hù)士培訓(xùn)計(jì)劃
- 2025新高二(復(fù)習(xí)課)必修下冊詩歌知識梳理(教師版)
- 腫瘤患者春節(jié)節(jié)前健康宣教
- 浙江杭州市2024-2025學(xué)年高一下學(xué)期6月期末考試英語試題及答案
- 診所院內(nèi)感染管理制度
- 2025-2030年中國經(jīng)顱磁刺激儀行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報(bào)告
- 2025年江蘇高考?xì)v史真題(解析版)
- 動(dòng)火工作方案
- 廣西來賓市2023-2024學(xué)年高二下學(xué)期7月期末考試物理試題(含答案)
- 會員月底抽獎(jiǎng)活動(dòng)方案
- (2025)發(fā)展對象考試試題附及答案
- 2025年互聯(lián)網(wǎng)醫(yī)療平安好醫(yī)生阿里健康京東健康對比分析報(bào)告
- 攀枝花市仁和區(qū)社會招考社區(qū)工作者考試真題2024
- 2025年上海楊浦區(qū)七下英語期末達(dá)標(biāo)檢測試題含答案
評論
0/150
提交評論