java酒店管理系统课程设计(共34页).doc
精选优质文档-倾情为你奉上 Java语言程序设计课程设计题 目 酒店管理系统 学 院 南湖学院 专 业 计算机科学与技术 班 级 计科N112 学 号 3 学生姓名 吴威宗 指导教师 李永刚 编写日期 2014/6/26 目录一、需求分析随着餐饮行业的迅速发展,现有的人工管理方式已经不能呢个满足管理者的需求,广大餐饮业经营者已经意识到使用计算机应用软件的重要性,决定在餐饮企业的经营管理上引入计算机应用软件管理系统。 酒店管理系统的大致功能:1 开台点餐2 菜品管理3 自动结账4 后台菜系菜品管理5 日月年结账报表6 用户设置根据需求分析,本系统采用的语言:(1)本系统采用Java语言,Java是目前使用最为广泛的计算机语言之一。它具有简单,面向对象,稳定,与平台无关等特点。说他简单,并不是说这门语言很干瘪,而是一种清楚更容易理解的方式实现程序。面向对象是基于对象的变成更符合人的思维方式,使人们更容易编写程序。(2)本系统还采用SQL语言,SQL Server具有许多显著优点:易用性、适合分布组织的可伸缩性、用于决策支持的数据仓库功能、与许多其他服务器软件紧密关联的集成性、良好的性价比等。(3) 本系统有效的利用Java和SQL的优点。二、系统运行环境 操作系统为Windows 7、windows XP或windows 2003 使用的集成开发工具Eclipse 数据库采用SQL Server2008,项目运行环境为JDK 7。三、功能需求描述 1开台签单工作区的功能:主要功能有开台、点菜、加菜、签单、查看开台信息和签单信息。 2自动结账工作区的功能:一个功能是自动计算当前选中餐台的消费金额;另一个功能是在结账时自动计算找零金额。 3结账报表工作区功能:日结帐报表,月结账报表,年结账报表。4后天管理工作区功能:管理添加信息四、模块结构图模块结构图五、数据库设计51数据库分析 酒店管理系统的需求包括开台点菜功能、智能化获取菜品功能、自动结账功能、营业额报表功能等。在这些功能总主要涉及的数据表包括台号表、菜品表、消费单表;为了使系统更加的完善,还需要为菜品分类,即需要用到菜系表;为了实现菜品的日销售情况统计,还要建立一个消费项目表,用来记录消费单消费的菜品。52数据库概念设计 数据库设计是系统设计过程中的重要组成部分,它是通过管理系统的整天需求而制定的,数据库设计的好坏直接影响到系统的后期开发。53 数据库逻辑结构设计 台号表菜品表菜系表消费单表消费项目表管理员表六、程序模块设计 功能模块整体设计:用户功能界面:代码:package com.mwq.frame;import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;import java.awt.Insets;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.FocusEvent;import java.awt.event.FocusListener;import .URL;import java.util.Vector;import javax.swing.BoxLayout;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JPasswordField;import com.mwq.dao.Dao;import com.mwq.mwing.MPanel;public class LandFrame extends JFrame private JPasswordField passwordField;/ 密码框private JComboBox usernameComboBox;/ 用户名下拉菜单public static void main(String args) try LandFrame frame = new LandFrame();frame.setVisible(true); catch (Exception e) e.printStackTrace();public LandFrame() / 首先设置窗口的相关信息super();/ 调用父类的构造方法setTitle(" 小组:吴威宗 周志远");/ 设置窗口的标题setResizable(false);/ 设置窗口不可以改变大小setAlwaysOnTop(true);/ 设置窗口总在最前方setBounds(100, 100, 428, 292);/ 设置窗口的大小setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/ 设置当关闭窗口时执行的动作/ 下面将创建一个面板对象并添加到窗口的容器中final MPanel panel = new MPanel(this.getClass().getResource("land_background.jpg");/ 创建一个面板对象panel.setLayout(new GridBagLayout();/ 设置面板的布局管理器为网格组布局getContentPane().add(panel, BorderLayout.CENTER);/ 将面板添加到窗体中final JLabel topLabel = new JLabel();topLabel.setPreferredSize(new Dimension(0, 126);final GridBagConstraints gridBagConstraints_5 = new GridBagConstraints();gridBagConstraints_5.gridx = 0;gridBagConstraints_5.gridy = 0;panel.add(topLabel, gridBagConstraints_5);final JLabel leftLabel = new JLabel();leftLabel.setPreferredSize(new Dimension(140, 0);final GridBagConstraints gridBagConstraints_3 = new GridBagConstraints();gridBagConstraints_3.gridy = 1;gridBagConstraints_3.gridx = 0;panel.add(leftLabel, gridBagConstraints_3);final JLabel rightLabel = new JLabel();rightLabel.setPreferredSize(new Dimension(55, 0);final GridBagConstraints gridBagConstraints_2 = new GridBagConstraints();gridBagConstraints_2.gridy = 1;gridBagConstraints_2.gridx = 1;panel.add(rightLabel, gridBagConstraints_2);/ 创建并设置用户名下拉菜单usernameComboBox = new JComboBox();/ 创建用户名下拉菜单组件对象usernameComboBox.setMaximumRowCount(5);/ 设置下拉菜单最多可显示的选项数usernameComboBox.addItem("请选择");/ 为下拉菜单添加提示项usernameComboBox.addActionListener(new UsernameComboBoxActionListener();/ 为下拉菜单添加事件监听器final GridBagConstraints gridBagConstraints = new GridBagConstraints();/ 创建网格组布局管理器对象gridBagConstraints.anchor = GridBagConstraints.WEST;/ 设置为靠左侧显示gridBagConstraints.gridy = 1;/ 设置行索引为1gridBagConstraints.gridx = 2;/ 设置列索引为2panel.add(usernameComboBox, gridBagConstraints);/ 将组件按指定的布局管理器添加到面板中/ 创建并设置密码框passwordField = new JPasswordField();/ 创建密码框组件对象passwordField.setColumns(20);/ 设置密码框可显示的字符数passwordField.setText(" ");/ 设置密码框默认显示6个空格passwordField.addFocusListener(new PasswordFieldFocusListener();/ 为密码框添加焦点监听器final GridBagConstraints gridBagConstraints_1 = new GridBagConstraints();/ 创建网格组布局管理器对象gridBagConstraints_1.insets = new Insets(5, 0, 0, 0);/ 设置组件外部上方的填充量为5像素gridBagConstraints_1.anchor = GridBagConstraints.WEST;/ 设置为靠左侧显示gridBagConstraints_1.gridy = 2;/ 设置行索引为2gridBagConstraints_1.gridx = 2;/ 设置列索引为2panel.add(passwordField, gridBagConstraints_1);/ 将组件按指定的布局管理器添加到面板中/ 创建并设置一个用来添加三个按钮的面板final JPanel buttonPanel = new JPanel();/ 创建一个用来添加按钮的面板buttonPanel.setOpaque(false);/ 设置面板的背景为透明buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS);/ 设置面板采用水平箱布局final GridBagConstraints gridBagConstraints_4 = new GridBagConstraints();/ 创建网格组布局管理器对象gridBagConstraints_4.insets = new Insets(10, 0, 0, 0);/ 设置组件外部上方的填充量为10像素gridBagConstraints_4.gridwidth = 2;/ 设置其占两列gridBagConstraints_4.gridy = 3;/ 设置行索引为3gridBagConstraints_4.gridx = 1;/ 设置列索引为1panel.add(buttonPanel, gridBagConstraints_4);/ 将组件按指定的布局管理器添加到面板中/ 创建并设置一个登录按钮,并将其添加到用来添加按钮的面板中final JButton landButton = new JButton();/ 创建登录按钮组件对象landButton.setMargin(new Insets(0, 0, 0, 0);/ 设置按钮边框和标签之间的间隔landButton.setContentAreaFilled(false);/ 设置不绘制按钮的内容区域landButton.setBorderPainted(false);/ 设置不绘制按钮的边框URL landUrl = this.getClass().getResource("land_submit.png");/ 获得默认情况下登录按钮显示图片的URLlandButton.setIcon(new ImageIcon(landUrl);/ 设置默认情况下登录按钮显示的图片URL landOverUrl = this.getClass().getResource("land_submit_over.png");/ 获得当鼠标经过登录按钮时显示图片的URLlandButton.setRolloverIcon(new ImageIcon("land_submit_over.png");/ 设置当鼠标经过登录按钮时显示的图片URL landPressedUrl = this.getClass().getResource("land_submit_pressed.png");/ 获得当登录按钮被按下时显示图片的URLlandButton.setPressedIcon(new ImageIcon("land_submit_pressed.png");/ 设置当登录按钮被按下时显示的图片landButton.addActionListener(new LandButtonActionListener();/ 为登录按钮添加事件监听器buttonPanel.add(landButton);/ 将登录按钮添加到用来添加按钮的面板中final JButton resetButton = new JButton();resetButton.setMargin(new Insets(0, 0, 0, 0);resetButton.setContentAreaFilled(false);resetButton.setBorderPainted(false);URL resetUrl = this.getClass().getResource("land_reset.png");resetButton.setIcon(new ImageIcon(resetUrl);URL resetOverUrl = this.getClass().getResource("land_reset_over.png");resetButton.setRolloverIcon(new ImageIcon("land_reset_over.png");URL resetPressedUrl = this.getClass().getResource("land_reset_pressed.png");resetButton.setPressedIcon(new ImageIcon(resetPressedUrl);resetButton.addActionListener(new ResetButtonActionListener();buttonPanel.add(resetButton);final JButton exitButton = new JButton();exitButton.setMargin(new Insets(0, 0, 0, 0);exitButton.setContentAreaFilled(false);exitButton.setBorderPainted(false);URL exitUrl = this.getClass().getResource("land_exit.png");exitButton.setIcon(new ImageIcon(exitUrl);URL exitOverUrl = this.getClass().getResource("land_exit_over.png");exitButton.setRolloverIcon(new ImageIcon(exitOverUrl);URL exitPressedUrl = this.getClass().getResource("land_exit_pressed.png");exitButton.setPressedIcon(new ImageIcon(exitPressedUrl);exitButton.addActionListener(new ExitButtonActionListener();buttonPanel.add(exitButton);/ 初始化用户名下拉菜单Vector userNameV = Dao.getInstance().sUserNameOfNotFreeze();if (userNameV.size() = 0) usernameComboBox.addItem("TSoft"); else for (int i = 0; i < userNameV.size(); i+) usernameComboBox.addItem(userNameV.get(i);class UsernameComboBoxActionListener implements ActionListener public void actionPerformed(ActionEvent e) String userName = (String) usernameComboBox.getSelectedItem();if (userName.equals("TSoft")passwordField.setText("111");class PasswordFieldFocusListener implements FocusListener public void focusGained(FocusEvent e) passwordField.setText("");public void focusLost(FocusEvent e) char passwords = passwordField.getPassword();String password = turnCharsToString(passwords);if (password.length() = 0) passwordField.setText(" ");class ExitButtonActionListener implements ActionListener public void actionPerformed(ActionEvent arg0) System.exit(0);class ResetButtonActionListener implements ActionListener public void actionPerformed(ActionEvent arg0) usernameComboBox.setSelectedIndex(0);passwordField.setText(" ");class LandButtonActionListener implements ActionListener public void actionPerformed(ActionEvent e) String username = usernameComboBox.getSelectedItem().toString();/ 获得登录用户的名称if (username.equals("请选择") / 查看是否选择了登录用户JOptionPane.showMessageDialog(null, "请选择登录用户!", "友情提示",JOptionPane.INFORMATION_MESSAGE);/ 弹出提示resetUsernameAndPassword();/ 恢复登录用户和登录密码char passwords = passwordField.getPassword();/ 获得登录用户的密码String inputPassword = turnCharsToString(passwords);/ 将密码从char型数组转换成字符串if (username.equals("JAVA") / 查看是否为默认用户登录if (inputPassword.equals("") / 查看密码是否为默认密码land(null);/ 登录成功String infos = "请立刻单击“用户管理”按钮添加用户!","添加用户后需要重新登录,本系统才能正常使用!" ;/ 组织提示信息JOptionPane.showMessageDialog(null, infos, "友情提示",JOptionPane.INFORMATION_MESSAGE);/ 弹出提示 else / 密码错误JOptionPane.showMessageDialog(null,"默认用户“TSoft”的登录密码为“111”!", "友情提示",JOptionPane.INFORMATION_MESSAGE);/ 弹出提示passwordField.setText("111");/ 将密码设置为默认密码 else if (inputPassword.length() = 0) / 用户未输入登录密码JOptionPane.showMessageDialog(null, "请输入登录密码!", "友情提示",JOptionPane.INFORMATION_MESSAGE);/ 弹出提示resetUsernameAndPassword();/ 恢复登录用户和登录密码Vector user = Dao.getInstance().sUserByName(username);/ 查询登录用户String password = user.get(5).toString();/ 获得登录用户的密码if (inputPassword.equals(password) / 查看登录密码是否正确land(user);/ 登录成功 else / 登录密码错误JOptionPane.showMessageDialog(null, "登录密码错误,请确认后重新登录!","友情提示", JOptionPane.INFORMATION_MESSAGE);/ 弹出提示resetUsernameAndPassword();/ 恢复登录用户和登录密码private void resetUsernameAndPassword() / 恢复登录用户和登录密码usernameComboBox.setSelectedIndex(0);/ 恢复选中的登录用户为“请选择”项passwordField.setText(" ");/ 恢复密码框的默认值为6个空格return;/ 直接返回private void land(Vector user) / 登录成功TipWizardFrame tipWizard = new TipWizardFrame(user);/ 创建主窗体对象tipWizard.setVisible(true);/ 设置主窗体可见setVisible(false);/ 设置登录窗口不可见private String turnCharsToString(char chars) StringBuffer strBuf = new StringBuffer();for (int i = 0; i < chars.length; i+) strBuf.append(charsi);return strBuf.toString().trim();数据库连接代码:package com.mwq.dao;import java.sql.Connection;import java.sql.DriverManager;public class JDBC private String JDBC="jdbc:mysql:/localhost:3306/drinkhome" private String dbUserName="root" private String dbPassword="" private String jdbcName="com.mysql.jdbc.Driver" /* 获取数据库连接 */ public Connection getCon() throws Exception Class.forName(jdbcName); Connection con=DriverManager.getConnection(JDBC, dbUserName,dbPassword); return con; /* * 关闭数据库连接 * * */ public void closeCon(Connection con) throws Exception if(con!=null) con.close(); public static void main(Stringargs) JDBC JDBC =new JDBC() ; try JDBC.getCon();System.out.println("数据库连接成功"); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace();System.out.println("数据库连接失败"); public static Connection getConnection() / TODO Auto-generated method stubreturn null;日期类代码:package com.mwq.tool;import java.util.Calendar;public class Today private static final Calendar NOW = Calendar.getInstance();private static final int YEAR = NOW.get(Calendar.YEAR);private static final int MONTH = NOW.get(Calendar.MONTH) + 1;private static final int DAY = NOW.get(Calendar.DAY_OF_MONTH);private static final int WEEK = NOW.get(Calendar.DAY_OF_WEEK);private static final int HOUR = NOW.get(Calendar.HOUR_OF_DAY);private static final int MINUTE = NOW.get(Calendar.MINUTE);private static final int SECOND = NOW.get(Calendar.SECOND);/public static String getDate() return YEAR + "-" + MONTH + "-" + DAY;public static String getDateOfNum() String y = YEAR + ""String m = MONTH + ""String d = DAY + ""if (MONTH < 10)m = "0" + MONTH;if (DAY < 10)d = "0" + DAY;return y + m + d;public static String getDateOfShow() return YEAR + "年" + MONTH + "月" + DAY + "日"public static String getDayOfWeek() String dayOfWeek = ""switch (WEEK) case 1:dayOfWeek = "星期日"break;case 2:dayOfWeek = "星期一"break;case 3:dayOfWeek = "星期二"break;case 4:dayOfWeek = "星期三"break;case 5:dayOfWeek = "星期四"break;case 6:dayOfWeek = "星期五"case 7:dayOfWeek = "星期六"break;return dayOfWeek;public static String getTime() return HOUR + ":" + MINUTE + ":" + SECOND;public static void main(String args) System.out.println(Today.getDayOfWeek();public static int getYEAR() return YEAR;public static int getDAY() return DAY;public static int getMONTH() return MONTH;利用正则表达式验证数据合法性的方法代码:package com.mwq.tool;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Validate public static boolean execute(String rule, String content) Pattern pattern = Ppile(rule);/ 利用验证规则创建Pattern对象Matcher matcher = pattern.matcher(content);/ 利用验证内容获得Matcher对象return matcher.matches();/ 返回验证结果按钮类:package com.mwq.mwing;import java.awt.Insets;import javax.swing.JButton