本系列前面博客的链接:

Java-单机版的书店管理系统(练习设计模块和思想_系列 五 )
http://blog.csdn.net/qq_26525215/article/details/51136848

Java-单机版的书店管理系统(练习设计模块和思想_系列 四(2) ):
http://blog.csdn.net/qq_26525215/article/details/51117135

Java-单机版的书店管理系统(练习设计模块和思想_系列 四(1) ):
http://blog.csdn.net/qq_26525215/article/details/51116429

Java-单机版的书店管理系统(练习设计模块和思想_系列 三 ):
http://blog.csdn.net/qq_26525215/article/details/51099202

Java-单机版的书店管理系统(练习设计模块和思想_系列 二 ):
http://blog.csdn.net/qq_26525215/article/details/51089734

Java-单机版的书店管理系统(练习设计模块和思想_系列 一 ):
http://blog.csdn.net/qq_26525215/article/details/51073546

介绍:

现在写到了进货模块了,这应该是本书店系统最难的模块了吧。

本次多写了一个工具类:
把字符串比较的代码抽取出来写了一个类了。因为需要比较的字符串比较多。

还有进货模块的值对模块,分为了4个部分。
1、进货值对象
2、进货查询值对象
3、进货明细值对象
4、进货明细查询值对象。

进货模块表现层的List模块,Add模块。

数据层模块和逻辑层模块。写好了大部分功能。
可以执行添加进货。
list界面有2个list列表,一个是进货列表,一个是进货明细列表。
这2个表示有联系的!选中进货列表的某一行时,需要在另外一个列表中显示这个进货的明细!

后期会对列表一的显示改一下的,时间会改成**年
(取系统时间显示!)
进货人不会再只显示编号。会直接显示名字的!

后面有这次增加的代码模块,
然后,其他模块的源代码可能有部分修改,
其他模块的源代码百度云链接(CSDN上传文件好像有一天的缓冲期,我刚刚上传的,现在还找不到,只能先贴出百度云的文件的源代码链接):
(目前我的所有源代码:)
http://pan.baidu.com/s/1jHOgFqQ

展示图片:

部分的代码模块:

工具类:StringComparison类:

package cn.hncu.bookStore.util;/*** 工具类* 字符串比较* @author 陈浩翔** @version 1.0*/
public class StringComparison {/*** @param str1---需要比较的字符串* @param str2---被比较的字符串* @return--- 返回0 , 2个字符串相同,<br/> *            返回-1,str1和str2不相同,<br/>*            返回1,str1是str2的子串(忽略str1两端空格)<br/>*            返回2,说明str1为null或者str1全部为空格<br/>*/public static int stringComp(String str1,String str2){if(str1==null||!(str1.trim().length()>0)){return 2;}//字符串完全相同if(str1!=null&&str1.trim().length()>0){if(str1.equals(str2)){return 0;}}//模糊匹配(忽略两端空格)if(str1!=null&&str1.trim().length()>0){if(str2.indexOf(str1.trim())!=-1){return 1;}}return -1;}
}

注意一个问题:

要使用对象流读取文件:

这个类必须实现Serializable接口!!!!!

值对象模块:

进货值对象:InMainModel:

package cn.hncu.bookStore.in.vo;import java.io.Serializable;/*** 进货管理值对象封装* @author 陈浩翔** @version 1.0*/
public class InMainModel implements Serializable, Comparable<InMainModel>{//进货单编号private String uuid;//进货时间private long inDate;//进货人员编号private String inUserId;/* 如果某个字段是外键,同时又需要在当前表中相应表现层显示出用户能看得懂的信息,则需要补一个专用于信息显示(给用户看)的字段。*/private String inUserName;public String getInUserName() {return inUserName;}public void setInUserName(String inUserName) {this.inUserName = inUserName;}/*** * @return ---返回进货单编号(String型)*/public String getUuid() {return uuid;}/*** * @param uuid---设置进货单编号(String型)*/public void setUuid(String uuid) {this.uuid = uuid;}/*** * @return---返回进货时间(long型)*/public long getInDate() {return inDate;}/*** * @param inDate---设置进货时间(long型)*/public void setInDate(long inDate) {this.inDate = inDate;}/*** * @return---返回进货人员编号(String型)*/public String getInUserId() {return inUserId;}/*** * @param inUserId---设置进货人员编号(String型)*/public void setInUserId(String inUserId) {this.inUserId = inUserId;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((uuid == null) ? 0 : uuid.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;InMainModel other = (InMainModel) obj;if (uuid == null) {if (other.uuid != null)return false;} else if (!uuid.equals(other.uuid))return false;return true;}@Overridepublic String toString() {return uuid + ", " + inDate+ ", " + inUserId;}@Overridepublic int compareTo(InMainModel o) {return Integer.parseInt(uuid)-Integer.parseInt(o.uuid);}}

进货明细值对象类:InDetailModel

package cn.hncu.bookStore.in.vo;import java.io.Serializable;/*** 进货明细管理的值对象封装* @author 陈浩翔** @version 1.0*/
public class InDetailModel implements Serializable{//进货明细编号private String uuid;//进货单编号private String inId;//图书编号private String bookId;//进货数量private int sumNum;//进货总金额private double sumMoney;//为把书名显示给用户看,给bookUuid添加一个bookName属性private String bookName;public String getBookName() {return bookName;}public void setBookName(String bookName) {this.bookName = bookName;}public String getUuid() {return uuid;}public void setUuid(String uuid) {this.uuid = uuid;}public String getInId() {return inId;}public void setInId(String inId) {this.inId = inId;}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;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((uuid == null) ? 0 : uuid.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;InDetailModel other = (InDetailModel) obj;if (uuid == null) {if (other.uuid != null)return false;} else if (!uuid.equals(other.uuid))return false;return true;}@Overridepublic String toString() {return uuid +", "+bookName + ", " + sumNum+ "本, " + sumMoney + "元";}}

进货查询值对象类:InMainQueryModel

package cn.hncu.bookStore.in.vo;/*** 进货查询值对象封装* @author 陈浩翔** @version 1.0*/
public class InMainQueryModel extends InMainModel {//需要查询的最大时间private long inDate2;/*** * @return---需要查询的最大时间值*/public long getInDate2() {return inDate2;}/*** * @param inDate2---设置需要查询的最大时间*/public void setInDate2(long inDate2) {this.inDate2 = inDate2;}}

进货明细查询值对象类:InDetailQueryModel

package cn.hncu.bookStore.in.vo;/*** 进货明细查询值对象封装* @author 陈浩翔** @version 1.0*/
public class InDetailQueryModel extends InDetailModel {//需要查询的最大进货数量private int sumNum2;//需要查询的最大进货金额private double sumMoney2;/*** * @return---返回需要查询的最大进货数量*/public int getSumNum2() {return sumNum2;}/*** * @param sumNum2---设置需要查询的最大进货数量*/public void setSumNum2(int sumNum2) {this.sumNum2 = sumNum2;}/*** * @return---返回需要查询的最大进货金额*/public double getSumMoney2() {return sumMoney2;}/*** * @param sumMoney2---设置需要查询的最大进货金额*/public void setSumMoney2(double sumMoney2) {this.sumMoney2 = sumMoney2;}}

进货模块的数据层:

进货管理数据层接口:InMainDao

package cn.hncu.bookStore.in.dao.dao;import java.util.List;import cn.hncu.bookStore.in.vo.InMainModel;
import cn.hncu.bookStore.in.vo.InMainQueryModel;/*** 进货管理数据层接口* * @author 陈浩翔* * @version 1.0*/
public interface InMainDao {/*** 创建一个进货数据对象* @param inMain---需要创建的进货数据对象* @return---true 表示创建成功,false 表示创建失败*/public boolean create(InMainModel inMain);/*** 删除一个进货数据对象* @param uuid---进货单的编号-唯一的* @return---true表示删除成功, false表示删除失败*/public boolean delete(String uuid);/*** 修改一个进货数据的对象* @param inMain---需要修改的进货管理对象* @return---true表示修改成功,false表示修改失败*/public boolean update(InMainModel inMain);/*** 根据进货单编号,得到进货对象的其他信息资料* @param uuid---进货单编号* @return---该对象的其他其他信息资料*/public InMainModel getSingle(String uuid);/*** * @return---所有的进货管理对象信息*/public List<InMainModel> getAll();/*** 查找进货管理对象* @param imqm---查找条件!* @return---满足查找条件的所有INMainModel对象*/public List<InMainModel> getbyCondition(InMainQueryModel imqm);
}

进货明细管理数据层接口:InDetailDao

package cn.hncu.bookStore.in.dao.dao;import java.util.List;import cn.hncu.bookStore.in.vo.InDetailModel;
import cn.hncu.bookStore.in.vo.InDetailQueryModel;/*** 进货明细管理数据层接口* @author 陈浩翔** @version 1.0*/
public interface InDetailDao {/*** 创建一个进货明细数据对象* @param inMain---需要创建的进货明细数据对象* @return---true 表示创建成功,false 表示创建失败*/public boolean create(InDetailModel inDetail);/*** 删除一个进货明细数据对象* @param uuid---进货明细单的编号-唯一的* @return---true表示删除成功, false表示删除失败*/public boolean delete(String uuid);/*** 修改一个进货明细数据的对象* @param inMain---需要修改的进货管理明细对象* @return---true表示修改成功,false表示修改失败*/public boolean update(InDetailModel inDetail);/*** 根据进货明细单编号,得到进货明细对象的其他信息资料* @param uuid---进货明细单编号* @return---该对象的其他其他信息资料*/public InDetailModel getSingle(String uuid);/*** * @return---所有的进货明细管理对象信息*/public List<InDetailModel> getAll();/*** 查找进货明细管理对象* @param imqm---查找条件!* @return---满足查找条件的所有InDetailModel对象*/public List<InDetailModel> getbyCondition(InDetailQueryModel idqm);
}

进货明细的实现类:InDetailDaoSerImpl

package cn.hncu.bookStore.in.dao.impl;import java.util.ArrayList;
import java.util.List;import cn.hncu.bookStore.in.dao.dao.InDetailDao;
import cn.hncu.bookStore.in.dao.factory.InDetailDaoFactory;
import cn.hncu.bookStore.in.vo.InDetailModel;
import cn.hncu.bookStore.in.vo.InDetailQueryModel;
import cn.hncu.bookStore.util.FileIoUtil;
import cn.hncu.bookStore.util.StringComparison;/*** 进货明细的实现类* @author 陈浩翔** @version 1.0*/
public class InDetailDaoSerImpl implements InDetailDao{//进货明细数据的存储的文件名private final String FILE_NAME = "InDetail.txt";@Overridepublic boolean create(InDetailModel inDetail) {List<InDetailModel> lists = FileIoUtil.readFormFile(FILE_NAME);for(InDetailModel model: lists){//已经存在这个Uuid,不能添加if(model.getUuid().equals(inDetail.getUuid())){return false;}}lists.add(inDetail);FileIoUtil.write2file(lists, FILE_NAME);return true;}@Overridepublic boolean delete(String uuid) {List<InDetailModel> list = FileIoUtil.readFormFile(FILE_NAME);for(InDetailModel model: list){//存在,就删除if(model.getUuid().equals(uuid)){list.remove(model);FileIoUtil.write2file(list, FILE_NAME);return true;}}return false;}@Overridepublic boolean update(InDetailModel inDetail) {List<InDetailModel> list  = FileIoUtil.readFormFile(FILE_NAME);for(int i=0;i<list.size();i++){//找到了,就修改if(list.get(i).getUuid().equals(inDetail.getUuid())){list.set(i, inDetail);FileIoUtil.write2file(list, FILE_NAME);return true;}}return false;}@Overridepublic InDetailModel getSingle(String uuid) {List<InDetailModel> list = FileIoUtil.readFormFile(FILE_NAME);for(InDetailModel model : list){//找到了,就返回if(model.getUuid().equals(uuid)){return model;}}return null;}@Overridepublic List<InDetailModel> getAll() {return FileIoUtil.readFormFile(FILE_NAME);}@Overridepublic List<InDetailModel> getbyCondition(InDetailQueryModel idqm) {List<InDetailModel> lists = getAll();List<InDetailModel> resulits = new ArrayList<InDetailModel>();for(InDetailModel model:lists){if(StringComparison.stringComp(idqm.getUuid(), model.getUuid())==-1){continue;}if(StringComparison.stringComp(idqm.getInId(), model.getInId())==-1){continue;}if(StringComparison.stringComp(idqm.getBookId(), model.getBookId())==-1){continue;}if(idqm.getSumNum()>0){if(model.getSumNum()<idqm.getSumNum()){continue;}}if(idqm.getSumNum2()>0){if(model.getSumNum()>idqm.getSumNum2()){continue;}}if(idqm.getSumMoney()>0){if(model.getSumMoney()<idqm.getSumMoney()){continue;}}if(idqm.getSumMoney2()>0){if(model.getSumMoney()>idqm.getSumMoney2()){continue;}}resulits.add(model);}return resulits;}}

进货管理的实现类:InMainDaoSerImpl

package cn.hncu.bookStore.in.dao.impl;import java.util.ArrayList;
import java.util.List;import cn.hncu.bookStore.in.dao.dao.InMainDao;
import cn.hncu.bookStore.in.vo.InMainModel;
import cn.hncu.bookStore.in.vo.InMainQueryModel;
import cn.hncu.bookStore.util.FileIoUtil;
import cn.hncu.bookStore.util.StringComparison;/*** 进货管理的实现类* @author 陈浩翔** @version 1.0*/
public class InMainDaoSerImpl implements InMainDao {private final String FILE_NAME = "InMain.txt";@Overridepublic boolean create(InMainModel inMain) {List<InMainModel> list = FileIoUtil.readFormFile(FILE_NAME);for(InMainModel model:list){if(model.getUuid().equals(inMain.getUuid())){//存在,则不能添加return false;}}list.add(inMain);FileIoUtil.write2file(list, FILE_NAME);return true;}@Overridepublic boolean delete(String uuid) {List<InMainModel> list = FileIoUtil.readFormFile(FILE_NAME);for(InMainModel model:list){if(model.getUuid().equals(uuid)){//存在,则删除list.remove(model);FileIoUtil.write2file(list, FILE_NAME);return true;}}return false;}@Overridepublic boolean update(InMainModel inMain) {List<InMainModel> list = FileIoUtil.readFormFile(FILE_NAME);for(int i=0;i<list.size();i++){InMainModel model = list.get(i);if(model.getUuid().equals(inMain.getUuid())){//存在,则修改list.set(i, inMain);FileIoUtil.write2file(list, FILE_NAME);return true;}}return false;}@Overridepublic InMainModel getSingle(String uuid) {List<InMainModel> list = FileIoUtil.readFormFile(FILE_NAME);for(InMainModel model:list){if(model.getUuid().equals(uuid)){//存在,则返回return model;}}return null;}@Overridepublic List<InMainModel> getAll() {return FileIoUtil.readFormFile(FILE_NAME);}@Overridepublic List<InMainModel> getbyCondition(InMainQueryModel imqm) {List<InMainModel> lists = FileIoUtil.readFormFile(FILE_NAME);List<InMainModel> results = new ArrayList<InMainModel>();for(InMainModel model : lists){if(StringComparison.stringComp(imqm.getUuid(), model.getUuid())==-1){continue;}if(StringComparison.stringComp(imqm.getInUserId(), model.getInUserId())==-1){continue;}if(imqm.getInDate()>0){if(model.getInDate()<imqm.getInDate()){continue;}}if(imqm.getInDate2()>0){if(model.getInDate()>imqm.getInDate2()){continue;}}results.add(model);}return results;}}

new 一个进货明细的实现类:InDetailDaoFactory

package cn.hncu.bookStore.in.dao.factory;import cn.hncu.bookStore.in.dao.dao.InDetailDao;
import cn.hncu.bookStore.in.dao.impl.InDetailDaoSerImpl;/*** 工厂方法----new 一个进货明细的实现类* @author 陈浩翔** @version 1.0*/
public class InDetailDaoFactory {public static InDetailDao getInDetailDao(){return new InDetailDaoSerImpl();}
}

new 一个进货实现类:InMainDaoFactory

package cn.hncu.bookStore.in.dao.factory;import cn.hncu.bookStore.in.dao.dao.InMainDao;
import cn.hncu.bookStore.in.dao.impl.InMainDaoSerImpl;/*** 工厂方法---new 一个进货实现类* @author 陈浩翔* @version 1.0*/
public class InMainDaoFactory {public static InMainDao getInMainDao(){return new InMainDaoSerImpl();}
}

进货模块的逻辑层:

逻辑层的接口:InMainEbi

package cn.hncu.bookStore.in.business.ebi;import java.util.List;
import java.util.Map;import cn.hncu.bookStore.in.vo.InDetailModel;
import cn.hncu.bookStore.in.vo.InDetailQueryModel;
import cn.hncu.bookStore.in.vo.InMainModel;
import cn.hncu.bookStore.in.vo.InMainQueryModel;/*** * @author 陈浩翔* @version 1.0*/
public interface InMainEbi {/*** 创建一个进货模块数据-* @param inMain---进货数据* @param inDetails---进货明细数据* @return---返回true表示创建成功,false表示创建失败*/public abstract boolean create(InMainModel inMain,List<InDetailModel> inDetails);/*** * @return---返回所有的进货模块(包括进货明细)的集合*/public abstract Map<InMainModel, List<InDetailModel>> getAll();/*** * @param imqm---进货管理需要查找的条件* @param idqm---进货明细需要查找的条件* @return---满足条件的所有进货数据的Map集合*/public abstract Map<InMainModel, List<InDetailModel>> getByCondition(InMainQueryModel imqm,InDetailQueryModel idqm);}

逻辑层接口的实现类:InMainEbo

package cn.hncu.bookStore.in.business.ebo;import java.util.List;
import java.util.Map;
import java.util.TreeMap;import cn.hncu.bookStore.book.business.ebi.BookEbi;
import cn.hncu.bookStore.book.business.factory.BookEbiFactory;
import cn.hncu.bookStore.common.UuidModelConstance;
import cn.hncu.bookStore.common.uuid.dao.dao.UuidDao;
import cn.hncu.bookStore.common.uuid.dao.factory.UuidDaoFactory;
import cn.hncu.bookStore.in.business.ebi.InMainEbi;
import cn.hncu.bookStore.in.dao.dao.InDetailDao;
import cn.hncu.bookStore.in.dao.dao.InMainDao;
import cn.hncu.bookStore.in.dao.factory.InDetailDaoFactory;
import cn.hncu.bookStore.in.dao.factory.InMainDaoFactory;
import cn.hncu.bookStore.in.vo.InDetailModel;
import cn.hncu.bookStore.in.vo.InDetailQueryModel;
import cn.hncu.bookStore.in.vo.InMainModel;
import cn.hncu.bookStore.in.vo.InMainQueryModel;public class InMainEbo implements InMainEbi{//注入daoInMainDao inMainDao = InMainDaoFactory.getInMainDao();InDetailDao inDetailDao = InDetailDaoFactory.getInDetailDao();UuidDao uuidDao = UuidDaoFactory.getUuidDao();BookEbi bookEbi = BookEbiFactory.getBookEbi();@Overridepublic boolean create(InMainModel inMain, List<InDetailModel> inDetails) {//1存储inMain信息/////补全inMain中的数据//需要:inUuid,inDate,inUserUuid   已组织:inUserUuid//还缺(需补):inUuid,inDateString inUuid = uuidDao.getNextUuid(UuidModelConstance.IN_MAIN);inMain.setUuid(inUuid);inMain.setInDate(System.currentTimeMillis());inMainDao.create(inMain);//2存储inDetail信息///for(InDetailModel model:inDetails){//补全每一个inDetail中的数据//需要:inDetailUuid,inMainUuid,bookUuid,sumNum,sumMoney   已组织:bookUuid,sumNum//还缺(需补):inDetailUuid,inMainUuid,sumMoneymodel.setUuid(uuidDao.getNextUuid(UuidModelConstance.IN_DETAIL));model.setInId(inUuid);double sumMoney = model.getSumNum() * bookEbi.getSingle(model.getBookId()).getInPrice();model.setSumMoney(sumMoney);inDetailDao.create(model);}return true;}@Overridepublic Map<InMainModel, List<InDetailModel>> getAll() {Map<InMainModel,List<InDetailModel>> map = new TreeMap<InMainModel, List<InDetailModel>>();List<InMainModel> inMains = inMainDao.getAll();for(InMainModel inMain: inMains ){//查询条件值对象的创建InDetailQueryModel idqm = new InDetailQueryModel();String inUuid = inMain.getUuid();idqm.setInId(inUuid);List<InDetailModel> details = inDetailDao.getbyCondition(idqm);map.put(inMain, details);}return map;}@Overridepublic Map<InMainModel, List<InDetailModel>> getByCondition(InMainQueryModel imqm, InDetailQueryModel idqm) {// TODO Auto-generated method stubreturn null;}}

具体实现类的工厂方法:InMainEbiFactory

package cn.hncu.bookStore.in.business.factory;import cn.hncu.bookStore.in.business.ebi.InMainEbi;
import cn.hncu.bookStore.in.business.ebo.InMainEbo;/*** 工厂方法* @author 陈浩翔** @version 1.0*/
public class InMainEbiFactory {public static InMainEbi getInMainEbi(){return new InMainEbo();}
}

进货模块的表现层:

List主界面:InListPanel

/** InListPanel.java** Created on __DATE__, __TIME__*/package cn.hncu.bookStore.in.ui;import java.awt.event.ActionEvent;
import java.util.List;
import java.util.Map;import javax.swing.JFrame;
import javax.swing.event.ListSelectionEvent;import cn.hncu.bookStore.in.business.factory.InMainEbiFactory;
import cn.hncu.bookStore.in.vo.InDetailModel;
import cn.hncu.bookStore.in.vo.InMainModel;/*** * @author 陈浩翔** @version 1.0*/
public class InListPanel extends javax.swing.JPanel {private JFrame mainFrame = null;private Map<InMainModel, List<InDetailModel>> map;/** Creates new form InListPanel */public InListPanel(JFrame mainFrame) {this.mainFrame = mainFrame;initComponents();map = InMainEbiFactory.getInMainEbi().getAll();myInitData();}private void myInitData() {jListInMain.setListData(map.keySet().toArray());}/*** This method is called from within the constructor to initialize the form.* WARNING: Do NOT modify this code. The content of this method is always* regenerated by the Form Editor.*///GEN-BEGIN:initComponents// <editor-fold defaultstate="collapsed" desc="Generated Code">private void initComponents() {jLabel1 = new javax.swing.JLabel();btnToAdd = new javax.swing.JButton();jScrollPane1 = new javax.swing.JScrollPane();jListInMain = new javax.swing.JList();jScrollPane2 = new javax.swing.JScrollPane();jListInDetail = new javax.swing.JList();jLabel2 = new javax.swing.JLabel();setMinimumSize(new java.awt.Dimension(800, 600));setLayout(null);jLabel1.setFont(new java.awt.Font("微软雅黑", 1, 48));jLabel1.setForeground(new java.awt.Color(204, 0, 0));jLabel1.setText("\u8fdb\u8d27\u5217\u8868");add(jLabel1);jLabel1.setBounds(260, 0, 230, 80);btnToAdd.setFont(new java.awt.Font("Dialog", 1, 24));btnToAdd.setForeground(new java.awt.Color(0, 204, 204));btnToAdd.setText("\u8f6c\u5230\u6dfb\u52a0");btnToAdd.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {btnToAddActionPerformed(evt);}});add(btnToAdd);btnToAdd.setBounds(100, 460, 160, 70);jListInMain.setFont(new java.awt.Font("宋体", 1, 18));jListInMain.setForeground(new java.awt.Color(102, 102, 0));jListInMain.setModel(new javax.swing.AbstractListModel() {String[] strings = { "" };public int getSize() {return strings.length;}public Object getElementAt(int i) {return strings[i];}});jListInMain.addListSelectionListener(new javax.swing.event.ListSelectionListener() {public void valueChanged(javax.swing.event.ListSelectionEvent evt) {jListInMainValueChanged(evt);}});jScrollPane1.setViewportView(jListInMain);add(jScrollPane1);jScrollPane1.setBounds(50, 110, 320, 300);jListInDetail.setFont(new java.awt.Font("宋体", 1, 18));jListInDetail.setForeground(new java.awt.Color(102, 102, 0));jListInDetail.setModel(new javax.swing.AbstractListModel() {String[] strings = { "" };public int getSize() {return strings.length;}public Object getElementAt(int i) {return strings[i];}});jScrollPane2.setViewportView(jListInDetail);add(jScrollPane2);jScrollPane2.setBounds(400, 110, 370, 300);jLabel2.setFont(new java.awt.Font("Dialog", 1, 14));jLabel2.setForeground(new java.awt.Color(51, 0, 204));jLabel2.setText("\u8fdb\u8d27\u660e\u7ec6\u5217\u8868\uff1a");add(jLabel2);jLabel2.setBounds(480, 80, 110, 30);}// </editor-fold>//GEN-END:initComponentsprotected void jListInMainValueChanged(ListSelectionEvent evt) {InMainModel inMain = (InMainModel) jListInMain.getSelectedValue();List<InDetailModel> details = map.get(inMain);//System.out.println(map);//System.out.println(inMain);jListInDetail.setListData(details.toArray());}protected void btnToAddActionPerformed(ActionEvent evt) {mainFrame.setContentPane(new InAddPanel(mainFrame));mainFrame.validate();}//GEN-BEGIN:variables// Variables declaration - do not modifyprivate javax.swing.JButton btnToAdd;private javax.swing.JLabel jLabel1;private javax.swing.JLabel jLabel2;private javax.swing.JList jListInDetail;private javax.swing.JList jListInMain;private javax.swing.JScrollPane jScrollPane1;private javax.swing.JScrollPane jScrollPane2;// End of variables declaration//GEN-END:variables}

添加进货界面类:InAddPanel

/** InAddPanel.java** Created on __DATE__, __TIME__*/package cn.hncu.bookStore.in.ui;import java.util.ArrayList;
import java.util.List;import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.plaf.ListUI;import cn.hncu.bookStore.book.business.ebi.BookEbi;
import cn.hncu.bookStore.book.business.factory.BookEbiFactory;
import cn.hncu.bookStore.book.vo.BookModel;
import cn.hncu.bookStore.in.business.factory.InMainEbiFactory;
import cn.hncu.bookStore.in.vo.InDetailModel;
import cn.hncu.bookStore.in.vo.InMainModel;
import cn.hncu.bookStore.user.business.factory.UserEbiFactory;
import cn.hncu.bookStore.user.vo.UserModel;/*** * @author 陈浩翔* * @version 1.0*/
public class InAddPanel extends javax.swing.JPanel {private JFrame mainFrame = null;private List<InDetailModel> details = new ArrayList<InDetailModel>();/*** Creates new form InAddPanel* * @param mainFrame*/public InAddPanel(JFrame mainFrame) {this.mainFrame = mainFrame;initComponents();jtxArea.setEditable(false);myInitData();}private void myInitData() {// 1完成combBook组合框中数据的初始化// 访问book模块,把其中的图书获取出来,并把书名填写到combBook组合框中// 我们是UI层,只能访问(对方的)逻辑层List<BookModel> books = BookEbiFactory.getBookEbi().getAll();for (BookModel book : books) {combBook.addItem(book.getUuid() + "," + book.getName());// 若想更精确地控制每本书显示的信息,可以修改Book的toString()方法}// 2完成combUser组合框中数据的初始化/** 模块之间的交接太深(细节太多了,功能可实现,但从开发技术或设计思想来讲不可取) List<UserModel> users =UserEbiFactory.getUserEbi().getAll(); for(UserModel user: users){if(user.getType()==UserTypeEnum.IN.getType()){combUser.addItem(user.getName()); } }*/List<UserModel> users = UserEbiFactory.getUserEbi().getAllIn();for (UserModel user : users) {combUser.addItem(user.getName());}}/*** This method is called from within the constructor to initialize the form.* WARNING: Do NOT modify this code. The content of this method is always* regenerated by the Form Editor.*///GEN-BEGIN:initComponents// <editor-fold defaultstate="collapsed" desc="Generated Code">private void initComponents() {jLabel1 = new javax.swing.JLabel();jLabel4 = new javax.swing.JLabel();tfdInNum = new javax.swing.JTextField();jLabel5 = new javax.swing.JLabel();jLabel6 = new javax.swing.JLabel();combUser = new javax.swing.JComboBox();combBook = new javax.swing.JComboBox();jScrollPane1 = new javax.swing.JScrollPane();jListDetails = new javax.swing.JList();jLabel7 = new javax.swing.JLabel();btnAddDetail = new javax.swing.JButton();jScrollPane2 = new javax.swing.JScrollPane();jtxArea = new javax.swing.JTextArea();btnBack = new javax.swing.JButton();btnMainAdd = new javax.swing.JButton();setMinimumSize(new java.awt.Dimension(800, 600));setLayout(null);jLabel1.setFont(new java.awt.Font("微软雅黑", 1, 48));jLabel1.setForeground(new java.awt.Color(204, 0, 0));jLabel1.setText("\u6dfb\u52a0\u8fdb\u8d27");add(jLabel1);jLabel1.setBounds(270, 0, 210, 60);jLabel4.setFont(new java.awt.Font("微软雅黑", 0, 18));jLabel4.setText("\u56fe\u4e66\u540d\u79f0:");add(jLabel4);jLabel4.setBounds(50, 100, 90, 30);tfdInNum.setFont(new java.awt.Font("Dialog", 1, 18));tfdInNum.setAutoscrolls(false);add(tfdInNum);tfdInNum.setBounds(140, 170, 150, 30);jLabel5.setFont(new java.awt.Font("微软雅黑", 0, 18));jLabel5.setForeground(new java.awt.Color(255, 51, 51));jLabel5.setText("  \u8fdb\u8d27\u660e\u7ec6\u5217\u8868\uff1a");add(jLabel5);jLabel5.setBounds(10, 220, 140, 30);jLabel6.setFont(new java.awt.Font("微软雅黑", 0, 18));jLabel6.setText("\u8fdb\u8d27\u4eba\uff1a");add(jLabel6);jLabel6.setBounds(480, 420, 80, 30);combUser.setFont(new java.awt.Font("Dialog", 1, 14));combUser.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "请选择..." }));add(combUser);combUser.setBounds(550, 420, 150, 30);combBook.setFont(new java.awt.Font("Dialog", 1, 14));combBook.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "请选择..." }));add(combBook);combBook.setBounds(140, 100, 150, 30);jListDetails.setFont(new java.awt.Font("Dialog", 1, 14));jListDetails.setForeground(new java.awt.Color(255, 51, 51));jListDetails.setModel(new javax.swing.AbstractListModel() {String[] strings = { "" };public int getSize() {return strings.length;}public Object getElementAt(int i) {return strings[i];}});jScrollPane1.setViewportView(jListDetails);add(jScrollPane1);jScrollPane1.setBounds(20, 262, 410, 210);jLabel7.setFont(new java.awt.Font("微软雅黑", 0, 18));jLabel7.setText("\u8fdb\u8d27\u6570\u91cf\uff1a");add(jLabel7);jLabel7.setBounds(50, 170, 90, 30);btnAddDetail.setFont(new java.awt.Font("Dialog", 1, 14));btnAddDetail.setForeground(new java.awt.Color(0, 204, 204));btnAddDetail.setText("\u6dfb\u52a0\u5230\u660e\u7ec6");btnAddDetail.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {btnAddDetailActionPerformed(evt);}});add(btnAddDetail);btnAddDetail.setBounds(480, 280, 120, 60);jtxArea.setColumns(20);jtxArea.setFont(new java.awt.Font("Dialog", 1, 14));jtxArea.setForeground(new java.awt.Color(0, 153, 51));jtxArea.setRows(5);jtxArea.setText("\u64cd\u4f5c\u8bf4\u660e\uff1a\n1\u3001\u9009\u62e9\u56fe\u4e66\u540d\u79f0\uff0c\u586b\u5199\u8fdb\u8d27\u6570\u91cf\u3002\n2\u3001\u518d\u70b9\u51fb\u4e0b\u65b9\u7684\u6dfb\u52a0\u5230\u660e\u7ec6\u6309\u94ae\uff0c\n      \u6dfb\u52a0\u6570\u636e\u5230\u8fdb\u8d27\u660e\u7ec6\u5217\u8868\uff0c\n      \u5982\u679c\u8fd8\u6709\u56fe\u4e66\uff0c\u91cd\u590d\u524d\u9762\u7684\u64cd\u4f5c\u3002\n3\u3001\u6700\u540e\u70b9\u51fb\u6dfb\u52a0\u6309\u94ae\u3002");jScrollPane2.setViewportView(jtxArea);add(jScrollPane2);jScrollPane2.setBounds(440, 100, 340, 140);btnBack.setFont(new java.awt.Font("Dialog", 1, 24));btnBack.setForeground(new java.awt.Color(0, 204, 204));btnBack.setText("\u8fd4\u56de");btnBack.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {btnBackActionPerformed(evt);}});add(btnBack);btnBack.setBounds(530, 510, 120, 60);btnMainAdd.setFont(new java.awt.Font("Dialog", 1, 24));btnMainAdd.setForeground(new java.awt.Color(0, 204, 204));btnMainAdd.setText("\u6dfb\u52a0");btnMainAdd.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {btnMainAddActionPerformed(evt);}});add(btnMainAdd);btnMainAdd.setBounds(120, 510, 120, 60);}// </editor-fold>//GEN-END:initComponentsprivate void btnMainAddActionPerformed(java.awt.event.ActionEvent evt) {//1收集参数 String inUserName = combUser.getSelectedItem().toString();if(combUser.getSelectedIndex()==0){JOptionPane.showMessageDialog(mainFrame, "请选择用户类型!");return ;}//System.out.println(inUserName);String inUserUuid = UserEbiFactory.getUserEbi().getUserByName(inUserName).getUuid();//2组织参数InMainModel inMain = new InMainModel();inMain.setInUserId(inUserUuid);inMain.setInUserName(inUserName);//设置:专为外键显示而补的数据//3调用逻辑层//System.out.println(inMain);//System.out.println(details);InMainEbiFactory.getInMainEbi().create(inMain, details);//4返回到结果页面mainFrame.setContentPane( new InListPanel(mainFrame));mainFrame.validate();}private void btnAddDetailActionPerformed(java.awt.event.ActionEvent evt) {//1收集参数String str = combBook.getSelectedItem().toString();//防范未选择图书if (combBook.getSelectedIndex() == 0) {JOptionPane.showMessageDialog(mainFrame, "请选择图书!");return;}String strs[] = str.split(",");String bookUuid = strs[0];String bookName = strs[1];//      System.out.println(bookName);//      System.out.println(bookUuid);int sumNum = 0;try {sumNum = Integer.parseInt(tfdInNum.getText());if (sumNum < 0) {throw new NumberFormatException();}} catch (NumberFormatException e) {JOptionPane.showMessageDialog(mainFrame, "进货数量格式错误!");return;}//2组织InDetailModel detail = new InDetailModel();detail.setBookId(bookUuid);detail.setSumNum(sumNum);//为显示给用户看,补的数据detail.setBookName(bookName);//3添加到List当中---真正的明细数据是details,界面上的只是回显信息details.add(detail);echoDetails();}private void echoDetails() {String echoStrs[] = new String[details.size()];for (int i = 0; i < details.size(); i++) {InDetailModel detail = details.get(i);echoStrs[i] = "《" + detail.getBookName() + "》,"+ detail.getSumNum() + "本";}jListDetails.setListData(echoStrs);}private void btnBackActionPerformed(java.awt.event.ActionEvent evt) {back();}private void back() {mainFrame.setContentPane(new InListPanel(mainFrame));mainFrame.validate();}//GEN-BEGIN:variables// Variables declaration - do not modifyprivate javax.swing.JButton btnAddDetail;private javax.swing.JButton btnBack;private javax.swing.JButton btnMainAdd;private javax.swing.JComboBox combBook;private javax.swing.JComboBox combUser;private javax.swing.JLabel jLabel1;private javax.swing.JLabel jLabel4;private javax.swing.JLabel jLabel5;private javax.swing.JLabel jLabel6;private javax.swing.JLabel jLabel7;private javax.swing.JList jListDetails;private javax.swing.JScrollPane jScrollPane1;private javax.swing.JScrollPane jScrollPane2;private javax.swing.JTextArea jtxArea;private javax.swing.JTextField tfdInNum;// End of variables declaration//GEN-END:variables}

好了,这个模块也算是完成了一半了,接下来的就是进货的查询界面没写了。
还有list界面的那个显示问题。
下一个系列会解决的!

Java-单机版的书店管理系统(练习设计模块和思想_系列 六 )相关推荐

  1. Java-单机版的书店管理系统(练习设计模块和思想_系列汇总)

    介绍: 本软件系列到此,我已经全部写完了. 项目练习目标 : 1.Java应用程序基本分析 2.培养面向对象编程的基本思想 3.Java基本设计模式综合应用 4.掌握分层和接口的基本设计 5.构建合理 ...

  2. Java-单机版的书店管理系统(练习设计模块和思想_系列 四(2) )

    Java-单机版的书店管理系统(练习设计模块和思想_系列 四(1) ): http://blog.csdn.net/qq_26525215/article/details/51116429 Java- ...

  3. 基于java的高校运动会管理系统的设计与实现--毕业论文(可仅作参考)

    基于java的高校运动会管理系统的设计与实现–毕业论文(可仅作参考) 可以仅作参考宝子们 ,这个版本包含代码哦~在资源里面自己找代码包 论文word版本我会上传到资源里面供宝子看 文章目录 基于jav ...

  4. ssm电子书店管理系统的设计与实现毕业设计源码080050

    目  录 摘要 1 绪论 1.1 选题背景 1.2研究意义 1.3论文结构与章节安排 2电子书店管理系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 ...

  5. [附源码]java毕业设计网上书店管理系统

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

  6. java网上书店管理系统_基于JAVA的网上书店管理系统的开发.doc

    基于JAVA的网上书店管理系统的开发 基于 JAVA 的网上书店系统的设计与开发 摘 要 电子商务是一种在互联网上进行商务活动的形式,近年来随着互联网技术的 发展得以迅速普及.如何利用最新互联网编程技 ...

  7. java做一个客房管理系统定制_开题报告基于Java的酒店客房管理系统的设计与实现.doc...

    开题报告基于Java的酒店客房管理系统的设计与实现 毕业设计开题报告 课 题 名 称:基于Java的酒店客房管理系统的 设计与实现 姓 名: 班 级: 指 导 教 师: 所 在 系 部: 专 业 名 ...

  8. java中介系统平台_基于JAVA的房屋中介管理系统的设计与实现.ppt

    基于JAVA的房屋中介管理系统的设计与实现 校友录管理系统 的设计与实现 院系: 华科学院经济与管理系 班级 :电子商务102202H 姓名 :王 爽 学号: 201022120225 指导教师 :王 ...

  9. 基于Java EE平台项目管理系统的设计与实现(论文+PPT+源码)

    分类号_______________ 密级________________ UDC _______________ 学号 毕业设计(论文) 论文题目 基于Java EE平台项目管理系统的设计与实现 T ...

最新文章

  1. 液晶OCM12864,结构体,枚举,指针,规范化和模块化编程
  2. LeetCode 462 Minimum Moves to Equal Array Elements II
  3. Tensorflow学习教程集合
  4. 一道CTF----BUUCTF---练习场---Havefun
  5. 【JS】实时监控页面,input框数值自动求和
  6. 算法总结-1算法入门
  7. 人脸离线识别模块_人脸消费机离线刷脸如何实现?
  8. linux下定时网站文件备份和数据备份以及删除旧备份标准代码
  9. struts2.5通配符使用异常
  10. 常见Linux发行版本(转载)
  11. 创建windows虚拟机详细教程
  12. Spring Security系列教程16--基于持久化令牌方案实现自动登录
  13. 市场已经统一-网博汇智
  14. 【十大思想实验之中的一个】电车难题
  15. SpringMvc学习日记-基础知识
  16. C# this.Invoke()的作用与用法、不阻塞UI界面线程的延时函数
  17. Xcode能编译运行成功,但是模拟器没有任何反应
  18. 贵安新区打造“三链融合”大数据核心区
  19. 别再拿TPS说事了!说实在的,有些场景3000TPS就够用了 | 人物志
  20. 简单免费内网穿透教程,利用树莓派实现低成本建站 无需公网

热门文章

  1. 大数据的十大发展方向
  2. Script file 'D:\Anaconda3\Scripts\pip-script.py' is not present.
  3. 校招面试知识点复习之计算机网络
  4. 简述Android操作系统
  5. 华信mysql_华信Mysql数据库修复工具
  6. 西部数据顺势而为:三“分”赢天下,领航“云”存储
  7. vue+websokect实现实时聊天,可单聊、可群聊(一)
  8. oracle scn超了,Oracle安全 - SCN的可能最大值与耗尽问题
  9. 做网络爬虫需要掌握哪些技术?
  10. win10家庭中文版当前没有可用电源选项解决方案