宾馆客房管理系统说明书.doc
《宾馆客房管理系统说明书.doc》由会员分享,可在线阅读,更多相关《宾馆客房管理系统说明书.doc(34页珍藏版)》请在冰点文库上搜索。
![宾馆客房管理系统说明书.doc](https://file1.bingdoc.com/fileroot1/2023-5/7/c49f4176-9a2c-4a50-ae20-f9f75e23a4ac/c49f4176-9a2c-4a50-ae20-f9f75e23a4ac1.gif)
*******************
实践教学
*******************
兰州理工大学
计算机与通信学院
2012年春季学期
数据结构课程设计
题目:
宾馆客房管理系统
专业班级:
姓名:
学号:
指导教师:
成绩:
目录
摘要 1
1. 采用类c语言定义相关的数据类型 2
2. 各模块的伪码算法 2
3. 函数的调用关系图 6
4. 调试分析 6
5. 测试结果 7
6. 源程序(带注释) 10
总结 15
参考文献 16
致谢 17
附件Ⅰ任务一源程序代码 18
摘要
为了实现酒店能够及时地录入客房和顾客信息,以备对客房的各项管理,实现顾客的定房、推房操作。
以简单,易读友好的界面面向用户,以易于理解的方式提醒用户如何操作。
该程序以菜单的形式清楚地展示在DOS环境下系统的各块的功能,当录入的住房和顾客信息需要修改,删除,查询等时如何进行操作。
该系统满足了客房管理的基本要求,以简单的思维方式展示界面,尽量满足用户的要求。
关键词:
信息管理
31
1.采用类c语言定义相关的数据类型
顾客类(person)的成员:
1、NO(顾客编号),int
2、Name(顾客姓名),char
3、ID(顾客身份证号),int
4、Intime(入住时间),int
5、Outtime(离开时间),int
6、Borrow(所住房间),int
房间类(room)的成员:
1、NO(房间编号),int
2、Price(住宿费),int
3、Level(房间等级),char
2.各模块的伪码算法
1)房间类
private:
intstate;
intNO//住房编号
intprice;//住宿费
charlevel[20];//级别
public:
Room(){}//构造函数
intgetstate(){returnstate;}
intgetNO(){returnNO;}//获取住房编号
intgetprice(){returnprice;}//获取住宿费
char*getlevel(){returnlevel}//获取房间级别
voidsetprice(intpri)//设置住宿费
voidsetlevel(charle[])//设置等级
voiddelroom(){state=1;}//删除
voidaddroom(intn,intpri,char*le)//增加房间
intborrowroom()//入住
voidretroom()//退房
voiddisp()//输出
2)房间数据类
classRDatabase
{
private:
inttop;//住房记录指针
Roomroom[Maxr];//住房记录
public:
RDatabase()//将book.txt读到book[]中
voidclear()//清除所有信息
intaddroom(intn,intprichar*le)//增加房间
Room*query(introomID)//查找住房
voidroomdata();//住房库维护
voiddisp()
~RDatabase()//析构函数,将book[]写到book.txt文件中
其中:
voidroomdata()实现对住房信息的增加,更改,删除,查找,显示,清除信息功能。
3)顾客类:
classPerson
{
private:
intstate
intNO//顾客编号
charname[20];//顾客姓名
longID//顾客身份证号
intborroom;//所住房间
intintime;//入住时间
intouttime;//离开时间
public:
Person(){}
intgetstate(){returnstate;}
intgetNO(){returnNO;}//获取顾客编号
char*getname(){returnname;}
intgetID(){returnID;}//获取顾客身份证号
intgetintime(){returnintime;}//获取入住时间
intgetouttime(){returnouttime;}//获取离开时间
voidsetname(charna[])//设置姓名
voidsetID(chari)//设置身份号
voidsetborroom(charbor)//设置预定房间
voidsetintime(charin)//设置入住时间
voidsetouttime(charout)//设置离开时间
voiddelroom(){state=1;}
voidaddperson(intn,char*na,longi,intin,intout,intbor)/增加顾客
voidborrowroom(introomID)//定房
intretroom(introomID)//退房
voiddisp()//显示信息
4)顾客数据类
classPDatabase
{
private:
inttop;//顾客记录指针
Personper[Maxp];//顾客记录
public:
PDatabase()//将reader.txt读到read[]中
voidclear()//清除所有顾客信息
intaddperson(intn,char*na,longi,intin,intout,intbor)//添加顾客时先查找是否存在
Person*query(intpersonNO)//按编号查找
Person*queryn(charpersonname[20])//按姓名查找
Person*queryi(intpersonID)//按身份证号查找
voiddisp()//显示信息
voidpersondata();//顾客数据操作
~PDatabase()//将read[]写到reader.txt文件中
其中voidpersondata()实现对顾客信息的增加,更改,删除,查找,显示,清除功能。
主模块
3.函数的调用关系图
菜单模块
退出
房间管理
查询浏览
顾客管理
4.调试分析
在显示顾客的所有信息时,只能同时显示住房的编号,不能同时把住房的所有信息显示。
顾客类和住房类之间没能很好的沟通。
在程序的严谨性和规范化上还不是很好。
按姓名查询的时候如果姓名一样,则只能显示一个,不能够将所有的信息都显示出来。
算法的时间复杂度:
时间复杂度为O(n).
5.测试结果
图1(登录界面)
图2(房间管理)
图3(顾客管理)
图4(按房间编号查询浏览)
图5(按顾客信息查询浏览)
图6(退房管理)
图7(退出界面)
6.源程序(带注释)
Person*query(intpersonno)//按编号查找
{
for(inti=0;i<=top;i++)
if(per[i].getNO()==personno&&
per[i].getstate()==0)
{
return&per[i];
}
returnNULL;
}
Person*queryn(charpersonname[20])//按姓名查找
{
for(inti=0;i<=top;i++)
if((strcmp(per[i].getname(),personname)==0)&&
per[i].getstate()==0)
{
return&per[i];
}
returnNULL;
}
Person*queryi(charpersonid[20])//按身份证号查找
{
for(inti=0;i<=top;i++)
if((strcmp(per[i].getID(),personid)==0)&&
per[i].getstate()==0)
{
return&per[i];
}
returnNULL;
}
voiddisp()
{
for(inti=0;i<=top;i++)
if(per[i].getstate()==0)
{
per[i].disp();
}
}
voidpersondata();
~PDatabase()//将read[]写到reader.txt文件中
{
fstreamfile("person.txt",ios:
:
out);
for(inti=0;i<=top;i++)
if(per[i].getstate()==0)
file.write((char*)&per[i],sizeof(per[i]));
file.close();
}
};
voidPDatabase:
:
persondata()
{
intchoice;
charpname[20];
intpno;
charpid[20];
intpin,pout,pbor;
Person*r;
while(choice!
=0)
{
cout< cout<<"[顾客管理]"<cout<<"1.->新增2.->更改3.->删除4.->清除数据0.->退出"< cin>>choice;
switch(choice)
{
case0:
cout<<"已退出"< break;
case1:
cout<<"输入顾客编号:
";
cin>>pno;
cout<<"输入顾客姓名:
";
cin>>pname;
cout<<"输入顾客身份证号:
";
cin>>pid;
cout<<"请输入入住时间:
";
cin>>pin;
cout<<"请输入离开时间:
";
cin>>pout;
cout<<"请输入房间号:
";
cin>>pbor;
addperson(pno,pname,pid,pin,pout,pbor);
break;
case2:
cout<<"输入顾客编号:
";
cin>>pno;
r=query(pno);
if(r==NULL)
{
cout<<"不存在该顾客"< break;
}
intk;
cout<<"输入要修改的内容:
1.->姓名2.->身份证号3.->入住时间4.->离开时间5.->房间号0.->退出"< cin>>k;
switch(k)
{
case0:
cout<<"已退出";
break;
case1:
cout<<"输入新的姓名:
";
cin>>pname;
r->setname(pname);
break;
case2:
cout<<"输入新的身份证号:
";
cin>>pid;
r->setID(pid);
break;
case3:
cout<<"输入新的入住时间:
";
cin>>pin;
r->setintime(pin);
break;
case4:
cout<<"输入新的离开时间:
";
cin>>pout;
r->setouttime(pout);
break;
case5:
cout<<"输入新的房间号:
";
cin>>pout;
r->setborroom(pbor);
break;
default:
cout<<"输入有误";
}
break;
case3:
cout<<"输入顾客编号:
";
cin>>pno;
intd;
cout<<"请慎重操作,是否真的删除所有顾客信息?
"< cout<<"1.是2.否"< cin>>d;
if(d==1)
{
r=query(pno);
if(r==NULL)
{
cout<<"不存在该顾客"< break;
}
r->delroom();
cout<<"该顾客信息已被删除!
"< }
break;
case4:
intc;
cout<<"请慎重操作,是否真的删除所有顾客信息?
"< cout<<"1.是2.否"< cin>>c;
if(c==1)
{
clear();
}
break;
default:
cout<<"输入有误,请重试:
";
break;
}
}
总结
调试过程中文件的操作是觉得最麻烦的,可是经过多次的修改,终于还是掌
握了一定的办法。
因此对类中文件操作、构造函数、析构函数和成员函数有了更深刻的认识,加深了对成员函数调用方法的认识。
同时指针也起了不少的作用。
通过对客房管理系统的课程设计,利用面向对象的办法,基本满足了设计要求,使我对所学的知识有所深入认识和了解。
也发现自己有许多不足的地方,并且对课本知识的领悟还有所欠缺。
我想只有更多的加以练习、实践,才会让自己提高水平。
C++语言是基础的学科,它的运用是广泛而且不可或缺的。
我希望自己能够在以后的学习中进一步完善自己,使自己能够真正掌握这门语言。
参考文献
1严蔚敏,吴伟民.《数据结构(C语言版)》.清华大学出版社.
2严蔚敏,吴伟民.《数据结构题集(C语言版)》.清华大学出版社.
3《DATASTRUCTUREWITHC++》.WilliamFord,WilliamTopp.清华大学出版社(影印版).
致谢
首先感谢指导老师在我的课程设计过程中给予了巨大的帮助和悉心的指导,帮我解决了许多课程设计中的问题,使我得到了很多的启示,让我少走了很多的弯路,使我的课程设计顺利进行.
在我的课程设计过程中,我也得到了其他老师的帮助,在这里,我对你们表示感谢.
当然,同班同学们同样给予了我很多的帮助与指导,再一次表示感谢!
附件Ⅰ任务一源程序代码
#include
#include
#include//用于对文件读写的操作
usingnamespacestd;
//顾客类
classPerson
{
private:
intstate;
intNO;
charname[20];
charID[20];
intborroom;
intintime;
intouttime;
public:
Person(){}
intgetstate(){returnstate;}
intgetNO(){returnNO;}
char*getname(){returnname;}
char*getID(){returnID;}
intgetintime(){returnintime;}
intgetouttime(){returnouttime;}
voidsetname(charna[])
{
strcpy(name,na);
}
voidsetID(chari[])
{
strcpy(ID,i);
}
voidsetborroom(charbor)
{
borroom=bor;
}
voidsetintime(charin)
{
intime=in;
}
voidsetouttime(charout)
{
outtime=out;
}
voiddelroom(){state=1;}
voidaddperson(intn,char*na,char*i,intin,intout,intbor)
{
NO=n;
strcpy(name,na);
strcpy(ID,i);
intime=in;
outtime=out;
borroom=bor;
state=0;
}
voidborrowroom(introomID)
{
borroom=roomID;
return;
}
intretroom(introomID)
{
if(borroom==roomID)
{
borroom=0;
return1;
}
return0;
}
voiddisp()
{
cout<<"顾客编号:
"<"<"<"<"< cout<<"所住房间:
"< }
};
//顾客数据类
constintMaxp=100;
classPDatabase
{
private:
inttop;
Personper[Maxp];
public:
PDatabase()//将reader.txt读到read[]中
{
Persons;
top=-1;
fstreamfile("person.txt",ios:
:
in);//打开一个输入文件
while
(1)
{
file.read((char*)&s,sizeof(s));
if(!
file)break;
top++;
per[top]=s;
}
file.close();//关闭reader.txt
}
voidclear()
{
top=-1;
}
intaddperson(intn,char*na,char*i,intin,intout,intbor)
{
Person*p=query(n);
if(p==NULL)
{
top++;
per[top].addperson(n,na,i,in,out,bor);
return1;
}
return0;
}
Person*query(intpersonno)//按编号查找
{
for(inti=0;i<=top;i++)
if(per[i].getNO()==personno&&
per[i].getstate()==0)
{
return&per[i];
}
returnNULL;
}
Person*queryn(charpersonname[20])//按姓名查找
{
for(inti=0;i<=top;i++)
if((strcmp(per[i].getname(),personname)==0)&&
per[i].getstate()==0)
{
retur