Java---设计模式---书店管理系统(单机版)⑤

71 篇文章 0 订阅

书店管理系统正确入口

销售模块

界面

主界面:

销售单:

添加界面:

修改界面:

提交销售单:

查询界面:

查询结果界面:


查看明细界面:

包(体现架构):

关键性代码:

值对象1(OutMainModel):

package cn.hncu.booksManagementSystem.out.vo;

import java.io.Serializable;

import cn.hncu.booksManagementSystem.utils.DateUtil;

/**
 * CreateTime: 2018年4月19日 下午7:29:53	
 * @author 宋进宇  Email:447441478@qq.com
 * Description:
 *	销售值对象
 */
public class OutMainModel implements Serializable {
	private static final long serialVersionUID = 1L;
	
	private String id; //销售单编号 --- 主键
	private long outDate; //销售时间
	private String outUserId; //销售人员编号 --- 外键
	private String outUserName; //销售人员姓名---专门为用户显示销售人员姓名而补的一个属性
	
	public OutMainModel() {
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public long getOutDate() {
		return outDate;
	}

	public void setOutDate(long outDate) {
		this.outDate = outDate;
	}

	public String getOutUserId() {
		return outUserId;
	}

	public void setOutUserId(String outUserId) {
		this.outUserId = outUserId;
	}
	
	public String getOutUserName() {
		return outUserName;
	}

	public void setOutUserName(String outUserName) {
		this.outUserName = outUserName;
	}


	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		OutMainModel other = (OutMainModel) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		return true;
	}

	@Override
	public String toString() {
		return  "销售单编号:"+id + " ,日期:" + DateUtil.long2String(outDate) + " ,销售人编号:"+outUserId+" , " + outUserName;
	}
	
}

值对象2(OutDetailModel):

package cn.hncu.booksManagementSystem.out.vo;

import java.io.Serializable;

/**
 * CreateTime: 2018年4月19日 下午7:33:27	
 * @author 宋进宇  Email:447441478@qq.com
 * Description:
 *	销售明细值对象
 */
public class OutDetailModel implements Serializable {
	private static final long serialVersionUID = 1L;
	
	private String id; //销售明细编号 --- 主键
	private String outId; //销售单编号 --- 外键
	private String bookId; //图书编号 --- 外键
	private String bookName; //图书名称---专门为用户显示图书名称而补的一个属性
	
	
	private int sumNum ; // 销售数量
	private double sumMoney; //销售总金额
	
	public OutDetailModel() {
	}

	public String getBookName() {
		return bookName;
	}

	public void setBookName(String bookName) {
		this.bookName = bookName;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getOutId() {
		return outId;
	}

	public void setOutId(String outId) {
		this.outId = outId;
	}

	public String getBookId() {
		return bookId;
	}

	public void setBookId(String bookId) {
		this.bookId = bookId;
	}

	public int getSumNum() {
		return sumNum;
	}

	public void setSumNum(int sumNum) {
		this.sumNum = sumNum;
	}

	public double getSumMoney() {
		return sumMoney;
	}

	public void setSumMoney(double sumMoney) {
		this.sumMoney = sumMoney;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		OutDetailModel other = (OutDetailModel) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		return true;
	}

	@Override
	public String toString() {
		return "销售明细编号:"+id  +" ,图书编号:"+bookId +" ,《"+bookName+"》, "+ sumNum + "本 , 共:" + sumMoney+"元" ;
		
	}
	
	
}

数据层:OutMainDAO实现类(OutMainDAO_FileImpl):

package cn.hncu.booksManagementSystem.out.dao.impl;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import cn.hncu.booksManagementSystem.common.enums.XxxIdEnum;
import cn.hncu.booksManagementSystem.out.dao.dao.OutMainDAO;
import cn.hncu.booksManagementSystem.out.vo.OutMainModel;
import cn.hncu.booksManagementSystem.out.vo.OutMainQueryModel;
import cn.hncu.booksManagementSystem.utils.FileIoUtil;
import cn.hncu.booksManagementSystem.utils.GeneratorXxxID_Util;
/**
 * CreateTime: 2018年4月23日 下午2:49:58	
 * @author 宋进宇  Email:447441478@qq.com
 */
public class OutMainDAO_FileImpl implements OutMainDAO {
	//数据源
	private final String FILE_NAME = "./data/outMain.info";
	
	@Override
	public boolean add(OutMainModel outMain) {
		if (outMain==null) {
			return false;
		}
		Collection<OutMainModel> col = getAll();
		for (OutMainModel model : col) {
			if (model.equals(outMain)) {
				return false;
			}
		}
		boolean boo = col.add(outMain);
		boolean boo2 = FileIoUtil.write2File(col, FILE_NAME);
		if (boo && boo2) {
			GeneratorXxxID_Util.updateXxxId(XxxIdEnum.OUT_MAIN);
			return true;
		}
		return false;
	}

	@Override
	public boolean delete(String id) {
		if (id==null) {
			return false;
		}
		Collection<OutMainModel> col = getAll();
		for (OutMainModel model : col) {
			if (model.getId().equals(id)) {
				return col.remove(model)&&FileIoUtil.write2File(col, FILE_NAME);
			}
		}
		return false;
	}

	@Override
	public boolean update(OutMainModel outMain) {
		if (outMain==null) {
			return false;
		}
		Collection<OutMainModel> col = getAll();
		List<OutMainModel> list = (List<OutMainModel>) col;
		for (int i = 0; i < list.size(); i++) {
			if (list.get(i).equals(outMain)) {
				return list.set(i, outMain) != null&&FileIoUtil.write2File(list, FILE_NAME);
			}
		}
		return false;
	}

	@Override
	public OutMainModel getOutMainById(String id) {
		if (id==null) {
			return null;
		}
		Collection<OutMainModel> col = getAll();
		for (OutMainModel model : col) {
			if (model.getId().equals(id)) {
				return model;
			}
		}
		return null;
	}

	@Override
	public Collection<OutMainModel> getAll() {
		return FileIoUtil.readFromFile(FILE_NAME);
	}

	@Override
	public Collection<OutMainModel> getOutMainsByCondition(OutMainQueryModel omqm) {
		Collection<OutMainModel> col = getAll();
		if (omqm==null) {
			return col;
		}
		Collection<OutMainModel> resCol = new ArrayList<OutMainModel>();
		for (OutMainModel model : col) {
			//卫条件1 查id
			//判断查询条件是否有效
			if(omqm.getId()!=null && omqm.getId().trim().length()>0) {
				//如果不相等,就跳过
				if (!model.getId().trim().equals(omqm.getId().trim())) {
					continue;
				}
			}
			//卫条件2  查outUserId
			//判断查询条件是否有效
			if(omqm.getOutUserId()!=null && omqm.getOutUserId().trim().length()>0) {
				//如果不相等,就跳过
				if (!model.getOutUserId().trim().equals(omqm.getOutUserId().trim())) {
					continue;
				}
			}	
			//卫条件3 查outDate 范围查询
			//判断查询条件是否有效
			if (omqm.getOutDate()>0) {
				//如果小于小的,跳过
				if (model.getOutDate() < omqm.getOutDate()) {
					continue;
				}
			}
			//判断查询条件是否有效
			if (omqm.getOutDate2()>0) {
				//如果大于大的,跳过
				if (model.getOutDate() > omqm.getOutDate2()) {
					continue;
				}
			}
			resCol.add(model);
		}
		return resCol;
	}

}

数据层:OutDetailDAO实现类(OutDetailDAO_FileImpl):

package cn.hncu.booksManagementSystem.out.dao.impl;

import java.util.ArrayList;
import java.util.Collection;

import cn.hncu.booksManagementSystem.common.enums.XxxIdEnum;
import cn.hncu.booksManagementSystem.out.dao.dao.OutDetailDAO;
import cn.hncu.booksManagementSystem.out.vo.OutDetailModel;
import cn.hncu.booksManagementSystem.out.vo.OutDetailQueryModel;
import cn.hncu.booksManagementSystem.utils.FileIoUtil;
import cn.hncu.booksManagementSystem.utils.GeneratorXxxID_Util;

/**
 * CreateTime: 2018年4月23日 下午2:50:04	
 * @author 宋进宇  Email:447441478@qq.com
 */
public class OutDetailDAO_FileImpl implements OutDetailDAO {
	//数据源
	private final String FILE_NAME = "./data/outDetail.info";
	
	@Override
	public boolean add(OutDetailModel outDetail) {
		if (outDetail==null) {
			return false;
		}
		Collection<OutDetailModel> col = FileIoUtil.readFromFile(FILE_NAME);
		for (OutDetailModel model : col) {
			if (model.equals(outDetail)) {
				return false;
			}
		}
		boolean boo = col.add(outDetail);
		boolean boo2 = FileIoUtil.write2File(col, FILE_NAME);
		if (boo&&boo2) {
			GeneratorXxxID_Util.updateXxxId(XxxIdEnum.OUT_DETAIL);
			return true;
		}
		return false;
	}

	@Override
	public boolean delete(String id) {
		if (id==null) {
			return false;
		}
		Collection<OutDetailModel> col = FileIoUtil.readFromFile(FILE_NAME);
		for (OutDetailModel model : col) {
			if (model.getId().equals(id)) {
				return col.remove(model)&&FileIoUtil.write2File(col, FILE_NAME);
			}
		}
		return false;
	}

	@Override
	public boolean update(OutDetailModel outDetail) {
		if (outDetail==null) {
			return false;
		}
		Collection<OutDetailModel> col = FileIoUtil.readFromFile(FILE_NAME);
		ArrayList<OutDetailModel> list = (ArrayList<OutDetailModel>) col;
		for (int i = 0; i < list.size(); i++) {
			if(list.get(i).equals(outDetail)) {
				return list.set(i, outDetail)!=null&&FileIoUtil.write2File(list, FILE_NAME);
			}
		}
		return false;
	}

	@Override
	public OutDetailModel getOutDetailById(String id) {
		if (id==null) {
			return null;
		}
		Collection<OutDetailModel> col = FileIoUtil.readFromFile(FILE_NAME);
		for (OutDetailModel model : col) {
			if (model.getId().equals(id)) {
				return model;
			}
		}
		return null;
	}

	@Override
	public Collection<OutDetailModel> getAll() {
		return FileIoUtil.readFromFile(FILE_NAME);
	}

	@Override
	public Collection<OutDetailModel> getOutDetailsByCondition(OutDetailQueryModel odqm) {
		Collection<OutDetailModel> col = getAll();
		//如果查询条件为null,直接返回所有记录
		if (odqm==null) {
			return col;
		}
		Collection<OutDetailModel> resCol = new ArrayList<OutDetailModel>();
		for (OutDetailModel model : col) {
			//卫条件1 查id
			//判断查询条件是否有效
			if(odqm.getId()!=null &&!"".equals(odqm.getId())) {
				//不相等跳过
				if (!model.getId().equals(odqm.getId())) {
					continue;
				}
			}
			//卫条件2 查销售单id
			//判断查询条件是否有效
			if(odqm.getOutId()!=null &&!"".equals(odqm.getOutId())) {
				//不相等跳过
				if (!model.getOutId().equals(odqm.getOutId())) {
					continue;
				}
			}
			//卫条件3 查图书id
			//判断查询条件是否有效
			if(odqm.getBookId()!=null &&!"".equals(odqm.getBookId())) {
				//不相等跳过
				if (!model.getBookId().equals(odqm.getBookId())) {
					continue;
				}
			}
			//卫条件4 查数量 范围查询
			//判断查询条件是否有效
			if (odqm.getSumNum()>0) {
				//小于小的跳过
				if (model.getSumNum() < odqm.getSumNum()) {
					continue;
				}
			}
			//判断查询条件是否有效
			if (odqm.getSumNum2()>0) {
				//大于大的跳过
				if (model.getSumNum() > odqm.getSumNum2()) {
					continue;
				}
			}
			//卫条件4 查金额范围查询
			//判断查询条件是否有效
			if (odqm.getSumMoney()>0) {
				//小于小的跳过
				if (model.getSumMoney() < odqm.getSumMoney()) {
					continue;
				}
			}
			//判断查询条件是否有效
			if (odqm.getSumMoney2()>0) {
				//大于大的跳过
				if (model.getSumMoney() > odqm.getSumMoney2()) {
					continue;
				}
			}
			//能到这了说明该记录符合条件
			resCol.add(model);
		}
		return resCol;
	}
	
}

逻辑层:OutEbi实现类(OutEbo):

package cn.hncu.booksManagementSystem.out.business.ebo;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import cn.hncu.booksManagementSystem.book.business.ebi.BookEbi;
import cn.hncu.booksManagementSystem.book.business.factory.BookEbiFactory;
import cn.hncu.booksManagementSystem.common.enums.XxxIdEnum;
import cn.hncu.booksManagementSystem.out.business.ebi.OutEbi;
import cn.hncu.booksManagementSystem.out.dao.dao.OutDetailDAO;
import cn.hncu.booksManagementSystem.out.dao.dao.OutMainDAO;
import cn.hncu.booksManagementSystem.out.dao.factory.OutDetailDaoFactory;
import cn.hncu.booksManagementSystem.out.dao.factory.OutMainDaoFactory;
import cn.hncu.booksManagementSystem.out.vo.OutDetailModel;
import cn.hncu.booksManagementSystem.out.vo.OutDetailQueryModel;
import cn.hncu.booksManagementSystem.out.vo.OutMainModel;
import cn.hncu.booksManagementSystem.out.vo.OutMainQueryModel;
import cn.hncu.booksManagementSystem.stock.business.ebi.StockEbi;
import cn.hncu.booksManagementSystem.stock.business.factory.StockEbiFactory;
import cn.hncu.booksManagementSystem.stock.dao.dao.StockDAO;
import cn.hncu.booksManagementSystem.stock.dao.factory.StockDaoFactory;
import cn.hncu.booksManagementSystem.stock.vo.StockModel;
import cn.hncu.booksManagementSystem.utils.GeneratorXxxID_Util;

/**
 * CreateTime: 2018年4月26日 下午8:28:25	
 * @author 宋进宇  Email:447441478@qq.com
 * @Description:
 *	Out接口实现类
 */
public class OutEbo implements OutEbi{
	//注入dao
	OutMainDAO outMainDao = OutMainDaoFactory.getOutMainDAO();
	OutDetailDAO outDetailDao = OutDetailDaoFactory.getOutDetailDAO();
	StockDAO stockDao = StockDaoFactory.getStockDAO();
	//注入ebi
	BookEbi bookEbi = BookEbiFactory.getInstanceOfBookEbi();
	StockEbi stockEbi = StockEbiFactory.getStockEbi();
	@Override
	public boolean add(OutMainModel outMain, List<OutDetailModel> details)throws IllegalArgumentException {
		//业务是:如果有一条销售明细中销售的数量大于对应 图书 的库存数量时,这次销售无效。
		//把相同书籍整合为一条
		Map<String, Integer> map = new HashMap<String, Integer>();
		for (OutDetailModel detail : details) {
			Integer sumNum = map.get(detail.getBookId());
			if (sumNum!=null) {
				map.put(detail.getBookId(), sumNum+detail.getSumNum());
			}else {
				map.put(detail.getBookId(),detail.getSumNum());
			}
			//查询是否能卖
			StockModel stock = stockEbi.getByBookId(detail.getBookId());
			if (stock!=null) {
				if (stock.getSumNum()<map.get(detail.getBookId())) {
					throw new IllegalArgumentException(detail.getBookId()+" ,《"+detail.getBookName()+"》,库存不足!");
				}
			}else {
				throw new IllegalArgumentException(detail.getBookId()+" ,《"+detail.getBookName()+"》,库存不足!");
			}
		}
		
		//outMain补(id,outDate)
		outMain.setId(GeneratorXxxID_Util.getXxxId(XxxIdEnum.OUT_MAIN));
		outMain.setOutDate(System.currentTimeMillis());
		boolean boo = outMainDao.add(outMain);
		if (!boo) {
			return false;
		}
		//details补(out,outId,sumMoney)
		for (OutDetailModel detail : details) {
			detail.setId(GeneratorXxxID_Util.getXxxId(XxxIdEnum.OUT_DETAIL));
			detail.setOutId(outMain.getId());
			double outPrice = bookEbi.getBookModelById(detail.getBookId()).getOutPrice();
			double sumMoney = detail.getSumNum()*outPrice;
			detail.setSumMoney(sumMoney);
			boo = outDetailDao.add(detail);
			if (!boo) {
				return false;
			}
			//能到这里,说明能卖,更新库存
			StockModel stock = stockEbi.getByBookId(detail.getBookId());
			stock.setSumNum(stock.getSumNum()-detail.getSumNum());
			boo=stockDao.updade(stock);
			if (!boo) {
				return false;
			}
		}
		return true;
	}

	@Override
	public Collection<OutMainModel> getOutMainsByCondition(OutMainQueryModel omqm, OutDetailQueryModel odqm) {
		//查询所有符合omqm的的销售单
		Set<OutMainModel> set = new HashSet<OutMainModel>();
		Collection<OutMainModel> col = outMainDao.getOutMainsByCondition(omqm);
		set.addAll(col);
		//查询所有符合odqm的销售单
		Set<OutMainModel> set2 = new HashSet<OutMainModel>();
		Collection<OutDetailModel> col2 = outDetailDao.getOutDetailsByCondition(odqm);
		for (OutDetailModel detail : col2) {
			set2.add(outMainDao.getOutMainById(detail.getOutId()));
		}
		//两个set的交集就是两个查询条件都符合的查询结果
		set.retainAll(set2);
		//下面是为了给集合末尾加个null,以便ui层实现点击JList空白部分能出现弹框
		//因为HashSet不能加null;
		col= new ArrayList<OutMainModel>();
		col.addAll(set);
		col.add(null);
		
		return col;
	}

}

逻辑层:OutMainEbi实现类(OutMainEbo):

package cn.hncu.booksManagementSystem.out.business.ebo;

import java.util.Collection;

import cn.hncu.booksManagementSystem.out.business.ebi.OutMainEbi;
import cn.hncu.booksManagementSystem.out.dao.dao.OutMainDAO;
import cn.hncu.booksManagementSystem.out.dao.factory.OutMainDaoFactory;
import cn.hncu.booksManagementSystem.out.vo.OutMainModel;
import cn.hncu.booksManagementSystem.out.vo.OutMainQueryModel;

/**
 * CreateTime: 2018年4月26日 下午8:55:28	
 * @author 宋进宇  Email:447441478@qq.com
 * @Description:
 *	OutMainEbi实现类
 */
public class OutMainEbo implements OutMainEbi{
	//注入dao
	OutMainDAO dao = OutMainDaoFactory.getOutMainDAO();
	
	@Override
	public OutMainModel[] getAll() {
		Collection<OutMainModel> col = dao.getAll();
		col.add(null);
		return col.toArray(new OutMainModel[0]);
	}

	@Override
	public OutMainModel[] getOutMainsByCondition(OutMainQueryModel omqm) {
		Collection<OutMainModel> col = dao.getOutMainsByCondition(omqm);
		col.add(null);
		return col.toArray(new OutMainModel[0]);
	}

}

逻辑层:OutDetailEbi实现类(OutDetailEbo):

package cn.hncu.booksManagementSystem.out.business.ebo;

import java.util.Collection;

import cn.hncu.booksManagementSystem.book.business.ebi.BookEbi;
import cn.hncu.booksManagementSystem.book.business.factory.BookEbiFactory;
import cn.hncu.booksManagementSystem.out.business.ebi.OutDetailEbi;
import cn.hncu.booksManagementSystem.out.dao.dao.OutDetailDAO;
import cn.hncu.booksManagementSystem.out.dao.factory.OutDetailDaoFactory;
import cn.hncu.booksManagementSystem.out.vo.OutDetailModel;
import cn.hncu.booksManagementSystem.out.vo.OutDetailQueryModel;
/**
 * CreateTime: 2018年4月26日 下午8:55:37	
 * @author 宋进宇  Email:447441478@qq.com
 * @Description:
 *	OutDetailEbi实现类
 */
public class OutDetailEbo implements OutDetailEbi{
	//注入outDetailDao
	OutDetailDAO outDetailDao = OutDetailDaoFactory.getOutDetailDAO();
	
	//注入BookEbi
	BookEbi bookEbi = BookEbiFactory.getInstanceOfBookEbi();
	

	@Override
	public Collection<OutDetailModel> getAll() {
		return outDetailDao.getAll();
	}


	@Override
	public Collection<OutDetailModel> getOutDetailsByCondition(OutDetailQueryModel odqm) {
		return outDetailDao.getOutDetailsByCondition( odqm );
	}


}

表现层:采用VE生产,就不详细列举了。





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值