数据结构旅店管理系统课程设计报告文档格式.docx
《数据结构旅店管理系统课程设计报告文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构旅店管理系统课程设计报告文档格式.docx(43页珍藏版)》请在冰豆网上搜索。
![数据结构旅店管理系统课程设计报告文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/15/fa9a4e13-223e-4009-8013-bae2a6165b91/fa9a4e13-223e-4009-8013-bae2a6165b911.gif)
2012年6月8日
课程设计评语
成绩:
指导教师:
_______________
年月日
3.数据结构
本次数据结构课程设计,做的是旅店管理系统,定义了三个结构体链表,给等级链表设置了一个头结点,采用链表嵌套方法,等级链表嵌套房间链表,房间链表再嵌套旅客链表。
(1)对旅客结构体定义
typedefstructcustomer
{
charname[15];
//旅客姓名
intage;
//旅客年龄
intsex;
//旅客性别
intlv;
//旅客住宿时的等级号
intbed_num;
//旅客的床位号
intyear;
//开始住宿日期:
年
intmonth;
//开始住宿日期:
月
intday;
日
structcustomer*next;
//指向下一旅客
}cus;
(2)对旅店结构体定义
typedefstructhotel_lv
intlv_num;
//旅店等级号
structhotel_lv*next;
//指向下一等级
structfangjian*fj_next;
//指向房间
}hotel_lv;
(3)房间结构体定义
typedefstructfangjian
intfj_num;
//房间号
intmax;
//房间的最大床位数目
intmem_num;
//房间内的当前人数
structfangjian*next;
//指向下一房间
structcustomer*cus_next;
//指向旅客
}fangjian;
4.总体设计
(1)主函数
(2)有旅客来住宿时:
(3)有旅客来退房时:
(4)查询旅客信息时:
(5)统计旅店当前入住人数:
(5)各函数名
①初始化函数:
voidInit(hotel_lv*L)
②判断是否客满:
intfull(hotel_lv*L)
③打印旅客信息:
voidPr_divide(cus*p,fangjian*q)
④旅客住宿函数:
⑤旅客退房函数:
cus*Delete(hotel_lv*L)
⑥查询旅客信息:
voidcx_customer(hotel_lv*L)
⑦统计旅店当前入住人数:
voidTongji_cus(hotel_lv*L)
⑧主函数:
voidmain()
5.详细设计
关键步骤设计
(1)初始化旅店函数
采用链表方式,进行旅店的初始化操作,给旅店等级设置了头结点。
输入房间等级,每个等级的房间数目,每个房间的床位数目。
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<
=j;
i++)//初始化该等级的房间
{
p=(hotel_lv*)malloc(sizeof(hotel_lv));
q->
next=p;
p->
lv_num=i;
//给房间等级赋值
printf("
请输入房间等级为%d的房间个数:
p->
lv_num);
l);
//输入该等级的房间数目
if(l==0)
continue;
else//初始化该房间内的床位
{
p2=(fangjian*)malloc(sizeof(fangjian));
p2->
fj_num=1;
printf("
请输入房间等级为%d房间号为1的床位个数的最大值:
lv_num,k);
scanf("
(p2->
max));
//输入房间1的床位数目
mem_num=0;
//该房间内当前人数赋为零
fj_next=p2;
p3=p2;
for(k=2;
k<
=l;
k++)
{
p1=(fangjian*)malloc(sizeof(fangjian));
p3->
next=p1;
p1->
fj_num=k;
请输入房间等级为%d房间号为%d的床位个数的最大值:
(p1->
//输入房间k的床位数目
//该房间内的当前人数赋为零
p3=p1;
}
next=NULL;
//房间链表尾指针赋为空
}
q=q->
next;
}
q->
//等级链表尾指针域赋为空
}
(2)旅客住宿情况
采用尾插法,判断是否有空床位,有就进行旅客的入住操作。
voidinput(hotel_lv*L)
charc;
cus*s,*p2,*p3;
hotel_lv*l;
l=L->
fangjian*p1;
inti,lv;
if(full(L))//判断是否旅店客满
旅店客满,不能入住。
system("
pause"
else
请输入旅客所需的房间等级:
"
//输入旅客所需的等级
lv);
while(l!
=NULL)//等级不为空时
if(l->
lv_num!
=lv)
l=l->
else//有此等级时
p1=l->
fj_next;
while(p1!
=NULL)//房间不为空
{
if(p1->
mem_num==p1->
max)//是否有空床位
{
p1=p1->
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"
\n旅客的信息:
"
\n请输入旅客姓名:
scanf("
%s"
s->
name);
\n请输入旅客年龄:
(s->
age));
\n请输入旅客性别(如:
男1:
女0):
sex));
\n请输入旅客住宿开始日期(如:
19911021):
%d%d%d"
s->
year,&
month,&
day);
s->
lv=lv;
//修改指针
p1->
cus_next=s;
mem_num++;
//房间当前人数加1
bed_num=1;
//尾指针置为空
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->
i++;
}
else
break;
}
if(p3==NULL)
s=(cus*)malloc(sizeof(cus));
printf("
age);
sex);
\n请输入旅客住宿开始日期(如:
s->
lv=lv