数据结构课程设计--宾馆客房管理系统.doc_第1页
数据结构课程设计--宾馆客房管理系统.doc_第2页
数据结构课程设计--宾馆客房管理系统.doc_第3页
数据结构课程设计--宾馆客房管理系统.doc_第4页
数据结构课程设计--宾馆客房管理系统.doc_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

精品文档数据结构课程设计报告实验名称 : 宾馆订房和退房系统姓 名 : 胡山权学 号 : 111714110学 院 : 计算机科学与技术学院专 业 : 网络工程指导老师 : 陈建新一需求分析1.实验题目:宾馆订房和退房系统2.基本要求:1)实现宾馆的订房业务2)实现退房业务3)实现统计业务4)实现查询业务其他:要求在VC+6.0下运行通过二概要设计本程序主要有以下几个功能模块void main () /主函数void tongji_cus (hotel_lv *L) /统计当前客人人数函数void cx_customer (hotel_lv *L) /查询客人信息函数cus* Delete (hotel_lv *L) /退房函数void input (hotel_lv *L) /订房函数void Pr_divide(cus *p,fangjian *q) /打印客人信息函数void Init(hotel_lv *L) /初始化函数typedef struct customer /客人结构体定义typedef struct hotel_lv /宾馆结构体定义typedef struct fangjian /房间结构体定义本程序通过主函数调用void main ()主函数,主函数再调用其他几个功能模块,其中客房数量通过初始化函数来实现,输入客房的数量和床位的数量来确定。 三详细设计1.程序运行流程图宾馆客房初始化Main录入客人信息查询客人信息统计入住情况退出系 统查询入住情况2.入住流程图姓名是入住流程是否客满是不能入住否输入所需等级是否有床位否打印客人信息年龄性别入住时间分配房间成功返回主菜单(3)退房业务姓名是否是退房业务输入要退房的房间等级是否有该等级否是否是输入房间号是否有该房间号否输入床位号是否有该床位号否打印客人信息年龄性别入住时间是否退房返回主菜单退房成功(4)查询业务不为空不为空不为空客人信息查询输入客人姓名遍历各等级遍历各房间遍历各床位不为空遍历各床位是否有该客人返回主菜单姓名性别年龄入住时间(5) 统计业务不为空不为空不为空统计当前客房入住人数遍历各等级遍历个房间遍历各床位计数器conut+打印信息返回主菜单3.各功能模块源代码及详细介绍(1) .主菜单Init (L);while (1) /进入菜单选项system (cls);printf (nnn);printf (*n);printf(* *n);printf (* 欢迎进入宾馆客房管理系统 *n);printf(* *n); printf (*n);printf (*湖北工程学院 计算机学院 1117141班 胡山权*nn);printf (-版权所有,侵权必究n);printf ( 1 录入客人信息n);printf ( 2 退房业务 n );printf ( 3 查询客人信息n);printf ( 4 统计客人信息n);printf ( 0 退出系统 n);printf ( 请选择你要办理的业务 n);scanf (%d,&c); / 做选择getchar ();switch (c)case 1: input (L); break;case 2: p=Delete (L);free (p);break; case 3: cx_customer (L);break; case 4: tongji_cus (L);break;case 0: return;(2) 统计当前客人人数函数void tongji_cus (hotel_lv *L) hotel_lv *l;fangjian *f;cus *t;int i=0,j=0;int flag;l=L-next;while (l!=NULL)flag=0;i+;f=l-fj_next;while (f!=NULL)if (f-mem_num=0)f=f-next;elset=f-cus_next;while (t!=NULL)flag+;j=j+flag;t=t-next;f=f-next;printf (等级为%d的房间的入住人数为%dn,i,flag);l=l-next;if (!j)printf (此时无人入住。n);system (pause);(3).退房业务cus* Delete (hotel_lv *L) cus *p,*q;char c;fangjian *f;int lv,hotel_num,bed_num;hotel_lv *l;l=L-next;printf (请输入该退房客人的房间等级号码:n);scanf (%d,&lv); getchar ();while (l!=NULL) .f-mem_num-;printf (退房成功!n);system (pause);return (q);elsereturn NULL; if (q=NULL) /如果该房间内床位为空 printf (没有找到该床位,请核对信息后重新输入。n);if (f=NULL) /如果该等级的房间为空printf (没有找到该房间号,请从新输入。n);if (l=NULL) /如果等级链表为空printf (没有找到该房间等级,请核对后输入!n);system (pause);(4) 查询客人信息void cx_customer (hotel_lv *L) char s15;hotel_lv *l;fangjian *f;cus *t; int flag=0; /设置标志量printf (请输入要查询的客人姓名:n);scanf (%s,s); /输入要查询的客人姓名 getchar ();l=L-next;while (l!=NULL) /等级不为空时,走向房间f=l-fj_next;while (f!=NULL) /房间不为空时,走向床位if (f-mem_num=0) /若此房间当前人数为0,走向下一见房f=f-next;elset=f-cus_next;while (t!=NULL)if (!strcmp (t-name,s) /如果找到该客人Pr_divide (t,f); /打印信息t=t-next; /指向下一个人,继续查找flag+; /标量加1elset=t-next;f=f-next;l=l-next;if (!flag) /标志量为0,则未查找到printf (没有找到该客人,请核对再输入。n);system (pause); /统计函数与查询函数基本类似(5) 入住函数void input (hotel_lv *L) char c;int i,lv;fangjian *p1;cus *s,*p2,*p3;hotel_lv *l;l=L-next;if (full (L) /判断是否客满printf (房间已满,不能入住。n);system (pause);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=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 (n-n);printf (n 入住客人信息:);printf(n 请输入客人的姓名:);scanf (%s,s-name);printf(n 请输入客人年龄:);scanf (%d,&(s-age);printf (n 请输入客人的性别(如:男1;女0):);scanf (%d,&(s-sex); printf (n 请输入客人入住的时间(如:1990 10 11):);scanf (%d %d %d,&s-year,&s-month,&s-day);s-lv=lv; /指针修改p1-cus_next=s; p1-mem_num+; /房间当前最大人数加1s-bed_num=1;s-next=NULL; /尾指针设置为空Pr_divide (s,p1); /打印房间分配表system (cls);break;else p2=p1-cus_next;p3=p2;i=1;while (imem_num)if (i=p3-bed_num)p3=p3-next;i+;elsei+;break;if (p3=NULL)s=(cus*)malloc(sizeof(cus);printf(n-n);printf (n 入住客人信息:);printf(n 请输入客人的姓名:);scanf (%s,s-name);printf(n 请输入客人年龄:);scanf (%d,&(s-age);printf (n 请输入客人的性别(如:男1;女0):);scanf (%d,&(s-sex);printf (n 请输入客人入住的时间(如:1990 10 11):);scanf (%d %d %d,&s-year,&s-month,&s-day);s-lv=lv;while (p2-next!=p3)p2=p2-next;p2-next=s;p1-mem_num+;s-bed_num=i;s-next=NULL;Pr_divide (s,p1);system(cls);break;elsewhile(p2-bed_num=i)p2=p2-next;s=(cus*)malloc(sizeof(cus);printf(n-n);printf (n 入住客人信息:);printf(n 请输入客人的姓名:);scanf (%s,s-name);printf(n 请输入客人年龄:);scanf (%d,&(s-age);printf (n 请输入客人的性别(如:男1;女0):);scanf (%d,&(s-sex);printf (n 请输入客人入住的时间(如:1990 10 11):);scanf (%d %d %d,&s-year,&s-month,&s-day);s-lv=lv;s-next=p2-next;p2-next=s;p1-mem_num+;s-bed_num=i-1;Pr_divide(s,p1);system(cls);break;break;(6) 初始化函数void Init(hotel_lv *L) int i,j,k,l;hotel_lv *p,*q;fangjian *p1, *p2,*p3;printf (请输入房间分为几个等级:n);scanf (%d,&j); /输入房间分为几个等级q=L;for (i=1;inext=p;p-lv_num=i; /给房间等级赋值printf (请输入房间等级为%d的房间个数:n,p-lv_num);scanf (%d,&l); /输入该等级房间的数目if (l=0)continue;else /初始化该房间的床位p2= (fangjian*)malloc(sizeof(fangjian);p2-fj_num=1;printf (请输入房间等级为%d房间号为l的床位个数的最大值:n,p-lv_num,k);scanf (%d,&(p2-max); /输入房间l的床位数目p2-mem_num=0; /该房间内当前人数赋值为0p-fj_next=p2;p3=p2;for (k=2;knext=p1;p1-fj_num=k;printf (请输入房间等级为%d房间号为%d的床位的个数的最大值;n,p-lv_num,k);scanf (%d,&(p1-max); /输入房间K的床位数目p1-mem_num=0; /该房间内的当前人数赋值为0p3=p1;p3-next=NULL; /房间链表尾指针为空q=q-next;q-next=NULL; /等级链表尾指针域为空system (pause);(7) 打印客人信息void Pr_divide(cus *p,fangjian *q) printf (*nn);printf ( 宾馆房间分配系统 nn);printf (*nn);printf (| 姓名 | 性别 | 年龄 | 等级号 | 房间号 | 床位号 | 入住时间 |n);printf (| %6s | %d | %2d | %2d | %2d | %2d | %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 (*n);printf (n);system (pause); 四程序截图说明(1) 程序主菜单:(2) 录入客人信息(3)查询客人信息(4)统计业务(5) 退房业务五分析总结:1. 出现问题及解决办法:刚开始,我想宾馆管理系统的算法和学生宿舍管理系统一样,所以开始,我定义的结构体数组,进行编写。可是在初始化的时候因为宾馆和宿舍的情况不一样,而且数组大小也不能用变量来指示,所以在用数组进行初始化的时候遇到了麻烦,有想到,如果用链表来编写的话,不用定义链表的长度,所以改用链表来编写。在客人入住的情况中,开始没有设置头结点,写到后面觉得不对劲,因为有好多情况要进行考虑,(如:判断是否客满,是否需要的等级有空位等),所以又加入头结点。在床头分配的时候,因为没有设置床头的头结点,所以要对第一个床位进行特别判断。然后进行多次修改,最终实现客人的入住。退房更入住时候一样,需要考虑很多情况,在床位回收的时候,还是因为没有设置头结点,所以要对第一个床位进行特别判断,还有就是一开始我把那个输入退房人的房间号和床位号的语句放在的循环体内,出现了一次循环要输入一次,后来经过调试发现了问题,移出来虹欧解决了这个问题。最后进行住函数的界面编写,查询操作比较简单,没有出现什么问题,由于自己不会文件的保存与读取函数的编写,所以没有采取文件的存储与读取。2.方法优缺点分析:能够很好的实现入住,查询,统计,退房等功能,但是不能实现文件的保存与读取。六致谢:转眼间,八周的课程设计结束了,感谢老师为我们提供的每周数次的到机房上机调试的机会,在那里,老师将为我们解决各种难题,同学之间也可以相互讨论,这才有了今天的成果,特别是老师的宝贵的意见,给了我很大的启示,同时也要感谢那些给予过我帮助的同学们。七源程序代码#include #include #include #include typedef struct customer /客人结构体char name15;int age;int sex;int lv;int bed_num;int year;int month;int day;struct customer* next; cus;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_num;struct fangjian *next;struct customer *cus_next;fangjian;void Init(hotel_lv *L) /初始化函数int i,j,k,l;hotel_lv *p,*q;fangjian *p1, *p2,*p3;printf (请输入房间分为几个等级:n);scanf (%d,&j); /输入房间分为几个等级q=L;for (i=1;inext=p;p-lv_num=i; /给房间等级赋值printf (请输入房间等级为%d的房间个数:n,p-lv_num);scanf (%d,&l); /输入该等级房间的数目if (l=0)continue;else /初始化该房间的床位p2= (fangjian*)malloc(sizeof(fangjian);p2-fj_num=1;printf (请输入房间等级为%d房间号为l的床位个数的最大值:n,p-lv_num,k);scanf (%d,&(p2-max); /输入房间l的床位数目p2-mem_num=0; /该房间内当前人数赋值为0p-fj_next=p2;p3=p2;for (k=2;knext=p1;p1-fj_num=k;printf (请输入房间等级为%d房间号为%d的床位的个数的最大值;n,p-lv_num,k);scanf (%d,&(p1-max); /输入房间K的床位数目p1-mem_num=0; /该房间内的当前人数赋值为0p3=p1;p3-next=NULL; /房间链表尾指针为空q=q-next;q-next=NULL; /等级链表尾指针域为空system (pause);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-mem_num!=f-max) /如果有房间的当前人数不等于房间的最大人数,则返回0return 0;elsef=f-next;l=l-next;if (!l) /否则返回1return 1; else return 0;void Pr_divide(cus *p,fangjian *q) /打印客人信息printf (*nn);printf ( 宾馆房间分配系统 nn);printf (*nn);printf (| 姓名 | 性别 | 年龄 | 等级号 | 房间号 | 床位号 | 入住时间 |n);printf (| %6s | %d | %2d | %2d | %2d | %2d | %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 (*n);printf (n);system (pause); void input (hotel_lv *L) /入住函数char c;int i,lv;fangjian *p1;cus *s,*p2,*p3;hotel_lv *l;l=L-next;if (full (L) /判断是否客满printf (房间已满,不能入住。n);system (pause);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=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 (n-n);printf (n 入住客人信息:);printf(n 请输入客人的姓名:);scanf (%s,s-name);printf(n 请输入客人年龄:);scanf (%d,&(s-age);printf (n 请输入客人的性别(如:男1;女0):);scanf (%d,&(s-sex);printf (n 请输入客人入住的时间(如:1990 10 11):);scanf (%d %d %d,&s-year,&s-month,&s-day);s-lv=lv; /指针修改p1-cus_next=s;p1-mem_num+; /房间当前最大人数加1s-bed_num=1;s-next=NULL; /尾指针设置为空Pr_divide (s,p1); /打印房间分配表system (cls);break;else p2=p1-cus_next;p3=p2;i=1;while (imem_num)if (i=p3-bed_num)p3=p3-next;i+;elsei+;break;if (p3=NULL)s=(cus*)malloc(sizeof(cus);printf(n-n);printf (n 入住客人信息:);printf(n 请输入客人的姓名:);scanf (%s,s-name);printf(n 请输入客人年龄:);scanf (%d,&(s-age);printf (n 请输入客人的性别(如:男1;女0):);scanf (%d,&(s-sex);printf (n 请输入客人入住的时间(如:1990 10 11):);scanf (%d %d %d,&s-year,&s-month,&s-day);s-lv=lv;while (p2-next!=p3)p2=p2-next;p2-next=s;p1-mem_num+;s-bed_num=i;s-next=NULL;Pr_divide (s,p1);system(cls);break;elsewhile(p2-bed_num=i)p2=p2-next;s=(cus*)malloc(sizeof(cus);printf(n-n);printf (n 入住客人信息:);printf(n 请输入客人的姓名:);scanf (%s,s-name);printf(n 请输入客人年龄:);scanf (%d,&(s-age);printf (n 请输入客人的性别(如:男1;女0):);scanf (%d,&(s-sex);printf (n 请输入客人入住的时间(如:1990 10 11):);scanf (%d %d %d,&s-year,&s-month,&s-day);s-lv=lv;s-next=p2-next;p2-next=s;p1-mem_num+;s-bed_num=i-1;Pr_divide(s,p1);system(cls);break;break;cus* Delete (hotel_lv *L) /退房cus *p,*q;char c;fangjian *f;int lv,hotel_num,bed_num;hotel_lv *l;l=L-next;printf (请输入该退房客人的房间等级号码:n);scanf (%d,&lv); /输入退房人的房间等级getchar ();while (l!=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;

温馨提示

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

评论

0/150

提交评论