宾馆入住管理的设计与实现.docx
《宾馆入住管理的设计与实现.docx》由会员分享,可在线阅读,更多相关《宾馆入住管理的设计与实现.docx(16页珍藏版)》请在冰豆网上搜索。
![宾馆入住管理的设计与实现.docx](https://file1.bdocx.com/fileroot1/2023-4/19/3ee71b13-0194-4fdb-82d6-9b09860de94f/3ee71b13-0194-4fdb-82d6-9b09860de94f1.gif)
宾馆入住管理的设计与实现
学号:
课程设计
设计题目
宾馆入住管理的设计与实现
专业
计算机科学与技术
班级
姓名
指导教师
2010
年
7
月
9
日
计算机基础强化训练任务书
学生姓名:
专业班级:
指导教师:
工作单位:
计算机科学与技术学院
题目:
宾馆入住管理的设计与实现
初始条件:
理论:
学完计算机基础知识,掌握C++语言编程基础和VC开发平台的使用。
实践:
计算机科学系实验中心提供计算机及软件开发环境。
要求完成的主要任务:
(1)系统需求分析,得到系统的数据需求和功能需求,分析结果用表格记录。
(2)系统设计,包括内存数据结构设计、数据文件设计、代码设计、输入/输出设计、用户界面设计、处理过程设计。
要求内存数据用链表组织,数据文件用文本文件,用户界面用字符界面。
至少实现数据记录的增加、修改、删除、查询(查询应能按不同数据项进行)。
(2)编制好程序后,设计若干测试用例,上机测试所设计的程序。
(4)设计报告按格式要求书写。
设计报告正文的内容应包括:
1)系统描述包括问题说明、数据需求和功能需求。
2)系统设计包括内存数据结构设计、数据文件设计、代码设计、输入/输出设计、用户界面设计、处理过程设计。
3)系统测试包括测试用例的描述、测试方法和测试结果。
4)设计的特点、不足、收获和体会。
时间安排:
1、第19周(7月5日至7月9日)完成。
2、7月9日8:
00到计算机学院实验中心(三楼)检查程序、交课程设计报告、源程序(CD盘)。
指导教师签名:
2010年月日
系主任(或责任教师)签名:
2010年月日
1.系统描述
1.1问题说明
此次的课程设计题目是宾馆入住管理的设计与实现,要求用链表作为数据的存储结构,所谓宾馆房间信息的查询,添加和修改都是对链表中结点的查看、添加和修改的操作。
程序编程结束后要求有向导性的界面,能完成关于宾馆入住管理的相关的操作。
问题描述:
(1)文件处理。
所用入住房间的信息都是通过一个文件保存的,因此每次在程序执行时都要先从文件中读取出入住房间的信息,同时也要在每次登记入住信息后,再将这些信息保存至文件中,从而实现对于文件的读写操作。
(2)用户可以根据程序在运行窗口所显示的功能提示菜单进行选择,从而实现宾馆客户入住信息的登记(即添加),查询和修改等操作,对于一些特殊的情况也应该能够进行特殊的处理,系统能够给出相关的提示和说明。
1.2数据需求
int型
房间号
char型
客户姓名
char型
身份证号
bool型
客房是否为空
int型
住宿天数
1.3功能需求
操作
相关功能说明
查询
显示当前客房信息:
包括单人房,双人房,三人房已入
住用户信息由文件读入后添加到链表中,然后输出显示。
空房查询:
输出无人入住的客房号,并说明并有多少空房。
添加
登记入住:
客户说明住宿人数与天数,选择住宿方案,然
后登记客户信息
预定客房:
客户说明住宿人数与天数,选择预定方案
存储
保存至文件:
将客户登记好的信息保存至文件中
读取
由文件将已经入住客户的房间的信息去取并保存至链表中
修改
修改客户信息:
根据客户姓名,进一步修改客户相关信息
2.系统设计
2.1内存数据结构设计
#defineroom_kinds4//房间种类
#defineroom_num30//每种房间数目
structroom{
intnum;//房间号
charname[20];//用户姓名
charid[20];//用户身份证号
boolisempty;//客房是否为空
intusetime;//住宿天数
room*next;
};
structhotel{
intnum[room_kinds];//存不同种类房间的用户数
intbook[room_kinds];//存不同种类房间的预定数
room*header[room_kinds];//存不同种类房间的头指针
};
2.2数据文件设计
使用文本文件”hotel.txt”存储已入住房间的相关信息。
程序在每次执行中可以选择“保存至文件”将本次执行过程中的入住用户信息保存至该文本文件中,下次执行程序时,程序自动从文件中读取相关信息,并保存在初始化的链表中。
主要利用到如下语句:
ifstreamfin("hotel.txt");从文件hotel.txt中读取数据
fin.get(c);//可以从文件中读取单个的字符
fin.eof();//文件结束的标志
fin>>kinds;fin>>temp;//从文件中读取整个数据项
ofstreamhotel(filename);//将数据写到文件名为filename的文件中
hotel<num<<"\t"<name<<"\t"<id<<"\t"<usetime<hotel.close();//关闭文件
2.3代码设计
voidinit_rooms()
初始条件:
文件hotel.txt存在。
操作结果:
各种房间都建立各自的链表,并已初始化。
若文件hotel.txt中有入住房间的信息,则从文件中读取信息,并存入链表之中。
charfunction_print()
初始条件:
链表的初始化操作已顺利进行。
操作结果:
输出本程序的各种功能,给以用户操作提示。
并将用户的选择返回给主函数。
voidprint_livein(inti)
初始条件:
客户选择了入住方案,并入住房间。
操作结果:
输出已入住客户的信息,以及入住客户的总数。
voidprint_book(inti)
初始条件:
客户选择了预定方案,并预定房间。
操作结果:
输出被预订房间的信息,以及已预定房间的总数。
voidprint_cusinf()
初始条件:
有入住额客户。
操作结果:
输出各种房间的入住信息。
intprint_chose(intregnum,intregday)
初始条件:
输入入住人数与住宿天数。
操作结果:
根据入住人数提供房间选择方案,并显示各种方案的花费,以供客户进行选择。
voidreg_livein(intserial,intregday)
voidRegist()
初始条件:
客户选择了某一种入住方案。
操作结果:
根据客户的选择方案,登记客户信息,并将其记录在链表中。
voidbook_room()
初始条件:
客户选择了某一种预定方案。
操作结果:
根据客户的选择方案,登记客户信息,并将其记录在链表中。
voidQuery(inti)
voidQueryempty()
初始条件:
选择所要查询的客房种类。
操作结果:
输出显示该种房间剩余的房间号。
voidSave(charfilename[])
初始条件:
建立一个文本文件。
操作结果:
将所有入住房间的信息记录到文本文件”hotel.txt”中。
voidmodify()
初始条件:
需修改信息的客户名称,并且存在该客户入住的房间信息。
操作结果:
对于三个存储房间信息的链表进行查找,若存在,则进行修改选择并修改,若不存在,则退出修改。
2.4其他设计
2.4.1输入/输出设计
程序每次执行时,首先从文本文件hotel.txt中利用ifstreamfin(“hotel.txt”)和类如fin>>kinds的语句提取数据生成链表,若文件hotel.txt中无房间信息,则输出“文件中无内容可以导入”,然后输出操作提示。
输入命令提示中的序号便可以选择相应的命令,增加记录时逐项提示输入入住人数和入住天数,然后提示各种可行方案供旅客选择,根据提示,选择相应的序号后,再通过登记,就可以将信息添加到链表中。
查询分为查询空房和查询已住用户信息,在主菜单中按照命令提示进行选择。
如果查询空房,就将未入住旅客的各种类型客房显示在命令中,用户按照提示命令进行选择,就可以将空房的房间号码输出;查询已住客房的信息时,根据提示操作可以查看三种不同类型房间的入住信息。
保存至文件即将链表中的信息写到文件中。
选择主菜单中的退出则退出程序。
2.4.2用户界面设计
(1)菜单界面
cout<<"\t\t宾馆客房管理(请按数字选择)"<cout<<"\t*****************************************"<cout<<"\t\t\t1.显示当前客房信息"<cout<<"\t\t\t2.登记入住"<cout<<"\t\t\t3.预定客房"<cout<<"\t\t\t4.空房查询"<cout<<"\t\t\t5.保存至文件"<cout<<"\t\t\t6.修改客户信息"<cout<<"\t\t\t7.退出程序"<cout<<"\t*****************************************"<(2)显示当前客房信息
cout<<"************************************************"<cout<<"\t\t1.单人房"<cout<<"\t\t2.双人房"<cout<<"\t\t3.三人房"<cout<<"\t\t4.退出"<cout<<"************************************************"<cout<<"请选择"<(3)修改客户信息
cout<<"\t------------请选择要修改的内容-------------"<cout<<"\t\t1.身份证号"<cout<<"\t\t2.住宿天数"<cout<<"\t\t3.退出修改"<cout<<"\t-------------------------------------------"<2.4.3处理过程设计
首先,程序开始执行先将文本文件hotel.txt中的数据读取并存储在链表中,然后按照功能操作提示进行选择,客户经过登记入住后便可以的到一个新的链表,最终可以选择“保存至文件”进行文件保存操作。
本程序可以实现的功能包括:
查询,添加,修改。
现已修改操作为例讲解一下处理过程设计。
修改操作则是通过客户输入所要修改信息的客户名称来进行查找的,首先利用for()循环语句确定链表的信息中是否含有该用户,若存在该用户,则变换命令提示界面,客户根据提示再次进行所要修改的数据的选择,根据用户输入的选择是哪一项,利用switch()进行分别的修改操作,switch()语句下的每个case都有具体的输入数据提示和输入语句。
若选择退出修改,则会跳转回原先的菜单界面供用户进行其他操作。
整体的用户界面是通过do..while()语句使得菜单界面循环显示,每次执行完一个命令后再次显示出菜单界面,直到选择退出命令,循环终止,程序停止执行。
3.系统测试
3.1测试用例的描述
(1)当文件中含有有关入住房间信息的信息时,对于程序所要实现的各项功能的测试(具体数据见下一部分3.2测试方法中);
(2)当文件中没有任何数据时,程序所能实现的功能与
(1)中一致,因此不再进行测试验证,
仅仅对文件为空时,程序开始运行时的情况进行说明。
3.2测试方法
(1)当文件中的初始数据如下图所示时
下面四张图是测试程序的第一项功能:
1.显示当前客户信息
如上图所示,程序顺利将文件中的信息导入并且正确的显示各类房间的入住信息。
下面两图是对2.登记入住与5.保存至文件两项功能的测试
如上即为最终执行“保存至文件”命令后文件中显示的结果,验证了操作顺利执行。
如下图是对3.预定客房功能的测试
图中所出现的预定房间号为2,是由于号码为1的房间已经入住(由文件中导入的信息)
如下两图是对4.空房查询功能的测试
上面两图中左图是说明选择查询双人房中的空房;右图则是显示双人房中空房的号码,其中的1、2、3号房是因为已经入住(由文件中导入的信息),因此没有显示。
下面的四个图表是对6.修改客户信息功能的测试
上面两个表分别为执行修改操作前后的文件中数据,可以看到,修改前客户王五的住宿天数为3,修改后客户王五的住宿天数为6。
上面两个图显示了运行窗口的提示操作和修改的过程。
下图是对最后一项7.退出程序功能的测试
如上所示,当输入为7时,程序正常的退出,停止执行。
(2)当文件起始没有任何数据时,程序开始运行时可以给出相关说明如下所示。
窗口中第一句给出提示语“文件中没有内容可以导入!
”
此种情况下功能的测试方法与文件中有数据时是基本一致的。
3.3测试结果
具体的测试结果在上一部分3.2测试方法中已给出,可返回查看。
4.设计小结及体会
本次课程设计是宾馆入住管理的设计和实现,在编写的程序中,利用链表存储从文件中读取的数据,并且实现了一些添加,查询,修改和保存的操作。
选择命令的是switch()语句,通过操作提示选择所要进行的操作,刚开始的时候对于程序所要实现的功能和操作不是很熟悉,后来通过查阅资料,了解到更多有关的信息,比如房间的类型可以有很多种,进行登记的也可以是进行预订房间的,查询可以分为查询入住房间的信息和空房信息。
另外,根据课程设计的实验要求,还要能够将入住登记过程中的客户信息及房间信息存储到文件中,还应该能够实现对客户信息的简单修改,因此,所编写的程序应该实现添加,查询,保存,修改等操作。
至于登记的信息数据项,关于入住客户的信息只需要登记姓名和身份证号即可;关于房间的信息数据项应该是比较多的,基本包括房间种类,房间号,是否为空,住宿时间等。
在定义结构体的时候,分别建立两个结构体为hotel和room。
旅馆的信息包括各种房间的已入住的数目和已预订的数目,以及三类房间的链表的头指针。
程序运行时直接将文件中的信息读入,然后再通过入住登记向链表中加入信息,最后再将链表中的信息保存到文件中。
由于在以前的编程过程中,对于有关文件的操作使用很少,因此在设计过程中耗费了较多的功夫才使得文件的读取得以实现,通过实验,掌握了一些基本的文件操作,了解了文件操作方面的一些函数,基本完成了实验要求。
但是本次实验依然存在着不足之处,比如说整个程序实验代码略显累赘,看起来比较繁,虽然实现了文件的读取操作,但是在保存文件的时候,仅仅把入住的房间的信息保存在文本文件中,而被预订的房间的信息则没有被保存,因此在从文件读取的信息只包括了入住房间的信息,有待进一步的改进。
另外还有一个不足之处,是对客户信息进行修改,没有实现对于客户锁住房间的修改,即可以修改客户住房的种类和房间号。
通过本次课程设计,熟悉了一些对于文件的操作,巩固了以前所学过的编程知识和思想,感觉这次利用所学到的知识做了一件比较有意义的事情,编写出了一个较具有使用价值的小软件。
5.参考文献
[1]《c++程序设计教程》,闵联营,何克右,出版社:
武汉理工大学出版社,时间:
2005年7月
[2]《数据结构(C语言版)》,严蔚敏,吴伟民编著,出版社:
清华大学出版社,出版或修订时间:
1997年4月
[3]《数据结构习题集(C语言版)》,严蔚敏,吴伟民,米宁编著,清华大学出版社,出版或修订时间:
1999年2月
本科生课程设计成绩评定表
班级:
姓名:
学号:
序号
评分项目
满分
实得分
1
学习态度认真、遵守纪律
20
2
报告分析合理性
30
3
报告观点正确性,专业认识深刻程度
30
4
设计报告的规范性
20
总得分/等级
评语:
注:
最终成绩以五级分制记。
优(90-100分)、良(80-89分)、中(70-79分)、
及格(60-69分)、60分以下为不及格
指导教师签名:
2010年7月 日