数据结构课程设计宾馆客房管理系统Word文件下载.docx
《数据结构课程设计宾馆客房管理系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计宾馆客房管理系统Word文件下载.docx(44页珍藏版)》请在冰豆网上搜索。
(5)统计业务
3.各功能模块源代码与详细介绍
(1).主菜单
Init(L);
while
(1)//进入菜单选项
{
system("
cls"
);
printf("
\n\n\n"
************************************************************\n"
printf("
**\n"
*欢迎进入宾馆客房管理系统*\n"
printf("
********************************************************\n"
******湖北工程学院计算机学院1117141班胡山权*********\n\n"
------------------------------------------版权所有,XX\n"
1录入客人信息\n"
2退房业务\n"
3查询客人信息\n"
4统计客人信息\n"
0退出系统\n"
请选择你要办理的业务\n"
scanf("
%d"
&
c);
//做选择
getchar();
switch(c)
case1:
input(L);
break;
case2:
p=Delete(L);
free(p);
break;
case3:
cx_customer(L);
case4:
tongji_cus(L);
case0:
return;
}
(2)统计当前客人人数函数
voidtongji_cus(hotel_lv*L)
hotel_lv*l;
fangjian*f;
cus*t;
inti=0,j=0;
intflag;
l=L->
next;
while(l!
=NULL)
flag=0;
i++;
f=l->
fj_next;
while(f!
if(f->
mem_num==0)
f=f->
else
t=f->
cus_next;
while(t!
flag++;
j=j+flag;
t=t->
等级为%d的房间的入住人数为%d\n"
i,flag);
l=l->
if(!
j)
此时无人入住。
\n"
pause"
(3).退房业务
cus*Delete(hotel_lv*L)
{
cus*p,*q;
charc;
fangjian*f;
intlv,hotel_num,bed_num;
hotel_lv*l;
l=L->
请输入该退房客人的房间等级号码:
scanf("
lv);
getchar();
while(l!
{.
.
f->
mem_num--;
退房成功!
return(q);
returnNULL;
}
}
if(q=NULL)//如果该房间内床位为空{
printf("
没有找到该床位,请核对信息后重新输入。
}
}
}
if(f==NULL)//如果该等级的房间为空
{
printf("
没有找到该房间号,请从新输入。
if(l==NULL)//如果等级链表为空
{
printf("
没有找到该房间等级,请核对后输入!
system("
(4)查询客人信息
voidcx_customer(hotel_lv*L)
chars[15];
cus*t;
intflag=0;
//设置标志量
请输入要查询的客人姓名:
%s"
s);
//输入要查询的客人姓名
=NULL)//等级不为空时,走向房间
f=l->
while(f!
=NULL)//房间不为空时,走向床位
{
if(f->
mem_num==0)//若此房间当前人数为0,走向下一见房
f=f->
else
t=f->
while(t!
{
if(!
strcmp(t->
name,s))//如果找到该客人
{
Pr_divide(t,f);
//打印信息
t=t->
//指向下一个人,继续查找
flag++;
//标量加1
else
l=l->
if(!
flag)//标志量为0,则未查找到
没有找到该客人,请核对再输入。
system("
}//统计函数与查询函数基本类似
(5)入住函数
voidinput(hotel_lv*L)
inti,lv;
fangjian*p1;
cus*s,*p2,*p3;
if(full(L))//判断是否客满
房间已满,不能入住。
else
请输入旅客所需的房间等级:
"
scanf("
while(l!
=NULL)//等级不为空时
if(l->
lv_num!
=lv)
l=l->
else//有此等级时
p1=l->
while(p1!
=NULL)//房间不为空
if(p1->
mem_num==p1->
max)//是否有空床位
p1=p1->
if(p1==NULL)
此等级为%d的所有房间均无空位\n是否愿意更好等级[y/n]"
lv);
%c"
//选择
if(c=='
y'
)
else//客人信息登记
{//因为床位没有设置头结点,所以对于第一个结点要特别判断
if(p1->
{
s=(cus*)malloc(sizeof(cus));
printf("
\n---------------------------------\n"
\n入住客人信息:
printf("
\n请输入客人的姓名:
scanf("
s->
name);
\n请输入客人年龄:
(s->
age));
printf("
\n请输入客人的性别(如:
男1;
女0):
sex));
\n请输入客人入住的时间(如:
19901011):
%d%d%d"
s->
year,&
month,&
day);
s->
lv=lv;
//指针修改
p1->
cus_next=s;
p1->
mem_num++;
//房间当前最大人数加1
bed_num=1;
next=NULL;
//尾指针设置为空
Pr_divide(s,p1);
//打印房间分配表
system("
break;
}
else
p2=p1->
p3=p2;
i=1;
while(i<
=p1->
mem_num)
{
if(i==p3->
bed_num)
{
p3=p3->
i++;
}
else
break;
}
if(p3==NULL)
s=(cus*)malloc(sizeof(cus));
printf("
\n--------------------------------------\n"
printf("
printf("
scanf("
while(p2->
next!
=p3)
p2=p2->
p2->
next=s;
s->
bed_num=i;
system("
else
while(p2->
bed_num==i)
p2=p2->
next=p2->
bed_num=i-1;
Pr_divide(s,p1);
(6)初始化函数
voidInit(hotel_lv*L)
inti,j,k,l;
hotel_lv*p,*q;
fangjian*p1,*p2,*p3;
请输入房间分为几个等级:
j);
//输入房间分为几个等级
q=L;
for(i=1;
i<
j;
i++)
p=(hotel_lv*)malloc(sizeof(hotel_lv));
q->
next=p;
p->
lv_num=i;
//给房间等级赋值
请输入房间等级为%d的房间个数:
p->
lv_num);
scanf("
l);
//输入该等级房间的数目
if(l==0)
continue;
else//初始化该房间的床位
p2=(fangjian*)malloc(sizeof(fangjian));
p2->
fj_num=1;
请输入房间等级为%d房间号为l的床位个数的最大值:
lv_num,k);
(p2->
max));
//输入房间l的床位数目
mem_num=0;
//该房间内当前人数赋值为0
p->
fj_next=p2;
p3=p2;
for(k=2;
k<
=1;
k++)
p1=(fangjian*)malloc(sizeof(fangjian));
p3->
next=p1;
fj_num=k;
请输入房间等级为%d房间号为%d的床位的个数的最大值;
scanf("
(p1->
//输入房间K的床位数目
//该房间内的当前人数赋值为0
p3=p1;
p3->
//房间链表尾指针为空
q=q->
q->
//等级链表尾指针域为空
(7)打印客人信息
voidPr_divide(cus*p,fangjian*q)
*************************************************************\n\n"
宾馆房间分配系统\n\n"
|姓名|性别|年龄|等级号|房间号|床位号|入住时间|\n"
|%6s|%d|%2d|%2d|%2d|%2d|%4d-%2d-%2d|\n"
name,p->
sex,p->
age,p->
lv,q->
fj_num,p->
bed_num,p->
year,p->
month,p->
***************************************************************\n"
四.程序截图说明
(1)程序主菜单:
(2)录入客人信息
(3)查询客人信息
(4)统计业务
(5)退房业务
五.分析总结:
1.出现问题与解决办法:
刚开始,我想宾馆管理系统的算法和学生宿舍管理系统一样,所以开始,我定义的结构体数组,进行编写。
可是在初始化的时候因为宾馆和宿舍的情况不一样,而且数组大小也不能用变量来指示,所以在用数组进行初始化的时候遇到了麻烦,有想到,如果用链表来编写的话,不用定义链表的长度,所以改用链表来编写。
在客人入住的情况中,开始没有设置头结点,写到后面觉得不对劲,因为有好多情况要进行考虑,(如:
判断是否客满,是否需要的等级有空位等),所以又加入头结点。
在床头分配的时候,因为没有设置床头的头结点,所以要对第一个床位进行特别判断。
然后进行多次修改,最终实现客人的入住。
退房更入住时候一样,需要考虑很多情况,在床位回收的时候,还是因为没有设置头结点,所以要对第一个床位进行特别判断,还有就是一开始我把那个输入退房人的房间号和床位号的语句放在的循环体内,出现了一次循环要输入一次,后来经过调试发现了问题,移出来虹欧解决了这个问题。
最后进行住函数的界面编写,查询操作比较简单,没有出现什么问题,由于自己不会文件的保存与读取函数的编写,所以没有采取文件的存储与读取。
2.方法优缺点分析:
能够很好的实现入住,查询,统计,退房等功能,但是不能实现文件的保存与读取。
六.致谢:
转眼间,八周的课程设计结束了,感谢老师为我们提供的每周数次的到机房上机调试的机会,在那里,老师将为我们解决各种难题,同学之间也可以相互讨论,这才有了今天的成果,特别是老师的宝贵的意见,给了我很大的启示,同时也要感谢那些给予过我帮助的同学们。
七.源程序代码
#include<
stdio.h>
stdlib.h>
string.h>
malloc.h>
typedefstructcustomer//客人结构体
charname[15];
intage;
intsex;
intlv;
intbed_num;
intyear;
intmonth;
intday;
structcustomer*next;
}cus;
typedefstructhotel_lv//宾馆结构体
intlv_num;
structhotel_lv*next;
structfangjian*fj_next;
}hotel_lv;
typedefstructfangjian//房间结构体
intfj_num;
intmax;
intmem_num;
structfangjian*next;
structcustomer*cus_next;
}fangjian;
else//初始化该房间的床位
for