宾馆客房管理信息系统.docx
《宾馆客房管理信息系统.docx》由会员分享,可在线阅读,更多相关《宾馆客房管理信息系统.docx(28页珍藏版)》请在冰豆网上搜索。
宾馆客房管理信息系统
《数据库原理及应用》课程设计
——宾馆客房管理信息系统
专业:
计算机科学与技术(网络)
班级:
网络101
姓名:
王勇
学号:
1013113018
一、课题名称
宾馆客房管理信息系统
二、目的及要求、任务
通过本次课程设计,加深对数据库原理以及相关程序设计语言的理解和应用水平。
通过设计实际的数据库系统应用课题,进一步熟悉数据库管理系统的操作技术,提高动手能力,提高分析问题和解决问题的能力。
自选一种程序设计语言(如JAVA、VC等)以及一种数据库管理系统(如SQLServer、Access等)开发一个小型的数据库应用系统。
三、需求分析
1、组织机构情况
宾馆分为以下几个部门:
安保部:
负责宾馆内所有人员的安全以及宾馆设施的保护工作;
客房部:
负责客房服务、客房的卫生、客房设备的管理;
前厅部:
负责客人的接待、咨询、投诉以及相关前厅服务和信息传递;
财务部:
负责宾馆的资金管理、成本控制、日常的会计审核、出纳等;
营销部:
负责宾馆的宣传工作、市场开拓、顾客的关系发展等;
人力资源部:
负责宾馆职员的招聘、考核、调度、管理等;
所有部门都统一归总经理管理负责。
2、各部门业务活动情况
(1)预定管理:
客户查找是否有合适房间,若有则填写预订登记单,员工审核登记单,若正确无误,则对预订登记,产生预订登记表;
(2)接待管理:
员工根据客户需求为其提供服务,若客户已预订房间,则直接填写入住登记单,若没有预定,则员工查找客户需要类型的房间,若客户满意,则填写入住登记;
(3)换房管理:
根据客户的需要,员工查找相应类型的房间,若有则填写调房登记单,员工审核登记单,若正确无误,则对修改客房信息表和入住登记表;
(4)结账管理:
客人到前台对挂账进行结账,员工进行结账登记,并填写收据和打印报表给客户;
(5)客房管理:
接受员工的客房信息单,审核信息单,若正确无误,则对客房信息登记,记录到总帐。
3、用户对系统的各种要求
用户希望通过使用宾馆客房管理系统得到所需信息,达到提高管理水平的目的,希望新系统具有以下功能:
(1)使用计算机快速处理日常的业务及相关数据,实现实时查询各种入住信息;
(2)可以实时的录入住宿单、换房单和退宿单等的情况;
(3)可以实时查询客房信息、客人账单信息等的具体情况;
(4)可以建立客户的资料,方便日后建立良好的客户关系;
(5)数据的安全性:
不同用户有对数据查看,修改等处理不同的权限;
(6)打印退宿报表、结帐报表等报表。
四、总体功能设计
1、用户功能需求
(1)密码设置:
每个用户均有自己的密码,可以防止非本系统人员进入本系统;又因每个用户的权限不一致,故可防止用户越权操作;
(2)权限设置:
设置每个用户的权限,使各用户在自己的操作范围内工作,不得超出自己的操作范围。
只有系统管理员才能进行权限设置;
(3)数据输入:
可以进行宾馆各种原始数据的输入;
(4)数据查询:
要求可以分别按房间编号,房间类型等进行数据查询;
(5)数据输出:
根据需要打印退宿报表、结帐报表等报表;
(6)其它要求:
可以修改用户密码,有系统的帮助文件。
2、系统功能需求
(1)预订功能需求:
其主要目的是提高宾馆的开房率,为客人预留房间,并提供良好的预订服务。
其功能需求包括预订查询,可用房确认,预订记录建立,预订确认,预订记录维护等;
(2)接待功能需求:
其主要目的是以最快的速度为客人开房。
其功能需求包括宾客登记、可用房确认、修改宾客信息、删除宾客信息和查询宾客信息等;
(3)换房功能需求:
其主要目的是满足客人换房的需要。
其主要功能是查询客房,换房登记,换房确认等;
(4)结账功能需求:
其功能需求包括客人结账、打印报表和客人挂账等;
(5)客房管理功能需求:
其主要目的是对客房的信息化管理,提高客房管理的精度和准确度,同时减轻宾馆客房中心员工的工作负担,从而提高客房管理的效率和服务质量。
其主要功能是房态维护,费用记录和客人查询等。
3、系统非功能性需求
(1)低成本;
(2)方便二次开发,适应宾馆的个性化需求;
(3)简单易用,可维护性强;
(4)适合宾馆现场的使用环境和条件。
五、数据库设计
概念结构设计
E-R图
逻辑结构设计
关系模型
将酒店客房管理系统的E-R图转换为关系模型为:
客户(客户编号,客户姓名,客户性别,客户身份证号)其中客户编号是主码;
房间(房间编号,类型编号,房间类型,房间位置,房间价格,房间状态,备注)其中房间号是主码,类型编号为外键;
房间类型(类型编号,类型名称,面积,床位数,价格,三电信息,卫生间,超期罚款额)其中类型编号是主码;
费用(费用编号,费用名称,费用总额,收费人,收费日期)其中费用编号是主码,收费人为外键;
属于(房间编号,类型编号)其中房间编号和类型编号是主码;
订退(订单编号,客户编号,房间编号,客户姓名,订房日期,退房日期)其中订单编号,客户编号和房间编号是主码;
缴纳(客户编号,费用编号)其中客户编号和费用编号是主码;
物理结构设计
1物理设计阶段的目标以及任务
数据库的物理设计就是为逻辑数据模型选取一个最合适应用要求的物理结构的过程,在这个阶段中要完成确定数据库的物理结构,在关系数据库中主要是存取方法和存储结构。
建立索引可以提高查询的效率,但是维护起来又造成很大的不方便,所以只对部分表中的主键建立索引
2数据存取方法
可采用所以存取方法,在本系统中,房间编号、订房编号、客户编号这几个属性是主码,设计时考虑建立这些索引,使得对数据库的查询、插入、修改和删除的速度加快,效率也提高。
3数据库的存储结构
(1)存放位置
在开发本系统时因数据库的规模随着顾客的增多将会增大,但因开发环境条件限制,所以数据库是存在个人的计算机磁盘上。
(2)系统配置
开发以及运用本数据库应用系统时要求操作系统拥有WindowsXP或Windows7以上的配置,能创建数据库,保存数据,并将系统数据库作为应用系统运行操作的数据源,为方便开始时创建和调试查看数据库内容,要求系统装有SQLServer。
数据库实施
数据库的运行与维护
维护:
在数据库运行阶段,对数据库经常性的维护工作是由DBA完成的,它包括以下工作:
(1)数据库的转储和恢复。
(2)数据库安全性、完整性控制。
(3)数据库性能的监督、分析和改进。
(4)数据库的重组织和重构造
六、应用程序设计
#include
#include
//***********************************************************************************
voidinitial_room();//初始化80个房间信息
voidwelcome();//验证用户登陆,登陆成功显示欢迎信息
voidenter();
voidbook_room();
voidcheck_in();
voidcheck_out();
voidinquire();
inti=0;
//***********************************************************************************
structRoom
{
intnumber;
intdank;
intprice;
intstate;
};
classCustomer
{
public:
Customer();
voidset_name(char*n){strcpy(name,n);}
voidset_ID(char*p){strcpy(ID,p);}
voidset_room_number(intn){room_number=n;}
voidset_day(intd){day=d;}
voidset_prepaid(intp){prepaid=p;}
char*get_name(){returnname;}
char*get_ID(){returnID;}
intget_room_number(){returnroom_number;}
intget_day(){returnday;}
intget_prepaid(){returnprepaid;}
virtual~Customer();
private:
charname[10],ID[19];
introom_number;
intprepaid;
intchange;
intday;
};
Customer:
:
Customer()
{
cout<<"请您输入顾客的姓名\n";
cin>>name;
cout<<"请您输入顾客的身份证号码\n";
cin>>ID;
prepaid=change=day=0;
}
Customer:
:
~Customer()
{
cout<<"该顾客退房成功!
"<}
//***********************************************************************************
Roomroom[80];
Customer*customer[80];
voidmain()//程序入口从这里开始运行
{
charchoice='1';
initial_room();//初始化80个房间的信息,分四个等级
welcome();//验证用户登陆,登陆成功显示欢迎信息
while(choice=='1')
{
enter();//根据用户的选择执行不同的功能
cout<cout<<"继续使用本系统请按\"1\",退出请按\"2\"!
";
cin>>choice;
cout<}
}
//系统登陆界面***********************************************************************
voidwelcome()//验证用户登陆,登陆成功显示欢迎信息
{
charname[9],code[9];
cout<<"请输入用户名和密码(以空格隔开):
\n";
cin>>name>>code;
while((strcmp(name,"wangyong")!
=0)||(strcmp(code,"19911211")!
=0))
{
cout<<"用户名或密码输入有误,请重新输入!
\n";
cin>>name>>code;
}
cout<cout<cout<<"▲***************************▲\n";
cout<<"△欢迎使用***系统!
△\n";
cout<<"▲***************************▲\n";
cout<}
//系统入口***************************************************************************
voidenter()
{
intkind_of_service;
cout<<"请选择服务类别:
订房、入住、退房还是查询?
\n";
cout<<"1->定房2->入住3->退房4->查询:
";
cin>>kind_of_service;
if((kind_of_service>4)||(kind_of_service<1))
{
cout<<"您的输入有误,请重试!
\n";
cin>>kind_of_service;
}
else
switch(kind_of_service)
{
case1:
book_room();
break;
case2:
check_in();
break;
case3:
check_out();
break;
case4:
inquire();
break;
}
}
//订房实现***************************************************************************
voidbook_room()
{
customer[i]=newCustomer;
introom_standard,day;
cout<<"请您选择预定房间的标准:
\n";
cout<<"1.单人间/天150元\n2.双人间/天200元\n3.标准间/天300元\n4.总统套房/天600元\n";
cin>>room_standard;
cout<<"请输入预定天数\n";
cin>>day;
customer[i]->set_day(day);
switch(room_standard)
{
intn;
case1:
cout<<"住房费用总共为:
"<for(n=0;n<20;n++)//从第一个级别的房间中查找一个空闲的房间
{
if(room[n].state==0)//state=0表示该住房没有被预定的
{
cout<<"预定成功★房间号码为:
"<room[n].state=1;
customer[i]->set_room_number(room[n].number);
break;
}
}
break;
case2:
cout<<"住房费用总共为:
"<for(n=20;n<40;n++)
{
if(room[n].state==0)
{
cout<<"预定成功★房间号码为:
"<room[n].state=1;
customer[i]->set_room_number(room[n].number);
break;
}
}
break;
case3:
cout<<"住房费用总共为:
"<for(n=40;n<60;n++)
{
if(room[n].state==0)
{
cout<<"预定成功★房间号码为:
"<room[n].state=1;
customer[i]->set_room_number(room[n].number);
break;
}
}
break;
case4:
cout<<"住房费用总共为:
"<for(n=60;n<80;n++)
{
if(room[n].state==0)
{
cout<<"预定成功★房间号码为:
"<room[n].state=1;
customer[i]->set_room_number(room[n].number);
break;
}
}
break;
}
i++;//住房的顾客数加1
}
//入住登记***********************************************************************
voidcheck_in()
{
charname1[10],id1[19];
intding_or_no,prepaid;
cout<<"该顾客订房了吗?
(1->订了2->没订)";
cin>>ding_or_no;
if(ding_or_no==1)
{
cout<<"请输入顾客的姓名:
"<cin>>name1;
cout<<"请输入顾客的身份证号码:
"<cin>>id1;
for(intj=0;j<=i;j++)
{
if((strcmp(customer[j]->get_name(),name1)==0)&&(strcmp(customer[j]->get_ID(),id1)==0))//查找该顾客的定房信息
{
intnum=customer[j]->get_room_number();//取得定房的房间号
cout<<"顾客"<房间号码为:
"<switch(num/100)
{
case6:
prepaid=customer[j]->get_day()*150;
customer[j]->set_prepaid(prepaid);
cout<<"请收房费"<"<room[num%100-1].state=2;//修改房间状态为入住状态
break;
case7:
prepaid=customer[j]->get_day()*200;
customer[j]->set_prepaid(prepaid);
cout<<"请收房费"<"<room[19+num%100].state=2;
break;
case8:
prepaid=customer[j]->get_day()*300;
customer[j]->set_prepaid(prepaid);
cout<<"请收房费"<"<room[39+num%100].state=2;
break;
case9:
prepaid=customer[j]->get_day()*600;
customer[j]->set_prepaid(prepaid);
cout<<"请收房费"<"<room[59+num%100].state=2;
break;
}
break;
}
}
}
else
{
customer[i]=newCustomer;
introom_standard,day;
cout<<"请您选择预定房间的标准:
\n";
cout<<"1.单人间/天150元\n2.双人间/天200元\n3.标准间/天300元\n4.总统套房/天600元\n";
cin>>room_standard;
cout<<"请输入住宿天数\n";
cin>>day;
customer[i]->set_day(day);
switch(room_standard)
{
intn;
case1:
prepaid=day*150;
customer[i]->set_prepaid(prepaid);
cout<<"请收房费"<\n";
for(n=0;n<20;n++)
{
if(room[n].state==0)
{
cout<<"入住房间号码为:
"<room[n].state=2;
customer[i]->set_room_number(room[n].number);
break;
}
}
break;
case2:
prepaid=day*200;
customer[i]->set_prepaid(prepaid);
cout<<"请收房费"<\n";
for(n=20;n<40;n++)
{
if(room[n].state==0)
{
cout<<"入住房间号码为:
"<room[n].state=2;
customer[i]->set_room_number(room[n].number);
break;
}
}
break;
case3:
prepaid=day*300;
customer[i]->set_prepaid(prepaid);
cout<<"请收房费"<\n";
for(n=40;n<60;n++)
{
if(room[n].state==0)
{
cout<<"入住房间号码为:
"<room[n].state=2;
customer[i]->set_room_number(room[n].number);
break;
}
}
break;
case4:
prepaid=day*600;
customer[i]->set_prepaid(prepaid);
cout<<"请收房费"<\n";
for(n=60;n<80;n++)
{
if(room[n].state==0)
{
cout<<"入住房间号码为:
"<room[n].state=2;
customer[i]->set_room_number(room[n].number);
break;
}
}
break;
}
i++;
}
}
//退房结算***********************************************************************
voidcheck_out()
{
charname2[10],id2[19];
intstandard,j,room_number,day1,day2,day;
cout<<"请输入要退房的顾客姓名和身份证号码:
\n";
cin>>name2>>id2;
cout<<"请输入该顾客实住天数:
\n";
cin>>day2;
for(j=0;j
{
if((strcmp(customer[j]->get_name(),name2)==0)&&(strcmp(customer[j]->get_ID(),id2)==0))
{
room_number=customer[j]->get_room_number();
standard=room_number/100;
day1=customer[j]->get_day();
day=day1-day2;
switch(standard)
{
case6:
cout<<"顾客的房间号是"<为单人间,每天150元\n";
cout<<"该顾客预付了房费"<get_prepaid()<<"元,实际消费"<\n";
cout<if(day>0)
cout<<"请退给该顾客"<\n";
if(day<0)
cout<<"请补收该顾客住房费"<<-day*150<<"元整!
\n";
break;
case7:
cout<<"顾客的房间号是"<<