图书进销存系统(CS)

发布时间 : 星期三 文章图书进销存系统(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。

联系合同范文客服:xxxxx#qq.com(#替换为@)