基础项目实战

来源:互联网 发布:网络教育软件 编辑:程序博客网 时间:2024/05/20 03:39

书店管理系统:

项目练习目标 : 
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) 
 
说明:其中的type为int类型,用来表示操作用户的类型。 
1——表示为admin,可以进行全部操作 
2——表示为能操作图书模块的人员 
3——表示为能操作进货模块的人员 
4——表示为能操作销售模块的人员 
5——表示为能操作库存模块的人员

2、图书管理(Book.txt) 

3、进货管理(InMain.txt) 

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

5、销售管理(OutMain.txt) 

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

7、库存管理(Stock.txt) 

项目分包

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

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

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

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

下面为部分代码:(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<E> List<E> readFormFile(String fileName,E ee){        List<E> list = new ArrayList<E>();        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<E>) 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<Object> 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("数据库关闭失败!");                }            }        }    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95

封装的用户数据:

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

package cn.hncu.bookStore.user.vo;/** * @author 陈浩翔 * @version 1.0 *  * <br/> * 用于保存用户信息的值对象<br/> * 1、可序列化<br/> * 2、私有化所有变量成员,补setter-getters方法<br/> * 3、写equals和hashCode方法----用主键(uuid)唯一标识码<br/> * 4、toString方法<br/> * 5,空参构造方法<br/> */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 + "]";    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131

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

package cn.hncu.bookStore.user.vo;public class UserQueryModel extends UserModel{  }
  • 1
  • 2
  • 3
  • 4

虽然这个类什么都没有,就只是继承了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<UserModel> getAll();    /**     * 功能:按照一定的查找条件进行查找,     * <br/>     * 把满足查找条件的用户数据返回。     *      * @param uqm---被封装的查找条件     * @return---满足查找条件的用户数据集合     */    public List<UserModel> getbyCondition(UserQueryModel uqm);    /**     * 功能:得到一个确定的用户的数据资料     *      * @param uuid---用户唯一标识码     * @return ---返回按这个唯一标识码找到的用户数据     */    public UserModel getSingle(String uuid);}
阅读全文
0 0
原创粉丝点击