资源描述
*******************
实践教学
*******************
兰州理工大学
计算机与通信学院
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:
int state;
int NO//住房编号
int price;//住宿费
char level[20];//级别
public:
Room(){}//构造函数
int getstate(){ return state; }
int getNO(){ return NO; }//获取住房编号
int getprice(){ return price;}//获取住宿费
char *getlevel() { return level}//获取房间级别
void setprice(int pri)//设置住宿费
void setlevel(char le[])//设置等级
void delroom(){state=1;}//删除
void addroom(int n,int pri,char *le)//增加房间
int borrowroom()//入住
void retroom()//退房
void disp()//输出
2) 房间数据类
class RDatabase
{
private:
int top; //住房记录指针
Room room[Maxr]; //住房记录
public:
RDatabase()//将book.txt读到book[]中
void clear()//清除所有信息
int addroom(int n,int prichar *le)//增加房间
Room *query(int roomID)//查找住房
void roomdata();//住房库维护
void disp()
~RDatabase()//析构函数,将book[]写到book.txt文件中
其中:void roomdata()实现对住房信息的增加,更改,删除,查找,显示,清除信息功能。
3) 顾客类:
class Person
{
private:
int state
int NO //顾客编号
char name[20]; //顾客姓名
long ID //顾客身份证号
int borroom;//所住房间
int intime;//入住时间
int outtime; //离开时间
public:
Person() {}
int getstate () {return state;}
int getNO() {return NO;}//获取顾客编号
char *getname() {return name;}
int getID() {return ID;}//获取顾客身份证号
int getintime(){return intime;}//获取入住时间
int getouttime(){return outtime;}//获取离开时间
void setname(char na[]) //设置姓名
void setID(char i) //设置身份号
void setborroom(char bor) //设置预定房间
void setintime(char in) //设置入住时间
void setouttime(char out) //设置离开时间
void delroom(){ state=1; }
void addperson(int n,char *na,long i,int in,int out,int bor)/增加顾客
void borrowroom(int roomID) //定房
int retroom(int roomID) //退房
void disp() //显示信息
4) 顾客数据类
class PDatabase
{
private:
int top; //顾客记录指针
Person per[Maxp];//顾客记录
public:
PDatabase() //将reader.txt读到read[]中
void clear()//清除所有顾客信息
int addperson(int n,char *na,long i,int in,int out,int bor)//添加顾客时先查找是否存在
Person *query(int personNO)//按编号查找
Person *queryn(char personname[20])//按姓名查找
Person *queryi(int personID)//按身份证号查找
void disp() //显示信息
void persondata();//顾客数据操作
~PDatabase() //将read[]写到reader.txt文件中
其中void persondata()实现对顾客信息的增加,更改,删除,查找,显示,清除功能。
主模块
3. 函数的调用关系图
菜单模块
退出
房间管理
查询浏览
顾客管理
4. 调试分析
在显示顾客的所有信息时,只能同时显示住房的编号,不能同时把住房的所有信息显示。顾客类和住房类之间没能很好的沟通。
在程序的严谨性和规范化上还不是很好。
按姓名查询的时候如果姓名一样,则只能显示一个,不能够将所有的信息都显示出来。
算法的时间复杂度:时间复杂度为O(n).
5. 测试结果
图1(登录界面)
图2(房间管理)
图3(顾客管理)
图4(按房间编号查询浏览)
图5(按顾客信息查询浏览)
图6(退房管理)
图7(退出界面)
6. 源程序(带注释)
Person *query(int personno)//按编号查找
{
for (int i=0;i<=top;i++)
if (per[i].getNO()==personno &&
per[i].getstate()==0)
{
return &per[i];
}
return NULL;
}
Person *queryn(char personname[20])//按姓名查找
{
for (int i=0;i<=top;i++)
if ((strcmp(per[i].getname(),personname)==0)&&
per[i].getstate()==0)
{
return &per[i];
}
return NULL;
}
Person *queryi(char personid[20])//按身份证号查找
{
for (int i=0;i<=top;i++)
if ((strcmp(per[i].getID(),personid)==0)&&
per[i].getstate()==0)
{
return &per[i];
}
return NULL;
}
void disp()
{
for (int i=0;i<=top;i++)
if (per[i].getstate()==0)
{
per[i].disp();
}
}
void persondata();
~PDatabase() //将read[]写到reader.txt文件中
{
fstream file("person.txt",ios::out);
for (int i=0;i<=top;i++)
if (per[i].getstate()==0)
file.write((char *)&per[i],sizeof(per[i]));
file.close();
}
};
void PDatabase::persondata()
{
int choice;
char pname[20];
int pno;
char pid[20];
int pin,pout,pbor;
Person *r;
while (choice!=0)
{
cout<<endl<<endl;
cout<<" [顾客管理] "<<endl<<endl;
cout<<"1.-> 新增 2.-> 更改 3.-> 删除 4.->清除数据 0.-> 退出"<<endl;
cin >> choice;
switch (choice)
{
case 0:
cout<<"已退出"<<endl;
break;
case 1:
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;
case 2:
cout << "输入顾客编号:";
cin >> pno;
r=query(pno);
if (r==NULL)
{
cout << " 不存在该顾客 "<<endl;
break;
}
int k;
cout <<"输入要修改的内容:1.-> 姓名 2.-> 身份证号 3.-> 入住时间 4.-> 离开时间 5.-> 房间号 0.-> 退出"<<endl;
cin >>k;
switch(k)
{
case 0:
cout<<"已退出";
break;
case 1:
cout << "输入新的姓名:";
cin>>pname;
r->setname(pname);
break;
case 2:
cout<<"输入新的身份证号:";
cin>>pid;
r->setID(pid);
break;
case 3:
cout<<"输入新的入住时间:";
cin>>pin;
r->setintime(pin);
break;
case 4:
cout<<"输入新的离开时间:";
cin>>pout;
r->setouttime(pout);
break;
case 5:
cout<<"输入新的房间号:";
cin>>pout;
r->setborroom(pbor);
break;
default :
cout<<"输入有误";
}
break;
case 3:
cout << " 输入顾客编号:";
cin >> pno;
int d;
cout<<"请慎重操作,是否真的删除所有顾客信息?"<<endl;
cout<<"1.是 2.否"<<endl;
cin>>d;
if(d==1)
{
r=query(pno);
if (r==NULL)
{
cout <<" 不存在该顾客" << endl;
break;
}
r->delroom();
cout<<"该顾客信息已被删除!"<<endl;
}
break;
case 4:
int c;
cout<<"请慎重操作,是否真的删除所有顾客信息?"<<endl;
cout<<"1.是 2.否"<<endl;
cin>>c;
if(c==1)
{
clear();
}
break;
default:
cout<<"输入有误,请重试:";
break;
}
}
总 结
调试过程中文件的操作是觉得最麻烦的,可是经过多次的修改,终于还是掌
握了一定的办法。因此对类中文件操作、构造函数、析构函数和成员函数有了更深刻的认识,加深了对成员函数调用方法的认识。
同时指针也起了不少的作用。
通过对客房管理系统的课程设计,利用面向对象的办法,基本满足了设计要求,使我对所学的知识有所深入认识和了解。也发现自己有许多不足的地方,并且对课本知识的领悟还有所欠缺。我想只有更多的加以练习、实践,才会让自己提高水平。
C++语言是基础的学科,它的运用是广泛而且不可或缺的。我希望自己能够在以后的学习中进一步完善自己,使自己能够真正掌握这门语言。
参考文献
1 严蔚敏,吴伟民.《数据结构(C语言版)》.清华大学出版社.
2 严蔚敏,吴伟民.《数据结构题集(C语言版)》.清华大学出版社.
3 《DATA STRUCTURE WITH C++》. William Ford,William Topp .清华大学出版社(影印版).
致 谢
首先感谢指导老师在我的课程设计过程中给予了巨大的帮助和悉心的指导,帮我解决了许多课程设计中的问题,使我得到了很多的启示,让我少走了很多的弯路,使我的课程设计顺利进行.
在我的课程设计过程中,我也得到了其他老师的帮助,在这里,我对你们表示感谢.
当然,同班同学们同样给予了我很多的帮助与指导,再一次表示感谢!
附件Ⅰ 任务一源程序代码
#include <iostream>
#include <string>
#include <fstream>//用于对文件读写的操作
using namespace std;
//顾客类
class Person
{
private:
int state;
int NO;
char name[20];
char ID[20];
int borroom;
int intime;
int outtime;
public:
Person() {}
int getstate() {return state;}
int getNO() {return NO;}
char *getname() {return name;}
char *getID() {return ID;}
int getintime(){return intime;}
int getouttime(){return outtime;}
void setname(char na[])
{
strcpy(name,na);
}
void setID(char i[])
{
strcpy(ID,i);
}
void setborroom(char bor)
{
borroom=bor;
}
void setintime(char in)
{
intime=in;
}
void setouttime(char out)
{
outtime=out;
}
void delroom(){ state=1; }
void addperson(int n,char *na,char *i,int in,int out,int bor)
{
NO=n;
strcpy(name,na);
strcpy(ID,i);
intime=in;
outtime=out;
borroom=bor;
state=0;
}
void borrowroom(int roomID)
{
borroom=roomID;
return;
}
int retroom(int roomID)
{
if(borroom==roomID)
{
borroom=0;
return 1;
}
return 0;
}
void disp()
{
cout <<"顾客编号:"<<NO<<endl<<"顾客姓名:"<<name<<endl<<"顾客身份ID:"<<ID<<endl<<"入住时间:"<<intime<<endl<<"离开时间:"<<outtime<<endl;
cout<<"所住房间:"<<borroom<<endl;
}
};
//顾客数据类
const int Maxp=100;
class PDatabase
{
private:
int top;
Person per[Maxp];
public:
PDatabase() //将reader.txt读到read[]中
{
Person s;
top=-1;
fstream file("person.txt",ios::in);//打开一个输入文件
while (1)
{
file.read((char *)&s,sizeof(s));
if (!file)break;
top++;
per[top]=s;
}
file.close();//关闭 reader.txt
}
void clear()
{
top=-1;
}
int addperson(int n,char *na,char *i,int in,int out,int bor)
{
Person *p=query(n);
if (p==NULL)
{
top++;
per[top].addperson(n,na,i,in,out,bor);
return 1;
}
return 0;
}
Person *query(int personno)//按编号查找
{
for (int i=0;i<=top;i++)
if (per[i].getNO()==personno &&
per[i].getstate()==0)
{
return &per[i];
}
return NULL;
}
Person *queryn(char personname[20])//按姓名查找
{
for (int i=0;i<=top;i++)
if ((strcmp(per[i].getname(),personname)==0)&&
per[i].getstate()==0)
{
return &per[i];
}
return NULL;
}
Person *queryi(char personid[20])//按身份证号查找
{
for (int i=0;i<=top;i++)
if ((strcmp(per[i].getID(),personid)==0)&&
per[i].getstate()==0)
{
return &per[i];
}
return NULL;
}
void disp()
{
for (int i=0;i<=top;i++)
if (per[i].getstate()==0)
{
per[i].disp();
}
}
void persondata();
~PDatabase() //将read[]写到reader.txt文件中
{
fstream file("person.txt",ios::out);
for (int i=0;i<=top;i++)
if (per[i].getstate()==0)
file.write((char *)&per[i],sizeof(per[i]));
file.close();
}
};
void PDatabase::persondata()
{
int choice;
char pname[20];
int pno;
char pid[20];
int pin,pout,pbor;
Person *r;
while (choice!=0)
{
cout<<endl<<endl;
cout<<" [顾客管理] "<<endl<<endl;
cout<<"1.-> 新增 2.-> 更改 3.-> 删除 4.->清除数据 0.-> 退出"<<endl;
cin >> choice;
switch (choice)
{
case 0:
cout<<"已退出"<<endl;
break;
case 1:
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;
case 2:
cout << "输入顾客编号:";
cin >> pno;
r=query(pno);
if (r==NULL)
{
cout << " 不存在该顾客 "<<endl;
break;
}
int k;
cout <<"输入要修改的内容:1.-> 姓名 2.-> 身份证号 3.-> 入住时间 4.-> 离开时间 5.-> 房间号 0.-> 退出"<<endl;
cin >>k;
switch(k)
{
case 0:
cout<<"已退出";
break;
case 1:
cout << "输入新的姓名:";
cin>>pname;
r->setname(pname);
break;
case 2:
cout<<"输入新的身份证号:";
cin>>pid;
r->setID(pid);
break;
case 3:
cout<<"输入新的入住时间:";
cin>>pin;
r->setintime(pin);
break;
case 4:
cout<<"输入新的离开时间:";
cin>>pout;
r->setouttime(pout);
break;
case 5:
cout<<"输入新的房间号:";
cin>>pout;
r->setborroom(pbor);
break;
default :
cout<<"输入有误";
}
break;
case 3:
cout << " 输入顾客编号:";
cin >> pno;
int d;
cout<<"请慎重操作,是否真的删除所有顾客信息?"<<endl;
cout<<"1.是 2.否"<<endl;
cin>>d;
if(d==1)
{
r=query(pno);
if (r==NULL)
{
cout <<" 不存在该顾客" << endl;
break;
}
r->delroom();
cout<<"该顾客信息已被删除!"<<endl;
}
break;
case 4:
int c;
cout<<"请慎重操作,是否真的删除所有顾客信息?"<<endl;
cout<<"1.是 2.否"<<endl;
cin>>c;
if(c==1)
{
clear();
}
break;
default:
cout<<"输入有误,请重试:";
break;
}
}
}
//房间类
class Room
{
private:
int state;
int NO;
int price;
char level[20];
int onshelf;
public:
Room(){}
int getstate(){ return state; }
int getNO(){ return NO; }
int getprice(){ return price;}
char *getlevel() { return level; }
void setprice(int pri)
{
price=pri;
}
void setlevel(char le[])
{
strcpy(level,le);
}
void delroom(){ state=1;}
void addroom(int n,int pri,char *le)
{
state=0;
NO=n;
price=pri;
strcpy(level,le);
onshelf=1;
}
int borrowroom()//入住
{
if (onshelf==1)
{
onshelf=0;
return 1;
}
return 0;
}
void retroom()//退房
{
onshelf=1;
}
void disp()
{
cout <<"房间编号: "<<NO<<endl<<"房间费用: "<<price<<endl<<"房间级别: "<<level<<endl;
}
};
//房间数据类
const int Maxr=100;
class RDatabase
{
private:
int top;
Room room[Maxr];
public:
RDatabase()//将book.txt读到book[]中
{
Room 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();
}
void clear()
{
top=-1;
}
int addroom(int n,int pri,char *le)//增加住房
{
Room *p=query(n);
if (NULL==p)
{
top++;
room[top].addroom(n,pri,le);
return 1;
}
return 0;
}
Room *query(int roomID)//查找住房
{
for (int i=0;i<=top;i++)
if (room[i].getNO()==roomID&&room[i].getstate()==0)
{
return &room[i];
}
return NULL;
}
void roomdata();//维护
void disp()
{
for (int i=0;i<=top;i++)
if (room[i].getstate()==0)
{
room[i].disp();
}
}
~RDatabase()//将book[]写到book.txt文件中
{
fstream file("room.txt",ios::out);
for (int i=0;i<=top;i++)
if (room[i].getstate()==0)
file.write((char *)&room[i],sizeof(room[i]));
file.close();
}
};
void RDatabase::roomdata()
{
int choice;
char rlevel[40];
int rno,rpri;
Room *b;
while (choice!=0)
{
cout<<endl<
展开阅读全文