书店管理系统正确入口
图书模块:
界面:
包:
关键性代码:
值对象:
package cn.hncu.booksManagementSystem.book.vo;
import java.io.Serializable;
/**
*
* CreateTime: 2018年4月19日 下午3:24:35
* @author 宋进宇 Email:[email protected]
* Description:
* 图书模块值对象
*/
public class BookModel implements Serializable{
private static final long serialVersionUID = 1L;
private String id; //图书标识
private String name; //图书名称
private double inPrice; //图书进价
private double outPrice; //图书售价
public BookModel() {
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getInPrice() {
return inPrice;
}
public void setInPrice(double inPrice) {
this.inPrice = inPrice;
}
public double getOutPrice() {
return outPrice;
}
public void setOutPrice(double outPrice) {
this.outPrice = outPrice;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.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;
BookModel other = (BookModel) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
@Override
public String toString() {
return id + ", 《" + name + "》, 进价:" + inPrice + ", 售价:" + outPrice ;
}
}
DAO接口:
package cn.hncu.booksManagementSystem.book.dao.dao;
import java.util.Collection;
import cn.hncu.booksManagementSystem.book.vo.BookModel;
import cn.hncu.booksManagementSystem.book.vo.BookQueryModel;
/**
* CreateTime: 2018年4月19日 下午3:40:50
* @author 宋进宇 Email:[email protected]
* Description:
* 图书DAO
*/
public interface BookDAO {
/**
* 添加一个 BookModel 对象
* @param book 被添加的对象
* @return true:添加成功,false:添加失败
*/
public boolean add(BookModel book);
/**
* 删除一个 BookModel 对象
* @param book 被删除的对象
* @return true:删除成功,false:删除失败
*/
public boolean delete(BookModel book);
/**
* 修改一个 BookModel 对象
* @param book 被修改的对象
* @return true:修改成功,false:修改失败
*/
public boolean update(BookModel book);
/**
* 通过图书id查询
* @param id 被查询对象的编号id
* @return 返回BookModel的实例对象表示查找到,返回null表示没有查找到相应id的用户
*/
public BookModel getUserModelById(String id);
/**
* 查询所有图书
* @return 所有图书的集合
*/
public Collection<BookModel> getAll();
/**
* 根据查询值对象查询图书
* @param bqm 查询值对象
* @return 符合条件的图书集合
*/
public Collection<BookModel> getUsersByCondition(BookQueryModel bqm);
}
DAO接口实现类:
package cn.hncu.booksManagementSystem.book.dao.impl;
import java.util.ArrayList;
import java.util.Collection;
import cn.hncu.booksManagementSystem.book.dao.dao.BookDAO;
import cn.hncu.booksManagementSystem.book.vo.BookModel;
import cn.hncu.booksManagementSystem.book.vo.BookQueryModel;
import cn.hncu.booksManagementSystem.common.enums.XxxIdEnum;
import cn.hncu.booksManagementSystem.utils.FileIoUtil;
import cn.hncu.booksManagementSystem.utils.GeneratorXxxID_Util;
/**
*
* CreateTime: 2018年4月19日 下午3:46:21
* @author 宋进宇 Email:[email protected]
* Description:
* BookDAO接口实现类
*/
public class BookDAO_FileImpl implements BookDAO {
//数据源
private final String FILE_NAME = "./data/book.info";
@Override
public boolean add(BookModel book) {
//如果被添加的图书值对象为null,则返回false
if (book==null) {
return false;
}
//先获取所有图书对象
Collection<BookModel> col = FileIoUtil.readFromFile(FILE_NAME);
//遍历整个集合
for (BookModel b : col) {
//如果找到相同的对象则表示已存在,返回false
if (b.equals(book)) {
return false;
}
}
//能到这里,说明book是新的图书则可以添加
boolean boo=col.add(book);
//产生下一个图书id
GeneratorXxxID_Util.updateXxxId(XxxIdEnum.BOOK);;
return boo&&FileIoUtil.write2File(col, FILE_NAME);
}
@Override
public boolean delete(BookModel book) {
//如果book为null,则不能删除返回false
if (book==null) {
return false;
}
Collection<BookModel> col = FileIoUtil.readFromFile(FILE_NAME);
//遍历整个集合
for (BookModel b : col) {
//找到相同的对象,并删除
if (b.equals(book)) {
boolean boo=col.remove(book);
return boo&&FileIoUtil.write2File(col, FILE_NAME);
}
}
//能到这里说明不存在 book 值对象
return false;
}
@Override
public boolean update(BookModel book) {
//如果book为null,则返回false
if (book==null) {
return false;
}
//从数据库中把数据读取出来
Collection<BookModel> col = FileIoUtil.readFromFile(FILE_NAME);
//进行强转,以便替换(利用ArrayList中get/set方法)
ArrayList<BookModel> list = (ArrayList<BookModel>) col;
boolean boo = false;
for(int i =0;i<list.size();i++) {
//如果找到相同id的图书,就修改
if (list.get(i).equals(book)) {
list.set(i, book);
boo = true;
break;
}
}
col = list;
return boo&&FileIoUtil.write2File(list, FILE_NAME);
}
@Override
public BookModel getUserModelById(String id) {
//如果id为null,则不存在返回null
if (id==null) {
return null;
}
Collection<BookModel> col = FileIoUtil.readFromFile(FILE_NAME);
for (BookModel book : col) {
if (book.getId().equals(id)) {
//找到就返回图书值对象
return book;
}
}
return null;
}
@Override
public Collection<BookModel> getAll() {
//直接读取全部数据返回
return FileIoUtil.readFromFile(FILE_NAME);
}
@Override
public Collection<BookModel> getUsersByCondition(BookQueryModel bqm) {
//获得所有数据
Collection<BookModel> col = getAll();
//如果查询值对象为空则查询所有
if (bqm==null) {
return col;
}
//创建一个结果集
Collection<BookModel> res = new ArrayList<BookModel>();
//遍历所有整个col集合,找到符合条件的元素加入结果集
//才用卫条件,反逻辑
for (BookModel book : col) {
//卫条件1 查id 精确查询
//判断查询条件是否有效
if (bqm.getId()!=null&&bqm.getId().trim().length()>0) {
//能到这里说明查询条件有效
//反逻辑:不符合条件的跳过
if (!book.getId().trim().equals(bqm.getId().trim())) {
continue;
}
}
//卫条件2 查名称 模糊查询
//判断查询条件是否有效
if (bqm.getName()!=null&&bqm.getName().trim().length()>0) {
//能到这里说明查询条件有效
//反逻辑:不符合条件的跳过
if (!book.getName().contains(bqm.getName().trim())) {
continue;
}
}
//卫条件3 查进价 范围查询 反逻辑 :小于小的大于大的
//判断查询条件是否有效
if (bqm.getInPrice()>0) {
//小于小的就跳过
if (book.getInPrice()<bqm.getInPrice()) {
continue;
}
}
//判断查询条件是否有效
if (bqm.getInPrice2()>0) {
//大于大的就跳过
if (book.getInPrice()>bqm.getInPrice2()) {
continue;
}
}
//卫条件4 查售价 范围查询 反逻辑 :小于小的大于大的
//判断查询条件是否有效
if (bqm.getOutPrice()>0) {
//小于小的就跳过
if (book.getOutPrice()<bqm.getOutPrice()) {
continue;
}
}
//判断查询条件是否有效
if (bqm.getOutPrice2()>0) {
//大于大的就跳过
if (book.getOutPrice()>bqm.getOutPrice2()) {
continue;
}
}
//能到这里说明是符合条件的
res.add(book);
}
return res;
}
}
生产DAO接口的工厂
package cn.hncu.booksManagementSystem.book.dao.factory;
import cn.hncu.booksManagementSystem.book.dao.dao.BookDAO;
import cn.hncu.booksManagementSystem.book.dao.impl.BookDAO_FileImpl;
/**
* CreateTime: 2018年4月19日 下午4:28:06
* @author 宋进宇 Email:[email protected]
* Description:
* 生产BookDAO接口的工厂
*/
public class BookDAO_Factory {
//私有化构造函数
private BookDAO_Factory() {
}
/**
* 获取BookDAO接口实现类的实例
* @return BookDAO接口的实现类的实例
*/
public static BookDAO getInstanceOfBookDAO() {
return new BookDAO_FileImpl();
}
}
逻辑层的ebi接口:
package cn.hncu.booksManagementSystem.book.business.ebi;
import java.util.Collection;
import cn.hncu.booksManagementSystem.book.vo.BookModel;
import cn.hncu.booksManagementSystem.book.vo.BookQueryModel;
/**
* CreateTime: 2018年4月19日 下午4:25:07
* @author 宋进宇 Email:[email protected]
* Description:
* 图书模块逻辑层接口
*/
public interface BookEbi {
/**
* 添加一个 BookModel 对象
* @param book 被添加的对象
* @return true:添加成功,false:添加失败
*/
public boolean add(BookModel book);
/**
* 删除一个 BookModel 对象
* @param book 被删除的对象
* @return true:删除成功,false:删除失败
*/
public boolean delete(BookModel book);
/**
* 修改一个 BookModel 对象
* @param book 被修改的对象
* @return true:修改成功,false:修改失败
*/
public boolean update(BookModel book);
/**
* 通过图书id查询
* @param id 被查询对象的编号id
* @return 返回BookModel的实例对象表示查找到,返回null表示没有查找到相应id的用户
*/
public BookModel getBookModelById(String id);
/**
* 查询所有图书
* @return 所有图书的集合
*/
public Collection<BookModel> getAll();
/**
* 根据查询值对象查询图书
* @param bqm 查询值对象
* @return 符合条件的图书集合
*/
public Collection<BookModel> getBooksByCondition(BookQueryModel bqm);
}