书店管理系统
书店管理系统可以说是设计模式及设计思想的一个比较经典的例子。
本系列将分为多个部分讲述此输电管理系统。
书店管理系统将分为:用户、图书、进货、销售和库存五个模块,另外还有公共包、工具包和登录包,另外还有一个框架。
对于分层设计,都是表现层可以调用逻辑层,逻辑层调用数据层,数据层调用工具和公共包,方向不可打乱,必须严格按照这种模式。
本篇将做图书模块。
注:本篇需要使用到的框架在本系列二的用户模块:
链接:点击打开链接
同系列有:
系列一(概述):点击打开链接
系列二(用户):点击打开链接
系列三(工具包和公共类):点击打开链接
系列五(进货):点击打开链接
系列六(销售):点击打开链接
系列七(库存):点击打开链接
系列八(登录):点击打开链接
和用户模块相同的,图书模块分成了数据层、逻辑层、表现层和值对象层。
数据层:
接口:
- package cn.hncu.book.dao.dao;
- import java.util.List;
- import cn.hncu.book.vo.BookModel;
- import cn.hncu.book.vo.BookQueryModel;
- public interface BookDAO {
- public boolean create(BookModel book);
- public boolean delete(String uuid);
- public boolean upDate(BookModel book);
- public BookModel getSingle(String uuid);
- public List<BookModel> getAll();
- public List<BookModel> getByCondition(BookQueryModel bqm);
- }
- package cn.hncu.book.dao.impl;
- import java.util.ArrayList;
- import java.util.List;
- import cn.hncu.book.dao.dao.BookDAO;
- import cn.hncu.book.vo.BookModel;
- import cn.hncu.book.vo.BookQueryModel;
- import cn.hncu.utils.FileIo;
- public class BookDAOImpl implements BookDAO {
- private static final String FILE_NAME="book.txt";
- @Override
- public boolean create(BookModel book) {
- List<BookModel> list=FileIo.read(FILE_NAME);
- for (BookModel u:list){
- if (u.getUuid().equals(book.getUuid())){
- return false;
- }
- }
- list.add(book);
- FileIo.write(list, FILE_NAME);
- return true;
- }
- @Override
- public boolean delete(String uuid) {
- List<BookModel> list=FileIo.read(FILE_NAME);
- for (int i=0;i<list.size();i++){
- if (list.get(i).getUuid().equals(uuid)){
- list.remove(i);
- FileIo.write(list, FILE_NAME);
- return true;
- }
- }
- return false;
- }
- @Override
- public List<BookModel> getAll() {
- List<BookModel> list=FileIo.read(FILE_NAME);
- return list;
- }
- @Override
- public List<BookModel> getByCondition(BookQueryModel bqm) {
- List<BookModel> list=getAll();
- List<BookModel> results=new ArrayList<BookModel>();
- for (BookModel book:list){
- //反逻辑,卫条件: 外层判断用户输入是否是查询条件;内层判断该对象是否符合查询条件
- if (bqm.getUuid()!=null&&bqm.getUuid().trim().length()>0){
- if (!bqm.getUuid().equals(book.getUuid())){
- continue;
- }
- }
- if (bqm.getName()!=null&&bqm.getName().trim().length()>0){
- if (book.getName().indexOf(bqm.getName())==-1){
- continue;
- }
- }
- if (bqm.getInPrice()>0){
- if (bqm.getInPrice()>book.getInPrice()){
- continue;
- }
- }
- if (bqm.getHighInPrice()>0){
- if (bqm.getHighInPrice()<book.getInPrice()){
- continue;
- }
- }
- if (bqm.getSalePrice()>0){
- if (bqm.getSalePrice()>book.getSalePrice()){
- continue;
- }
- }
- if (bqm.getHighSalePrice()>0){
- if (bqm.getHighSalePrice()<book.getSalePrice()){
- continue;
- }
- }
- results.add(book);
- }
- return results;
- }
- @Override
- public BookModel getSingle(String uuid) {
- List<BookModel> list=FileIo.read(FILE_NAME);
- for (BookModel u:list){
- if (u.getUuid().equals(uuid)){
- return u;
- }
- }
- return null;
- }
- @Override
- public boolean upDate(BookModel book) {
- List<BookModel> list=FileIo.read(FILE_NAME);
- for (int i=0;i<list.size();i++){
- if (list.get(i).getUuid().equals(book.getUuid())){
- list.set(i, book);
- FileIo.write(list, FILE_NAME);
- return true;
- }
- }
- return false;
- }
- }
- package cn.hncu.book.dao.factory;
- import cn.hncu.book.dao.dao.BookDAO;
- import cn.hncu.book.dao.impl.BookDAOImpl;
- public class BookDAOFactory {
- public static BookDAO getBookDAO(){
- return new BookDAOImpl();
- }
- }
接口:
- package cn.hncu.book.business.ebi;
- import java.util.List;
- import cn.hncu.book.vo.BookModel;
- import cn.hncu.book.vo.BookQueryModel;
- public interface BookEbi {
- public boolean create(BookModel book);
- public boolean delete(String uuid);
- public boolean upDate(BookModel book);
- public BookModel getSingle(String uuid);
- public List<BookModel> getAll();
- public List<BookModel> getByCondition(BookQueryModel bqm);
- public BookModel getBookByName(String bookName);
- }
- package cn.hncu.book.business.ebo;
- import java.util.List;
- import cn.hncu.book.business.ebi.BookEbi;
- import cn.hncu.book.dao.dao.BookDAO;
- import cn.hncu.book.dao.factory.BookDAOFactory;
- import cn.hncu.book.vo.BookModel;
- import cn.hncu.book.vo.BookQueryModel;
- import cn.hncu.common.UuidModelConstance;
- import cn.hncu.common.uuid.dao.factory.UuidDAOFactory;
- public class BookEbo implements BookEbi {
- BookDAO dao=BookDAOFactory.getBookDAO();
- @Override
- public boolean create(BookModel book) {
- String uuid=UuidDAOFactory.getUuidDAO().getNextUuid(UuidModelConstance.BOOK);
- book.setUuid(uuid);
- return dao.create(book);
- }
- @Override
- public boolean delete(String uuid) {
- return dao.delete(uuid);
- }
- @Override
- public List<BookModel> getAll() {
- return dao.getAll();
- }
- @Override
- public List<BookModel> getByCondition(BookQueryModel bqm) {
- return dao.getByCondition(bqm);
- }
- @Override
- public BookModel getSingle(String uuid) {
- return dao.getSingle(uuid);
- }
- @Override
- public boolean upDate(BookModel book) {
- return dao.upDate(book);
- }
- @Override
- public BookModel getBookByName(String bookName) {
- BookQueryModel bqm=new BookQueryModel();
- bqm.setName(bookName);
- return getByCondition(bqm).get(0);
- }
- }