java 计算销售总额 java统计图书的销售量

您所在的位置:网站首页 vi如何替换字符 java 计算销售总额 java统计图书的销售量

java 计算销售总额 java统计图书的销售量

2024-05-22 10:10| 来源: 网络整理| 查看: 265

文章目录简介销售记录关系分析数据访问层接口SaleRecordDao数据访问层实现类SaleRecordDaoImpl数据访问接口BookSaleRecordDao数据访问层实现类BookSaleRecordDaoImpl表现层测试小结

简介

上一篇完成了有点复杂的图书管理,现在开始最后一部分(也是关系相对复杂的一部分……)

销售记录关系分析

先明确两个表的作用(见第一篇:关系型数据表的设计)

t_sale_record表(简称SR表):存放销售记录日期t_book_sale_record表(简称BSR表):存放某本书的销售记录,包括对应书本(外键),对应日期(外键),销售量其中,某本书的销售记录包括两个外键,同样要为他们设置引用类型成员变量(参考上一篇:图书管理)销售记录日期与某本书的销售记录是一对多的关系(即一次交易多本不同的书),所以还需要根据销售记录日期查询某一时期的交易记录。除此之外,由于很多数据需要实时根据查询来计算得出,所以还应该为SaleRecord设置其他的成员变量(如交易总数,总额,所有书名等)

理清思路就用了大半天,准备大概就绪,接下来开始行动

数据访问层接口SaleRecordDao

代码如下

package dao; import database.*; import java.util.Collection; public interface SaleRecordDao { //得到所有销售记录日期 Collection findAll() throws Exception; //模糊日期(实质还是字符串)查询 Collection findByDate(String date) throws Exception; //id查询 SaleRecord findById(String id) throws Exception; //添加交易日期 SaleRecord addOrUpdate(SaleRecord saleRecord) throws Exception; }findByDate:相当于名称模糊查询剩下方法与以前图书管理基本相同,可以参考上一篇数据访问层实现类SaleRecordDaoImplpackage dao; import database.SaleRecord; import java.util.ArrayList; import java.util.Collection; public class SaleRecordDaoImpl extends CommonDaoImpl implements SaleRecordDao { @Override public Collection findAll() throws Exception { String sql = "select * from t_sale_record"; return getDatas(sql,new ArrayList(),SaleRecord.class); } @Override public Collection findByDate(String date) throws Exception { String sql = "select * from t_sale_record sr where sr.record_date like '" + date + "%'"; return getDatas(sql,new ArrayList(),SaleRecord.class); } @Override public SaleRecord findById(String id) throws Exception { String sql = "select * from t_sale_record sr where sr.id = '" + id + "'"; return getSingle(sql); } @Override public SaleRecord addOrUpdate(SaleRecord sr) throws Exception { boolean flag = false; String sql = null; String id = null; Collection saleRecords = findAll(); for (SaleRecord saleRecord : saleRecords){ if(saleRecord.getRecord_date().equals(sr.getRecord_date())){ flag = true; id = saleRecord.getId(); } } if (flag){ sql = "update t_sale_record sr set sr.record_date = '" + sr.getRecord_date() + "' where sr.record_date = '" + sr.getRecord_date() + "'"; getJDBCExector().executeUpdate(sql); }else { sql = "insert into t_sale_record values(null,'" + sr.getRecord_date() + "')"; id = String.valueOf(getJDBCExector().executeUpdate(sql)); } return findById(id); } private SaleRecord getSingle(String sql) throws Exception{ SaleRecord result = null; for (Object s : getDatas(sql, new ArrayList(),SaleRecord.class)){ result = (SaleRecord)s; } return result; } }

可以看到相当于原木原样照搬图书管理部分,根据逻辑自己编写 获得SR表数据之后,就要开始获取相对的多个BSR表数据了

数据访问接口BookSaleRecordDao

代码如下

package dao; import database.Book; import database.BookSaleRecord; import java.util.Collection; public interface BookSaleRecordDao { //根据外键id = 销售记录id,在从表中查询记录(一个销售日期对应多个销售记录) Collection findBySaleRecordId(String saleRecordId) throws Exception; //id查询 BookSaleRecord findById(String id) throws Exception; //添加(修改)单个书的交易记录 BookSaleRecord addOrUpdate(BookSaleRecord bookSaleRecord) throws Exception; }其中比较重要的是findBySaleRecordId方法,根据SR表id查询出BSR表数据,实现一对多查询剩下两个方法作用之前也介绍过,不再赘述

接下来看实现

数据访问层实现类BookSaleRecordDaoImpl

先来看BookSaleRecord类的构造器

public BookSaleRecord(Book book,SaleRecord saleRecord,String trade_sum){ this.book = book; this.saleRecord = saleRecord; this.trade_sum = trade_sum; }

直接传入引用类型变量 ,接下来是实现类代码

package dao; import database.*; import java.util.*; public class BookSaleRecordDaoImpl extends CommonDaoImpl implements BookSaleRecordDao{ @Override public Collection findBySaleRecordId(String saleRecordId) throws Exception { String sql = "select * from t_book_sale_record r where r.t_sale_record_id_fk = '" + saleRecordId + "'"; return getDatas(sql,new ArrayList(),BookSaleRecord.class); } @Override public BookSaleRecord findById(String id) throws Exception { String sql = "select * from t_book_sale_record r where r.id = '" + id + "'"; return getSigle(sql); } @Override public BookSaleRecord addOrUpdate(BookSaleRecord bsr) throws Exception { Book b = bsr.getBook(); bsr.setBook_id_fk(new BookDaoImpl().addOrUpdate(b).getId()); SaleRecord sr = bsr.getSaleRecord(); //得到SR表的id String srId = new SaleRecordDaoImpl().addOrUpdate(sr).getId(); bsr.setT_sale_record_id_fk(srId); boolean flag = false; String sql = null; String id = null; //根据SR表id查询 Collection bookSaleRecords = findBySaleRecordId(srId); for (BookSaleRecord bookSaleRecord : bookSaleRecords){ //根据书判断相等 if (bookSaleRecord.getBook_id_fk().equals(bsr.getBook_id_fk())){ flag = true; id = bookSaleRecord.getId(); } } if(flag){ sql = "update t_book_sale_record r set r.book_id_fk = '" + bsr.getBook_id_fk() + "', r.t_sale_record_id_fk = '" + bsr.getT_sale_record_id_fk() + "'," + " r.trade_sum = '" + bsr.getTrade_sum() + "'where r.id = '" + id + "'"; getJDBCExector().executeUpdate(sql); } else { sql = "insert into t_book_sale_record values(null,'" + bsr.getBook_id_fk() + "','" + bsr.getT_sale_record_id_fk() + "','" + bsr.getTrade_sum() + "')"; id = String.valueOf(getJDBCExector().executeUpdate(sql)); } return findById(id); } private BookSaleRecord getSigle(String sql) throws Exception{ BookSaleRecord result = null; for (Object b : getDatas(sql,new ArrayList(),BookSaleRecord.class)){ result = (BookSaleRecord)b; } return result; } }

-addOrUpdate: 这里对于这两个引用类型变量直接插入,然后根据书外键判断是否存在该书的交易记录,然后执行相应的操作

也是根据图书管理的模板来写

表现层测试

测试代码如下

BookSaleRecord bsr = m.saleRecordService.addOrUpdate(new BookSaleRecord( new Book("新增书100","新增的书本","20", "新增种类100","新增出版社100", ".\\out\\网易云看板娘.jpg","cs"), new SaleRecord("2019-04-02 21:00:57"), "24")); System.out.println(bsr.getBook_id_fk());

在这里可以看到传入的三个具体参数

小结

还有入库管理一部分,与该部分相差不多,这个小项目也算是搞定了,没有界面所以对参数要求很苛刻,难在设计,与需求



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3