需求分析
企業庫房用於存放成品、半成品、原材料、工具等物資,一般情況下,這些物資統稱為物料。庫存管理常見業務包括物資的入庫、出庫、盤點、退貨、報廢以及財務核算等,業務邏輯比較復雜,庫房信息系統項目開發周期一般要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;
}
}
點擊展開內容
```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);
}
}
點擊展開內容
```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("所有用戶信息如下:");
Listlist = 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
該系統的詳細開發視頻講解關注下面的公眾號觀看。