模擬旅館管理系統的一個功能——床位的分配與回收_第1頁
模擬旅館管理系統的一個功能——床位的分配與回收_第2頁
模擬旅館管理系統的一個功能——床位的分配與回收_第3頁
模擬旅館管理系統的一個功能——床位的分配與回收_第4頁
模擬旅館管理系統的一個功能——床位的分配與回收_第5頁
已閱讀5頁,還剩13頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、實 驗 報 告課程名稱 數據結構 實驗名稱 床位的分配與回收 實驗類型 _ 綜合型 實驗地點 計405機房 實驗日期指導教師 魏海平 專業 軟件工程 班級 軟件1601 學號 1611030102 姓名 寇春雷 遼寧石油化工大學計算機與通信工程學院數據結構實驗報告評分表項目要求分數有無項目()得分預習報告(30分)實驗目的明確5實驗內容理解透徹5實驗方案設計完整合理程序總體框架設計完整10完成相關輔助代碼5測試方案合理5實驗過程(30分)發現問題5問題的分析15問題的解決方法10實驗報告(20分)內容翔實無缺漏5如實記錄實驗過程10撰寫規整5實驗總結(10分)實驗結果的分析5按照結果對原實驗方

2、案的改進意見5實驗體會(10分)實驗的收獲5實驗內容的發散考慮5總分實 驗 四 模擬旅館管理系統的一個功能床位的分配與回收題目:模擬旅館管理系統的一個功能床位的分配與回收1 問題描述:某旅館有n個等級的房間,第I等級有 個房間,每個等級有個床位(1In)。試模擬旅館管理系統中床位分配和回收的功能,設計能為單個旅客分配床位,在其離店便回收床位(供下次分配)的算法。 基本要求(1)輸入數據分配時,輸入旅客姓名、年齡、性別、到達日期和所需房間等級。回收時,輸入房間等級、房間號和床位號。2)輸出數據分配成功時打印旅客姓名、年齡、到達日期、房間等級、房間號碼和床位號碼。分配不成功時,如所有等級均無床位,

3、則打印“客滿”信息;如旅客需要的等級均無空床位,則打印“是否愿意更換等級?”的詢問信息。若旅客愿意更換,則重新輸入有關信息,再進行分配,否則分配工作結束。 實現提示(1)數據結構主要采用順序結構鏈接結構的線性表及堆棧。a) 每個房間用一個如下所示的具有五個字段的結點(房結點)表示:性別房間號現有空床數BTOPRLINK其中,性別:0表示房間為空狀態 1表示房間分配給女旅客 2表示房間分配給男旅客現有空床數:數據在0 之間,其中是第i等級一個房間 的床位數,當現有空床數為時,表示房間為空;為0時,表示房間滿。RLINK:當房間空時,用作空房棧的連接;當房間不空時,指向下一個房結點。BTOP:指向

4、該房間的空床號棧棧頂。一個房間對應一個順序表示的空床號棧。棧的容量為,棧中存放空床號。分配時,從棧頂取出空床號,棧頂下移(BTOP=BTOP+1);回收時,棧頂上移(BTOP=BTOP-1),將回收的空床號填入棧頂。每一個等級中的空房間構成一個空房棧;已住旅客的房間構成一個鏈棧(簡稱房鏈),其頭結點結構如下: 可分配女床位總數可分配男床位總數TTOPRLINK其中:第i等級中房間總數 第i等級中每個房間的床位數可分配男、女床位的總數的初值等于* ,因為開始時所有房間和床位既可以分配給男旅客,也可以分配給女旅客。當在房鏈中分配一個床位給男(女)旅客,床位總數應減1;當從空房棧中取出一個房間作為男

5、(女)旅客房間時,則可分配女(男)床位總數應減,當回收一個男(女)床位時,則可分配男(女)床位總數應加1;當回收一個男(女)空房至空房棧時,則可分配女(男)床位總數應加。TTOP:指向本級空房棧棧頂,當無空房間時,TTOP=(NIL)。RLINK:指向本級房鏈第一個頂點,當房鏈為空時,RLINK=(NIL)順序表s=(),其中,順序存放第1n等級房間的頭結點; 存放內容如下所示:全店可分配女床總數全店可分配女床總數00初始時,全店可分配男、女床總數相同,均為 ,在分配或回收時,對各等級可分配男(女)床位總數處理的同時也要對全店可分配男(女)床總數作相應處理,當全店可分配男(女)床總數等于零時,

6、表示客滿。(2)需求分析經過分析,程序要有以下幾個功能:a. 程序啟動的時候應該能夠對旅館的信息進行初始化,并且可以讓不同的進行手動初始化;b. 當客戶到來的時候,可以登錄客戶的信息,并且根據旅館的情況和客戶的要求進行分配床位;c. 當客戶結賬的時候,可以打印其賬單,并且將床位回收;d. 在進行輸入信息的時候,應該有檢查錯誤的功能,防止輸入的信息超出正常范圍.4、概要設計主函數功能模塊的劃分退出保存信息客戶退房床位回收客戶登記床位分配顯示初始化功能模塊的描述:1.信息的初始化:應該包括兩種初始化,第一種是每次打開程序的時候,自動完成對旅館信息的初始化。第二種是由用戶輸入旅館的信息,完成旅館信息

7、的初始化。2.顯示模塊.顯示模塊是人機交互的必要模塊,用于顯示主菜單、旅館的當前住宿情況、床位分配情況、賬單等等,方便用戶進行下一步操作。3.客戶登記及床位分配模塊:用來登記客戶的信息以及床位的分配。4.客戶退房及床位回收模塊:用來登記退房客戶的信息以及床位的回收。5.保存信息模塊:用來保存旅館的相關信息,包括手動初始化之后的客房信息,以及退出程序之前的保存工作。6.退出:退出程序。4.源程序代碼:#include "stdafx.h"#include <iostream>using namespace std;#include<conio.h>/數

8、據的輸入和輸出#include<stdlib.h>#include<string>#include <cstring>#include <stdio.h>#define N 7/房間等級#define NUM 4/每個等級的房間數#define M 2/每個房間的床位數typedef struct customer/顧客結構string name;int age;int sex;int day,month,year;/到期時間int bednumber;/該顧客的床號customer;typedef struct room/房間結構custome

9、r personM; int roomgrade;/該房間的房間等級int roomnumber;/該房間的房間號int peoplein;/該房間的房間入住人數int bedM;/該房間的總床位struct room *next;/結構體指針Room;Room *creat()/建立房間的鏈表Room *head,*p,*q;int i=1,j,k,m=0,h;head=new(Room);/生成頭結點head->next=NULL;q=head;/正位序插在表尾while (i<=N)/從第一等級開始一一建立單鏈表for(j=1;j<=NUM;j+)/進入該等級,建立不同

10、房間p=new(Room);for(k=0;k<M;k+)/每個房間的不同顧客信息初始化p->personk.sex=-1;/表示一個人也沒有p->personk.age=0;/客人信息置為0p->personk.day=0;p->personk.month=0;p->personk.year=0;/名字無需初始化p->personk.bednumber=0;/該顧客的床號p->roomgrade=i;/該房間的基本信息初始化p->roomnumber=j;/房間號p->peoplein=0;/入住人數for(h=0;h<M;h

11、+) p->bedh=0;/0表示該床未住人,1表示住人q->next=p;q=q->next;i+; q->next=NULL;return(head);void init(Room *head)/初始化Room *p=head;int i,k;/p=head;while(p!=NULL) for(k=0;k<M;k+)/該房間的M個顧客初始化p->personk.age=0;p->personk.day=0;p->personk.month=0;p->personk.sex=-1;p->personk.year=0;/顧客姓名無需

12、初始化p->personk.bednumber=0;/該顧客的床號p->peoplein=0;/房價基本信息初始化for(i=0;i<M;i+)p->bedi=0;p=p->next;/下一個房間搜索 printf("n -操作成功!- n");printf("*n");void checkin(Room *head)/訂房間Room *p;int i,j,bednumber=0,sex,roomgrade;/printf("n -歡迎使用訂房系統- n"); printf("*n")

13、;/輸入性別,及房間等級/姓名,年齡string name;int age,day,month,year;printf(" 請輸入姓名:");cin>>name;int len=name.length();if(name0<65) printf("Error!請重新輸入。n");return;printf(" 請輸入年齡:");scanf_s("%d",&age);printf(" 請輸入性別(1為男,0為女):");scanf_s("%d",&am

14、p;sex);printf(" 請輸入房的截至日期:");printf("年=");scanf_s("%d",&year);printf(" 月=");scanf_s("%d",&month);printf(" 日=");scanf_s("%d",&day);printf(" 請輸入房間等級:(1-%d): ",N );scanf_s("%d",&roomgrade);p=head;i

15、nt fangjianhao=0;/標記床號,房間號int flag=0;/標記是否分配成功while (p!=NULL)/一個房間一個房間搜索,訂房if(p->roomgrade=roomgrade)for(i=1;i<=NUM;i+)/進入該等級,查找房間for(j=0;j<M;j+)/進入該房間查找床位if(p->bedj=0)/查找到次床位flag=1;/標記分配成功bednumber=j+1;/標記床號fangjianhao=p->roomnumber;p->=name;/寫入顧客信息p->personj.age=ag

16、e;p->personj.sex=sex;p->personj.year=year;p->personj.month=month;p->personj.day=day;p->personj.bednumber=j+1;/該顧客的床號p->bedj=1;/標記此房間的詞此床位已住人p->peoplein+;/此房間的入住人數+1break;/找到床位跳出循環if(flag=1)break;if(flag=1)break;/進入該等級,查找房間if(flag=1)break;p=p->next;/繼續下一個房間的搜索/while()printf(&q

17、uot;*n");if(flag=0)printf("n 該等級的房間已滿,請重新另外等級房間!n");if(flag=1)printf("n 您分配的房間信息為:n 房間等級:%dn 房間號:%dn 床號:%dn",roomgrade,fangjianhao,bednumber);printf("*n");void checkout(Room *head)/退房間Room *p;int roomnumber,roomgrade,bednumber,j;int flag=0;/標志位printf(" -歡迎使用退房

18、系統- n");printf("*n");printf(" 請輸入房間等級:");scanf_s("%d",&roomgrade);printf(" 請輸入房間號:");scanf_s("%d",&roomnumber);printf(" 請輸入床號:");scanf_s("%d",&bednumber);p=head;/p標記頭節點while (p!=NULL)/搜索房間號,性別,房間等級if(p->roomgra

19、de=roomgrade && p->roomnumber=roomnumber)for(j=0;j<M;j+)/進入該房間查找床位if(p->personj.bednumber=bednumber)/查找到此床位flag=1;/標記查找成功p->=""/清除顧客信息p->personj.age=0;p->personj.sex=-1;p->personj.year=0;p->personj.month=0;p->personj.day=0;p->personj.bednum

20、ber=0;p->bedj=0;/標記此房間的詞此床位未住人p->peoplein-;/此房間的入住人數-1/p->roomnumber=0;break;/找到床位跳出循環if(flag=1)break;if(flag=1)break;if(flag=1)break;p=p->next;/繼續下一個房間的搜索if(flag=1) printf("-刪除信息成功!-n");if(flag=0) printf("-刪除信息失敗!-n");printf("*n");void display(Room *head)/顯

21、示房間信息Room *p;int i,k;p=head; printf("nn -已訂房間查詢- nn");printf("*n");while (p->next!=NULL)/搜索if(p->roomgrade<=5 && p->roomgrade>=1)for(k=0;k<M;k+)/輸出該房間的所有顧客信息if(p->personk.bednumber!=0)printf("n 房間等級:%d,房間號:%d,",p->roomgrade,p->roomnumb

22、er);printf("顧客姓名:");cout<<p->;printf(",顧客性別:%d該房間內已住人數:%d,房間到期日期:%d年,%d月,%d日,",p->personk.sex,p->peoplein,p->personk.year,p->personk.month,p->personk.day);printf("該房間已住人的床號為:");for(i=0;i<M;i+)if (p->bedi=1)printf("%d,",i+1);p=p->next;/繼續下一個房間的搜索printf("n*n");void main()int n,k=1;/k為判斷循環的條件Room *head;head=creat();/creat()返回room結構類型while(k=1) printf(" 歡迎您的光臨,很高興

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論