宾馆信息管理系统课程设计报告大一.docx
- 文档编号:10289167
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:22
- 大小:64.43KB
宾馆信息管理系统课程设计报告大一.docx
《宾馆信息管理系统课程设计报告大一.docx》由会员分享,可在线阅读,更多相关《宾馆信息管理系统课程设计报告大一.docx(22页珍藏版)》请在冰豆网上搜索。
宾馆信息管理系统课程设计报告大一
哈尔滨理工大学
软件学院
课程设计报告
课程设计C++课程设计
题目宾馆信息管理系统
班级
学生
学号
指导教师
1.管理系统的功能说明
a)密码登录验证访问。
b)浏览宾馆内部各房间信息。
c)添加新房间(支持重复添加)。
d)修改已存在的房间信息(支持重复修改)。
e)查询房间数据(按房间号、容量)(支持重复查询)。
f)添加自定义对结果排序显示功能。
g)退出系统及一些基本的用户友好的程序设计功能(各种错误处理)。
2.存储数据的描述
在类定义中有以下成员:
实现上述功能的成员函数接口
public:
Hotel();
virtual~Hotel();
Hotel(intn,intv,intl,intp,intu):
RoomNum(n),Capacity(v),Level(l),Price(p),used(u){}
voidLook_through();
voidReset_room(intx);
voidShow_room();
friendvoidmenu();
friendvoidquit();
friendvoidInit_room();
friendHotelAdd_room();
friendvoidQuery(intn,inttotal);
私有数据表示:
private:
intRoomNum;房间号
intCapacity;房间容量
charLevel;房间等级
intPrice;房间价格
intused;是否预定
staticinttotal;静态常量用来跟踪总房间数目信息
3.概要设计说明书
在该宾馆信息管理系统的设计中,根据功能要求抽象出类成员函数,并采用对象数组存储房间,用一个Hotel类封装起来。
通过友元函数访问私有数据从而实现信息管理系统的功能。
在运行过程中
stringpassword(stringco)实现了加密函数实现密码登陆。
voidHotel:
:
Look_through()支持单个房间浏览,HotelAdd_room()实现了新房间的重复添加功能,voidHotel:
:
Reset_room(intx)实现了房间信息连续重置功能,voidQuery(intn,inttotal)函数实现了支持重复查询房间并允许自定义房间号和价格排序显示的功能,voidquit()退出系统登录功能。
并在每一步都给出了较为有好的用户提示,运行中整体逻辑清晰,并实现了对错误输入的重新处理。
用户只需按着运行提示即可。
4.源程序
Main.cpp
#include
#include
#include
#include
#include"Hotel.h"
#include
usingnamespacestd;
staticinttotal=13;
intmain()
{
cout<<"\nWelcometoinformationmanagementsystem!
\n";
cout<<"************************\n\nlogin:
____\b\b\b\b";
stringstr1,str2;
while((cin>>str1).get())
{
cout<<"Password:
";
getline(cin,str2);
if(str1=="cbam"&&str2==password("cbam"))
{
break;
}
else
cout<<"Passworderror!
!
pleaseloginagain\nlogin:
";
}
cout<<"\nLoginsuccess!
\n\n…………………………自动转入下页……";
Sleep(3000);
system("cls");
menu();
while
(1)
{
intselect;
cin>>select;
if(select==9)
{
menu();
cin>>select;
}
switch(select)
{
case0:
quit();
return0;
case1:
cout<<"房间号容量等级价格是否预定\n";
for(inti=0;i hotel[i].Look_through(); cout<<"返回主菜单请单击\"9\"\n"; break; case2: hotel[total++]=Add_room(); break; case3: cout<<"要修改的房间号: __\b"; intnum; cin>>num; hotel[num-1].Reset_room(num); break; case4: cout<<"输入您查询房间的方式(房间号\"1\"or容量\"2\"\n"; intway; cin>>way; Query(way,total); break; default: cout<<"请重新在菜单中选择\n"; break; } } return0; } Hotel.h #ifndefHOTEL_H #defineHOTEL_H #include #include usingnamespacestd; //存储临时对象以便操作 structHOTEL_ { intnum,vo,p; charl; intu; HOTEL_(intn=0,intv=0,intpp=0,charll='a',intuu=0)//构造函数 { num=n; vo=v; p=pp; l=ll; u=uu; }//重载<运算符 boolfriendoperator<(HOTEL_a,HOTEL_b) { returna.p } }; //一个宾馆房间类 classHotel { public: Hotel(); virtual~Hotel(); Hotel(intn,intv,intl,intp,intu): RoomNum(n),Capacity(v),Level(l),Price(p),used(u){} voidLook_through(); voidReset_room(intx); voidShow_room(); friendvoidmenu(); friendvoidquit(); friendvoidInit_room(); friendHotelAdd_room(); friendvoidQuery(intn,inttotal); private: intRoomNum; intCapacity; charLevel; intPrice; intused; staticinttotal; }; #endif//HOTEL_H Hotel: : Hotel() { //ctor } Hotel: : ~Hotel() { //dtor } //主菜单 voidmenu() { cout<<"<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"< cout<<"\n---欢迎访问宾馆信息内部管理系统---\n"; cout<<"\n\n-----1-访问房间信息---\n"; cout<<"\n-----2-增加新房间-----\n"; cout<<"\n-----3-修改房间数据---\n"; cout<<"\n-----4-查询房间数据---\n"; cout<<"\n-----0-退出此系统-----\n"; cout<<"\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n"; } //加密函数,生成密码 stringpassword(stringco) { for(inti=0;i { if(co[i]! ='') co[i]=25+'a'*2-co[i]; } reverse(co.begin(),co.end()); returnco; } voidHotel: : Look_through() { //访问某房间信息 cout<<""< <<""< } //实现添加功能 HotelAdd_room() { cout<<"输入新房间信息: \n\n"; intn,v,p,u; charl; cout<<"房间号: __\b\b"; cin>>n; cout<<"房间容量: __\b\b"; cin>>v; cout<<"房间等级: __\b"; cin>>l; cout<<"房间价格: __\b\b"; cin>>p; cout<<"设定预订情况: __\b\b"; cin>>u; Hotelx; x=Hotel(n,v,l,p,u); cout<<"\n新房间信息已添加完毕~! 返回菜单请按\"9\""< returnx; } //实现修改功能 voidHotel: : Reset_room(intx) { cout<<"请输入需要修改的房间信息: \n"; cout<<"----1-房间容量----"< cout<<"----2-房间价格----\n" <<"----3-房间等级----\n" <<"----4-是否已定----\n"; inta; while(cin>>a)//循环支持重复修改 { switch(a) { case1: intcnt; cout<<"容量修改为: __\b"; cin>>cnt; Capacity=cnt; break; case2: intprice; cout<<"价格修改为: __\b"; cin>>price; Price=price; break; case3: charlevel; cout<<"房间等级修改为: __\b"; cin>>level; level=level; break; case4: intbooked; cout<<"预定情况修改为: __\b"; cin>>booked; used=booked; break; } cout<<"\n此房间信息修改完毕,继续修改请按\"1\",返回菜单请按\"9\""< cin>>a; if(a==9)//返回菜单直接return; { menu(); return; } cout<<"请输入需要修改的房间信息: __\b\b"; } } Hotelhotel[53]= { Hotel(01,2,'a',300,0), Hotel(02,4,'a',400,0), Hotel(03,3,'b',100,0), Hotel(04,5,'b',200,0), Hotel(05,4,'c',200,0), Hotel(06,2,'c',240,0), Hotel(07,3,'d',130,0), Hotel(8,1,'d',110,0), Hotel(9,5,'d',130,0), Hotel(10,4,'d',430,0), Hotel(11,4,'d',230,0), Hotel(12,3,'d',330,0), Hotel(13,4,'d',730,0) }; //实现查询功能 voidQuery(intn,inttotal) { //按房间号查找 if(n==1) { while (1)//实现重复查找 { intflag=1;//标记是否查找成功 cout<<"\n您要查找的房间号: _\b"; introomNumber; cin>>roomNumber; for(inti=0;i if(hotel[i].RoomNum==roomNumber) { flag=0; cout<<"查找成功! \n\n以下房间满足您的查询要求: \n"< cout<<"房间号容量等级价格是否预定\n"; hotel[i].Show_room(); cout<<"\n是否继续查询房间(Y|N)? _\b"; charch; while(cin>>ch)//错误处理支持重复选择直到选择合理 { while(cin.get()! ='\n')//吃掉多余缓冲区字符 continue; if(ch=='Y') break; elseif(ch=='N') { menu(); return; } else { cout<<"\nerror! Badinput;inputprocesscontinue.\n\n是否继续查询房间(Y|N)? _\b"; } } } if(flag)//说明查找不存在满足情况 { cout<<"\n您所要查找的房间不存在! 请重新查找按1或返回菜单双击\"9\"\n"; intchoose; cin>>choose; if(choose==9) return; else continue; } } } elseif(n==2)//按照房间容量查找 { loop: intcapacity; cout<<"\n请输入房间容量: __\b\b"; cin>>capacity; intflag=1;//标记成功与否 vector for(inti=0;i { if(hotel[i].Capacity==capacity) { if(flag)//查找成功 { flag=0; cout<<"\n(默认房间号递增排序)\n以下房间满足您的查询要求: "< cout<<"房间号容量等级价格是否预定\n"; } //构造对象 HOTEL_x=HOTEL_(hotel[i].RoomNum,hotel[i].Capacity,hotel[i].Price,hotel[i].Level,hotel[i].used); dict.push_back(x); hotel[i].Show_room();//默认房间号升序 } } if(flag)//查找不成功 { cout<<"您所要查找的房间不存在! 请重新查找按1或返回菜单双击9"< intselect; cin>>select;//重新选择查询 if(select==1) gotoloop; else return; } else//查找成功情况下选择一系列操作 { cout<<"\n\n按-\"1\"以价格递增排序,继续查询房间(Y|N)? __\b\b,按-\"9\"返回主菜单\n"; charchoose; while(cin>>choose) { while(cin.get()! ='\n') continue; if(choose=='9') { menu(); return; } if(choose=='Y') gotoloop; elseif(choose=='N') { menu(); return; } elseif(choose=='1') { cout<<"\n以下房间满足您的查询要求: \n"; sort(dict.begin(),dict.end());//对结果按照价格升序 for(vector : iteratorit=dict.begin();it! =dict.end();it++) { cout<<""<<(*it).num<<""<<(*it).vo<<"" <<(*it).l<<""<<(*it).p<<""<<(*it).u< } cout<<"是否继续查询房间(Y|N)? __\b";//此时同样支持继续查询功能 while(cin>>choose) { while(cin.get()! ='\n')//错误处理 continue; if(choose=='Y') gotoloop; elseif(choose=='N') { menu(); return; } else cout<<"请重新选择(Y|N)__\b"; } } else { //对于以上情况都没有正确选择同样支持重新选择 cout<<"\n错误! 按-\"1\"以价格递增排序,继续查询房间(Y|N)? __\b\b,按-\"9\"返回主菜单\n"; } } } } else//对于查询方式选择有误亦支持重新查询 { cout<<"查询方式有误! 重新输入查询方式! 按\"1\"或返回主菜单双击\"9\""< intselect; cin>>select; if(select! =1) return; cout<<"输入您查询房间的方式(房间号\"1\"or容量\"2\")\n"; intway; cin>>way; Query(way,total);//重新调用函数 } cout<<"\n返回主菜单请单击\"9\"\n"; } voidHotel: : Show_room() { //显示房间信息 cout<<""< <<""< } voidquit() { //退出函数 cout<<"对此系统信息的更新完毕! 欢迎使用~\n"; return; } 5.测试分析 进入宾馆管理系统前,首先就要通过密码登录验证,支持重新验证。 验证成功后进入欢迎界面(主菜单)用户按照需求即可进行选择服务类别,并在每次使用后询问是否继续并每次给出返回主菜单的提示,在测试过程中确实出现了多逻辑bug,但由于面向对象的特性,修改起来十分方便高效,已基本可以满足客户。 用户完全可以按照傻瓜界面提示进行。 文本末附截图。 6.总结报告 《C++程序设计》是计算机专业一门重要的专业基础课。 此次课程设计以C++程序设计语言为基础,通过完成此次课程设计题目的构思、编写、调试、运行工作,进一步掌握面向过程和面向对象程序设计的基本方法和编程技巧。 巩固了所学的理论知识,并进一步使理论与实际相结合,从而提高了自我分析解决问题的能力。 并进一步感受到“程序员的天敌是无尽的需求”。 设计中遇到的错误: ⏹在main函数中定义的对象数组,一开始用引用传递对象数组不合法。 后来直接把对象数组定义到.h文件不用传参数了。 后来可能可以用对象指针传递。 ⏹密码登录的时候,一开始对于用户输入用cin读取这样便不会处理有空格的输入。 进而导致密码错误。 后改用getline()函数,实现。 ⏹switch语句平时acm很少用,所以有一个case语句少了个break;导致连续执行。 ⏹对象数组下标从0开始修改房间信息出现错误,后解决。 ⏹在完成查询功能时思维复杂度提升,有时出现难以维护。 ⏹用于用户用好的提示语不断更新等……一系列小的bug。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 宾馆 信息管理 系统 课程设计 报告 大一