文章目录

  • 简介
    • 销售记录关系分析
      • 数据访问层接口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<SaleRecord> findAll() throws Exception;//模糊日期(实质还是字符串)查询Collection<SaleRecord> findByDate(String date) throws Exception;//id查询SaleRecord findById(String id) throws Exception;//添加交易日期SaleRecord addOrUpdate(SaleRecord saleRecord) throws Exception;
}
  • findByDate:相当于名称模糊查询
  • 剩下方法与以前图书管理基本相同,可以参考上一篇

数据访问层实现类SaleRecordDaoImpl

package dao;import database.SaleRecord;import java.util.ArrayList;
import java.util.Collection;public class SaleRecordDaoImpl extends CommonDaoImpl implements SaleRecordDao {@Overridepublic Collection<SaleRecord> findAll() throws Exception {String sql = "select * from t_sale_record";return getDatas(sql,new ArrayList(),SaleRecord.class);}@Overridepublic Collection<SaleRecord> 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);}@Overridepublic SaleRecord findById(String id) throws Exception {String sql = "select * from t_sale_record sr where sr.id = '" + id + "'";return getSingle(sql);}@Overridepublic SaleRecord addOrUpdate(SaleRecord sr) throws Exception {boolean flag = false;String sql = null;String id = null;Collection<SaleRecord> 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<BookSaleRecord> 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{@Overridepublic Collection<BookSaleRecord> 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);}@Overridepublic BookSaleRecord findById(String id) throws Exception {String sql = "select * from t_book_sale_record r where r.id = '" + id + "'";return getSigle(sql);}@Overridepublic BookSaleRecord addOrUpdate(BookSaleRecord bsr) throws Exception {Book b = bsr.getBook();bsr.setBook_id_fk(new BookDaoImpl().addOrUpdate(b).getId());SaleRecord sr = bsr.getSaleRecord();//得到SR表的idString 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<BookSaleRecord> 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());

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

小结

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

java练习:图书销售管理系统(五),销售管理相关推荐

  1. 计算机java毕设 图书销售管理系统的设计与实现

    文章目录 1 项目简介 2 实现效果 3 系统设计 4 关键代码 5 论文概览 6 最后 1 项目简介

  2. Java图书销售管理系统

    技术:Java等 摘要: 随着时代的进步,科技的发展,计算机不但逐渐步入寻常百姓家庭,成为人们日常生活中不可或缺的一部分,而且在工业.农业.商业等多领域起着巨大作用.计算机的广泛应用对提高经济效益.生 ...

  3. 【java毕业设计】基于java+swing+CS的图书销售管理系统GUI设计与实现(毕业论文+程序源码)——图书销售管理系统

    基于java+swing+CS的图书销售管理系统GUI设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+swing+CS的图书销售管理系统GUI设计与实现,文章末尾附有本毕业设计的 ...

  4. java图书销售系统,基于jsp的图书销售管理系统-JavaEE实现图书销售管理系统 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的图书销售管理系统, 该项目可用各类java课程设计大作业中, 图书销售管理系统的系统架构分为前后台两部分, 最终实 ...

  5. java销售管理系统_图书销售管理系统Java源代码

    [实例简介] 图书销售管理系统,内含源代码,项目需求分析,编写思路 [实例截图] [核心代码] BookSaleManagementSystem └── BookSaleManagementSyste ...

  6. C#毕业设计——基于C#+asp.net+sqlserver的图书销售管理系统设计与实现(毕业论文+程序源码)——图书销售管理系统

    基于C#+asp.net+sqlserver的图书销售管理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于C#+asp.net+sqlserver的图书销售管理系统设计与实现,文章末尾 ...

  7. [附源码]java毕业设计线上图书销售管理系统

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  8. [附源码]SSM计算机毕业设计线上图书销售管理系统JAVA

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  9. java数据库图书销售系统_SQL+java数据库课程设计,图书销售管理系统

    [实例简介] SQL数据库课程设计,图书销售管理系统,报告,任务书,挺全的 [实例截图] [核心代码] 07计本2班_15号_刘思旭_图书销售管理系统 └── 07计本2班_15号_刘思旭_图书销售管 ...

  10. c语言课程设计图书销售,C语言程序课程设计报告-图书销售管理系统.doc

    图书销售管理系统设计.......................................................................................... ...

最新文章

  1. ERROR while rich displaying an object: Error: Continuous value supplied to discrete scale
  2. 响应式网页之媒体查询
  3. Linux 字符设备驱动开发基础(一)—— 编写简单 LED 设备驱动
  4. 东南大学的计算机类和电子信息哪个专业好,东南大学王牌专业有哪些及专业排名...
  5. Ubuntu技巧之xxx is not in the sudoers file解决方法
  6. cmd bat 相对命令
  7. 《东周列国志》第六十七回 卢蒲癸计逐庆封 楚灵王大合诸侯
  8. 基于java的智能化停车系统ER图_智能化的停车场系统设计原则及解决方案
  9. 二维彩虹二维码产品功能更新:增加“赞赏”、“重置”功能
  10. 零知识证明(zero-knowledge proof)
  11. css 从右到左的方向调整
  12. HTML、CSS、javascript中单行注释和多行注释
  13. Openfire 用户密码加密
  14. Playcanvas动画格式解析
  15. 派生类成员的访问属性
  16. 离散数学(4)——集合的概念和集合之间的关系、集合的运算、基本的集合恒等式
  17. 学习心得(华清远见)
  18. 微信公众平台流量主单日广告收入最高达5万元 羡煞偶们
  19. 简单两步,将Windows11右键菜单修改为Windows10风格
  20. 【名说】DB2查询sql缓慢的调优方法

热门文章

  1. 同等学力申硕计算机考试辅导,2018年同等学力申硕计算机综合试题解析--数学基础...
  2. 计算机管理无反应,电脑无响应是怎么回事 电脑无响应解决方法
  3. upupw mysql 密码_UPUPW本地测试怎么修改MySQL 数据库名和用户名
  4. 将16位的深度图转换为8位深度图
  5. 坦桑尼亚签证办理攻略
  6. 开年第一“屠龙刀“,开年狂降15万的特斯拉剑指何方?
  7. Ubuntu16.04安装ROS 过程中中显示无法定位软件错误
  8. C/C++编程学习 - 第4周 ⑧ 小蒜蒜的成绩
  9. 浅谈——从潜意识到创造性思维
  10. JAVA WebService注册中心JUDDI使用方法(引用)