酒店客房管理系统设计_第1页
酒店客房管理系统设计_第2页
酒店客房管理系统设计_第3页
酒店客房管理系统设计_第4页
酒店客房管理系统设计_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

青岛理工大学数据库课程设计报告院(系):计算机工程学院专业:软件工程学院学生姓名:__任伟伟班级:软件081学号:题目:酒店客房管理系统设计___起迄日期:___2023.1.3—2023.1.14_设计地点:青岛理工大学实验室2#402指导教师:张艳完毕日期:2023年1月14日目录:一、前言 31.1课题背景 31.2开发工具 31.2.1SQLServer2023数据库 31.2.2ADO数据库访问技术 3ADO对象模型 4ADO编程 4二、需求分析 52.1任务概述 52.1.1系统目的 52.1.2用户特点 52.2系统的功能需求 52.2.1系统需求 52.2.2功能需求 52.3系统的性能需求 62.4系统的数据需求 6三、系统功能总体设计 73.1系统功能模块划分 73.2系统的功能模块图 8四、系统数据库设计 84.1数据库概念设计 84.2数据库逻辑设计 114.3数据库设计优化 124.4建立索引 124.5数据存放 124.6系统配置 12五、数据库实行和维护 135.1创建数据库 135.2数据备份和恢复 16六、系统具体设计 186.1数据库的连接 186.2登录设计 196.3修改密码 206.4添加新用户 216.5客房标准 216.6客房信息 226.7客房信息查询 246.8未定住客房信息查询 246.9订房 256.10订房信息查询 266.11结算 276.12结算信息查询 28七、测试过程: 297.1系统测试 297.1.1测试方法 297.1.2基本功能测试 297.2实际完毕的情况 387.3系统测试过程发现的问题 38八、设计总结 398.1系统可以扩充的功能及系统展望 398.2总结语 40九、参考文献 40十、附录 40一、前言1.1课题背景当前,随着信息的不断飞速发展,信息技术已逐渐成为各种技术的基础,信息也成为公司具有竞争力的核心要素。公司的生存和发展依靠对的的决策,而决策的基础就是信息,所以公司竞争力的高低完全取决于公司对信息的获取和解决能力。公司要准确、快速的获取和解决信息,公司信息化是必然的选择。公司必须加快内部信息交流,改善公司业务流程和管理模式,提高运营效率,减少成本,提高竞争力,信息化建设是公司适应社会发展的规定。公司管理信息系统即公司MIS是公司信息化的重要内容。随着我国改革开放的不断推动,人民生活水平日益提高,旅游经济蓬勃发展,这一切都带动了酒店行业的发展。再加上入境旅游的人也越来越多,入境从事商务活动的外宾也越来越多。传统的手工已不适应现代化酒店管理的需要。及时、准确、全方位的网络化信息管理成为必需。酒店是一个服务至上的行业,从客人的预定开始,到入住登记直至最后退房结账,每一环节都要保持一致性的服务水准,错失一步,会令其辛劳经营的形象功亏一篑。要成为一间成功的酒店,就必须作到宾至如归,面对酒店业内剧烈的竞争形势,各酒店均在努力拓展其服务领域的广度和深度。虽然计算机并不是酒店走向成功的关键元素,但它可以帮助那些真正影响成败的要素发挥更大的效用。因此,采用全新的计算机网络和管理系统,将成为提高酒店的管理效率,改善服务水准的重要手段之一。1.2开发工具本系统运用VisualC++6.0编译环境,采用MFC可视化编程,以MicrosoftSQLServer2023作为后台数据库,选用ADO访问数据库来实现各种功能计算机及操作系统:WindowsXP或Windows7;开发工具:VC++6.0运营环境:装有SQLSERVER2023的系统语言:VC++与SQL查询语言1.2.1SQLServer2023数据库SQLServer2023是微软公司动用上千人的研发力量,花费五年时间打造出来的产品,在公司及数据库产品中具有里程碑的意义。SQLServer2023是一个关系数据库管理系统,是一个全面的数据库平台,其数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能。SQLServer2023结合了分析、报表、集成和告知功能,引进了一套集成的管理工具和管理应用编程接口,以提供易用性、可管理性及对大型SQLServer配置的支持。其新的查询类型和在交易过程中使用错误解决的功能,为开发人员在SQLServer查询开发方面提供了更高的灵活性和控制力。SQLServer可以适合大容量数据的应用,在功能上和管理上都比MicrosoftAccess要强的多。在解决海量数据的效率,后台开发的灵活性,可扩展等方面强大。在SQLServer2023中还可以使用存储过程,在服务器执行操作时,减少网络通讯,提高了执行效率,并且保证了数据库的安全。1.2.2ADO数据库访问技术ADO是微软最新的对象层次上的数据操作技术,它为操作OLEDB数据源提供了一套高层次自动化接口。尽管OLEDB已经是一个强大的数据操作接口,然而大多数数据库应用开发者并不需要OLEDB提供的操作数据的底层控制接口。大多数开发者对于管理内存资源、手工聚合组件以及其它的底层操作接口并不是很感爱好。此外,开发者经常使用高层的、不支持指针和C++函数调用规范的开发语言,OLEDB为这种需要提供了方便。从功能上来说,ADO也是一种OLEDB客户程序,但是它不依赖于特定的OLEDB服务器,相反,它支持所有的OLEDB服务提供者。通过这些OLEDB服务提供者,ADO支持客户/服务器模式和基于Web的数据库应用。ADO支持客户/服务器模式和基于Web的数据操作,ADO特别支持通过客户/服务器模式或者基于Web模式访问微软的SQLServer数据库服务器。ADO对象模型ADO对象模型涉及以下关键对象:Connection对象在数据库应用里操作数据源都必须通过该对象,这是数据互换的环境。Connection对象代表了同数据源的一个会话,在客户/服务器模型里,这个会话相称于同服务器的一次网络连接。不同的数据提供者提供的该对象的集合、方法和属性不同。借助于Connection对象的集合、方法和属性,可以使用Open和Close方法建立和释放一个数据源连接。使用Execute方法可以执行一个数据操作命令,使用BeginTrans、CommitTrans和RollbackTrans方法可以启动、提交和回滚一个解决事务。通过操作theErrors集合可以获取和解决错误信息,操作CommandTimeout属性可以设立连接的溢出时间,操作ConnectionString属性可以设立连接的字符串,操作Mode属性可以设立连接的模式,操作Provider属性可以指定OLEDB提供者。Command对象Command对象是一个对数据源执行命令的定义,使用该对象可以查询数据库并返回一个Recordset对象,可以执行一个批量的数据操作,可以操作数据库的结构。不同的数据提供者提供的该对象的集合、方法和属性不同。借助于Command对象的集合、方法和属性,可以使用Parameters集合制定命令的参数,可以使用Execute方法执行一个查询并将查询结果返回到一个Recordset对象里,操作CommandText属性可认为该对象指定一个命令的文本,操作CommandType属性可以指定命令的类型,操作Prepared可以得知数据提供者是否准备好命令的执行,操作CommandTimeout属性可以设立命令执行的溢出时间。Parameter对象Parameter对象在Command对象中用于指定参数化查询或者存储过程的参数。大多数数据提供者支持参数化命令,这些命令往往是已经定义好了的,只是在执行过程中调整参数的内容。借助于Parameter对象的集合、方法和属性,可以通过设立Name属性指定参数的名称,通过设立Value属性可以指定参数的值,通过设立Attributes和Direction、Precision、NumericScale、Size与Type属性可以指定参数的信息,通过执行AppendChunk方法可以将数据传递到参数里。Recordset对象假如执行的命令是一个查询并返回存放在表中的结果集,这些结果集将被保存在本地的存储区里,Recordset对象是执行这种存储的ADO对象。通过Recordset对象可以操纵来自数据提供者的数据,涉及修改和更新行、插入和删除行。ADO编程通常情况下,一个基于ADO的数据库应用使用如下过程操作数据源里的数据:(1)创建一个Connection对象。定义用于连接的字符串信息,涉及数据源名称、用户ID、口令、连接超时、缺省数据库以及光标的位置。一个Connection对象代表了同数据源的一次会话。可以通过Connection对象控制事务,即执行BeginTrans、CommitTrans和RollbackTrans方法。(2)打开数据源,建立同数据源的连接。(3)执行一个SQL命令。一旦连接成功,就可以运营查询了。可以以异步方式运营查询,也可以异步地解决查询结果,ADO会告知提供者后台提供数据。这样可以让应用程序继续解决其它事情而不必等待。(4)使用结果集。完毕了查询以后,结果集就可以被应用程序使用了。在不同的光标类型下,可以在客户端或者服务器端浏览和修改行数据。(5)终止连接。当完毕了所有数据操作后,可以销毁这个同数据源的连接。二、需求分析2.1任务概述2.1.1系统目的本系统需要满足以下几个系统设计目的。(1)实用性原则:真正为用户的实际工作服务,按照酒店客房管理工作的实际流程,设计出实用的酒店客房管理系统。(2)可靠性原则:必须为酒店客房提供信息安全的服务,以保证酒店信息的不被泄露。(3)和谐性原则:本酒店客房管理系统面向的用户是酒店内工作人员,所以系统操作上规定简朴、方便、快捷,便于用户使用。(4)可扩展性原则:采用开发的标准和接口,便于系统向更大的规模和功能扩展。2.1.2用户特点本系统面向酒店内工作人员为顾客订房和退房及其查询服务和设立酒店客房信息。在旅游高峰期,会有大量的顾客订房数据输入及查询,在退房时也会有大量的退房数据输入及查询,系统的负荷较大;在消费淡季,数据输入和查询也会相对较少。2.2系统的功能需求2.2.1系统需求根据酒店客房管理系统的理念,此酒店客房管理系统必须满足以下需求:(1)具有设立酒店客房类型和房间信息的功能(2)能快速、准确地了解酒店的客房状态,以便订房和退房(3)提供多种手段查询客房订房信息(4)提供修改订房和修改退房功能(5)提供简朴的酒店工作人员的添加用户和修改密码功能2.2.2功能需求根据系统的需求分析,本系统功能需求如下:1.系统管理(1)修改密码(2)添加用户2.客房信息管理(1)设立客房标准①添加客房标准②修改客房标准③删除客房标准(2)设立客房信息①添加客房信息②修改客房信息③删除客房信息④查询客房信息3.订房信息管理(1)查询剩余客房信息(2)添加订房信息(3)修改订房信息(4)查询订房信息4.结算信息管理(1)添加结算信息(2)修改结算信息(3)查询结算信息2.3系统的性能需求为了保证系统可以长期、安全、稳定、可靠、高效的运营,系统应当满足以下的性能需求:(1)系统解决的准确性和及时性系统解决的准确性和及时性是系统的必要性能。在系统设计和开发过程中,要充足考虑系统当前和将来也许承受的工作量,使系统的解决能力和响应时间可以满足用户对信息的解决。由于系统的查询功能对于整个系统的功能和性能完毕很重要。从系统的多个数据来源来看,客房信息查询、订房信息查询、结算信息查询,其准确性很大限度上决定了系统的成败。因此,在系统开发过程中,系统采用优化的SQL语句及安全扩展存储过程来保证系统的准确性和及时性。(2)系统的开放性和系统的可扩充性系统在开发过程中,应当充足考虑以后的可扩充性。例如系统权限和客房信息设立等模块也会不断的更新和完善。所有这些都规定系统提供足够的手段进行功能的调整和扩充。而要实现这一点,应通过系统的开放性来完毕,既系统应是一个开放系统,只要符合一定的规范,可以简朴的加入和减少系统的模块,配置系统的硬件。通过软件的修补、替换完毕系统的升级和更新换代。(3)系统的易用性本酒店客房管理系统面向的用户是酒店内工作人员,而有些使用人员往往对计算机并不是非常熟悉,所以系统操作上规定简朴、方便、快捷,便于用户使用。这就规定系统可以提供良好的用户接口,易用的人机交互界面。(4)系统的响应速度系统设计中摒弃大量数据冗余,提出了优化数据库的解决方案,大量使用存储过程,大大提高系统响应时间和速度。系统在平常解决中的响应速度为秒级,达成实时规定,以及时反馈信息。严格保证操作人员不会由于速度问题而影响工作效率。2.4系统的数据需求通过对系统功能需求的分析,可以初步拟定该系统的基本数据需求。由各个功能可以进一步拟定具体的数据需求,具体数据需求如下:(1)房间类型:类型编号、类型名称、面积、床位数、价格、三电信息(空调、电视、电话)、卫生间。(2)房间信息:房间编号、房间类型、房间位置、房间价格、房间状态、备注(3)订房信息:订房编号、顾客编号、顾客姓名、房间编号、入住时间、折扣、入住备注、预计退房时间、应缴房费(4)退房信息:房间编号、顾客编号、顾客姓名、退房时间、退房缴费、订房编号(5)顾客信息:顾客编号、顾客姓名、顾客性别(6)用户信息:用户编号、用户密码、用户职位系统数据流图:系统数据流图系统数据流图登录客房标准设立客房信息管理客房信息登记订房信息管理顾客登记客房标准信息管理结算信息输入客房信息返回基本信息输入订房信息输入基本信息录入结算信息管理三、系统功能总体设计3.1系统功能模块划分结合前面需求分析阶段的结果进行综合解决,拟定了客房管理系统需要完毕的功能,重要划分为以下模块:1.系统(1)修改密码(2)添加用户2.客房信息管理(1)设立客房标准①添加客房标准②修改客房标准③删除客房标准(2)设立客房信息①添加客房信息②修改客房信息③删除客房信息④查询客房信息3.订房信息管理(1)查询剩余客房信息(2)添加订房信息(3)修改订房信息(4)查询订房信息4.结算信息管理(1)添加结算信息(2)修改结算信息(3)查询结算信息3.2系统的功能模块图客房管理系统客房管理系统添加结算修改结算查询结算结算信息管理查询剩余客房查询订房信息修改订房信息添加订房信息订房信息管理添加用户系统修改密码修改客房信息删除客房信息查询客房信息添加客房标准修改客房标准删除客房标准添加客房信息设立客房标准客房信息管理设立客房信息四、系统数据库设计4.1数据库概念设计这一设计阶段是在需求分析的基础上,设计出能满足用户需求的各种实体,以及它们之间的关系,为后面的逻辑结构设计打下基础。根据上面的设计规划出的实体有顾客实体、客房类型、房间实体。顾客顾客房间类型房间订房退房标准mm11m1实体联系E-R图顾客实体属性图顾客实体属性图顾客顾客编号顾客姓名顾客性别用户管理员用户编号用户职位用户密码用户管理实体属性图房间信息房间信息实体属性图房间房间编号房间类型房间位置房间价格房间状态备注房间类型房间类型实体属性图房间类型类型编号类型名称面积床位数价格电视空调卫生间电话订房订房订房订房编号顾客编号顾客姓名房间编号入住时间入住备注折扣应缴房费预计退房时间退房信息退房信息退房房间编号顾客编号顾客姓名退房时间退房缴费订房编号4.2数据库逻辑设计顾客(顾客编号、顾客姓名、顾客性别)用户(用户编号、用户密码、用户职位)房间类型(类型编号、类型名称、面积、床位数、价格、空调、电视、电话、卫生间)房间(房间编号、房间类型、房间位置、房间价格、房间状态、备注)订房(订房编号、顾客编号、顾客姓名、房间编号、入住时间、折扣、入住备注、预计退房时间、应缴房费)退房(房间编号、顾客编号、顾客姓名、退房时间、退房缴费、订房编号)将关系模型转换成具体RDBMS支持的实际关系数据模型,如下面的几个表格所示。(每个表格表达在数据库中的一个表)(1)顾客信息表字段名称数据类型是否NULL说明1customidnvarchar(20)NOTNULL顾客编号2customnamenvarchar(20)NULL顾客姓名3customesexnvarchar(20)NULL顾客性别(2)用户信息字段名称数据类型是否NULL说明1user_IDvarchar(20)NOTNULL用户编号2user_PWDvarchar(20)NOTNULL用户密码3user_Posnvarchar(20)NULL用户职位(3)房间类型字段名称数据类型是否NULL说明1typeidvarchar(20)NOTNULL类型编号2typenamevarchar(20)NOTNULL类型名称3areafloatNULL面积4bednumintNULL床位数5pricefloatNULL价格6hairconditionbitNULL空调7htelevisionbitNULL电视8htelephonebitNULL电话9htoiletbitNULL卫生间(4)房间信息字段名称数据类型是否NULL说明1roomnovarchar20NOTNULL房间编号2roomtypevarchar(20)NOTNULL房间类型3roompositionvarchar(20)NULL房间位置4roompricefloatNULL房间价格5putupbitNULL房间状态6roommemotextNULL备注(5)订房信息字段名称数据类型是否NULL说明1booknovarchar(20)NOTNULL订房编号2customnamevarchar(20)NULL顾客编号3customIDvarchar(20)NOTNULL顾客姓名4roomnovarchar(20)NOTNULL房间编号5indatedatetimeNOTNULL入住时间6discountfloatNULL折扣7inmemotextNULL入住备注8checkdatedatetimeNULL预计退房时间9ammountfloatNULL应缴房费(6)退房信息字段名称数据类型是否NULL说明1booknovarchar(20)NOTNULL订房编号2customenamevarchar(20)NULL顾客姓名3customeidvarchar(20)NOTNULL顾客编号4outtimedatetimeNOTNULL退房时间5outmoneyfloatNULL退房缴费6roomnovarchar(20)NOTNULL客房编号4.3数据库设计优化在上面的实体以及实体之间的关系的基础上,形成数据库中的表格和各个表格之间的关系,即关系模型。设计关系模型并对其进行优化:(1)拟定数据依赖,给出给关系模式中的主码,明确其依赖关系。(2)对于各个关系模式之间的数据依赖进行极小化解决,消除冗余的联系。(3)对照数据依赖的理论对各个关系模式逐个进行分析,考察是否存在部分函数依赖、传递函数依赖、多值依赖,拟定个关系模式分别所属的范式类型。(4)按照需求分析阶段得到的解决规定,分析对于这样的应用环境这些模式是否合适,对某些模式检查是否有合并或分解的需要。(5)对关系模式进行必要的分解,提高数据操作效率和存储空间的运用率。4.4建立索引在本实例中,房间号码、订房编号、客人证件号码这几个属性是主码,设计时考虑建立这些索引,使得对数据库的查询、插入、修改和删除的速度加快,效率也提高。4.5数据存放在开发本系统时因数据库的规模随着顾客的增多将会增大,但因开发环境条件限制,所以数据库是存在个人的计算机磁盘上。4.6系统配置开发以及运用本数据库应用系统时规定操作系统拥有WindowsXP或Windows7以上的配置,能创建数据库,保存数据,并将系统数据库作为应用系统运营操作的数据源,为方便开始时创建和调试查看数据库内容,规定系统装有SQLSERVER2023。五、数据库实行和维护5.1创建数据库运用SQLSERVER2023创建数据库,其创建过程如下面所示:创建数据库HotelRoomManage(1)设计user_Info表CREATETABLEuser_Info( user_IDnvarchar(20)NOTNULL, user_PWDnvarchar(20)NOTNULL, user_Posnvarchar(20)NULL, primarykey(user_ID,user_PWD));(2)设计customers表CREATETABLEcustomers( customidnvarchar(20)NOTNULL, customnamenvarchar(20)NULL, customesexnvarchar(20)NULL, primarykey(customid));(3)设计roomtype表CREATETABLEroomtype( typeidnvarchar(20)NOTNULL, typenamenvarchar(20)NOTNULL, areafloatNULL, bednumintNULL, hairconditionbitNULL, htelephonebitNULL, htelevisionbitNULL, htoiletbitNULL, pricefloatNULL, primarykey(typeid,typename));(4)设计rooms表CREATETABLErooms( roomnonvarchar(20)NOTNULL, roomtypenvarchar(20)NOTNULL, roompositionnvarchar(20)NULL, roompricefloatNULL, putupbitNULL, roommemotextNULL, primarykey(roomno));(5)设计bookin表CREATETABLEbookin( booknonvarchar(20)NOTNULL, customnamenvarchar(20)NULL, customidnvarchar(20)NOTNULL, roomnonvarchar(20)NOTNULL, indatedatetimeNOTNULL, discountfloatNULL, inmemotextNULL, checkdatedatetimeNULL, ammountfloatNULL, primarykey(bookno,customid,roomno,indate), foreignkey(customid)referencescustomers(customid), foreignkey(roomno)referencesrooms(roomno));(6)设计checkout表CREATETABLEcheckout( booknonvarchar(20)NOTNULL, customenamenvarchar(20)NULL, customidnvarchar(20)NOTNULL, outtimedatetimeNOTNULL, outmoneyfloatNULL, roomnonvarchar(20)NOTNULL, primarykey(bookno,customid,outtime), foreignkey(customid)referencescustomers(customid));5.2数据备份和恢复数据库是系统的关键信息,需要采用较好、有效的备份方案。在本设计中,数据备份运用SQLSERVER2023备份功能来进行数据库备份,操作流程如下图所示:先打开公司管理器,找到要备份的数据库在数据库HotelRoomManage上点击鼠标右键,选择”任务”,再选择”备份(B)…”,弹出如下对话框:选择要备份的数据库和备份数据存储位置,再点击拟定,即可。数据库恢复时应把原数据库删除重新导入,在数据库上右键选择”还原数据库(R…)”选择目的数据库“HotelRoomManage”和源数据库“HotelRoomManage”,目的时间点默认为“最近时间”或自己选择一个时间点,点击拟定即可。六、系统具体设计6.1数据库的连接用#import指令引入ADO类型库#import"C:\programfiles\commonfiles\System\ado\msado15.dll"no_namespacerename("EOF","AdoEOF")创建Connection对象并连接数据库if(!AfxOleInit()) { AfxMessageBox("OLE初始化犯错"); returnFALSE; } if(FAILED(::CoInitialize(NULL))) { AfxMessageBox("ADOInitfailed"); returnfalse; } //基于DSN try { //初始化COM,创建ADO连接等操作 ADOConn.CreateInstance(__uuidof(Connection)); ADOConn->Open("DSN=HotelRoomManage;Provider=MSDASQL","sa","",adConnectUnspecified); } //捕获异常 catch(_com_error&e) { CStringerr; err.Format("%s",(char*)(e.Description())); AfxMessageBox(err); } catch(...) { AfxMessageBox("UnknownError..."); } //初始化ADORecordSet m_pADOSet.CreateInstance(__uuidof(Recordset)); SetRegistryKey(_T("LocalAppWizard-GeneratedApplications"));重载Execute方法执行一个查询并将查询结果返回到一个Recordset对象里boolCHotel_MISApp::ADOExecute(_RecordsetPtr&ADOSet,_variant_t&strSQL){ if(ADOSet->State==adStateOpen) ADOSet->Close(); try { ADOSet->Open(strSQL,ADOConn.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdUnknown);//打开数据库并执行SQL语句 returntrue; } catch(_com_error&e)//捕获异常 {CStringerr; err.Format("ADOError:%s",(char*)e.Description()); AfxMessageBox(err); returnfalse; }}断开数据库的连接 //释放ADOConnection if(adStateOpen==ADOConn->State) ADOConn->Close(); ADOConn.Release();//释放ADORecordSet if(adStateOpen==m_pADOSet->State) m_pADOSet->Close(); m_pADOSet.Release();6.2登录设计//通过_variant_t这个类,可以方便的把C++类型变量转换成COM中的变量 _variant_tHolder,strQuery;strQuery="selectuser_ID,user_PWDfromuser_Infowhereuser_ID='"+m_sUSER+"'"; theApp.ADOExecute(theApp.m_pADOSet,strQuery); intiCount=theApp.m_pADOSet->GetRecordCount();//获得数据集中的个数 if(0==iCount) { theApp.m_iLoginCount++; if(theApp.m_iLoginCount>2) { AfxMessageBox("没有这个用户\n三次输入均不对的,请核对后再来",MB_ICONEXCLAMATION); CDialog::OnCancel(); return; } AfxMessageBox("没有这个用户,请重新输入用户名",MB_ICONEXCLAMATION); return; } //登录名在数据库中,查看密码是否输入对的 CStringsPWD; theApp.m_pADOSet->MoveFirst();//到用户记录集的第一条记录 Holder=theApp.m_pADOSet->GetCollect("user_PWD");//获得用户数据库中的密码 sPWD=Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder; if(0!=sPWD.Compare(m_sPWD))//比较当前输入密码和数据库中此用户的密码是否同样 { theApp.m_iLoginCount++; if(theApp.m_iLoginCount>2) { AfxMessageBox("输入密码不对的\n三次输入均不对的,请核对后再来",MB_ICONEXCLAMATION); CDialog::OnCancel(); return; } AfxMessageBox("输入密码不对的,请重新输入",MB_ICONEXCLAMATION); return; } //获得当前登录的用户 theApp.m_sCurrentUser=m_sUSER;6.3修改密码if(IDOK==dlg.DoModal()) { _variant_tstrQuery;//将新密码更新到数据库strQuery="updateuser_Infosetuser_PWD='"+dlg.m_sPWD1+"'whereuser_ID='"+theApp.m_sCurrentUser+"'"; theApp.ADOExecute(theApp.m_pADOSet,strQuery); AfxMessageBox("修改密码成功",MB_ICONINFORMATION); }6.4添加新用户CAppendAccountDLGdlg; if(IDOK==dlg.DoModal()) { _variant_tstrQuery;//将新用户保存到数据库strQuery="insertuser_Info(user_ID,user_PWD)values('"+dlg.m_sUSER+"','"+dlg.m_sPWD1+"')"; theApp.ADOExecute(theApp.m_pADOSet,strQuery); AfxMessageBox("添加用户成功",MB_ICONINFORMATION); }6.5客房标准if(m_bAppend)//允许添加客房标准 { //将客房标准保存到数据库 strQuery="insertroomtype(typeid,typename,area,bednum,price,haircondition,htelephone,htelevision,htoilet)\ values('"+m_sTypeID+"','"+m_sTypeName+"',"+m_sArea+","+m_sBedNo+","+m_sPrice+","+sAir+","+sTel+","+sTV+","+sToilet+")"; if(theApp.ADOExecute(theApp.m_pADOSet,strQuery)) { AfxMessageBox(_T("添加记录成功!"),MB_ICONINFORMATION); //Clearallinputm_sTypeID=m_sTypeName=m_sArea=m_sBedNo=m_sPrice="";((CComboBox*)GetDlgItem(IDC_ROOMTYPE_ISAIRCON))->SetCurSel(1); ((CComboBox*)GetDlgItem(IDC_ROOMTYPE_ISTEL))->SetCurSel(1); ((CComboBox*)GetDlgItem(IDC_ROOMTYPE_ISTV))->SetCurSel(1); ((CComboBox*)GetDlgItem(IDC_ROOMTYPE_ISTOILET))->SetCurSel(1); UpdateData(false); } elseAfxMessageBox(_T("添加记录失败!"),MB_ICONEXCLAMATION); }6.6客房信息if(m_bAppend) { //客房编号唯一 strQuery="select*fromroomswhereroomNO='"+m_sNo+"'"; theApp.ADOExecute(theApp.m_pADOSet,strQuery); intiCount=theApp.m_pADOSet->GetRecordCount(); if(0!=iCount) { AfxMessageBox(_T("已经存在此客房编号的记录!"),MB_ICONEXCLAMATION); return; } } if(m_bAppend)//允许添加客房信息 { strQuery="insertintorooms(roomno,roomtype,roomposition,roomprice,roommemo)\ values('"+m_sNo+"','"+m_sType+"','"+m_sPosition+"',"+m_sPrice+",'"+m_sMemo+"')"; if(theApp.ADOExecute(theApp.m_pADOSet,strQuery)) { AfxMessageBox(_T("添加记录成功!"),MB_ICONINFORMATION); //清除所有的输入m_sNo=m_sType=m_sPosition=m_sPrice=m_sMemo="";((CComboBox*)GetDlgItem(IDD_ROOM_TYPE))->SetCurSel(0); UpdateData(false); } elseAfxMessageBox(_T("添加记录失败!"),MB_ICONEXCLAMATION); }6.7客房信息查询if(!m_bNoChecked&&!m_bTypeChecked)//选择查询条件 { AfxMessageBox(_T("请选择查询条件!"),MB_ICONEXCLAMATION); return; } m_sNo.TrimRight(""); m_sType.TrimRight(""); if(m_bNoChecked)//编号查询 { if(""==m_sNo) { AfxMessageBox(_T("客房编号条件不能为空!"),MB_ICONEXCLAMATION); return; } } elsem_sNo="%"; //房间类型查询 if(!m_bTypeChecked)m_sType="%";if(_T("所有房间类型")==m_sType)m_sType="%";6.8未定住客房信息查询//查询剩余客房,规定房间的状态是未定住的,putup='False'orputupisNULL _variant_tstrQuery; if(m_iTypePrice)strQuery="select*fromroomswhere(roomprice>="+m_sBottom+"androomprice<="+m_sTop+")and(putup='False'orputupisNULL)"; elsestrQuery="select*fromroomswhereroomtype='"+m_sType+"'and(putup='False'orputupisNULL)";6.9订房if(m_bAppend)//添加订房信息 { //更新标题 SetWindowText(_T("添加订房信息")); first=TRUE; //初始化Combobox _variant_tstrQuery,Holder; strQuery="select*fromroomswhereputup=0orputupisNULLorderbyroomno"; theApp.ADOExecute(theApp.m_pADOSet,strQuery); intiCount=theApp.m_pADOSet->GetRecordCount(); theApp.m_pADOSet->MoveFirst(); for(inti=0;i<iCount;i++) { Holder=theApp.m_pADOSet->GetCollect("roomNo"); ((CComboBox*)GetDlgItem(IDD_BOOKIN_ROOMNO))->InsertString(i,Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder); //根据roomno显示其他信息 if(0==i) { //获得RoomType Holder=theApp.m_pADOSet->GetCollect("roomtype"); m_sRoomType=Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;//获得roomposition Holder=theApp.m_pADOSet->GetCollect("roomposition"); m_sRoomPosition=Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;//获得roomprice Holder=theApp.m_pADOSet->GetCollect("roomprice"); m_sRoomPrice.Format("%.2f",Holder.dblVal);//获得roommemo Holder=theApp.m_pADOSet->GetCollect("roommemo"); m_sRoomMemo=Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder; } theApp.m_pADOSet->MoveNext(); } ((CComboBox*)GetDlgItem(IDD_BOOKIN_ROOMNO))->SetCurSel(0); }6.10订房信息查询//选择查询条件 if(!(m_bName||m_bRoomNo||m_bInDate)) { AfxMessageBox(_T("请选择查询条件!"),MB_ICONEXCLAMATION); return; } //顾客姓名查询 if(m_bName&&""==m_sName) { AfxMessageBox(_T("顾客姓名不能为空"),MB_ICONEXCLAMATION); return; } //房间编号查询if(m_bRoomNo&&""==m_sRoomNo) { AfxMessageBox(_T("客房编号不能为空"),MB_ICONEXCLAMATION); return; } //入住时间查询 CStringsTime=m_tInDate.Format("%Y-%m-%d"); if(!m_bName)m_sName="%"; if(!m_bRoomNo)m_sRoomNo="%";//查询条件 _variant_tstrQuery; if(!m_bInDate)strQuery="select*frombookinwherecustomnamelike'"+m_sName+"'androomnolike'"+m_sRoomNo+"'andcheckdateisNULL";elsestrQuery="select*frombookinwherecustomnamelike'"+m_sName+"'androomnolike'"+m_sRoomNo+"'andindate='"+sTime+"'andcheckdate=m_tInDate"; 6.11结算//获得InDate _variant_tstrQuery,Holder; COleDateTimetInDate; strQuery="selectindatefrombookinwhereroomno='"+m_sRoomNo+"'andcustomid='"+m_sID+"'";//andcheckdateisNULL theApp.ADOExecute(theApp.m_pADOSet,strQuery);Holder=theApp.m_pADOSet->GetCollect("indate"); tInDate=Holder; if(tInDate>m_tOutDate) { AfxMessageBox(_T("结帐日期小于入住日期,请重新输入结帐日期!"),MB_ICONEXCLAMATION); return; } //结算金额计算 COleDateTimeSpantimeSpan; timeSpan=m_tOutDate-tInDate; intiDays=timeSpan.GetDays()+1;floatfPrice=atof(m_sPrice); floatfDiscount=atof(m_sDiscount); floatfAmmount=fPrice*iDays*fDiscount/100; CStringsAmmount; sAmmount.Format("%.2f",fAmmount);CStringsTip=_T("金额为:"); sTip+=sAmmount; sTip+=_T("结算完毕!"); AfxMessageBox(sTip,MB_ICONINFORMATION); //更新DataBaseCStringsOutDate,m_sBookno; sOutDate=m_tOutDate.Format("%y-%m-%d"); strQuery="updatebookinsetcheckdate='"+sOutDate+"',ammount="+sAmmount+"\ whereroomno='"+m_sRoomNo+"'andcustomid='"+m_sID+"'";//andcheckdateisNULL theApp.ADOExecute(theApp.m_pADOSet,strQuery);//更新客房信息,putup为0(false) strQuery="updateroomssetputup=0whereroomNo='"+m_sRoomNo+"'"; theApp.ADOExecute(theApp.m_pADOSet,strQuery);6.12结算信息查询//选择查询条件 if(!(m_bName||m_bRoomNo||m_bInDate)) { AfxMessageBox(_T("请选择查询条件!"),MB_ICONEXCLAMATION); return; } //姓名查询 if(m_bName&&""==m_sName) { AfxMessageBox(_T("顾客姓名不能为空"),MB_ICONEXCLAMATION); return; } //客房编号查询if(m_bRoomNo&&""==m_sRoomNo) { AfxMessageBox(_T("客房编号不能为空"),MB_ICONEXCLAMATION); return; } //根据入住时间查询结算信息 CStringsTime=m_tInDate.Format("%Y-%m-%d"); if(!m_bName)m_sName="%"; if(!m_bRoomNo)m_sRoomNo="%";//查询 _variant_tstrQuery; if(!m_bInDate)strQuery="select*frombookinwherecustomnamelike'"+m_sName+"'androomnolike'"+m_sRoomNo+"'andcheckdateisnotNULL";elsestrQuery="select*frombookinwhereindate='"+sTime+"'andcheckdateisnotNULL";//customnamelike'"+m_sName+"'androomnolike'"+m_sRoomNo+"'andandcheckdatelike'"+m_tInDate+"'七、测试过程:7.1系统测试7.1.1测试方法由于软件错误的复杂性,软件测试需要综合应用测试技术,软件测试环节为单元测试、集成测试、确认测试和系统测试。单元测试是对源程序中每一个程序单元进行测试,检查各个模块是否正的确现了规定的功能,从而发现模块在编码中或算法中的错误。该阶段涉及编码和具体设计的文档。各模块通过单元测试后,将各模块组装起来进行集成测试,以检查与设计相关的软件体系结构的有关问题。确认测试重要检查已实现的软件是否满足需求规格说明书中拟定的各种需求。系统测试将已拟定的软件与其他系统元素(如硬件、其他支持软件、数据和人工等)结合在一起进行测试。7.1.2基本功能测试添加客房标准:结果显示:修改客房标准:显示结果:添加客房信息:结果显示:修改客房信息修改前:修改为:结果显示:查询剩余未定住的客房:结果显示:添加顾客订房:结果显示:修改订房信息修改前:修改(修改入住日期):结果显示:查询订房信息:结果显示:添加结算:结果显示:修改结算信息(此处修改结算日期)修改前:修改:结果显示:查询结算信息:显示:修改用户密码:两次密码同样后:添加用户:两次密码同样后:7.2实际完毕的情况实际完毕了设计规定的基本任务,经严密测试和调试,该系统基本完毕如下的基本功能,结果也证明是对的的。1.系统管理(1)修改密码(2)添加用户2.客房信息管理(1)设立客房标准①添加客房标准②修改客房标准③删除客房标准(2)设立客房信息①添加客房信息②修改客房信息③删除客房信息④查询客房信息3.订房信息管理(1)查询剩余客房信息(2)添加订房信息(3)修改订房信息(4)查询订房信息4.结算信息管理(1)添加结算信息(2)修改结算信息(3)查询结算信息7.3系统测试过程发现的问题(1)修改客房标准后,发现房间信息内的一些标准(如房间价格)未更新加入以下代码后解决了问题。//更新房间信息,根据房间标准修改strQuery2="Updateroomssetroomprice="+m_sPrice+"\whereroomtype='"+m_sTypeName+"'"; theApp.ADOExecute(theApp.m_pADOSet,strQuery2);(2)调试过程中多次出现以下类似问题通过认真的修改程序和数据库,无类似问题出现了。(3)添加订房后发现顾客的信息未写入数据库中,加入以下代码后解决了问题strQuery2="insertcustomers(customid,customname)\ values('"+m_sID+"','"+m_sName+"')"; theApp.ADOExecute(theApp.m_pADOSet,strQuery2);但是当修改此顾客的订房信息时,数据库出现了错误经修改为以下代码后真正解决了问题在该顾客订房时将标志first设立为TRUE,当是修改订房时设立为FALSEif(TRUE==first)//只插入一次到顾客信息表中 { strQuery2="insertcustomers(customid,customname)\ values('"+m_sID+"','"+m_sName+"')"; theApp.ADOExecute(theApp.m_pADOSet,strQuery2); }(4)开始写程序时忘了设房间的标志(是否有入住),后来发现

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论