首先,在此我想感谢 私塾在线 的 wb 老师!
图书的(jxc)系统是我一边看wb老师的在线视频课,一边跟着做出来的项目。本博客是我的一点小小心得。
Ⅰ 内容和目标简介
本系统主要包含用户、图书、进货、销售和库存五个模块,界面采用Swing,后台采用MVC模式,主要实现功能如下:
(1)能进行操作用户的注册、登录、删除、查询和信息修改。
(2)能实现对图书基本信息的增删改查
(3)能填写进货单,一张进货单包含多条具体的货物明细,进货的书籍必须是图书数据库中已经存在的,进货的同时修改库存信息
(4)能填写销售单,一张销售单包含多条具体销售信息,销售的书籍必须是图书数据库中已经存在的,销售数量不能超过当前库存的数量,销售的同时修改库存信息
(5)对于库存,可以查看明细,可以按照条件查询某书的库存值
(6)权限方面做固定的权限控制。
Ⅱ 数据库表的设计
分为用户、图书、进货、销售和库存5个模块。
注意:每一条进货人明细都对应着多条进货书籍明细。
注意:每一个销售人明细都对应着多条销售书籍明细。
注意:表的设计过程中,要注意主键和外键。
Ⅲ 分层、分包,系统的整个框架的搭建:
–》新建java项目,组织名cn.javass , 项目名 jxc ,之后的分包规则:
整个系统的框架如上图所示:
(1)panels层调用business,business层调用dao层,三层之间model的传递用vo封装。所以,我们可以在编码的时候先写vo层,再写dao层,接着写business层,最后在panels层中调用逻辑层。
(2)界面和ebi交互,ebi中的接口负责为界面组织提供数据,界面所需要的所有数据都是ebi提供的。但ebi只是接口声明,具体实现在ebo中实现。
(3)dao层会提供最基本的增删改查实现,提供与数据库的联系。同样,dao.dao中只是接口声明,dao.Impl中主要实现接口。逻辑层在调用数据层的时候,对于简单的增删改查,ebo直接转发dao即可,如果ebo需要组织更为复杂的数据给界面,则可以直接通过操作QueryModel来实现对数据的组织。
(4)数据层主要利用vo的model实现增删改查,Ebo中主要负责为界面组织所需要的数据。
Ⅳ 接下来,我来总结User层的代码的示例写法:
1.vo层
(1)关于值对象模式 :每一个模块对应一个Model类,描述这个类的属 性都作为这个类的filed
(2)对应的get和set方法
(3)用主键来重写equals和hascode
(4)实现可序列化
(5)重写toString()方法,方便按照需要的格式显示各字段的值。
(6)用UserQueryModel.java来传model,而不是采用UserModel.java来传model.好处是当字段中包含范围值时,采用UserModel.java不方便处理。
—-》 eg: UserModel.java
package cn.javass.jxc.user.vo;
import java.io.Serializable;
public class UserModel implements Serializable {
private String uuid;
private String name;
private String pwd;
public String getUuid() {
return uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
@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 " [" + uuid + ", " + name + ", " + type+ ", " + pwd + "]";
}
}
//—-》用一个包含范围值的来作为实例:
——》InMainQueryModel.java
package cn.javass.jxc.in.vo;
public class InMainQueryModel extends InMainModel {
//用来传有范围的查询条件,遇到范围值就2一下,再将InMainQueryModel传给dao层