当前位置:文档之家› 数据结构课程设计报告书

数据结构课程设计报告书

课程设计说明书课程名称数据结构课程设计设计课题模拟旅馆管理系统课程设计任务书设计题目:模拟旅馆管理系统的一个功能——床位的分配与回收设计内容与要求:某旅馆有n个等级的房间,第I等级有ai 个房间,每个等级有bi个床位(1≤i≤n)。

试模拟旅馆管理系统中床位分配和回收的功能,设计能为单个旅客分配床位,在其离店便回收床位(供下次分配)的算法。

[基本要求](1)输入数据分配时,输入旅客姓名、年龄、性别、到达日期和所需房间等级。

回收时,输入房间等级、房间号和床位号。

(2)输出数据分配成功时打印旅客姓名、年龄、到达日期、房间等级、房间号码和床位号码。

分配不成功时,如所有等级均无床位,则打印“客满”信息;如旅客需要的等级均无空床位,则打印“是否愿意更换等级?”的询问信息。

若旅客愿意更换,则重新输入有关信息,再进行分配,否则分配工作结束。

2014 年 12 月16日课程设计评语成绩:指导教师:年月日【问题描述】某旅馆有n个等级的房间,第I等级有ai 个房间,每个等级有bi个床位(1≤i≤n)。

试模拟旅馆管理系统中床位分配和回收的功能,设计能为单个旅客分配床位,在其离店便回收床位(供下次分配)的算法。

【基本要求】(1)输入数据分配时,输入旅客姓名、年龄、性别、到达日期和所需房间等级。

回收时,输入房间等级、房间号和床位号。

(2)输出数据分配成功时打印旅客姓名、年龄、到达日期、房间等级、房间号码和床位号码。

分配不成功时,如所有等级均无床位,则打印“客满”信息;如旅客需要的等级均无空床位,则打印“是否愿意更换等级?”的询问信息。

若旅客愿意更换,则重新输入有关信息,再进行分配,否则分配工作结束。

【测试数据】旅客姓名:w性别:男年龄:20入住时间:2015 3 4所需等级:1旅客姓名:d性别:男年龄:22入住时间:2015 1 2所需等级:2【模块划分】本程序主要划分为四个模块【算法思想】采用链表方式,进行旅店的初始化操作。

给旅店的等级设置了头结点。

该程序有三条链表,等级构成一条链表,房间构成一条链表,旅客构成一条链表。

入住时,先输入旅客所需的等级,判断是否有该等级,依次判断有无房间和床位。

有该等级的房间时,采用尾插法判断是否有空床位,有就进行旅客的入住操作。

床位没有设头结点,所以第一个床位要进行判断。

退房时,需要输入等级号、房间号、床位号来进行查找,从而完成退房操作。

查询时,通过输入旅客的姓名进行查询,存在此人时,打印客人信息。

统计宾馆的人数时,先一个等级一个等级的统计,统计这个等级的每一个房间和每个房间当前的所有人数。

旅客住宿登记旅客退房【数据结构】typedef struct traver//旅客结构体{char name[20];//姓名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_num;//房间号int max;//房间的最大床位数int renshu;//房间当前的人数struct room*next;//下一个房间struct traver*tra_next;//指向旅客}room;【测试情况】房间的初始化。

旅客入住登记测试旅客退房测试记录查询测试统计测试【心得】这周是我们自己选题做课程设计的的时间,我选的题目是做一个旅店管理系统,对床位进行分配和回收。

本程序采用了三个链表,刚拿到这个题目时,我觉得很这个应该和学生管理系统差不多,但是,在对床位的分配时,要采用链表。

刚开始我本来想把房间作为一个数组,将床位构成一个单链表。

当时,没有考虑到房间的等级,最后又想了一下,改变了我原来的想法。

将房间的等级、房间、旅客各构成一个链表,采用链表的好处是节约空间,有几个人就申请多大的空间,不会造成很大的浪费。

在编写代码的过程中,先对旅馆每个等级的每个房间进行初始化,旅客的住宿这个函数对于我是最难的,因为要先判断旅客所需等级的房间存不存在,存在时,要判断这个房间有没有空床位,没有空床位时,链表的指针指向下一个房间。

如果没有这个等级的房间时,征询旅客是否要更换房间等级。

在他同意更换的情况下,再重复上述过程进行登记。

给旅客进行床位分配时,是按照床位号的大小顺序依次分配的。

如果这个房间的所有床位都住满的话,再给同等级的另一间房间进行分配。

在写退房的函数时,要输入等级、房间号、床位号,找到相应的旅客打印旅客信息确认正确再进行退房操作。

统计住宿的人数时,统计同等级的每一个房间的所有旅客。

旅客的链表不空时,计数器就加加。

进行编程的时候,一定要先清楚自己的思路,比如我写的住宿函数,要入住就必须先判断有没有空房间和空床位,有的话才能进行分配。

该程序的链表比较多,自己写的时候,一个一个子函数写,写完调试好了再进行下一个函数的编写。

定义了三个结构体,一定要清楚每个结构体中所包含的量,切不可混淆。

编写时if和else语句比较多,要清楚哪个与哪个对应,每个循环结束的条件。

调试代码的时候有时就是一个很小的错导致整个程序不能运行,每当程序错误时我都非常焦躁,甚至想到了放弃,但我最终还是一步一步慢慢来,经过无数次的检查程序错误的原因后慢慢懂得了耐心是一个人成功的必然具备的条件!同时,通过此次课程设计使我了解到数据结构可以说是计算机里一门基础课程,它需要把理论变为上机调试,所以一定要把基础知识学扎实。

虽然我现在还不会成功的编写一个完整的程序,但是在看程序的过程中,不断的上网查资料以及翻阅相关书籍,通过不断的模索,测试,发现问题,解决问题和在老师的帮助下一步一步慢慢的正确运行程序。

在本课程设计中,我明白了理论与实际应用相结合的重要性,并提高了自己组织数据及编写大型程序的能力。

培养了基本的、良好的程序设计技能以及合作能力。

这次课程设计同样提高了我的综合运用所学知识的能力。

并对VC有了更深入的了解。

《数据结构》是一门实践性很强的课程,上机实习是对学生全面综合素质进行训练的一种最基本的方法,是与课堂听讲、自学和练习相辅相成的、必不可少的一个教学环节。

上机实习一方面能使书本上的知识变“活”,起到深化理解和灵活掌握教学内容的目的;另一方面,上机实习是对学生软件设计的综合能力的训练,包括问题分析,总体结构设计,程序设计基本技能和技巧的训练。

此外,还有更重要的一点是:机器是比任何教师更严厉的检查者。

因此,在“数据结构”的学习过程中,必须严格按照老师的要求,主动地、积极地、认真地做好每一个实验,以不断提高自己的编程能力与专业素质。

【源程序】#include <stdio.h>#include <string.h>#include <malloc.h>#include <stdlib.h>typedef struct traver//旅客结构体{char name[20];//姓名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_num;//房间号int max;//房间的最大床位数int renshu;//房间当前的人数struct room*next;//下一个房间struct traver*tra_next;//指向旅客void menu_select()//菜单函数{printf("************旅客管理查询系统************\n"); //菜单选择printf("1.进行订房登记服务\n");printf("2.进行退房结账服务\n");printf("3.查询旅客信息\n");printf("4.统计旅客信息\n");printf("****************************************\n");}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->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;//指向该等级的下一个房间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;//等级链表尾指针为空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,性别%d,年龄%d,房间等级%d,房间号码%d,床号%d,入住时间%d,%d,%d\n",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");}else{printf("请输入房间等级\n");//输入旅客所需要的等级scanf("%d",&g);while(g!=NULL)//等级不空时{if(l->l_num!=g)l=l->next;else{t=l->r_next;//有该等级时while(t!=NULL)//房间不空{if(t->renshu==t->max)//*是否有空床位{t=t->next;//指向下一个房间if(t==NULL){getchar();printf("等级为的所有房间均无空位\n是否愿意更换等级[y/n]",g);scanf("%c",&c);//是否更换等级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("请输客人年龄\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;}else{q2=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为女\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;q1->next=NULL;t->renshu++;q1->bednum=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;printf("请输入该退房人房间的房间号码:\n");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("请输入该退房人的床位号码:\n");scanf("%d",&bednum); //输入退房人的床位号码getchar();while(q!=NULL){ if(q->bednum!=bednum)q=q->next;else //查找该床位{if(bednum==p->bednum) //因为床位没有设置头结点,所以对于第一个结点要特别判断{ //直接打印旅客信息printf("等级、房间、床位旅客的信息为:\n");printf("姓名\t性别\t年龄\t入住时间\n");printf("%s\t%d\t%d\t%d-%d-%d\n",q->name,q->sex,q->age,q->year,q->month,q->day);scanf("%c",&c);if(c=='y') //做出是否退房的选择{ t->tra_next=q->next;t->renshu--;printf("退房成功!\n");return(q); }elsereturn NULL; }else //如果床位不为1{while(p->next!=q) //指向下一床位p=p->next; //打印旅客信息printf("等级、房间、床位旅客的信息为:\n");printf("该名顾客的信息:\n");printf("姓名\t性别\t年龄\t入住时间\n");printf("%s\t%d\t%d\t%d-%d-%d\n",q->name,q->sex,q->age,q->year,q->month,q->day); printf("是否与要退房人信息相符?[y/n]\n");scanf("%c",&c);if(c=='y') //做出是否退房的选择{p->next=q->next;t->renshu--;printf("退房成功!\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 c[15];hotel *l;room *t;tra *s;int flag=0;//设置标志量printf("请输入要查询的旅客姓名:\n");scanf("%s",c);getchar();l=L->next;while(l!=NULL) //等级不为空时,指向房间{ t=l->r_next;while(t!=NULL)//房间不为空时,指向床位t=t->next;else{ s=t->tra_next;while(s!=NULL){if(!strcmp(s->name,c)) //如果找到该旅客{print(s,t); //打印信息s=s->next; //指向下一人,继续查找flag++; //标志量加1}elses=s->next;}t=t->next; //指向下一个房间} }l=l->next; //指向下一个等级}if(!flag) //标志量为零,则未查找到{printf("未找到该旅客!\n"); } }void Tongji(hotel *L) //统计旅店当前住宿人数函数{ char c[15];hotel *l;room*t;tra *s;int i=0,j=0;int flag;l=L->next;while(l!=NULL){ flag=0;i++;t=l->r_next;while(t!=NULL)//房间不空{ if(t->renshu==0)t=t->next;else{ s=t->tra_next;while(s!=NULL) //旅客不空{ flag++;j=j+flag;s=s->next;}t=t->next;}}l=l->next; }if(!j)printf("此时无人住宿。

相关主题