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\t\t用戶代碼\t\t用戶姓名\t\t密碼\t\t性別\t\t年齡\t\t職位");
for (User user : list) {
  System.out.println(user.getId() + "\t\t" + user.getUserno() + "\t\t"
      + user.getUsername() + "\t\t" + user.getPwd() + "\t\t"
      + user.getSex() + "\t\t" + user.getAge() + "\t\t"
      + 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("\t\t\t歡迎 [" + user.getUsername() + "]登錄本系統!");
    System.out.println("\t\t\t--------1、基庫存管理----------");
    System.out.println("\t\t\t-----------1.1 庫存查詢----------");
    System.out.println("\t\t\t-----------1.2 入庫管理----------");
    System.out.println("\t\t\t-----------1.3 出庫管理----------");
    System.out.println("\t\t\t--------2、報表管理----------");
    System.out.println("\t\t\t-----------2.1 庫存月報----------");
    System.out.println("\t\t\t-----------2.2 物資台賬----------");
    System.out.println("\t\t\t--------3、基礎信息管理----------");
    System.out.println("\t\t\t-----------3.1 用戶管理----------");
    System.out.println("\t\t\t-----------3.2 部門管理----------");
    System.out.println("\t\t\t-----------3.3 倉庫管理----------");
    System.out.println("\t\t\t-----------3.4 供應商管理----------");
    System.out.println("\t\t\t-----------3.5 產品管理----------");
    System.out.println("\t\t\t--------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("\t\t\t------------------歡迎到用戶管理界面------------------");
    System.out.println("\t\t\t------------------1、查看用戶信息------------------");
    System.out.println("\t\t\t------------------2、添加用戶信息------------------");
    System.out.println("\t\t\t------------------3、修改用戶信息------------------");
    System.out.println("\t\t\t------------------4、刪除用戶信息------------------");
    System.out.println("\t\t\t------------------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
該系統的詳細開發視頻講解關注下面的公眾號觀看。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM