*******************
实践教学
*******************
兰州理工大学
计算机与通信学院
2011年秋季学期
面向对象课程设计
题
专业班级:计算机科学与技术4班 姓 名:杜思远 学 号:指导教师: 成 绩:_______________
目 录
中文摘要........................................................................................................................ 3 序 言.......................................................................................................................... 4 1.采用类C语言定义相关数据类型 ......................................................................... 5 2.各模块流程图及伪码算法...................................................................................... 6 3.函数的调用关系图................................................................................................ 10 4.调试分析.............................................................................................................. 11
A.调试中遇到的问题及对问题的解决方法 .......................................................... 12 B.算法的时间复杂度和空间复杂度 ...................................................................... 13
5.测试结果................................................................................................................ 14 设计总结...................................................................................................................... 16 参考文献...................................................................................................................... 17 致 谢............................................................................................................................ 18
摘 要
该论文分别对软件的需求进行分析,对软件的概要设计和软件的详细设计进行阐述,以及对软件的组装及测试的详细叙述,并附加了软件的使用说明书(操作手册)。程序设计将每个功能分别编译实现,再通过函数包含,调用等方法实现各项功能间的连接为设计思想,并采用将学生当作一个整体,整体类型为结构体,结构体中的域表示学生的属性的这种定义结构作为数据结构。软件将各个模块的功能分为列菜单、表明结构体、录入、排序、查询、插入及读取等来组成整个程序,实现对宾馆客房的系统管理。该程序界面友好,易于操作,使操作者和使用者应用更加方便。
关键字:C++,结构体,软件。
序 言
随着我国经济的迅速发展,人们的生活水平有了显著的提高,假日经济和旅游经济已成为人们消费的热点。各地也把旅游业当作本地经济发展的重要经济支柱之要求越来越高,宾馆酒店业的竞争也愈来愈激烈。如何在激烈的竞争中生从发展,是每一个宾馆酒店必须面临的问题。对宾馆的经营善起决定作用的是宾馆酒店的服务管理水平面。如何利用先进的管理手段,提高宾馆的管理水平,以成为宾馆酒店发展的当务之急。面对住处时代的机遇和挑战,利用科技手段提高企业管理水平是企业管理无疑是一条行之有效的途径。虽然计算机管理并不是宾馆管理走向成功的关键元索,但它可以最大限度地发挥准确,快捷,高效等作用,对宾馆的服务管理提供强有力的支持。因此,采用全新的计算机网络和宾馆管理系统,已成为提高宾馆的管理效率,改善服务的水准备的重要手段之一。在某种意义上,宾馆客房管理方面的信息话已成为现代化宾馆的重要标志。是国家发展必要的软件管理。
该程序采用的是结构体类型来所有基本信息,如下所述。 包含的库函数有:
# include # include #define max1 80 #define max2 10 #define max3 19
包含的结构体: typedef struct Room() {datatype number; datatype dank; datatype state; datatype price;
}; typedef struct Room room[max1]; 包含的类: typedef class Customer() {public: Customer();
void set_name(char *n){strcpy(name,n);} void set_ID(char *p){strcpy(ID,p);}
void set_room_number(int n){room_number=n;} void set_day(int d){day=d;}
void set_prepaid(int p){prepaid=p;} datatype *get_name(){return name;} datatype *get_ID(){return ID;}
datatype get_room_number(){return room_number;} datatype get_day(){return day;} datatype get_prepaid(){return prepaid;} virtual ~Customer(); private:
{datatype name[max2],ID[max3]; datatype room_number; datatype prepaid; datatype change; datatype day; }; }
2.各模块流程图及伪码算法
2.1 订房功能 a.流程图
b.伪码算法 void book_room() {
customer[i]=new Customer; //分配空间 int room_standard,day;
cout
cout
switch(room_standard) {//根据房间的标准运用case语句表示其一等,两等,三等,四等。 int n;
cout
{cout
2.2入住登记功能 a.流程图
b.伪码算法 void check_in()
{char name1[max2],id1[max3]; int ding_or_no,prepaid;
cout
for(int j=0;j
{if((strcmp(customer[j]->get_name(),name1)==0)&&(strcmp(customer[j]->get_ID(),id1)==0)) //查找该顾客的定房信息 {
int num=customer[j]->get_room_number(); //取得定房的房间号
cout
switch(num/100)
{//计算的值,运用case语句分别以计算的值来表示不同等级房间的房费,并修改入住状态。
Case=(num/100)
prepaid=customer[j]->get_day()*150; customer[j]->set_prepaid(prepaid);
cout
room[num%100-1].state=2; //修改房间状态为入住状态 break;}}
else //没定则先分配一个空间custoner[i],输入顾客的姓名,身份证号和要预订的天数。
switch(room_standard)
//根据房间的等级,用case=room_standard语句算出房费,顾客数加1 { int n;
case =room_standard(1.2.3.4)
prepaid=day*150;customer[i]->set_prepaid(prepaid);
for(n=0/20/40/60;n
if(room[n].state==0)
{cout
入
住
房
间
号
码
为
:
cout
请
收
房
费
customer[i]->set_room_number(room[n].number) break;}} i++;}}}//顾客数加1
2.3 退房结算功能 a.流程图
b.伪码算法 void check_out() {
char name2[max2],id2[max3];
int standard,j,room_number,day1,day2,day;
cout
{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; day=day1-day2;
day1=customer[j]->get_day();
switch(standard)
//根据(standard=room_number/100)输出顾客的房间号和费用,在看是否超出预订天数,定下顾客是多住还是提前走,确定其最后的费用。 {
case =standard
cout
cout
if(day>0) cout
if(day
break; cout
char account; //将该顾客的房间信息删除,清除空间 cin>>account; if(account=='1') {
for(int k=0;k
{if(room[k].number==customer[j]->get_room_number()) room[k].state=0;} i--; for(;j
{customer[j]=customer[j+1];}delete customer[i];} } } }
2.4 信息查询功能 a.流程图
b.伪码算法 void inquire() {char inquire_choice;
cout
{int j,k=0; cout
{if(room[j].state==0) { if(k%10==0) cout
房间增加}}
k=0; cout
if(room[j].state==1)
{ if(k%10==0) cout
k=0; cout
if(room[j].state==2)
{ if(k%10==0) cout
else if(inquire_choice=='2') {
cout
if(inquire_choice=='1'/'2')//看程序是按顾客姓名('1')还是身份证号('2')根据情况查询 {
char name3[10],id3[19];
cout
{ if(strcmp(customer[j]->get_name()/get_ID(),name3/id3)==0) { cout
cout
预
付
房
费
为
:
3.函数的调用关系图 包含的函数有:
Main() /*主函数*/
Initial_room() /*房间信息函数*/ Welcome() /*欢迎函数*/ Enter() /*进入系统函数*/ Book_room() /*定房函数*/
Check_in() /*入住客房函数*/ Check_out() /*退房函数*/
Inquire() /*信息查询函数*/
4.调试分析
a.调试中遇到的问题以及对问题的解决办法。
在存放房间信息时遇到了一些问题,房间包含的信息较多,在老师的帮助下,我采用了结构体数组struct Room roon[],解决了这个问题。顾客信息较复杂,我采用了类,并利用了构造函数,成员函数,析构函数(虚函数),来解决。
5.测试结果
5.1 进入系统和订房
5.2 入住
5.3 退房
5.4 查询
设 计 总 结
通过三星期的面向对象课程设计的学习,我运用C++语言设计,我从中受益匪浅,并且对C++语言程序设计这两门课程有了更深一步的认识。在实习中,我可以把这学期所学的理论知识和实践联系起来,在所要开发的项目中渐渐成长。虽然我对C++语言知识运用得还不是很熟练,但是相信我也在滴水穿石地成长起来。发现问题,提出问题,解决问题,使我从不足之处出发,寻找新的学习方向。
在实习中,我设计了一组对宾馆客房进行管理的系统,它基本满足了界面友好,易于操作的要求,因此更利于用户操作方便,运行简易,从而达到对宾馆客房更加有效系统的管理,并且速度更快内容更直接地达到用户所想要的效果。我一边实习一边探索,发现理论和实践要充分地结合,是需要扎实的基本功的,这就表明学好基础知识是理论付诸实践的前提。在实习中我学到了很多,希望在以后我们能充分利用实习的机会充实自己,并希望这样的机会能被更好更多地提供。
参考文献
1.江明德. 面向对象程序设计. 电子工业出版社,1993. 2.吕凤翥.C++语言程序设计.电子工业出版社,2001 3.阎龙. C程序员的C++指南. 北京航空航天大学出版社,1992 4.张永. 算法与数据结构. 国防工业出版社, 2008.8 5.严蔚敏,吴伟民. 数据结构. 清华大学出版社,2006.10
致 谢
经过这三周的实习,我们获得了许多在课堂上听课而不能获得的知识,首先我们要感谢学校给我们安排的这次的算法与数据结构程序设计实习,然后我要感谢朱红蕾老师对我热心的指导和帮助,是她教会了我们怎样解决问题的方法,这样我的软件设计才会更加顺利地进行,并且充分掌握了设计程序的方法。我们还要感谢许多同学的帮助,他们的帮助对于我们来说也是必不可少的。
总之,是有了他们的帮助,我们才能顺利地完成软件设计,在这里我们要向他们说一句:非常感谢,你们辛苦了!
附录:源代码 #include using namespace std; #include #define BUFSIZE 50 class cGuestroom;
void FindTheGuestroom(); //查找客房 void FindTheGuestroomById(); //按照编号找客房 void FindTheGuestroomByType(); //按照类型找客房 void FindTheGuestroomByPrice(); //按照价格找客房 void DeleteTheGuestroom(); //删除客房 void AddTheGuestroom(); //客房添加 void ModifyTheGuestroom(); //修改客房
template //template:模板,样板 class cNode //节点 {
public:
T data;
cNode *next; };
template
class tList {
public: //定义成员函数
tList();
void Create(); //创建链表 bool Empty() const; //判断链表是否为空 void Insert(const T e); //从尾部插入一个元素 cNode* GetcNode(int i); //返回第i个节点 bool Find(const T e); //在链表中查找某个值 ~tList(); //销毁链表,析构
cNode *head; };
template
tList::tList() { head=new cNode; head->next=NULL;
}
template void tList::Create() {
cNode *p; p=head; p->next=NULL;
}
template
bool tList::Empty() const { return (head->next==NULL);
}
//头节点 //类的成员函数的实现
void tList::Insert(const T e) //insert:插入 {
cNode *p,*q; p=head;
q=new cNode; q->data=e; while(p->next) { p=p->next;
} p->next=q; q->next=NULL;
}
template
cNode* tList::GetcNode(int i) {
int k=0; cNode *p; p=head; while(p && knext; ++k;
} return p;
}
//返回第i个节点
bool tList::Find(const T e) //在链表中查找某个值 {
bool flag=false;
cNode *p; p=head->next; while(p) { if(p->data==e) { flag=true; break;
} p=p->next;
} return flag;
}
template tList::~tList() { cNode *p; while(head) { p=head->next; delete head; head=p;
}
}
class cGuestroom { public:
memset(ID,0,BUFSIZE);memset(Type,0,BUFSIZE);memset(Book,0,BUFSIZE);
char ID[BUFSIZE]; //客房编号 char Type[BUFSIZE]; //客房类型 char Book[BUFSIZE]; //提前定房日期 char Price[BUFSIZE]; //客房价格 char Function[BUFSIZE]; //客房主要内容 int StayTime; //入住天数有效期 bool flag;//标志
cGuestroom()//构造函数初始化 {
memset(Function,0,BUFSIZE);
};
void ReadData(tList *tListGue)//读取数据库 {
char buf[BUFSIZE];
ifstream ifile(
//创建一个输出文件流对象
memset(Price,0,BUFSIZE);StayTime=0.0;flag=false;
} //memset:把char类型转换成ASCII值
cerr
}
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
}
void AddtheGuestroom(tList *tListGue)// 输入客房函数{ 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;
tListGue->Insert(tempGuestroom);
}
cout
system(
void SaveData(tList *tListGue) //保存数据 {
int i=0;
ofstream ofile(
cNode *p; p=tListGue->head->next; while(p) {
//从内存中读取cerr
数据,存到外盘
if(p->data.flag) {
ofile
ofiledata).ID
} p=p->next;
}
cout
}
void ModifytheGuestroom(tList *tListGue) { char id[BUFSIZE];
cout
cin>>id; 号
bool flag=false; cNode *p; p=tListGue->head->next; while(p) { if(strcmp(p->data.ID,id)==0 && p->data.flag) { flag=true; break;
} p=p->next;
}
//修改客房信息 //读取客房编
{//显示屏幕
cout
客房编号:
客房类
价
型:
定房日期:
cout
期:
}
cout
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
}
void DeletetheGuestroom(tList *tListGue) //删除客房信息 {
char id[BUFSIZE];
cout
cNode *p;
p=tListGue->head->next; while(p) { }
if(flag==false) cout
if(strcmp(p->data.ID,id)==0 && p->data.flag) { } p=p->next;
count++; flag=true; break;
\n
else //如果能删 {
count--;
cout
客房编号:
客房类
价
型:
定房日期:
cout
期:
}
void FindtheremainGuestroomById(tList *tListGue)//根据客房编号查找
{
char id[BUFSIZE];
cout
cin>>id; //读取 } cout
coutdata).flag=false;
cout
客房编号
bool flag=false;
cNode *p;
p=tListGue->head->next; while(p) {
不到
}
{ } p=p->next;
flag=true; break;
if(flag==false) cout
else
//如果找到了
{
cout
客房编号:
客房类
价
型:
定房日期:
cout
期:
}
void FindtheremainGuestroomByType(tList *tListGue)//根据客房类型查找客房
{
} cout
system(
cout
cin>>type; //读
取客房类型
bool flag=false;
cNode *p; 满了
else //如if(flag==false) cout
if(strcmp(p->data.Type,type)==0 && p->data.flag) { } p=p->next;
flag=true; break;
果找到了
{
cout
客房编号:
客房类
价
型:
定房日期:
cout
期:
} cout
}
system(
void FindtheremainGuestroomByPrice(tList *tListGue)//根据价格查找客房
{
char price[BUFSIZE];
cout
cin>>price; //
读取价格
bool flag=false;
cNode *p;
p=tListGue->head->next; while(p) {
if(strcmp(p->data.Price,price)==0 && p->data.flag) {
flag=true;
客房编号:
客房类
价
cout
型:
定房日期:
cout
期:
} p=p->next;
if(flag==false) cout
如果找不到
}
void FindtheremainGuestroom(tList *tListGue)//查找客房 {
system(
cout
cout
switch(choose) //根据cout
用户选择
查询
break;
{
case 1:FindtheremainGuestroomById(tListGue); //按客房编号
查询
case 2:FindtheremainGuestroomByType(tListGue); //按客房类型
break;
case 3:FindtheremainGuestroomByPrice(tListGue); //按价格查询
break;
case 4: system(
return; 出查询
default:break; }
}
return;
}
void RanktheremainGuestroom(tList *tListGue) 房
{cNode *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.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 *tListGue) //输出剩余房间函数
{
cNode *p; p=tListGue->head->next; while(p) {
{
cout
客房编号:
客房类
型:
cout
期:
} p=p->next;
}
cout
system(
} int main() {
tList tListGue; tListGue.Create(); ReadData(&tListGue); while(1) {
cout
\n\n
\n\n
\n\n
\n\n
cout
cout
cout
cout
cout
cout
\n\n
\n\n
的选择
信息
{
case 1:AddtheGuestroom(&tListGue); break; //输入客房
case 2:SaveData(&tListGue);break; //客房信息
cout
cout
cout
剩
余
客
房
信
息
的
输
出
int choose=0; cin>>choose;
switch (choose) //用户
信息保存
信息
case 4:DeletetheGuestroom(&tListGue); break; //删除客房信息
case 5:FindtheremainGuestroom(&tListGue); break; //查询剩余
case 3:ModifytheGuestroom(&tListGue); break; //修改客房
客房信息
case 6:RanktheremainGuestroom(&tListGue); break; //排序剩余
客房信息
房信息
case 7:OutputtheremainGuestroom(&tListGue); break; //输出剩余客
case 8:exit(0); //退出 default : break; } } return 0;
}
*******************
实践教学
*******************
兰州理工大学
计算机与通信学院
2011年秋季学期
面向对象课程设计
题
专业班级:计算机科学与技术4班 姓 名:杜思远 学 号:指导教师: 成 绩:_______________
目 录
中文摘要........................................................................................................................ 3 序 言.......................................................................................................................... 4 1.采用类C语言定义相关数据类型 ......................................................................... 5 2.各模块流程图及伪码算法...................................................................................... 6 3.函数的调用关系图................................................................................................ 10 4.调试分析.............................................................................................................. 11
A.调试中遇到的问题及对问题的解决方法 .......................................................... 12 B.算法的时间复杂度和空间复杂度 ...................................................................... 13
5.测试结果................................................................................................................ 14 设计总结...................................................................................................................... 16 参考文献...................................................................................................................... 17 致 谢............................................................................................................................ 18
摘 要
该论文分别对软件的需求进行分析,对软件的概要设计和软件的详细设计进行阐述,以及对软件的组装及测试的详细叙述,并附加了软件的使用说明书(操作手册)。程序设计将每个功能分别编译实现,再通过函数包含,调用等方法实现各项功能间的连接为设计思想,并采用将学生当作一个整体,整体类型为结构体,结构体中的域表示学生的属性的这种定义结构作为数据结构。软件将各个模块的功能分为列菜单、表明结构体、录入、排序、查询、插入及读取等来组成整个程序,实现对宾馆客房的系统管理。该程序界面友好,易于操作,使操作者和使用者应用更加方便。
关键字:C++,结构体,软件。
序 言
随着我国经济的迅速发展,人们的生活水平有了显著的提高,假日经济和旅游经济已成为人们消费的热点。各地也把旅游业当作本地经济发展的重要经济支柱之要求越来越高,宾馆酒店业的竞争也愈来愈激烈。如何在激烈的竞争中生从发展,是每一个宾馆酒店必须面临的问题。对宾馆的经营善起决定作用的是宾馆酒店的服务管理水平面。如何利用先进的管理手段,提高宾馆的管理水平,以成为宾馆酒店发展的当务之急。面对住处时代的机遇和挑战,利用科技手段提高企业管理水平是企业管理无疑是一条行之有效的途径。虽然计算机管理并不是宾馆管理走向成功的关键元索,但它可以最大限度地发挥准确,快捷,高效等作用,对宾馆的服务管理提供强有力的支持。因此,采用全新的计算机网络和宾馆管理系统,已成为提高宾馆的管理效率,改善服务的水准备的重要手段之一。在某种意义上,宾馆客房管理方面的信息话已成为现代化宾馆的重要标志。是国家发展必要的软件管理。
该程序采用的是结构体类型来所有基本信息,如下所述。 包含的库函数有:
# include # include #define max1 80 #define max2 10 #define max3 19
包含的结构体: typedef struct Room() {datatype number; datatype dank; datatype state; datatype price;
}; typedef struct Room room[max1]; 包含的类: typedef class Customer() {public: Customer();
void set_name(char *n){strcpy(name,n);} void set_ID(char *p){strcpy(ID,p);}
void set_room_number(int n){room_number=n;} void set_day(int d){day=d;}
void set_prepaid(int p){prepaid=p;} datatype *get_name(){return name;} datatype *get_ID(){return ID;}
datatype get_room_number(){return room_number;} datatype get_day(){return day;} datatype get_prepaid(){return prepaid;} virtual ~Customer(); private:
{datatype name[max2],ID[max3]; datatype room_number; datatype prepaid; datatype change; datatype day; }; }
2.各模块流程图及伪码算法
2.1 订房功能 a.流程图
b.伪码算法 void book_room() {
customer[i]=new Customer; //分配空间 int room_standard,day;
cout
cout
switch(room_standard) {//根据房间的标准运用case语句表示其一等,两等,三等,四等。 int n;
cout
{cout
2.2入住登记功能 a.流程图
b.伪码算法 void check_in()
{char name1[max2],id1[max3]; int ding_or_no,prepaid;
cout
for(int j=0;j
{if((strcmp(customer[j]->get_name(),name1)==0)&&(strcmp(customer[j]->get_ID(),id1)==0)) //查找该顾客的定房信息 {
int num=customer[j]->get_room_number(); //取得定房的房间号
cout
switch(num/100)
{//计算的值,运用case语句分别以计算的值来表示不同等级房间的房费,并修改入住状态。
Case=(num/100)
prepaid=customer[j]->get_day()*150; customer[j]->set_prepaid(prepaid);
cout
room[num%100-1].state=2; //修改房间状态为入住状态 break;}}
else //没定则先分配一个空间custoner[i],输入顾客的姓名,身份证号和要预订的天数。
switch(room_standard)
//根据房间的等级,用case=room_standard语句算出房费,顾客数加1 { int n;
case =room_standard(1.2.3.4)
prepaid=day*150;customer[i]->set_prepaid(prepaid);
for(n=0/20/40/60;n
if(room[n].state==0)
{cout
入
住
房
间
号
码
为
:
cout
请
收
房
费
customer[i]->set_room_number(room[n].number) break;}} i++;}}}//顾客数加1
2.3 退房结算功能 a.流程图
b.伪码算法 void check_out() {
char name2[max2],id2[max3];
int standard,j,room_number,day1,day2,day;
cout
{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; day=day1-day2;
day1=customer[j]->get_day();
switch(standard)
//根据(standard=room_number/100)输出顾客的房间号和费用,在看是否超出预订天数,定下顾客是多住还是提前走,确定其最后的费用。 {
case =standard
cout
cout
if(day>0) cout
if(day
break; cout
char account; //将该顾客的房间信息删除,清除空间 cin>>account; if(account=='1') {
for(int k=0;k
{if(room[k].number==customer[j]->get_room_number()) room[k].state=0;} i--; for(;j
{customer[j]=customer[j+1];}delete customer[i];} } } }
2.4 信息查询功能 a.流程图
b.伪码算法 void inquire() {char inquire_choice;
cout
{int j,k=0; cout
{if(room[j].state==0) { if(k%10==0) cout
房间增加}}
k=0; cout
if(room[j].state==1)
{ if(k%10==0) cout
k=0; cout
if(room[j].state==2)
{ if(k%10==0) cout
else if(inquire_choice=='2') {
cout
if(inquire_choice=='1'/'2')//看程序是按顾客姓名('1')还是身份证号('2')根据情况查询 {
char name3[10],id3[19];
cout
{ if(strcmp(customer[j]->get_name()/get_ID(),name3/id3)==0) { cout
cout
预
付
房
费
为
:
3.函数的调用关系图 包含的函数有:
Main() /*主函数*/
Initial_room() /*房间信息函数*/ Welcome() /*欢迎函数*/ Enter() /*进入系统函数*/ Book_room() /*定房函数*/
Check_in() /*入住客房函数*/ Check_out() /*退房函数*/
Inquire() /*信息查询函数*/
4.调试分析
a.调试中遇到的问题以及对问题的解决办法。
在存放房间信息时遇到了一些问题,房间包含的信息较多,在老师的帮助下,我采用了结构体数组struct Room roon[],解决了这个问题。顾客信息较复杂,我采用了类,并利用了构造函数,成员函数,析构函数(虚函数),来解决。
5.测试结果
5.1 进入系统和订房
5.2 入住
5.3 退房
5.4 查询
设 计 总 结
通过三星期的面向对象课程设计的学习,我运用C++语言设计,我从中受益匪浅,并且对C++语言程序设计这两门课程有了更深一步的认识。在实习中,我可以把这学期所学的理论知识和实践联系起来,在所要开发的项目中渐渐成长。虽然我对C++语言知识运用得还不是很熟练,但是相信我也在滴水穿石地成长起来。发现问题,提出问题,解决问题,使我从不足之处出发,寻找新的学习方向。
在实习中,我设计了一组对宾馆客房进行管理的系统,它基本满足了界面友好,易于操作的要求,因此更利于用户操作方便,运行简易,从而达到对宾馆客房更加有效系统的管理,并且速度更快内容更直接地达到用户所想要的效果。我一边实习一边探索,发现理论和实践要充分地结合,是需要扎实的基本功的,这就表明学好基础知识是理论付诸实践的前提。在实习中我学到了很多,希望在以后我们能充分利用实习的机会充实自己,并希望这样的机会能被更好更多地提供。
参考文献
1.江明德. 面向对象程序设计. 电子工业出版社,1993. 2.吕凤翥.C++语言程序设计.电子工业出版社,2001 3.阎龙. C程序员的C++指南. 北京航空航天大学出版社,1992 4.张永. 算法与数据结构. 国防工业出版社, 2008.8 5.严蔚敏,吴伟民. 数据结构. 清华大学出版社,2006.10
致 谢
经过这三周的实习,我们获得了许多在课堂上听课而不能获得的知识,首先我们要感谢学校给我们安排的这次的算法与数据结构程序设计实习,然后我要感谢朱红蕾老师对我热心的指导和帮助,是她教会了我们怎样解决问题的方法,这样我的软件设计才会更加顺利地进行,并且充分掌握了设计程序的方法。我们还要感谢许多同学的帮助,他们的帮助对于我们来说也是必不可少的。
总之,是有了他们的帮助,我们才能顺利地完成软件设计,在这里我们要向他们说一句:非常感谢,你们辛苦了!
附录:源代码 #include using namespace std; #include #define BUFSIZE 50 class cGuestroom;
void FindTheGuestroom(); //查找客房 void FindTheGuestroomById(); //按照编号找客房 void FindTheGuestroomByType(); //按照类型找客房 void FindTheGuestroomByPrice(); //按照价格找客房 void DeleteTheGuestroom(); //删除客房 void AddTheGuestroom(); //客房添加 void ModifyTheGuestroom(); //修改客房
template //template:模板,样板 class cNode //节点 {
public:
T data;
cNode *next; };
template
class tList {
public: //定义成员函数
tList();
void Create(); //创建链表 bool Empty() const; //判断链表是否为空 void Insert(const T e); //从尾部插入一个元素 cNode* GetcNode(int i); //返回第i个节点 bool Find(const T e); //在链表中查找某个值 ~tList(); //销毁链表,析构
cNode *head; };
template
tList::tList() { head=new cNode; head->next=NULL;
}
template void tList::Create() {
cNode *p; p=head; p->next=NULL;
}
template
bool tList::Empty() const { return (head->next==NULL);
}
//头节点 //类的成员函数的实现
void tList::Insert(const T e) //insert:插入 {
cNode *p,*q; p=head;
q=new cNode; q->data=e; while(p->next) { p=p->next;
} p->next=q; q->next=NULL;
}
template
cNode* tList::GetcNode(int i) {
int k=0; cNode *p; p=head; while(p && knext; ++k;
} return p;
}
//返回第i个节点
bool tList::Find(const T e) //在链表中查找某个值 {
bool flag=false;
cNode *p; p=head->next; while(p) { if(p->data==e) { flag=true; break;
} p=p->next;
} return flag;
}
template tList::~tList() { cNode *p; while(head) { p=head->next; delete head; head=p;
}
}
class cGuestroom { public:
memset(ID,0,BUFSIZE);memset(Type,0,BUFSIZE);memset(Book,0,BUFSIZE);
char ID[BUFSIZE]; //客房编号 char Type[BUFSIZE]; //客房类型 char Book[BUFSIZE]; //提前定房日期 char Price[BUFSIZE]; //客房价格 char Function[BUFSIZE]; //客房主要内容 int StayTime; //入住天数有效期 bool flag;//标志
cGuestroom()//构造函数初始化 {
memset(Function,0,BUFSIZE);
};
void ReadData(tList *tListGue)//读取数据库 {
char buf[BUFSIZE];
ifstream ifile(
//创建一个输出文件流对象
memset(Price,0,BUFSIZE);StayTime=0.0;flag=false;
} //memset:把char类型转换成ASCII值
cerr
}
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
}
void AddtheGuestroom(tList *tListGue)// 输入客房函数{ 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;
tListGue->Insert(tempGuestroom);
}
cout
system(
void SaveData(tList *tListGue) //保存数据 {
int i=0;
ofstream ofile(
cNode *p; p=tListGue->head->next; while(p) {
//从内存中读取cerr
数据,存到外盘
if(p->data.flag) {
ofile
ofiledata).ID
} p=p->next;
}
cout
}
void ModifytheGuestroom(tList *tListGue) { char id[BUFSIZE];
cout
cin>>id; 号
bool flag=false; cNode *p; p=tListGue->head->next; while(p) { if(strcmp(p->data.ID,id)==0 && p->data.flag) { flag=true; break;
} p=p->next;
}
//修改客房信息 //读取客房编
{//显示屏幕
cout
客房编号:
客房类
价
型:
定房日期:
cout
期:
}
cout
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
}
void DeletetheGuestroom(tList *tListGue) //删除客房信息 {
char id[BUFSIZE];
cout
cNode *p;
p=tListGue->head->next; while(p) { }
if(flag==false) cout
if(strcmp(p->data.ID,id)==0 && p->data.flag) { } p=p->next;
count++; flag=true; break;
\n
else //如果能删 {
count--;
cout
客房编号:
客房类
价
型:
定房日期:
cout
期:
}
void FindtheremainGuestroomById(tList *tListGue)//根据客房编号查找
{
char id[BUFSIZE];
cout
cin>>id; //读取 } cout
coutdata).flag=false;
cout
客房编号
bool flag=false;
cNode *p;
p=tListGue->head->next; while(p) {
不到
}
{ } p=p->next;
flag=true; break;
if(flag==false) cout
else
//如果找到了
{
cout
客房编号:
客房类
价
型:
定房日期:
cout
期:
}
void FindtheremainGuestroomByType(tList *tListGue)//根据客房类型查找客房
{
} cout
system(
cout
cin>>type; //读
取客房类型
bool flag=false;
cNode *p; 满了
else //如if(flag==false) cout
if(strcmp(p->data.Type,type)==0 && p->data.flag) { } p=p->next;
flag=true; break;
果找到了
{
cout
客房编号:
客房类
价
型:
定房日期:
cout
期:
} cout
}
system(
void FindtheremainGuestroomByPrice(tList *tListGue)//根据价格查找客房
{
char price[BUFSIZE];
cout
cin>>price; //
读取价格
bool flag=false;
cNode *p;
p=tListGue->head->next; while(p) {
if(strcmp(p->data.Price,price)==0 && p->data.flag) {
flag=true;
客房编号:
客房类
价
cout
型:
定房日期:
cout
期:
} p=p->next;
if(flag==false) cout
如果找不到
}
void FindtheremainGuestroom(tList *tListGue)//查找客房 {
system(
cout
cout
switch(choose) //根据cout
用户选择
查询
break;
{
case 1:FindtheremainGuestroomById(tListGue); //按客房编号
查询
case 2:FindtheremainGuestroomByType(tListGue); //按客房类型
break;
case 3:FindtheremainGuestroomByPrice(tListGue); //按价格查询
break;
case 4: system(
return; 出查询
default:break; }
}
return;
}
void RanktheremainGuestroom(tList *tListGue) 房
{cNode *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.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 *tListGue) //输出剩余房间函数
{
cNode *p; p=tListGue->head->next; while(p) {
{
cout
客房编号:
客房类
型:
cout
期:
} p=p->next;
}
cout
system(
} int main() {
tList tListGue; tListGue.Create(); ReadData(&tListGue); while(1) {
cout
\n\n
\n\n
\n\n
\n\n
cout
cout
cout
cout
cout
cout
\n\n
\n\n
的选择
信息
{
case 1:AddtheGuestroom(&tListGue); break; //输入客房
case 2:SaveData(&tListGue);break; //客房信息
cout
cout
cout
剩
余
客
房
信
息
的
输
出
int choose=0; cin>>choose;
switch (choose) //用户
信息保存
信息
case 4:DeletetheGuestroom(&tListGue); break; //删除客房信息
case 5:FindtheremainGuestroom(&tListGue); break; //查询剩余
case 3:ModifytheGuestroom(&tListGue); break; //修改客房
客房信息
case 6:RanktheremainGuestroom(&tListGue); break; //排序剩余
客房信息
房信息
case 7:OutputtheremainGuestroom(&tListGue); break; //输出剩余客
case 8:exit(0); //退出 default : break; } } return 0;
}