⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tipwizardframe.java

📁 酒店管理系统的需求包括开台点菜功能、智能化获取菜品功能、自动结账功能、营业额报表功能等。依据餐饮行业的特点
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
package com.mwq.frame;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.net.URL;
import java.util.Calendar;
import java.util.Date;
import java.util.Vector;

import javax.swing.ButtonGroup;
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.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;

import com.mwq.dao.Dao;
import com.mwq.frame.check_out.DayDialog;
import com.mwq.frame.check_out.MonthDialog;
import com.mwq.frame.check_out.YearDialog;
import com.mwq.frame.manage.DeskNumDialog;
import com.mwq.frame.manage.MenuDialog;
import com.mwq.frame.manage.SortDialog;
import com.mwq.frame.user.UpdatePasswordDialog;
import com.mwq.frame.user.UserManagerDialog;
import com.mwq.mwing.MButton;
import com.mwq.mwing.MTable;
import com.mwq.tool.Today;
import com.mwq.tool.Validate;

public class TipWizardFrame extends JFrame {

	private JLabel timeLabel;

	private JTextField amountTextField;

	private JTextField unitTextField;

	private JTextField nameTextField;

	private JTextField codeTextField;

	private JComboBox numComboBox;

	private JTextField changeTextField;

	private JTextField realWagesTextField;

	private JTextField expenditureTextField;

	private ButtonGroup buttonGroup = new ButtonGroup();

	private MTable rightTable;

	private Vector<String> rightTableColumnV;

	private Vector<Vector<Object>> rightTableValueV;

	private DefaultTableModel rightTableModel;

	private MTable leftTable;

	private Vector<String> leftTableColumnV;

	private Vector<Vector<Object>> leftTableValueV;

	private DefaultTableModel leftTableModel;

	private Vector<Vector<Vector<Object>>> menuOfDeskV;

	private Dimension screenSize;

	private final Dao dao = Dao.getInstance();

	/**
	 * Launch the application
	 * 
	 * @param args
	 */
	public static void main(String args[]) {
		try {
			TipWizardFrame frame = new TipWizardFrame(null);
			frame.setVisible(true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Create the frame
	 */
	public TipWizardFrame(final Vector user) {
		super();
		setTitle(" T 科技");
		setResizable(false);
		setBounds(0, 0, 1024, 768);
		setExtendedState(TipWizardFrame.MAXIMIZED_BOTH);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		screenSize = Toolkit.getDefaultToolkit().getScreenSize();

		final JLabel topLabel = new JLabel();
		topLabel.setPreferredSize(new Dimension(0, 100));
		topLabel.setHorizontalAlignment(SwingConstants.CENTER);
		URL topUrl = this.getClass().getResource("/img/top.jpg");
		ImageIcon topIcon = new ImageIcon(topUrl);
		topLabel.setIcon(topIcon);
		getContentPane().add(topLabel, BorderLayout.NORTH);

		final JSplitPane splitPane = new JSplitPane();// 创建分割面版对象
		splitPane.setOrientation(JSplitPane.HORIZONTAL_SPLIT);// 设置为水平分割
		splitPane.setDividerLocation(755);// 设置面版默认的分割位置
		splitPane.setDividerSize(10);// 设置分割条的宽度
		splitPane.setOneTouchExpandable(true);// 设置为支持快速展开/折叠分割条
		splitPane.setBorder(new TitledBorder(null, "",
				TitledBorder.DEFAULT_JUSTIFICATION,
				TitledBorder.DEFAULT_POSITION, null, null));// 设置面版的边框
		getContentPane().add(splitPane, BorderLayout.CENTER);// 将分割面版添加到上级容器中

		final JPanel leftPanel = new JPanel();// 创建放于分割面版左侧的普通面版对象
		leftPanel.setLayout(new BorderLayout());// 设置面板的布局管理器
		splitPane.setLeftComponent(leftPanel);// 将普通面版对象添加到分割面版的左侧

		final JLabel leftTitleLabel = new JLabel();
		leftTitleLabel.setFont(new Font("", Font.BOLD, 14));
		leftTitleLabel.setPreferredSize(new Dimension(0, 25));
		leftTitleLabel.setText(" 签单列表:");
		leftPanel.add(leftTitleLabel, BorderLayout.NORTH);

		final JScrollPane leftScrollPane = new JScrollPane();
		leftPanel.add(leftScrollPane);

		menuOfDeskV = new Vector<Vector<Vector<Object>>>();

		leftTableColumnV = new Vector<String>();
		String leftTableColumns[] = { "  ", "序    号", "商品编号", "商品名称", "单    位",
				"数    量", "单    价", "金    额" };
		for (int i = 0; i < leftTableColumns.length; i++) {
			leftTableColumnV.add(leftTableColumns[i]);
		}

		leftTableValueV = new Vector<Vector<Object>>();

		leftTableModel = new DefaultTableModel(leftTableValueV,
				leftTableColumnV);
		leftTableModel.addTableModelListener(new TableModelListener() {
			public void tableChanged(TableModelEvent e) {// 通过表格模型监听器实现自动结账
				int rowCount = leftTable.getRowCount();// 获得签单列表中的行数
				float expenditure = 0.0f;// 默认消费 0 元
				for (int row = 0; row < rowCount; row++) {// 通过循环计算消费金额
					expenditure += Float.valueOf(leftTable.getValueAt(row, 7)
							.toString());// 累加消费金额
				}
				expenditureTextField.setText(expenditure + "0");// 更新“消费金额”文本框
			}
		});

		leftTable = new MTable(leftTableModel);
		leftScrollPane.setViewportView(leftTable);

		final JPanel rightPanel = new JPanel();// 创建放于分割面版右侧的普通面版对象
		rightPanel.setLayout(new BorderLayout());
		splitPane.setRightComponent(rightPanel);// 将普通面版对象添加到分割面版的右侧

		final JLabel rightTitleLabel = new JLabel();
		rightTitleLabel.setFont(new Font("", Font.BOLD, 14));
		rightTitleLabel.setPreferredSize(new Dimension(0, 25));
		rightTitleLabel.setText(" 开台列表:");
		rightPanel.add(rightTitleLabel, BorderLayout.NORTH);

		final JScrollPane rightScrollPane = new JScrollPane();
		rightPanel.add(rightScrollPane);

		rightTableColumnV = new Vector<String>();
		rightTableColumnV.add("序    号");
		rightTableColumnV.add("台    号");
		rightTableColumnV.add("开台时间");

		rightTableValueV = new Vector<Vector<Object>>();

		rightTableModel = new DefaultTableModel(rightTableValueV,
				rightTableColumnV);

		rightTable = new MTable(rightTableModel);
		rightTable.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				int rSelectedRow = rightTable.getSelectedRow();// 获得“开台列表”中的选中行
				leftTableValueV.removeAllElements();// 清空“签单列表”中的所有行
				leftTableValueV.addAll(menuOfDeskV.get(rSelectedRow));// 将选中台号的签单列表添加到“签单列表”中
				leftTableModel.setDataVector(leftTableValueV, leftTableColumnV);// 刷新“签单列表”
				leftTable.setRowSelectionInterval(0);// 选中“签单列表”中的第一行
				numComboBox.setSelectedItem(rightTable.getValueAt(rSelectedRow,
						1));// 同步选中“台号”下拉菜单中的相应台号
			}
		});
		rightScrollPane.setViewportView(rightTable);

		final JPanel bottomPanel = new JPanel();
		bottomPanel.setPreferredSize(new Dimension(0, 230));
		bottomPanel.setLayout(new BorderLayout());
		getContentPane().add(bottomPanel, BorderLayout.SOUTH);

		final JPanel orderDishesPanel = new JPanel();
		orderDishesPanel.setBorder(new EtchedBorder(EtchedBorder.LOWERED));
		bottomPanel.add(orderDishesPanel, BorderLayout.NORTH);

		final JLabel numLabel = new JLabel();
		numLabel.setFont(new Font("", Font.BOLD, 12));
		numLabel.setText("台号:");
		orderDishesPanel.add(numLabel);

		numComboBox = new JComboBox();
		numComboBox.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				int rowCount = rightTable.getRowCount();// 获得开台列表中的行数,即已开台数
				if (rowCount > 0) {// 已经有开台
					String selectedDeskNum = numComboBox.getSelectedItem()
							.toString();// 获得“台号”下拉菜单中选中的台号
					int needSelectedRow = -1;// 默认选中的台号未开台
					opened: for (int row = 0; row < rowCount; row++) {// 通过循环查看选中的台号是否已经开台
						String openedDeskNum = rightTable.getValueAt(row, 1)
								.toString();// 获得已开台的台号
						if (selectedDeskNum.equals(openedDeskNum)) {// 查看选中的台号是否已经开台
							needSelectedRow = row;// 选中的台号已经开台
							break opened;// 跳出循环
						}
					}
					if (needSelectedRow == -1) {// 选中的台号尚未开台,即新开台
						rightTable.clearSelection();// 取消选择“开台列表”中的选中行
						leftTableValueV.removeAllElements();// 清空“签单列表”中的所有行
						leftTableModel.setDataVector(leftTableValueV,
								leftTableColumnV);// 刷新“签单列表”
					} else {// 选中的台号已经开台,即添加菜品
						if (needSelectedRow != rightTable.getSelectedRow()) {
							// “台号”下拉菜单中选中的台号在“开台列表”中未被选中
							rightTable.setRowSelectionInterval(needSelectedRow);// 在“开台列表”中选中该台号
							leftTableValueV.removeAllElements();// 清空“签单列表”中的所有行
							leftTableValueV.addAll(menuOfDeskV
									.get(needSelectedRow));// 将选中台号的签单列表添加到“签单列表”中
							leftTableModel.setDataVector(leftTableValueV,
									leftTableColumnV);// 刷新“签单列表”
							leftTable.setRowSelectionInterval(0);// 选中“签单列表”中的第一行
						}
					}
				}
			}
		});
		initNumComboBox();
		orderDishesPanel.add(numComboBox);

		final JPanel panel = new JPanel();
		panel.setLayout(new GridBagLayout());
		orderDishesPanel.add(panel);

		final JLabel codeALabel = new JLabel();
		codeALabel.setFont(new Font("", Font.BOLD, 12));
		codeALabel.setText("  商品(");
		final GridBagConstraints gridBagConstraints = new GridBagConstraints();
		gridBagConstraints.gridy = 0;
		gridBagConstraints.gridx = 0;
		panel.add(codeALabel, gridBagConstraints);

		final JRadioButton numRadioButton = new JRadioButton();
		numRadioButton.setFont(new Font("", Font.BOLD, 12));
		buttonGroup.add(numRadioButton);
		numRadioButton.setText("编号");
		final GridBagConstraints gridBagConstraints_1 = new GridBagConstraints();
		gridBagConstraints_1.gridy = 0;
		gridBagConstraints_1.gridx = 1;
		panel.add(numRadioButton, gridBagConstraints_1);

		final JLabel codeBLabel = new JLabel();
		codeBLabel.setFont(new Font("", Font.BOLD, 12));
		codeBLabel.setText("/");
		final GridBagConstraints gridBagConstraints_2 = new GridBagConstraints();
		gridBagConstraints_2.gridy = 0;
		gridBagConstraints_2.gridx = 2;
		panel.add(codeBLabel, gridBagConstraints_2);

		final JRadioButton codeRadioButton = new JRadioButton();
		codeRadioButton.setFont(new Font("", Font.BOLD, 12));
		buttonGroup.add(codeRadioButton);
		codeRadioButton.setSelected(true);
		codeRadioButton.setText("助记码");
		final GridBagConstraints gridBagConstraints_3 = new GridBagConstraints();
		gridBagConstraints_3.gridy = 0;
		gridBagConstraints_3.gridx = 3;
		panel.add(codeRadioButton, gridBagConstraints_3);

		final JLabel codeCLabel = new JLabel();
		codeCLabel.setText("):");
		final GridBagConstraints gridBagConstraints_4 = new GridBagConstraints();
		gridBagConstraints_4.gridy = 0;
		gridBagConstraints_4.gridx = 4;
		panel.add(codeCLabel, gridBagConstraints_4);

		codeTextField = new JTextField();
		codeTextField.addKeyListener(new KeyAdapter() {

			public void keyTyped(KeyEvent e) {
				if (e.getKeyChar() == ' ')// 判断用户输入的是否为空格
					e.consume();// 如果是空格则销毁此次按键事件
			}

			public void keyReleased(KeyEvent e) {// 通过键盘监听器实现智能获取菜品
				if (e.getKeyCode() == KeyEvent.VK_ENTER) {// 按下回车键
					makeOutAnInvoice();// 开单
				} else {
					String input = codeTextField.getText().trim();// 获得输入内容
					Vector vector = null;// 符合条件的菜品集合
					if (input.length() > 0) {// 输入内容不为空
						if (codeRadioButton.isSelected()) {// 按助记码查询
							vector = dao.sMenuByCode(input);// 查询符合条件的菜品
							if (vector.size() > 0)// 存在符合条件的菜品
								vector = (Vector) vector.get(0);// 获得第一个符合条件的菜品
							else
								// 不存在符合条件的菜品
								vector = null;
						} else {// 按编号查询
							vector = dao.sMenuById(input);// 查询符合条件的菜品
							if (vector.size() > 0)// 存在符合条件的菜品
								vector = (Vector) vector.get(0);// 获得第一个符合条件的菜品
							else
								// 不存在符合条件的菜品
								vector = null;
						}
					}
					if (vector == null) {// 不存在符合条件的菜品
						nameTextField.setText(null);// 设置“商品名称”文本框为空
						unitTextField.setText(null);// 设置“单位”文本框为空
					} else {// 存在符合条件的菜品
						nameTextField.setText(vector.get(3).toString());// 设置“商品名称”文本框为符合条件的菜品名称

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -