数据结构课程设计宾馆客房管理系统.docx
《数据结构课程设计宾馆客房管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计宾馆客房管理系统.docx(33页珍藏版)》请在冰豆网上搜索。
数据结构课程设计宾馆客房管理系统
数据结构课程设计报告
实验名称:
宾馆订房和退房系统
姓
名:
胡山权
学
号:
111714110
学
院:
计算机科学与技术学院
专
业:
网络工程
指导老师:
陈建新
.需求分析
1.实验题目:
宾馆订房和退房系统
2.基本要求:
1)实现宾馆的订房业务
2)实现退房业务
3)实现统计业务
4)实现查询业务
其他:
要求在VC++6.0下运行通过
.概要设计本程序主要有以下几个功能模块voidmain()//主函数
voidtongji_cus(hotel_lv*L)voidcx_customer(hotel_lv*L)cus*Delete(hotel_lv*L)voidinput(hotel_lv*L)voidPr_divide(cus*p,fangjian*q)voidInit(hotel_lv*L)typedefstructcustomertypedefstructhotel_lvtypedefstructfangjian
//统计当前客人人数函数//查询客人信息函数//退房函数//订房函数//打印客人信息函数//初始化函数//客人结构体定义//宾馆结构体定义
//房间结构体定义
本程序通过主函数调用voidmain()主函数,主函数再调用其他几个功能模块,其中客房数量通过初始化函数来实现,输入客房的数量和床位的数量来确定。
详细设计
1.程序运行流程图
宾馆客房初始化
Main
录入客
L人信息
查询客人信息丿
查询入住情况
统计入住情况
退出系统
2•入住流程图
(3)退房业务
是
(4)查询业务
客人信息查询
输入客人姓名
遍历各等级
不为空
遍历各房间
(5)统计业务
3.各功能模块源代码及详细介绍
⑴主菜单
Init(L);
while
(1)
{
system("cis");printf("\n\n\n");
printf
//进入菜单选项
H**********************************************************
**\n");
printf("*printf("*
欢迎进入宾馆客房管理系统
*\n");
*\n");
*\n");
printf(
\\******************************************************
**\n");
printf("*
printf("******湖北工程学院计算机学院1117141班胡山权*********\n\n");
printf("
版权所有,XX\n");
printf("1录入客人信息\n");
printf("2退房业务\n");
printf("3查询客人信息\n");
printf("4统计客人信息\n");
printf("
printf("scanf("%d",&c);getchar();
switch(c)
0退出系统\n");请选择你要办理的业务\n");
//做选择
case1:
case2:
input(L);
break;
p=Delete(L);free(p);
case3:
case4:
break;
cx_customer(L);
break;tongji_cus(L);
break;
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!
=NULL)
{
if(f->mem_num==0)f=f->next;
else
{t=f->cus_next;while(t!
=NULL)
{flag++;j=j+flag;t=t->next;
}f=f->next;
}
}
printf("等级为%d的房间的入住人数为%d\n",i,flag);l=l->next;
}
if(!
j)
printf("此时无人入住。
\n");system("pause");
}
(3).退房业务
cus*Delete(hotel_lv*L)
{cus*p,*q;charc;fangjian*f;intlv,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);
}elsereturnNULL;
}
}
//如果该房间内床位为空
}if(q=NULL)
printf("没有找到该床位,请核对信息后重新输入。
\n");
}
}
}
if(f==NULL)//如果该等级的房间为空
{
printf("没有找到该房间号,请从新输入。
\n");
}
}
}
if(l==NULL)//如果等级链表为空
{
printf("没有找到该房间等级,请核对后输入!
\n");
}
system("pause");
}
(4)查询客人信息
voidcx_customer(hotel_lv*L)
{
chars[15];
hotel_lv*l;
fangjian*f;
cus*t;
intflag=0;
printf("请输入要查询的客人姓名:
scanf("%s",s);
getchar();
l=L->next;
while(l!
=NULL)
{
f=l->fj_next;
while(f!
=NULL)
{
if(f->mem_num==0)f=f->next;
else
{t=f->cus_next;while(t!
=NULL)
//设置标志量
\n");
//输入要查询的客人姓名
//等级不为空时,走向房间
//房间不为空时,走向床位
//若此房间当前人数为0,走向下一见房
if(!
strcmp(t->name,s)){
Pr_divide(t,f);
t=t->next;
flag++;
}
else
t=t->next;
}
f=f->next;
}
}
l=l->next;
}
if(!
flag)
{
//如果找到该客人
//打印信息//指向下一个人,继续查找
//标量加1
printf("没有找到该客人,请核对再输入system("pause");
}
}
//标志量为0,则未查找到
\n");
//统计函数与查询函数基本类似
(5)入住函数voidinput(hotel_lv*L){
charc;
inti,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_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*)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请输入客人入住的时间(如:
19901011):
");scanf("%d%d%d",&s->year,&s->month,&s->day);
s->lv=lv;p1->cus_next=s;p1->mem_num++;s->bed_num=1;s->next=NULL;
Pr_divide(s,p1);system("cls");
//指针修改
//房间当前最大人数加1
//尾指针设置为空
//打印房间分配表
break;
}
else
{p2=p1->cus_next;p3=p2;i=1;while(i<=p1->mem_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("%s",s->name);
printf("\n请输入客人年龄:
");
scanf("%d",&(s->age));
printf("\n请输入客人的性别(如:
男1;女0):
");scanf("%d",&(s->sex));
printf("\n请输入客人入住的时间(如:
19901011):
");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;
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请输入客人入住的时间(如:
19901011):
");
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)初始化函数
voidInit(hotel_lv*L)
{
inti,j,k,l;
hotel_lv*p,*q;
fangjian*p1,*p2,*p3;
printf("请输入房间分为几个等级:
\n");
scanf("%d",&j);//输入房间分为几个等级
q=L;
for(i=1;i{
p=(hotel_lv*)malloc(sizeof(hotel_lv));
q->next=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;//该房间内当前人数赋值为0
p->fj_next=p2;
p3=p2;
for(k=2;k<=1;k++)
{p1=(fangjian*)malloc(sizeof(fangjian));p3->next=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)打印客人信息
voidPr_divide(cus*p,fangjian*q)
{
printf("*************************************************************\n\n");
\n\n");
printf("宾馆房间分配系统
printf("*************************************************************\n\n")・
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)查询客人信息
1気入客人倍息
2狼房业务
3swwx4般甘餐点信息
3i飆會曩办理的业务
备輛入要查询的客人姓名:
胡山权
覚蔘聲豪豪■基轉豪蕉黄豪涎豪/ifW豪■幕瞬■豪iif*餐竜基賛H齋粪豪豪*»■听寰■賛豪!
ffif*港穂蔘養・:
爭確基聲豪卿瞬冀豪算翼■襦
宾馆房间分配系统
KZMiCXmOCMilCXKKXXMriCXKiCJtfXXXMZMr梵KXXXiMKlCMiKHNKHXXiCKXiCMiOOiMZltfiMKJffaiEXiMKJCMElfXJEXiMliOffiC
!
姓名:
性别:
年龄:
等级号:
房间号:
床位号:
入住时间:
i胡山权11:
20:
1!
1i1:
i^wa-10-n:
KIKKXatXJEMSXXJCXXXJtMIKKNJtKKXMZJCaitKZMKKmOEMiKXaKKiMXJtMIXXXJffKKHMIMEat^IKaOCMXJEiMKXaCiaiMXUMZK
请按任気键继续•••
(4)统计业务
■'C:
\User5\mache\De5ktop\^MDebu系统疋囂于
JLJCJCKWLJILJCJCJLJCJCJUjMItXitKXKKJOtXflKEJtJfEJCJtMLEJHJfZJCJtMEJHJfZJCJtMEKXXJtJCJitXWKli!
#£■
*
K
欧迎进入宾馆客房管理系统
*********}胡北工程学院计算机学院1117141班胡山权mux
1录入客人信息
谙轟溝办理的业务
信息
闢fog
版权所有’壹权必究
(5)退房业务
*********湖北工乍呈学院计算机学院1117141班胡山权***********
bA$A信息
退房亚务
諭客?
9很援沁
请选詡i办理的业务
,版权所有,禮权必究
左自
口.卫%
1
备输入该追房客人的房间等级号码■备输入退房客人的房间号码,
请输入该客人的床位号:
叔此库位的客®
卻!
年龄入住时间
情01291990-5-6
疋否与退房人的信息相同?
1
姓
afl
嚅功!
1htT1T,
'蕙犍继续・・
五•分析总结:
1.出现问题及解决办法:
刚开始,我想宾馆管理系统的算法和学生宿舍管理系统一样,所以开始,我定义
的结构体数组,进行编写。
可是在初始化的时候因为宾馆和宿舍的情况不一样,而且数组大小也不能用变量来指示,所以在用数组进行初始化的时候遇到了麻烦,有想到,如果用链表来编写的话,不用定义链表的长度,所以改用链表来编写。
在客人入住的情况中,开始没有设置头结点,写到后面觉得不对劲,因为有好多情况要进行考虑,(如:
判断是否客满,是否需要的等级有空位等),所以又加入头结点。
在床头分配的时候,因为没有设置床头的头结点,所以要对第一个床位进行特别判断。
然后进行多次修改,最终实现客人的入住。
退房更入住时候一样,需要考虑很多情况,在床位回收的时候,还是因为没有设置头结点,所以要对第一个床位进行特别判断,还有就是一开始我把那个输入退房人的房间号和床位号的语句放在的循环体内,出现了一次循环要输入一次,后
来经过调试发现了问题,移出来虹欧解决了这个问题。
最后进行住函数的界面编写,查询操作比较简单,没有出现什么问题,由于自己不会文件的保存与读取函数的编写,所以没有采取文件的存储与读取。
2.方法优缺点分析:
能够很好的实现入住,查询,统计,退房等功能,但是不能实现文件的保存与读取。
六.致谢:
转眼间,八周的课程设计结束了,感谢老师为我们提供的每周数次的到机房上机调试的机会,在那里,老师将为我们解决各种难题,同学之间也可以相互讨论,这才有了今天的成果,特别是老师的宝贵的意见,给了我很大的启示,同时也要感谢那些给予过我帮助的同学们。
七.源程序代码
#include
#include
#include
#include
typedefstructcustomer{
//客人结构体
charname[15];intage;intsex;intlv;
intbed_num;intyear;
intmonth;intday;
structcustomer*next;
}cus;
}hotel_lv;
typedefstructfangjian{
}fangjian;
voidInit(hotel_lv*L)
{
几个等级
房间等级赋值
\n",p->lv_num);
入该等级房间的数目
始化该房间的床位
intlv_num;structhotel_lv*next;structfangjian*fj_next;
//房间结构体
intfj_num;
intmax;
intmem_num;
structfangjian*next;
structcustomer*cus_next;
//初始化函数
inti,j,k,l;
hotel_lv*p,*q;
fangjian*p1,*p2,*p3;
printf("请输入房间分为几个等级:
\n");
scanf("%d",&j);//输入房间分为
q=L;
for(i=1;i{
p=(hotel_lv*)malloc(sizeof(hotel_lv));
q->next=p;
p->lv_num=i;//给
printf("请输入房间等级为%d的房间个数:
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;k<=1;k++)
{
p1=(fangjian*)malloc(sizeof(fangjian));
p3->next=p1;
p1->fj_num=k;
printf("请输入房间等级为%d房间号为
%d的
床位的个数的最大值;\n",p->lv_num,k);
scanf("%d",&(p1->max));
//输
入房间K的床位数目
p1->mem_num=0;
//该房