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();
}
}
JavaSE库存管理系统项目实战的更多相关文章
- Asp.Net Core 项目实战之权限管理系统(4) 依赖注入、仓储、服务的多项目分层实现
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- Asp.Net Core 项目实战之权限管理系统(0) 无中生有
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- Asp.Net Core 项目实战之权限管理系统(2) 功能及实体设计
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- Asp.Net Core 项目实战之权限管理系统(5) 用户登录
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- Asp.Net Core 项目实战之权限管理系统(6) 功能管理
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- Asp.Net Core 项目实战之权限管理系统(7) 组织机构、角色、用户权限
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- Net Core 项目实战之权限管理系统(0)
0 前言 Net Core 项目实战之权限管理系统(0) 无中生有 0 http://www.cnblogs.com/fonour/p/5848933.html 学习的最好方法就是动手去做,这里以 ...
随机推荐
- gamemakerstudio:Sprite的原点
对于某些类型的游戏,例如飞行射击游戏或者顶视角的2D游戏,通常会直接选取图片的中心做为原点.但对于<冰杖秘闻>这样的 2D ARPG 来说,会更多的从三维场景的角度来选择原点,即选择物品底 ...
- 好记性不如烂笔头-nginx安装环境与Linux安装ftp组件
Nginx安装环境 1. Nginx安装环境 Nginx是C语言开发,建议在linux上运行,我参加工作这些年来一直使用Linux发行版之一的 Centos作为安装环境. 1.1 gcc 安装Ngin ...
- dede如何调用一级栏目和子集栏目及其文章
{dede:channelartlist row=6} <a href='{dede:field name='typeurl'/}'>{dede:field name='typename' ...
- EM自动任务导致数据库缓慢
这两天客户抱怨数据库慢,查看性能什么的没发现什么异常.查看job发现一个内容为EMD_MAINTENANCE.EXECUTE_EM_DBMS_JOB_PROCS执行特别频繁.使用 EXEC DBMS_ ...
- [转]Ubuntu 小企鹅输入法fcitx 支持 五笔拼音
之前在Ubuntu下使用ibus五笔输入法,用了一段时间发现五笔输入法不能输入词组,并且五笔不支持拼音的功能,从网上找到可以使用fcitx替换掉ibus,因此自已尝试了一把,安装步骤如下: 1. 安装 ...
- 2018.11.19 Struts2中Action类的书写方式
方式1: 方式2: 方式3
- Spring 声明式事务管理方式
声明式事务管理,基于AOP对目标代理,添加环绕通知,比编码方案优势,不具有侵入式,不需要修改原来的代码. 1.基于XML配置的声明式事务管理方案(案例) 接口Service public i ...
- Window下搭建foundation apps环境
Window下搭建foundation apps环境 框架:AngularJS.Foundation, 构建工具:Gulp, 开发环境:node.js. 操作系统:windows (一)环境准备 1 ...
- 【转】一看你就懂,超详细java中的ClassLoader详解
http://blog.csdn.net/briblue/article/details/54973413 ClassLoader翻译过来就是类加载器,普通的java开发者其实用到的不多,但对于某些框 ...
- Intellij idea创建(包、文件)javaWeb以及Servlet简单实现(Tomcat)
准备:1. 安装jdk2. 安装tomcat 一.创建并设置javaweb工程 创建项目成功 创建包 创建Servlet 创建包成功,但是报错,原因是没有引入包 我们先表明 现在要引入servlet- ...