需求分析

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

JavaSE库存管理系统项目实战的更多相关文章

  1. Asp.Net Core 项目实战之权限管理系统(4) 依赖注入、仓储、服务的多项目分层实现

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  2. Asp.Net Core 项目实战之权限管理系统(0) 无中生有

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  3. Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  4. Asp.Net Core 项目实战之权限管理系统(2) 功能及实体设计

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  5. Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  6. Asp.Net Core 项目实战之权限管理系统(5) 用户登录

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  7. Asp.Net Core 项目实战之权限管理系统(6) 功能管理

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  8. Asp.Net Core 项目实战之权限管理系统(7) 组织机构、角色、用户权限

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  9. Net Core 项目实战之权限管理系统(0)

    0 前言 Net Core 项目实战之权限管理系统(0) 无中生有   0 http://www.cnblogs.com/fonour/p/5848933.html 学习的最好方法就是动手去做,这里以 ...

随机推荐

  1. CSS3控制单行文本的溢出

    text-overflow用来设置是否使用一个省略标记(...)标示对象内文本的溢出.语法: 但是text-overflow只是用来说明文字溢出时用什么方式显示,要实现溢出时产生省略号的效果,还须定义 ...

  2. 新发布 | 微软开源之路最新进展:FreeBSD落地由世纪互联营运的Microsoft Azure

    微软和开源,是近几年业界孜孜不倦的讨论话题,微软也在开源之路越走越宽.最近与 FreeBSD 基金更紧密的合作踏出了微软在开源之路上的又一大步. 自2012年开始,微软在 FreeBSD 与其虚拟化平 ...

  3. WAKE-WIN10-SOFT-软件-Matlab配置及工具箱

    1Matlab 1,1Matlab下载,安装,配置,,, 1,2 2工具箱 2,1LibSVM 必应:https://www.bing.com/search?q=libsvm&qs=n& ...

  4. JavaMelody监控spring、struts

    前言 前面讲过了Javamelody的基本配置,如何使用Javamelody来监控JDBC以及SQL. 这里继续讲解一下如何监控struts和spring. 手码不易,转载请注明:xingoo 由于s ...

  5. 团队合作之Scrum

    CCSU小助手 一:开发团队简介 队名:瓜队 组员:钟文兴.周畅.吉刘磊.唐仲勋 宣言:We are a team at any time! 团队项目描述: 内容:“生活在长大”: 目标:为了方便对学 ...

  6. Netbackup客户端安装网络放通端口需求,及测试网络放通方法

      192.168.1.101网络放通需求如下:   客户端主机 192.168.1.101 到 服务端主机 192.168.1.100 的1556.13720.13724.1378.13782这5个 ...

  7. 2018.10.6 Hibernate配置文件详解-------ORM元数据配置 &&& hibernate主配置文件

    ORM既然是实体与关系数据库的映射,那就需要建立实体和关系数据库之间的基础数据,也可以称为元数据.简单的说就是表示类与表.列与属性(get.set方法)等等之间对应关系的数据. Customer.hb ...

  8. emmet工具使用和技巧

    介绍 在前端开发的过程中,一大部分的工作是写 HTML.CSS 代码.特别是手动编写 HTML 代码的时候,效率会特别低下,因为需要敲打很多尖括号,而且很多标签都需要闭合标签等.于是,就有了 Emme ...

  9. 统计决策——贝叶斯决策理论(Bayesian Decision Theory)

    (本文为原创学习笔记,主要参考<模式识别(第三版)>(张学工著,清华大学出版社出版)) 1.概念 将分类看做决策,进行贝叶斯决策时考虑各类的先验概率和类条件概率,也即后验概率.考虑先验概率 ...

  10. 【luogu P2939 [USACO09FEB]改造路Revamping Trails】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2939 本来说是双倍经验题,跟飞行路线一样的,结果我飞行路线拿deque优化SPFA过了这里过不了了. 所以多 ...