Java之------单机版书店管理系统(设计思想和设计模式系列四)图书模块

书店管理系统

书店管理系统可以说是设计模式及设计思想的一个比较经典的例子。

本系列将分为多个部分讲述此输电管理系统。

书店管理系统将分为:用户、图书、进货、销售和库存五个模块,另外还有公共包、工具包和登录包,另外还有一个框架。

对于分层设计,都是表现层可以调用逻辑层,逻辑层调用数据层,数据层调用工具和公共包,方向不可打乱,必须严格按照这种模式。

本篇将做图书模块。


注:本篇需要使用到的框架在本系列二的用户模块:

链接:点击打开链接


同系列有:

系列一(概述):点击打开链接

系列二(用户):点击打开链接

系列三(工具包和公共类):点击打开链接

系列五(进货):点击打开链接

系列六(销售):点击打开链接

系列七(库存):点击打开链接

系列八(登录):点击打开链接


和用户模块相同的,图书模块分成了数据层、逻辑层、表现层和值对象层。


数据层:

接口:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package cn.hncu.book.dao.dao;  
  2.   
  3. import java.util.List;  
  4.   
  5. import cn.hncu.book.vo.BookModel;  
  6. import cn.hncu.book.vo.BookQueryModel;  
  7.   
  8. public interface BookDAO {  
  9.     public boolean create(BookModel book);  
  10.     public boolean delete(String uuid);  
  11.     public boolean upDate(BookModel book);  
  12.       
  13.     public BookModel getSingle(String uuid);  
  14.     public List<BookModel> getAll();  
  15.     public List<BookModel> getByCondition(BookQueryModel bqm);  
  16. }  
实现类:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package cn.hncu.book.dao.impl;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import cn.hncu.book.dao.dao.BookDAO;  
  7. import cn.hncu.book.vo.BookModel;  
  8. import cn.hncu.book.vo.BookQueryModel;  
  9. import cn.hncu.utils.FileIo;  
  10.   
  11. public class BookDAOImpl implements BookDAO {  
  12.     private static final String FILE_NAME="book.txt";  
  13.     @Override  
  14.     public boolean create(BookModel book) {  
  15.         List<BookModel> list=FileIo.read(FILE_NAME);  
  16.         for (BookModel u:list){  
  17.             if (u.getUuid().equals(book.getUuid())){  
  18.                 return false;  
  19.             }  
  20.         }  
  21.         list.add(book);  
  22.         FileIo.write(list, FILE_NAME);  
  23.         return true;  
  24.     }  
  25.   
  26.     @Override  
  27.     public boolean delete(String uuid) {  
  28.         List<BookModel> list=FileIo.read(FILE_NAME);  
  29.         for (int i=0;i<list.size();i++){  
  30.             if (list.get(i).getUuid().equals(uuid)){  
  31.                 list.remove(i);  
  32.                 FileIo.write(list, FILE_NAME);  
  33.                 return true;  
  34.             }  
  35.         }  
  36.         return false;  
  37.     }  
  38.   
  39.     @Override  
  40.     public List<BookModel> getAll() {  
  41.         List<BookModel> list=FileIo.read(FILE_NAME);  
  42.         return list;  
  43.     }  
  44.   
  45.     @Override  
  46.     public List<BookModel> getByCondition(BookQueryModel bqm) {  
  47.         List<BookModel> list=getAll();  
  48.         List<BookModel> results=new ArrayList<BookModel>();  
  49.         for (BookModel book:list){  
  50.             //反逻辑,卫条件: 外层判断用户输入是否是查询条件;内层判断该对象是否符合查询条件  
  51.             if (bqm.getUuid()!=null&&bqm.getUuid().trim().length()>0){  
  52.                 if (!bqm.getUuid().equals(book.getUuid())){  
  53.                     continue;  
  54.                 }  
  55.             }  
  56.             if (bqm.getName()!=null&&bqm.getName().trim().length()>0){  
  57.                 if (book.getName().indexOf(bqm.getName())==-1){  
  58.                     continue;  
  59.                 }  
  60.             }  
  61.             if (bqm.getInPrice()>0){  
  62.                 if (bqm.getInPrice()>book.getInPrice()){  
  63.                     continue;  
  64.                 }  
  65.             }  
  66.             if (bqm.getHighInPrice()>0){  
  67.                 if (bqm.getHighInPrice()<book.getInPrice()){  
  68.                     continue;  
  69.                 }  
  70.             }  
  71.             if (bqm.getSalePrice()>0){  
  72.                 if (bqm.getSalePrice()>book.getSalePrice()){  
  73.                     continue;  
  74.                 }  
  75.             }  
  76.             if (bqm.getHighSalePrice()>0){  
  77.                 if (bqm.getHighSalePrice()<book.getSalePrice()){  
  78.                     continue;  
  79.                 }  
  80.             }  
  81.             results.add(book);  
  82.         }  
  83.         return results;  
  84.     }  
  85.   
  86.     @Override  
  87.     public BookModel getSingle(String uuid) {  
  88.         List<BookModel> list=FileIo.read(FILE_NAME);  
  89.         for (BookModel u:list){  
  90.             if (u.getUuid().equals(uuid)){  
  91.                 return u;  
  92.             }  
  93.         }  
  94.         return null;  
  95.     }  
  96.   
  97.     @Override  
  98.     public boolean upDate(BookModel book) {  
  99.         List<BookModel> list=FileIo.read(FILE_NAME);  
  100.         for (int i=0;i<list.size();i++){  
  101.             if (list.get(i).getUuid().equals(book.getUuid())){  
  102.                 list.set(i, book);  
  103.                 FileIo.write(list, FILE_NAME);  
  104.                 return true;  
  105.             }  
  106.         }  
  107.         return false;  
  108.     }  
  109. }  
工厂类:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package cn.hncu.book.dao.factory;  
  2.   
  3. import cn.hncu.book.dao.dao.BookDAO;  
  4. import cn.hncu.book.dao.impl.BookDAOImpl;  
  5.   
  6. public class BookDAOFactory {  
  7.     public static BookDAO getBookDAO(){  
  8.         return new BookDAOImpl();  
  9.     }  
  10. }  


逻辑层:

接口:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package cn.hncu.book.business.ebi;  
  2.   
  3. import java.util.List;  
  4.   
  5. import cn.hncu.book.vo.BookModel;  
  6. import cn.hncu.book.vo.BookQueryModel;  
  7.   
  8. public interface BookEbi {  
  9.     public boolean create(BookModel book);  
  10.     public boolean delete(String uuid);  
  11.     public boolean upDate(BookModel book);  
  12.       
  13.     public BookModel getSingle(String uuid);  
  14.     public List<BookModel> getAll();  
  15.     public List<BookModel> getByCondition(BookQueryModel bqm);  
  16.       
  17.     public BookModel getBookByName(String bookName);  
  18. }  
实现类:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package cn.hncu.book.business.ebo;  
  2.   
  3. import java.util.List;  
  4.   
  5. import cn.hncu.book.business.ebi.BookEbi;  
  6. import cn.hncu.book.dao.dao.BookDAO;  
  7. import cn.hncu.book.dao.factory.BookDAOFactory;  
  8. import cn.hncu.book.vo.BookModel;  
  9. import cn.hncu.book.vo.BookQueryModel;  
  10. import cn.hncu.common.UuidModelConstance;  
  11. import cn.hncu.common.uuid.dao.factory.UuidDAOFactory;  
  12.   
  13. public class BookEbo implements BookEbi {  
  14.     BookDAO dao=BookDAOFactory.getBookDAO();  
  15.       
  16.     @Override  
  17.     public boolean create(BookModel book) {  
  18.         String uuid=UuidDAOFactory.getUuidDAO().getNextUuid(UuidModelConstance.BOOK);  
  19.         book.setUuid(uuid);  
  20.         return dao.create(book);  
  21.     }  
  22.   
  23.     @Override  
  24.     public boolean delete(String uuid) {  
  25.         return dao.delete(uuid);  
  26.     }  
  27.   
  28.     @Override  
  29.     public List<BookModel> getAll() {  
  30.         return dao.getAll();  
  31.     }  
  32.   
  33.     @Override  
  34.     public List<BookModel> getByCondition(BookQueryModel bqm) {  
  35.         return dao.getByCondition(bqm);  
  36.     }  
  37.   
  38.     @Override  
  39.     public BookModel getSingle(String uuid) {  
  40.         return dao.getSingle(uuid);  
  41.     }  
  42.   
  43.     @Override  
  44.     public boolean upDate(BookModel book) {  
  45.         return dao.upDate(book);  
  46.     }  
  47.   
  48.     @Override  
  49.     public BookModel getBookByName(String bookName) {  
  50.         BookQueryModel bqm=new BookQueryModel();  
  51.         bqm.setName(bookName);  
  52.         return getByCondition(bqm).get(0);  
  53.     }  
  54. }  
工厂类:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值