床位的分配与回收_第1页
床位的分配与回收_第2页
床位的分配与回收_第3页
床位的分配与回收_第4页
床位的分配与回收_第5页
免费预览已结束,剩余44页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、洛阳理工学院课程设计说明书课程名称_ 数据结构_设计课题模拟旅店管理系统一床位的分配与回收专 业 _计算机科学与技术专业_班级 _ B120506_学号 _ B12050606_姓 名_ 翟_完成日期_ 2014 年 6 月 13 号_课程设计任务书设计内容与要求:某旅馆有n个等级的房间,第I等级有ai个房间,每个等级有bi个床位(1in)。试模拟旅馆管理系统中床位分配和回收的功能, 设计能为单个旅客分配床位, 在其离店便回收床位(供下次分配)的算法。基本要求(1)输入数据分配时,输入旅客姓名、年龄、性别、到达日期和所需房间等级。回收时,输入房间等级、房间号和床位号。(2)输出数据分配成功时打

2、印旅客姓名、年龄、至V达日期、房间等级、房间号码和床位号码。 分配不成功时,如所有等级均无床位,贝U打印“客满”信息;如旅客需要的等级均 无空床位,则打印“是否愿意更换等级? ”的询问信息。若旅客愿意更换,则重新 输入有关信息,再进行分配,否则分配工作结束。设计题目:模拟旅馆管理系统的一个功能床位的分配与回收指导教师:张新颜2014年 6 6 月 3 3 日成绩:课程设计评语指导教师:张新颜年 月 日、【问题描述】某旅馆有n个等级的房间,第I等级有a个房间,每个等级有bi个床位(1in)。试模拟旅馆管理系统中床位分配和回收的功能,设计能为单个旅客分配 床位,在其离店便回收床位(供下次分配)的算

3、法。二、 【基本与要求】(1)输入数据分配时,输入旅客姓名、年龄、性别、到达日期和所需房间等级。回收时,输入房间等级、房间号和床位号。(2)输出数据分配成功时打印旅客姓名、年龄、到达日期、房间等级、房间号码和床位号码。分配不成功时, 如所有等级均无床位, 贝U打印“客满”信息; 如旅客需要的等 级均无空床位,则打印“是否愿意更换等级? ”的询问信息。若旅客愿意更换, 则重新输入有关信息,再进行分配,否则分配工作结束。三、 【测试数据】首先,初始化旅馆,定义为旅馆:房间等级为两个(1和2);定义级别为1的 房间为一个,床位个数为一个;定义级别为2的房间个数为两个,其中1号房有床位2个,2号房间床

4、位个数也为2;然后开始测试。输入:分别输入信息如下表:房间级别姓名年龄性别(0女/1男)入住时间1Zhang2502014 06 082Wang2402014 06 082Li2502014 06 082Zhao2402014 06 092Liu2612014 06 10输出:每输入一个旅客的信息都会输出下表(第一位房客)旅客房间分配表姓名性别年龄等级房号床位时间zha ng0251112014 06 08输入第二位房客后输出:旅客房间分配表姓名性别年龄等级房号床位时间wang0242112014 06 08输入第三位房客后输出:旅客房间分配表姓名性别年龄等级房号床位时间li025212201

5、4 06 08输入第四个房客后输出:旅客房间分配表姓名性别年龄等级房号床位时间zhao0242212014 06 09输入第五个房客后输出:旅客房间分配表姓名性别年龄等级房号床位时间liu1262222014 06 10如果再次输入功能选项“1”,则会输出“旅店客满,不能入住”退房操作:输入功能选项“2”执行退房操作,输入退房的等级“2”,输入房号“1”, 输入床号“2”。则输出以下内容:此等级、此房间、此床位旅客的信息为:该名旅客的信息:姓名 性别 年龄入住时间Li 0252014-6-8输入功能选项“2”,继续退房,等级“2”,房号“2”,床号“1”,则输出以 下内容:此等级、此房间、此床

6、位旅客的信息为:该名旅客的信息:姓名 性别 年龄入住时间zhao242014-6-9再次入住操作:输入功能键“1”,房间等级“2”然后输入以下表格信息:姓名年龄性别入住日期che n2402014 06 11则输出:旅客房间分配表姓名性别年龄等级号房号床位时间che n0242122014 06 11继续入住操作:输入功能键“1”,房间等级“2”然后输入以下表格信息:姓名年龄性别入住时间hu2202014 06 12则输出旅客房间分配表姓名性别年龄等级号房号床位时间hu0222212014 06 12查询房客信息:输入“3”,然后输入查询房客的名字“zhao输出“未找到该旅客,请核实后再输入”

7、再次,输入“3”,然后输入查询房客的名字“hu”输出以下表格:旅客房间分配表姓名性别年龄等级号房号床位入住时间hu0222212014 06 12统计旅客信息:输入“4”则输出:等级为1的房间入住人数为1等级为2的房间入住人数为4退出本程序:输入“0”则可以退出本程序。四、【算法思想】1、客人入住:当入住的是某房间的第一个旅客,需要对其特别处理,以其客户信息作为本房间 旅客链的第一个结点。若非第一位乘客,则要对空的床号进行查找,首先设置一变量“ 使其与现有空房的旅客链的每位旅客的床号比较,若发现有床号 自加1,再进行与本房间所有旅客床号比较, 若无旅客床号与i,作为本次入住旅客的床号。2、旅客

8、退房i”,初始化i=1,亍i相等,则ii的值相等,贝U返回床号旅客信息退房?退房成功尸-r返回菜单退房, 若是某房间第一个乘客退房, 因为首位旅客信息单元是旅客链的第一 的链单元,所以删除时应将下一位旅客的地址赋给本房间存储单元中存放客户指 针的单元中,以防止客户链的丢失。若非第一个旅客退房,则只需要将本旅客的下一位旅客的地址放到这位旅客的前退房要退的房的等级重输入等级?房间号房间?重入一位旅客的next域里面,然后释放退出旅客的信息单元就行了 五、【模块划分】重要模块:主要功能函数:判断是否客满:int full(hotelv *L)(主机进行查询直到发现空床位截止)打印旅客信息:void

9、Pr_divide(cus* p,fan gjia n* q )初始化函数:void In it(hotel _lv *L)(逐级进行初始化)旅客住宿函数:void Pr_divide(cus* p,fan gjia n* q )(首先调用full()函数,若非满,相应级别查找,有空床位则入住)旅客退房函数:cus* Delete(hotel_lv *L)(逐级查询直至床位,有次床位则删除)查询旅客信息:void cx_customer(hotel_lv *L)(按名字逐级顺序查询)统计旅店当前入住人数:void Ton gji_cus(hotel_lv *L)(逐级按房间顺序统计)主函数:v

10、oid main()(调用各功能函数)六、【数据结构】本次数据结构课程设计,做的是旅店管理系统,定义了三个结构体链表,给 等级链表设置了一个头结点,采用链表嵌套方法,等级链表嵌套房间链表,房间 链表再嵌套旅客链表。(1)对旅店结构体定义typedef struct hotel_lvint lv_num;struct hotel_lv *n ext;struct fan gjia n *fj_n ext;hotel_lv;(2)房间结构体定义typedef struct fan gjia n/旅店等级号/指向下一等级/指向房间int fj_num;/房间号int ma x;int mem_num

11、;struct fan gjia n *n ext;struct customer *cus_next; fan gjia n;(3)对旅客结构体定义typedef struct customerchar n ame15;int age;int sex;int lv;int bed_ num;int year;int mon th;int day;struct customer* n ext;/房间的最大床位数目/房间内的当前人数/指向下一房间/指向旅客struct customer* n ext;/旅客姓名/旅客年龄/旅客性别/旅客住宿时的等级号/旅客的床位号/住宿日期/住宿日期/住宿日期/

12、指向下一旅客cus;七、【测试情况】關爍髒凯个祭;备输入房间等级为1的房间个数!扫输入房间等级为1房间号为丄的床位个数的最大值: 请输入房间等级加的房间个勲冷输入房间等级为2房间号为丄的床位个数的最大值s备输入房间等级为畧房间号为2的床位个数的最大值;1请输入旅喜所需的房间等级汽旅客耳信息:请输人旅容姓名:汕a呵请输入旅客年龄汉5请输入旅客性别C如:男女时汕请输入就客住宿开始日期如;201时08) )=2 014 06 091请输入旅客所需的房间等级油请输入旅客年龄:24请输入旅客性别砂D;男丄:女0诃请输入旅客住宿开始日期龙如2014r 06 08) ):2014 06 08请输入旅客所需的

13、房间等级弍请输人旅客年龄詔5请输入旅客性别屹如:男如油请输入旅客住宿开始日期仗h 2014 06 08):2014 06 08穆输入旅容所需的房间等级池痕客的信弘请鎰人旅嘗姓名:汀嗣请输人旅客年龄三丹请输入旅客性别男女曲旧请输入旅客住宿开始日期I如:2014 06 08) ):2014 06 09欢迎登陆某旅店住宿管理系统请输人旅客所需的房间等级:liu请输入旅客年龄:请输入旅容性别咖;男丄;如*请输入旅客住宿开始日期山2014 06 08):):2014 0G 10旅客房间分配裹姓名性别年龄等级号房间号床位号入住时间11U&262222014- 6-10备输入该退层人房间的等级号码

14、备输入该退房人房间的房间号咼 詁输入该退房人的床位号码 花等级、此和亂此床位旅客的信息为I谟名顾客的诲息:耀名 也和年龄 入住时间1102S2014-&-8是否与要退房人信息相符?1證房成功!_1-录人旅客信息2_3,4 0-仔TU丁请选择-4 =退尿成功!否与要退房人信息相符1 ry/ni年龄入住时间242014-6-92.3-4-0.请息息自心7-IP-i=.1F.序入客询计出0录奎零瞬请输人该退房人房间的等级吕码请输入该退房丸茫间的房间号码请输该退房人的床位号码;匕等级、此房间、此廉位旅客的信息为: 亠名顾名请输入旅客年龄江4谙输入旅容性别C如:男女的汨请输入旅客住宿开始日期t如

15、;四06 08) )=2014 06 11旅客房间井配表姓名性别 年龄等级号房间号 床位号入住时间chen2014- &-11欢迎登陆某旅店住宿管理系统请输入要查询的旅客姓名: hao找到该旅容.请核实后再输入-欢迎豊陆某旅店住宿管理奈统胃输入要查询的旅客姓名*欢迎登陆某旅店住宿管理系统息自心自心亠吕壬目入客询计出502.3-4-0.谱自3息自 S亠二!=!亠-豆一一割房=录聖_幫曲12 2 4 0数 数人_A汪S入入可可房房的的1 2为 为级级匕1W:2340-退出那味 请选择44:八、【心得】在开始这个课题之初,自己感觉对这个题目自己应该可以很好地完成这以课题,但到后来自己深入的研

16、究了一下发现, 这道题目还是很难得至少对于我来说, 自己也曾有放弃的想法,但后来在指导老师的指导和帮助下最终完成了这个程序。首先,定义的结构体数组,进行编写。如果用顺序表的话对于不同的旅馆是 不适用的,因为各个旅馆的房间的级别、房间的个数、房间的床位都是不相同的,如果用链表就不一样了,所以改用链表来编写。对后面的处理在旅客进行入住情况中,在床位分配的时候,因为没有设置床 位的头结点,所以要对第一个床位进行特别判断。然后经过多次调试与修改,最 终能实现旅客的入住情况。旅客退房跟入住时一样,在床位回收的时候,因没有 设置床位的头结点,所以要对第一个床位进行特别判断。再次对非空非满的房间进行入住的时

17、候要进行判断,哪些床位是空的,对空 的床位可以分配给相应的旅客。对退房的旅客同样需要对是否是第一位房客和非 第一位房客区别开来进行修改指针。完成了这些,本程序的基本重要的问题都已解决了。九、【源程序】#i nclude#i nclude#i ncludevstri ng.htypedef struct hotelv/旅店结构体int lv_num;struct hotelv *n ext;struct fan gjia n *fj_n ext;hotelv;typedef struct fan gjia nint fj_num;int max;int mem_num;struct fan gj

18、ia n *n ext;struct customer *cus_ next;fan gjia n;typedef struct customerchar n ame15;int age;int sex;int lv;int bed_ num;int year;/房间结构体旅客结构体int month;int day;struct customer* n ext;cus;void Init(hotelv *L)/初始化函数int i,j,k,l;hotelv *p,*q;fan gjian *p1,*p2,*p3;printf(请输入房间分为几个等级:n);scanf(%d,&j);/

19、输入房间共分为几个等级q=L;for(i=1;iv=j;i+)/初始化该等级的房间p=(hotel_lv*)malloc(sizeof(hotel_lv);q-n ext=p;p-lv_num=i;/给房间等级赋值printf(请输入房间等级为%d的房间个数:n,p-lv_num);scanf(%d,&l);/输入该等级的房间数目if(l=0)con ti nue;else/初始化该房间内的床位p3- next=NULL;/房间链表尾指针赋为空p2=(fa ngjia n*)malloc(sizeof(fa ngjia n);p2-fj_ num=1;printf(请输入房间等级为%d

20、房间号为1的床位个数的最大值:n,p-lv_ nu m,k);sca nf(%d,&(p2-max); /输入房间1的床位数目p2-mem_num=0;/该房间内当前人数赋为零p-fj_ next=p2;p3=p2;for(k=2;kn ext=p1;p1-fj_ num=k;printf(请输入房间等级为%d房间号为%d的床位个数的最大值:n,p-lv_num,k);scanf(%d,&(p1-max); /输入房间k的床位数目p1-mem_num=0;/该房间内的当前人数赋为零p3=p1;q=q-n ext;q-next=NULL;/等级链表尾指针域赋为int full(h

21、otelv *L)/判是否客满hotelv *l;fangjian *f;l=L-n ext;while(l!=NULL)f=l-fj_ next;while(f!=NULL)if(f-mem_num!=f-max) /如果有房间的当前人数不等于房间的最大人数,则返回0return 0;elsef=f-n ext;l=l-n ext;if(!l)/否则返回1void in put(hotel_lv *L)旅客入住函数return 1;void Pr_divide(cus* p,fa ngjia n* q )I %4d-%2d-%2d In,p-n ame,p-sex,p-age,p-lv,q-

22、fj_ nu m,p-bed_ nu m,p-year,p-mon th,p-day);printf(1-1-1-1-1-Ln-prin tf(n);/打印旅客信息printf(printf(printf(printf(入住时间|n);printf(printf(- nr,-丨旅客房间分配表I I IIIn);|丨 姓名 丨性别丨年龄丨等级号丨房间号丨床位号I-1-1-1- 1- H-char c;int lv;static int i;cus *s,*p2,*p3;fa ngjian *p1;hotelv *l;l=L-n ext;/判断是否旅店客满printf(旅店客满,不能入住。n);e

23、lseprintf(请输入旅客所需的房间等级:);/输入旅客所需的等级sca nf(%d,&lv);/等级不为空时if(l-lv_ num!=lv)l=l-n ext;elsep1=l-fj_ next;if(full(L)while(l!=NULL)if(p1-mem _num=p1-max) /是否有空床位p1=p1- n ext;if(p1=NULL)getchar();printf(此等级为%d的所有房间均无空位n是否愿意更换等级y/n,lv);scanf(%c,&c);/做出选择if(c=y)in put(L);elsereturn ;else/进行旅客登记/第一个结

24、点要特别判断if(p1-mem _num=0)s=(cus*)malloc(sizeof(cus);while(p1!=NULL)/房间不为空printf(n-n);prin tf(n旅客的信息:);printf(n请输入旅客姓名:);scan f(%s,s-n ame);printf(n请输入旅客年龄:);scan f(%d,&(s-age);printf(n请输入旅客性别(如:男1:女0):);scan f(%d,&(s-sex);printf(n请输入旅客住宿开始日期;”);sca nf(%d %d %d,&s-year,&s-mo nth,&s-

25、day);s-lv=lv; /修改指针p1-cus_ next=s;p1-mem _nu m+; /s-bed_num=1; s-next=NULL;/尾指针置为空/打印房间分配表break;else房间当前人数加1p2=p1-eus_ 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);prin tf(n旅客的信息:);printf(n请输入旅客姓名:);sca nf

26、(%s,s-n ame);printf(n请输入旅客年龄:);sea nf(%d,&s-age);printf(n请输入旅客性别);sea nf(%d,&s-sex);printf(n请输入旅客住宿开始日期);sea nf(%d %d %d,&s-year,&s-mo nth,&s-day);s-lv=lv;p2-n ext=s;s- next=NULL; p1-mem_ nu m+; s-bed_ num=i;Pr_divide(s,p1); break;break;in t lv,hotel_ nu m,bed _num;char c;cus *p,

27、*q;fan gjia n *f;hotelv *l;l=L-n ext;printf(请输入该退房人房间的等级号码:n);seanf(%d,&lv);/输入退房人的房间等级getchar();while(l!=NULL)if(l-lv_ num!=lv)l=l-n ext;else/找到该等级f=l-fj_ next;printf(请输入该退房人房间的房间号码:n);sca nf(%d,&hotel_num); /输入退房人的房间号码cus* Delete(hotel_lv *L)旅客退房函数getchar();while(f!=NULL)printf(此等级、此房间、此床位

28、旅客的信息if(f-fj_nu m!=hotel_ num)f=f-n ext;else/找到该房间p=f-cus_ next;q=f-cus_ next;printf(请输入该退房人的床位号码:n);sca nf(%d,&bed_num); /输入退房人的床位号码getchar();while(q!=NULL)if(q-bed_ num !=bed_ num)q=q-n ext;else /查找该床位if(bed_num=p-bed_num)/第一结点特另 S判断/直接打印旅客信息为:n);printf(该名顾客的信息:n);printf(姓名t性别t年龄t入住时间n);printf

29、(此等级、此房间、此床位旅客的信息prin tf(%st%dt%dt%d-%d-%dn,q- name,q-sex,q-age,q-year,q- month,q-day);printf(是否与要退房人信息相符?y/nn);scan f(%c,&c);if(c=y)/做出是否退房的选择 f-cus_ next=q-n ext;f-mem _nu m-;printf(退房成功!n);return(q);elsereturn NULL;else /如果床位不为1while(p-next!=q) /指向下一床位p=p-next;/打印旅客信息为:n);printf(该名顾客的信息:n);pr

30、intf(姓名t性别t年龄t入住时间n);printf(未找到该床位号,请核实信息后重新输入n);prin tf(%st%dt%dt%d-%d-%dn,q- name,q-sex,q-age,q-year, q-month,q-day);printf(是否与要退房人信息相符?scan f(%c,&c);if(c=y)/做出是否退房的选择p-n ext=q-n ext;f-mem _nu m-;printf(退房成功!n);return(q);elsereturn NULL;if(q=NULL)/如果该房间内床位为空y/nn);printf(姓名t性别t年龄t入住时间n);printf(

31、未找到该床位号,请核实信息后重新输入n);if(f=NULL)/如果该等级的房间为空printf(未找到该房间号,请核实信息后重新输入。if(l=NULL)/如果等级链表为空printf(未找到该房间等级,请核实信息后重新输入。n);n);void cx_customer(hotel_lv *L)char s15;hotelv *l;fan gjia n *f;cus *t;/查询旅客信息函数int flag=0;/设置标志量printf(请输入要查询的旅客姓名:n);sea nf(%s,s);getchar();l=L-n ext;while(l!=NULL)f=l-fj_ next;while(f!=NULL)if(f-mem_num=0)间f=f-n ext;else/输入要查找旅客的姓名/等级不为空时,走向房间/房间不为空时,走向床位/若

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论