基于JavaSwing+Mysql点餐系统设计和实现
Posted java李阳勇
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于JavaSwing+Mysql点餐系统设计和实现相关的知识,希望对你有一定的参考价值。
前言:
本项目是使用Java swing开发,可实现餐厅点餐系统登陆/注册/重置、管理员端可以进行餐厅套餐信息管理、添加套餐、套餐信息的维护、修改和查询、点餐订单信息的处理、状态流程控制、查询以及修改密码、注销退出等几大模块。用户点餐端可以登录后查看套餐信息。点餐操作以及查看订单状态、界面设计比较简介、适合作为Java初学者课设设计以及学习技术使用。
摘要:
随着我国餐饮行业的发展,因餐饮业门坎较低,中国的大多数餐饮企业的老板是从小店发展起来的,家族式管理的居多,许多还是“人治” ,并没有一套现代企业制度和监督管理体制,所以从观念意识、经营思想和管理水平还有待专业化。随着人民生活水平的提高,餐饮业在服务行业中占有越来越重要的地位。努力在当前餐饮行业日趋激烈的竞争中脱颖而出,已成为每位餐饮业经营者所追求的目标。网络订餐实现了小店面大作为的成本效益,解决了因为店面小的限制而无法提高营业额的难题,是一个小投入大成效的经营新模式。在计算机普及后的今天,中国进入了互联网信息时代,生活方式和工作节奏都随着信息传递速度的加快而变得急促。从信件传递发展成 Email,从传统电话交流到 IP 电话网络电话,一切原本属于现实生活中的行为方式慢慢地向网络转移,传统的购物方式也正在向网络方面发展,出现了“网购”这种越来越受欢迎的新型消费方式。同样,作为服务业支柱的餐饮业不可避免地趋向网络化发展。
主要模块:
用户登录、注册、重置
管理员端: 套餐信息维护、查询、修改和删除操作、订单信息查询、修改流程状态、修改密码等
用户端 : 查看套餐信息、点餐操作、查看订单状态、修改密码等
功能截图:
登录 注册
添加套餐信息
管理员点击新增套餐信息、录入相关信息、选择图片等完成添加
添加结果:
数据库插入一条数据 添加成功
套餐信息维护:
管理员进入套餐维护页面、可以根据套餐名称和价格区间等数据进行模糊查询数据、选择套餐信息可以修改或删除套餐
订单管理:
管理员进入订单管理页面、可以根据订单信息查询订单的数据以及状态流程、可以修改订单的运输状态
修改密码:
输入旧密码验证通过后 输入2次相同的新密码完成密码修改
用户点单页面:
加入购物车:
提交订单成功:
查看订单状态和取消订单操作:
部分关键代码:
用户登录注册:
/**
* 用户登陆模块
*
* @author admin
*/
public class LogOnFrm extends javax.swing.JFrame {
DbUtil dbUtil = new DbUtil();
UserDao userDao = new UserDao();
public static User s_currentUser = null;// 保存登陆用户的参数
/** Creates new form LogOnFrm */
public LogOnFrm() {
// 改变系统默认字体
Font font = new Font("Dialog", Font.PLAIN, 12);
java.util.Enumeration keys = UIManager.getDefaults().keys();
while (keys.hasMoreElements()) {
Object key = keys.nextElement();
Object value = UIManager.get(key);
if (value instanceof javax.swing.plaf.FontUIResource) {
UIManager.put(key, font);
}
}
initComponents();
// 设置frame居中显示
this.setLocationRelativeTo(null);
}
// 登陆验证显示登陆以后界面
private void jb_logonActionPerformed(java.awt.event.ActionEvent evt) {
String userName = this.userNameTxt.getText();
String password = new String(this.passwordTxt.getPassword());
if (StringUtil.isEmpty(userName)) {
JOptionPane.showMessageDialog(null, "用户名不能为空");
return;
}
if (StringUtil.isEmpty(password)) {
JOptionPane.showMessageDialog(null, "密码不能为空");
return;
}
User user = new User(userName, password);
Connection con = null;
try {
con = dbUtil.getCon();
User currentUser = userDao.login(con, user);
if (currentUser != null) {
s_currentUser = currentUser;// 保存登陆的用户
int role = currentUser.getRank();
if (role == 1) {
this.dispose();
new AdminFrm().setVisible(true);// 进入管理员页面
} else if (role == 0) {
this.dispose();
new UserOrderFrm().setVisible(true);// 进入用户点餐界面
}
} else {
JOptionPane.showMessageDialog(null, "用户名或密码错误");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
JOptionPane.showMessageDialog(null, "用户名或密码错误");
} finally {
try {
dbUtil.closeCon(con);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* @param args
* the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new LogOnFrm().setVisible(true);
}
});
}
// GEN-BEGIN:variables
// Variables declaration - do not modify
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JButton jb_logon;
private javax.swing.JButton jb_register;
private javax.swing.JButton jb_reset;
private javax.swing.JPasswordField passwordTxt;
private javax.swing.JTextField userNameTxt;
// End of variables declaration//GEN-END:variables
}
添加套餐信息:
/**
* 套餐添加
*
* @author admin
*/
public class GoodsAddInterFrm extends javax.swing.JInternalFrame {
DbUtil dbUtil = new DbUtil();
GoodsDao goodsDao = new GoodsDao();
/** Creates new form GoodsAddInterFrm */
public GoodsAddInterFrm() {
initComponents();
this.setLocation(200, 80);
}
private void jb_addActionPerformed(java.awt.event.ActionEvent evt) {
String goodsName = this.goodsNameTxt.getText();
String goodsDesc = this.goodsDescTxt.getText();
String price = this.priceTxt.getText();
String imageLink = this.imageLinkTxt.getText();
if (StringUtil.isEmpty(goodsName)) {
JOptionPane.showMessageDialog(null, "套餐名称不能为空!");
return;
}
if (StringUtil.isEmpty(price)) {
JOptionPane.showMessageDialog(null, "套餐价格不能为空!");
return;
}
if (!StringUtil.isNum(price)) {
JOptionPane.showMessageDialog(null, "请重新输入套餐价格!");
return;
}
Goods goods = new Goods(goodsName, goodsDesc, Float.parseFloat(price), imageLink);
Connection con = null;
try {
con = dbUtil.getCon();
int n = goodsDao.GoodsAdd(con, goods);
if (n == 1) {
JOptionPane.showMessageDialog(null, "套餐添加成功");
this.resetValues();
} else {
JOptionPane.showMessageDialog(null, "套餐添加失败");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
JOptionPane.showMessageDialog(null, "套餐添加失败2");
}
}
// 点击选择图片操作
private void jb_chooserActionPerformed(java.awt.event.ActionEvent evt) {
JFileChooser chooser = new JFileChooser();// 创建文件对话框
FileNameExtensionFilter filter = new FileNameExtensionFilter("JPG & GIF Images", "jpg", "gif");// 创建文件过滤器
chooser.setFileFilter(filter);// 为文件对话框设置文件过滤器
int returnValue = chooser.showOpenDialog(getParent());// 打开文件选择对话框
if (returnValue == JFileChooser.APPROVE_OPTION) { // 判断是否选择了文件
File file = chooser.getSelectedFile(); // 获得文件对象
/*
* if (file.length() / 1024.0 > 50.0) {
* JOptionPane.showMessageDialog(null, "请选择小于等于50KB的图片文件。"); return;
* }
*/
String picturePath = file.getAbsolutePath();// 获取路径
// System.out.println(picturePath);
Icon icon = new ImageIcon(picturePath);// 新建图标
this.iamgeLb.setIcon(icon);// 设置图片并显示
this.imageLinkTxt.setText(picturePath);// 文本框显示路径
}
}
}
查询下单记录 :
/**
* 查询下单记录
*
* @author admin
*/
public class CheckOrderInterFrm extends javax.swing.JInternalFrame {
private static final JTable j_orderTable = null;
DbUtil dbUtil = new DbUtil();
OrderDao orderDao = new OrderDao();
GoodsDao goodsDao = new GoodsDao();
/** Creates new form checkOrderInterFrm */
public CheckOrderInterFrm() {
initComponents();
this.setLocation(320, 100);
this.userNameTxt.setText(LogOnFrm.s_currentUser.getUserName());
}
// GEN-BEGIN:initComponents
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jScrollPane2 = new javax.swing.JScrollPane();
cartTable = new javax.swing.JTable();
jLabel2 = new javax.swing.JLabel();
totalNumTxt = new javax.swing.JTextField();
totalMoneyTxt = new javax.swing.JTextField();
jLabel1 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
orderStatusTxt = new javax.swing.JTextField();
jb_status = new javax.swing.JButton();
jLabel4 = new javax.swing.JLabel();
userNameTxt = new javax.swing.JTextField();
jLabel5 = new javax.swing.JLabel();
orderIdTxt = new javax.swing.JTextField();
jb_search = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
orderTable = new javax.swing.JTable();
jPanel2 = new javax.swing.JPanel();
iamgeLb = new javax.swing.JLabel();
setClosable(true);
setIconifiable(true);
setTitle("\\u67e5\\u770b\\u8ba2\\u5355");
// 填充ordertable
private void fillOrderTable() {
String orderId = this.orderIdTxt.getText();
String userName = this.userNameTxt.getText();
Order order = new Order();
order.setOrderId(orderId);
order.setUserName(userName);
DefaultTableModel dtm = (DefaultTableModel) orderTable.getModel();
dtm.setRowCount(0);
Connection con = null;
try {
con = dbUtil.getCon();
ResultSet rs = orderDao.orderList(con, order);
while (rs.next()) {
Vector v = new Vector();
v.add(rs.getString("orderId"));
v.add(rs.getInt("orderNum"));
v.add(rs.getFloat("orderTotalMoney"));
int status = rs.getInt("orderStatus");
switch (status) {
case 0:
v.add("未处理");
break;
case 1:
v.add("烹饪中");
break;
case 2:
v.add("已送达");
break;
case 3:
v.add("已付款");
break;
case 4:
v.add("已取消");
break;
}
dtm.addRow(v);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
dbUtil.closeCon(con);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
// 点击订单table
private void orderTableMousePressed(java.awt.event.MouseEvent evt) {
// 获取选中的行
int row = orderTable.getSelectedRow();
String orderId = (String) orderTable.getValueAt(row, 0);
this.totalNumTxt.setText(orderTable.getValueAt(row, 1) + "");// 把int,float型转化为string
this.totalMoneyTxt.setText(orderTable.getValueAt(row, 2) + "");
String orderStatus = (String) orderTable.getValueAt(row, 3);
this.orderStatusTxt.setText(orderStatus);
this.iamgeLb.setIcon(null);
// 修改取消订单按钮状态
if (!orderStatus.equals("未处理")) {
jb_status.setEnabled(false);
} else {
jb_status.setEnabled(true);
}
Order order = new Order();
order.setOrderId(orderId);
DefaultTableModel dtm = (DefaultTableModel) cartTable.getModel();
dtm.setRowCount(0);
Connection con = null;
try {
con = dbUtil.getCon();
ResultSet rs = orderDao.orderGoodsList(con, order);
while (rs.next()) {
Vector v = new Vector();
v.add(rs.getString("goodsId"));
v.add(rs.getString("goodsName"));
v.add(rs.getInt("goodsNum"));
v.add(rs.getFloat("goodsPrice"));
v.add(rs.getFloat("goodsTotalPrice"));
dtm.addRow(v);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
dbUtil.closeCon(con);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
// 点击查询订单
private void jb_searchActionPerformed(java.awt.event.ActionEvent evt) {
fillOrderTable();
}
}
数据库设计:
套餐表:
CREATE TABLE `NewTable` (
`id` int(10) NOT NULL AUTO_INCREMENT ,
`goodsName` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`price` float NULL DEFAULT NULL ,
`goodsDesc` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`imageLink` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=17
ROW_FORMAT=DYNAMIC
;
订单套餐表:
CREATE TABLE `NewTable` (
`id` int(10) NOT NULL AUTO_INCREMENT ,
`orderId` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`goodsTotalPrice` float NULL DEFAULT NULL ,
`goodsId` int(10) NULL DEFAULT NULL ,
`goodsPrice` float NULL DEFAULT NULL ,
`goodsNum` int(10) NULL DEFAULT NULL ,
`goodsName` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
PRIMARY KEY (`id`),
INDEX `FK_order_goods_2` (`orderId`) USING BTREE ,
INDEX `FK_order_goods_1` (`goodsId`) USING BTREE
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=48
ROW_FORMAT=DYNAMIC
;
收银表:
CREATE TABLE `NewTable` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`type` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '类型' ,
`money` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '金额' ,
`remarks` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注' ,
`time` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建时间' ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=8
ROW_FORMAT=DYNAMIC
;
订单信息表:
CREATE TABLE `NewTable` (
`orderId` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`orderStatus` int(10) NULL DEFAULT NULL ,
`orderNum` int(10) NULL DEFAULT NULL ,
`orderTotalMoney` float NULL DEFAULT NULL ,
`userName` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
PRIMARY KEY (`orderId`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
ROW_FORMAT=DYNAMIC
;
用户信息表:
CREATE TABLE `NewTable` (
`id` int(10) NOT NULL AUTO_INCREMENT ,
`userName` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`password` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`email` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`rank` int(1) NULL DEFAULT 0 ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=11
ROW_FORMAT=DYNAMIC
;
总结:
通过这次课程设计。我学到了许多令我受益匪浅的知识。感觉java的界面设计和 mfc差不多。只是java没有可视化的界面做起来太累了。其他主要是类和对象的问题。实现起来还是挺简单的。使用一个拥有很高稳定性与安全性的数据库 mysql ,把 2 个软件联合起来,完成系统的设计与开发。也充分考虑了用户的需求,。操作者可以在任何时间在所有的信息查询,和每个模块提供了信息浏览功能。 本系统实现了在 网上订餐系统网站消费的顾客可以通过系统搜索到自己需要的套餐信息,购买自己需要的套餐,在线下达订单。然后由网上订餐系统后台来 处理相关的订单信息、等信息。 因为本人在知识,经验不足,在发展过程中的时间较短,所以系统 会有一些缺陷和不足。在未来将 更加努力完善这个系统、但是作为学生学习参考以及课程设计还是不错的选择。
完整源码下载地址
JavaSwing系列项目推荐:
打卡JavaSwing项目更新 8 / 100篇
大家可以点赞、收藏、关注、评论我啦
以上是关于基于JavaSwing+Mysql点餐系统设计和实现的主要内容,如果未能解决你的问题,请参考以下文章