www.2527.com_澳门新葡8455手机版_新京葡娱乐场网址_
做最好的网站

单机版的书摊管理种类,演习设计模块和思虑_类

2019-08-17 16:51 来源:未知

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

Java-单机版的书店管理系统(系列 一 )

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

介绍

今天对系列二的一个添加用户的输入小bug进行了解决,
增加了用户模块的,删除用户,和修改用户模块。

下面的代码是相对于系列二来说进行了修改或者是增加的类.

先看AddPanel类的修改:
在收集参数的时候进行防范就可防止那个bug了。

cn.hncu.bookStore.user.ui;

书店管理系统:

项目练习目标 :
1、Java应用程序基本分析
2、培养面向对象编程的基本思想
3、Java基本设计模式综合应用
4、掌握分层和接口的基本设计
5、构建合理的Java应用程序包结构
6、综合应用JSE所学习的知识
7、在应用中合理使用集合框架
8、在应用中综合使用swing的常用组件
9、基本的表现层的实现机制
10、IO流和文件的基本操作
11、培养良好的Java编程习惯
12、培养调试Java程序的能力,培养改错的能力

项目功能需求 :
1、能进行操作用户的注册,修改基本信息,删除和查询。
2、能对图书的基本信息进行增加、删除、修改和查询操作。
3、能填写进货单,一张进货单带有多条具体的进货信息,进货的书籍必须是图书管理里面已经有的;进货的同时修改库存对应书籍的存货量。
4、能填写销售单,一张销售单带有多条具体的销售信息,销售的书籍必须是图书管理里面已经有的,而且销售的数量不能超过当前库存的数量;销售的同时修改库存对应书籍的存货量。
5、可以查看库存的明细,可以按照条件进行查找具体的图书的库存值。
6、权限方面进行简化,做固定的权限控制。把用户按照模块分成不同操作权限的人员,特设一个admin的用户,可以操作全部的功能。

项目基本设计 :
★ 架构设计
整体框架、模块划分
模块划分:用户、图书、进货、销售和库存5个模块

★ 系统功能结构设计
每个功能模块的具体功能子模块

★ 数据库设计
项目框架实现:分模块、分层、分包、构建应用程序

1、用户管理(User.txt)
图片 1
说明:其中的type为int类型,用来表示操作用户的类型。
1——表示为admin,可以进行全部操作
2——表示为能操作图书模块的人员
3——表示为能操作进货模块的人员
4——表示为能操作销售模块的人员
5——表示为能操作库存模块的人员

2、图书管理(Book.txt)
图片 2

3、进货管理(InMain.txt)
图片 3

4、进货明细管理(InDetail.txt)
图片 4

5、销售管理(OutMain.txt)
图片 5

6、销售明细管理(OutDetail.txt)
图片 6

7、库存管理(Stock.txt)
图片 7

项目分包

第一层:按照模块分
用户模块(user)、
图书(book)、
进货(in)、
销售(out)、
库存(store)

第二层:按照三层模式分
表现层(ui)、逻辑层(business) 和 数据层(dao)
通常还要增加一个值对象层(vo)

第三层:按照层内划分去分
视具体情况而定,如business和dao内还要再采用铁三角的形式建子包,而ui和vo则不需要再划分子包)。

项目分层思想:
图片 8
未完善,请继续关注本系列(二)

下面为部分代码:(util里面的一个公共类)
cn.hncu.bookStore.util
FileIoUtil.java:

package cn.hncu.bookStore.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;

/**
 * 用户的公用数据读取写入类
 * @author 陈浩翔
 *
 * @version 1.0
 */
public class FileIoUtil {

    public FileIoUtil() {
    }

    /**
     * 从数据库中读取所有的数据并返回出来
     * 
     * @param fileName(数据表对应的文件名字)
     * @param ee(传递过来的泛型的类型!)
     * @return 所有表的记录!
     */
    @SuppressWarnings("unchecked")//压警告
    public static List readFormFile(String fileName,E ee){
        List list = new ArrayList();
        final File file = new File(fileName);

        ObjectInputStream in =null;
        if(!file.exists()){
            JOptionPane.showMessageDialog(null, "数据表不存在!");
            return list;
        }
        try {
            in = new ObjectInputStream(new FileInputStream(fileName));
            try {
                list = (List) in.readObject();

            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            if(in!=null){
                try {
                    in.close();
                } catch (IOException e) {
                    throw new RuntimeException("数据库关闭失败");
                }
            }
        }
        return list;
    }


    /**
     * 写入一个list集合进入数据文件fileName
     * 
     * @param list(需要存储的数据集合)
     * @param fileName(写入到哪个文件的文件名字)
     */
    public static void write2file(List list, String fileName){
        ObjectOutputStream out = null;

        try {
            out = new ObjectOutputStream(new FileOutputStream(fileName));
            out.writeObject(list);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            if(out!=null){
                try {
                    out.close();
                } catch (IOException e) {
                    throw new RuntimeException("数据库关闭失败!");
                }
            }
        }
    }

}

封装的用户数据:

cn.hncu.bookStore.user.vo;
UserModel.java

package cn.hncu.bookStore.user.vo;

/**
 * @author 陈浩翔
 * @version 1.0
 * 
 * 

 * 用于保存用户信息的值对象

 * 1、可序列化

 * 2、私有化所有变量成员,补setter-getters方法

 * 3、写equals和hashCode方法----用主键(uuid)唯一标识码

 * 4、toString方法

 * 5,空参构造方法

 */

public class UserModel {
    private String uuid;//用户唯一标识码
    private String name;//用户名
    private int type;//用户类型
    private String pwd;//用户密码
    public UserModel() {
    }

    /**
     * 功能:得到uuid-用户唯一的标识码
     * 
     * @return 返回uuid-用户唯一的标识码
     */
    public String getUuid() {
        return uuid;
    }

    /**
     * 功能:设置uuid-用户唯一的标识码
     * @param uuid-用户唯一的标识码-String型参数
     */
    public void setUuid(String uuid) {
        this.uuid = uuid;
    }

    /**
     * 功能:得到用户的用户名
     * @return---name-用户名
     */
    public String getName() {
        return name;
    }

    /**
     * 功能:设置用户的用户名
     * 
     * @param name--用户设置的用户名,String型参数
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 功能:得到用户的类型:
     *  1——表示为admin,可以进行全部操作
     *  2——表示为能操作图书模块的人员
     *  3——表示为能操作进货模块的人员
     *  4——表示为能操作销售模块的人员
     *  5——表示为能操作库存模块的人员
     * @return 用户的类型
     */
    public int getType() {
        return type;
    }

    /**
     *  功能:设置用户的类型:
     *  1——表示为admin,可以进行全部操作
     *  2——表示为能操作图书模块的人员
     *  3——表示为能操作进货模块的人员
     *  4——表示为能操作销售模块的人员
     *  5——表示为能操作库存模块的人员
     * @param type--用户的类型-int型参数
     */
    public void setType(int type) {
        this.type = type;
    }

    /**
     *功能:得到用户的密码
     * @return String型,用户的密码
     */
    public String getPwd() {
        return pwd;
    }

    /**
     * 功能:设置用户的密码
     * @param pwd--String型参数
     */
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }


    @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;
        UserModel other = (UserModel) 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 "UserModel [uuid="   uuid   ", name="   name   ", type="   type
                  ", pwd="   pwd   "]";
    }

}

封装的用户查询数据:
cn.hncu.bookStore.user.vo;
UserQueryModel.java

package cn.hncu.bookStore.user.vo;

public class UserQueryModel extends UserModel{  
}

虽然这个类什么都没有,就只是继承了UserModel,但还是必须写,这是大家都遵守的java编写规范!

用户Dao(数据层):(接口)
cn.hncu.bookStore.user.dao.dao;
UserDao.java

package cn.hncu.bookStore.user.dao.dao;

import java.util.List;

import cn.hncu.bookStore.user.vo.UserModel;
import cn.hncu.bookStore.user.vo.UserQueryModel;

/**
 * 
 * @author 陈浩翔
 *
 * @version 1.0
 * 用户模块的数据层接口
 */
public interface UserDao {
    /**
     * 功能:创建一个用户
     * 
     * @param userModel---将要创建的用户数据
     * @return---true表示创建成功,false表示创建失败
     */
    public boolean create(UserModel user);

    /**
     * 功能:删除一个用户
     * 
     * @param uuid---用户唯一的标识码,每个用户都不会相同
     * @return---true表示删除成功,false表示删除失败
     */
    public boolean delete(String uuid);

    /**
     * 功能:修改用户数据资料
     * 
     * @param user---需要修改的用户数据参数名
     * @return 返回true-表示修改成功了,返回false-表示修改失败
     */
    public boolean update(UserModel user);

    /**
     * 功能:得到所有的用户数据
     * 
     * @return---一个UserModel集合,也就是用户的数据
     */
    public List getAll();

    /**
     * 功能:按照一定的查找条件进行查找,
     * 

     * 把满足查找条件的用户数据返回。
     * 
     * @param uqm---被封装的查找条件
     * @return---满足查找条件的用户数据集合
     */
    public List getbyCondition(UserQueryModel uqm);

    /**
     * 功能:得到一个确定的用户的数据资料
     * 
     * @param uuid---用户唯一标识码
     * @return ---返回按这个唯一标识码找到的用户数据
     */
    public UserModel getSingle(String uuid);

}

一 ) 书店管理系统: 项目练习目标 : 1、Java应用程序基本分析 2、培养面向对象编程的基本思想 3、Java基...

介绍

小提示:上面一点有一个目录,可以快速定位到自己需要看的类。
今天对前面的代码有了小小的修改,让代码更加完善了一点。
至于用户唯一标识码uuid,会在以后修改成程序内部生成的,
现在的uuid还是由用户自己设置。

今天对这个程序,添加了用户界面的表现层的一部分,增加了公共类 枚举,
下面贴出目前我写的这个程序的全部代码:我会逐渐的写完这个程序的,请大家放心!(需要实现的功能在这个书店管理系统的系列一可以找到,我为这个系列的文章已经分类了,方便大家寻找)
这个系列的博客是不会断的。

现在的代码分层:
图片 9

图片 10

AddPanel类:(添加用户模块)

/*
 * AddPanel.java
 *
 * Created on __DATE__, __TIME__
 */

package cn.hncu.bookStore.user.ui;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

import cn.hncu.bookStore.common.UserTypeEnum;
import cn.hncu.bookStore.user.business.ebi.UserEbi;
import cn.hncu.bookStore.user.business.factory.UserEbiFactory;
import cn.hncu.bookStore.user.vo.UserModel;
import cn.hncu.bookStore.util.FileIoUtil;

/**
 *
 * @author  陈浩翔
 */
public class AddPanel extends javax.swing.JPanel {
    private JFrame mainFrame = null;

    /** Creates new form AddPanel */
    public AddPanel(JFrame mainFrame) {
        this.mainFrame = mainFrame;
        initComponents();
        myInitData();
    }

    private void myInitData() {
        for (UserTypeEnum type : UserTypeEnum.values()) {
            combType.addItem(type.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
    // 
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        tfdName = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        tfdUuid = new javax.swing.JTextField();
        jLabel4 = new javax.swing.JLabel();
        tfdPwd2 = new javax.swing.JPasswordField();
        jLabel5 = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        combType = new javax.swing.JComboBox();
        tfdPwd = new javax.swing.JPasswordField();
        btnAdd = new javax.swing.JButton();
        btnBack = 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("u6dfbu52a0u7528u6237");
        add(jLabel1);
        jLabel1.setBounds(330, 30, 230, 80);

        jLabel2.setFont(new java.awt.Font("微软雅黑", 0, 18));
        jLabel2.setText("u7528u6237u7c7bu578b:");
        add(jLabel2);
        jLabel2.setBounds(90, 310, 90, 30);

        tfdName.setFont(new java.awt.Font("Dialog", 1, 18));
        tfdName.setAutoscrolls(false);
        add(tfdName);
        tfdName.setBounds(470, 160, 120, 30);

        jLabel3.setFont(new java.awt.Font("微软雅黑", 0, 18));
        jLabel3.setText("uuid:");
        add(jLabel3);
        jLabel3.setBounds(120, 160, 50, 30);

        tfdUuid.setFont(new java.awt.Font("Dialog", 1, 12));
        add(tfdUuid);
        tfdUuid.setBounds(190, 160, 110, 30);

        jLabel4.setFont(new java.awt.Font("微软雅黑", 0, 18));
        jLabel4.setText("u59d3u540d:");
        add(jLabel4);
        jLabel4.setBounds(410, 160, 50, 30);

        tfdPwd2.setFont(new java.awt.Font("宋体", 1, 18));
        add(tfdPwd2);
        tfdPwd2.setBounds(470, 240, 170, 30);

        jLabel5.setFont(new java.awt.Font("微软雅黑", 0, 18));
        jLabel5.setText("u5bc6u7801:");
        add(jLabel5);
        jLabel5.setBounds(120, 240, 50, 30);

        jLabel6.setFont(new java.awt.Font("微软雅黑", 0, 18));
        jLabel6.setText("u786eu8ba4u5bc6u7801:");
        add(jLabel6);
        jLabel6.setBounds(380, 240, 90, 30);

        combType.setFont(new java.awt.Font("Dialog", 1, 18));
        combType.setForeground(new java.awt.Color(51, 51, 255));
        combType.setModel(new javax.swing.DefaultComboBoxModel(
                new String[] { "请选择..." }));
        add(combType);
        combType.setBounds(190, 310, 160, 30);

        tfdPwd.setFont(new java.awt.Font("宋体", 1, 18));
        add(tfdPwd);
        tfdPwd.setBounds(190, 240, 160, 30);

        btnAdd.setFont(new java.awt.Font("Dialog", 1, 24));
        btnAdd.setForeground(new java.awt.Color(0, 204, 204));
        btnAdd.setText("u6dfbu52a0");
        btnAdd.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAddActionPerformed(evt);
            }
        });
        add(btnAdd);
        btnAdd.setBounds(190, 430, 120, 60);

        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(520, 430, 120, 60);
    }// 
    //GEN-END:initComponents

    private void back() {
        mainFrame.setContentPane(new ListPanel(mainFrame));
        mainFrame.validate();
    }

    /**
     *监听返回按钮
     * @param 返回按钮的点击监听
     */
    private void btnBackActionPerformed(java.awt.event.ActionEvent evt) {
        back();
    }

    private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {
        //1收集参数
        String uuid = tfdUuid.getText();
        String name = tfdName.getText();
        String pwd = new String(tfdPwd.getPassword());
        String pwd2 = new String(tfdPwd2.getPassword());
        //System.out.println(uuid);

        //System.out.println(uuid "," name "," pwd);
        if (uuid.equals("") || uuid.equals(null)) {
            JOptionPane.showMessageDialog(mainFrame, "用户ID为空,请重新输入!");
            return;
        }

        if (name.equals("") || name.equals(null)) {
            JOptionPane.showMessageDialog(mainFrame, "用户名为空,请重新输入!");
            return;
        }

        if (!pwd.equals(pwd2) || pwd.equals("") || pwd.equals(null)
                || pwd2.equals("") || pwd2.equals(null)) {
            JOptionPane.showMessageDialog(mainFrame, "两次密码输入不一致或密码为空,请重新输入!");
            return;
        }
        int type = 0;

        try {
            type = UserTypeEnum.getTypeByName(combType.getSelectedItem()
                    .toString());
        } catch (Exception e) {
            JOptionPane.showMessageDialog(mainFrame, "请指定用户类型!");
            return;
        }

        //2组织参数
        UserModel user = new UserModel();
        user.setName(name);
        user.setPwd(pwd);
        user.setType(type);
        user.setUuid(uuid);

        //3调用逻辑层
        UserEbi ebi = UserEbiFactory.getUserEbi();

        //4根据调用返回结果导向不同页面
        if (ebi.create(user)) {
            back();
        } else {
            JOptionPane.showMessageDialog(null, "该用户已经存在!");
        }
    }

    //GEN-BEGIN:variables
    // Variables declaration - do not modify
    private javax.swing.JButton btnAdd;
    private javax.swing.JButton btnBack;
    private javax.swing.JComboBox combType;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JTextField tfdName;
    private javax.swing.JPasswordField tfdPwd;
    private javax.swing.JPasswordField tfdPwd2;
    private javax.swing.JTextField tfdUuid;
    // End of variables declaration//GEN-END:variables

}

|
|
|

cn.hncu.bookStore.user.ui;

现在的程序运行后的图片:

|
|
我按照从目录上面到下面的顺序贴出代码:
请注意!这个代码顺序并不是我写代码的顺序!
如果你们要参考我的写,请不要按照我贴的代码的顺序。
应该先写公共类,工具类。
再次:数据层类—>逻辑层类—>表现层类
|
现在程序运行后的部分图片:
图片 11

"
|
图片 12
"
|
|


DeletePanel类:(删除用户模块)

/*
 * DeletePanel.java
 *
 * Created on __DATE__, __TIME__
 */

package cn.hncu.bookStore.user.ui;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

import cn.hncu.bookStore.common.UserTypeEnum;
import cn.hncu.bookStore.user.business.ebi.UserEbi;
import cn.hncu.bookStore.user.business.factory.UserEbiFactory;
import cn.hncu.bookStore.user.vo.UserModel;
import cn.hncu.bookStore.util.FileIoUtil;

/**
 * 
 * @author 陈浩翔
 *
 * @version 1.0
 */
public class DeletePanel extends javax.swing.JPanel {
    private JFrame mainFrame = null;
    private String uuid = null;

    /** Creates new form DeletePanel 
     * @param uuid */
    public DeletePanel(JFrame mainFrame, String uuid) {
        this.mainFrame = mainFrame;
        this.uuid = uuid;
        initComponents();
        myInitData();
    }

    private void myInitData() {
        UserEbi user = UserEbiFactory.getUserEbi();
        UserModel userModel = user.getSingle(uuid);
        tfdName.setText(userModel.getName());
        tfdUuid.setText(userModel.getUuid());
        tfdPwd.setText(userModel.getPwd());
        tfdType.setText(UserTypeEnum.getNameByType(userModel.getType()));

        tfdName.setEditable(false);
        tfdPwd.setEditable(false);
        tfdType.setEditable(false);
        tfdUuid.setEditable(false);

    }

    //GEN-BEGIN:initComponents
    // 
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        tfdName = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        tfdUuid = new javax.swing.JTextField();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        tfdPwd = new javax.swing.JTextField();
        tfdType = new javax.swing.JTextField();
        btnBack = new javax.swing.JButton();
        btnDelete = 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("u5220u9664u7528u6237");
        add(jLabel1);
        jLabel1.setBounds(330, 30, 230, 80);

        jLabel2.setFont(new java.awt.Font("微软雅黑", 0, 18));
        jLabel2.setText("u7528u6237u7c7bu578b:");
        add(jLabel2);
        jLabel2.setBounds(100, 310, 90, 30);

        tfdName.setFont(new java.awt.Font("Dialog", 1, 18));
        tfdName.setAutoscrolls(false);
        add(tfdName);
        tfdName.setBounds(480, 160, 120, 30);

        jLabel3.setFont(new java.awt.Font("微软雅黑", 0, 18));
        jLabel3.setText("uuid:");
        add(jLabel3);
        jLabel3.setBounds(130, 160, 50, 30);

        tfdUuid.setFont(new java.awt.Font("Dialog", 0, 11));
        add(tfdUuid);
        tfdUuid.setBounds(200, 160, 110, 30);

        jLabel4.setFont(new java.awt.Font("微软雅黑", 0, 18));
        jLabel4.setText("u59d3u540d:");
        add(jLabel4);
        jLabel4.setBounds(420, 160, 50, 30);

        jLabel5.setFont(new java.awt.Font("微软雅黑", 0, 18));
        jLabel5.setText("u5bc6u7801:");
        add(jLabel5);
        jLabel5.setBounds(130, 240, 50, 30);

        tfdPwd.setFont(new java.awt.Font("Tahoma", 1, 12));
        add(tfdPwd);
        tfdPwd.setBounds(200, 240, 160, 30);

        tfdType.setFont(new java.awt.Font("Dialog", 1, 12));
        add(tfdType);
        tfdType.setBounds(200, 310, 160, 30);

        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(540, 450, 120, 60);

        btnDelete.setFont(new java.awt.Font("Dialog", 1, 24));
        btnDelete.setForeground(new java.awt.Color(0, 204, 204));
        btnDelete.setText("u5220u9664");
        btnDelete.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnDeleteActionPerformed(evt);
            }
        });
        add(btnDelete);
        btnDelete.setBounds(210, 450, 120, 60);
    }// 
    //GEN-END:initComponents

    private void btnDeleteActionPerformed(java.awt.event.ActionEvent evt) {
        //3调用逻辑层
        if (UserEbiFactory.getUserEbi().delete(uuid)) {
            back();
        } else {
            JOptionPane.showMessageDialog(mainFrame, "该用户已经不存在!");
        }

        //4根据调用返回结果导向不同页面

    }

    private void btnBackActionPerformed(java.awt.event.ActionEvent evt) {
        back();
    }

    private void back() {
        mainFrame.setContentPane(new ListPanel(mainFrame));
        mainFrame.validate();
    }

    //GEN-BEGIN:variables
    // Variables declaration - do not modify
    private javax.swing.JButton btnBack;
    private javax.swing.JButton btnDelete;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JTextField tfdName;
    private javax.swing.JTextField tfdPwd;
    private javax.swing.JTextField tfdType;
    private javax.swing.JTextField tfdUuid;
    // End of variables declaration//GEN-END:variables

}

|
|
|

cn.hncu.bookStore.user.ui;

UserTypeEnum类:

cn.hncu.bookStore.common;
UserTypeEnum类:

package cn.hncu.bookStore.common;

/**
 * 功能:用户类型的枚举!

 * 定义在公共模块。

 * 变量:

 *  ADMIN(1,"超级管理员"),

 *  BOOK(2,"图书管理员"),

 *  IN(3,"进货管理员"),

 *  OUT(4,"销售管理员"),

 *  STOCK(5,"库存管理员");

 * @author chx
 * @version 1.0
 */
public enum UserTypeEnum {
    ADMIN(1,"超级管理员"),
    BOOK(2,"图书管理员"),
    IN(3,"进货管理员"),
    OUT(4,"销售管理员"),
    STOCK(5,"库存管理员");

    private final int type;
    private final String name;

    /**
     * 初始化枚举变量名字
     * @param type---枚举变量对应的整型数字
     * @param name---枚举变量对应的String型名字
     */
    private UserTypeEnum(int type, String name) {
        this.type=type;
        this.name=name;
    }

    /**
     * 得到当前枚举变量的数字
     * @return---type-编号
     */
    public int getType() {
        return type;
    }

    /**
     * 得到当前枚举变量的中文名字
     * @return---name-中文名字
     */
    public String getName() {
        return name;
    }

    /**
     * 根据枚举变量的int数字得到数字对应的枚举变量的中文名字
     * @param type---需要传入的int型参数
     * @return ---如果存在这样的数字对应的枚举变量,就返回这个枚举变量的中文名字。
     *    
---如果不存在这样的数字对应的枚举变量,就抛出一个异常信息。
     */
    public static String getNameByType(int type){
        for(UserTypeEnum userType:UserTypeEnum.values()){
            if(userType.getType()==type){
                return userType.getName();
            }
        }
        throw new IllegalArgumentException("枚举中没有对应的用户类型:" type);
    }

    /**
     * 根据枚举变量的name中文名字得到name对应的枚举变量的int型type
     * @param name---需要传入的String型名字
     * @return ---如果存在这样的名字对应的枚举变量,就返回这个枚举变量对应的type-int
     *   
 ---如果不存在这样的名字对应的枚举变量,就抛出一个异常信息
     */ 
    public static int getTypeByName(String name){
        for(UserTypeEnum userType:UserTypeEnum.values()){
            if(userType.getName().equals(name)){
                return userType.getType();
            }
        }
        throw new IllegalArgumentException("枚举中没有对应的用户类型:" name);
    }
}

UpdatePanel类:(修改用户模块)

/*
 * UpdatePanel.java
 *
 * Created on __DATE__, __TIME__
 */

package cn.hncu.bookStore.user.ui;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

import cn.hncu.bookStore.common.UserTypeEnum;
import cn.hncu.bookStore.user.business.ebi.UserEbi;
import cn.hncu.bookStore.user.business.factory.UserEbiFactory;
import cn.hncu.bookStore.user.vo.UserModel;

/**
 * 
 * @author 陈浩翔
 *
 * @version 1.0
 */
public class UpdatePanel extends javax.swing.JPanel {
    private JFrame mainFrame = null;
    private String uuid = null;

    /**
     * Creates new form UpdatePanel
     * 
     * @param uuid
     * @param mainFrame
     */
    public UpdatePanel(JFrame mainFrame, String uuid) {
        this.mainFrame = mainFrame;
        this.uuid = uuid;
        initComponents();
        myInitData();
    }

    private void myInitData() {
        UserEbi ebi = UserEbiFactory.getUserEbi();
        UserModel user = ebi.getSingle(uuid);
        tfdUuid.setText(user.getUuid());
        tfdUuid.setEditable(false);

        tfdName.setText(user.getName());
        tfdPwd.setText(user.getPwd());
        tfdPwd2.setText(user.getPwd());

        combType.removeAllItems();
        String usert = UserTypeEnum.getNameByType(user.getType());
        combType.addItem(usert);
        for (UserTypeEnum userType : UserTypeEnum.values()) {
            if (!userType.getName().equals(usert)) {
                combType.addItem(userType.getName());
            }
        }

    }

    // GEN-BEGIN:initComponents
    // 
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        tfdName = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        tfdUuid = new javax.swing.JTextField();
        jLabel4 = new javax.swing.JLabel();
        tfdPwd2 = new javax.swing.JPasswordField();
        jLabel5 = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        tfdPwd = new javax.swing.JPasswordField();
        combType = new javax.swing.JComboBox();
        btnBack = new javax.swing.JButton();
        btnUpdate = 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("u4feeu6539u7528u6237");
        add(jLabel1);
        jLabel1.setBounds(320, 30, 230, 80);

        jLabel2.setFont(new java.awt.Font("微软雅黑", 0, 18));
        jLabel2.setText("u7528u6237u7c7bu578b:");
        add(jLabel2);
        jLabel2.setBounds(90, 310, 90, 30);

        tfdName.setFont(new java.awt.Font("Dialog", 1, 18));
        tfdName.setAutoscrolls(false);
        add(tfdName);
        tfdName.setBounds(470, 160, 120, 30);

        jLabel3.setFont(new java.awt.Font("微软雅黑", 0, 18));
        jLabel3.setText("uuid:");
        add(jLabel3);
        jLabel3.setBounds(120, 160, 50, 30);

        tfdUuid.setFont(new java.awt.Font("Dialog", 1, 12));
        add(tfdUuid);
        tfdUuid.setBounds(190, 160, 110, 30);

        jLabel4.setFont(new java.awt.Font("微软雅黑", 0, 18));
        jLabel4.setText("u59d3u540d:");
        add(jLabel4);
        jLabel4.setBounds(410, 160, 50, 30);

        tfdPwd2.setFont(new java.awt.Font("Dialog", 1, 18));
        add(tfdPwd2);
        tfdPwd2.setBounds(470, 240, 170, 30);

        jLabel5.setFont(new java.awt.Font("微软雅黑", 0, 18));
        jLabel5.setText("u5bc6u7801:");
        add(jLabel5);
        jLabel5.setBounds(120, 240, 50, 30);

        jLabel6.setFont(new java.awt.Font("微软雅黑", 0, 18));
        jLabel6.setText("u786eu8ba4u5bc6u7801:");
        add(jLabel6);
        jLabel6.setBounds(380, 240, 90, 30);

        tfdPwd.setFont(new java.awt.Font("宋体", 1, 18));
        add(tfdPwd);
        tfdPwd.setBounds(190, 240, 160, 30);

        combType.setFont(new java.awt.Font("Dialog", 1, 12));
        combType.setForeground(new java.awt.Color(51, 0, 255));
        combType.setModel(new javax.swing.DefaultComboBoxModel(
                new String[] { "" }));
        add(combType);
        combType.setBounds(190, 310, 170, 30);

        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(500, 430, 120, 60);

        btnUpdate.setFont(new java.awt.Font("Dialog", 1, 24));
        btnUpdate.setForeground(new java.awt.Color(0, 204, 204));
        btnUpdate.setText("u4feeu6539");
        btnUpdate.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnUpdateActionPerformed(evt);
            }
        });
        add(btnUpdate);
        btnUpdate.setBounds(170, 430, 120, 60);
    }// 
        // GEN-END:initComponents

    private void btnUpdateActionPerformed(java.awt.event.ActionEvent evt) {
        // 1收集参数
        String uuid = tfdUuid.getText();
        String name = tfdName.getText();
        String pwd = new String(tfdPwd.getPassword());
        String pwd2 = new String(tfdPwd2.getPassword());

        if (uuid.equals("") || uuid.equals(null)) {
            JOptionPane.showMessageDialog(mainFrame, "用户ID为空,请重新输入!");
            return;
        }

        if (name.equals("") || name.equals(null)) {
            JOptionPane.showMessageDialog(mainFrame, "用户名为空,请重新输入!");
            return;
        }

        if (!pwd.equals(pwd2) || pwd.equals("") || pwd.equals(null)
                || pwd2.equals("") || pwd2.equals(null)) {
            JOptionPane.showMessageDialog(mainFrame, "两次密码输入不一致或密码为空,请重新输入!");
            return;
        }
        int type = 0;

        try {
            type = UserTypeEnum.getTypeByName(combType.getSelectedItem()
                    .toString());
        } catch (Exception e) {
            JOptionPane.showMessageDialog(mainFrame, "请指定用户类型!");
            return;
        }

        // 2组织参数
        UserModel user = new UserModel();
        user.setName(name);
        user.setPwd(pwd);
        user.setType(type);
        user.setUuid(uuid);

        // 3调用逻辑层
        UserEbi ebi = UserEbiFactory.getUserEbi();

        // 4根据调用返回结果导向不同页面
        if (ebi.update(user)) {
            back();
        } else {
            JOptionPane.showMessageDialog(null, "该用户已经不存在!");
        }

    }

    private void btnBackActionPerformed(java.awt.event.ActionEvent evt) {
        back();
    }

    private void back() {
        mainFrame.setContentPane(new ListPanel(mainFrame));
        mainFrame.validate();
    }

    // GEN-BEGIN:variables
    // Variables declaration - do not modify
    private javax.swing.JButton btnBack;
    private javax.swing.JButton btnUpdate;
    private javax.swing.JComboBox combType;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JTextField tfdName;
    private javax.swing.JPasswordField tfdPwd;
    private javax.swing.JPasswordField tfdPwd2;
    private javax.swing.JTextField tfdUuid;
    // End of variables declaration//GEN-END:variables

}

|
|
|

cn.hncu.bookStore.user.ui;

UserEbi接口:

|
|
|

cn.hncu.bookStore.user.business.ebi;
UserEbi接口:

package cn.hncu.bookStore.user.business.ebi;

import java.util.List;

import cn.hncu.bookStore.user.vo.UserModel;
import cn.hncu.bookStore.user.vo.UserQueryModel;
/**
 * 逻辑层的接口
 *
 * @author chx
 * @version 1.0
 */
public interface UserEbi {

    /**
     * 功能:创建一个用户
     * 
     * @param userModel---将要创建的用户数据
     * @return---true表示创建成功,false表示创建失败
     */
    public boolean create(UserModel user);

    /**
     * 功能:根据用户的唯一标识码uuid删除一个用户
     * 
     * @param uuid---用户唯一的标识码,每个用户都不会相同
     * @return---true表示删除成功,false表示删除失败
     */
    public boolean delete(String uuid);

    /**
     * 功能:修改用户的数据资料
     * 
     * @param user---需要修改的用户数据参数名
     * @return 返回true-表示修改成功了,返回false-表示修改失败
     */
    public boolean update(UserModel user);

    /**
     * 功能:得到所有的用户数据
     * 
     * @return---一个UserModel集合,也就是用户的数据
     */
    public List getAll();

    /**
     * 功能:按照一定的查找条件进行查找,
     * 

     * 把满足查找条件的用户数据返回。
     * 
     * @param uqm---被封装的查找条件
     * @return---满足查找条件的用户数据集合
     */
    public List getbyCondition(UserQueryModel uqm);

    /**
     * 功能:得到一个确定的用户的数据资料
     * 
     * @param uuid---用户唯一标识码
     * @return ---返回按这个唯一标识码找到的用户数据
     */
    public UserModel getSingle(String uuid);
}

ListPanel类(调用用户功能模块)

/*
 * ListPanel.java
 *
 * Created on __DATE__, __TIME__
 */

package cn.hncu.bookStore.user.ui;

import java.util.List;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

import cn.hncu.bookStore.user.business.ebi.UserEbi;
import cn.hncu.bookStore.user.business.factory.UserEbiFactory;
import cn.hncu.bookStore.user.vo.UserModel;

/**
 * 表现层-用户列表面板
 * 
 * @author 陈浩翔
 * @version 1.0
 */
public class ListPanel extends javax.swing.JPanel {
    private JFrame mainFrame = null;

    /** Creates new form ListPanel */
    public ListPanel(JFrame mainFrame) {
        this.mainFrame = mainFrame;
        initComponents();
        myInitData();
    }

    /**
     * 读取所有用户并添加进列表
     */
    private void myInitData() {
        UserEbi user = UserEbiFactory.getUserEbi();
        List list = user.getAll();
        userLists.setListData(list.toArray());
    }

    //GEN-BEGIN:initComponents
    // 
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        userLists = new javax.swing.JList();
        jLabel1 = new javax.swing.JLabel();
        btnToAdd = new javax.swing.JButton();
        btnToDelete = new javax.swing.JButton();
        btnToUpdate = new javax.swing.JButton();

        setMinimumSize(new java.awt.Dimension(800, 600));
        setLayout(null);

        userLists.setModel(new javax.swing.AbstractListModel() {
            String[] strings = { "" };

            public int getSize() {
                return strings.length;
            }

            public Object getElementAt(int i) {
                return strings[i];
            }
        });
        jScrollPane1.setViewportView(userLists);

        add(jScrollPane1);
        jScrollPane1.setBounds(170, 80, 480, 230);

        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 48));
        jLabel1.setForeground(new java.awt.Color(204, 0, 51));
        jLabel1.setText("User List");
        add(jLabel1);
        jLabel1.setBounds(300, 0, 260, 80);

        btnToAdd.setFont(new java.awt.Font("Dialog", 1, 24));
        btnToAdd.setForeground(new java.awt.Color(0, 102, 102));
        btnToAdd.setText("u6dfbu52a0u7528u6237");
        btnToAdd.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnToAddActionPerformed(evt);
            }
        });
        add(btnToAdd);
        btnToAdd.setBounds(160, 350, 150, 50);

        btnToDelete.setFont(new java.awt.Font("Dialog", 1, 24));
        btnToDelete.setForeground(new java.awt.Color(0, 102, 102));
        btnToDelete.setText("u5220u9664u7528u6237");
        btnToDelete.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnToDeleteActionPerformed(evt);
            }
        });
        add(btnToDelete);
        btnToDelete.setBounds(510, 350, 150, 50);

        btnToUpdate.setFont(new java.awt.Font("Dialog", 1, 24));
        btnToUpdate.setForeground(new java.awt.Color(0, 102, 102));
        btnToUpdate.setText("u4feeu6539u7528u6237");
        btnToUpdate.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnToUpdateActionPerformed(evt);
            }
        });
        add(btnToUpdate);
        btnToUpdate.setBounds(160, 450, 150, 50);
    }// 
    //GEN-END:initComponents

    private void btnToUpdateActionPerformed(java.awt.event.ActionEvent evt) {
        UserModel user = (UserModel) userLists.getSelectedValue();

        if (user == null) {
            JOptionPane.showMessageDialog(mainFrame, "请选择要修改的用户!");
            return;
        }

        String uuid = user.getUuid();

        mainFrame.setContentPane(new UpdatePanel(mainFrame, uuid));
        mainFrame.validate();
    }

    private void btnToDeleteActionPerformed(java.awt.event.ActionEvent evt) {
        UserModel user = (UserModel) userLists.getSelectedValue();

        if (user == null) {
            JOptionPane.showMessageDialog(mainFrame, "请选择要删除的用户!");
            return;
        }

        String uuid = user.getUuid();

        mainFrame.setContentPane(new DeletePanel(mainFrame, uuid));
        mainFrame.validate();
    }

    private void btnToAddActionPerformed(java.awt.event.ActionEvent evt) {
        mainFrame.setContentPane(new AddPanel(mainFrame));
        mainFrame.validate();
    }

    //GEN-BEGIN:variables
    // Variables declaration - do not modify
    private javax.swing.JButton btnToAdd;
    private javax.swing.JButton btnToDelete;
    private javax.swing.JButton btnToUpdate;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JList userLists;
    // End of variables declaration//GEN-END:variables

}

 

 

三 ) 介绍 今天对系列二的一个添加用户的输入小bug进行了解决, 增加了用户模块的,...

UserEbo类:

|
|
|

cn.hncu.bookStore.user.business.ebo;
UserEbo类:

package cn.hncu.bookStore.user.business.ebo;

import java.util.List;

import cn.hncu.bookStore.user.business.ebi.UserEbi;
import cn.hncu.bookStore.user.dao.dao.UserDao;
import cn.hncu.bookStore.user.dao.factory.UserDaoFactory;
import cn.hncu.bookStore.user.vo.UserModel;
import cn.hncu.bookStore.user.vo.UserQueryModel;

public class UserEbo implements UserEbi{
    private UserDao dao = UserDaoFactory.getUserDao();

    @Override
    public boolean create(UserModel user) {
        return dao.create(user);
    }

    @Override
    public boolean delete(String uuid) {
        return dao.delete(uuid);
    }

    @Override
    public boolean update(UserModel user) {
        return dao.update(user);
    }

    @Override
    public List getAll() {
        return dao.getAll();
    }

    @Override
    public List getbyCondition(UserQueryModel uqm) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public UserModel getSingle(String uuid) {
        return dao.getSingle(uuid);
    }
}

UserEbiFactory类:

|
|
|
cn.hncu.bookStore.user.business.factory;
UserEbiFactory类:

package cn.hncu.bookStore.user.business.factory;

import cn.hncu.bookStore.user.business.ebi.UserEbi;
import cn.hncu.bookStore.user.business.ebo.UserEbo;

public class UserEbiFactory {
    public static UserEbi getUserEbi(){
        return new UserEbo();
    }
}

UserDao接口:

|
|
|
cn.hncu.bookStore.user.dao.dao;
UserDao接口:

package cn.hncu.bookStore.user.dao.dao;

import java.util.List;

import cn.hncu.bookStore.user.vo.UserModel;
import cn.hncu.bookStore.user.vo.UserQueryModel;

/**
 * 
 * @author 陈浩翔
 *
 * @version 1.0
 * 用户模块的数据层接口
 */
public interface UserDao {
    /**
     * 功能:创建一个用户
     * 
     * @param userModel---将要创建的用户数据
     * @return---true表示创建成功,false表示创建失败
     */
    public boolean create(UserModel user);

    /**
     * 功能:根据用户的唯一标识码uuid删除一个用户
     * 
     * @param uuid---用户唯一的标识码,每个用户都不会相同
     * @return---true表示删除成功,false表示删除失败
     */
    public boolean delete(String uuid);

    /**
     * 功能:修改用户的数据资料
     * 
     * @param user---需要修改的用户数据参数名
     * @return 返回true-表示修改成功了,返回false-表示修改失败
     */
    public boolean update(UserModel user);

    /**
     * 功能:得到所有的用户数据
     * 
     * @return---一个UserModel集合,也就是用户的数据
     */
    public List getAll();

    /**
     * 功能:按照一定的查找条件进行查找,
     * 

     * 把满足查找条件的用户数据返回。
     * 
     * @param uqm---被封装的查找条件
     * @return---满足查找条件的用户数据集合
     */
    public List getbyCondition(UserQueryModel uqm);

    /**
     * 功能:得到一个确定的用户的数据资料
     * 
     * @param uuid---用户唯一标识码
     * @return ---返回按这个唯一标识码找到的用户数据
     */
    public UserModel getSingle(String uuid);

}

UserDaoFactory类:

|
|
|
cn.hncu.bookStore.user.dao.factory;
UserDaoFactory类:

package cn.hncu.bookStore.user.dao.factory;

import cn.hncu.bookStore.user.dao.dao.UserDao;
import cn.hncu.bookStore.user.dao.impl.UserDaoSerImpl;
/**
 * 工厂方法

 * new 一个dao的实例
 * @author 陈浩翔
 *
 * @version 1.0
 * 
 */
public class UserDaoFactory {
    public static UserDao getUserDao(){
        return new UserDaoSerImpl();
    }
}

UserDaoSerImpl类:

|
|
|
cn.hncu.bookStore.user.dao.impl;
UserDaoSerImpl类:

package cn.hncu.bookStore.user.dao.impl;

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

import cn.hncu.bookStore.user.dao.dao.UserDao;
import cn.hncu.bookStore.user.vo.UserModel;
import cn.hncu.bookStore.user.vo.UserQueryModel;
import cn.hncu.bookStore.util.FileIoUtil;

/**
 * 

 * 对用户数据处理的具体实现类 ----实现了UserDao接口
 * 
 * @author 陈浩翔
 * 
 * @version 1.0
 */
public class UserDaoSerImpl implements UserDao {

    private static final String FILE_NAME = "User.txt";

    @Override
    public boolean create(UserModel user) {
        // 1先把已有的数据反序列化(读)出来
        List list = FileIoUtil.readFormFile(FILE_NAME);
        // 2判断该用户是否已经存在,再决定是否创建
        for (UserModel userModel : list) {
            // 如果2个用户的uuid相等,用户就是相同的
            if (userModel.getUuid().equals(user.getUuid())) {
                return false;// 用户已经存在了,返回false
            }
        }
        // 3如果用户不存在,就创建
        list.add(user);
        FileIoUtil.write2file(list, FILE_NAME);
        return true;// 创建成功,返回true
    }

    @Override
    public boolean delete(String uuid) {

        // 1先把已有的数据反序列化(读)出来
        List list = FileIoUtil.readFormFile(FILE_NAME);

        // 2判断该用户是否已经存在,再决定是否删除

        // for(int i=0;i list = FileIoUtil.readFormFile(FILE_NAME);

        // 2判断该用户是否已经存在,再决定是否创建
        for (int i = 0; i < list.size(); i  ) {
            // uuid是不能改的,通过uuid来找到那个用户数据,再修改就ok了
            if (list.get(i).getUuid().equals(user.getUuid())) {
                // 将找到的用户修改成user
                list.set(i, user);
                FileIoUtil.write2file(list, FILE_NAME);
                // 找到用户,返回true
                return true;
            }
        }
        // 3若该用户不存在,则修改失败
        return false;
    }

    @Override
    public List getAll() {
        return FileIoUtil.readFormFile(FILE_NAME);
    }

    @Override
    public List getbyCondition(UserQueryModel uqm) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public UserModel getSingle(String uuid) {
        // 1先把已有的数据反序列化(读)出来
        List list = FileIoUtil.readFormFile(FILE_NAME);

        // 2判断该用户是否已经存在,存在就返回那个用户
        for (int i = 0; i < list.size(); i  ) {
            if (list.get(i).getUuid().equals(uuid)) {
                return list.get(i);
            }
        }

        // 3若该用户不存在,返回null
        return null;
    }

}

AddPanel类:

|
|
|
cn.hncu.bookStore.user.ui;
AddPanel类:

/*
 * AddPanel.java
 *
 * Created on __DATE__, __TIME__
 */

package cn.hncu.bookStore.user.ui;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

import cn.hncu.bookStore.common.UserTypeEnum;
import cn.hncu.bookStore.user.business.ebi.UserEbi;
import cn.hncu.bookStore.user.business.factory.UserEbiFactory;
import cn.hncu.bookStore.user.vo.UserModel;
import cn.hncu.bookStore.util.FileIoUtil;

/**
 *
 * @author  陈浩翔
 */
public class AddPanel extends javax.swing.JPanel {

    private JFrame mainFrame = null;

    /** Creates new form AddPanel */
    public AddPanel(JFrame mainFrame) {
        this.mainFrame = mainFrame;
        initComponents();
        myInitData();
    }

    private void myInitData() {
        for (UserTypeEnum type : UserTypeEnum.values()) {
            combType.addItem(type.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
    // 
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        tfdName = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        tfdUuid = new javax.swing.JTextField();
        jLabel4 = new javax.swing.JLabel();
        tfdPwd2 = new javax.swing.JPasswordField();
        jLabel5 = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        combType = new javax.swing.JComboBox();
        tfdPwd = new javax.swing.JPasswordField();
        btnAdd = new javax.swing.JButton();
        btnBack = 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("u6dfbu52a0u7528u6237");
        add(jLabel1);
        jLabel1.setBounds(270, 30, 230, 80);

        jLabel2.setFont(new java.awt.Font("微软雅黑", 0, 18));
        jLabel2.setText("u7528u6237u7c7bu578b:");
        add(jLabel2);
        jLabel2.setBounds(40, 310, 90, 30);

        tfdName.setFont(new java.awt.Font("Dialog", 1, 18));
        tfdName.setAutoscrolls(false);
        add(tfdName);
        tfdName.setBounds(420, 160, 120, 30);

        jLabel3.setFont(new java.awt.Font("微软雅黑", 0, 18));
        jLabel3.setText("uuid:");
        add(jLabel3);
        jLabel3.setBounds(70, 160, 50, 30);

        tfdUuid.setFont(new java.awt.Font("Dialog", 0, 11));
        add(tfdUuid);
        tfdUuid.setBounds(140, 160, 110, 30);

        jLabel4.setFont(new java.awt.Font("微软雅黑", 0, 18));
        jLabel4.setText("u59d3u540d:");
        add(jLabel4);
        jLabel4.setBounds(360, 160, 50, 30);
        add(tfdPwd2);
        tfdPwd2.setBounds(420, 240, 170, 30);

        jLabel5.setFont(new java.awt.Font("微软雅黑", 0, 18));
        jLabel5.setText("u5bc6u7801:");
        add(jLabel5);
        jLabel5.setBounds(70, 240, 50, 30);

        jLabel6.setFont(new java.awt.Font("微软雅黑", 0, 18));
        jLabel6.setText("u786eu8ba4u5bc6u7801:");
        add(jLabel6);
        jLabel6.setBounds(330, 240, 90, 30);

        combType.setFont(new java.awt.Font("Dialog", 1, 18));
        combType.setForeground(new java.awt.Color(51, 51, 255));
        combType.setModel(new javax.swing.DefaultComboBoxModel(
                new String[] { "请选择..." }));
        add(combType);
        combType.setBounds(140, 310, 160, 30);

        tfdPwd.setFont(new java.awt.Font("宋体", 1, 18));
        add(tfdPwd);
        tfdPwd.setBounds(140, 240, 160, 30);

        btnAdd.setFont(new java.awt.Font("Dialog", 1, 24));
        btnAdd.setForeground(new java.awt.Color(0, 204, 204));
        btnAdd.setText("u6dfbu52a0");
        btnAdd.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAddActionPerformed(evt);
            }
        });
        add(btnAdd);
        btnAdd.setBounds(140, 430, 120, 60);

        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(470, 430, 120, 60);
    }// 
    //GEN-END:initComponents

    private void back() {
        mainFrame.setContentPane(new ListPanel(mainFrame));
        mainFrame.validate();
    }

    /**
     *监听返回按钮
     * @param 返回按钮的点击监听
     */
    private void btnBackActionPerformed(java.awt.event.ActionEvent evt) {
        back();
    }

    private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {
        //1收集参数
        String uuid = tfdUuid.getText();
        String name = tfdName.getText();
        String pwd = new String(tfdPwd.getPassword());
        String pwd2 = new String(tfdPwd2.getPassword());

        if (!pwd.equals(pwd2)) {
            JOptionPane.showMessageDialog(null, "两次密码输入不一致,请重新输入!");
            return;
        }
        int type = 0;

        try {
            type = UserTypeEnum.getTypeByName(combType.getSelectedItem()
                    .toString());
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "请指定用户类型!");
            return;
        }

        //2组织参数
        UserModel user = new UserModel();
        user.setName(name);
        user.setPwd(pwd);
        user.setType(type);
        user.setUuid(uuid);

        //3调用逻辑层
        UserEbi ebi = UserEbiFactory.getUserEbi();

        //4根据调用返回结果导向不同页面
        if (ebi.create(user)) {
            back();
        } else {
            JOptionPane.showMessageDialog(null, "该用户已经存在!");
        }
    }

    //GEN-BEGIN:variables
    // Variables declaration - do not modify
    private javax.swing.JButton btnAdd;
    private javax.swing.JButton btnBack;
    private javax.swing.JComboBox combType;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JTextField tfdName;
    private javax.swing.JPasswordField tfdPwd;
    private javax.swing.JPasswordField tfdPwd2;
    private javax.swing.JTextField tfdUuid;
    // End of variables declaration//GEN-END:variables

}

ListPanel类:

|
|
|
cn.hncu.bookStore.user.ui;
ListPanel类:

/*
 * ListPanel.java
 *
 * Created on __DATE__, __TIME__
 */

package cn.hncu.bookStore.user.ui;

import java.util.List;

import javax.swing.JFrame;

import cn.hncu.bookStore.user.business.ebi.UserEbi;
import cn.hncu.bookStore.user.business.factory.UserEbiFactory;
import cn.hncu.bookStore.user.vo.UserModel;

/**
 * 表现层-用户列表面板
 * 
 * @author 陈浩翔
 * @version 1.0
 */
public class ListPanel extends javax.swing.JPanel {
    private JFrame mainFrame = null;

    /** Creates new form ListPanel */
    public ListPanel(JFrame mainFrame) {
        this.mainFrame = mainFrame;
        initComponents();
        myInitData();
    }

    /**
     * 读取所有用户并添加进列表
     */
    private void myInitData() {
        UserEbi user = UserEbiFactory.getUserEbi();
        List list = user.getAll();
        userLists.setListData(list.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
    // 
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        userLists = new javax.swing.JList();
        jLabel1 = new javax.swing.JLabel();
        btnToAdd = new javax.swing.JButton();

        setMinimumSize(new java.awt.Dimension(800, 600));
        setLayout(null);

        userLists.setModel(new javax.swing.AbstractListModel() {
            String[] strings = { "" };

            public int getSize() {
                return strings.length;
            }

            public Object getElementAt(int i) {
                return strings[i];
            }
        });
        jScrollPane1.setViewportView(userLists);

        add(jScrollPane1);
        jScrollPane1.setBounds(150, 150, 480, 230);

        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 48));
        jLabel1.setForeground(new java.awt.Color(204, 0, 51));
        jLabel1.setText("User List");
        add(jLabel1);
        jLabel1.setBounds(270, 30, 260, 80);

        btnToAdd.setFont(new java.awt.Font("Dialog", 1, 18));
        btnToAdd.setText("u6dfbu52a0u7528u6237");
        btnToAdd.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnToAddActionPerformed(evt);
            }
        });
        add(btnToAdd);
        btnToAdd.setBounds(60, 420, 150, 50);
    }// 
    //GEN-END:initComponents

    private void btnToAddActionPerformed(java.awt.event.ActionEvent evt) {
        mainFrame.setContentPane(new AddPanel(mainFrame));
        mainFrame.validate();
    }

    //GEN-BEGIN:variables
    // Variables declaration - do not modify
    private javax.swing.JButton btnToAdd;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JList userLists;
    // End of variables declaration//GEN-END:variables

}

UserModel类:

|
|
|

cn.hncu.bookStore.user.vo;
UserModel类:
用户值对象模块:

package cn.hncu.bookStore.user.vo;

import java.io.Serializable;

import cn.hncu.bookStore.common.UserTypeEnum;

/**
 * @author 陈浩翔
 * @version 1.0
 * 
 * 

 * 用于保存用户信息的值对象

 * 1、可序列化

 * 2、私有化所有变量成员,补setter-getters方法

 * 3、写equals和hashCode方法----用主键(uuid)唯一标识码

 * 4、toString方法

 * 5,空参构造方法

 */

public class UserModel implements Serializable{
    private String uuid;//用户唯一标识码
    private String name;//用户名
    private int type;//用户类型
    private String pwd;//用户密码
    public UserModel() {
    }

    /**
     * 功能:得到uuid-用户唯一的标识码
     * 
     * @return 返回uuid-用户唯一的标识码
     */
    public String getUuid() {
        return uuid;
    }

    /**
     * 功能:设置uuid-用户唯一的标识码
     * @param uuid-用户唯一的标识码-String型参数
     */
    public void setUuid(String uuid) {
        this.uuid = uuid;
    }

    /**
     * 功能:得到用户的用户名
     * @return---name-用户名
     */
    public String getName() {
        return name;
    }

    /**
     * 功能:设置用户的用户名
     * 
     * @param name--用户设置的用户名,String型参数
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 功能:得到用户的类型:
     *  1——表示为admin,可以进行全部操作
     *  2——表示为能操作图书模块的人员
     *  3——表示为能操作进货模块的人员
     *  4——表示为能操作销售模块的人员
     *  5——表示为能操作库存模块的人员
     * @return 用户的类型
     */
    public int getType() {
        return type;
    }

    /**
     *  功能:设置用户的类型:
     *  1——表示为admin,可以进行全部操作
     *  2——表示为能操作图书模块的人员
     *  3——表示为能操作进货模块的人员
     *  4——表示为能操作销售模块的人员
     *  5——表示为能操作库存模块的人员
     * @param type--用户的类型-int型参数
     */
    public void setType(int type) {
        this.type = type;
    }

    /**
     *功能:得到用户的密码
     * @return String型,用户的密码
     */
    public String getPwd() {
        return pwd;
    }

    /**
     * 功能:设置用户的密码
     * @param pwd--String型参数
     */
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }


    @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;
        UserModel other = (UserModel) 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   ","   name   ","   UserTypeEnum.getNameByType(type);
    }

}

UserQueryModel类:

|
|
|

cn.hncu.bookStore.user.vo;
UserQueryModel类:
虽然没有代码,但不能不写!这是查找用户时需要的。
原因我在系列一写了。

package cn.hncu.bookStore.user.vo;
/**
 * 
 * @author 陈浩翔
 *
 * @version 1.0
 */
public class UserQueryModel extends UserModel{

}

FileIoUtil类:

|
|
|

cn.hncu.bookStore.util;
FileIoUtil类:

package cn.hncu.bookStore.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;

/**
 * 用户的公用数据读取写入类
 * @author 陈浩翔
 *
 * @version 1.0
 */
public class FileIoUtil {

    public FileIoUtil() {
    }


    /**
     *  从数据库中读取所有的数据并返回出来
     *  
     * @param fileName:(数据表对应的文件名字)
     * @return 所有表的记录!
     */
    @SuppressWarnings("unchecked")//压警告
    public static List readFormFile(String fileName){
        List list = new ArrayList();
        final File file = new File(fileName);

        ObjectInputStream in =null;
        if(!file.exists()){
            //JOptionPane.showMessageDialog(null, "数据表不存在!");
            return list;
        }
        try {
            in = new ObjectInputStream(new FileInputStream(fileName));
            try {
                list = (List) in.readObject();

            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            if(in!=null){
                try {
                    in.close();
                } catch (IOException e) {
                    throw new RuntimeException("数据库关闭失败");
                }
            }
        }
        return list;
    }


    /**
     * 写入一个list集合进入数据文件fileName
     * 
     * @param list(需要存储的数据集合)
     * @param fileName(写入到哪个文件的文件名字)
     */
    public static void write2file(List list, String fileName){
        ObjectOutputStream out = null;

        try {
            out = new ObjectOutputStream(new FileOutputStream(fileName));
            out.writeObject(list);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            if(out!=null){
                try {
                    out.close();
                } catch (IOException e) {
                    throw new RuntimeException("数据库关闭失败!");
                }
            }
        }
    }

}

BookStore类:(含main方法)

|
|
|
cn.hncu.bookStore;
BookStore类:
用户模块的main方法在这个类中:

/*
 * BookStore.java
 *
 * Created on __DATE__, __TIME__
 */

package cn.hncu.bookStore;

import cn.hncu.bookStore.user.ui.ListPanel;

/**
 *
 * @author  陈浩翔
 */
public class BookStore extends javax.swing.JFrame {

    /** Creates new form BookStore */
    public BookStore() {
        initComponents();
        this.setContentPane(new ListPanel(this));
        this.setResizable(false);//不能缩放
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    /** 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
    // 
    private void initComponents() {

        menuBar = new javax.swing.JMenuBar();
        fileMenu = new javax.swing.JMenu();
        openMenuItem = new javax.swing.JMenuItem();
        saveMenuItem = new javax.swing.JMenuItem();
        saveAsMenuItem = new javax.swing.JMenuItem();
        exitMenuItem = new javax.swing.JMenuItem();
        editMenu = new javax.swing.JMenu();
        cutMenuItem = new javax.swing.JMenuItem();
        copyMenuItem = new javax.swing.JMenuItem();
        pasteMenuItem = new javax.swing.JMenuItem();
        deleteMenuItem = new javax.swing.JMenuItem();
        helpMenu = new javax.swing.JMenu();
        contentsMenuItem = new javax.swing.JMenuItem();
        aboutMenuItem = new javax.swing.JMenuItem();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setMinimumSize(new java.awt.Dimension(800, 600));

        fileMenu.setText("File");

        openMenuItem.setText("Open");
        fileMenu.add(openMenuItem);

        saveMenuItem.setText("Save");
        fileMenu.add(saveMenuItem);

        saveAsMenuItem.setText("Save As ...");
        fileMenu.add(saveAsMenuItem);

        exitMenuItem.setText("Exit");
        exitMenuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                exitMenuItemActionPerformed(evt);
            }
        });
        fileMenu.add(exitMenuItem);

        menuBar.add(fileMenu);

        editMenu.setText("Edit");

        cutMenuItem.setText("Cut");
        editMenu.add(cutMenuItem);

        copyMenuItem.setText("Copy");
        editMenu.add(copyMenuItem);

        pasteMenuItem.setText("Paste");
        editMenu.add(pasteMenuItem);

        deleteMenuItem.setText("Delete");
        editMenu.add(deleteMenuItem);

        menuBar.add(editMenu);

        helpMenu.setText("Help");

        contentsMenuItem.setText("Contents");
        helpMenu.add(contentsMenuItem);

        aboutMenuItem.setText("About");
        helpMenu.add(aboutMenuItem);

        menuBar.add(helpMenu);

        setJMenuBar(menuBar);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(
                getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(layout.createParallelGroup(
                javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 400,
                Short.MAX_VALUE));
        layout.setVerticalGroup(layout.createParallelGroup(
                javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 279,
                Short.MAX_VALUE));

        pack();
    }// 
    //GEN-END:initComponents

    private void exitMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exitMenuItemActionPerformed
        System.exit(0);
    }//GEN-LAST:event_exitMenuItemActionPerformed

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new BookStore().setVisible(true);
            }
        });
    }

    //GEN-BEGIN:variables
    // Variables declaration - do not modify
    private javax.swing.JMenuItem aboutMenuItem;
    private javax.swing.JMenuItem contentsMenuItem;
    private javax.swing.JMenuItem copyMenuItem;
    private javax.swing.JMenuItem cutMenuItem;
    private javax.swing.JMenuItem deleteMenuItem;
    private javax.swing.JMenu editMenu;
    private javax.swing.JMenuItem exitMenuItem;
    private javax.swing.JMenu fileMenu;
    private javax.swing.JMenu helpMenu;
    private javax.swing.JMenuBar menuBar;
    private javax.swing.JMenuItem openMenuItem;
    private javax.swing.JMenuItem pasteMenuItem;
    private javax.swing.JMenuItem saveAsMenuItem;
    private javax.swing.JMenuItem saveMenuItem;
    // End of variables declaration//GEN-END:variables

}

今天就写到这里的,未完待续。。。
目前的添加有一个小bug,就是添加用户时,什么都不输入,
只选择用户类型,也能创建!下次我会修复的。

二 ) 介绍 小提示:上面一点有一个目录,可以快速定位到自己需要看的类。 今天对前...

TAG标签:
版权声明:本文由澳门新葡8455手机版发布于计算机编程,转载请注明出处:单机版的书摊管理种类,演习设计模块和思虑_类