Java---设计模式---书店管理系统(单机版)③

书店管理系统正确入口

图书模块:

界面:

包:

关键性代码:

值对象:

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);
}

猜你喜欢

转载自blog.csdn.net/qq_34928644/article/details/80098049