发布时间 : 星期三 文章图书进销存系统(CS)更新完毕开始阅读
第9章 图书进存销系统 ·41·
保存书本的销售记录,只需要保存对应的销售记录的外键、书本记录外键和交易数量,由于一次交易记录对应多书本的销售记录,因此一条书的销售记录,只需要有一本书的外键。业务层只需要将BookSaleRecord(多个)和SaleRecord(一个)给到两个数据访问层即可。
代码清单:code\\book\\src\\org\\crazyit\\book\\service\\impl\\SaleRecordServiceImpl.java
public void saveRecord(SaleRecord record) { //遍历判断书的库存是否不够 }
for (BookSaleRecord r : record.getBookSaleRecords()) { String bookId = r.getBook().getID(); Book b = bookDao.find(bookId); //当存库不够时,抛出异常
if (Integer.valueOf(r.getTRADE_SUM()) > Integer.valueOf(b.getREPERTORY_SIZE())) { throw new BusinessException(b.getBOOK_NAME() + \的库存不够\
} }
//先保存交易记录
String id = saleRecordDao.save(record); //再保存书的交易记录
for (BookSaleRecord r : record.getBookSaleRecords()) { //设置销售记录id }
r.setT_SALE_RECORD_ID_FK(id);
bookSaleRecordDao.saveBookSaleRecord(r); //修改书的库存
String bookId = r.getBook().getID(); Book b = bookDao.find(bookId); //计算剩余的库存
int leave = Integer.valueOf(b.getREPERTORY_SIZE()) - Integer.valueOf(r.getTRADE_SUM()); //设置库存并将库存数保存到数据库
b.setREPERTORY_SIZE(String.valueOf(leave)); bookDao.updateRepertory(b);
以上代码保存了销售记录并修改书本的库存量,在进行保存销售记录前,需要进行业务判断,判断书本的存库量是否足够,如果不足够则抛出异常。下面可以实现销售记录的查询,可以根据某一天的时间查询当天所有的销售记录,再进行数据显示,在此不再详细赘述。
到此,销售界面的功能已经完成,与其他功能相比,销售管理界面只是多了一个列表,该列表的处理方法与主列表的处理方式大致相同。我们可以去看一下入库管理界面,与销售管理界面一样,都是通过相同的交互方式得到销售或者入库的目的,但是与之不同的地方是,在处理入库业务的时候,我们同样也需要修改书本的库存,销售是减少库存,入库是增加库存。与销售管理功能一样的是,入库管理界面的下面部分也是有一个入库的书的记录列表,原理与书的交易记录列表一致。入库管理功能的实现,可以参考销售管理功能的实现。入库管理功能如图9.12所示。
·42· 第9章 图书进存销系统
图9.12 入库管理功能
9.8 本章小结
在本章中,我们实现了一个简单的图书进存销系统,学习了使用JDBC进行数据库操作,使用Java的反射技术封装数据,使用单态模式去获得数据库连接,图片的压缩处理等知识点。在界面中主要使用JTable的处理,表现层、业务层与数据访问层的分层结构,大大减低了各层之间的代码耦合。在表现层中简单的使用了模板方法这种设计模式,将各个界面中的共同点提取到父类进行处理。如果需要写更良好的代码,可以对本章中的代码进行重构,并可以应用对应的设计模式。运行本章安全需要将“bin\\图书进存销系统\\sql”目录下的BOOK_SYSTEM.sql导入你的MySQL数据库中,打开“bin\\图书进存销系统\\book.jar”修改包下的“book.jar\\cfg\\jdbc.propertis”配置文件,最后运行“bin\\图书进存销系统\\startup.bat”即可,默认的用户名和密码都是crazyit,本章所使用的MySQL版本是5.0。