资源描述
《C课程设计·酒店客房管理系统
64
2020年4月19日
资料内容仅供参考,如有不当或者侵权,请联系本人改正或者删除。
计算机学院课程设计报告
课程名称: C++课程设计
课 题: 客房管理系统
专业班级:
学 号:
姓 名:
指导老师:
日 期: 7 月3 日
目录
1.课题简介………………………………………03
2.设计方案………………………………………04
3.具体设计及截屏图……………………………05
4.关键代码分析…………………………………10
5.测试……………………………………………15
6.课题总结与体会………………………………17
7.参考文献………………………………………18
8.源代码…………………………………………19
1.课题简介
客房管理系统是根据某酒店对客房管理的实际情况进行编写的, 主要目的是为了方便酒店对客房的实际情况进行集中的查询与管理工作, 以提高整个酒店的工作。
经过电脑及生活中的调查研究, 根据客人的经济水平和生活理念, 客房的类型已趋向于多样化, 有标准房, 单人房, VIP间, 甚至总统套房。而初步设定经过客房的编号、 类型、 价格来定位一个客房的管理系统。
客房是一个对外服务的内容, 为了客人的住宿要求, 因此系统需要实现客房信息的录入、 修改和删除功能。
客人对剩余客房需要进行选择, 系统必须实现相应的查询、 排序和输出功能, 使客人择优而居。
主要实现的功能包括: 客房信息的录入、 修改、 删除、 剩余客房信息查询、 排序、 输出。客房信息可写入文件, 也可从文件中读取。客房信息涉及的数据有客房编号、 客房类型、 住房天数、 订金、 客户姓名、 客户身份证号码等。
2.设计方案
按照需求分析所得, 客房信息系统有以下几个功能模块:
1. 新建两个类;
分别为Customer和HolterRoom ,其中Customer为基类, HolterRoom经过
共有继承, 成为Customer的派生类。
2. 录入, 增添客房信息;
先判断是否已存在客房信息, 如果已存在, 则再选择是否添加; 若不存在, 则添加客房信息。
3.修改客房信息;
读取保存的客房信息数据, 根据客房编号查找所需修改的客房信息, 然后根据具体所需, 修改成员参数。
4.删除客房信息模块;
从保存中的文件中读取信息, 删除需要删除的信息, 完善现在的客房运作。
5.查询客房函数;
分按编号、 类型、 客户姓名查找客房信息, 这样能够更具有人性化来选择所剩余的客房, 从而进行日常安排。
7.输出剩余客房函数;
输出根据系统所需排序后的客房信息, 本系统中是根据了客人入住的有效期即天数来及时了解空出的房间。
由上述需求分析可得, 系统的功能模块图如图1所示。 酒店
客房
管理
系统
录入
客房
信息
客人
入住
登记
修改
客房
信息
客人
退房
结算
输出
所有
客房
信息
查
询
窗
口
删除
客房
信息
经过
房号
查询
客房
输出
所有
空房
经过
姓名
查询
客房
经过
房号
查询
客房
图1
2.具体设计及截屏图
1、 类的设计
根据上述需求分析, 有客房类和客户类。
(1) 客户类
客户类中的主要成员有: name为客户姓名, ID为客户身份证号码, money为客户订金, StayTime为将要入住客房时长。
( 2) 客房类
客房类中的主要成员有: num是客房编号, Type是客房类型, Price是客房价格, HolterRoom()为客房类的构造函数, 同时Customer类中的成员均是客房类的成员。
2.界面设计:
(1) 主界面的设计
主界面中显示客房管理系统的全部信息, 客房信息的录入, 客人入住登记, 客房信息的修改, 客人退房结算, 查询所有客房信息, 查询( 包括按房间号, 按房间类型, 按客户姓名查询, 同时还有输出所有空房信息) , 删除客房信息。
酒店客房管理系统如图1所示。
图2 主界面
( 2) 分界面: 客房信息查询设计
分别实现按姓名, 按房间号和按房间类型查询客房信息的功能, 还可实现输出所有空房信息的功能。客房信息录入如图2所示。
图3录入客房信息的分界面
( 4) 分界面: 客房信息的修改的设计
提示根据编号寻找到客房并输出该客房内容, 然后询问用户是否要修改客房信息, 修改界面如图所示。
图4 修改客房信息的分界面
( 5) 分界面: 客房信息的删除的设计
提示根据编号寻找到客房并输出该客房内容, 然后询问用户是否要删除客房信息
, 修改界面如图所示。
图5 删除客房信息的分界面
( 6) 分界面: 剩余客房信息的查询的设计
在保存完所修改或删除的客房信息, 查询剩余的客房信息, 可浏览所有空房信息。查询空房的信息界面如图6所示。
图6 查询客房信息的分界面
( 7) 分界面: 所有信息的输出的设计
在排序完后的所有客房中, 输出所有客房的信息, 以检验客房的经营情况。所有客房信息输出界面如图7所示。
图7 所有客房的信息
4.关键代码分析
( 1) 系统的登录
在主函数中, 输出客房信息系统的各功能提示。选择需要执行功能的序号, 由switch判断和选择所需要执行的功能。
选择1: 执行客房信息的录入;
选择2: 执行客人入住登记;
选择3: 执行教工客房信息的修改;
选择4: 执行客人退房结算;
选择5: 执行查询所有客房信息;
选择6: 执行查询;
选择7: 执行删除客房信息;
选择8: 退出系统;
主函数:
int main()
{
HolterRoom Room[200]; //创立客房对象数组
int top;
HolterRoom b;
top=-1;
fstream file("Room.txt",ios::in);
while (1)
{
file.read((char *)&b,sizeof(b));
if (!file) break;
top++;
Room[top]=b;
}
file.close(); //读取文件夹Room.txt中的数据
while(1)
{
cout<<"\n\n 客房管理系统 \n\n";
cout<<" ---------------------------------- \n\n";
cout<<" 1.客房信息的录入 \n\n";
cout<<" 2.客人入住登记 \n\n";
cout<<" 3.客房信息的修改 \n\n";
cout<<" 4.客人退房结算 \n\n";
cout<<" 5.查询所有客房信息 \n\n";
cout<<" 6.查询系统 \n\n";
cout<<" 7.删除客房信息 \n\n";
cout<<" 8.退 出 系 统 \n\n";
cout<<" 请选择: ";
int choose=0;
cin>>choose;
system("cls");
switch (choose) //用户的选择
{
case 1:set_HolterRoom_info(Room); break; //输入客房信息
case 2:set_Customer_info(Room);break; //客人入住登记
case 3:Change_HolterRoom_info(Room); break; //修改客房信息
case 4:SetCount(Room);break; //客户退房
case 5:PrintAll(Room); break; //查询所有客房信息
case 6:Find_choose(Room); break; //查询
case 7:Delete_HolterRoom(Room);break; //删除客房信息
case 8:Write(Room);
Save_HolterRoom_info(Room);
Save_Customer_info(Room);
exit(0); //退出
default : break;
}
}
return 0;
}
在读取数据时, 能够从以有的文件中读取数据到程序中, 避免了程序的重复输入数据, 既实现了程序的多次可持续地使用, 又有利于后面的信息修改、 删除等功能。
void Read(HolterRoom *Room) //读取数据库
int top;
HolterRoom b;
top=-1;
fstream file("Room.txt",ios::in); //创立一个输入文件流对象, 读取文件夹Room.txt中的数据。
while (1)
{
file.read((char *)&b,sizeof(b));
if (!file) break;
top++;
Room[top]=b;
};
file.close();//关闭文件
( 2) 信息的添加
客房信息的录入, 创立HolterRoom类和Room对象数组 , 调用构造函数, 输入客房的房间编号、 房间类型、 定房日期、 房间价格、 房间内容及个人的入住有效期。
void set_HolterRoom_info(HolterRoom *Room)
if(Room[0].num==0)
{
int size;
cout<<"暂无房间信息, 请添加! "<<endl;
static int Number=700;
cout<<"请输入要添加的房间数: ";
cin>>size;
for(int i=0;i<size;i++)
{
Room[i].num=Number++;
cout<<"房间号码: "<<Room[i].num;cout<<endl;
cout<<"房间类型: ";
cin>>Room[i].Type;
cout<<"房间价格: ";
cin>>Room[i].Price;
cout<<endl<<endl;
};
cout<<"客房信息录入成功!"<<endl<<endl;
}
else
{
string P;
cout<<"客房信息已有, 是否要添加房间? ( Y/N) ";
cin>>P;
if(P=="Y")
add_HolterRoom_info(Room);
else if(P=="N")
cout<<"已取消房间添加."<<endl<<endl;
else cout<<"此操作非法! "<<endl<<endl;
};
system("pause");
system("cls");
};
( 3) 信息的删除
删除客房信息, 按要求提示输入要删除客房的房间编号, 经过for循环和if语句寻找到要删除的客房, 并显示其信息, 然后询问用户是否要删除客房信息, 经过 if语句进行判断, 若输入”Y”则删除, 并显示删除成功, 若为”N”
, 则取消删除, 输入其它均显示”非法操作! ”。
void Delete_HolterRoom(HolterRoom *Room)
{
int Num;
cout<<"请输入要删除的房间号: ";
cin>>Num;
for(int i=0;i<30;i++)
if(Room[i].num==Num )
{
string B;
cout<<"房间已找到: "<<endl;
cout<<"房间类型:";
cout<<Room[i].Type<<endl;
cout<<"房间价格:";
cout<<Room[i].Price<<endl;
cout<<"客户信息:"<<endl;
cout<<"客户身份证号码:";
cout<<Room[i].ID<<endl;
cout<<"客户姓名: ";
cout<<Room[i].name<<endl;
cout<<"订金";
cout<<Room[i].money<<endl;
cout<<"确定要删除客房信息? (Y/N)";
cin>>B;cout<<endl;
if(B=="Y")
{
Room[i].Type="null";
Room[i].num=0;
Room[i].Price="0";
Room[i].money=0;
Room[i].StayTime=0;
Room[i].name="无";
Room[i].ID="0";
cout<<"删除成功! "<<endl;
}
else if(B=="N")
{
cout<<"取消删除。"<<endl;
}
else cout<<"非法的操作! "<<endl;
};
system("pause");
system("cls");
};
( 4) 信息的修改
修改客房信息, 按要求提示输入要修改客房的房间编号, 经过for循环和if语句寻找到要修改的客房, 并显示其信息, 然后询问用户是否要修改客房信息, 经过 if语句进行判断, 若输入”Y”则进行逐条修改, 若为”N”
, 则取消修改, 输入其它均显示”非法操作! ”。
void Change_HolterRoom_info(HolterRoom *Room)
{
int Num;
cout<<"请输入要修改的房间号码:"<<endl;
cin>>Num;
string _name;
string _ID;
int _money;
int _StayTime;
string _Price;
string _Type;
int t=0;
for(int i=0;i<30;i++)
{
if(Num==Room[i].num)
{
cout<<"房间类型:";
cout<<Room[i].Type<<endl;
cout<<"房间价格:";
cout<<Room[i].Price<<endl;
cout<<"客户姓名: ";
cout<<Room[i].name;cout<<endl;
cout<<"客户身份证号码:";
cout<<Room[i].ID;cout<<endl;
cout<<"订金:";
cout<<Room[i].money;
cout<<"将于"<<Room[i].StayTime<<"天后退房。"<<endl;
cout<<"房间信息已找到!"<<endl;
cout<<"是否确定要修改房间信息? ( Y/N) ";
string p;
cin>>p;
if(p=="Y")
{
cout<<"客户姓名: ";
cin>>_name;
Room[i].name=_name;
cout<<endl;
cout<<"客户身份证号码:";
cin>>_ID;
Room[i].ID=_ID;
cout<<endl;
cout<<"订金:";
cin>>_money;
Room[i].money=_money;
cout<<"退房时间延长至";cin>>_StayTime;cout<<"天后";
Room[i].StayTime=_StayTime;
cout<<endl;
Save_Customer_info(Room);
cout<<"修改成功!"<<endl<<endl;
}
else if(p=="N") cout<<"已取消修改。";
else cout<<"操作非法! ";
t++;
}
else if(t==0 && i==29 && Room[i].Type=="null")
cout<<"查无此房! "<<endl<<endl;
};
system("pause");
system("cls");
};
5.测试
程序测试是将编制的程序投入实际运行前, 用手工或编译程序等方法进行测试, 修正语法错误和逻辑错误的过程。
原程序:
void add_HolterRoom_info(HolterRoom *Room) //添加房间
static int Number=700;
string k;
do{
int i=5;
Room[i].num=Number++;
cout<<"房间号码: "<<Room[i].num;cout<<endl;
cout<<"房间类型: ";
cin>>Room[i].Type;
cout<<"房间价格: ";
cin>>Room[i].Price;
cout<<endl<<endl;
cout<<"添加成功! ";
cout<<"是否要继续添加? ( Y/N) : ";
cin>>k;
i++;
}while(k=="Y");
if (k=="N"){}
else cout<<"此操作非法! ";
编译成功后开始运行, 信息录入后, 第一次调用函数能够正确添加房间信息, 但第二次调用后, 会覆盖第一次的记录, 无法正确添加房间; 经思索后, 发现加入个for循环, 并对每一房间进行判断, 确定为未赋值再进行房间的添加便可。
void add_HolterRoom_info(HolterRoom *Room)
{
string P;
do{
int Number=700;
for(int i=0;i<30;i++)
{
if(Room[i].num==0)
{
Room[i].num=Number++;
cout<<"房间号码: "<<Room[i].num;cout<<endl;
cout<<"房间类型: ";
cin>>Room[i].Type;cout<<endl;
cout<<"房间价格: ";
cin>>Room[i].Price;
cout<<endl<<endl;
cout<<"房间添加成功, 是否继续添加? ( Y/N) :";
cin>>P;break;
}
else Number++;
};
}while(P=="Y");
if(P=="N")
cout<<"已取消添加。"<<endl<<endl;
else cout<<"此操作非法! "<<endl<<endl;
};
6.课题总结与体会
短学期的课程设计是一次非常珍贵的机会, 这是一次能够让我们所学的理论与实
际相结合的机会。经过这次比较完整的一个程序的设计, 我走出了纯理论的学习,
从一种全新的角度去学习。
其实个人而言, 我体会较深的一点是团队互相帮助学习的过程, 自己看书学
习的经验, 以及从网上以及其它各种途径获得信息和知识的经验。理论与实际相结
合的设计, 锻炼了我综合运用所学的基础知识, 解决实际问题的能力, 同时也提高
我查阅文献资料、 对程序整体的把握等其它能力水平。而且经过对整体的掌控, 对
局部的取舍, 都使我的能力得到了锻炼, 我的各方面经验都得到了极大的丰富。
在面对各种陌生知识的时候, 队友的耐心与任性, 对于知识的渴求, 对于工作的
专注, 极大程度上鼓舞了我。我们在交流中, 迸发出了很多设计灵感, 互相建议改
进的过程中, 我们分别从各个方面共同改进着, 这个已经不能仅仅称作课程设计的
作品。
从知识获得方面来说, 各种已经学习到的C++知识以及各种从网上搜索来的案例,
我们都是随着设计的不断深入而不断熟悉的。和老师以及同学的沟通交流更使我对
程序整体的规划与设计有了新的认识, 也对自己提出了新的要求。提高是有限的但
提高也是全面的。正是这一次设计让我积累了许多实际经验。也必然会让我在未来
的工作学习中表现出更高的耐力、 理解力、 实践力。顺利如期的完成本次课程设计
给了我很大的信心, 可是也为我指出很多不足的地方。学习其实就是一个不断完善
的过程, 正视自己的不足之处。在以后的工作和学习中不断的弥补这些不足之处,
在以后的生活中也要保持同样的态度, 不断地完善自己。
7.参考文献
【1】郑莉.《C++教程》.人民邮电出版社.
【2】谭浩强.《C语言程序设计》.清华大学出版社.
【3】沈纪新.《Visual C++使用速成》.清华大学出版社.
8.源代码
//客房管理系统 主要实现的功能包括: 客房信息的录入、 修改、 删除、 剩余客房信息查询、 排序、 输出。客房信息可写入文件, 也可从文件中读取。
/* 系统的登录 信息的添加 信息的删除 信息的修改 */
#include<iostream>
#include<string>
#include<fstream>
using namespace std;
const int Maxb=30;
class Customer
{
public:
string name;
string ID;
int money;
int StayTime;
Customer(){};
};
class HolterRoom:public Customer
{
public:
int num;
string Price;
string Type;
HolterRoom()
{
num=0;
Price="0";
Type="null";
money=0;
StayTime=0;
name="无";
ID="0";
};
~HolterRoom(){};
};
ofstream Str("客房信息.txt",ios_base::trunc);
ofstream C("客户信息.txt",ios_base::trunc);
void set_Customer_info(HolterRoom *Room);
void set_HolterRoom_info(HolterRoom *Room);
void find_HolterRoomByNum(HolterRoom *Room);
void Display_HolterRoom_info(HolterRoom *Room);
void add_HolterRoom_info(HolterRoom *Room);
void find_HolterRoomByName(HolterRoom *Room);
void find_HolterRoomByType(HolterRoom *Room);
void PrintAll(HolterRoom *Room);
void Change_HolterRoom_info(HolterRoom *Room);
void SetCount(HolterRoom *Room);
void Delete_HolterRoom(HolterRoom * Room);
void Find_choose(HolterRoom * Room);
void Save_HolterRoom_info(HolterRoom * Room);
void Save_Customer_info(HolterRoom * Room);
void Write(HolterRoom *Room);
void Read(HolterRoom *Room);
void Save_HolterRoom_info(HolterRoom * Room)
{
for(int i=0;i<30;i++)
{
if(Room[i].num!=0)
{
Str<<"房间号码: "<<Room[i].num<<"\t"
<<"房间类型: "<<"\t"
<<Room[i].Type<<"\t"
<<"房间价格: "<<"\t"
<<Room[i].Price<<endl<<endl;
};
};
};
void Save_Customer_info(HolterRoom * Room)
{
for(int i=0;i<30;i++)
{
if(Room[i].num!=0 && Room[i].name!="无")
{
C<<"房间类型:";
C<<Room[i].Type<<endl;
C<<"房间价格:";
C<<Room[i].Price<<endl;
C<<"客户身份证号码:";
C<<Room[i].ID<<endl;
C<<"客户姓名: ";
C<<Room[i].name<<endl;
C<<"订金";
C<<Room[i].money<<endl;
C<<"入住天数: ";C<<Room[i].StayTime;C<<"天"<<endl<<endl;
};
};
};
void Display_HolterRoom_info(HolterRoom *Room)
{
int t=0;
for(int i=0;i<30;i++)
{
if(Room[i].StayTime==0 && Room[i].num!=0)
{
cout<<"房间号码: ";
cout<<Room[i].num<<"\t";
cout<<"房间类型:";
cout<<Room[i].Type<<"\t";
cout<<"房间价格:";
cout<<Room[i].Price<<endl;
t++;
}
else if(t==0&&i==29)cout<<"暂无空房! ";
};
system("pause");
system("cls");
};
void Find_choose(HolterRoom *Room)
{
int P=0;
while(P==0)
{
cout<<"\n\n 客房管理系统 \n\n";
cout<<" ---------------------------------- \n\n";
cout<<" 1.经过房号查询客房 \n\n";
cout<<" 2.经过类型查询客房 \n\n";
cout<<" 3.经过客户姓名查询客房 \n\n";
cout<<" 4.查询所有空房 \n\n";
cout<<" 5.返回主菜单 \n\n";
cout<<" 请选择: ";
int choose=0;
cin>>choose;
system("cls");
switch (choose) //用户的选择
{
case 1:find_HolterRoomByNum(Room); break; //输入客房信息
case 2:find_HolterRoomByType(Room);break; //客人入住登记
case 3:find_HolterRoomByName(Room); break; //修改客房信息
case 4:Display_HolterRoom_info(Room);break; //客户退房
case 5:P=5;break;
default :; break;
}
};
};
void Delete_HolterRoom(HolterRoom *Room)
{
int Num;
cout<<"请输入要删除的房间号: ";
cin>>Num;
for(int i=0;i<30;i++)
if(Room[i].num==Num )
{
string B;
cout<<"房间已找到: "<<endl;
cout<<"房间类型:";
cout<<Room[i].Type<<endl;
cout<<"房间价格:";
cout<<Room[i].Price<<endl;
cout<<"客户信息:"<<endl;
cout<<"客户身份证号码:";
cout<<Room[i].ID<<endl;
cout<<"客户姓名: ";
cout<<Room[i].name<<endl;
cout<<"订金";
cout<<Room[i].money<<endl;
cout<<"确定要删除客房信息? (Y/N)";
cin>>B;cout<<endl;
if(B=="Y")
{
Room[i].Type="null";
Room[i].num=0;
Room[i].Price="0";
Room[i].money=0;
Room[i].StayTime=0;
Room[i].name="无";
Room[i].ID="0";
cout<<"删除成功! "<<endl;
}
else if(B=="N")
{
cout<<"取消删除。"<<endl;
}
else cout<<"非法的操作! "<<endl;
};
system("pause");
system("cls");
};
void SetCount(HolterRoom *Room)
{
int Num;
int t=0;
cout<<"请输入房间号码: ";
cin>>Num;
for(int i=0;i<30;i++)
{
if(Num==Room[i].num && Room[i].StayTime!=0)
{
string B;
cout<<"房间已找到: "<<endl;
cout<<"房间类型:";
cout<<Room[i].Type<<endl;
cout<<"房间价格:";
cout<<Room[i].Price<<endl;
cout<<"客户信息! :"<<endl;
cout<<"客户身份证号码:";
cout<<Room[i].ID<<endl;
cout<<"客户姓名: ";
展开阅读全文