版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第17章 酒店管理系统,本章利用前面学过的知识,结合.NET三层结构的开发思想,完成一个C/S结构的实用的酒店管理系统,来巩固和加深前面学过的编程技术。本章还通过系统的设计和实现介绍了一些编程方面的重要技巧,内容涉及到ADO.NET技术、数据验证技术、参数传递、数据显示控件、容器控件等。本章主要内容: 酒店管理系统的系统分析。 用户管理模块的设计和实现。 酒店基础信息设置模块的设计和实现。 酒店业务管理模块的设计和实现。,17.1 系统分析,作为酒店管理的一个工具,该系统实现了酒店管理的基本功能,如添加、删除、修改住房信息,添加、删除、修改客人信息等。,17.1.1 需求分析,需求分析是开发应
2、用系统的第一步,通过需求分析可以了解客户需要什么样的程序,需要完成什么功能。需求说明书描述系统的总体要求,并且作为各方面沟通的依据,也为下一步工作提供基准。系统开发人员要按照需求说明书完成相应的功能。读者可以查找相关书籍学习需求说明书的标准描述方式,在此重点阐述系统的分析和设计。 “酒店管理系统”用于管理和维护酒店的基本信息,酒店工作人员登录系统后可以拥有该系统的所有功能,方便进行酒店内部管理。该系统使用数据库存放数据,图17.1显示了系统的功能设计。,17.1.2 系统设计,本系统的总体架构采用三层架构模型,分为表示层、业务逻辑层、数据访问层,其中表示层负责界面的显示,用于显示数据和接收用户
3、输入的数据,为用户提供交互式操作界面;业务逻辑层是表示层和数据访问层之间通信的桥梁,主要负责数据的传递和处理;数据访问层主要实现对数据的保存和读取操作。该系统比较简单,因此不考虑使用接口和反射技术。三个模块之间直接使用对象或者数据集进行通信。本系统三层架构如图17.2所示。,17.1.3 数据库设计,我们设计的酒店管理系统属于信息管理系统,其中的功能都是围绕数据库实现的,所以数据库的设计非常重要。 在VS2008中打开“服务器资源管理器”窗口,右击“数据连接”选项,单击“创建新的数据库”选项,即可开始创建系统需要的数据库,数据库名称为HotelManager,包括6张表,表的名称和结构分别说明
4、如下。 客人信息表(Guest)的表结构见表17.1。该表用于存放入住酒店的客人信息,通过这个表可以记录入住酒店客人的详细信息,以及客人到达和离开酒店的时间。,17.2 实体类的实现,前面一个示例程序中,数据传递是使用DataSet实现的,DataSet不具备良好的面向对象的特性,使用起来不够直观、方便,而且DataSet的核心结构与数据库的核心结构完全相同,使用DataSet传递数据就把数据结构完全暴露在表示层和业务逻辑层,不利于数据安全。 实体类具有面向对象的基本特征,是业务对象的基础。在三层之间通过实体类传递数据具有很大的灵活性,有助于项目的维护、扩展,更能体现三层结构的优势。 本系统中
5、,数据库HotelManager的五张表分别转换为五个实体类,具体内容详述如下。,17.2.1 HotelUser实体类,HotelUser实体类对应于数据库中的HotelUser数据表,将其转换成面向对象的表示形式,类图如17.4所示。,17.2.2 Guest实体类,Guest实体类对应于数据库中的Guest表,类图如图17.5所示。,17.2.3 GuestCategory实体类,GuestCategory实体类来源于数据表GuestCategory,该类比较简单,类图如图17.5所示。,17.2.4 Room实体类,Room实体类对应数据库中的表Room,类图如图17.6所示。,17.
6、2.5 ToomType实体类,RoomType实体类对应数据表RoomType,其类图如图17.7所示。,17.3 界面设计,应用程序的界面是展示给用户的,为用户提供和系统进行交互的功能,对用户界面进行良好的设计非常重要,既可以完成程序的功能,又能使用户方便的使用。本节首先以图片的形式将系统的界面展现出来,帮助您对本系统有一个初步直观的了解。,17.3.1 用户登录面,用户登录界面为系统用户提供交互,输入用户名和密码,登录本系统。界面设计如图17.8所示。为了是界面更加友好,美观,设计时使用了图片作为背景。,17.3.2 主界面,系统主界面采用通用的模式,包括菜单栏、工具栏等控件。主界面是多
7、文档应用程序,采用了默认的控件颜色,界面中最上面是菜单,然后是工具栏。本系统属于内部管理使用,必须登录后才能拥有系统的使用权限,否则所有的工具和菜单都处于不能使用的状态。如图17.9所示。,17.3.3 客房类型设置界面,此界面用于完成客房类型的检索、增加、修改、删除功能。界面设计如图17.10所示。该界面中用到了菜单栏、工具栏、DataGridView控件、分组框(GroupBox)、分组面板(Panel)等控件。 单击“新增”或“修改”按钮,可显示“Panel”面板,在该面板中添加文本框、组合框等对客房信息进行修改。界面如图17.11所示。,17.3.4 客房信息界面,客房信息界面设计是为
8、了方便客房信息维护,采用的设计风格和客房类型设置界面基本相同,如图17.12所示。 单击“新增”、“修改”、“删除”按钮,均可打开相应编辑面板,如图17.13所示。单击“取消”按钮可隐藏编辑面板。该界面中控件和相关属性的设定和客房类型设置界面相似,这里不再列出详细说明,请参照表17.8完成。,17.3.5 客人管理界面,客人管理界面提供对客户的信息进行维护,包括增、删、改、查操作,设计风格沿用上边两个界面的方式,如图17.14所示。 单击“新增”、“修改”、“删除”按钮,均可打开相应编辑面板,如图17.15所示。单击“取消”按钮可隐藏编辑面板。单击“修改”、“删除”按钮时,需要首先在DataG
9、ridView控件中单击需要修改或删除的信息,将其信息显示在打开的编辑面板中,可进行修改操作,也可删除。该界面中控件和相关属性的设定和客房类型设置界面相似,这里不再列出详细说明,请参照表17.8完成。,17.3.6 用户管理界面,用户管理界面用于完成用户的增、删、改、查功能,界面设计如图17.16所示。 单击“新增”、“修改”、“删除”按钮,均可打开相应编辑面板,实现对用户信息的修改。,17.4 实现数据访问层,本系统采用.NET三层架构的思想构建,由数据访问层完成对数据库的操作。由于数据库的访问包含增、删、改、查等多种操作,所以在每一个类中包含很多方法,具体每一类中包含哪些方法根据需求而定。
10、为了调用方法简单化,在数据访问层中所有的类和方法均为静态类和静态方法。,17.4.1 数据库通用操作类(DBHelper.cs),由于系统中对于数据库操作都需要处理连接字符串、创建连接、执行查询、更新等通用操作,为了提高代码的复用性,创建DBHelper.cs类完成数据库的通用操作。定义了连接数据库的字符串,创建数据库连接。方法中有:执行无参数的sql语句的方法、执行有参数的sql语句等方法。,17.4.2 用户管理数据访问(HotelUserService.cs,用户管理的数据访问需要实现对用户表的增、删、改、查操作,使用实体对象传递数据,使用IList传递实体对象集合。用户管理数据访问示例
11、如代码17-7所示。该类中包含的方法有: AddHotelUser(HotelUser hotelUser):用户对象作为参数,实现添加新用户的功能。 DeleteHotelUser(HotelUser hotelUser):将用户对象作为参数,实现删除用户的操作。 DeleteHotelUserByUserID(int userID):根据用户ID删除用户的方法。 ModifyHotelUser(HotelUser hotelUser):将用户对象作为参数,更新用户信息。 GetAllHotelUsers():获取所有用户信息。 GetHotelUserByUserID(int userID
12、):根据用户ID获取用户信息。 GetHotelUserByUserName(string userName):根据用户名获取用户信息。,17.4.3 客房信息数据访问(RoomService.cs),客房信息数据访问类和用户管理数据访问的方法编写很相似,都是完成对数据库的增、删、改、查操作,只是针对不同的应用,传递的参数不同。示例代码如代码17-8所示。 说明:在下面的方法中,创建DataReader对象时都采用了using关键字,这是using的一种用法,using (SqlDataReader dataReader = DBHelper.GetReader(sql), using括号中创
13、建的对象,在执行到using语句块的末尾时会自动释放该对象。本例中创建的DataReader对象由于使用了using关键字,在语句执行完毕后会自动释放,就不需要显式关闭即不需要执行DataReader对象的Close()方法。 该类中包含的方法如下: GetAllRooms():得到客房信息集合。 GetRoomByRoomId(int roomId):根据客房ID得到客房信息实体对象。 GetRoomListByRoomNumber(string roomNumber):根据客房名称得到客房信息集合。 GetRoomIdByRoomNo(string roomNo):根据房间号得到客房实体对
14、象。 DeleteRoomByRoomId(int roomId):根据客房ID删除客房信息。 ModifyRoom(Room room):修改客房信息。 AddRoom(Room room):增加客房信息。,17.4.4 客房类型数据访问(RoomType.cs),客房类型数据访问(RoomType.cs)实现客房类型的数据库操作,编写方法和客房信息数据访问基本相同,示例代码如代码17-9所示。该类包含的方法如下: GetAllRoomTypes():得到客房类型信息集合。 GetRoomTypeListByTypeName(string typeName):根据客房类型名称得到客房类型列表
15、。 GetTypeNameByTypeID(int typeID):根据客房类型ID得到客房类型名称。 GetRoomTypeByTypeID(int typeId):根据客房类型ID得到客房实体对象。 ModifyRoomType(RoomType roomType):修改客房信息。 DeleteRoomTypeByTypeId(int typeId):删除客房类型信息。 AddRoomType(RoomType roomType):增加客房类型信息。,17.4.5 客人管理数据访问(Guest.cs),客人管理数据访问类实现对客人表(Guest)的查询、修改、删除等操作,负责与数据库之间的
16、交互,该类示例代码如代码17-10所示。 为了使读者能够灵活掌握sql语句的编写,在此例中没有使用客房信息和客房类型示例代码中可变字符串的方法生成sql语句,而是直接使用参数类的方法,在代码第18行,使用参数创建了sql语句,在代码第22行到31行,使用SqlParameter类型的数组存储sql语句中的参数,调用DBHelper类中的方法执行sql语句。,17.4.6 客人类型数据访问(GuestCategory.cs),客人类型数据访问(GuestCategory.cs)的功能比较简单,只要能够根据ID获得客户类型就可以,示例代码如代码17-11所示。该类中包含的方法如下: GetAllG
17、uestCategories():,17.5 实现业务逻辑层,业务逻辑层负责数据的传递,在实现业务逻辑层之前,先概括一下实现的步骤: (1)在业务逻辑处理类中引用数据访问层、实体层的命名空间。 (2)实例化实体对象。 (3)调用数据访问功能。 (4)实现业务逻辑。,17.5.1 用户管理业务逻辑类(HotelUserManage.cs),用户管理业务逻辑类(HotelUserManage.cs)用来处理用户管理的业务逻辑,在用户管理数据访问HotelUserServ.cs类和用户管理界面之间进行数据传递。 添加用户操作时,判断用户是否存在,如存在同名用户,则不允许添加。删除用户、修改用户都是通
18、过调用HotelUserService.cs类中的方法实现。示例代码如代码17-12所示。 (详细内容请参照本书),17.5.2 客房信息管理业务逻辑(RoomManager.cs),客房信息管理业务逻辑(RoomManager.cs)负责在客房信息管理数据访问和客房信息界面之间进行数据传递,通过调用RoomService.cs中的方法实现,示例代码如代码17-13所示。 (详细内容请参照本书),17.5.3 客房类型业务逻辑(RoomTypeManager.cs),客房类型业务逻辑负责在客房类型数据访问层和界面之间进行数据传递,和客房信息业务逻辑相同,具有增、删、改、查功能。示例代码如代码1
19、7-14所示。 (详细内容请参照本书),17.5.4 客人管理业务逻辑(GuestManager.cs),客人管理业务逻辑负责在客人管理数据访问层和界面之间进行数据传递,和客房信息业务逻辑相同,具有增、删、改、查功能。示例代码如代码17-15所示。 (详细内容请参照本书),17.5.5 客人类型管理业务逻辑(GuestCategory.cs),客人类型表比较简单,用到的方法也较少,主要实现检索功能。示例代码如代码17-16所示。,17.6 实现表示层数据绑定,上面已经设计好了窗体,根据窗体需求实现了数据访问层和业务逻辑层的功能,本节完成界面也就是表示层的数据绑定,与数据库能够真正地发生交互。,
20、17.6.1 用户登录,用户登录表示层实现的功能主要有:判断输入的登录名和密码是否为空,判断输入的登录密码是否与根据登录ID得到的密码相同,如果相同则登录成功,返回主界面。用户登录的代码如代码17-17所示。 本项目采用三层架构构建应用系统,界面层只能直接调用业务逻辑层,不能调用数据访问层,各层之间通过实体类传递数据,编写程序时首先引用命名空间HotelManager.Models和HotelManager.BLL,然后调用HotelUserManager.cs中的方法实现登录功能。,17.6.2 主界面,本系统将首先启动的界面设置为主界面,用户登录成功后主界面中按钮和菜单才可以使用,如果取消登录或登录失败,主界面中的菜单和按钮基本都不可用。 主界面是子界面的容器,通过单击主界面上的菜单或按钮,打开相应的子窗体,实现程序退出功能。主界面中的各个功能都是通过给事件编写代码实现。,17.6.3 客房类型设置,窗体载入时在数据列表控件DataGridView中显示客房类型的详细信息,隐藏编辑面板,单击“新增”、“修改”、删除时可以显示。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年初级会计职称模拟试题(含答案)
- 精密电成型网工安全宣教考核试卷含答案
- 电影放映员操作强化考核试卷含答案
- 2026年大学生就业指导模拟试题(含答案)
- 2026年国家保安员资格考试试卷题库大全及答案详解
- 2026年区域封闭模拟题及答案详解
- 2026年护士职业资格证模拟试卷目(含答案)
- 2026年攀岩能力模拟题及答案详解
- 2026年护理常用急救药品模拟试题(含答案)
- 2026年高新区公卫模拟试题(含答案)
- 2026年企业所得税汇算清缴规范与申报风险防控方案
- 猛士车课件教学课件
- 2025年金矿矿山选矿技术员新员工岗位专业知识笔试题目及答案
- 汽车4S店售后服务流程说明书
- GJB3206B-2022技术状态管理
- 《平行四边形的性质(第一课时)》教案
- 《冠状动脉介入治疗并发症》课件
- 核反应堆物理分析教材谢仲生修订版
- 嘉兴怡麦食品有限公司年产 980 吨营养面包项目环评报告
- 隐睾围手术期
- 国有资产报废回收合同范本
评论
0/150
提交评论