zoukankan      html  css  js  c++  java
  • Java-单机版的书店管理系统(练习设计模块和思想_系列 六 )

    本系列前面博客的链接:

    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;
        }
    
        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + ((uuid == null) ? 0 : uuid.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;
            InMainModel other = (InMainModel) obj;
            if (uuid == null) {
                if (other.uuid != null)
                    return false;
            } else if (!uuid.equals(other.uuid))
                return false;
            return true;
        }
    
        @Override
        public String toString() {
            return uuid + ", " + inDate
                    + ", " + inUserId;
        }
    
        @Override
        public 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;
        }
    
    
        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + ((uuid == null) ? 0 : uuid.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;
            InDetailModel other = (InDetailModel) obj;
            if (uuid == null) {
                if (other.uuid != null)
                    return false;
            } else if (!uuid.equals(other.uuid))
                return false;
            return true;
        }
        @Override
        public 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";
    
        @Override
        public 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;
        }
    
        @Override
        public 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;
        }
    
        @Override
        public 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;
        }
    
        @Override
        public InDetailModel getSingle(String uuid) {
            List<InDetailModel> list = FileIoUtil.readFormFile(FILE_NAME);
            for(InDetailModel model : list){
                //找到了,就返回
                if(model.getUuid().equals(uuid)){
                    return model;
                }
            }
            return null;
        }
    
        @Override
        public List<InDetailModel> getAll() {
            return FileIoUtil.readFormFile(FILE_NAME);
        }
    
        @Override
        public 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";
        @Override
        public 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;
        }
    
        @Override
        public 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;
        }
    
        @Override
        public 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;
        }
    
        @Override
        public InMainModel getSingle(String uuid) {
            List<InMainModel> list = FileIoUtil.readFormFile(FILE_NAME);
            for(InMainModel model:list){
                if(model.getUuid().equals(uuid)){//存在,则返回
                    return model;
                }
            }
            return null;
        }
    
        @Override
        public List<InMainModel> getAll() {
            return FileIoUtil.readFormFile(FILE_NAME);
        }
    
        @Override
        public 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{
        //注入dao
    
        InMainDao inMainDao = InMainDaoFactory.getInMainDao();
        InDetailDao inDetailDao = InDetailDaoFactory.getInDetailDao();
        UuidDao uuidDao = UuidDaoFactory.getUuidDao();
        BookEbi bookEbi = BookEbiFactory.getBookEbi();
    
        @Override
        public boolean create(InMainModel inMain, List<InDetailModel> inDetails) {
            //////////1存储inMain信息///////////
            //补全inMain中的数据
            //需要:inUuid,inDate,inUserUuid   已组织:inUserUuid
            //还缺(需补):inUuid,inDate
            String 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,sumMoney
                model.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;
        }
    
        @Override
        public 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;
        }
    
        @Override
        public Map<InMainModel, List<InDetailModel>> getByCondition(
                InMainQueryModel imqm, InDetailQueryModel idqm) {
            // TODO Auto-generated method stub
            return 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("u8fdbu8d27u5217u8868");
            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("u8f6cu5230u6dfbu52a0");
            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("u8fdbu8d27u660eu7ec6u5217u8868uff1a");
            add(jLabel2);
            jLabel2.setBounds(480, 80, 110, 30);
        }// </editor-fold>
        //GEN-END:initComponents
    
        protected 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 modify
        private 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("u6dfbu52a0u8fdbu8d27");
            add(jLabel1);
            jLabel1.setBounds(270, 0, 210, 60);
    
            jLabel4.setFont(new java.awt.Font("微软雅黑", 0, 18));
            jLabel4.setText("u56feu4e66u540du79f0:");
            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("  u8fdbu8d27u660eu7ec6u5217u8868uff1a");
            add(jLabel5);
            jLabel5.setBounds(10, 220, 140, 30);
    
            jLabel6.setFont(new java.awt.Font("微软雅黑", 0, 18));
            jLabel6.setText("u8fdbu8d27u4ebauff1a");
            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("u8fdbu8d27u6570u91cfuff1a");
            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("u6dfbu52a0u5230u660eu7ec6");
            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("u64cdu4f5cu8bf4u660euff1a
    1u3001u9009u62e9u56feu4e66u540du79f0uff0cu586bu5199u8fdbu8d27u6570u91cfu3002
    2u3001u518du70b9u51fbu4e0bu65b9u7684u6dfbu52a0u5230u660eu7ec6u6309u94aeuff0c
          u6dfbu52a0u6570u636eu5230u8fdbu8d27u660eu7ec6u5217u8868uff0c
          u5982u679cu8fd8u6709u56feu4e66uff0cu91cdu590du524du9762u7684u64cdu4f5cu3002
    3u3001u6700u540eu70b9u51fbu6dfbu52a0u6309u94aeu3002");
            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("u8fd4u56de");
            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("u6dfbu52a0");
            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:initComponents
    
        private 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 modify
        private 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界面的那个显示问题。
    下一个系列会解决的!

  • 相关阅读:
    inndb 刷脏页
    mysql 创建索引
    mysql 索引异常:
    mysql change buffer
    mysql 事务
    mysql 全局锁和表锁
    mysql 索引优化
    mysql innoDB使用b+树作为索引
    mysql 中redo log bin log
    mysql 隔离级别
  • 原文地址:https://www.cnblogs.com/webmen/p/5739296.html
Copyright © 2011-2022 走看看