课程设计---宾馆客房管理程序的设计与实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计
宾馆客房管理程序的设计与实现题目
学院计算机科学与技术学院
专业软件工程专业
班级
姓名
指导教师
2013 年元月25 日
课程设计任务书
题目: 宾馆客房管理程序的设计与实现
初始条件:
理论:学习了《数据结构》课程,掌握了基本的数据结构和常用的算法;
实践:软件工程系实验室提供计算机及软件开发环境。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写
等具体要求)
1、系统应具备的功能:
(1)管理员对客房基本信息进行输入、删除、修改和查询
(2)旅客入住处理
(3)管理人员对客房的入住情况进行查询
(4)旅客退房结帐处理
2、数据结构设计;
3、主要算法设计;
4、编程及上机实现;
5、撰写课程设计报告,包括:
(1)设计题目;
(2)摘要和关键字(中文和英文);
(3)正文,包括引言、需求分析、数据结构设计、算法设计、程序实现及测试、设计体会等;
(4)结束语;
(5)参考文献。

时间安排:2013年元月21日-25日(第21周)
元月21日查阅资料
元月22日系统设计,数据结构设计,算法设计
元月23日-24日编程并上机调试,验收程序
元月25日撰写报告、提交报告
指导教师签名: 2013年元月21日
系主任(或责任教师)签名: 2013年元月21日
宾馆客房管理程序的设计与实现
摘要:本次课程设计需要实现的是——客房管理系统的链表实现。

主要实现的
功能包括:客房信息的录入、修改、删除、剩余客房信息查询、排序、输出。


房信息可写入文件,也可从文件中读取。

客房信息涉及的数据有客房编号、客房
类型、定房日期、客房内容(设施)、定房有效期等。

关键字:链表排序输入输出算法
Summary:The need to implement the curriculum design - rooms linked implementation of the management system. The main achievement of the features include: Room information entry, modify, delete, remaining rooms information search, sort and output. Room information can be written to a file, and can also be read from a file. The room information relates to the data room number, room type, the room given date, rooms the content (facilities), Booking expiration date.
Keywords:Linked list Sequence Input and output Algorithm
1引言
客房管理系统是根据某酒店对客房管理的实际情况进行编写的,主要目的是为了方便酒店对客房的实际情况进行集中的查询与管理工作,以提高整个酒店的工作。

客房是一个对外服务的内容,为了客人的住宿要求,所以系统需要实现客房信息的录入、修改和删除功能。

客人对剩余客房需要进行选择,系统必须实现相应的查询、排序和输出功能,使客人择优而居。

2 需求分析
经过电脑及生活中的调查研究,根据客人的经济水平和生活理念,客房的类
型已趋向于多样化,有标准房,单人房,VIP间,甚至总统套房。

而初步设定通
过客房的编号、类型、价格来定位一个客房的管理系统。

客房是一个对外服务的
内容,为了客人的住宿要求,所以系统需要实现客房信息的录入、修改和删除功
能。

客人对剩余客房需要进行选择,系统必须实现相应的查询、排序和输出功能,
使客人择优而居。

本次课程设计需要实现的是——客房管理系统的链表实现。

3 数据结构设计
按照需求分析所得,客房信息系统有以下几个功能模块:
1.添加录入信息模块;
编写指针摸板,定义临时的客房间数,包括其各项类的成员,编号,类型,定房日期,价格,客房内容,入住天数。

3.修改客房信息模块;
读取保存的客房信息数据,根据客房编号查找所需修改的客房信息,然后根据具体所需,修改成员参数,并保存。

4.删除客房信息模块;
从保存中的文件中读取信息,删除需要删除的信息,完善现在的客房运作。

5.查询剩余客房函数;
分按编号、类型、价格查询,这样可以更具有人性化来选择所剩余的客房,从而进行日常安排。

6.排序剩余客房模块;
根据具体所需排序,可以是编号、价格或者类型,本系统中根据的是客房入住的天数来排序。

7.输出剩余客房函数;
输出根据系统所需排序后的客房信息,本系统中是根据了客人入住的有效期即天数来及时了解空出的房间。

由上述需求分析可得,系统的功能模块图如图1所示。

4 算法设计
4.1类的设计
根据上述需求分析,有客房类和链表类。

4.1.1客房类
系统研究客房cGuestroom 类中成员: ID[SIZE]是客房编号,Type[SIZE]是客房类型,Book[SIZE]是定房日期,Price[SIZE]是每间客房的价格,StayTime[SIZE]是定房的有效期,Function[SIZE]是客房的主要内容(如浴室、卫生间、网线等设施),标志flag 和构造函数cGuestroom ()。

客房类的UML 图如(图2)所示:
录入客房信息 客房的信息管理系统
查询剩余客房信息 排序剩余客房信息 输出 剩余客房信息
保存 客房信息 修改客房信息 删除客房信息
退出系统
class cGuestroom
+ ID[BUFSIZE]:char// 客房编号 + Type[BUFSIZE]:char//客房类型 + Book[BUFSIZE]:char//定房日期 + Function[BUFSIZE]:char//客房内容 +StayTime :int//定房有效期 + flay :bool//标志
+ cGuestroom()//构造函数初始化
4.1.2链表类
在tList类中,有成员:构造函数tList(),创建链表Create(),判断链表是否为空的函数Empty() const,从尾部插入一个元素的函数Insert(const T e),返回第i个节点的函数GetcNode(int i),在链表中查询某个值的函数bool Find(const T e),析构函数~tList(),头节点head。

链表类的UML图如(图3)所示:
tList
+tList();
+ Create():void
+Empty() const:bool
+Insert(conste:T):void
+*GetcNode(i:int):cNode<T>
+Find(const e:T):bool
+~tList();
+ *head:cNode<T>
4.2界面设计:
4.2.1主界面的设计
主界面中显示客房管理系统的全部信息,客房信息的录入,客房信息的保存,客房信息的修改,客房信息的删除,剩余客房的查询,剩余客房的排序,剩余客房的输出。

4.2.2分界面:客房信息的录入的设计
提示输入客房编号,客房类型,客人定房日期,客房价格,客房中的主要内容,客房定房的有效期。

4.2.3分界面:客房信息的保存的设计
针对第一步客房信息的输入及以后信息的修改、删除做一个文件保存。

4.2.4分界面:客房信息的修改的设计
提示根据编号进行客房信息修改,输入要修改的内容,如不修改的项目就远洋输出。

4.2.5分界面:客房信息的删除的设计
提示进入删除截面,根据客房编号查找所需删除的客房信息。

4.2.6分界面:剩余客房信息的查询的设计
在保存完所修改或删除的客房信息,查询剩余的客房信息,按提示进入剩余客房查询界面,有按编号、类型、价格查询,根据拥护自主选择。

4.2.7剩余客房信息的排序的设计
按提示进行剩余客房的排序,本系统中是以客人的入住天数排序
4.2.8分界面:剩余客房信息的输出的设计
在排序完后的剩余客房中,输出所有客房的信息,以检验客房的经营情况。

5 参考文献
【1】陈维兴,林小茶.C++面向对象程序设计教程.北京.清华大学出版社
【2】谭浩强.C语言程序设计.北京:清华大学出版社.2010,5
【3】
6 程序实现及测试
6.1 源代码
//客房管理系统主要实现的功能包括:客房信息的录入、修改、删除、剩余客房信息查询、排序、输出。

客房信息可写入文件,也可从文件中读取。

/* 系统的登录信息的添加信息的删除信息的修改*/
#include <iostream> //指示编译器将文件iostream中的代码嵌入到该程序中该指令所在的地方
using namespace std;
#include<fstream> //包含文件流头文件
#define BUFSIZE 50
class cGuestroom;
void FindTheGuestroom(); //查找客房
void FindTheGuestroomById(); //按照编号找客房
void FindTheGuestroomByType(); //按照类型找客房
void FindTheGuestroomByPrice(); //按照价格找客房
void DeleteTheGuestroom(); //删除客房
void AddTheGuestroom(); //客房添加
void ModifyTheGuestroom(); //修改客房
template <class T> //template:模板,样板
class cNode //节点
{
public:
T data;
cNode *next;
};
template <class T>
class tList
{
public: //定义成员函数tList();
void Create(); //创建链表
bool Empty() const; //判断链表是否为空void Insert(const T e); //从尾部插入一个元素
cNode<T>* GetcNode(int i); //返回第i个节点
bool Find(const T e); //在链表中查找某个值~tList(); //销毁链表,析构
cNode<T> *head; //头节点
};
template <class T>
tList<T>::tList() //类的成员函数的实现
{
head=new cNode<T>;
head->next=NULL;
}
template <class T>
void tList<T>::Create()
{
cNode<T> *p;
p=head;
p->next=NULL;
}
template <class T>
bool tList<T>::Empty() const
{
return (head->next==NULL);
}
template <class T>
void tList<T>::Insert(const T e) //insert:插入
{
cNode<T> *p,*q;
p=head;
q=new cNode<T>;
q->data=e;
while(p->next)
{
p=p->next;
}
p->next=q;
q->next=NULL;
}
template <class T>
cNode<T>* tList<T>::GetcNode(int i) //返回第i个节点{
int k=0;
cNode<T> *p;
p=head;
while(p && k<i)
{
p=p->next;
++k;
}
return p;
}
template <class T>
bool tList<T>::Find(const T e) //在链表中查找某个值
bool flag=false;
cNode<T> *p;
p=head->next;
while(p)
{
if(p->data==e)
{
flag=true;
break;
}
p=p->next;
}
return flag;
}
template <class T>
tList<T>::~tList()
{
cNode<T> *p;
while(head)
{
p=head->next;
delete head;
head=p;
}
}
class cGuestroom
{
public:
char ID[BUFSIZE]; //客房编号
char Type[BUFSIZE]; //客房类型
char Book[BUFSIZE]; //提前定房日期
char Price[BUFSIZE]; //客房价格
char Function[BUFSIZE]; //客房主要内容
int StayTime; //入住天数有效期
bool flag;//标志
cGuestroom()//构造函数初始化
{
memset(ID,0,BUFSIZE);memset(Type,0,BUFSIZE);memset(Book,0,BUFSIZE);memset(Fun ction,0,BUFSIZE);
memset(Price,0,BUFSIZE);StayTime=0.0;flag=false;
} //memset:把char类型转换成ASCII值
};
void ReadData(tList<cGuestroom> *tListGue)//读取数据库
{
char buf[BUFSIZE];
ifstream ifile("Guestroom.txt",ios_base::in); //创建一个输出文件流对象
if (!ifile)
{
cerr << "读取时打开文件出错!" << endl;
}
cGuestroom Guestroom;
while(ifile.getline(buf,BUFSIZE)) //遍历文本,读取数据{
ifile.getline(buf,BUFSIZE);
strcpy(Guestroom.ID,buf);//读取客房编号
memset(buf,0,BUFSIZE);
ifile.getline(buf,BUFSIZE);//读取客房类型
strcpy(Guestroom.Type,buf);
memset(buf,0,BUFSIZE);
ifile.getline(buf,BUFSIZE);//读取提前定房日期
strcpy(Guestroom.Book,buf);
memset(buf,0,BUFSIZE);
ifile.getline(buf,BUFSIZE);//读取价格
strcpy(Guestroom.Price,buf);
memset(buf,0,BUFSIZE);
ifile.getline(buf,BUFSIZE);//读取客房主要内容
strcpy(Guestroom.Function,buf);
memset(buf,0,BUFSIZE);
ifile.getline(buf,BUFSIZE);//读取入住有效期
Guestroom.StayTime=atoi(buf);
memset(buf,0,BUFSIZE);
Guestroom.flag=true;
tListGue->Insert(Guestroom);
}
cout<<"读取数据成功!\n\n";
ifile.close();//关闭文件
return;
}
void AddtheGuestroom(tList<cGuestroom> *tListGue)// 输入客房函数{
cGuestroom tempGuestroom; //定义临时客房
cout<<"下面开始添加客房信息\n";
cout<<"请输入入住的客房编号:";
cin>>tempGuestroom.ID; //读入客房编号
cout<<"请输入客房类型:";
cin>>tempGuestroom.Type; //读入客房类型
cout<<"请输入客人定房日期:";
cin>>tempGuestroom.Book; //读入定房日期
cout<<"请输入客房价格:";
cin>>tempGuestroom.Price; //读入价格
cout<<"请输入客房的主要内容:";
cin>>tempGuestroom.Function; //读入主要内容
cout<<"请输入客房入住有效期:";
cin>>tempGuestroom.StayTime; //读入入住有效期
tempGuestroom.flag=true;
tListGue->Insert(tempGuestroom);
cout<<"添加成功!\n";
system("pause"); //pause:停顿,终止
system("cls");
}
void SaveData(tList<cGuestroom> *tListGue) //保存数据
{
int i=0;
ofstream ofile("Guestroom.txt",ios_base::out); //创建一个输入文件流对象
if (!ofile)
{
cerr << "保存时打开文件出错!" << endl;
}
cNode<cGuestroom> *p;
p=tListGue->head->next;
while(p)
{
//从内存中读取数据,存到外盘if(p->data.flag)
{
ofile<<"\n";
ofile<<(p->data).ID<<"\n";
ofile<<(p->data).Type<<"\n";
ofile<<(p->data).Book<<"\n";
ofile<<(p->data).Price<<"\n";
ofile<<(p->data).Function<<"\n";
ofile<<(p->data).StayTime<<"\n";
}
p=p->next;
}
cout<<"保存数据成功!\n";
ofile.close();
system("pause");
system("cls");
return;
}
void ModifytheGuestroom(tList<cGuestroom> *tListGue) //修改客房信息{
char id[BUFSIZE];
cout<<"\n请输入你要查找的客房编号:";
cin>>id; //读取客房编号bool flag=false;
cNode<cGuestroom> *p;
p=tListGue->head->next;
while(p)
{
if(strcmp(p->data.ID,id)==0 && p->data.flag)
{
flag=true;
break;
}
p=p->next;
}
if(flag==true)
{//显示屏幕
cout<<"找到了,该客房的原始信息是:\n";
cout<<"\n\n客房编号:"<<(p->data).ID<<"\t客房类型:"<<(p->data).Type<<"\n\t\t定房日期:"<<(p->data).Book<<"\n\t\t价格:"<<(p->data).Price;
cout<<"\n\t\t客房的主要内容:"<<(p->data).Function<<"\n\t\t入住有效期:"<<(p->data).StayTime;
cout<<"\n下面开始修改该客房的信息:\n";
cGuestroom tempGuestroom; //定义临时客房
cout<<"请输入客房的客房编号:";
cin>>tempGuestroom.ID; //读入客房编号
cout<<"请输入客房的客房类型:";
cin>>tempGuestroom.Type; //读入客房类型
cout<<"请输入客人的定房日期:";
cin>>tempGuestroom.Book; //读入定房日期
cout<<"请输入客房的客房价格:";
cin>>tempGuestroom.Price; //读入价格
cout<<"请输入客房的客房主要内容:";
cin>>tempGuestroom.Function; //读入客房的主要内容
cout<<"请输入客人入住客房有效期:";
cin>>tempGuestroom.StayTime; //读入入住有效期
tempGuestroom.flag=true;
p->data=tempGuestroom;
cout<<"修改成功!";
}
cout<<endl;
system("pause");
system("cls");
return;
}
void DeletetheGuestroom(tList<cGuestroom> *tListGue) //删除客房信息
{
char id[BUFSIZE];
cout<<"\n请输入你要查找的客房编号:";
cin>>id; //读取客房编号
bool flag=false;
int count=0;
cNode<cGuestroom> *p;
p=tListGue->head->next;
while(p)
{
if(strcmp(p->data.ID,id)==0 && p->data.flag)
{
count++;
flag=true;
break;
}
p=p->next;
}
if(flag==false) cout<<"对不起,你所查找的客房延长了住房日期!\n";//如果不能删else //如果能删
{
count--;
cout<<"找到了,该客房的原始信息是:\n";
cout<<"\n\n客房编号:"<<(p->data).ID<<"\t客房类型:"<<(p->data).Type<<"\n\t\t定房日期:"<<(p->data).Book<<"\n\t\t价格:"<<(p->data).Price;
cout<<"\n\t\t客房的主要内容:"<<(p->data).Function<<"\n\t\t入住有效期:"<<(p->data).StayTime;
cout<<endl;
(p->data).flag=false;
cout<<"该客房的信息删除成功!\n";
}
cout<<endl;
system("pause");
system("cls");
return;
}
void FindtheremainGuestroomById(tList<cGuestroom> *tListGue)//根据客房编号查找
{
char id[BUFSIZE];
cout<<"\n请输入你要查找的客房编号:";
cin>>id; //读取客房编号
bool flag=false;
cNode<cGuestroom> *p;
p=tListGue->head->next;
while(p)
{
if(strcmp(p->data.ID,id)==0 && p->data.flag)
{
flag=true;
break;
}
p=p->next;
}
if(flag==false) cout<<"对不起,没有该标号的客房!\n"; //如果找不到
else //如果找到了
{
cout<<"\n找到了,该客房的信息是:\n";
cout<<"\n\n客房编号:"<<(p->data).ID<<"\t客房类型:"<<(p->data).Type<<"\n\t\t定房日期:"<<(p->data).Book<<"\n\t\t价格:"<<(p->data).Price;
cout<<"\n\t\t主要内容:"<<(p->data).Function<<"\n\t\t入住有效期:"<<(p->data).StayTime;
}
cout<<endl;
system("pause");
system("cls"); //清屏
return;
}
void FindtheremainGuestroomByType(tList<cGuestroom> *tListGue)//根据客房类型查找客房{
char type[BUFSIZE];
cout<<"\n请输入你要查找的客房类型:";
cin>>type; //读取客房类型bool flag=false;
cNode<cGuestroom> *p;
p=tListGue->head->next;
while(p)
{
if(strcmp(p->data.Type,type)==0 && p->data.flag)
{
flag=true;
break;
}
p=p->next;
}
if(flag==false) cout<<"对不起,没有该类型的客房!\n"; //如果满了
else //如果找到了
{
cout<<"\n找到了,该客房信息是:\n";
cout<<"\n\n客房编号:"<<(p->data).ID<<"\t客房类型:"<<(p->data).Type<<"\n\t\t定房日期:"<<(p->data).Book<<"\n\t\t价格:"<<(p->data).Price;
cout<<"\n\t\t客房的主要内容:"<<(p->data).Function<<"\n\t\t入住有效期:"<<(p->data).StayTime;
}
cout<<endl;
system("pause");
system("cls");
return;
}
void FindtheremainGuestroomByPrice(tList<cGuestroom> *tListGue)//根据价格查找客房
{
char price[BUFSIZE];
cout<<"\n请输入你要查找的剩余客房的价格:";
cin>>price; //读取价格
bool flag=false;
cNode<cGuestroom> *p;
p=tListGue->head->next;
while(p)
{
if(strcmp(p->data.Price,price)==0 && p->data.flag)
{
flag=true;
cout<<"\n\n客房编号:"<<(p->data).ID<<"\t客房类型:"<<(p->data).Type<<"\n\t\t定房日期:"<<(p->data).Book<<"\n\t\t价格:"<<(p->data).Price;
cout<<"\n\t\t客房的主要内容:"<<(p->data).Function<<"\n\t\t入住有效期:"<<(p->data).StayTime;
}
p=p->next;
}
if(flag==false) cout<<"对不起,没有你所要求价格的客房!\n"; //如果找不到cout<<endl;
system("pause");
system("cls");
return;
}
void FindtheremainGuestroom(tList<cGuestroom> *tListGue)//查找客房
system("cls");
while(1)
{
cout<<"\n\n\n\n";
cout<<" 1:按客房编号查询\n\n";
cout<<" 2:按客房类型查询\n\n";
cout<<" 3:按价格查询\n\n";
cout<<" 4:退出查询\n\n";
cout<<"你选择:";
int choose=0;
cin>>choose;
switch(choose) //根据用户选择
{
case 1:FindtheremainGuestroomById(tListGue); //按客房编号查询break;
case 2:FindtheremainGuestroomByType(tListGue); //按客房类型查询break;
case 3:FindtheremainGuestroomByPrice(tListGue); //按价格查询
break;
case 4:
system("cls");
return; //退出查询default:break;
}
}
return;
}
void RanktheremainGuestroom(tList<cGuestroom> *tListGue) //排序剩余客房{cNode<cGuestroom> *p,*q;
cGuestroom remainGuestroom;
for (p=tListGue->head->next; p!= NULL; p=p->next)
{
for (q=p; q!= NULL; q=q->next)
{
if (p->data.StayTime > q->data.StayTime)
{
remainGuestroom.flag = p->data.flag;
strcpy(remainGuestroom.ID, p->data.ID); //复制
strcpy(remainGuestroom.Type, p->data.Type);
strcpy(remainGuestroom.Book, p->data.Book);
strcpy(remainGuestroom.Price, p->data.Price);
strcpy(remainGuestroom.Function, p->data.Function);
remainGuestroom.StayTime = p->data.StayTime;
p->data.flag = q->data.flag;
strcpy(p->data.Function, q->data.Function);
strcpy(p->data.ID, q->data.ID);
strcpy(p->data.Type, q->data.Type);
strcpy(p->data.Book, q->data.Book);
p->data.StayTime = q->data.StayTime;
q->data.flag = remainGuestroom.flag;
strcpy(q->data.Function, remainGuestroom.Function);
strcpy(q->data.ID, remainGuestroom.ID);
strcpy(q->data.Type, remainGuestroom.Type);
strcpy(q->data.Book, remainGuestroom.Book);
q->data.StayTime = remainGuestroom.StayTime;
}
}
}
}
void OutputtheremainGuestroom(tList<cGuestroom> *tListGue) //输出剩余房间函数
{
cNode<cGuestroom> *p;
p=tListGue->head->next;
while(p)
{
if(p->data.flag)
{
cout<<"\n\n客房编号:"<<(p->data).ID<<"\t客房类型:"<<(p->data).Type<<"\n\t\t提前定房日期:"<<(p->data).Book<<"\n\t\t价格:"<<(p->data).Price;
cout<<"\n\t\t主要内容:"<<(p->data).Function<<"\n\t\t入住有效期:"<<(p->data).StayTime;
}
p=p->next;
}
cout<<endl;
system("pause"); //停止
system("cls"); //清屏
return;
}
int main()
{
tList<cGuestroom> tListGue;
tListGue.Create(); //创建链表
ReadData(&tListGue);
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;
switch (choose) //用户的选择
{
case 1:AddtheGuestroom(&tListGue); break; //输入客房信息
case 2:SaveData(&tListGue);break; //客房信息信息保存
case 3:ModifytheGuestroom(&tListGue); break; //修改客房信息
case 4:DeletetheGuestroom(&tListGue); break; //删除客房信息
case 5:FindtheremainGuestroom(&tListGue); break; //查询剩余客房信息
case 6:RanktheremainGuestroom(&tListGue); break; //排序剩余客房信息
case 7:OutputtheremainGuestroom(&tListGue); break; //输出剩余客房信息
case 8:exit(0); //退出
default : break;
}
}
return 0;
}
6.2运行结果
主界面
录入客房信息的分界面
保存客房信息的分界面
修改客房信息的分界面
删除客房信息的分界面
查询客房信息的分界面
剩余客房信息输出界面。

相关文档
最新文档