• JavaSE库存管理系统项目实战


    需求分析

    企业库房用于存放成品、半成品、原材料、工具等物资,一般情况下,这些物资统称为物料。库存管理常见业务包括物资的入库、出库、盘点、退货、报废以及财务核算等,业务逻辑比较复杂,库房信息系统项目开发周期一般要1~3个月。
    本实践项目基于企业实际库存业务进行简化,实现一个简单的库存管理系统,便于学生在理解库存管理业务的同时,掌握Java SE开发技术,并最终完成整个项目开发。

    库存管理是指在物流过程中商品数量的管理,是企业生产过程,商品流通过程中的重要环节。基本目标就是防止超储和缺货,以最合理的成本为用户提供所期望水平的服务,即在达到顾客期望的服务水平的前提下,尽量将库存成本减少到可以接受的水平。

    本例主要讲解用户管理模块的开发。

    项目运行效果

    用户登录:

    用户数据查看:

    数据库建设

    MySQL中信息用户表k_user,添加测试数据:

    代码编写

    项目整体框架分为三层,数据库层、业务层、视图层。在Eclipse中的整体项目结构如下图:

    BaseDao为数据库层的基类,作用是获取数据库连接,封装公共的增删改查数据库方法。
    BaseDao.java的源码如下:

    点击展开内容 ```java package com.stock.dao;

    import java.sql.*;
    /**

    • Dao层的基类,获取数据库连接
      */
      public class BaseDao {

    private String driver = "com.mysql.jdbc.Driver";
    private String url = "jdbc:mysql://localhost:3306/orcl";
    private String name = "root";
    private String pass = "123456";

    public Connection conn;
    public PreparedStatement ps;
    public ResultSet rs;

    /**

    • 得到数据库连接
      */
      public Connection getConn() {
      try {
      Class.forName(driver);
      this.conn = DriverManager.getConnection(url, name, pass);
    } catch (Exception e) {
      e.printStackTrace();
    }
    return conn;
    

    }

    /** 测试连接 */
    public static void main(String[] args) {
    BaseDao bd = new BaseDao();
    bd.getConn();
    }

    /** 关闭资源 **/
    public void closeAll() {
    try {
    if (rs != null) {
    rs.close();
    rs = null;
    }
    if (ps != null) {
    ps.close();
    ps = null;
    }
    if (conn != null) {
    conn.close();
    conn = null;
    }
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }

    /** 增删改的公用方法 **/
    public int execSql(String sql, String param[]) {
    int ret = 0;
    this.conn = this.getConn();
    try {
    this.ps = conn.prepareStatement(sql);
    if (param != null) {
    for (int i = 0; i < param.length; i++) {
    ps.setString(i + 1, param[i]);
    }

      }
      ret = ps.executeUpdate();
    } catch (SQLException e) {
      e.printStackTrace();
    } finally {
      this.closeAll();
    }
    return ret;
    

    }
    }

    </details>
    UserDao存放于用户相关的数据库操作。
    UserDao.java的源码如下:
    <details>
    <summary><font color="blue">点击展开内容</font></summary>
    ```java
    package com.stock.dao;
    
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    
    import com.stock.entity.User;
    /**
     * 与用户相关的数据库操作
     */
    public class UserDao extends BaseDao{
    
      /**
       * 用户登录
       * @param userNo 用户名(编号)
       * @param pwd 密码
       * @return 用户对象
       */
      public User login(String userNo, String pwd) {
        String sql = "select * from k_user where userno='"+userNo+"' And pwd='"+pwd+"'";
        this.conn=this.getConn();
        User user=null;
        try {
          this.ps=conn.prepareStatement(sql);
          ResultSet rs = ps.executeQuery();
          while (rs.next()) {
            user = new User();
            user.setId(rs.getInt("id"));
            user.setUsername(rs.getString("username"));
            user.setUserno(rs.getString("userno"));
            user.setPwd(rs.getString("pwd"));
          }
        } catch (SQLException e) {
          e.printStackTrace();
        }
        this.closeAll();
        return user;
      }
    
      /**
       * 查询用户列表
       * @return 用户集合
       */
      public List<User> findUserList() {
        String sql = "select * from k_user order by id asc";
        this.conn=this.getConn();
        List<User> list = new ArrayList<>();
        try {
          this.ps=conn.prepareStatement(sql);
          ResultSet rs = ps.executeQuery();
          while (rs.next()) {
            User user = new User();
            user.setId(rs.getInt("id"));
            user.setUsername(rs.getString("username"));
            user.setUserno(rs.getString("userno"));
            user.setPwd(rs.getString("pwd"));
            user.setAge(rs.getInt("age"));
            user.setSex(rs.getString("sex"));
            user.setPosition(rs.getString("position"));
            list.add(user);
          }
        } catch (SQLException e) {
          e.printStackTrace();
        }
        return list;
      }
    
      /**
       * 添加用户
       * @param user 用户对象
       * @return 是否添加成功
       */
      public boolean addUser(User user) {
        String sql = "insert into k_user(username,userno,pwd) values('"+user.getUsername()+"','"+user.getUserno()+"','"+user.getPwd()+"')";
        this.conn=this.getConn();
        try {
          this.ps=conn.prepareStatement(sql);
          int count=ps.executeUpdate();
          if(count>0){
            return true;
          }
        } catch (SQLException e) {
          e.printStackTrace();
        }
        return false;
      }
    
      /**
       * 删除用户
       * @param id 用户ID
       * @return 是否删除成功
       */
      public boolean deleteUser(String id) {
        String sql = "delete from k_user where id="+id;
        this.conn=this.getConn();
        try {
          this.ps=conn.prepareStatement(sql);
          int count=ps.executeUpdate();
          if(count>0){
            return true;
          }
        } catch (SQLException e) {
          e.printStackTrace();
        }
        return false;
      }
    
    }
    
    实体类User的源码如下:
    点击展开内容 ```java package com.stock.entity;

    public class User {

    private int id;//用户ID
    private String userno;//用户编号
    private String username;//用户姓名
    private String pwd;//密码
    private String sex;//性别
    private int age;//年龄
    private String position;//职位

    public String getSex() {
    return sex;
    }

    public void setSex(String sex) {
    this.sex = sex;
    }

    public int getAge() {
    return age;
    }

    public void setAge(int age) {
    this.age = age;
    }

    public String getPosition() {
    return position;
    }

    public void setPosition(String position) {
    this.position = position;
    }

    public int getId() {
    return id;
    }

    public void setId(int id) {
    this.id = id;
    }

    public String getUserno() {
    return userno;
    }

    public void setUserno(String userno) {
    this.userno = userno;
    }

    public String getUsername() {
    return username;
    }

    public void setUsername(String username) {
    this.username = username;
    }

    public String getPwd() {
    return pwd;
    }

    public void setPwd(String pwd) {
    this.pwd = pwd;
    }

    }

    </details>
    UserService存放用户相关的业务操作。
    UserService的代码如下:
    <details>
    <summary><font color="blue">点击展开内容</font></summary>
    ```java
    package com.stock.service;
    
    import java.util.List;
    
    import com.stock.dao.UserDao;
    import com.stock.entity.User;
    /**
     * 业务类
     * 用户相关的业务操作
     */
    public class UserService {
    
      UserDao userDao=new UserDao();
      /**
       * 用户登录
       * @param userNo 用户名(编号)
       * @param pwd 密码
       * @return 用户对象
       */
      public User login(String userNo, String pwd) {
        return userDao.login(userNo,pwd);
      }
      /**
       * 查询用户列表
       * @return 用户集合
       */
      public List<User> findUserList() {
        return userDao.findUserList();
      }
      /**
       * 添加用户
       * @param user 用户对象
       * @return 是否添加成功
       */
      public boolean addUser(User user) {
        return userDao.addUser(user);
      }
      /**
       * 删除用户
       * @param id 用户ID
       * @return 是否删除成功
       */
      public boolean deleteUser(String id) {
        return userDao.deleteUser(id);
      }
    
    }
    
    UserView为视图层,接收用户的选择并进行处理。 UserView的代码如下:
    点击展开内容 ```java package com.stock.view;

    import java.util.List;
    import java.util.Scanner;

    import com.stock.entity.User;
    import com.stock.service.UserService;
    /**

    • 用户视图层
    • 接收用户的选择并进行处理
      */
      public class UserView {

    UserService userService = new UserService();
    Scanner sc = new Scanner(System.in);

    /**

    • 用户登录
      */
      public User login() {
      System.out.println("请输入用户名");
      String userNo = sc.next();
      System.out.println("请输入密码:");
      String pwd = sc.next();
    User user = userService.login(userNo, pwd);
    if (user != null) {
      System.out.println("登录成功!");
    } else {
      System.out.println("登录失败!!!");
    }
    return user;
    

    }

    /**

    • 显示所有用户信息
      */
      public void showUserList() {
      System.out.println("所有用户信息如下:");
      List list = userService.findUserList();
      System.out.println("用户ID 用户代码 用户姓名 密码 性别 年龄 职位");
    for (User user : list) {
      System.out.println(user.getId() + "		" + user.getUserno() + "		"
          + user.getUsername() + "		" + user.getPwd() + "		"
          + user.getSex() + "		" + user.getAge() + "		"
          + user.getPosition());
    }
    

    }

    public void addUser() {
    System.out.println("输入学号:");
    String userNo = sc.next();
    System.out.println("输入用户名:");
    String userName = sc.next();
    System.out.println("输入密码:");
    String pwd = sc.next();

    User user = new User();
    user.setUserno(userNo);
    user.setUsername(userName);
    user.setPwd(pwd);
    
    if (userService.addUser(user)) {
      System.out.println("添加用户成功");
    } else {
      System.out.println("添加用户失败");
    }
    

    }

    public void deleteUser() {
    System.out.println("请输入要删除的用户id:");
    String id = sc.next();
    if (userService.deleteUser(id)) {
    System.out.println("删除成功。");
    } else {
    System.out.println("删除失败!!!");
    }
    }

    }

    </details>
    Menu为菜单选择类,也是程序执行主类。
    Menu的代码如下:
    <details>
    <summary><font color="blue">点击展开内容</font></summary>
    ```java
    package com.stock.view;
    
    import java.util.Scanner;
    import com.stock.entity.User;
    
    /**
     * 菜单类 用于用户菜单选择
     */
    public class Menu {
    
      UserView userView = new UserView();
      Scanner sc = new Scanner(System.in);
    
      /**
       * 登录界面
       */
      private void LoginView() {
        System.out.println("-----------欢迎登录库存管理系统-----------");
        System.out.println("------------1.登录-----------");
        System.out.println("------------2.退出-----------");
    
        System.out.println("请输入要进行的操作:");
        int num = sc.nextInt();
        if (num == 1) {
          User user = userView.login();
          if (user != null) {
            IndexView(user);
          } else {
            LoginView();
          }
    
        } else {
          System.out.println("欢迎下次登录。");
        }
    
      }
    
      /**
       * 首页
       */
      private void IndexView(User user) {
        System.out.println("			欢迎 [" + user.getUsername() + "]登录本系统!");
        System.out.println("			--------1、基库存管理----------");
        System.out.println("			-----------1.1 库存查询----------");
        System.out.println("			-----------1.2 入库管理----------");
        System.out.println("			-----------1.3 出库管理----------");
        System.out.println("			--------2、报表管理----------");
        System.out.println("			-----------2.1 库存月报----------");
        System.out.println("			-----------2.2 物资台账----------");
        System.out.println("			--------3、基础信息管理----------");
        System.out.println("			-----------3.1 用户管理----------");
        System.out.println("			-----------3.2 部门管理----------");
        System.out.println("			-----------3.3 仓库管理----------");
        System.out.println("			-----------3.4 供应商管理----------");
        System.out.println("			-----------3.5 产品管理----------");
        System.out.println("			--------4、退出系统----------");
        System.out.print("请输入要进行的操作:");
        String operate = sc.next();
        switch (operate) {
        case "3.1":
          showUserView(user);
          break;
    
        default:
          break;
        }
      }
    
      /**
       * 用户管理界面
       */
      private void showUserView(User user) {
        System.out.println("			------------------欢迎到用户管理界面------------------");
        System.out.println("			------------------1、查看用户信息------------------");
        System.out.println("			------------------2、添加用户信息------------------");
        System.out.println("			------------------3、修改用户信息------------------");
        System.out.println("			------------------4、删除用户信息------------------");
        System.out.println("			------------------5、返回上一级------------------");
        System.out.print("请输入要进行的操作:");
        String operate = sc.next();
        switch (operate) {
        case "1":
          userView.showUserList();
          showUserView(user);
          break;
        case "2":
          userView.addUser();
          showUserView(user);
          break;
        case "4":
          userView.deleteUser();
          showUserView(user);
          break;
        default:
          IndexView(user);
          break;
        }
      }
    
      public static void main(String[] args) {
        Menu menu = new Menu();
        menu.LoginView();
      }
    
    }
    

    项目数据库及源码下载地址:
    链接:https://pan.baidu.com/s/1JfPAXQJgrnRVtOXqmBkO_w
    提取码:8ncv
    该系统的详细开发视频讲解关注下面的公众号观看。

  • 相关阅读:
    C 语言 静态库和动态库的创建和应用
    C++ 中英文术语对照
    下午
    [转]内核 do_fork 函数源代码浅析
    关于C#反射机制,自己写的
    获取字符串中数字
    关于C#反射机制,来源于网络
    关于 Nhinernate 的one to one(转载)
    鼠标坐标的记录
    关于C#中hibernate.cfg.xml动态加载问题
  • 原文地址:https://www.cnblogs.com/dreamboy/p/10411281.html
Copyright © 2020-2023  润新知