数据结构课程设计报告书_第1页
数据结构课程设计报告书_第2页
数据结构课程设计报告书_第3页
数据结构课程设计报告书_第4页
数据结构课程设计报告书_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、课程设计说明书课程名称数据结构课程设计设计课题模拟旅馆管理系统课 程设计 任务书设计题目:模拟旅馆管理系统的一个功能一一床位的分配与回收设计内容与要求:某旅馆有n个等级的房间,第I等级有a个房间,每个等级有bi个床位(1<i <n)。试模拟旅馆管理系统中床位分配和回收的功能,设计能为单个旅客分配床 位,在其离店便回收床位(供下次分配)的算法。基本要求(1)输入数据分配时,输入旅客姓名、年龄、性别、到达日期和所需房间等级。回收时,输入房间等级、房问号和床位号。(2)输出数据分配成功时打印旅客姓名、年龄、到达日期、房间等级、房间号码和床位号码。分配不成功时,如所有等级均无床位,则打印“

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

3、期、房间等级、房间号码和床位号码。分配不成功时,如所有等级均无床位,则打印“客满”信息;如旅客需要的 等级均无空床位,则打印“是否愿意更换等级?”的询问信息。若旅客愿意更换, 则重新输入有关信息,再进行分配,否则分配工作结束。【测试数据】旅客姓名:w性别:男 年龄:20入住时间:2015 3 4所需等级:1旅客姓名:d性别:男 年龄:22入住时间:2015 1 2所需等级:2【模块划分】本程序主要划分为四个模块【算法思想】采用链表方式,进行旅店的初始化操作。给旅店的等级设置了头结点。该程 序有三条链表,等级构成一条链表,房间构成一条链表,旅客构成一条链表。入 住时,先输入旅客所需的等级,判断是

4、否有该等级,依次判断有无房间和床位。 有该等级的房间时,采用尾插法判断是否有空床位,有就进行旅客的入住操作。 床位没有设头结点,所以第一个床位要进行判断。退房时,需要输入等级号、房 问号、床位号来进行查找,从而完成退房操作。查询时,通过输入旅客的姓名进 行查询,存在此人时,打印客人信息。统计宾馆的人数时,先一个等级一个等级 的统计,统计这个等级的每一个房间和每个房间当前的所有人数。旅客住宿登记旅客住宿是是否有客满无法入住“否,V否是否更换等否无法入住是否有房间是1否人是否有床位 二一下一个房间是a1,分配客人打印客人信息返回主菜单Ljl输入所旅客退房旅客退房是打印客人信息是否退房旅客信息查询否

5、-4未找到此人打印客人信息【数据结构】typedef struct traver/旅客结构体char name20;/ 姓名 int sex; 性别int age; /年龄int g;/旅客住宿的等级int bednum;/ 床号int year;int month;int day;struct traver*next;/ 下一个旅客 tra;typedef struct hotel/旅店结构体int l_num;旅店等级struct hotel*next;/下一个等级struct room*r_next;/指向房间hotel;typedef struct room/ 房间结构体int r_n

6、um;/ 房问号int max;/ 房间的最大床位数int renshu;/房间当前的人数struct room*next;/下一个房间struct traver*tra_next;/ 指向旅客 room;【测试情况】 房间的初始化。r'CAUsersY su sDe &ktopD e b ugk l.exeT靖输入房间等级;请输入房间等级为工的房间个数:,输入房间等级为1的房间号为1的床位数.£输入房间等级为1的房间号为史的床位数; 输i入房间等级为2的房间个数.手输入房间等级为2的房间号为1的床位数; 褊入房间等级为Z的房间号为Z的床位数;旅客入住登记测试CU 三

7、曰 rsa £ii sD e sktopD ebugk l.exeT:统"nhxxkhmhyml更官务务 答服服记 1013息 一-房房客客 -S1 7tzu计 -进进查统取霸爨知请输客人姓名请输入性别:L为男,修为女请输入旅客入住时间如皿9旧12 i3> = 2015 1 2旅客退房测试记录回"C;Usersa5U5De5ktopDebugkl,eKe,H一豆一 If鲁信片 f房房客客f进进查统*12 3 4充石*-系有理f务务 客服服 游记普心息请输入处理种类”-外二包丁退房靖床卑务:请输入该退房式房间的等级号码工 工输入该退房人房间的房间号码;4输入该

8、退房人的床位号码; h房为床位骊殁稿间 w12015-3-4昌否与要退房人信息相符? “.】 假房成功!查询测试统计测试【心得】这周是我们自己选题做课程设计的的时间,我选的题目是做一个旅店管理系 统,对床位进行分配和回收。本程序采用了三个链表,刚拿到这个题目时,我觉 得很这个应该和学生管理系统差不多,但是,在对床位的分配时,要采用链表。 刚开始我本来想把房间作为一个数组,将床位构成一个单链表。当时,没有考虑 到房间的等级,最后又想了一下,改变了我原来的想法。将房间的等级、房间、 旅客各构成一个链表,采用链表的好处是节约空间,有几个人就申请多大的空间, 不会造成很大的浪费。在编写代码的过程中,先

9、对旅馆每个等级的每个房间进行 初始化,旅客的住宿这个函数对于我是最难的,因为要先判断旅客所需等级的房 间存不存在,存在时,要判断这个房间有没有空床位,没有空床位时,链表的指 针指向下一个房间。如果没有这个等级的房间时,征询旅客是否要更换房间等级。 在他同意更换的情况下,再重复上述过程进行登记。给旅客进行床位分配时,是 按照床位号的大小顺序依次分配的。如果这个房间的所有床位都住满的话,再给 同等级的另一间房间进行分配。在写退房的函数时,要输入等级、房问号、床位 号,找到相应的旅客打印旅客信息确认正确再进行退房操作。统计住宿的人数时,统计同等级的每一个房间的所有旅客。旅客的链表不空时,计数器就加加

10、。进行编程的时候,一定要先清楚自己的思路,比如我写的住宿函数,要入住 就必须先判断有没有空房间和空床位,有的话才能进行分配。该程序的链表比较 多,自己写的时候,一个一个子函数写,写完调试好了再进行下一个函数的编写。 定义了三个结构体,一定要清楚每个结构体中所包含的量,切不可混淆。编写时 if和else语句比较多,要清楚哪个与哪个对应,每个循环结束的条件。调试代 码的时候有时就是一个很小的错导致整个程序不能运行,每当程序错误时我都非 常焦躁,甚至想到了放弃,但我最终还是一步一步慢慢来,经过无数次的检查程 序错误的原因后慢慢懂得了耐心是一个人成功的必然具备的条件!同时,通过此 次课程设计使我了解到

11、数据结构可以说是计算机里一门基础课程,它需要把理论变为上机调试,所以一定要把基础知识学扎实。虽然我现在还不会成功的编写一 个完整的程序,但是在看程序的过程中,不断的上网查资料以及翻阅相关书籍, 通过不断的模索,测试,发现问题,解决问题和在老师的帮助下一步一步慢慢的 正确运行程序。在本课程设计中,我明白了理论与实际应用相结合的重要性,并提高了自己 组织数据及编写大型程序的能力。培养了基本的、良好的程序设计技能以及合作 能力。这次课程设计同样提高了我的综合运用所学知识的能力。并对VC有了更深入的了解。数据结构是一门实践性很强的课程,上机实习是对学生全面综合素 质进行训练的一种最基本的方法,是与课堂

12、听讲、自学和练习相辅相成的、必不 可少的一个教学环节。上机实习一方面能使书本上的知识变“活”,起到深化理解 和灵活掌握教学内容的目的;另一方面,上机实习是对学生软件设计的综合能力的 训练,包括问题分析,总体结构设计,程序设计基本技能和技巧的训练。止匕外, 还有更重要的一点是:机器是比任何教师更严厉的检查者。因此,在“数据结构” 的学习过程中,必须严格按照老师的要求,主动地、积极地、认真地做好每一个 实验,以不断提高自己的编程能力与专业素质。【源程序】#include <stdio.h>#include <string.h>#include <malloc.h>

13、;#include <stdlib.h>typedef struct traver旅客结构体char name20;/ 姓名int sex; 性别int age; /年龄int g;/ 旅客住宿的等级int bednum;/ 床号int year;int month;int day;struct traver*next;/下一个旅客tra;typedef struct hotel/旅店结构体int l_num;/ 旅店等级struct hotel*next;/下一个等级struct room*r_next;/ 指向房间hotel;typedef struct room/房间结构体i

14、nt r_num;房间号int max;/ 房间的最大床位数int renshu;/ 房间当前的人数struct room*next;/下一个房间struct traver*tra_next;/ 指向旅客room;void menu_select()/ 菜单函数printf(”*旅客管理查询系统 *n"); / 菜单选择printf("1.进行订房登记服务n");printf("2.进行退房结账服务n");printf("3.查询旅客信息n");printf("4.统计旅客信息n");printf(”*n

15、");void Init(hotel*L)/ 旅店等级设置头结点int i,j,k,n;/k 床位数 ,j 房间等级 ,n 房间个数 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的房间个数:n",p-&g

16、t;l_num);scanf("%d",&n);/ 输入该等级的房间数if(n=0)/ 不存在该等级的房间数时continue;else/ 初始化床位p2=(room*)malloc(sizeof(room);/ 为该等级的房间申请空间p2->r_num=1;printf("请输入房间等级为d的房间号为1的床位数:n",p->l_num,k);scanf("%d",&(p2->max);/ 房号为 l 的床位数p2->renshu=0;/ 房间当前人数为 0p->r_next=p2;/ 指

17、向该等级的下一个房间p3=p2;for(k=2;k<=n;k+)/ 房间号为 2 的房间信息初始化p1=(room*)malloc(sizeof(room);p3->next=p1;p1->r_num=k;printf("请输入房间等级为 d的房间号为d的床位数:n”,p->l_num,k);scanf("%d",&(p1->max);p1->renshu=0;p3=p1;p3->next=NULL;/ 房间链表尾指针为空 q=q->next;/ 指向下一个等级 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;/ 指向下一个房间l=l->next;if(!l)return 1;void print(tra*s,room*p)printf(" 输出旅客信息: n");printf(" 姓 名 %s, 性

19、别 %d, 年 龄 %d, 房 间 等 级 %d, 房 间 号 码 %d, 床 号 %d, 入 住 时间 %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");/ 输入旅客所需要的等级等级不空时有该等级时房间不空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;/ 指向下一个房间if(t=NULL)getchar();printf(" 等级为的所有房间均无空位n 是否愿意更换等级 y/n",g);scanf(&quo

21、t;%c",&c);/ 是否更换等级if(c='y')zhusu(L);else return;else/ 进行旅客登记if(t->renshu=0)/ 床位没有设置头结点,所以要进行判断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(" 请输入旅客入住时间 (如 1990 12 13):");scanf("%d %d %d",&q1->year,&q1->month,&q1->day);q1->g=g;/ 修改指针t->tra_next=q1;/t->renshu+;/ 房间人数加 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(" 请输入旅客入住时间 :");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");输入退房人的床位号码查找该床位因为床位没有设置头结点,所以对于第一个结点要找到该房间/直接打印旅客信息printf(" 等级、房间、床位旅客的信息为: n");printf(" 姓名 t 性别 t 年龄 t 入住时间 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 入住时间 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) / 查询旅客信息函数 char c15;hotel *l;room *t;tra *s;int flag=0;/ 设置标志量printf(" 请输入要查询的旅客姓名: n&q

31、uot;);scanf("%s",c);getchar();如果该房间内床位为空如果该等级的房间为空如果等级链表为空l=L->next;while(l!=NULL) / 等级不为空时,指向房间 t=l->r_next;while(t!=NULL)/ 房间不为空时,指向床位 if(t->renshu=0) /若此房间当前人数为零,指向下一房间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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论