服务器之家

服务器之家 > 正文

Java设计模块系列之书店管理系统单机版(一)

时间:2020-06-06 14:48     来源/作者:qq_26525215

书店管理系统:

项目练习目标 :
1、Java应用程序基本分析
2、培养面向对象编程的基本思想
3、Java基本设计模式综合应用
4、掌握分层和接口的基本设计
5、构建合理的Java应用程序包结构
6、综合应用JSE所学习的知识
7、在应用中合理使用集合框架
8、在应用中综合使用swing的常用组件
9、基本的表现层的实现机制
10、IO流和文件的基本操作
11、培养良好的Java编程习惯
12、培养调试Java程序的能力,培养改错的能力

项目功能需求 :
1、能进行操作用户的注册,修改基本信息,删除和查询。
2、能对图书的基本信息进行增加、删除、修改和查询操作。
3、能填写进货单,一张进货单带有多条具体的进货信息,进货的书籍必须是图书管理里面已经有的;进货的同时修改库存对应书籍的存货量。
4、能填写销售单,一张销售单带有多条具体的销售信息,销售的书籍必须是图书管理里面已经有的,而且销售的数量不能超过当前库存的数量;销售的同时修改库存对应书籍的存货量。
5、可以查看库存的明细,可以按照条件进行查找具体的图书的库存值。
6、权限方面进行简化,做固定的权限控制。把用户按照模块分成不同操作权限的人员,特设一个admin的用户,可以操作全部的功能。

项目基本设计 :
★ 架构设计
整体框架、模块划分
模块划分:用户、图书、进货、销售和库存5个模块

★ 系统功能结构设计
每个功能模块的具体功能子模块

★ 数据库设计
项目框架实现:分模块、分层、分包、构建应用程序

1、用户管理(User.txt)

Java设计模块系列之书店管理系统单机版(一)

说明:其中的type为int类型,用来表示操作用户的类型。
1——表示为admin,可以进行全部操作
2——表示为能操作图书模块的人员
3——表示为能操作进货模块的人员
4——表示为能操作销售模块的人员
5——表示为能操作库存模块的人员

2、图书管理(Book.txt)

Java设计模块系列之书店管理系统单机版(一)

3、进货管理(InMain.txt)

Java设计模块系列之书店管理系统单机版(一)

4、进货明细管理(InDetail.txt)

Java设计模块系列之书店管理系统单机版(一)

5、销售管理(OutMain.txt)

Java设计模块系列之书店管理系统单机版(一)

6、销售明细管理(OutDetail.txt)

Java设计模块系列之书店管理系统单机版(一)

7、库存管理(Stock.txt)

Java设计模块系列之书店管理系统单机版(一)

项目分包

第一层:按照模块分
用户模块(user)、
图书(book)、
进货(in)、
销售(out)、
库存(store)

第二层:按照三层模式分
表现层(ui)、逻辑层(business) 和 数据层(dao)
通常还要增加一个值对象层(vo)

第三层:按照层内划分去分
视具体情况而定,如business和dao内还要再采用铁三角的形式建子包,而ui和vo则不需要再划分子包)。

项目分层思想:

Java设计模块系列之书店管理系统单机版(一)

未完善,请继续关注本系列(二)

下面为部分代码:(util里面的一个公共类)

cn.hncu.bookStore.util
FileIoUtil.java:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package cn.hncu.bookStore.util;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
 
/**
 * 用户的公用数据读取写入类
 * @author 陈浩翔
 *
 * @version 1.0
 */
public class FileIoUtil {
 
 public FileIoUtil() {
 }
 
 /**
 * 从数据库中读取所有的数据并返回出来
 *
 * @param fileName(数据表对应的文件名字)
 * @param ee(传递过来的泛型的类型!)
 * @return 所有表的记录!
 */
 @SuppressWarnings("unchecked")//压警告
 public static<E> List<E> readFormFile(String fileName,E ee){
 List<E> list = new ArrayList<E>();
 final File file = new File(fileName);
 
 ObjectInputStream in =null;
 if(!file.exists()){
  JOptionPane.showMessageDialog(null, "数据表不存在!");
  return list;
 }
 try {
  in = new ObjectInputStream(new FileInputStream(fileName));
  try {
  list = (List<E>) in.readObject();
 
  } catch (ClassNotFoundException e) {
  e.printStackTrace();
  }
 } catch (FileNotFoundException e) {
  e.printStackTrace();
 } catch (IOException e) {
  e.printStackTrace();
 }finally{
  if(in!=null){
  try {
   in.close();
  } catch (IOException e) {
   throw new RuntimeException("数据库关闭失败");
  }
  }
 }
 return list;
 }
 
 
 /**
 * 写入一个list集合进入数据文件fileName
 *
 * @param list(需要存储的数据集合)
 * @param fileName(写入到哪个文件的文件名字)
 */
 public static void write2file(List<Object> list, String fileName){
 ObjectOutputStream out = null;
 
 try {
  out = new ObjectOutputStream(new FileOutputStream(fileName));
  out.writeObject(list);
 } catch (FileNotFoundException e) {
  e.printStackTrace();
 } catch (IOException e) {
  e.printStackTrace();
 }finally{
  if(out!=null){
  try {
   out.close();
  } catch (IOException e) {
   throw new RuntimeException("数据库关闭失败!");
  }
  }
 }
 }
 
}

封装的用户数据:

cn.hncu.bookStore.user.vo;
UserModel.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package cn.hncu.bookStore.user.vo;
 
/**
 * @author 陈浩翔
 * @version 1.0
 *
 * <br/>
 * 用于保存用户信息的值对象<br/>
 * 1、可序列化<br/>
 * 2、私有化所有变量成员,补setter-getters方法<br/>
 * 3、写equals和hashCode方法----用主键(uuid)唯一标识码<br/>
 * 4、toString方法<br/>
 * 5,空参构造方法<br/>
 */
 
public class UserModel {
 private String uuid;//用户唯一标识码
 private String name;//用户名
 private int type;//用户类型
 private String pwd;//用户密码
 public UserModel() {
 }
 
 /**
 * 功能:得到uuid-用户唯一的标识码
 *
 * @return 返回uuid-用户唯一的标识码
 */
 public String getUuid() {
 return uuid;
 }
 
 /**
 * 功能:设置uuid-用户唯一的标识码
 * @param uuid-用户唯一的标识码-String型参数
 */
 public void setUuid(String uuid) {
 this.uuid = uuid;
 }
 
 /**
 * 功能:得到用户的用户名
 * @return---name-用户名
 */
 public String getName() {
 return name;
 }
 
 /**
 * 功能:设置用户的用户名
 *
 * @param name--用户设置的用户名,String型参数
 */
 public void setName(String name) {
 this.name = name;
 }
 
 /**
 * 功能:得到用户的类型:
 * 1——表示为admin,可以进行全部操作
 * 2——表示为能操作图书模块的人员
 * 3——表示为能操作进货模块的人员
 * 4——表示为能操作销售模块的人员
 * 5——表示为能操作库存模块的人员
 * @return 用户的类型
 */
 public int getType() {
 return type;
 }
 
 /**
 * 功能:设置用户的类型:
 * 1——表示为admin,可以进行全部操作
 * 2——表示为能操作图书模块的人员
 * 3——表示为能操作进货模块的人员
 * 4——表示为能操作销售模块的人员
 * 5——表示为能操作库存模块的人员
 * @param type--用户的类型-int型参数
 */
 public void setType(int type) {
 this.type = type;
 }
 
 /**
 *功能:得到用户的密码
 * @return String型,用户的密码
 */
 public String getPwd() {
 return pwd;
 }
 
 /**
 * 功能:设置用户的密码
 * @param pwd--String型参数
 */
 public void setPwd(String pwd) {
 this.pwd = pwd;
 }
 
 
 @Override
 public int hashCode() {
 final int prime = 31;
 int result = 1;
 result = prime * result + ((uuid == null) ? 0 : uuid.hashCode());
 return result;
 }
 @Override
 public boolean equals(Object obj) {
 if (this == obj)
  return true;
 if (obj == null)
  return false;
 if (getClass() != obj.getClass())
  return false;
 UserModel other = (UserModel) obj;
 if (uuid == null) {
  if (other.uuid != null)
  return false;
 } else if (!uuid.equals(other.uuid))
  return false;
 return true;
 }
 @Override
 public String toString() {
 return "UserModel [uuid=" + uuid + ", name=" + name + ", type=" + type
  + ", pwd=" + pwd + "]";
 }
 
}

封装的用户查询数据:

cn.hncu.bookStore.user.vo;
UserQueryModel.java

?
1
2
3
4
package cn.hncu.bookStore.user.vo;
 
public class UserQueryModel extends UserModel{
}

虽然这个类什么都没有,就只是继承了UserModel,但还是必须写,这是大家都遵守的java编写规范!

用户Dao(数据层):(接口)

cn.hncu.bookStore.user.dao.dao;
UserDao.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package cn.hncu.bookStore.user.dao.dao;
 
import java.util.List;
 
import cn.hncu.bookStore.user.vo.UserModel;
import cn.hncu.bookStore.user.vo.UserQueryModel;
 
/**
 *
 * @author 陈浩翔
 *
 * @version 1.0
 * 用户模块的数据层接口
 */
public interface UserDao {
 /**
 * 功能:创建一个用户
 *
 * @param userModel---将要创建的用户数据
 * @return---true表示创建成功,false表示创建失败
 */
 public boolean create(UserModel user);
 
 /**
 * 功能:删除一个用户
 *
 * @param uuid---用户唯一的标识码,每个用户都不会相同
 * @return---true表示删除成功,false表示删除失败
 */
 public boolean delete(String uuid);
 
 /**
 * 功能:修改用户数据资料
 *
 * @param user---需要修改的用户数据参数名
 * @return 返回true-表示修改成功了,返回false-表示修改失败
 */
 public boolean update(UserModel user);
 
 /**
 * 功能:得到所有的用户数据
 *
 * @return---一个UserModel集合,也就是用户的数据
 */
 public List<UserModel> getAll();
 
 /**
 * 功能:按照一定的查找条件进行查找,
 * <br/>
 * 把满足查找条件的用户数据返回。
 *
 * @param uqm---被封装的查找条件
 * @return---满足查找条件的用户数据集合
 */
 public List<UserModel> getbyCondition(UserQueryModel uqm);
 
 /**
 * 功能:得到一个确定的用户的数据资料
 *
 * @param uuid---用户唯一标识码
 * @return ---返回按这个唯一标识码找到的用户数据
 */
 public UserModel getSingle(String uuid);
 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:http://blog.csdn.net/qq_26525215/article/details/51073546

相关文章

热门资讯

歪歪漫画vip账号共享2020_yy漫画免费账号密码共享
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享 2020-04-07
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意 2019-07-07
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
返回顶部