酒店管理系统

更新时间:2024-01-09 18:11:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

酒店管理系统设计

湖南文理学院芙蓉学院

数据库原理及应用课程设计报告

题目:酒店管理系统 学生姓名: 学号:

专业班级:网络工程1301班 同组姓名: 指导教师:

设计时间: 2015年上学期第18周

指导老师意见: 评定成绩: 签名: 日期: 1页

酒店管理系统设计

目录

一、需求分析 .......................... ... ... ........... 3 二、系统运行环境 ................................. ........ 3 三、功能需求描述 ...................................... ...3 四、模块结构图 ........................................... 4 五、数据库设计 ........................................... 4 5.1数据库分析 ........................................ 4 5.2数据库概念设计 ...................... .............. 4 5.3 数据库逻辑结构设计 ................... ............ 5 5.4数据库字典 ......... ........... .................. 7 六、程序模块设计 ......................................... 6 6.1功能模块设计......... ........... .................. 9 6.2界面设计 ......... ... .............. .. ........... 10 6.3程序运行............... ........ ... ............. 11 七、模块的实现............ ........... ........... .. .....12 7.1 JDBC数据库连接部分 .. .. .. .. .. .. .. .. .. .. .. ..13 7.2 开台、点餐功能的实现 .. .. .. .. .. .. .. .. .. .. ..15 7.3 结账功能的实现 ........... ........... ...........19 八、总结 ................................................ 22

2页

酒店管理系统设计

一、需求分析

随着餐饮行业的迅速发展现有的人工管理方式已经不能满足管理者的需求,广大餐饮业经营者已经意识到使用计算机应用软件的重要性,决定在餐饮企业的经营管理上引入计算机应用软件管理系统。 酒店管理系统的大致功能:

1.开台点餐 2.自动结账 3.菜品管理

4.后台菜系菜品管理 5.日月年结账报表 6.用户设置 本系统采用的语言

(1)本系统采用Java语言,Java是目前使用最为广泛的计算机语言之一。它具有简单面向对象、稳定、与平台无关等特点。说他简单并不是说这门语言很干瘪、而是一种清楚更容易理解的方式实现程序。面向对象是基于对象的变成更符合人的思维方式使人们更容易编写程序。

(2)本系统还采用SQL语言SQL Server具有许多显著优点、易用性、适合分布组织的可伸缩性、用于决策支持的数据仓库功能、与许多其他服务器软件紧密关联的集成性、良好的性价比等。

(3)本系统有效的利用Java和SQL的优点。

二、系统运行环境

操作系统为Windows 8、windows 7或windows XP 使用的集成开发工具Eclipse 数据库采用SQL Server2008项目运行环境为JDK 8。

三、功能需求描述

1开台签单工作区的功能:主要功能有开台、点菜、加菜、签单、查看开台

3页

酒店管理系统设计

信息和签单信息。

2.自动结账工作区的功能:一个功能是自动计算当前选中餐台的消费金额,另一个功能是在结账时自动计算找零金额。

3.结账报表工作区功能:日结帐报表、月结账报表、年结账报表。 4.后天管理工作区功能:管理添加信息。

四、模块结构图

模块结构图

五、数据库设计

5.1数据库分析

酒店管理系统的需求包括开台点菜功能、智能化获取菜品功能、自动结账功能、营业额报表功能等。主要涉及的数据表包括台号表、菜品表、消费单表,为了使系统更加的完善还需要为菜品分类,即需要用到菜系表;为了实现菜品的日销售情况统计,还要建立一个消费项目表,用来记录消费单消费的菜品。

5.2数据库概念设计

4页

酒店管理系统设计

数据库设计是系统设计过程中的重要组成部分,它是通酒店管理程序设计,通过管理系统的整天需求而制定的,数据库设计的好坏直接影响到系统的后期开发。

5.3 数据库逻辑结构设计

(1)餐台和菜系在本系统中的最简单的实体,在本系统中用来描述餐台信息的只有台号和座位数,而描述菜系的主要是名称。餐台信息表(tb_desk)和菜系信息表(tb_sort)的E-R图如下。

台号 座位号 状态 餐台 餐台信息表的E-R图

菜系信息表的E-R图

(2)在描述菜品实体时加入了助记码,目的是为了实现智能化获取菜品功能。通过这一功能,系统操作员可以快速的获取顾客所点的菜品信息。菜品信息表(tb_menu)的E-R图如图所示。

5页

菜系 序号 名称 状态

酒店管理系统设计

菜品 编号 系属菜系 名称 助记码 码 单位 单价 状态

菜品信息表的E-R图

(3)消费单信息表(tb_order_form)用来记录每次消费的相关信息,例如消费时使用的餐台、时间、金额等。消费单信息表的E-R图如图所示。

编号 消费台号 消费时间 消费金额 操作用户 消费单

消费信息表的E-R图

(4)消费项目信息表(tb_order_item)用来记录每个消费单消费的菜品,记录的主要信息有所属消费单、消费菜品、消费数量、消费额。消费项目信息表E-R图如图所示。 编号 所属消费单 消费菜品 消费数量 消费额 消费项目 消费项目信息表的E-R图

6页

酒店管理系统设计

(5)管理员信息表(tb_manager)用来记录系统的管理员的账号、密码、权限等信息。管理员信息表E-R图如图所示。

管理员 编号 用户名 密码 系统维修 权限

销售统计权限 人员管理权限 初始化系统权限 管理员信息表的E-R图

(6)员工信息表(tb_record)用来记录职工的信息,编号、姓名、性别、出生日期、地址等等。职工信息表E-R图如图所示。

员工信息 编号 员工姓名 性别 出生日期码 身份证号 地址 状态

员工信息表的E-R图

5.4 数据库字典

5.4.1.餐台信息表

表名 序号 1 2 3

7页

tb_desk 字段名 num seating state 数据类型 varchar(6) int char(4) 约束 非空 非空 非空 备注 台号 座位数 状态 酒店管理系统设计

5.4.2.管理员表 表名 序号 1 2 3 4 5 6 7 5.4.3.菜品信息表 表名 序号 1 2 3 4 5 6 7

5.4.4.消费单信息表

表名 序号 1 2 3 4 5 字段名 num Desk_num Consume_date expenditure Record_num tb_order_form 数据类型 char(11) varchar(6) datetime int char(9) 约束 非空 非空 非空 非空 非空 备注 编号 消费餐台 消费时间 消费金额 操作用户 字段名 num sort_id name code unit unit_price state char(9) int varchar(20) varchar(10) varchar(4) int char(4) tb.menu 数据类型 约束 非空 非空 非空 非空 非空 非空 非空 备注 编号 所属菜系 名称 主机名 单位 单价 状态 字段名 id record_num password purview_system purview_sell purview_personnel purview_init tb.manager 数据类型 int char(9) varchar(20) char(2) char(2) char(2) char(2) 约束 非空 非空 非空 允许空 允许空 允许空 允许空 备注 编号 用户名 登陆密码 系统维修权限 销售统计权限 人员管理权限 初始化系统权限 5.4.5.消费项目信息表 表名 序号 1 2 3 4 5

tb_order_item 字段名 id Order_form_num Menu_num amount total 数据类型 int char(11) char(9) int int 8页

约束 非空 非空 非空 非空 非空 备注 编号 所属消费单 消费菜品 消费数量 消费额 酒店管理系统设计

5.4.6.员工表 表名 序号 1 2 3 4 5 6 7

5.4.7.菜系信息表

表名 序号 1 2 3 字段名 id name state int varchar(20) char(4) th.sort 数据类型 约束 非空 非空 非空 备注 序号 名称 状态 字段名 num name sex birthday Id_card address state tb_record 数据类型 char(9) varchar(8) char(2) datetime varchar(20) varchar(100) char(4) 约束 非空 非空 非空 非空 非空 非空 非空 备注 编号 员工姓名 性别 出生日期 身份证号 地址 状态

六、程序模块设计

6.1功能模块设计:

管理员前台服务开始点菜添加菜单结账后台服务日销售统计结账报表月销售统计年销售统计系统安全管理员管理初始化系统台号管理菜系管理菜品管理修改密码档案管理

9页

酒店管理系统设计

6.2界面设计:

登入界面设计

管理员界面设计

10页

酒店管理系统设计

6.3程序运行:

登入界面

11页

酒店管理系统设计

管理界面

管理员界面

七、模块的实现

7.1 JDBC数据库连接部分

package com.mwq.dao;

import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException;

public class JDBC {

private

static

final

String

DRIVERCLASS

=

\

private

static

final

12页

String URL =

酒店管理系统设计

\

private static final ThreadLocal threadLocal = new private static final String PASSWORD = \private static final String USERNAME = \

ThreadLocal();

public static Connection getConnection() {// 创建数据库连接的方法

System.out.println(\数据库连接成功\

Connection conn = threadLocal.get();// 从线程中获得数据库连接 if (conn == null) {// 没有可用的数据库连接

try {

conn

=

DriverManager.getConnection(URL,

USERNAME,

static {// 在静态代码块中加载数据库驱动 }

try {

Class.forName(DRIVERCLASS).newInstance();// 加载数据库驱动

} catch (Exception e) { }

System.out.println(\数据库连接不成功\e.printStackTrace();

PASSWORD);// 创建新的数据库连接

threadLocal.set(conn);// 将数据库连接保存到线程中

} catch (SQLException e) {

e.printStackTrace();

13页

酒店管理系统设计

}

}

}

}

return conn;// 返回数据库连接

public static boolean closeConnection() {// 关闭数据库连接的方法 }

boolean isClosed = true;// 默认关闭成功

Connection conn = threadLocal.get();// 从线程中获得数据库连接 if (conn != null) {// 数据库连接可用 }

return isClosed;// 返回关闭结果

threadLocal.set(null);// 清空线程中的数据库连接 try {

conn.close();// 关闭数据库连接

} catch (SQLException e) { }

isClosed = false;// 关闭失败 e.printStackTrace();

7.2 开台点餐功能的实现

7.2.1 台号选择框的创建

numComboBox = newJComboBox(); // 创建台号选择框

numComboBox.setNextFocusableComponent(codeTextField); // 设置

下一个将要获得焦点的组件

initNumComboBox(); // 初始化台号选择框

numComboBox.addActionListener(new ActionListener() {

publicvoid actionPerformed(ActionEvent e) {

14页

酒店管理系统设计

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; // 保存其在“开台列表” 中

的所在行

}

if (needSelectedRow == -1) { // 选中的台号尚未开台,即将

}

break; // 跳出循环

要开台

rightTable.clearSelection(); // 取消选择“开台列表”

中的选中行

leftTableDataV.removeAllElements(); // 清空“签单列

表”中的所有行

leftTableModel.setDataVector(leftTableDataV,

leftTableColumnV); // 刷新“签单列表”表格模

型的数据

} else { // 选中的台号已经开台,即将要添加消费项目

rightTable.setRowSelectionInterval(needSelectedRow);// 在“开台列

表”中选中该台号

leftTableDataV.removeAllElements(); // 清空“签单列

15页

酒店管理系统设计

表”中的现有项目

leftTableDataV.addAll(itemOfDeskV.get(needSelectedRow)); // 向“签

单列表”添加新选中餐台的消费项目

leftTableModel.setDataVector(leftTableDataV,

leftTableColumnV); // 刷新“签单列表”表格模

型的数据

leftTable.setRowSelectionInterval(0); // 选中“签单

列表”中的第一行

7.2.2开单功能的实现

final JButton addButton = new MButton();

7.2.3签单功能的实现

16页

}

}

});

addButton.setIcon(new ImageIcon(TipWizardFrame.class

.getResource(\

addButton.setRolloverIcon(new ImageIcon(TipWizardFrame.class

.getResource(\

addButton.addActionListener(new ActionListener() {

publicvoid actionPerformed(ActionEvent e) { }

makeOutAnInvoice();

codeTextField.requestFocus();

});

orderDishesButtonPanel.add(addButton); orderDishesPanel.add(numComboBox);

酒店管理系统设计

final JButton subButton = new MButton();// 创建按钮

subButton.setIcon(new ImageIcon(getClass().getResource(

\按钮默认时显示的图片

subButton.setRolloverIcon(new

ImageIcon(getClass().getResource(

\光标移入时显示的图片

subButton.addActionListener(new ActionListener() {

publicvoid actionPerformed(ActionEvent e) {

int selectedRow = rightTable.getSelectedRow();// 获得

“开台列表”中的选中行

if (selectedRow < 0) {// 未选中任何行

JOptionPane.showMessageDialog(null, \请选择要签单的

台号!\友情提示\

JOptionPane.INFORMATION_MESSAGE);

return;

} else {

int lastRowIndex = leftTable.getRowCount() - 1;// 获

得最后一个消费项目的索引

Object lastRowSign =

leftTable.getValueAt(lastRowIndex, 0);// 获得最后一个消费项目的标记

if (lastRowSign.equals(\为未签单项目

Object firstRowSign = leftTable.getValueAt(0,

0);// 获得第一个消费项目的标记

if (firstRowSign.equals(\{// 为未签单项目,

即为新开台签单 {

leftTable.setValueAt(\签单

17页

for (int row = lastRowIndex; row >= 0; row--)

酒店管理系统设计

{

}

} else {// 为已签单项目,即为新添加菜品签单

for (int row = lastRowIndex; row >= 0; row--)

if (leftTable.getValueAt(row,

0).equals(\为未签单项目 单 成

7.3 结账功能的实现

final JButton checkOutButton = new JButton();

checkOutButton.setText(\结 账\

checkOutButton.addActionListener(new ActionListener() {

publicvoid actionPerformed(ActionEvent e) {

int selectedRow = rightTable.getSelectedRow(); if (selectedRow < 0) {// 未选中任何餐台

JOptionPane.showMessageDialog(null, \请选择要结账的

}

}

}

}

}

break;

else

// 为已签单项目,即为新添加菜品签单完

leftTable.setValueAt(\签

});

orderDishesButtonPanel.add(subButton);

餐台!\友情提示\

18页

酒店管理系统设计

}

JOptionPane.INFORMATION_MESSAGE);// 弹出提示

return;

int rowCount = leftTable.getRowCount();// 获得结账餐台的

点菜数量

if (leftTable.getValueAt(rowCount - 1, 0).equals(\

{// 存在未签单菜品

JOptionPane.showMessageDialog(null, \请先确定未签单

商品的处理方式!\

\友情提示\

JOptionPane.INFORMATION_MESSAGE);// 弹出提示

}

int expenditure = Integer.valueOf(expenditureTextField

.getText());// 获得消费金额 return;

int realWages =

Integer.valueOf(realWagesTextField.getText());// 获得实收金额

if (realWages < expenditure) {// 查看实收金额是否小于消

费金额

if (realWages == 0)// 未输入实收金额

JOptionPane.showMessageDialog(null, \请输入实收

金额!\友情提示\

JOptionPane.INFORMATION_MESSAGE);// 弹出

提示

else

// 实收金额小于消费金额

JOptionPane.showMessageDialog(null, \实收金额不

能小于消费金额!\

\友情提示\

19页

酒店管理系统设计

JOptionPane.INFORMATION_MESSAGE);// 弹出提示

realWagesTextField.requestFocus();// 为“实收金额”

文本框请求获得焦点

}

changeTextField.setText((realWages - expenditure) +

return;

\计算并设置“找零金额”

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();// 获得菜品消费金额

20页

酒店管理系统设计

}

dao.iOrderItem(orderItemData);// 持久化到数据库

JOptionPane.showMessageDialog(null,

rightTable.getValueAt(

selectedRow, 1)

+ \结账完成!\友情提示\

JOptionPane.INFORMATION_MESSAGE);// 弹出提示

//

rightTableModel.removeRow(selectedRow);// 从“开台列表”

中移除结账餐台

leftTableDataV.removeAllElements();// 清空“签单列表” leftTableModel.setDataVector(leftTableDataV,

leftTableColumnV);// 刷新“签单列表” 框 台

}

changeTextField.setText(\清空“找零金额”文本框 itemOfDeskV.remove(selectedRow);// 从数据集中移除结账餐

realWagesTextField.setText(\清空“实收金额”文本

});

checkOutButton.setMargin(new Insets(2, 14, 2, 14)); checkOutButton.setFont(new Font(\BOLD, 12)); final GridBagConstraints gridBagConstraints_10 = new

GridBagConstraints();

gridBagConstraints_10.anchor = GridBagConstraints.EAST; gridBagConstraints_10.gridwidth = 2;

gridBagConstraints_10.insets = new Insets(10, 0, 0, 0); gridBagConstraints_10.gridy = 2; gridBagConstraints_10.gridx = 1;

21页

酒店管理系统设计

checkOutPanel.add(checkOutButton, gridBagConstraints_10);

八、总结

经过这次的学习。了解了关于数据库程序设计,学习了JDBC的连接方法,更加深入的学习了SQL Server的使用,通过对Eclipse中Windows Builder插件的学习和使用,方便快捷的进行可视化界面开发,大大提高了系统开发的效率。

参考文献

1.李俊山 ,罗蓉,赵方舟,数据库原理及应用(SQL sever).北京:清华大学出版社,2009

2.李俊山,罗蓉,叶霞,杨百龙。数据库系统原理与设计-内容解释与习题解答。西安:西安交通大学出版社,2006.

3.刘金岭,冯万利,周泓。数据库系统及应用实验与课程设计指导-SQL Server 2008.清华大学出版社,2014.

4.梁竞敏,黄华林,宋广科。SQL Server 2005 数据库任务化教程。中国水利水电出版社。2009.

22页

本文来源:https://www.bwwdw.com/article/1t9o.html

Top