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

简介

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

销售记录关系分析

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

  • 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 {

    @Override
    public Collection<SaleRecord> findAll() throws Exception {
        String sql = "select * from t_sale_record";
        return getDatas(sql,new ArrayList(),SaleRecord.class);
    }

    @Override
    public 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);
    }

    @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<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{

    @Override
    public 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);
    }

    @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<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());

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

小结

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

  • 2
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
销售管理系统使用说明书 主要功能 销售管理系统由基础信息、基础资料、业务管理、信息查询、辅助工具、系统设置、个人设置等模块组成,其规划功能模块如下: 基础信息 基础信息主要实现员工职务、单位类型、计量单位、支付方式、银行名称、企业资信、商品类别等功能。 基础资料 基础资料主要实现企业档案管理、商品资料管理等功能。 业务管理 业务管理主要实现订货业务、出货业务、退货业务等功能。 信息查询 信息查询主要实现订货业务查询、出货业务查询、退货业务查询、区域信息查询等功能。 辅助工具 辅助工具主要实现调用Word文档、调用Excel文档、调用计算器等功能。 系统设置 系统设置主要实现员工管理、员工权限管理、公司简介设置等功能。 个人设置 个人设置主要实现修改密码、修改个人信息等功能。 操作注意事项 用户在使用《销售管理系统》之前,应注意以下事项: (1)管理员用户名和密码为:mr、mrsoft。 业务流程 要想运行本系统,请按照以下流程操作: (1)在登录界面中单击“新用户注册”按钮,注册用户名和密码,然后由超级管理员进行分配权限。 (2)在登录界面中输入用户名和密码,进入系统,首先在“基础信息”中添加基本信息。 (3)在“基础资料”中添加商品信息,单击“详细信息”按钮,在商品详细信息页面中可以增加进货数量。 (4)在“业务管理”中可以执行出货及退货操作。 (5)在“信息查询”中可对出货信息、退货信息及区域信息进行查询。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值