数据结构课程设计宾馆客房管理系统.docx

上传人:b****6 文档编号:7409261 上传时间:2023-01-23 格式:DOCX 页数:38 大小:208.37KB
下载 相关 举报
数据结构课程设计宾馆客房管理系统.docx_第1页
第1页 / 共38页
数据结构课程设计宾馆客房管理系统.docx_第2页
第2页 / 共38页
数据结构课程设计宾馆客房管理系统.docx_第3页
第3页 / 共38页
数据结构课程设计宾馆客房管理系统.docx_第4页
第4页 / 共38页
数据结构课程设计宾馆客房管理系统.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

数据结构课程设计宾馆客房管理系统.docx

《数据结构课程设计宾馆客房管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计宾馆客房管理系统.docx(38页珍藏版)》请在冰豆网上搜索。

数据结构课程设计宾馆客房管理系统.docx

数据结构课程设计宾馆客房管理系统

 

数据结构课程设计报告

 

实验名称:

宾馆订房和退房系统

姓名:

胡山权

学号:

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

{

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");

printf("宾馆房间分配系统\n\n");

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)查询客人信息

(4)统计业务

 

(5)退房业务

五.分析总结:

1.出现问题及解决办法:

刚开始,我想宾馆管理系统的算法和学生宿舍管理系统一样,所以开始,我定义的结构体数组,进行编写。

可是在初始化的时候因为宾馆和宿舍的情况不一样,而且数组大小也不能用变量来指示,所以在用数组进行初始化的时候遇到了麻烦,有想到,如果用链表来编写的话,不用定义链表的长度,所以改用链表来编写。

在客人入住的情况中,开始没有设置头结点,写到后面觉得不对劲,因为有好多情况要进行考虑,(如:

判断是否客满,是否需要的等级有空位等),所以又加入头结点。

在床头分配的时候,因为没有设置床头的头结点,所以要对第一个床位进行特别判断。

然后进行多次修改,最终实现客人的入住。

退房更入住时候一样,需要考虑很多情况,在床位回收的时候,还是因为没有设置头结点,所以要对第一个床位进行特别判断,还有就是一开始我把那个输入退房人的房间号和床位号的语句放在的循环体内,出现了一次循环要输入一次,后来经过调试发现了问题,移出来虹欧解决了这个问题。

最后进行住函数的界面编写,查询操作比较简单,没有出现什么问题,由于自己不会文件的保存及读取函数的编写,所以没有采取文件的存储及读取。

2.方法优缺点分析:

能够很好的实现入住,查询,统计,退房等功能,但是不能实现文件的保存及读取。

六.致谢:

转眼间,八周的课程设计结束了,感谢老师为我们提供的每周数次的到机房上机调试的机会,在那里,老师将为我们解决各种难题,同学之间也可以相互讨论,这才有了今天的成果,特别是老师的宝贵的意见,给了我很大的启示,同时也要感谢那些给予过我帮助的同学们。

七.源程序代码

#include

#include

#include

#include

 

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;

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1