数据结构课程设计宾馆客房管理系统.docx
《数据结构课程设计宾馆客房管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计宾馆客房管理系统.docx(38页珍藏版)》请在冰豆网上搜索。
数据结构课程设计宾馆客房管理系统
数据结构课程设计报告
实验名称:
宾馆订房和退房系统
姓名:
胡山权
学号:
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)//初始化函数
typedefstructcustomer//客人结构体定义
typedefstructhotel_lv//宾馆结构体定义
typedefstructfangjian//房间结构体定义
本程序通过主函数调用voidmain()主函数,主函数再调用其他几个功能模块,其中客房数量通过初始化函数来实现,输入客房的数量和床位的数量来确定。
三.详细设计
1.程序运行流程图
2.入住流程图
(3)退房业务
(4)查询业务
(5)统计业务
3.各功能模块源代码及详细介绍
(1).主菜单
Init(L);
while
(1)//进入菜单选项
{
system("cls");
printf("\n\n\n");
printf("************************************************************\n");
printf("**\n");
printf("*欢迎进入宾馆客房管理系统*\n");
printf("**\n");printf("********************************************************\n");
printf("******湖北工程学院计算机学院1117141班胡山权*********\n\n");
printf("------------------------------------------版权所有,XX\n");
printf("1录入客人信息\n");
printf("2退房业务\n");
printf("3查询客人信息\n");
printf("4统计客人信息\n");
printf("0退出系统\n");
printf("请选择你要办理的业务\n");
scanf("%d",&c);//做选择
getchar();
switch(c)
{
case1:
input(L);
break;
case2:
p=Delete(L);free(p);
break;
case3:
cx_customer(L);
break;
case4:
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);
}
else
returnNULL;
}
}
}
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("请输入要查询的客人姓名:
\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;
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,则未查找到
{
printf("没有找到该客人,请核对再输入。
\n");
system("pause");
}
}//统计函数与查询函数基本类似
(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++;//房间当前最大人数加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(i<=p1->mem_num)
{
if(i==p3->bed_num)
{
p3=p3->next;
i++;
}
else