Eclipse酒店管理系统java.doc
word目录摘要- 3 -1 序言- 5 -1.1 目的- 5 - 定义- 5 -2 需求分析- 6 -需求分析报告- 6 -数据流图- 6 -4 数据库的逻辑设计- 9 -5 系统设计- 9 -用户身份验证模块- 9 -酒店管理模块- 9 -菜品管理- 9 -菜系管理- 9 -台号管理- 9 -5.3.4结账查询- 9 -用户管理与密码模块- 9 -5.订单管理模块- 9 -6 系统的实现与调试- 9 -系统的实现- 9 -系统的调试- 9 -7 小结- 9 -系统的功能- 9 -系统的特点- 9 -系统开发过程的特点- 9 -存在的问题与改良方向- 9 -自我体会- 9 -参考文献- 9 -附录- 9 -附录:核心代码- 9 -摘 要随着旅游业的开展,酒店、餐饮娱乐行业日趋兴旺,引入全方位的电脑服务和电脑管理日渐成为必要。据调查,在酒店和餐厅娱乐业引入电脑服务和管理后明显取得了优良的经济效益和社会效益。 以往传统的酒店管理往往令管理者花大量的时间来处理顾客投诉,例如错误查询、琐的登记和结帐手续、旅客费用计算错误、空余客房资料不能与时提供等,影响出租率。以上问题可以通过电脑系统辅助一一解决。 酒店管理的电脑化,不仅是表现酒店现代化形象的一个重要标志 ,而且对提高员工工作效率,让管理层有时间集中精力规划管理、制定运作策略和实施决策,加速资金周转、降低各项本钱以与改善服务质量都有十分积极的作用。因此为了提高住房出租效率,提升服务管理质量,规X酒店星级管理工作,建立起用户和旅游需求的桥梁,为旅游业的扩展提供优质的物质保证,使资源合理配置,也缓解旅游住宿压力,培育良好的客户群体,根据酒店管理业务实际情况,进展此系统的开发。1 序言1.1 目的针对目前酒店电子化管理的实际需求,和消费客户对跨时域地域预订住宿的要求,本需求分析定义的开发酒店管理系统的总体要求是:作为两类用户一般客户和酒店管理人员和软件开发员互相了解的根底,系统成品提供用户登录、查询、管理员后台管理等四大功能服务。系统开发目的:对内是为了使酒店管理更加便捷、高效,员工操作更加明晰、规X,大大提高酒店管理质量。对外是能让用户自助登录、查询酒店住房信息和酒店服务、实现零距离实时预定酒店房间,为客户提供舒心的出行住宿保证,提高社会效益。本需求分析包含了初步分析设计各功能模块、提供性能要求、对用户影响的信息、以与对各功能模块功能的描述;同时也是规X开发人员进展设计和部署实施的根底和依据,为整体工作组的工作流程做出明确指导,引导工作组员之间、工作组员与用户之间的沟通。最终作为总体审核、验证、确认和结项验收的依据;为开发方与客户方提供合法的合同保障。定义DrinkeryManageT店管理系统2 需求分析酒店管理系统是面向酒店的的各项事务,包括酒店管理,订单管理、菜系管理等业务处理工作,是利用计算机进展集中管理而开发的系统。该系统是基于Eclipse连接SQL Server2005数库进展开发的酒店管理系统,力求与实际相结合具有查询、管理等功能,在达到使酒店的管理和运营趋于计算机化,使之更加方便、快捷以提高工作效率。主要包括五大管理模块:1)登录管理提供用户登录、注销等功能l 用户登录 l 用户退出2) 菜品管理用户可以对菜名、菜品、单位、助记符等进展查询、修改、添加、删除操作。l 名称l 单位l 助记符 3菜系管理 用户可以对酒店内的所有菜系进展查询、修改、添加、删除操作。l 菜系名称4台号管理 用户可以对酒店内的所有的台号进展查询、修改、添加、删除操作。l 台号l 座位数5结账管理操作员可以对系统的使用者以与该系统中数据库里的多X表中数据项进展查询操作l 日结账l 月结账l 年结账6用户管理 操作员可以进展查询、添加、删除用户信息等操作,并可以修改自己的用户密码l 修改密码l 用户管理7菜单管理当前操作员可以进展开单、签单、取消等操作,并进展金额结账l 开单签单l 金额结账酒店管理系统管理人员客户 客户信息 管理人员信息收银信息 系统管理菜单信息 图1.顶级数据流图前台数据数据后台客户订餐数据图2.第二层流程图3 数据库概念设计在酒店管理系统中,存在菜品、菜系、台号、定单、用户等几个对象实体,以菜品、菜系、台号、定单以与用户这几个对象为例,一个定单对应多个菜品,同时一个菜品只能属于一个菜系;一个定单中有多个菜系,一个菜系拥有多个菜品。一个定单对应一个操作员,一个操作员只能对应一个定单;一个定单对应一个台号,一个台号只能对应一个定单。1上述分析对应的实体-属性图如下所:编号菜品菜名助记符单位单价类型图3.1菜品菜系名编号菜系图3.2菜系座位数台编号台号图3.3 台号操作员编号订购时间总金额编号台号订单图3.4 订单账单号数量编号金额订单号积菜品单图3.5 菜品单用户用户名日期筑面积积权限用户号性别卡号高密码 图3.6 用户2实体-联系图如下:用户1签单n涉与n11对应订单菜品单台号涉与涉与nnn菜品拥有菜系图3.8 实体-联系图4 数据库的逻辑设计E-R模型所表示的全局概念结构,是对用户数据需求的一种抽象表示形式,它独立于任何一种数据模型。为了实现用户的需求,必须将概念结构进一步转化为与我们选用的具体的机器上DBMS产品所支持的数据模型相符合的逻辑结构,这就是数据库逻辑设计的任务。首先要实现的是E-R模型向关系模型的转换,将E-R模型转换为关系模型实际上就是要将实体、实体的属性和实体间的联系转换为关系模式的过程。这种转换一般遵循如下规如此:(1) 对于实体类型的转换:将每个实体类型转换成一个关系模式,实体的属性为关系模式的属性,实体的码即为关系模式的码。(2) 对于实体间联系的转换,根据三种不同情况作出不同的处理: 假如实体间的联系是1:1,可以在两个实体类型转换成的两个关系模式中的任意一个关系模式的属性中参加另一个关系模式的码和联系的属性。 假如实体间的联系是1:N,如此在N端实体类型转换成的关系模式中参加1端实体类型转换成的关系模式的码和联系的属性。 假如实体间的联系是N:M,如此将联系类型也转换成关系模式,其属性为两端实体类型的码加上联系类型的属性,而关系的码如此为两端实体的码的结合。 通过以上所述原如此,由E-R图转换得到如下的关系模式表4.1 系统中所用到的根本信息表与用途表名用途Tb_desk台号Tb_menu菜品Tb_order_form订单Tb_order_item菜品单Tb_sort菜系Tb_user用户表4.2台号根本信息表(Tb_desk)表4.3菜品信息表Tb_menu表4.4订单信息表(Tb_order_form)表4.5菜品单信息表(Tb_order_item)表4.6菜系信息表Tb_sort表4.7用户信息表(Tb_user)5 系统设计在本章中,我将就小区管理中各个模块做一些介绍,从系统的预览中可以看到各个模块的设计风格是一样的,都是由一个框架页面来实现的。在这我具体来就几个重点模块进展说明。用户管理修改密码月结账日结账座位数台号菜系名称菜系编号助记符单位名称用户退出用户登录结账管理台号管理菜系管理菜品管理登录管理系统登录金额结账开单签单用户管理菜单管理图5.1 功能结构图登录名和密码由系统管理员授予给用户,一般用户有查询、插入、更新、删除的权力,而管理员不仅拥有这些权力,还有添加删除用户、密码维护等权力。在如下列图的界面登录。选择下拉框,并输入密码。5.3 酒店管理模块在登录后出现的界面,上方是签单列表、开台列表,中间横条可输入进展开单签单操作,左下方显示时间和操作员,接着有消费金额、实收金额、找零金额, 右下方有菜品管理、菜系管理、台号管理、日结账、月结账、年结账,修改密码、用户管理、退出系统 九个图标,点击如此进入相应模块。菜品管理菜品管理界面为酒店管理模块的菜名界面, 此界面可以查看、添加和删除菜品资料。菜系管理此界面可以查看菜系信息,并对菜系信息进展修改、删除、添加。在删除相应记录时,只需选择相应记录,点击删除按钮即可进入删除界面,点击确认,即可提交。台号信息此界面可以查看台号信息,并对台号信息进展修改、删除、添加。在删除相应记录时,只需选择相应记录,点击删除按钮即可进入删除界面,点击确认,即可提交。图5.5 楼宇概况日结账、月结账、年结账查询此界面可以查询所有的菜单信息,在下拉框选择年、月、日,即可查询相应的日、月、年的所有消费记录。用户管理与密码模块点击用户管理,即可进入用户管理模块。本模块包括用户根本信息、密码信息。用户根本信息提供操作员信息的查询功能,添加、删除用户信息。在密码修改区可更改当前用户的密码。订单管理模块在此模块,当前操作员可以选择台号、输入菜单信息,进展开单、签单操作。签单后,消费金额显示当前金额,在实收金额输入正确金额大于等于实收金额,找零金额显示应找金额。6 系统的实现与调试 在经过需求分析、概念设计、逻辑设计、系统设计四个阶段后,接下来要做的是系统的实现。 1.确定你的SQL SERVER2005的用户登录名和密码,在代码JDBC.java中修改好相应的信息。 2.打开SQL SERVER2005,在对象资源管理器中附加db_DrinkeryManage数据库。开发一个系统,调试是一个必不可少的环节,也是一个非常重要的环节。系统测试是系统开发中比拟重要而耗时的过程,是系统能否成功运行的保证之一。通过测试可以发现系统中存在的错误和漏洞,所以测试过程必须认真慎重严格对待。测试的方法分为两种:人工测试和机器测试。机器测试又分为:黑盒测试和白盒测试。人工测试分为:个人复查、走查、会审。人工测试只用个人复查。由于本系统并不是真正要应用到实际当中,本人的精力和时间有限,只能进展个人测试。在测试系统过程中,遇到不正确或不理想的地方时,给予修改。7 小结7.1 系统的功能较为完整的星级酒店管理软件应该覆盖酒店的整个管理自动化系统,包含结账管理、账单管理、住房管理、餐饮管理、KTV等服务功能。而本酒店管理软件主要包含与订单相关的结账管理、账单管理、菜类管理。下面具体说明酒店管理软件一般包括的模块功能:1) 用户登录模块用户身份验证模块实现用户合法性检查,把用户名以与密码保存到数据库表中,而在后面的页面中通过读取用户信息来登陆。在这个模块中还提供用户提出的功能2) 菜品管理模块在菜品管理模块里主要包括了对菜品信息的查询,添加、删除功能。有编号、菜名称、助记符、单位、价格等信息。3) 菜系管理模块菜系管理模块主要提供的是查看,添加,删除菜种类的根本信息。4) 台号管理模块台号管理模块主要提供的是对酒店内的台号的根本信息进展查看,添加和删除操作。有台号、座位数相关信息。5) 结账管理模块操作员可以对系统的使用者以与该系统中数据库里的多X表中数据项进展查询操作。有日结账、月结账、年结账。6)用户管理模块操作员可以进展查询、添加、删除用户信息等操作,在密码修改区可更改当前用户的自己的登录密码。7)菜单管理模块结账管理模块包括开单列表、开台列表、金额收结。在此模块,当前操作员可以选择台号、输入菜单信息,进展开单、签单操作。签单后,消费金额显示当前金额,在实收金额输入正确金额大于等于实收金额,找零金额显示应找金额。7.2 系统的特点单机界面,各个模块中框架结构相似。灰色,以绿色和红色作为辅色。3.本系统提供密码登录,未授予登录名和密码的用户无法登录。4.代码维护简单。本系统提供了代码维护功能,可以修改代码。5.系统数据库中的表数据简洁,冗余度低,效率高。6. 用户有查询、插入、更新、删除的权力,还有添加删除用户、密码维护等权力。7.3 系统开发过程的特点1 本系统的整个开发过程由三人完成,以课程设计的方式提交。2 本系统的开发工具为Eclipse+SQL Server2005,开发系统速度快,但功能上受到限制。3 由于自学开发系统,开发本系统是一个不断学习、不断进步的过程,直到系统验收那一刻前,我们都一直在作修改。7.4 存在的问题与改良方向我开发的酒店管理系统是按照用Swing+SQL SERVER 开发的酒店管理系统模板做的,而我是用Eclipse+SQL SERVER20005开发,在实现系统功能上受到了一定的限制。其次,一个系统存在问题在所难免,何况我们需要在短时间内自学Eclipse和Java,提交系统。本系统存在的问题如下:1. 在界面登录时,如果用户或密码输入错误,在点击登录按钮会出现卡死的问题,以任务管理器完毕进程。2. 在提供查询功能时,做到了准确定位,没有提供模糊查询。模糊查询只需将条件改成like,再加上通配符就可以了。选择准确定位还是模糊查询取决于实际需求。对于本系统而言,由于操作员熟悉酒店业务情况,提供准确定位功能,效率会更高。3. 有时不当操作会清空三X表:tb_user 、tb_order_item 、tb_order_form,所有需时常做好数据备份。7.5 自我体会汪伟1010431014:本次课程设计收获良多。从初期的无从下手,到现在较完整完成数据库课程设计。中间遇到了很多问题,也解决了很多问题。感觉在解决问题的过程中,我在一步步成长,在一点点积累知识。学习Java语言,看Eclipse教学视频,学习SQL Server2005。边学边做,期间挡在面前的很多问题,都需要自己去弄懂、学习,百度、谷歌都是自己理解问题、解决问题的途径。到最终的成品出来,这也是对自己的一次肯定。对以后的课程设计与毕业设计,本次实践有着不可替代的意义,相信自己在以后的项目开发过程中都会有着良好的习惯,能学到更多的东西。以下摘取些遇到的问题与解决:1、 将eclipse连接到SQL Server:详细步骤见Eclipse连接SQL+Server+2005数据库 文档2、 Exception in thread "main" .microsoft.sqlserver.jdbc.SQLServerException: 无法打开登录所请求的数据库 "db_DrinkeryManage"。登录失败。 ClientConnectionId:f194c087-3b95-4d59-a0f2-fccd5d0bec8b解决:URL="jdbc:sqlserver:/localhost:1433;DatabaseName=db_DrinkeryManage"USERNAME = "sa"PASSWORD = "q"3、 Load CONFIG.INI is false!界面排版:对于尺寸、分割、边框,需要安排好整个界面大小与各个块的大小徐怀群1010431120:做了本学期的课程设计,有很多有关于数据库方面的心得体会。在同学的相互合作下,终于把整个系统完成了,实现了预定的功能,SQL语言与java语言没学扎实,一开始的程序这块儿就要令我抓狂了。后来在几天几夜的努力,终于有了头绪,然后又在同学的帮助下,找到了一些参考书,又在这写书的帮助下了解了系统设计的各种方法,在编译过程中常常出现的问题,和解决的方法。没想到这项看起来不需要多少技术的工作却是非常的劳心劳力。我看到有很多人跟我一样,都他们是三三两两,一同讨论学习。当我想放弃的时候,我也这么对自己说,即使你做出来的是次品甚至不合格品,但是你一定要拿出来一件成品。一个学期后我们的程序终于完成了,而且放到一起也能用。在机房调试虽然出现了一些问题,但都解决了。最后,我发现自己对编程竟然也有了一点兴趣。王乾坤1010431124:一学期的时间很快就过去了,这学期不敢说自己有多大进步,获得了多少知识,但起码是了解了项目开发的局部过程。虽然学习了数据库相关课程,但没有亲身经历数据库开发的相关工作,这次课程设计给了一次很好的锻炼机会。从各种文档的阅读到开始需求分析,概念结构设计,逻辑结构设计,物理结构设计,亲身体会了一次系统开发的过程,在这个过程中我们深刻理解所学的知识,同时也可以学到很多可实用的东西。我们学习并运用了sql语言,对数据库的创建,修改,删除方法有了一定的了解,学会了对表的一些操作。很多事情不是想象的那么简单,它涉与各种实体,属性,数据流程,数据处理等等,不论做什么,我们都应该相信自己,不怕困难,努力尝试。参考文献1.王珊,萨师煊.数据库系统概论.:高等教育,2006,52.印晏.Java语言与面向对象程序设计.:清华大学,2000,93.X峰.Java程序设计与项目实战.:清华大学,2011,84.陈刚.Eclipse从入门到精通M:清华大学,20065.SQL Server 2005.:清华大学,2006附录附录:核心代码1连接数据库publicclass JDBC privatestaticfinal String DRIVERCLASS = ".microsoft.jdbc.sqlserver.SQLServerDriver"privatestaticfinal String URL = "jdbc:sqlserver:/localhost:1433;DatabaseName=db_DrinkeryManage"privatestaticfinal String USERNAME = "sa"privatestaticfinal String PASSWORD = "q"privatestaticfinal ThreadLocal<Connection> threadLocal = new ThreadLocal<Connection>();static / 通过静态方法加载数据库驱动try Class.forName(DRIVERCLASS).newInstance();/ 加载数据库驱动 catch (Exception e) e.printStackTrace();publicstatic Connection getConnection() / 创建数据库连接的方法Connection conn = threadLocal.get();/ 从线程中获得数据库连接if (conn = null) / 没有可用的数据库连接try conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);/ 创建新的数据库连接threadLocal.set(conn);/ 将数据库连接保存到线程中 catch (SQLException e) e.printStackTrace();return conn;publicstaticboolean closeConnection() / 关闭数据库连接的方法boolean isClosed = true;Connection conn = threadLocal.get();/ 从线程中获得数据库连接threadLocal.set(null);/ 清空线程中的数据库连接if (conn != null) / 数据库连接可用try conn.close();/ 关闭数据库连接 catch (SQLException e) isClosed = false;e.printStackTrace();return isClosed;publicclass Dao extends BaseDao privatestatic Dao dao;static dao = new Dao();publicstatic Dao getInstance() returndao;/ tb_userpublicVector sUser() return selectSomeNote("select name,sex,birthday,id_card,freeze from tb_user where freeze='正常'");publicVector sUserNameOfNotFreeze() return selectSomeValue("select name from tb_user where freeze='正常'");publicVector sUserByName(String name) return selectOnlyNote("select * from tb_user where name='" + name + "'");publicboolean uPasswordByName(String name, String password) returnsuper.longHaul("update tb_user set password='" + password+ "' where name='" + name + "'");publicboolean uFreezeByName(String name, String freeze) returnsuper.longHaul("update tb_user set freeze='" + freeze+ "' where name='" + name + "'");publicboolean iUser(String values) String sql = "insert into tb_user(name,sex,birthday,id_card,password,freeze) values('"+ values0+ "','"+ values1+ "','"+ values2+ "','"+ values3 + "','" + values4 + "','" + values5 + "')"System.out.println(sql);return longHaul(sql);/ tb_order_formpublicVector sOrderFormOfDay(String date) return selectSomeNote("select * from tb_order_form where datetime between '"+ date + " 00:00:00' and '" + date + " 23:59:59'");public String sOrderFormOfMaxId() Object object = selectOnlyValue("select max(num) from tb_order_form");if (object = null) returnnull; else return object.toString();public String sOrderFormOfMinDatetime() Object object = selectOnlyValue("select min(datetime) from tb_order_form");if (object = null) returnnull; else return object.toString();public String monthCheckOut(String num) String values = "", "", "", "", "" ;String sqls = "select count(*) from tb_order_form where num like '" + num+ "%'","select sum(money) from tb_order_form where num like '" + num+ "%'","select avg(money) from tb_order_form where num like '" + num+ "%'","select max(money) from tb_order_form where num like '" + num+ "%'","select min(money) from tb_order_form where num like '" + num+ "%'" ;for (int i = 0; i < sqls.length; i+) Object value = super.selectOnlyValue(sqlsi);if (value != null) String v = value.toString();if (!v.equals("0")valuesi = v;return values;publicVector yearCheckOut(int year) Vector<Vector> valueV = new Vector<Vector>();String sql = ""String formatMonth = ""String formatDay = ""for (int day = 1; day <= 31; day+) Vector rowV = newVector();/ 统计行rowV.add(day);/ 参加日期formatDay = (day < 10 ? "0" + day : "" + day);for (int month = 1; month <= 12; month+) / 做统计formatMonth = (month < 10 ? "0" + month : "" + month);sql = "select sum(money) from tb_order_form where num like '"+ year + formatMonth + formatDay + "%'"yearCheckOut(rowV, sql);sql = "select sum(money) from tb_order_form where num like '"+ year + "_" + formatDay + "%'"/ 做列总计yearCheckOut(rowV, sql);valueV.add(rowV);Vector rowV = newVector();/ 总计行rowV.add("总计");for (int month = 1; month <= 12; month+) / 做月总计formatMonth = (month < 10 ? "0" + month : "" + month);sql = "select sum(money) from tb_order_form where num like '"+ year + formatMonth + "%'"yearCheckOut(rowV, sql);sql = "select sum(money) from tb_order_form where num like '" + year+ "%'"/ 做年总计yearCheckOut(rowV, sql);valueV.add(rowV);return valueV;publicvoid yearCheckOut(Vector rowV, String sql) Object value = super.selectOnlyValue(sql);if (value = null)rowV.add("");elserowV.add(value);publicboolean iOrderForm(String values) String sql = "insert into tb_order_form(num,desk_num,datetime, money, user_id) values('"+ values0+ "','"+ values1+ "','"+ values2+ "',"+ values3 + "," + values4 + ")"return longHaul(sql);/ tb_order_itempublicboolean iOrderItem(String values) String sql = "insert into tb_order_item(order_form_num,menu_num,amount, total) values('"+ values0+ "','"+ values1+ "',"+ values2+ ","+ values3 + ")"return longHaul(sql);/ v_order_item_and_menupublicVector sOrderItemAndMenuByOrderFormNum(String num) return selectSomeNote("select * from v_order_item_and_menu where order_form_num='"+ num + "'");/ DeskpublicVector sDesk() return selectSomeNote("select * from tb_desk");publicVector sDeskByNum(String num) return selectOnlyNote("select * from tb_desk where num='" + num + "'");publicboolean iDesk(String num, String seating) String sql = "insert into tb_desk values('" + num + "'," + seating+ ")"return longHaul(sql);publicboolean dDeskByNum(String num) String sql = "delete from tb_desk where num='" + num + "'"return longHaul(sql);/ SortpublicVector sSortName() return selectSomeNote("select name from tb_sort");publicVector sSortById(String id) return selectOnlyNote("select * from tb_sort where id=" + id);pub