版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、模擬旅館管理系統(tǒng)的一個功能-床位的分配與回收一、問題描述1.1問題的描述某旅館有n個等級的房間,第i等級有ai個房間,每個等級有bi床位(1in)。試模擬旅館管理系統(tǒng)中床位分配和回收的功能,設(shè)計能為單個旅客分配床位,在其離店便回收床位(供下次分配)的算法。1.2輸入數(shù)據(jù) 對房間信息進(jìn)行初始化,包括房間的類別、數(shù)量以及房間和床位的計費(fèi)標(biāo)準(zhǔn);分配時,輸入旅客姓名、年齡、性別、到達(dá)日期和所需房間等級;回收時,輸入房間等級、房間號和床位號。1.3輸出數(shù)據(jù)分配成功時打印旅客姓名、年齡、到達(dá)日期、房間等級、房間號碼和床位號碼。分配不成功時,如所有等級均無床位,則打印“客滿”信息;如旅客需要的等級均無空床位
2、,則打印“是否愿意更換等級?”的詢問信息。若旅客愿意更換,則重新輸入有關(guān)信息,再進(jìn)行分配,否則分配工作結(jié)束。二、需求分析2.1需求分析經(jīng)過分析,程序要有以下幾個功能:程序啟動的時候應(yīng)該能夠?qū)β灭^的信息進(jìn)行初始化,并且可以讓不同的進(jìn)行手動初始化;當(dāng)客戶到來的時候,可以登錄客戶的信息,并且根據(jù)旅館的情況和客戶的要求進(jìn)行分配床位;當(dāng)客戶結(jié)賬的時候,可以打印其賬單,并且將床位回收;在進(jìn)行輸入信息的時候,應(yīng)該有檢查錯誤的功能,防止輸入的信息超出正常范圍。三、概要設(shè)計3.1功能模塊的劃分主函數(shù)初始化顯示客戶登記床位分配客戶退房床位回收保存信息退出3.2功能模塊的描述(1)初始化模塊:應(yīng)該包括兩種初始化,第
3、一種是每次打開程序的時候,自動完成對旅館信息的初始化。第二種是由用戶輸入旅館的信息,完成旅館信息的初始化。(2)顯示模塊:顯示模塊是人機(jī)交互的必要模塊,用于顯示主菜單、旅館的當(dāng)前住宿情況、床位分配情況、賬單等等,方便用戶進(jìn)行下一步操作。(3)客戶登記及床位分配模塊:用來登記客戶的信息以及床位的分配。(4)客戶退房及床位回收模塊:用來登記退房客戶的信息以及床位的回收,住宿費(fèi)的計算。(5)保存信息模塊:用來保存旅館的相關(guān)信息,包括手動初始化之后的客房信息,以及退出程序之前的保存工作。(6)退出:退出程序。3.3數(shù)據(jù)結(jié)構(gòu)3.3.1主要采用的數(shù)據(jù)結(jié)構(gòu):鏈表和棧。(1)鏈表adt list 數(shù)據(jù)對象:d
4、 ai | ai elemset, i=1,2,.,n, n0 數(shù)據(jù)關(guān)系:r1 | ,d, i=2,.,n 基本操作:initlist( &l )操作結(jié)果:構(gòu)造一個空的線性表 l 。destroylist( &l )初始條件:線性表 l 已存在。操作結(jié)果:銷毀線性表 l 。listempty( l )初始條件:線性表l已存在。操作結(jié)果:若 l 為空表,則返回 true,否則返回 false。listlength( l )初始條件:線性表 l 已存在。操作結(jié)果:返回 l 中元素個數(shù)。priorelem( l, cur_e, &pre_e )初始條件:線性表 l 已存在。操作結(jié)果:若 cur_e
5、是 l 中的數(shù)據(jù)元素,則用 pre_e 返回它的前驅(qū),否則操作失敗,pre_e 無定義。nextelem( l, cur_e, &next_e )初始條件:線性表 l 已存在。操作結(jié)果:若 cur_e 是 l 中的數(shù)據(jù)元素,則用 next_e 返回它的后繼,否則操作失敗,next_e 無定義。getelem( l, i, &e )初始條件:線性表 l 已存在,1ilengthlist(l)。操作結(jié)果:用 e 返回 l 中第 i 個元素的值。locateelem( l, e, compare( ) )初始條件:線性表 l 已存在,compare( ) 是元素判定函數(shù)。操作結(jié)果:返回 l 中第1個
6、與 e 滿足關(guān)系 compare( ) 的元素的位序。若這樣的元素不存在,則返回值為0。listtraverse(l, visit( )初始條件:線性表 l 已存在,visit( ) 為元素的訪問函數(shù)。操作結(jié)果:依次對 l 的每個元素調(diào)用函數(shù) visit( )。一旦 visit( ) 失敗,則操作失敗。clearlist( &l )初始條件:線性表 l 已存在。操作結(jié)果:將 l 重置為空表。putelem( &l, i, &e )初始條件:線性表l已存在,1ilengthlist(l)。操作結(jié)果:l 中第 i 個元素賦值同 e 的值。listinsert( &l, i, e )初始條件:線性表
7、 l 已存在,1ilengthlist(l)+1。操作結(jié)果:在 l 的第 i 個元素之前插入新的元素 e,l 的長度增1。listdelete( &l, i, &e )初始條件:線性表 l 已存在且非空,1ilengthlist(l)。操作結(jié)果:刪除 l 的第 i 個元素,并用 e 返回其值,l 的長度減1。 adt list(2) 棧adt stack 數(shù)據(jù)對象:dai| aielemset, i=1,2,.,n, n0 數(shù)據(jù)關(guān)系:r1 | ai-1, ai-d, i=2,.,n 約定an端為棧頂,a1端為棧底?;静僮鳎篿nitstack(&s)操作結(jié)果:構(gòu)造一個空棧 s。destroys
8、tack(&s)初始條件:棧 s 已存在。操作結(jié)果:棧 s 被銷毀。clearstack(&s)初始條件:棧 s 已存在。操作結(jié)果:將 s 清為空棧。stackempty(s)初始條件:棧 s 已存在。操作結(jié)果:若棧 s 為空棧,則返回true,否則返回false。stacklength(s)初始條件:棧 s 已存在。操作結(jié)果:返回棧 s 中元素個數(shù),即棧的長度。gettop(s, &e)初始條件:棧 s 已存在且非空。操作結(jié)果:用 e 返回s的棧頂元素。push(&s, e)初始條件:棧 s 已存在。操作結(jié)果:插入元素 e 為新的棧頂元素。pop(&s, &e)初始條件:棧 s 已存在且非空
9、。操作結(jié)果:刪除 s 的棧頂元素,并用 e 返回其值。stacktraverse(s, visit( )初始條件:棧 s 已存在且非空,visit( )為元素的訪問函數(shù)。操作結(jié)果:從棧底到棧頂依次對s的每個元素調(diào)用函數(shù)visit( ),一旦visit( )失敗,則操作失敗。 adt stack四、詳細(xì)設(shè)計4.1具體數(shù)據(jù)結(jié)構(gòu)(1)每級房間的頭結(jié)點(diǎn)采用一個順序表s=(),其中,順序存放第1n等級房間的頭結(jié)點(diǎn);存放內(nèi)容如下所示:可以分配的男床位總數(shù)可以分配的女床位總數(shù)000(2)每級房間的頭結(jié)點(diǎn)結(jié)構(gòu)如下圖:可以分配的男床位數(shù)可以分配的女床位數(shù)aibipricettoprlinktypedef str
10、uct roomhead /每個級別的房間的頭結(jié)點(diǎn)結(jié)構(gòu)體int women_num; /每個級別可以分配的女床數(shù)目int men_num; /每個級別可以分配的男床數(shù)目int a; /每個級別含有的房間數(shù)目,頭結(jié)點(diǎn)此處用來存儲房間級別數(shù)目int b; /每個房間含有的床位數(shù)int price; /每一級別房間的價格room * ttop; /空房棧的棧頂room * rlink; /指向已住房間的棧頂 roomhead;(3)房間節(jié)點(diǎn)的結(jié)構(gòu):性別房間號剩余空床數(shù)目btopbtop1rilnktypedef struct room /房間信息結(jié)構(gòu)體int sex; /非配的性別 0表示房空 1代
11、表分配/給了男性 2代表分配給了女性int room_num; /房間號碼int bed_num; /這個房間里還有的空床位數(shù)目bed * btop; /指向這個房間里的空床位棧結(jié)構(gòu)bed * btop1; /已經(jīng)住人的床位棧結(jié)構(gòu),用來和客戶進(jìn)/行連接struct room * rlink; /指向下一個房間 room;(4)床位節(jié)點(diǎn)的結(jié)構(gòu):床位號對應(yīng)的客戶信息的地址blinktypedef struct bed /床位的信息,用來構(gòu)成空床的棧結(jié)構(gòu)int num; /床位的號碼consumer * data; /每個床位對應(yīng)的客戶信息struct bed * blink; /指向下一個空床位
12、bed;(5)客戶節(jié)點(diǎn)的結(jié)構(gòu):姓名年齡性別日期等級房間號床位號typedef struct consumer /客戶的信息char name20; /客戶姓名int age; /客戶年齡char sex; /客戶性別 w-women女 m-men男int data3; /日期int rank; /住房的等級int room_num;/分配好的房間號碼int bed_num; /分配好的床位號碼 consumer;4.2程序流程圖(1) void menu()主菜單打印函數(shù)1初始化戶信息入住選項(xiàng)退房選項(xiàng)保存住宿情況開始主菜單界面輸入選擇(1-6)初始化戶信息2住宿情況3456(2)char in
13、itiate1()初始化函數(shù)1,用來每次重啟之后的初始化開始打開data.data文件yesno讀取文件信息aj,bj跳回主菜單,選擇1,存儲信息初始化s+j頭結(jié)點(diǎn)信息初始化s+j等級房間信息初始化s+j等級房間床位信息j+janb初始化旅館住房信息表結(jié)束(3)void initiate2()初始化函數(shù)2,用來用戶的手動初始化開始輸入房間級別rank_numjrank_numt初始化s指針數(shù)組初始化j等級頭指針tfjb)tnbftf床位初始化,空床位入棧打印初始化信息調(diào)用save()函數(shù)保存結(jié)束(4)char checkin();/登記函數(shù)開始調(diào)用getin(p)函數(shù),p-sexp-sexs-
14、women_num=0s-men_num=0flag1調(diào)用checkin()結(jié)束該房間出空房棧入住房棧中打印分配表flag1該房間出空房棧入住房棧中flag1調(diào)用checking()flag1結(jié)束tm2121122tw輸入flag1輸入flag1輸入flag1輸入flag(5)void getin( consumer * p)客戶信息的輸入開始輸入客戶的信息存儲信息到data.data文件姓名性別年齡要求房間等級結(jié)束(6) print1( consumer * p)此打印函數(shù)用于打印用戶剛剛登陸的信息,以確認(rèn)輸入信息是否正確開始consumer *pp-sex男客戶信息表女客戶信息表輸入inf
15、flag調(diào)用getin(p)結(jié)束mw214.3代碼描述(1)主函數(shù)main()char s; /定義n,來獲取用戶的操作信息initiate1(); /每次重新啟動的時候初始化客房信息while(1)menu(); /打印主菜單scanf(%d,&s); /獲取用戶的操作信息while(s4|s1)printf(您輸入的信息有錯,請重新輸入您要進(jìn)行的操作:);scanf(%d,&s);switch(s)case 1: initiate2(); /調(diào)用初始化客房信息函數(shù),由用戶輸入/房間級別數(shù)目n,break; /還有每一個級別所包含的房間數(shù)ai/以及每個房間包含的床位bicase 2: pri
16、ntdata(); /調(diào)用住宿登陸信息函數(shù)break;case 3: checkin(); /調(diào)用退房函數(shù)break;case 4: checkout(); /調(diào)用退房函數(shù)break;case 5: save(); /保存信息break;case 6: exit(0);break;(2)初始化自動初始化char initiate1()file * fp; /定義文件工作指針,指向data.datfile * fp1; /定義文件工作指針,指向consumer.datconsumer * con;int k,k1,j,rank_num,women_num,men_num; /循環(huán)變量和臨時變量i
17、nt a4,b4,price4; /存儲臨時變量int m,n; /循環(huán)變量,循環(huán)技術(shù)的時候使用room * p; /工作指針,用來銜接指針之間的連接工作bed * q; /工作指針,用來銜接指針之間的連接工作if(fp=fopen(data.dat,r)=null|fscanf(fp,%d,&rank_num)=eof) /防止打開文件時出錯printf(您是首次使用,請您按enter鍵進(jìn)入主菜單后輸入1并初始化客房信息!n);/提示信息getchar(); /等待讀取enter鍵return 0; /返回0else /正常打開之后,讀出各個數(shù)據(jù)for(k=1;ka=rank_num; /將
18、房間級別的數(shù)目存儲到頭結(jié)點(diǎn)的a中s-b=0; /默認(rèn)為0s-men_num=men_num; /總的男床位可分配數(shù)目s-women_num=women_num; /總的女床位可分配數(shù)目s-price=0; /默認(rèn)為0值s-ttop=null; /不用的指針初始化為空值s-rlink=null; /不用的指針賦空值s-room_num=0;for(j=1;jwomen_num=women_num;/每一級房間可以分配的女床總數(shù)(s+j)-men_num=men_num;/每一級房間可以分配的男床總數(shù)(s+j)-a=aj; /輸入每一級的房間數(shù)目(s+j)-b=bj; /輸入每一個房間的床位數(shù)目(
19、s+j)-price=pricej; /輸入房間間信息fscanf(fp1,%d,&m); /剩余的空房間數(shù)目(s+j)-room_num=m;if(m=0)(s+j)-ttop=null; /若沒有空房間,空房棧的棧頂賦空值if(m!=0) /若不為空值,建立空房棧(s+j)-ttop=(room *)malloc(sizeof(room);/分配空間p=(s+j)-ttop; /利用p來銜接下面的建棧過程p-sex=0; /初始化為0,代表為空房間fscanf(fp1,%d,&p-room_num) /對房間進(jìn)行編號,如100p-bed_num=(s+j)-b; /初始化房間可以分配的床位
20、數(shù)目/初始化床位信息p-btop=(bed *)malloc(sizeof(bed);/建立空床的棧結(jié)構(gòu)q=p-btop; /利用q來銜接建立棧結(jié)構(gòu)的過程q-num=1; /床位號碼q-data=null; /初始床位對應(yīng)的客戶信息為空q-blink=null;for(n=1;nblink=(bed *)malloc(sizeof(bed); /分配存儲空間q=q-blink; /將工作指針q后移q-num=n+1; /房間號碼q-data=null; /初始的客戶信息為空q-blink=null; /最后一個指針賦空值p-rlink=null; /最后一個指針賦空值for(k=1;krlin
21、k=(room *)malloc(sizeof(room);/分配存儲空間p=p-rlink; /將工作指針p后移p-sex=0; /初始房間為空fscanf(fp1,%d,&p-room_num);/對房間進(jìn)行編號,如100,101,102,202等等p-bed_num=(s+j)-b; /房間可以分配的床位數(shù)目p-btop=(bed *)malloc(sizeof(bed);/建立空床的棧結(jié)構(gòu)q=p-btop; /利用q來銜接建立棧結(jié)構(gòu)的過程q-num=1; /床位號碼q-data=null; /初始床位對應(yīng)的床位信息為空q-blink=null;for(n=1;nb;n+)/對每一個床位
22、進(jìn)行分配存儲空間并進(jìn)行初始化信息q-blink=(bed *)malloc(sizeof(bed); /分配存儲空間q=q-blink; /講工作指針q后移q-num=n+1; /房間號碼q-data=null; /初始的客戶信息為空q-blink=null; /最后一個指針賦空值p-btop1=null; /最后一個指針賦空值p-rlink=null; /最后一個指針賦空值if(s+j)-a-m=0) /如果全是空房間,那么已住房間棧為空(s+j)-rlink=null; /棧頂賦空值if(s+j)-a-m!=0) /如果有已住的房間,建立已住房間的棧結(jié)構(gòu)(s+j)-rlink=(room
23、*)malloc(sizeof(room);/對于每一級房間,構(gòu)建一個已住房間棧結(jié)構(gòu)p=(s+j)-rlink; /利用p來銜接下面的建棧過程fscanf(fp1,%d,%d,%d,&(p-sex),&(p-room_num),&(p-bed_num);/每個房間的性別,房間號,現(xiàn)有的空床位數(shù)目if(p-bed_num=0) /如果空床位數(shù)目為0,空床位棧寫空p-btop=null; /棧頂賦空值if(p-bed_num!=0) /如果空床位不為0,建立空床棧結(jié)構(gòu)p-btop=(bed *)malloc(sizeof(bed);/建立空床的棧結(jié)構(gòu)q=p-btop; /利用q來銜接建立棧結(jié)構(gòu)的過
24、程fscanf(fp1,%d,&q-num); /床位號碼q-data=null; /初始床位對應(yīng)的客戶信息為空for(n=1;nbed_num;n+)q-blink=(bed *)malloc(sizeof(bed); /分配空間q=q-blink; /指針后移fscanf(fp1,%d,&q-num); /床位號碼q-data=null; /初始床位對應(yīng)的客戶信息為空q-blink=null; /最后一個指針賦空值if(s+j)-b-p-bed_num=0) /如果非空床位數(shù)目為0,賦空值p-btop1=null; /賦空值if(s+j)-b-p-bed_num!=0)/如果不為0,就要建
25、立非空床位的棧結(jié)構(gòu)p-btop1=(bed *)malloc(sizeof(bed);/建立非空床的棧結(jié)構(gòu)q=p-btop1; /利用q來銜接建立棧結(jié)構(gòu)的過程con=(consumer * )malloc(sizeof(consumer);/分配空間fscanf(fp1,%s%d,%d-%d-%d,%d,con-name,&(con-age),&(con-data0),&(con-data1),&(con-data2),&(con-bed_num);/讀出信息switch(p-sex) /初始化客戶的性別case 1 : con-sex=m;break;case 2: con-sex=w;br
26、eak;con-rank=j; /所住的房間等級con-room_num=p-room_num; /所住的房間號碼q-num=con-bed_num; /給床位號賦初值q-data=con; /床位指向?qū)?yīng)的客戶q-blink=null; /指針賦空值for(n=1;nb-p-bed_num);n+)/其他的已經(jīng)住人的床位初始化q-blink=(bed *)malloc(sizeof(bed); /分配存儲空間q=q-blink; /工作指針后移con=(consumer * )malloc(sizeof(consumer);/為客戶的指針分配存儲空間fscanf(fp1,%s%d,%d-%d
27、-%d,%d,con-name,&(con-age),&(con-data0),&(con-data1),&(con-data2),&(con-bed_num);/讀取信息switch(p-sex) /初始化客戶的性別case 1 : con-sex=m;break;case 2: con-sex=w;break;con-rank=j; /初始化客戶住的房間等級con-room_num=p-room_num; /初始化客戶住的房間號碼q-num=con-bed_num;/初始化床位號碼q-data=con; /床位指向客戶q-blink=null; /最后一個指針賦空值for(k1=1;k1a
28、-m;k1+)p-rlink=(room *)malloc(sizeof(room);/對于每一級房間,構(gòu)建一個已住房間棧結(jié)構(gòu)p=p-rlink; /利用p來銜接下面的建棧過程fscanf(fp1,%d,%d,%d,&(p-sex),&(p-room_num),&(p-bed_num);/每個房間的性別,房間號,現(xiàn)有的空床位數(shù)目if(p-bed_num=0) /如果空床位數(shù)目為0,空床位棧寫空p-btop=null; /棧頂賦空值if(p-bed_num!=0) /如果空床位不為0,建立空床棧結(jié)構(gòu)p-btop=(bed *)malloc(sizeof(bed);/建立空床的棧結(jié)構(gòu)q=p-bto
29、p; /利用q來銜接建立棧結(jié)構(gòu)的過程fscanf(fp1,%d,&q-num); /床位號碼q-data=null; /初始床位對應(yīng)的客戶信息為空for(n=1;nbed_num;n+)q-blink=(bed *)malloc(sizeof(bed); /分配空間q=q-blink; /指針后移fscanf(fp1,%d,&q-num); /床位號碼q-data=null; /初始床位對應(yīng)的客戶信息為空q-blink=null; /最后一個指針賦空值if(s+j)-b-p-bed_num=0) /如果非空床位數(shù)目為0,賦空值p-btop1=null; /賦空值if(s+j)-b-p-bed_
30、num!=0)/如果不為0,就要建立非空床位的棧結(jié)構(gòu)p-btop1=(bed *)malloc(sizeof(bed);/建立非空床的棧結(jié)構(gòu)q=p-btop1; /利用q來銜接建立棧結(jié)構(gòu)的過程con=(consumer * )malloc(sizeof(consumer);/分配空間fscanf(fp1,%s%d,%d-%d-%d,%d,con-name,&(con-age),&(con-data0),&(con-data1),&(con-data2),&(con-bed_num);/讀出信息switch(p-sex) /初始化客戶的性別case 1 : con-sex=m;break;cas
31、e 2: con-sex=w;break;con-rank=j; /所住的房間等級con-room_num=p-room_num; /所住的房間號碼q-num=con-bed_num; /給床位號賦初值q-data=con; /床位指向?qū)?yīng)的客戶q-blink=null; /指針賦空值for(n=1;nb-p-bed_num);n+)/其他的已經(jīng)住人的床位初始化q-blink=(bed *)malloc(sizeof(bed); /分配存儲空間q=q-blink; /工作指針后移con=(consumer * )malloc(sizeof(consumer);/為客戶的指針分配存儲空間fsca
32、nf(fp1,%s%d,%d-%d-%d,%d,con-name,&(con-age),&(con-data0),&(con-data1),&(con-data2),&(con-bed_num);/讀取信息switch(p-sex) /初始化客戶的性別case 1 : con-sex=m;break;case 2: con-sex=w;break;con-rank=j; /初始化客戶住的房間等級con-room_num=p-room_num; /初始化客戶住的房間號碼q-num=con-bed_num;/初始化床位號碼q-data=con; /床位指向客戶q-blink=null; /最后一個
33、指針賦空值p-rlink=null; /最后一個指針賦空值system(cls); /清屏并打印剛剛用戶輸入的信息printf(成功初始化旅館客房信息,請按enter鍵繼續(xù)!);getchar();return 1;手動初始化void initiate2()int rank_num; /用來存儲房間級別數(shù)目int j; /循環(huán)變量,循環(huán)計數(shù)的時候/使用system(cls); /清除屏幕printf(請輸入您的旅館中的房間等級的數(shù)目:); /提醒用戶/的信息scanf(%d,&rank_num); /輸入房間級別的數(shù)目s=(roomhead *)malloc(rank_num+1)*sizeo
34、f(roomhead); /為s分配存儲空間s-a=rank_num; /將房間級別的數(shù)目存儲/到頭結(jié)點(diǎn)的a中for(j=1;ja); /輸入每一級的房間數(shù)目printf(請輸入第%d級每間房間中的床位數(shù)目:,j);scanf(%d,&(s+j)-b); /輸入每一個房間的床位數(shù)目printf(請輸入每一級房間的單價(如30元,請輸入30):);scanf(%d,&(s+j)-price); /輸入單間信息(s+j)-women_num=(s+j)-a)*(s+j)-b);/可分配女床總數(shù)(s+j)-men_num=(s+j)-a)*(s+j)-b);/可分配的男床數(shù)目s-women_num+
35、=(s+j)-women_num;/改變總數(shù)目s-men_num+=(s+j)-men_num; /改變總數(shù)目(s+j)-ttop=(room *)malloc(sizeof(room);/建立空房棧p=(s+j)-ttop; /開始建棧p-sex=0; /初始化為0,代表為空房間p-room_num=j*100; /對房間進(jìn)行編號,如100,101,102,202p-bed_num=(s+j)-b; /初始化房間可以分配的床位數(shù)目p-btop=(bed *)malloc(sizeof(bed);/建立空床的棧結(jié)構(gòu)q=p-btop; /利用q來銜接建立棧結(jié)構(gòu)的過程q-num=0; /床位號碼q
36、-data=null; /初始床位對應(yīng)的床位信息為空for(n=1;nb;n+)/對每一個床位進(jìn)行分配存儲空間并進(jìn)行初始化信息q-blink=(bed *)malloc(sizeof(bed); /分配存儲空間q=q-blink; /講工作指針q后移q-num=n; /房間號碼q-data=null; /初始的客戶信息為空for(m=1;ma;m+)/對每一個房間進(jìn)行分配存儲空間,然后初始化信息p-rlink=(room *)malloc(sizeof(room);/分配存儲空間p=p-rlink; /將工作指針p后移p-sex=0; /初始房間為空p-room_num=j*100+m; /房
37、間號碼p-bed_num=(s+j)-b; /房間可以分配的床位數(shù)目p-btop=(bed *)malloc(s+j)-b)*sizeof(bed);/構(gòu)建空床的棧結(jié)構(gòu)system(cls); /清屏并打印剛剛用戶輸入的信printdata();save();printf(請按任意鍵繼續(xù)!);getchar();getchar();(3)顯示主菜單的顯示登記表信息的打印,用于用戶確認(rèn)輸入信息正確void print1( consumer * p)char inf;/讀取用戶是否確認(rèn)信息正確switch(p-sex)case m:case w:;printf(請您確認(rèn)信息是否正確,正確輸入1/錯
38、誤輸入2n);scanf(%d,&inf);/讀取用戶是否確認(rèn)if(inf=2)system(cls);/若果錯誤,那么重新輸入getin(p);system(cls);/輸入完成以后重新打印信息,等待用戶的確認(rèn)print1(p);當(dāng)前旅館住宿情況打印(4)客戶登記及客房的分配(4)客戶住宿及床位的分配登記及床位的分配char checkin()consumer * p; /定義一個變量來存儲客戶的信息room * q; /用于房間的遍歷bed * r; /用于床位的分配char flag1; /用于最后讀取用戶是否要繼續(xù)錄入信息p=(consumer *)malloc(sizeof(cons
39、umer);/指針定義以后沒有分配存儲空間,所以要分配存儲空間system(cls);/清理屏幕getin(p); /讀取客戶的信息system(cls); /清理屏幕print1(p); /打印客戶的信息,等待用戶確認(rèn)是否輸入正確system(cls);switch(p-sex) /首先檢查還有沒有符合條件的床位case w: if(s-women_num=0) /如果是女性,判斷女床是否有位置printf(對不起,已經(jīng)沒有可以分配的女床位!n);/提示信息printf(是否繼續(xù)錄入等級信息:(若繼續(xù),輸入1;若不繼續(xù),輸入2));scanf(%d,&flag1);/讀入用戶是否繼續(xù)進(jìn)行登記
40、信息if(flag1=1)checkin(); /繼續(xù)登記信息if(flag1=2) /退出登記信息函數(shù)return 0;break;case m: if(s-men_num=0)/如果是男性,判斷男床是否有位置printf(對不起,已經(jīng)沒有可以分配的男床位!n);printf(是否繼續(xù)錄入等級信息:(若繼續(xù),輸入1;若不繼續(xù),輸入2));scanf(%d,&flag1);/讀入用戶是否繼續(xù)進(jìn)行登記信息if(flag1=1)checkin(); /繼續(xù)登記信息if(flag1=2) /退出登記信息函數(shù)return 0;break;switch(p-sex)case m: if(s+p-rank
41、)-men_num=0)/檢查這個等級的房間還有沒有可以分配的房間printf(對不起,你要的%d等級房間已經(jīng)沒有可分配的男床位!); printf(您是否接受更換房間等級?接受請輸入1/拒絕請輸入2:);scanf(%d,&flag1);/讀入用戶是否接受更換等級if(flag1=1)checkin(); /重新輸入信息if(flag1=2) /結(jié)束床位分配return 0; /退出函數(shù),返回0,分配失敗break;case w: if(s+p-rank)-women_num=0)/檢查有沒有可以分配的床位printf(對不起,你要的%d等級房間已經(jīng)沒有可分配的女床位!);printf(您是
42、否接受更換房間等級?接受請輸入1/拒絕請輸入2:);scanf(%d,&flag1);/讀入用戶是否接受更換等級if(flag1=1)checkin(); /重新輸入信息if(flag1=2) /結(jié)束床位分配return 0;/退出函數(shù),分配失敗break;switch(p-sex)case m:for(q=(s+p-rank)-rlink;q!=null;q=q-rlink)/先遍歷已經(jīng)有人住的房間還有沒有就可以分配的床位if(q-sex=1&q-bed_num!=0)/如果檢測到符合條件的房間r=q-btop; /空床位出棧,存儲到r中q-btop=q-btop-blink; /棧頂下移一個q-bed_num-; /將這個房間的可以分配到床位減1(s+p-rank)-men_num-; /將這個等級可以分配的床位數(shù)目減1s-men_num-; /將總的可以分配的床位數(shù)目減1r-blink=q-btop1; /將這個已經(jīng)住人的床位入棧q-btop1=r; /棧頂上移r-data=p; /此床位指向客戶p-bed_num
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 烘焙店廚師招聘合同
- 漁業(yè)養(yǎng)殖機(jī)械費(fèi)施工合同
- 專利權(quán)抵押還款合同
- 燃?xì)夤狙b修施工合同范本
- 機(jī)場消防設(shè)施安裝合同模板
- 石油公司卷簾門安裝合同
- 招投標(biāo)代理機(jī)構(gòu)服務(wù)筆記
- 合同法第112條規(guī)定內(nèi)容
- 汽車質(zhì)押合同范本
- 企業(yè)司機(jī)合作合同范例
- 艾灸基礎(chǔ)理論知識單選題100道及答案解析
- 職業(yè)教育國家在線課程申報書
- 國開2024年秋《機(jī)電控制工程基礎(chǔ)》形考任務(wù)2答案
- DL-T5434-2021電力建設(shè)工程監(jiān)理規(guī)范
- (高清版)TDT 1055-2019 第三次全國國土調(diào)查技術(shù)規(guī)程
- 天堂旅行團(tuán)讀書分享
- 自行招用保安員單位備案申請材料
- 核反應(yīng)堆復(fù)習(xí)題目
- 化工企業(yè)重大風(fēng)險清單及控制措施
- 上海地區(qū)空調(diào)逐時負(fù)荷自動計算表
- 75名“集體工”齊訴大唐電廠
評論
0/150
提交評論