摘 要
酒店管理系统是伴随着计算机的普及和IT产业的兴起而出现的产物,该系统的产生为酒店的经营管理带来了很大的便捷——为此而得到了大范围的推广和使用;本系统是根据当前市场需求而设计;能够实现酒店前台与酒店各项管理制度的一体关联与带动性;能实现酒店管理的规范化和一体化;具有较长的市场存活周期。该酒店管理系统是典型的信息采集系统,系统开发的任务主要包括数据库的设计与维护、管理系统的开发这两个主要方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的库。而对于后者则要求系统功能完备,易使用,具有较强的可移植性等特点。
酒店前台管理系统是当前市场酒店管理实现一体化和简洁化的一个不可缺的系统,该管理系统所提供的详细管理记录与管理资料使得酒店主管或酒店运营者能在较短的时间内做出准确而明智的决策,该系统的所提供的全面和便捷的功能使得酒店能比较健康的运营下去,因此我们所要开发的酒店前台管理系统应该能够为用户提供充足的信息和快捷的查询手段;我们所要开发的酒店管理明细是计算机管理本酒店的各种业务需求和业务实现的一种计算机应用技术的创新,本系统是根据当前酒店行业是发展需求而开发的系统。经过分析,我使用JetBrains公司的IntelliJ IDEA开发工具,利用其提供的各种面向对象的开发工具,如swing图形界面的设计;MYSQL来实现数据库的建立和数据库的相关操作;JDBC实现对数据库的连接操作。能在短时间内建立系统应用雏形,然后对初始雏形系统进行需求的分析和系统个方面功能的不断补充和完善,对系统各功能模块的不断的修正和改进,最后形成当前的可行系统。
关键词:酒店管理系统;数据库;JDK;图形界面设计
Abstract
The hotel management system is the product of the popularity of computers and the rise of IT industry. The emergence of this system has brought great convenience to the hotel management – for this reason, it has been widely promoted and used; This system is designed according to the current market demand; It can realize the integrated connection and drive between the hotel front desk and various management systems of the hotel; It can realize the standardization and integration of hotel management; It has a long market life cycle. The hotel management system is a typical information collection system. The task of system development mainly includes the design and maintenance of the database and the development of the management system. For the former, it is required to establish a database with strong data consistency and integrity and good data security. For the latter, the system should have complete functions, be easy to use, and have strong portability.
The hotel front desk management system is an indispensable system for the integration and simplification of hotel management in the current market. The detailed management records and management materials provided by the management system enable the hotel director or hotel operator to make accurate and wise decisions in a short time. The comprehensive and convenient functions provided by the system enable the hotel to operate healthily, Therefore, the hotel front desk management system we want to develop should be able to provide users with sufficient information and quick query means; The hotel management details we are going to develop are a kind of computer application technology innovation for computer management of various business needs and business realization of the hotel. This system is developed according to the development needs of the current hotel industry. After analysis, I used the IntelliJ IDEA development tool of JetBrains and various object-oriented development tools provided by it, such as the design of swing graphical interface; MYSQL to achieve the establishment of the database and database related operations; JDBC implements the connection operation to the database. The system application prototype can be established in a short time, and then the requirements of the initial prototype system are analyzed and the functions of the system are continuously supplemented and improved, and the various functional modules of the system are constantly modified and improved, finally forming the current feasible system.
Keywords: hotel management system;database;JDK;graphic interface design
1 绪论
1.1 背景介绍
随着社会经济的迅速发展和科学技术的全面进步,计算机事业的飞速发展,以计算机与通信技术为基础的信息系统正处于蓬勃发展的时期。随着经济文化水平的显著提高,人们对生活质量及工作环境的要求也越来越高。中国改革开放以后,我国大力发展经济、教育、旅游等等先进产业链,人们对于外出旅游和群体聚餐的需求越来越大。而且我国的良好的科学教育水平和人民文化素质的提高,为酒店管理系统提供了良好的机遇和前景。
采用现代化开发模式,能够方便快捷的对酒店进行有效的管理了解酒店的具体情况,同时提供令顾客满意的服务,提高了效率。顾客可以方便地了解酒店的客房情况和餐饮情况,进行提前预订消费。目前,由于中小型酒店缺少必要的资金和人员,仍采用手工记录和打电话咨询的方式,对酒店管理和顾客预订都很不方便,而且极其容易出错。所以开发一套适合的用于中小酒店的酒店管理系统是非常符合当代的条件,既可以节约软件开发成本预算,也可以提高酒店服务水平。
对于界面的设计我们应该追求的是:实用性强、易读性强、清晰度高;原则是:不能因为刻意追求美观而以整个界面的清晰度的牺牲作为代价,不能为了清晰度而抛弃对易读性的追求。再设计的过程中我们应该根据实际的情况进行设计,做到具体问题具体分析,不刻意追求原则。
在对应的界面与MySQL数据库建立连接,并实现对应的SQL语句进行实现将产生的结果显示出来。并运用捕捉异常的方法,将异常信息显示出来。
实现SQL语句的时候借助平台开发工具中关于数据处理的控件来完成。总而言之就是实现对各个信息表的查询与修改删除操作。
1.2 国内外研究动态
酒店管理系统最开始的时候是在美国,大约在六十年代末,如Ecoo系统,基本实现了酒店管理的功能,如预订、结账、餐厅、客房等模块,由于当时没有 PC ,所以整个系统都是在集中式的小型机上管理。前些年,国内的酒店管理系统之所以不成气候,就是因为网络信息化技术不够,从而影响了酒店的业绩。之后,国外的计算机技术,网络平台,新型技术点不断传入国内。国内的酒店管理系统开始发展起来。论文网现今,酒店的电脑管理和网络技术日益提升,电脑网络服务日趋昌盛。因此,在经济效益上取得了突飞猛进的进展。国家建设部门的规定中已经包含星级酒店的设计方案中必须有电脑管理系统。这是网络化时代的体现。
我国传统的管理方法以经验和理性相结合,管理者要保持理性和清醒,并在拥有实际操作经验基础上,真正领会其中的要领,注重的实际行动这个过程。因此,我国酒店更注重教育管理法、经济管理法、情感管理法等。而在需求性不明确这一现状所存在的问题主要影响着国内酒店信息管理技术开发,使酒店项目工程难度增加,产品过渡不足,开发投资的总成本太高,缺乏创新和统一的行业规范,产品推广阻力大,都是对于形成自己产品的特点和对自己产品质量的控制有所不利的因素。国外优秀产品的垄断和竞争,极大的影响了开发者的利润空间。
目前,现阶段市场上所呈现出的酒店管理系统,绝大部分是为大型的酒店企业进行设计的,优点是其管理功能普遍较为全面,但是其存在的不足也是较为明显的:许多功能并不适用于中小型的酒店企业。实际上,在当今国内市场中占据份额比例更大一块的却是中小型酒店企业,与之对应的却是适用于中小型企业的酒店管理系统数量非常少。
1.3 课题研究的意义及价值
人们现在越来越注重精神上的满足,排除了学习读书等消遣方式之外,外出参加旅游和组织聚餐也成为当下放松心情,缓解压力的重要环节。因此对酒店的入住情况和餐饮服务质量的及时了解是十分有必要的。而且随着顾客对酒店的需求越来大,和酒店有关的信息也就越来越多,单靠人力已经无法完成必要的信息记忆和信息整理,由此得出,我们必须要一套完善的酒店管理系统满足顾客的需求,提供对酒店管理的效率。酒店管理系统可以帮助我们完成对信息的有效存储和永不丢失,也能对信息进行有效整理,极大缓解了人员的工作负担。而且能够知道所需要的具体信息,执行效率也是非常方便快捷,几乎不会出错。以上种种可以看出来,通过使用酒店管理系统能够更加有效的对酒店进行管理和有效的进行信息处理,这样就可以达到员工福利的
目的,缓解了雇职人员之间的矛盾,减少了酒店管理的成本。
2 系统开发工具
2.1 开发平台
2.1.1 JDK介绍
Java 8平台集合生产力、易用性、多语种编程、更高安全性和稳定性等特色。
JDK8的特性已经基本准备就绪,虽然一些特性还不是特别完善,但开发人员已经开始庆祝这一里程碑事件了。
JDK8开发者计划在上月底发布M7版本,按照原计划,这应该是一个功能完备的版本,包含完整的22个JEP(Java EnhancementProposals,Java增强建议)。目前大部分特性已经完成,最重要的是Lambda相关的几个特性(JEP 101、107、109和126)已经完成。
经过2年半的努力、屡次的延期和9个里程碑版本,甲骨文的Java开发团队终于发布了Java 8正式版本。
Java 8版本最大的改进就是Lambda表达式,其目的是使Java更易于为多核处理器编写代码;其次,新加入的Nashorn引擎也使得Java程序可以和JavaScript代码互操作;再者,新的日期时间API、GC改进、并发改进也相当令人期待。
另外,原本要加入Java 8的Jigsaw项目(标准模块系统)由于开发时间关系,被推迟到了Java 9中,不过Java 8已经在朝着这个方向努力了。
JDK 8 主要特性如下:
Lambda表达式,一种新的语言特性,能够使功能作为方法参数或将代码作为数据。
显著增加和修改了Java语言特性,增添了标准库,包括默认方法,新的java.util.stream包及 Date-Time API。
Compact Profiles包含 Java SE平台预定义子集,使应用程序员无需部署在整个平台,可运行在小型设备上。
安全性包括更新可Java加密体系架构;限制doPrivileged;SSL/TLS Server Name Indication (SNI) Extension以及增强密钥库。
2.1.2 IntelliJ IDEA简介
IDEA 全称 IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、各类版本工具(git、svn、github等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。IntelliJ IDEA工具在有些方面比较优秀,IDEA提倡只能编程节省程序员工作量,有很多特色功能如编码辅助JavaScript自动补全功能、html页面编写代码功能,灵活排版功能等,相对于Eclipse的IDE工具实用很多。
IDEA的优点有许多:
智能的选取:在选取某个方法,或某个循环或想一步一步从一个变量到整个类慢慢扩充着选取,IDEA就提供这种基于语法选择,在默认设置中Ctrl+w,可以实现选取范围不断扩充,这种方式在重构的时候尤其显得方便。
丰富的导航模式:IDEA提供了丰富的导航查看模式,在最基本的project试图中,你还可以选择多种的视图方式。
历史记录功能:不用通过版本管理服务器,单纯的IDEA就可以查看任何工程中文件的历史记录,但版本恢复时你可以很容易的将其恢复。
对重构的优越支持:IDEA是所有IDE中最早支持重构的,其优秀的重构能力一直是其主要卖点之一。
编码辅助:java规范中提倡的tostring(),hashcode(),equals(),以及所有的get/set方法,你可以不用进行任何的输入就可以实现代码的自动生成,从而把你从无聊的基本方法编码中解放出来。
灵活的排版功能:基本所有的IDE都有重排版功能,但仅有IDEA的是人性的,因为她支持排版模式的定制,你可以根据不同的项目要求采用不同的排版方式。
简洁易用的GUI界面。
与文件系统自动同步。
自定义的快捷键:强大的快捷键设置,基本可以让程序员离开鼠标工作。
动态语法检测:任何不符合java规范,自己预定义的规范,累赘都将在页面中加亮显示。
代码检查:对代码进行自动分析,检测不符合规范的,,存在风险的代码,并加亮显示。
对JSP的完全支持:不需要任何的插件,完全支持JSP。
智能编辑:代码输入过程中,自动补充方法或类。
EJB支持:不需要任何插件完全支持EJB。
列编辑模式:减少了很多很多的无聊重复工作,而IDEA完全支持该模式,从而更加提高了编码效率。
智能模板:预置模板可以让你把经常用到的方法编辑进模板,使用时你只用输入简单的几个字母就可以完成全部代码的编写。
完美的自动代码完成:智能检查类中方法,当发现方法名只有一个时自动完成代码输入,从而减少剩下代码的编写工作。
Ant 支持:不需要任何的第三方插件。
不使用代码检查:自动检查代码中不使用的代码,并给出提示,从而使代码更高效。
智能代码:自动检查代码,发现与预置规范有出入的代码给出提示,若程序员同意修改自动完成修改。
正则表达的查找和替换功能:查找替代支持正则表达,从而提高效率。
JavaDoc预览支持:支持JavaDoc的预览功能,在JavaDoc代码中ctrl+q显示JavaDoc的结果,从而提高doc文档的质量。
2.2 数据库
MySQL是一种开放源代码的关系型数据库管理系统,使用最常用的数据库管理语言结构化查询语言(SQL)于1998年1月发行第一个版本。MySQL(发音为”my ess cue el”,不是”my sequel”)是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言–结构化查询语言(SQL)进行数据库管理。
由于MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改。MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。
MySQL关系型数据库于1998年1月发行第一个版本。它使用系统核心提供的多线程机制提供完全的多线程运行模式,提供了面向C、C++、Eiffel、Java、Perl、PHP、Python以及Tcl等编程语言的编程接口(APIs),支持多种字段类型并且提供了完整的操作符支持查询中的SELECT和WHERE操作。
MySQL开发组计划于2001年中期公布MySQL4.0版本。在这个版本中将有以下新的特性被提供:新的表定义文件格式、高性能的数据复制功能、更加强大的全文搜索功能。在此之后,MySQL开发着希望提供安全的数据复制机制、在BeOS操作系统上的MySQL实现以及对延时关键字的定期刷新选项。随着时间的推进,MySQL将对ANSI 92/ANSI 99标准完全兼容。
3 系统结构分析
3.1 需求分析
近年来,酒店业迅猛发展,市场的竞争日趋激烈。全面提高酒店的软件管
理水准,已成为酒店业发展的当务之急。尤其是对于星级酒店,既需要完成前台的一些服务工作,还需要完成后台的管理工作。然而,传统的人工管理模式已经远远不能满足有效、快捷地处理经营中产生的大量信息数据的需要,从而使得企业决策层无法及时、准确地掌握一线资料,继而影响对市场进行正确地分析和预测。像沿海城市三星级以上酒店引进外方管理,使小部分酒店管理水准几乎接近或达到国际水平。但对广大中小型酒店来说是难以做到的。因此欲在竞争中甩开对手取得优势,必须在经营、管理、产品、服务等方面具备独到之处。而对酒店的经营状况起决定作用的是客房的管理。简单的服务标准已不是制胜的锦囊,只有管理做到最细微之处,才能让顾客体会到酒店服务的高标准、高质量,而准确、快速、周全往往就是最基本的成功要素。
传统的管理方法已经不能适应现代社会的需要。因此采用电脑管理业务、财务等诸多环节已成为推动酒店业迅速发展的先决条件,酒店管理系统是各大中小型酒店所需要使用的一个管理系统。
经过综合分析,确定了酒店管理系统管理员登陆与操作模块主要包括以下功能:
3.1.1 客户管理功能
(1)入住登记
此模块主要的实现功能是添加新的客户信息,即当有新的客户要入住本酒店时,可以通过此功能实现,当数据库中存在其新信息,即成为入住酒店的新客户。
入住本酒店的新客户。其中登记信息分别包括入住房间号、入住客户姓名、入住房间型号、入住房间的价格。同时可在此处实现入住客户信息的添加。
-
退房登记
此模块可以删除退房的客户和房间信息,把不再使用的房间释放出来供其他人使用,从而达到对hotel数据库中room表的清理,此处的删除途径为按房间号删除,输入退房的房间号即可删除其信息。
( 3 )查询入住情况
此模块就是实现对客户入住情况的查询,管理员可以了解到所住客户的所有信息,即已入住的房间号、入住客户姓名、入住房间型号、入住房间的价格。
( 4 )结算价格
此模块为输入所需要结算的房间号,然后控制台输出该房间号的价格,以此来结算此房间的价格。
3.1.2 餐饮管理功能
(1)订餐
此模块主要的实现功能是添加新的客户订餐信息,即当有新的客户要预定本酒店的餐饮,可以通过此功能实现,当数据库中存在其新信息,即客户订餐成功。其中信息分别包括所需订餐房间号、所需要订餐的食物号,此处的功能实现即添加订餐信息。
(2)取消订餐
此模块主要的实现功能客户取消订餐的时候,输入需要取消订餐的客户房间号,然后在控制台输出取消订餐成功。
(3)查询订餐情况
此模块主要可对所要了解的客户订餐信息。即把已经订餐的信息从数据库调出来,显示在控制台中。查询方式为按房间号查询。
-
结算餐饮价钱
此模块为输入所需要结算餐饮价钱的房间号,然后会在控制台输出此房间所订餐饮及其价格,最后结算它的价钱。
3.1.3 员工信息管理功能
(1)添加员工信息功能
此模块主要的实现功能是将新来的员工信息输入到酒店管理系统的员工表当中,其中主要按如下信息往员工表中输入。其中包括如下信息:员工工号、员工姓名、员工电话号码、员工年龄、员工地址。
(2)删除离职员工信息功能
此模块为将所要离职的员工的信息从员工表中删除。
-
修改员工信息
此模块可以修改有错的员工信息,或者是员工信息不全时使用此模块来补齐。
-
查询员工信息功能
在酒店管理系统中查询是最基本的功能,此模块属于员工信息的功能模块,可以查询所有员工的详细信息,将结果显示在控制台上面。可以根据查 询出来的信息检查是否有错,如果有错可以点击修改员工信息模块来修改员工信息。
3.2 功能模块图
(1)根据上述的功能,可以设计出系统的总体功能模块,如图3-1所示。
图3-1 酒店管理系统与登录界面操作模块功能示意图
-
“房间信息管理”功能模块用于入住登记、退房登记、查询入住情况、结算价格模块。其功能模块如图3-2所示。
图3-2 房间信息管理
(3)“餐饮信息管理”功能模块用于实现客户订餐功能,以及取消点餐时删除相关客户信息。其功能模块如图3-3所示。
图3-3 餐饮信息管理
-
“员工信息管理”功能模块用于添加、删除、修改和查询员工信息。其功能模块如图3-4所示。
图3-4 员工信息管理
本系统用户为系统管理员与前台工作人员,他们可以管理其他用户和员工的信息,在其他方面的权限相同。
3.3 系统运行环境
计算机一台;IntelliJ IDEA软件;My SQL软件。
4 系统总体设计
4.1. 详细设计
4.1.1 主界面
用户登陆系统时会出现登录界面,输入正确账号和密码就会进入酒店管理系统,用户可以选择要执行的操作,点击即可实现各功能模块相应的操作,登录界面如图4-1所示。
图4-1 登录界面
进入酒店管理系统后会出现主界面,如图4-2所示。
图4-2 主界面
4.1.2 房间信息管理模块功能实现
(1)入住登记
功能介绍:添加新的客户,使其能够出入酒店并且添加其信息到数据库中,输入其信息与所要入住的房间信息,输出已入住房间,已有客户入住房间不能再做入住登记,入住登记界面如图4-3所示。
图4-3 入住登记界面
(2)退房登记功能介绍:客户退房时删除其入住记录并且同时在数据库删除其订餐信息,退房登记界面如图4-4所示。
图4-4 退房登记界面
(3)查询入住情况
功能介绍:可以对数据库中已入住的客户信息进行查询。入住情况查询界面如图4-5所示。
图4-5 查询入住情况界面
(4)结算价格
功能介绍:结算房间的价格,输入房间号,输出价格。结算价格界面如图4-6所示。
图4-6 结算价格界面
4.1.3 餐饮信息管理模块功能实现
(1)订餐
功能介绍:此界面主要完成的功能是往数据库food表中添加客户订餐的记录,在food表中可查看最新的记录。订餐时输入所要订餐的房间号与食物号,即生成订餐记录,订餐界面如图4-7所示。
图4-7 订餐界面
(2)取消订餐
功能介绍:点击取消订餐即可输入所要取消餐饮的房间号和食物号,取消订餐界面如图4-8所示。
图4-8 取消订餐界面
(3)查询订餐情况
功能介绍:点击查询订餐情况就会输出已订餐饮的房间号和食物号,查询订餐情况界面如图4-9所示。
图4-9 查询订餐情况界面
(4)结算餐饮价格
功能介绍:点击结算餐饮价格后输入所要结算价格的房间号,就会输出其房间号、食物号和所对应的价格。结算餐饮价格界面如图4-10所示。
图4-10 结算餐饮价格界面
4.1.4 员工信息管理模块功能实现
(1)添加员工信息
输入要添加员工的工号,姓名,电话号码,年龄和地址,即可将其信息添加到数据库的Staff表中,添加员工信息界面如图4-11所示。
图4-11 添加员工信息界面
(2)删除离职员工信息
输入所要删除的员工工号,即可在数据库中Staff表中删除该员工的信息,删除离职员工信息界面如图4-12所示。
图4-12 删除离职员工信息
(3)修改员工信息
输入所要修改后的员工信息,最后输入要修改的员工的工号即可确定要修改数据的员工,最后会在数据库中Staff表中修改号该员工的信息,修改员工信息界面如图4-13所示。
图4-13 删除离职员工信息
(4)查询员工信息
点击查询员工信息会在控制台输出员工的所有信息,查询员工信息界面如图4-14所示。
图4-13 删除离职员工信息
4.2 数据库设计
4.2.1 概念结构设计
根据需求分析抽象出信息结构,可得该系统的E-R图。E-R图如图4-14所示。
图4-14 系统E-R图
4.2.2 逻辑结构设计
根据上述的概念结构设计出逻辑结构,将E-R图转换为关系模型。
数据库hotel包含以下5个表:房间信息表room、餐饮信息表food、菜单信息表order、员工信息表staff。
(1)房间信息表room
用来存放客户房间号,客户姓名,房间型号,房间价格等信息。表room的结构如表4-1所示。
表4-1 客户房间的结构
编号 |
字段名称 |
数据结构 |
说明 |
1 |
Rno |
int |
记录房间号 |
2 |
Pname |
char(10) |
记录客户姓名 |
3 |
Rsize |
char(10) |
记录房间型号 |
4 |
Price |
int |
记录房间价格 |
(2)餐饮信息表food,表food的结构如表4-2所示。
表4-2 餐饮信息的结构
编号 |
字段名称 |
数据结构 |
说明 |
1 |
Rno |
int |
记录订餐房间号 |
2 |
Fno |
int |
记录订餐食物号 |
-
菜单信息表order,表order的结构如表4-3所示。
表4-3 菜单信息的结构
编号 |
字段名称 |
数据结构 |
说明 |
1 |
Fname |
Varchar(10) |
记录食物名 |
2 |
Fno |
int |
记录食物号 |
3 |
Price |
int |
记录食物价格 |
-
员工信息表staff,表staff的结构如表4-4所示。
表4-4 员工信息的结构
编号 |
字段名称 |
数据结构 |
说明 |
1 |
Sno |
Char(9) |
记录员工工号 |
2 |
Sname |
Varchar(10) |
记录员工姓名 |
3 |
Sphone |
char(11) |
记录员工电话号码 |
4 |
Sage |
tinyint |
记录员工年龄 |
5 |
Saddress |
Varchar(20) |
记录员工地址 |
本系统将用户划分为系统管理员和员工。系统管理员可以管理其他用户的信息,在其他方面的权限相同。
4.2.3 数据库表的建立
本次课程设计使用的是My SQL数据库,可以在hotel数据库里面创建表。
-
使用企业管理其创建创建表room,其创建过程如图4-15所示
图4-15 创建表room
-
使用企业管理其创建创建表food,其创建过程如图4-16所示
图4-16 创建表food
-
使用企业管理其创建创建表order,其创建过程如图4-16所示
图4-17 创建表order
-
使用企业管理其创建创建表staff,其创建过程如图4-16所示
图4-18 创建表staff
5 系统实现
5.1 数据库的连接
本实验连接使用纯Java方式连接MySQL数据库,以下为连接数据库的语句:
//获取与数据库之间的连接
String user = “root”;
String password = “root”;
String url = “jdbc:mysql://localhost:3306/hotel”;
con = DriverManager.getConnection(url, user, dbpassword);
//创建发送sql语句的Statement对象
Statement sta = con.createStatement();
//发送sql语句,并用ResultSet类型的对象保存查询的数据行
ResultSet rs=sta.executeQuery(sql);
5.2 系统功能模块设置
在该系统中点击相应的菜单项会出现对应得时间并且在控制台操作输入输出,
输入输出界面如下图所示:
图5-1 入住登记界面
图5-2 退房登记界面
图5-3 查询入住情况界面
图5-4 结算房间价格界面
图5-5 订餐界面
图5-6 取消订餐界面
图5-7 查询订餐情况界面
图5-8 结算餐饮价格界面
图5-9 添加员工信息界面
图5-10 删除离职员工界面
图5-11 修改员工信息界面
图5-12 查询员工信息界面
结 论
通过这次实践,使我灵活应用所学知识,独立完成问题分析,结合Java理论知识,编写程序解决指定问题。初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;提高综合运用所学的理论知识和方法独立分析和解决问题的能力。同时在这次实践中,培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。 然而,在这次实践中,我觉得一个人完成一个项目是多么的艰难,在一些大型的项目中,团队合作是多么重要。尽管这次只是一个小项目,却也要耗费大量的精力。 我学习了知识,也培养了实践能力,让我知道遇到一个问题,如何去寻找思路,如何去解决问题,最终完成整个事情。 学习的过程中不可避免的遇到问题,这些问题有的只是一个符号错了,一个括号少了,这类的问题在他的文档,或者一般的网站上就能够找到,尤其是初学者的问题,不会是很难的问题 ,在你之前已经无数人问过了,不要害怕提问,但是这个问题最好是你找不到答案的时候去提。等你走出了这个阶段,这个时候在有问题可能就是比较难一些的,这个时候在一般的网站上应该是难以找到结果的,包括Java自己的网站,为你养成良好的习惯有很大的帮助。
在程序中我主要用了awt包和swing包,界面排版主要用frame来实现,页面位置、大小是通过设置setbounds来控制的。不但成功的连接了MySQL数据库,也成功实现了很多功能:在里面设置了很多功能仔细研究下终于改正了错误,使此功能终于可以正常使用了。
最后再次衷心感谢在课程设计过程中给予我帮助的老师和同学们,他们的帮助不仅使我开阔了视野,拓宽了思路,增长了学识,为我今后的学习打下了牢固的基础,也使我们增强了对系统开发的兴趣,特别是Java语言的系统开发。
参考文献
[1] 段新娥,贾宗维,JAVA 程序设计教程[M].人民邮电出版社,2013.
[2] 刘艺,Java程序设计大学教程[M].北京:机械工业出版社,2006.
[3] 张思民,JAVA程序设计实践教程[M].第一版.北京:清华大学出版社,2006.
[4] 耿祥义,JAVA实用教程[M].第二版.北京:清华大学出版社,2006.
[5] 耿祥义,JSP基础编程[M].清华大学出版社,2004.
[6] Julia Case Bradley,JAVA程序设计教程[M].北京:电子工业出版社, 2003.
[7] 王珊,数据库系统概论[M]第四版.北京:高等教育出版社, 2008.
源文件:
首先是一个包含main方法的主类,用来设置密码界面,输入正确的密码和账号即可登录进去管理系统界面。
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class InterFace {
public static void main(String[] args) {
new InterFace();
}
public InterFace() {
JFrame jFrame = new JFrame("登录界面");
jFrame.setLayout(new FlowLayout());
JLabel jLabel1=new JLabel("账号");
JTextField jTextField=new JTextField(10);
JLabel jLabel2=new JLabel("密码");
JPasswordField jPasswordField=new JPasswordField(10);
JButton ok=new JButton("确定");
jFrame.add(jLabel1);
jFrame.add(jTextField);
jFrame.add(jLabel2);
jFrame.add(jPasswordField);
jFrame.add(ok);
ok.addActionListener(new ActionListener() {//给确定按钮添加事件
@Override
public void actionPerformed(ActionEvent e) {
String jtext=jTextField.getText();//得到账号
char[] ch=jPasswordField.getPassword();//得到密码
String jpass=new String(ch);//得到的密码转成String类型
if (jtext.equals("1111") & jpass.equals("root")){//判断密码是否正确
System.out.println("密码正确,进入酒店管理系统");
new SystemDemo();
}else{
JDialog dialog=new JDialog(jFrame,"账号或者密码错误!",true);
dialog.setBounds(750,450,300,50);
dialog.setVisible(true);
jTextField.setText("");
jPasswordField.setText("");
}
}
});
jFrame.setVisible(true);
jFrame.setBounds(600,400,600,250);
// jFrame.setDefaultCloseOperation(jFrame.EXIT_ON_CLOSE);
}
}
系统界面类,输入正确的账号和密码即可进入。
package Face;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
import java.util.Scanner;
//登录进去的界面,菜单条里面有三个菜单,分别为房间信息,订餐信息和工作人员信息
class SystemDemo {
public SystemDemo() {
JFrame jFrame = new JFrame("酒店管理系统");
//房间的菜单项
JMenuItem ItemAdd1 = new JMenuItem("入住登记");
JMenuItem ItemOut = new JMenuItem("退房登记");
JMenuItem ItemQuery1 = new JMenuItem("查询入住情况");
JMenuItem ItemCalculate1 = new JMenuItem("结算价格");
//订餐的菜单项
JMenuItem ItemOrder = new JMenuItem("订餐");
JMenuItem ItemCancel = new JMenuItem("取消订餐");
JMenuItem ItemQuery2 = new JMenuItem("查询订餐情况");
JMenuItem ItemCalculate2 = new JMenuItem("结算餐饮价钱");
//工作人员的菜单项
JMenuItem ItemAdd3 = new JMenuItem("添加员工信息");
JMenuItem ItemDelete = new JMenuItem("删除离职员工信息");
JMenuItem ItemUpdate = new JMenuItem("修改员工信息");
JMenuItem ItemQuery3 = new JMenuItem("查询员工信息");
//设置三个菜单
JMenu MenuRoom = new JMenu("房间信息");
JMenu MenuFood = new JMenu("餐饮信息");
JMenu MenuStaff = new JMenu("员工信息");
//把房间的相关信息添加到房间的菜单项中
MenuRoom.add(ItemAdd1);
MenuRoom.add(ItemOut);
MenuRoom.add(ItemQuery1);
MenuRoom.add(ItemCalculate1);
//把订餐的相关信息添加到餐饮的菜单项中
MenuFood.add(ItemOrder);
MenuFood.add(ItemCancel);
MenuFood.add(ItemQuery2);
MenuFood.add(ItemCalculate2);
//把员工的相关信息添加到员工信息的菜单项中
MenuStaff.add(ItemAdd3);
MenuStaff.add(ItemDelete);
MenuStaff.add(ItemUpdate);
MenuStaff.add(ItemQuery3);
//添加事件
listener lis = new listener();
ItemAdd1.addActionListener(lis);
ItemOut.addActionListener(lis);
ItemQuery1.addActionListener(lis);
ItemCalculate1.addActionListener(lis);
ItemOrder.addActionListener(lis);
ItemCancel.addActionListener(lis);
ItemQuery2.addActionListener(lis);
ItemCalculate2.addActionListener(lis);
ItemAdd3.addActionListener(lis);
ItemDelete.addActionListener(lis);
ItemUpdate.addActionListener(lis);
ItemQuery3.addActionListener(lis);
//设置菜单栏
JMenuBar jMenuBar = new JMenuBar();
//把三个菜单项添加到菜单栏
jMenuBar.add(MenuRoom);
jMenuBar.add(MenuFood);
jMenuBar.add(MenuStaff);
jFrame.add(jMenuBar);
jFrame.setVisible(true);
//jFrame.pack();
jFrame.setBounds(600, 400, 600, 150);
jFrame.setDefaultCloseOperation(jFrame.EXIT_ON_CLOSE);
}
public class listener implements ActionListener {
@Override
public void actionPerformed(ActionEvent event) {
Scanner sc = new Scanner(System.in);
Connection con = null;
Statement sta = null;
ResultSet rs = null;
try {
//连接数据库
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/hotel";
con = DriverManager.getConnection(url, "root", "root");
sta = con.createStatement();
} catch (Exception e) {
System.out.println("连接数据库失败");
}
String s = event.getActionCommand();
try {
switch (s) {
case "入住登记":
rs = sta.executeQuery("select Rno from Room");
while (rs.next()) {
System.out.print(" 已入住房间:" + rs.getInt("Rno"));
}
System.out.println();
String sql = "insert into Room values(?,?,?,?)";
PreparedStatement p1 = con.prepareStatement(sql);
System.out.println("输入房间号101~210,入住客户,房间型号(小,中,大),价格(100,150,200):");
p1.setInt(1, sc.nextInt());
p1.setString(2, sc.next());
p1.setString(3, sc.next());
p1.setInt(4, sc.nextInt());
p1.executeUpdate();
System.out.println("入住登记成功");
break;
case "退房登记":
String sql2 = "delete from Room where Rno=?";
PreparedStatement p2 = con.prepareStatement(sql2);
System.out.println("输入退房的房间号:");
int DRno = sc.nextInt();
p2.setInt(1, DRno);
p2.executeUpdate();
System.out.println("退房登记成功");//退房时会同时在数据库中删除该房间所订餐饮的记录
break;
case "查询入住情况":
System.out.println("目前入住情况:");
rs = sta.executeQuery("select * from Room");
while (rs.next()) {
System.out.println("房间号:" + rs.getInt("Rno") + "t入住客户:" +
rs.getString("Pname") + "t房间型号:" +
rs.getString("Rsize") +
"t价格:" + rs.getInt("Price"));
}
break;
case "结算价格":
System.out.println("输入所结算房间价格的房间号:");
int n = sc.nextInt();
sta=con.createStatement();
rs= sta.executeQuery("select Price from Room where Rno='"+n+"'");
while(rs.next()){
System.out.println("房间价格为:"+rs.getString("Price"));
}
break;
case "订餐":
String sql5 = "insert into Food values(?,?)";
PreparedStatement p5 = con.prepareStatement(sql5);
System.out.println("输入点餐客户房间号和食物号:");
p5.setInt(1, sc.nextInt());
p5.setInt(2, sc.nextInt());
p5.executeUpdate();
System.out.println("点餐成功");
break;
case "取消订餐":
String sql6 = "delete from Food where Rno=? and Fno=? ";
PreparedStatement p6 = con.prepareStatement(sql6);
System.out.println("输入取消订餐的房间号和食物号:");
p6.setInt(1, sc.nextInt());
p6.setInt(2, sc.nextInt());
p6.executeUpdate();
System.out.println("取消订餐成功");
break;
case "查询订餐情况":
System.out.println("目前的订餐情况为:");
rs = sta.executeQuery("select * from Food");
while (rs.next()) {
System.out.println("房间号:" + rs.getInt("Rno") + "t所订食物 号:"+rs.getInt("Fno"));
}
break;
case "结算餐饮价钱":
System.out.println("输入需要结算餐饮的房间号:");
int FoodPrice = sc.nextInt();
sta=con.createStatement();
rs= sta.executeQuery("SELECT Rno,food.Fno,Pricen" +"from Food,`order`n" +"where Rno='"+FoodPrice+"' and food.Fno=`order`.Fno" );
System.out.println("所需结算餐饮的房间号、食物号和价格为:");
while(rs.next()){
System.out.println("房间号:"+rs.getInt("Rno")+
"t食物号:"+rs.getInt("Fno")+
"t食物价格:"+rs.getString("Price"));
}
break;
case "添加员工信息":
String sql10 = "insert into Staff values(?,?,?,?,?)";
PreparedStatement p10 = con.prepareStatement(sql10);
System.out.println("输入要添加员工的工号,姓名,电话号码,年龄和地址:");
p10.setString(1, sc.next());
p10.setString(2, sc.next());
p10.setString(3, sc.next());
p10.setInt(4, sc.nextInt());
p10.setString(5, sc.next());
p10.executeUpdate();
System.out.println("添加成功");
System.out.println("现有员工信息:");
rs = sta.executeQuery("select * from Staff");
while (rs.next()) {
System.out.println("工号:" + rs.getString("Sno") + "t姓名:" +
rs.getString("Sname") + "t电话号码:" +rs.getString("Sphone") +"t年龄:" + rs.getInt("Sage") + "t地址:" +rs.getString("Saddress"));
}
break;
case "删除离职员工信息":
String sql11 = "delete from Staff where Sno=? ";
PreparedStatement p11 = con.prepareStatement(sql11);
System.out.println("输入离职员工的工号:");
p11.setInt(1, sc.nextInt());
p11.executeUpdate();
System.out.println("删除成功,现有的员工信息:");
rs = sta.executeQuery("select * from Staff");
while (rs.next()) {
System.out.println("工号:" + rs.getString("Sno") + "t姓名:" +rs.getString("Sname") + "t电话号码:" +rs.getString("Sphone") +"t年龄:" + rs.getInt("Sage") + "t地址:" +rs.getString("Saddress"));
}
break;
case "修改员工信息":
String sql12 = "update Staff set Sname=?,Sphone=?,Sage=?,Saddress=? where Sno=?";
PreparedStatement p12 = con.prepareStatement(sql12);
System.out.println("输入修改后的员工姓名,电话号码,年龄和地址和所需修改的员工的工号:");
p12.setString(1, sc.next());
p12.setString(2, sc.next());
p12.setInt(3, sc.nextInt());
p12.setString(4, sc.next());
p12.setString(5, sc.next());
p12.executeUpdate();
System.out.println("修改成功,修改后的所有员工信息:");
rs = sta.executeQuery("select * from Staff");
while (rs.next()) {
System.out.println("工号:" + rs.getString("Sno") + "t姓名:" + rs.getString("Sname") + "t电话号码:" +
rs.getString("Sphone") + "t年龄:" + rs.getInt("Sage") + "t地址:" + rs.getString("Saddress"));
}break;
case "查询员工信息":
System.out.println("现在的所有员工信息为:");
rs = sta.executeQuery("select * from Staff");
while (rs.next()) {
System.out.println("工号:" + rs.getString("Sno") + "t姓名:" +
rs.getString("Sname") + "t电话号码:" + rs.getString("Sphone") +
"t年龄:" + rs.getInt("Sage") + "t地址" + rs.getString("Saddress"));
}
break;
}
} catch (Exception e2) {
e2.printStackTrace();
} finally {
try {
if (con != null)
con.close();
if (sta != null)
sta.close();
if (rs != null)
rs.close();
} catch (Exception exception) {
exception.printStackTrace();
}
}
}
}
}