Java-Swing+mysql进销存管理系统

目录

一、系统说明

二、用户模块

2.1 用户登录 

2.2 添加商品

2.3 修改商品

2.4 删除商品

2.5. 条件查询销售单

2.6 添加销售单

2.7 添加入库单

2.8 删除入库单

2.9 条件查询入库单

2.10 添加出库单

2.11 删除出库单

2.12 条件查询出库单

2.13 添加仓库

2.14 修改仓库

2.15 删除仓库

2.16 修改用户名

2.17 修改密码

 三、系统详细设计

四、课程设计总结  


一、Java swing进销存系统系统说明

        此套系统的重点在于通过有效的仓库管理提高零售店的效益,因此需要完成商品管理,销售管理,出入库管理,仓库管理,用户管理几个模块,以保证系统能够有效,高效地帮助零售店完成现代化销售管理。而销售管理则对系统数据的精确性和安全性有着较高的要求,即系统要求设计严密的输入输出验证机制,保证对输入与输出的严格把控,另外,系统应当制定灵活的权限机制,对不同身份的用户开放对应的操作权限接口,保证系统有序地运行。

        此套系统首先分为五大部分,分别为登录、首页、基础数据、进销存管理、用户管理,首页为欢迎页面,基础数据下设商品管理功能模块,进销存管理下设销售单、入库单、出库单、仓库管理四个功能模块,用户管理为单独功能模块。

功能结构图如下所示:

图1 系统功能结构图

二、系统功能设计

        以下将结合用户调研结果细化分析每个功能模块的需求:

2.1 用户登录 

        打开登录页面,输入用户名和密码,点击登录,系统验证输入的合法性,若输入不合法,则弹出错误提示,若输入合法,系统自动跳转到首页欢迎页面,等待用和操作。

2.2 添加商品

        点击添加按钮,系统弹出添加商品窗口,输入商品信息,用户提交信息,后台验证输入的合法性,系统返回对应的提示信息,刷新商品列表,保证系统实时同步数据库。

2.3 修改商品

        点击修改按钮,判断用户是否已经选择数据,若未选择数据,系统则返回错误提示信息,若已选择数据,则通过所选商品的id查询商品其他信息,弹出修改商品信息的窗口,回写商品信息,用户修改数据后,提交信息,后台验证输入的合法性,系统返回对应的提示信息,刷新商品列表,保证系统实时同步数据库。

2.4 删除商品

        点击删除按钮,,判断用户是否已经选择数据,若未选择数据,系统则返回错误提示信息,若已选择数据,则弹出确认删除对话框,防止用户的误操作,用户取消删除,则返回上一级,若用户确定删除,点击确定按钮,系统将通过获取到的商品id删除记录,然后返回提示信息,刷新商品列表,保证系统实时同步数据库。

2.5. 条件查询销售单

系统默认查询所有商品信息,允许用户根据商品种类和所属仓库筛选销售单信息,用户输入商品种类,所属仓库时,系统作条件查询,刷新商品列表,保证系统实时同步数据库。

2.6 添加销售单

点击添加按钮,系统弹出添加销售单窗口,输入销售单信息,用户提交信息,后台验证输入的合法性,并由系统根据时间生成订单号,并减少商品库存,系统返回对应的提示信息,刷新销售单列表,保证系统实时同步数据库。

II条件查询销售单

系统默认查询所有销售单信息,允许用户根据商品名模糊查询,根据商品种类和所属仓库筛选商品信息,用户输入商品名,商品种类,所属仓库时,系统作条件查询,刷新销售单列表,保证系统实时同步数据库。

④入库单

2.7 添加入库单

点击添加按钮,系统弹出添加入库单窗口,输入入库单信息,用户提交信息,后台验证输入的合法性,并由系统根据时间生成订单号,并增加商品库存,系统返回对应的提示信息,刷新入库单列表,保证系统实时同步数据库。

2.8 删除入库单

点击删除按钮,,判断用户是否已经选择数据,若未选择数据,系统则返回错误提示信息,若已选择数据,则弹出确认删除对话框,防止用户的误操作,用户取消删除,则返回上一级,若用户确定删除,点击确定按钮,系统将通过获取到的入库单id删除记录,然后返回提示信息,刷新入库单列表,保证系统实时同步数据库。

2.9 条件查询入库单

若当前用户身份为管理员,系统默认查询所有入库单信息,若当前用户身份为普通用户,则只允许查看当前用户所经手的入库单,系统支持用户根据商品名模糊查询,根据商品种类和所属仓库筛选入库单信息,用户输入商品名,商品种类,所属仓库时,系统作条件查询,刷新入库单列表,保证系统实时同步数据库。

⑤出库单

2.10 添加出库单

点击添加按钮,系统弹出添加出库单窗口,输入出库单信息,用户提交信息,后台验证输入的合法性,并由系统根据时间生成订单号,并减少商品库存,系统返回对应的提示信息,刷新出库单列表,保证系统实时同步数据库。

2.11 删除出库单

点击删除按钮,,判断用户是否已经选择数据,若未选择数据,系统则返回错误提示信息,若已选择数据,则弹出确认删除对话框,防止用户的误操作,用户取消删除,则返回上一级,若用户确定删除,点击确定按钮,系统将通过获取到的出库单id删除记录,然后返回提示信息,刷新出库单列表,保证系统实时同步数据库。

2.12 条件查询出库单

若当前用户身份为管理员,系统默认查询所有入库单信息,若当前用户身份为普通用户,则只允许查看当前用户所经手的出库单,系统支持用户根据商品名模糊查询,根据商品种类和所属仓库筛选出库单信息,用户输入商品名,商品种类,所属仓库时,系统作条件查询,刷新出库单列表,保证系统实时同步数据库。

⑥仓库管理

2.13 添加仓库

点击添加按钮,系统弹出添加商品窗口,输入仓库信息,用户提交信息,后台验证输入的合法性,系统返回对应的提示信息,刷新仓库列表,保证系统实时同步数据库。

2.14 修改仓库

点击修改按钮,判断用户是否已经选择数据,若未选择数据,系统则返回错误提示信息,若已选择数据,则通过所选仓库的id查询仓库其他信息,弹出修改仓库信息的窗口,回写仓库信息,用户修改数据后,提交信息,后台验证输入的合法性,系统返回对应的提示信息,刷新仓库列表,保证系统实时同步数据库。

2.15 删除仓库

点击删除按钮,,判断用户是否已经选择数据,若未选择数据,系统则返回错误提示信息,若已选择数据,则弹出确认删除对话框,防止用户的误操作,用户取消删除,则返回上一级,若用户确定删除,点击确定按钮,系统将通过获取到的仓库id删除记录,然后返回提示信息,刷新仓库列表,保证系统实时同步数据库。

⑦用户管理

2.16 修改用户名

进入用户管理,系统将根据当前用户id回写用户信息(隐藏密码),且用户名不允许修改,点击修改按钮,弹出用户验证窗口,要求输入当前用户原始密码,用户确定,系统验证密码的合法性,若密码非法,则返回对应错误提示信息,返回用户管理主页,若密码合法,则允许用户修改信息,当用户提交修改时,系统验证输入的合法性,返回对应的提示信息,修改成功则要求用户重新登录。

2.17 修改密码

进入用户管理,系统将根据当前用户id回写用户信息(隐藏密码),且密码不允许修改,点击修改按钮,弹出用户验证窗口,要求输入当前用户原始密码,用户确定,系统验证密码的合法性,若密码非法,则返回对应错误提示信息,返回用户管理主页,若密码合法,则允许用户修改信息,当用户提交修改时,系统验证输入的合法性,返回对应的提示信息,修改成功则要求用户重新登录。

 三、系统详细设计

1.适配器模式

系统登录模块的核心问题就是用户身份的验证,应注意的是要控制好输入的合法化,防止系统错误的发生,若用户身份验证失败,系统则弹出错误信息,然后返回登陆界面,提供重新登录;若用户身份验证成功,系统则跳转进入主界面。

流程图如下:

使用了适配器模式, 在类适配器模式中,适配器类实现了目标抽象类接口并继承了适配者类,在目标抽象类的实现方法中调用所继承的适配者类的方法。实现了解耦合,让代码量减少,各个模块分块来做。

 public void mouseClicked(MouseEvent e) {

if (e.getSource() == button_login) {

if ("用户名/账号".equals(username.getText())) {

JOptionPane.showMessageDialog(null, "用户名不能为空");

} else if ("密码".equals(password.getText())) {

JOptionPane.showMessageDialog(null, "用户密码不能为空");

} else {

String params[] = { username.getText(), password.getText() };

UserServiceImpl userService = new UserServiceImpl();

try {

User user = userService.selectOne(params);

if (user == null) {

JOptionPane.showMessageDialog(null, "用户名密码有误");

} else {

this.setVisible(false);

new IndexJFrame(user);

}

} catch (Exception e1) {

e1.printStackTrace();

}

2.策略模式

主界面等IndexJFrame,LoginJFrame以及其他JFrame都实现了MouseListener等监听接口,使用了策略模式,策略模式是一种行为型模式,它将对象和行为分开,将行为定义为 一个行为接口 和 具体行为的实现。让各个模块如登录,管理的操作都有响应。

public class LoginJFrame extends JFrame implements MouseListener, FocusListener {

// 全局的位置变量,用于表示鼠标在窗口上的位置

static Point origin = new Point();

// 定义全局组件

JTextField username = new JTextField(20);

JPasswordField password = new JPasswordField(20);

ImagePanel backgroundPanel = null;

JButton button_minimize, button_close, button_login, button_reset;

public class GoodsManagerJPanel implements ActionListener, MouseListener {

// 定义全局组件

JPanel backgroundPanel, topPanel, toolPanel, searchPanel, tablePanel;

JComboBox select_category, select_warehouse;

BaseTableModule baseTableModule;

JTable table;

JScrollPane jScrollPane;

JLabel label_category, label_warehouse, tool_add, tool_modify, tool_delete;

  1. 模板方法

模板方法是一种行为模式,父类的一个方法定义完成这个方法的步骤,但不具体实现具体细节,由子类完成各个步骤的实现,在创建子类对象时,最终实现过程是子类的方法。在系统中,定义Dao层进行数据库的操作,在dao包中进行父类方法的定义,但是没有实现,在dao.Impl中继承父类的方法,实现对应的功能,完成数据库操作。

/**

 *

 * 说明:基础Dao数据库操作接口

 *

 * @author LS

 *

 * */

public interface BaseDao {

public List select(String sql, int columnNum, Object[] paraArray)

throws SQLException;

public int insert(String sql, Object[] paraArray) throws SQLException;

public int update(String sql, Object[] paraArray) throws SQLException;

public int delete(String sql, Object[] paraArray) throws SQLException;

}

/**

 *

 * 说明:基础Dao数据库操作实现

 *

 * @author LS

 *

 *

 */

public class BaseDaoImpl implements BaseDao {

private static Logger logger = Logger.getLogger(BaseDaoImpl.class);

private Connection conn;

private PreparedStatement pst;

private ResultSet rs;

// 构造方法获取数据库连接

public BaseDaoImpl() {

conn = new JdbcUtil().getJdbcUtil().getConnection();

}

// 重写查询数据方法

@Override

public List select(String sql, int columnNum, Object[] paraArray) throws SQLException {

List list = new ArrayList();

pst = conn.prepareStatement(sql);

if (paraArray != null) {

for (int i = 0, length = paraArray.length; i < length; i++) {

pst.setObject(i + 1, paraArray[i]);

}

}

ResultSet rs = pst.executeQuery();

while (rs.next()) {

Object[] array = new Object[columnNum];

for (int i = 0; i < columnNum; i++) {

array[i] = rs.getObject(i + 1);

}

list.add(array);

}

new JdbcUtil().getJdbcUtil().release(rs, pst, conn);

return list;

}

  1. 单例模式

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建,在进行数据库链接创建时,保证每次调用只有一个数据库链接被创建,使用后进行销毁,使用了单例模式

/**

 * 创建一个数据库连接

 *

 * @return 一个数据库连接

 *

 */

public Connection getConnection() {

Connection conn = null;

// 创建数据库连接

try {

conn = DriverManager.getConnection(url, username, password);

} catch (SQLException e) {

logger.error("创建数据库连接发生异常", e);

}

return conn;

}

工厂模式

一种非常常用的创建型设计模式,其提供了创建对象的最佳方式。在创建对象时,不会对客户端暴露对象的创建逻辑,而是通过使用共同的接口来创建对象。在创建BaseDAO时候,后面继承的方法会直接通过创建使用BaseDAO来获取对象, 保证客户端无法看到对象的创建逻辑。

public class BaseDaoImpl implements BaseDao {

private static Logger logger = Logger.getLogger(BaseDaoImpl.class);

private Connection conn;

private PreparedStatement pst;

private ResultSet rs;

// 构造方法获取数据库连接

public BaseDaoImpl() {

conn = new JdbcUtil().getJdbcUtil().getConnection();

}

@Override

public Vector<Vector> selectStockInputByCondition(Object[] paraArray) throws Exception {

Vector<Vector> rows = new Vector<Vector>();

BaseDaoImpl dao = new BaseDaoImpl();

StringBuilder sqlBuilder = new StringBuilder(

"select s.id,s.bill_no,g.name,s.amount,c.name,w.name,u.name,c.id,w.id "

+ " from stock_order s,goods g,user u,category c,warehouse w "

+ " where s.handler_id=u.id and s.goods_id=g.id and s.category_id=c.id and s.warehouse_id=w.id and s.sign='0' and s.del_flag='0' and g.del_flag='0' and c.del_flag=0 and w.del_flag='0' ");

String name = paraArray[0].toString().trim();

四、课程设计总结  

        这次课程设计让我学到很多知识,在处理过程中遇到了数据库链接不上,字段转换有异常等原因,好在同学们帮助我,让我解决了问题。提高了自身实践能力的同时让我明白了自己的不足之处,如所学知识范围局限,拘泥于课本,实践能力差等等。因此在以后的工作学习过程中我的目标是要提高自己的自学、研究、实践能力,让自己的知识功底更加扎实。

总的来说,在本次课程设计中,我真正学到了很多实践知识,都是在课堂内所学不到的知识,收获很大,最后也要感谢同学以及老师的鼓励和帮助,让我顺利的完成了本次课程。

以上资源包括源码,mysql数据库文件,文档,代码中需要修改成自己的数据库账号密码,jar包需要build path进去,不会运行可+Q 2410068425

下载地址:https://download.csdn.net/download/qq_39336564/85906191

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

罗飞侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值