1、数据结构课程设计宾馆客房管理系统数据结构课程设计报告实验名称 : 宾馆订房和退房系统姓 名 : 胡山权 学 号 : 111714110学 院 : 计算机科学及技术学院专 业 : 网络工程指导老师 : 陈建新一需求分析1.实验题目:宾馆订房和退房系统2.基本要求:1)实现宾馆的订房业务2)实现退房业务3)实现统计业务4)实现查询业务其他:要求在VC+6.0下运行通过二概要设计本程序主要有以下几个功能模块void main () /主函数void tongji_cus (hotel_lv *L) /统计当前客人人数函数void cx_customer (hotel_lv *L) /查询客人信息函数
2、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 ()主函数,主函数再调用其他几个功能模块,其中客房数量通过初始化函数来实现,输入客房的数量和床位的数
3、量来确定。 三详细设计1.程序运行流程图2.入住流程图(3)退房业务(4)查询业务(5) 统计业务3.各功能模块源代码及详细介绍(1) .主菜单Init (L);while (1) /进入菜单选项system (cls);printf (nnn);printf (*n);printf(* *n);printf (* 欢迎进入宾馆客房管理系统 *n);printf(* *n); printf (*n);printf (*湖北工程学院 计算机学院 1117141班 胡山权*nn);printf (-版权所有,XXn);printf ( 1 录入客人信息n);printf ( 2 退房业务 n );
4、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
5、_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).退房
6、业务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 (没有找到该床位,请核对信息后重新
7、输入。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;
8、while (l!=NULL) /等级不为空时,走向房间 f=l-fj_next; while (f!=NULL) /房间不为空时,走向床位 if (f-mem_num=0) /若此房间当前人数为0,走向下一见房 f=f-next; else t=f-cus_next; while (t!=NULL) if (!strcmp (t-name,s) /如果找到该客人 Pr_divide (t,f); /打印信息 t=t-next; /指向下一个人,继续查找 flag+; /标量加1 else t=t-next; f=f-next; l=l-next; if (!flag) /标志量为0,则未查找
9、到 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); else printf (请输入旅客所需的房间等级:); scanf (%d,&lv); while (l!=NULL) /等级不为空时 if (l-lv_
10、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); else return; else /客人信息登记 /因为床位没有设置头结点,所以对于第一个结点要特别判断 if(p1-mem_num=0) s=(cus*)mall
11、oc(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_nu
12、m+; /房间当前最大人数加1 s-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+; else i+; break; if (p3=NULL) s=(cus*)malloc(sizeof(cus); printf(n-n); printf (n 入住客人信息:); printf(n 请输入客人的姓名:); scanf
13、(%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(
14、cls); break; else while(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-y
15、ear,&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;
16、/给房间等级赋值 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; /该房间内当前人数赋值为0 p-fj_next=p2; p3=p2; for (k=2;
17、knext=p1; p1-fj_num=k; printf (请输入房间等级为%d房间号为%d的床位的个数的最大值;n,p-lv_num,k); scanf (%d,&(p1-max); /输入房间K的床位数目 p1-mem_num=0; /该房间内的当前人数赋值为0 p3=p1; p3-next=NULL; /房间链表尾指针为空 q=q-next; q-next=NULL; /等级链表尾指针域为空 system (pause);(7) 打印客人信息void Pr_divide(cus *p,fangjian *q) printf (*nn); printf ( 宾馆房间分配系统 nn); p
18、rintf (*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.出现问题及解决办
19、法:刚开始,我想宾馆管理系统的算法和学生宿舍管理系统一样,所以开始,我定义的结构体数组,进行编写。可是在初始化的时候因为宾馆和宿舍的情况不一样,而且数组大小也不能用变量来指示,所以在用数组进行初始化的时候遇到了麻烦,有想到,如果用链表来编写的话,不用定义链表的长度,所以改用链表来编写。在客人入住的情况中,开始没有设置头结点,写到后面觉得不对劲,因为有好多情况要进行考虑,(如:判断是否客满,是否需要的等级有空位等),所以又加入头结点。在床头分配的时候,因为没有设置床头的头结点,所以要对第一个床位进行特别判断。然后进行多次修改,最终实现客人的入住。退房更入住时候一样,需要考虑很多情况,在床位回收的
20、时候,还是因为没有设置头结点,所以要对第一个床位进行特别判断,还有就是一开始我把那个输入退房人的房间号和床位号的语句放在的循环体内,出现了一次循环要输入一次,后来经过调试发现了问题,移出来虹欧解决了这个问题。最后进行住函数的界面编写,查询操作比较简单,没有出现什么问题,由于自己不会文件的保存及读取函数的编写,所以没有采取文件的存储及读取。2.方法优缺点分析:能够很好的实现入住,查询,统计,退房等功能,但是不能实现文件的保存及读取。六致谢:转眼间,八周的课程设计结束了,感谢老师为我们提供的每周数次的到机房上机调试的机会,在那里,老师将为我们解决各种难题,同学之间也可以相互讨论,这才有了今天的成果
21、,特别是老师的宝贵的意见,给了我很大的启示,同时也要感谢那些给予过我帮助的同学们。七源程序代码#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 fang
22、jian *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
23、; 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; /该房间内当前人数赋值为0 p-fj_next=p2; p3=p2; for
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1