资源描述
河南工业职业技术学院
毕业设计任务书
类 别: 三年制高职
专 业: 软件技术
班 级: 软件1301
姓 名: 高杰
毕业设计题目: 酒店管理系统
指引教师姓名: 姜燕
负责人签字:
年 月 日
摘要
旅游和科技化浪潮使得酒店和餐饮行业发展如火如荼,如何以以便、快捷、经济方式来对该行业进行有效管理是一种重要问题,随着科学技术不断提高,计算机科学日渐成熟,在社会各个领域并发挥着越来越重要作用。也使得软件成理解决问题有效途径。
酒店管理系统以以便、快捷、费用低长处正慢慢地进入人们生活,将老式酒店管理方式彻底解脱出来,提高效率,减轻工人人员以往繁忙工作,减小出错概率。本系统从满足客户需求角度出发,实现了酒店管理基本流程。系统重要功能涉及前台服务、后台管理、销售记录、系统安全、人员管理、初始化系统等等。顾客在酒店消费时候所要等待时间就会大大减少,操作员可以很以便对顾客信息登记和对用餐状态管理,从而实现了酒店管理系统高效、精确特点。
本论文全面简介了酒店管理系统设计过程,系统是运用MyEclipse 7.0作为数据库前端开发工具,SQL Server 为后台数据库,重要采用Windows XP/Windows 7作为操作系统,采用java为开发语言,本着易实用性,扩展性,可移植性原则,采用c/s模式开发 ,实现酒店管理信息化发展需求。
核心词:数据库SQL Server;MyEclipse 7.0;酒店管理系统。
目 录
第一章 系统概述 -------------------------------------------- 1
1.1 开发背景 -----------------------------------------1
1.2 开发语言简介-----------------------------------
1.3 系统简介 -----------------------------------------
第二章 可行性分析-----------------------------------------
2.1 技术可行性-----------------------------------------
2.2 管理可行性-----------------------------------------
2.3 经济可行性-----------------------------------------
第三章 系统需求分析--------------------------------------
3.1 项目规划-----------------------------------------
3.2 系统功能构造--------------------------------------
3.3 用例图设计-----------------------------------------
第四章 系统设计与实现-----------------------------------
4.1 设计目的-----------------------------------------
4.2 开发运营环境-------------------------------------
4.3 数据库设计-----------------------------------------
4.3.1 数据库表概要-------------------------------
4.3.2 重要数据表构造-------------------------------
4.4 功能模块实现------------------------------------
4.4.1文献架构---------------------------
4.4.2 登录和系统界面---------------------------
4.4.3 数据库连接---------------------------
4.4.3前台服务模块---------------------------
a 开台查看实现---------------------------
b点菜与签单实现---------------------------
c 自动结账实现---------------------------
第五章 总结-----------------------------------------
参照文献-----------------------------------------
第一章 系统概述
1.1 开发背景
随着计算机技术飞速发展,信息时代到来,信息变化了咱们这个社会。各类行业在寻常经营管理各个方面也在悄悄地走向规范化和网络化。酒店管理信息化限度体当前将计算机及网络与信息技术应用于经营与管理,以当代化工具代替老式手工作业。无疑,使用网络信息化管理使酒店管理更先进、更高效、更科学,信息交流更迅速。
酒店管理系统是典型信息管理系统一部份,并且是必不可少一部份。其开发重要涉及后台数据库建立和维护以及前端应用程序开发两个方面。对于前者规定建立起简洁且资料一致性和完整性强、资料安全性好数据库。而对于后者则规定应用程序功能完备,易使用等特点。
酒店管理系统是酒店经营管理中不可缺少某些,它内容对于经营决策者和管理者来说都至关重要,因此客房管理系统、信息管理系统应当可觉得顾客提供充分信息和快捷查询手段。但始终以来人们使用老式人工方式管理文献档案,这种管理方式存在着许多弊端,如:效率低、保密性差,容易浮现差错等,且对于查询维护等极为不以便。在当今时代,这些完全可以改用计算机来代替人手工操作。
作为计算机及网络应用一某些,使用计算机对客房信息进行管理,具备手工管理所无法比拟长处。例如:检索迅速、查找以便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些长处可以极大地提高客房经营管理效率,也是公司科学化、正规化管理,与世界接轨重要条件。且办事效率也是决定收入一种核心因素。
因而,咱们组决定选取酒店管理系统作为本人毕业设计,力求开发出一套界面和谐,使用简朴合用于各中、小规模酒店管理系统。
1.2 开发语言简介
Java语言其实最早是诞生于1991年, sun公司最初为某些消费性电子产品而设计一种通用环境,日后逐渐完善广泛应用与Internet,桌面系统等各个领域,在开发方面具备如下优势:
a:软件需求分析:可将顾客需求进行动态、可视化描述,以提供设计者更加直观规定。而顾客需求是各色各样 ,不受地区、行业部门,兴趣影响,都可以用Java语言描述清晰。
b:软件开发办法:由于Java语言面向目的特性,因此完全可以用O-O技术与办法来开发,这是符合最新软件开发规范规定 。
c:Java语言动画效果远比GUI技术更加逼真,特别是运用WWW提供巨大动画资源空间,可以共享全世界动态画面 资源 。
软件产品用java语言开发软件可以具备可视化,可听化 ,可操作化效果,这要比电视,电影效果更为抱负,因 为它可以做到"即时、交互、动画与动作 ",要它停就停 ,要它继续就继续 ,而这是在电影与电视播放过程中难以做到 。本系统在选取java语言因素之一它还具备其跨平台性,可移植性,安全性,健壮性。充分考虑跨系统平台和安全因素,这对于产品应用和市场化需求有很大作用。
1.3系统简介
当代化酒店组织庞大、服务项目多、信息量大,要想提高劳动生产、减少成本、提高服务质量和管理水平,进而增进经济效益,必要借助计算机来进行当代化信息管理。酒店管理系统正是为此而设计。先进酒店客房管理系统操作以便,灵活性好,系统安全性高,运营稳定。这也是我所设计本程序目之一。本产品采用C/S模式开发,重要考虑界面和谐性,且运营于客户端有效减少服务器和客户端之间运算量,节约了时间。本系统涉及销售记录,后台管理,人员管理,初始化系统,和系统安全 五个模块。并与sql数据库应用相结合。
第二章 可行性分析
2.1 技术可行性
编写语言:采用Java语言进行编写。Java是一种安全、稳定、简朴,由C和C++衍生出来面向对象编程语言。它在继承C和C++强大功能同步去掉了某些它们复杂特性(例如没有宏 和模版,不容许多重继承)。Java操作简朴和运营效率高,以其强大操作能力、优雅语法风格、创新语言特性,编程支持成为开发首选语言。由于对Java技术比较纯熟,对于系统较为简朴,但基本功能较为完善酒店管理系统来说是基本没有问题。
编程平台:编程平台采用myeclicps7.0.它已被证明是一种极其强大和成功开发平台,其成熟稳定可以充分保证软件设计顺利进行。
数据库:数据库采用微软SQL Server ,虽然该数据库版本不是最新,但其工作稳定,功能强大,资源耗费较少,因此可以充分满足当前需要。
以上所用技术都是成熟,先进,稳定。因而,开发本系统在技术上是可行。
2.2 管理可行性
由于本系统功能比较简朴,对于工作人员不存在太大难度。管理员权限明确,系统管理员拥有维护数据库系统权限,对数据库中数据进行添加、删除、更新等操作界面和谐简朴可操作性强。因而,本系统在管理上是可行。
在本系统运营阶段,使用系统工作人员,除了需要具备在Windows平台上使用个人电脑知识,并不需要特别技术能力。
本系统充分结合实际酒店中餐饮营销方式,操作实际易于接受,合用性强 。在销售记录模块中分别对年,月,日销售模块进行全面记录,有助于改进优化管理服务。
2.3经济可行性
经济上重要考虑本系统带来效益与否不不大于开发本系统成本,采用自动化信息管理减少了人员使用,对信息进行充分记录,以便管理,为决策着进行更好决策做出根据,提高经济效益,由于本系统开发以课程设计为依托,参加人员目以学习为主,投入成本比较小。此外,系统管理员和业务员都拥有计算机专业知识,酒店前台工作人员和管理人员不需要通过培训即可操作本软件。这样可觉得开发本系统节升资金。减少后期资源挥霍。因而,开发本系统在经济是可行。
综上所述,开发本系统,在经济上、技术上、管理上都是可行。
第三章 系统需求分析
3.1 项目规划
通过项目组考察与调研,系统整顿所有资料,并对这些资料从整体和局部进行分析,最后决定在本系统中包括如下6大功能模块。
l 前台服务:该模块重要涉及开台点菜,维护菜品,签单,结账等功能,其中维护菜品功能涉及添加和取消菜品,可以取消菜品前提条件是尚未签单,即处在开单状态,结账时则规定所有商品都要签单,否则不容许结账。
l 后台管理:该模块重要涉及台号管理,菜系管理和菜品管理功能,其中菜系用来对菜品进行分类。
l 销售记录:该模块重要用来分段记录营业额,可以按日,月,年进行记录,其中日记录是按照消费单和销售商品记录销售额,月记录是按照日期和每日销售额记录销售额,年记录是按照日期和月份记录销售额。
l 系统安全:该模块重要涉及交接班,锁定系统和修改密码功能,其中交接班功能在操作员换岗时使用,锁定系统在操作员暂时离开时使用。
l 人员管理:该模块重要涉及档案管理,管理员管理和操作权限管理功能,其中管理员管理功能用来管理系统操作员,权限管理功能用来管理系统操作员具备操作权限。
l 初始化系统:该功能用来对系统进行初始化,初始化后系统数据将所有被删除。
3.2 系统功能构造
该简介以超级管理员角色从整顿构造来简介各个功能模块用法。一方面进入登录界面用超级管理员权限登录,超级管理员拥有后台管理,销售记录,系统安全,人员管理,前台管理,初始化系统权限,分别可以对管理员赋予各种权限,并且对台号,菜品种类进行设定分类,还可以进行销售记录和初始化系统(初始化后系统数据将被所有删除)。下图为整体功能
3.3 用例图设计
a:前台服务分析
开台点菜
前台服务员
维护菜品
签单
结账
菜系管理
b:后台管理分析管理员
台号管理
菜品管理
c:销售记录
管理员
日销售记录
月销售记录
年销售记录
d:系统安全
管理员
交接班
锁定系统
修改密码
e:人员管理
高档管理员
操作权限管理
档案管理
管理员管理
f:初始系统化
管理员
初始化系统
第四章 系统设计与实现
4.1设计目的
依照餐饮行业特点和实际状况,本系统以餐饮业务为基本,突出前台管理,注重营业数据分析等功能,从专业角度出发,努力为餐饮管理者提供科学有效管理模式和数据分析功能。力求开发出一款简朴,使用酒店管理系统,令其适合于众多餐饮公司需求,同步该系统还要具备一定人性化和智能化特点,以保证软件有易学易用特点,界面设计还要简介大方,以便惯用功能操作。
4.2开发运营环境
本系统运营时需要如下条件。
硬件平台:
l cpu:pentium 41.8GHz
l 内存:256MB以上
l 操作系统:windows xp/windows /windows /windows 7
l 数据库:Sql Server
l 开发工具包:JDK Version1.6
4.3数据库设计
本系统底层数据库采用sql server数据库,系统数据库名称为db_DrinkeryManage。在数据库中共包括7个数据库表和三个视图。下面是对各表概要阐明及详细及构造。
4.3.1 数据库表概要
该树形构造图显示了数据库系统所有数据表。
4.3.2 重要数据表构造
l tb_desk台号表,用于保存餐台信息,表构造如下所示
l tb_sort 菜系表 用于保存菜系信息,表构造如下所示
l tb_menu菜品表,用于保存菜品信息,表构造如下所示
l tb_record 档案表,用于保存档案信息,表构造如下所示
l tb_manager管理员表,用于保存系统管理员信息,表构造如下所示
l tb_order_form消费单表用于保存消费单信息,表构造如下所示
l tb_order_item消费项目表用于保存每个消费单详细包括消费项目信息,表构造如下所示
4.4功能模块实现
系统依照酒店管理中餐饮行业特点,共有六个模块构成,在此本人将此前台服务模块为例,详细阐述系统实现重要思想,和设计逻辑,
4.4.1文献架构
l 写代码之前,普通将系统文献夹架构做一整体规划,重要目对文献进行分类管理,以便在开发和维护中迅速查找,同步也对系统起到分层作用
l 以文献架构为基本,整体设计出功能架构图,如下所示。
4.4.2 登录和系统界面
l 采用swing技术设计出登陆窗体,重要有登录名框,密码框,和两个按钮构成,界面和谐简洁,
l 系统主窗体设计以容器,面板方式嵌套组合,重要本着简朴易懂,界面和谐为原则,充分体现操作性实用性特点。
4.4.3 数据库连接
采用myeclicps和sqlserver连接方式,在使用数据库之前应注意如下问题,安装数据库驱动应为1.2版本以上,并且要保证TCP/IP端口合同启动。
创立5个私有静态变量加载和连接数据库,其中threadlocal用来保存已经创立数据库连接。
private static final String DRIVERCLASS = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
private static final String URL = "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=db_DrinkeryManage";
private static final String USERNAME = "sa";
private static final String PASSWORD = "sa";
此处为加载数据库驱动:
private static final ThreadLocal<Connection> threadLocal = new ThreadLocal<Connection>();
static {// 在静态代码块中加载数据库驱动
try {
Class.forName(DRIVERCLASS).newInstance();// 加载数据库驱动
} catch (Exception e) {
e.printStackTrace();}}
此处连接数据库办法:
public static 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;// 返回数据库连接
}
此处为关闭数据库:
public static boolean closeConnection() {// 关闭数据库连接办法
boolean isClosed = true;// 默认关闭成功
Connection conn = threadLocal.get();// 从线程中获得数据库连接
if (conn != null) {// 数据库连接可用
threadLocal.set(null);// 清空线程中数据库连接
try {
conn.close();// 关闭数据库连接
} catch (SQLException e) {
isClosed = false;// 关闭失败
e.printStackTrace();
}
}
return isClosed;// 返回关闭成果
}
4.4.3前台服务模块
前台服务模块重要分为,开台签单,点菜签单,自动结账功能,以人性化,简易化为原则,增长了系统可操作性,例如,开台点菜功能中有助记码可以便前台进行快捷输入菜品名称,如红烧肉助记码为hsr,输入一种或所有字母即可出来菜品名。用自动结帐功能系统可自动显示应付金额和要找金额。从而避免因忙碌和繁杂事物和数据导致过错。
a 开台查看实现
在客户需要服务时选中所开台号,然后点开单即可进行点菜等服务操作,主窗体上部显示签单列表,开台列表,分别对台号,和账单进行显示,在主界面中图示如下
当在“台号”下拉框中选中已经开台台号时,开台列表中该台号所在行也将被选中,同步在签单列表中将列出该餐台消费所有项目,效果如上图所示。
如果在“台号”下拉框中选中尚未开台台号时,在开台列表中将不选中任何行,并且在签单列表中将没有任何项目,
实现“台号”代码如下:
final JLabel numLabel = new JLabel();// 创立“台号”标签
numLabel.setText("台号:");// 设立标签文本
orderDishesPanel.add(numLabel);
numComboBox = new JComboBox();// 创立台号选取框
numComboBox.setNextFocusableComponent(codeTextField);// 设立下一种将要获得焦点组件
initNumComboBox();// 初始化台号选取框
numComboBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int rowCount = rightTable.getRowCount();// 获得已开台数
if (rowCount == 0) // 没有开台
return;// 不执行任何操作
Object selectedDeskNum = numComboBox.getSelectedItem();// 获得“台号”选取框中选中项
int needSelectedRow = -1;// 默认选中台号未开台
for (int row = 0;row < rowCount;row++) {
// 查看选中台号与否已经开台
if (selectedDeskNum.equals(rightTable.getValueAt(row,1))) { // 已经开台
needSelectedRow = row;// 保存其在“开台列表” 中所在行
break;// 跳出循环
}
}
if (needSelectedRow == -1) { // 选中台号尚未开台,即将要开台
rightTable.clearSelection();// 取消选取“开台列表”中选中行
leftTableDataV.removeAllElements();// 清空“签单列表”中所有行
leftTableModel.setDataVector(leftTableDataV,
leftTableColumnV);// 刷新“签单列表”表格模型数据
} else { // 选中台号已经开台,即将要添加消费项目
rightTable.setRowSelectionInterval(needSelectedRow);// 在“开台列表”中选中该台号
leftTableDataV.removeAllElements();// 清空“签单列表”中既有项目
leftTableDataV.addAll(itemOfDeskV.get(needSelectedRow));// 向“签单列表”添加新选中餐台消费项目
leftTableModel.setDataVector(leftTableDataV,
leftTableColumnV);// 刷新“签单列表”表格模型数据
leftTable.setRowSelectionInterval(0);// 选中“签单列表”中第一行
}
}
b 点菜与签单实现
选中要点餐台后即可进行点菜,系统支持两种方式点菜:一种是通过菜品 记助码,这种样式长处在于迅速获取菜品名称,另一种方式通过菜品编号输入后自动显示菜品名到商品名称框里。
其系统图中显示如下所示
获取菜品功能是通过文本框添加键盘事件监听器实现,代码如下:
codeTextField.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e) {// 通过键盘监听器实现控制文本框输入内容
if ("abcdefghijklmnopqrstuvwxyz".indexOf(e
.getKeyChar()) < 0)// 只容许输入字母和数字
e.consume();// 销毁本次键盘事件
}
public void keyReleased(KeyEvent e) {// 通过键盘监听器实现智能获取菜品
if (e.getKeyCode() == KeyEvent.VK_ENTER) {// 按下回车键
makeOutAnInvoice();// 开单
} else {
String input = codeTextField.getText();// 获得输入内容
Vector menuV = null;// 符合条件菜品
if (input.length() > 0) {// 确认输入了内容
if (codeRadioButton.isSelected()) {// 按助记码查询
Vector menusV = dao.sMenuByCode(input);// 查询符合条件菜品
if (menusV.size() > 0) {// 存在符合条件菜品
menuV = (Vector) menusV.get(0);// 获得第一种符合条件菜品
menuV.remove(0);// 移除菜品序号
}
} else {// 按编号查询
if (input.length() == 9)// 确认编号与否为9位
menuV = dao.sMenuByNum(input);// 查询符合条件菜品
}
}
if (menuV == null) {// 不存在符合条件菜品
nameTextField.setText(null);// 设立“商品名称”文本框为空
unitTextField.setText(null);// 设立“单位”文本框为空
priceTextField.setText(null);// 设立“单价”文本框为空
} else {// 存在符合条件菜品
nameTextField.setText(menuV.get(2).toString());// 设立“商品名称”文本框为符合条件菜品名称
unitTextField.setText(menuV.get(4).toString());// 设立“单位”文本框为符合条件菜品单位
priceTextField.setText(menuV.get(5).toString());// 设立“单价”文本框为符合条件菜品单价
}
}
}
});
orderDishesPanel.add(codeTextField);
注解:
consume():该办法用于销毁本次事件,如果本次事件是向一种文本框中输入一种字符,则取消次输入。
e,getKeyCode()==KeyEventVK_ENTER:该段代码用来判断此处事件是顾客按下Enter键触发,如果是则返回true;否则返回false。
默认状况下点才数量为1,如果不需要修改点菜数量,通过菜品助记码或编号获得菜品后直接单击回车就开单成功从而方面顾客操作。
拟定多点菜品和数量后,也可以通过单击“开单“按钮完毕开单工作,签单列表中新开单菜品前会有一种“NEW”标记,
拟定消费“签单列表”中所有菜品后,需要单击“签单“按钮取消所有菜品前所有菜品“NEW”标记实现“签单”。
c自动结账实现
该功能自动计算“签单列表“中消费金额,在“实收金额”文本框中输入已收金额,系统自动计算应找金额,避免因忙碌繁杂而引起错误结算。
在结账之前一定要保证所有菜品已经签单,否则将弹出提示信息,并且要保证明收金额不不大于消费金额。实现结账代码如下:
final JButton checkOutButton = new JButton();
checkOutButton.setText("结 账");
checkOutButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int selectedRow = rightTable.getSelectedRow();
if (selectedRow < 0) {// 未选中任何餐台
JOptionPane.showMessageDialog(null,"请选取要结账餐台!","情谊提示",
JOptionPane.INFORMATION_MESSAGE);// 弹出提示
return;
}
int rowCount = leftTable.getRowCount();// 获得结账餐台点菜数量
if (leftTable.getValueAt(rowCount - 1,0).equals("NEW")) {// 存在未签单菜品
JOptionPane.showMessageDialog(null,"请先拟定未签单商品解决方式!",
"情谊提示",JOptionPane.INFORMATION_MESSAGE);// 弹出提示
return;
}
int expenditure = Integer.valueOf(expenditureTextField
.getText());// 获得消费金额
int realWages = Integer.valueOf(realWagesTextField.getText());// 获得实收金额
if (realWages < expenditure) {// 查看实收金额与否不大于消费金额
if (realWages == 0)// 未输入实收金额
JOptionPane.showMessageDialog(null,"请输入实收金额!","情谊提示",
JOptionPane.INFORMATION_MESSAGE);// 弹出提示
else
// 实收金额不大于消费金额
JOptionPane.showMessageDialog(null,"实收金额不能不大于消费金额!",
"情谊提示",JOptionPane.INFORMATION_MESSAGE);// 弹出提示
realWagesTextField.requestFocus();// 为“实收金额”文本框祈求获得焦点
return;
}
changeTextField.setText((realWages - expenditure) + "");// 计算并设立“找零金额”
String[] orderFormData = {
getNum(),
rightTable.getValueAt(selectedRow,1).toString(),
Today.getDate() + " "
+ rightTable.getValueAt(selectedRow,2),
expenditureTextField.getText(),
TipWizardFrame.this.managerV.get(0).toString() };// 组织消费单信息
dao.iOrderForm(orderFormData);// 持久化到数据库
String[] orderItemData = new String[4];// 用来存储消费项目信息
orderItemData[0] = dao.sOrderFormOfMaxId();// 获得消费单编号
for (int row = 0;row < rowCount;row++) {// 通过循环持久化消费项目信息
orderItemData[1] = leftTable.getValueAt(row,2).toString();// 获得菜品编号
orderItemData[2] = leftTable.getValueAt(row,5).toString();// 获得菜品数量
orderItemData[3] = leftTable.getValueAt(row,7).toString();// 获得菜品消费金额
dao.iOrderItem(orderItemData);// 持久化到数据库
}
JOptionPane.showMessageDialog(null,rightTable.getValueAt(
selectedRow,1)
+ " 结账完毕!","情谊提示",JOptionPane.INFORMATION_MESSAGE);// 弹出提示
//
rightTableModel.removeRow(selectedRow);// 从“开台列表”中移除结账餐台
leftTableDataV.removeAllElements();// 清空“签单列表”
leftTableModel.setDataVector(leftTableDataV,leftTableColumnV);// 刷新“签单列表”
realWagesTextField.setText("0");// 清空“实收金额”文本框
changeTextField.setText("0");// 清空“找零金额”文本框
itemOfDeskV.remove(selectedRow);// 从数据集中移除结账餐台
}
});
第五章 总结
前台服务模块作为酒店管理系统中为客户服务重要模块,设计思想体现了整个系统分层分类特点。以开单,点菜,签单,结账流程来呈现酒店管理中餐饮服务,操作简朴,易于上手,销售记录,后台管理,人员管理等模块更为管理员使用提供了,安全,便捷协助。在系统设计于实现中,成员之间互相探讨认真总结在程序过程中错误。设计之初,咱们但愿通过一起合伙,共同来用自己所学写出有一份作品。真正体验整个系统流程编写。为后来就业有所协助。事实上对于我个人而言获得远非如此
展开阅读全文