企业库房用于存放成品、半成品、原材料、工具等物资,一般情况下,这些物资统称为物料。库存管理常见业务包括物资的入库、出库、盘点、退货、报废以及财务核算等,业务逻辑比较复杂,库房信息系统项目开发周期一般要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 whereblue">点击展开内容</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);
/**