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

下载本文档

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

文档简介

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

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

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

4、下表:房间级别姓名年龄性别(0女/1男)入住时间1Zhang2502014 06 082Wang2402014 06 082Li2502014 06 082Zhao2402014 06 092Liu2612014 06 10输出:每输入一个旅客的信息都会输出下表(第一位房客)旅客房间分配表姓名性别年龄等级历p床位时间zhang0251112014 06 08输入第二位房客后输出:旅客房间分配表姓名性别年龄等级历p床位时间wang0242112014 06 08输入第三位房客后输出:旅客房间分配表姓名性别年龄等级历p床位时间li0252122014 06 08输入第四个房客后输出:旅客房间分配表

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

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

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

8、 i,作为本次入住旅客的床号。2、旅客退房退房退房,若是某房间第一个乘客退房,因为首位旅客信息单元是旅客链的第一 的链单元,所以删除时应将下一位旅客的地址赋给本房间存储单元中存放客户指 针的单元中,以防止客户链的丢失。若非第一个旅客退房,则只需要将本旅客的下一位旅客的地址放到这位旅客的前一位旅客的next域里面,然后释放退出旅客的信息单元就行了。五、【模块划分】重要模块:主要功能函数:初始化函数:void Init(hotel_lv *L)(逐级进行初始化)判断是否客满:int full(hotel_lv *L)(主机进行查询直到发现空床位截止)打印旅客信息:void Pr_divide(cu

9、s* p,fangjian* q )旅客住宿函数:void Pr_divide(cus* p,fangjian* q )(首先调用full()函数,若非满,相应级别查找,有空床位则入住)旅客退房函数:cus* Delete(hotel_lv *L)(逐级查询直至床位,有次床位则删 除)查询旅客信息:void cx_customer(hotel_lv *L)(按名字逐级顺序查询)统计旅店当前入住人数:void Tongji_cus(hotel_lv *L)(逐级按房间顺序统计) 主函数:void main()(调用各功能函数)六、【数据结构】本次数据结构课程设计,做的是旅店管理系统,定义了三个结

10、构体链表,给等级链表设置了一个头结点,采用链表嵌套方法,等级链表嵌套房间链表,房间 链表再嵌套旅客链表。(1)对旅店结构体定义typedef struct hotel_lvint lv_num;/旅店等级号struct hotel_lv *next;/ 指向下一等级struct fangjian *fj_next;/ 指向房间hotel_lv;(2)房间结构体定义typedef struct fangjianint fj_num;int max;int mem_num;struct fangjian *next;struct customer *cus_next;fangjian;/房间号/房

11、间的最大床位数目房间内的当前人数/指向下一房间/指向旅客(3)对旅客结构体定义typedef struct customerchar name15;/旅客姓名int age;/旅客年龄int sex;/旅客性别int lv;/旅客住宿时的等级号int bed_num;/旅客的床位号int year;/住宿日期int month;/住宿日期int day;/住宿日期struct customer* next;/指问卜一旅客cus;七、【测试情况】隅货露孀九个等级;蓍输入房间等皴为的房间个数,1请输入房间等级为1房间号为i的床位个数的最大值:蓍输入房间等级为2的房间个数F请输入房间等级为2房间号为

12、1的床位个数的最大值3 ,输入房间等级为2房间号为2的床位个数的最大值, 2f青输入旅客所需的房间等级二工:zlianar请输入旅客年龄;25请输入旅客性别如男却 如泪请输入旅客住宿开始日期如12014 06 08):2014 06 08旅客房间分配表"_螃_J床位号zhang25' 一 ,1112014- 6- 8%输入旅客所需的房间等级3旅客的信息:请辅入旅各姓名3m9请输入旅客年龄,24请输入旅客性别如:男女请输入旅客住宿开始日期如工2014 06 08):2014 0& 08旅客房间分配表箜*_幽年龄等级号uanar0242112014- 6- S春输入旅客所

13、需的房间等级请输入旅客年龄:25请输入旅客性别2小男:女S透请输入旅客住宿开始日期如:2®4 06 08):2014 06 081旅客房间分配表_暨_区别年龄房间号入住时间li0252122814- 6- 83输入旅客所需的房间等级:2请雷鸣濠拄请输入旅客年龄:24请输入旅客性别如:男加女立海请输入旅客住宿开始日期(如12奥4 06 08):2014 06 09旅客房间分配表_螃_暨等级号床位号zhao024n 1rnLn2014- 6- 9:青输入旅客所需的房间等级,2旅客的信息.请徐人旗客姓名门iu请输入旅客年龄=26请输入旅客性别豉5男八女)通息 息息 信11归 匐房.入客询计

14、出初录警_量邮 44pp 12 3 4 0-旅店客满,不能入住.】育定y聿一一 %常输入该退房人房间的等级号码: 储输入该退房人房间的房间号码; 储输入该退房人的床位号码: j匕等级、此席间、此床位旅客的信息为: 该各顾客的律凯至名W年龄入住时间li0252014-G-8是否与要退房人信息相符? H1.2,3.4,0.请人客询计出50录磐_患婚巨j 自也自 信11栏岸 用房:匕等级、此 F名做客的一名 性别)1 ao 0请输入该退房人房间的等级号码:请输入该退房人房间的房间号码:请输入该退房人的床位号科;寻回、此床位旅客的信息为:年龄入住时间242014-6-9否与要退房人信息相符?卬/nJ退

15、房成功!请第黑霰4加请输入旅客年龄二24请输入旅客性别(如;男却女请输入旅客住宿开始日期 如! 2014 K 08):2014 M 11欢迎登陆某旅店住宿管理系统息自心目心信: 入客询计出轴 录普_裁. 1.2.3.4.*请输入要查询的旅客姓名:zhau未找到该旅客,请核实后再输入。瞿赞*欢迎登陆某旅店住宿管理系统*青输入要查询的旅客姓名;hu:欢迎登陆某旅店住宿管理系统:*音1录入旅客信息田维之喉囿可木隹入整赳 等级为2的房相入隹人数为4八、【心得】在开始这个课题之初,自己感觉对这个题目自己应该可以很好地完成这以课 题,但到后来自己深入的研究了一下发现,这道题目还是很难得至少对于我来说,自己

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

17、应的旅客。对退房的旅客同样需要对是否是第一位房客和非 第一位房客区别开来进行修改指针。完成了这些,本程序的基本重要的问题都已解决了。九、【源程序】#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct hotel_lv/ 旅店结构体int lv_num;struct hotel_lv *next;struct fangjian *fj_next;hotel_lv;typedef struct fangjian/ 房间结构体int fj_num;int max;int mem_nu

18、m;struct fangjian *next;struct customer *cus_next;fangjian;typedef struct customer/旅客结构体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)/ 初始化函数int i,j,k,l;hotel_lv *p,*q;fangjian *p1,*p2,*p3;printf("请输入房间分为几个等级:n");s

19、canf("%d",&j);输入房间共分为几个等级q=L;for(i=1;i<=j;i+)/初始化该等级的房间p=(hotel_lv*)malloc(sizeof(hotel_lv);q->next=p;p->lv_num=i;/给房间等级赋值printf("请输入房间等级为%d的房间个数:n",p->lv_num);scanf("%d",&l);/输入该等级的房间数目if(l=0)continue;else/初始化该房间内的床位p2=(fangjian*)malloc(sizeof(fangj

20、ian);p2->fj_num=1;printf("请输入房间等级为d房问号为1的床位个数的最大值: n”,p->lv_num,k);scanf("%d",&(p2->max);/ 输入房间1的床位数目p2->mem_num=0;该房间内当前人数赋为零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("请输入房间等级为%d房间号为%d的床位

21、个数的最 大值:n",p->lv_num,k);scanf("%d",&(p1->max);/输入房间k的床位数目p1->mem_num=0;/该房间内的当前人数赋为零p3=p1;p3->next=NULL;/房间链表尾指针赋为空q=q->next;q->next=NULL;/等级链表尾指针域赋为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-

22、>mem_num!=f->max)/如果有房间的当前人数不等于房间的最大人数,则返回0return 0;elsef=f->next;l=l->next;否则返回1/打印旅客信息return 1;void Pr_divide(cus* p,fangjian* q )printf("n");printf("I旅客房间分配表M");printf("I1111rn")1printf("| 姓名 |性别|年龄|等级号|房间号|床位号I入住时间|n");printf(" I1111Hn&quo

23、t;)1printf("| %12s | %d | %2d|%2d| %2d| %2dI %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("11111Ln")iprintf("n");/旅客入住函数) void input(hotel_lv *L)char c;int Iv;static int i;cus *s,*p2,*p3;fang

24、jian *p1;hotel_lv *l;l=L->next;if(full(L)/判断是否旅店客满printf("旅店客满,不能入住。n");elseprintf("请输入旅客所需的房间等级:”);输入旅客所需的等级scanf("%d",&lv);while(l!=NULL)/等级不为空时if(l->lv_num!=lv)l=l->next;else/有此等级时p1=l->fj_next;while(p1!=NULL)/房间不为空if(p1->mem_num=p1->max) / 是否有空床位p1=

25、p1->next;if(p1=NULL)getchar();printf("此等级为d的所有房间均无空位n是否愿意更换等级y/n",lv);scanf("%c",&c);/ 做出选择if(c='y')input(L);elsereturn ;else/进行旅客登记/第一个结点要特别判断if(p1->mem_num=0)s=(cus*)malloc(sizeof(cus);printf("nAn");printf("n旅客的信息:");printf("n请输入旅客姓名:&

26、quot;);scanf("%s”,s->name);printf("n请输入旅客年龄:");scanf("%d”,&(s->age);printf("n请输入旅客性别(如:男1:女0):");scanf("%d”,&(s->sex);printf("n请输入旅客住宿开始日期;”);scanf("%d %d %d”,&s->year,&s->month,&s->day);s->lv=lv; /修改指针p1->cus_n

27、ext=s;p1->mem_num+;s->bed_num=1;s->next=NULL;Pr_divide(s,p1);break;房间当前人数加1/尾指针置为空/打印房间分配表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("nAn");printf("n旅客的信息:

28、");printf("n请输入旅客姓名:");scanf("%s”,s->name);printf("n请输入旅客年龄:");scanf("%d”,&s->age);printf("n请输入旅客性别");scanf("%d”,&s->sex);printf("n请输入旅客住宿开始日期");scanf("%d %d %d”,&s->year,&s->month,&s->day);s->l

29、v=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)/旅客退房函数int lv,hotel_num,bed_num;char c;cus *p,*q;fangjian *f;hotel_lv *l;l=L->next;printf("请输入该退房人房间的等级号码:n");scanf("%d",&lv);输入退房人的房间等级getchar();while(l!

30、=NULL)if(l->lv_num!=lv)l=l->next;else/找到该等级f=l->fj_next;printf("请输入该退房人房间的房间号码:n");scanf("%d”,&hotel_num); /输入退房人的房间号码getchar();while(f!=NULL)if(f->fj_num!=hotel_num)f=f->next;else/找到该房问p=f->cus_next;q=f->cus_next;printf("请输入该退房人的床位号码:n");scanf("

31、;%d”,&bed_num); /输入退房人的床位号码getchar();while(q!=NULL)if(q->bed_num!=bed_num)q=q->next;else /查找该床位if(bed_num=p->bed_num) / 第结点特另U判断/直接打印旅客信息printf("此等级、此房间、此床位旅客的信息为:n");printf("该名顾客的信息:n");printf("姓名t性别t年龄t入住时间n");printf("%st%dt%dt%d-%d-%dn",q->n

32、ame,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(q);elsereturn NULL;else /如果床位不为1while(p->next!=q) / 指向下一床位p=p->nex

33、t;/打印旅客信息printf("此等级、此房间、此床位旅客的信息为:n");printf("该名顾客的信息: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;f-

34、>mem_num-;printf("退房成功! n");return(q);elsereturn NULL;if(q=NULL) /如果该房间内床位为空printf("未找到该床位号,请核实信息后重新输入n");Word资料if(f=NULL)/如果该等级的房间为空n");printf("未找到该房问号,请核实信息后重新输入。if(l=NULL)/如果等级链表为空printf("未找到该房间等级,请核实信息后重新输入。n");void cx_customer(hotel_lv *L)/ 查询旅客信息函数char s15;hotel_lv *l;fangjian *f;/设置标志量cus *t;int flag=0;Word资料scanf("%s",s);getchar();l=L->next;while(l!=NULL)/输入要查找旅客的姓名等级不为空时,走向房间f=l->fj_next;while(f!=NULL)if(f->mem_num=0)问f=f->next;else房间不为空时,走向床位/若此房间当前人数为零,走向下一房 t=f->cus_next;while

温馨提示

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

评论

0/150

提交评论