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

书店管理系统:

项目练习目标 :

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("数据库关闭失败!");
                }
            }
        }
    }

}

封装的用户数据:

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 + "]";
    }

}

封装的用户查询数据:

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<UserModel> getAll();

    /**
     * 功能:按照一定的查找条件进行查找,
     * <br/>
     * 把满足查找条件的用户数据返回。
     *
     * @param uqm---被封装的查找条件
     * @return---满足查找条件的用户数据集合
     */
    public List<UserModel> getbyCondition(UserQueryModel uqm);

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

}
时间: 2024-10-17 22:10:36

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

Java之------单机版书店管理系统(设计思想和设计模式系列六)销售模块

书店管理系统 书店管理系统可以说是设计模式及设计思想的一个比较经典的例子. 本系列将分为多个部分讲述此输电管理系统. 书店管理系统将分为:用户.图书.进货.销售和库存五个模块,另外还有公共包.工具包和登录包,另外还有一个框架. 对于分层设计,都是表现层可以调用逻辑层,逻辑层调用数据层,数据层调用工具和公共包,方向不可打乱,必须严格按照这种模式. 本篇将做销售模块. 注:本篇需要使用到的框架在本系列二的用户模块: 链接:http://blog.csdn.net/x121850182/article

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

说明: 本博客为补全上篇-Java-单机版的书店管理系统(练习设计模块和思想_系列 四(1) )的,所以如果不懂,请先看上一篇. 本系列都是我一步一步学习来的, 所以,可能比较适合初学设计模块的人来学. 现在补全我目前写的所以代码: 公共类: 用户类型枚举:UserTypeEnum类 package cn.hncu.bookStore.common; /** * 功能:用户类型的枚举!<br/> * 定义在公共模块.<br/> * 变量:<br/> * ADMIN(1,

JavaSE总结程序-------书店管理系统

                                                    书店管理系统 通过一段时间的学习,掌握了一些基本的java编程技术和软件开发能力,现在简单的做了一个小型的软件,虽然不能算真正的软件,但是对于初学者来说是一个很好的例子去巩固学习的知识.   项目的联系的目标: 1.Java应用程序基本分析 2.培养面向对象编程的基本思想 3.Java基本设计模式综合应用 4.掌握分层和接口的基本设计 5.构建合理的Java应用程序包结构 6.综合应用JSE所

C#桌面办公应用-工资管理系统系列七

接前文工资管理系统系列六,本文将介绍C# winform应用程序中的查询模块功能.其中,就包括了综合.模糊查询以及分页查询:值得说明的是,综合查询,其实就是多个条件组合起来的组合查询啦,只不过我换了个不严谨的称呼罢了!组合多个条件并采用模糊查询的方法实现查询功能:而对于分页查询,我想,参与过企业的项目或者是一些实用的项目的博友而言,都不会陌生,就像我一样,我是搞java开发的,公司用的数据库是mysql,所以对于项目中前端页面使用的分页查询我是再熟悉不过了,这个等改天有空我也写篇博文介绍介绍我们

如何使用JAVA设计在线设计管理系统的代码详解

一,关于我们我是专业从事于定做计算机相关毕业设计,拥有专业的写手团队和严格的保密制度.我们的工程师们在软件工程开发与设计的各个领域积累了丰富的经验,保证服务水平.近两年,每个毕业季都帮助至少50位以上的计算机专业同学通过了毕业答辩,也是一件很开心的事情.每每看到他们来找我做毕业设计就像抓住了救命稻草一样,那种充满期待,和无助的感觉,也让我觉得把毕业设计给他们做好,服务好每一位同学是我义不容辞的责任,同学通过后.那种欢喜,我也是感同身受. 联系我们:.扣.扣.号(幺零三贰三七幺贰幺) 对于大多数的

JAVA帮助文档全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版下载

JAVA帮助文档全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版下载JDK(Java Development Kit,Java开发包,Java开发工具)是一个写Java的applet和应用程序的程序开发环境.它由一个处于操作系统层之上的运行环境还有开发者编译,调试和运行用Java语言写的applet和应用程序所需的工具组成. JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品.自从Java推出以来,JDK已经成为使用最广泛

java web开发环境配置系列(二)安装tomcat

在今天,读书有时是件"麻烦"事.它需要你付出时间,付出精力,还要付出一份心境.--仅以<java web开发环境配置系列>来祭奠那逝去的--1.下载tomcat压缩包,进入官网http://tomcat.apache.org/,官网左侧有对应的下载列表,选择适合自己的版本,进入下载页面,这里下载的是64-bit Windows zip 2.下载后,解压到指定的文件目录中,如:D:\Program Files\tomcat 3.配置环境变量(右击"我的电脑"

java一个简单的管理系统

用java实现的简单管理系统 运行出来的状态 实现了新增.删除.借出.归还.排行榜简单的功能! 下面是简单的代码 首先定义一个书籍类,自己打开哦! 1 public class Book implements Comparable{ 2 3 String name; 4 String date; 5 boolean state; 6 int count; 7 8 public Book(String name,boolean state,String date,int count){ 9 10

java开发医疗信息管理系统源代码下载

原文:java开发医疗信息管理系统源代码下载 源代码下载地址:http://www.zuidaima.com/share/1550463450860544.htm