JAVA实战练习之图书管理系统实现流程

目录
  • 前言
  • 项目说明:
    • 项目功能如下:
  • 项目分析:
    • (—)用户管理模块
    • (二)基本信息维护模块
  • 读者管理模块

前言

长期以来,人们使用传统的人工方式管理图书馆的日常业务,其操作流程比较烦琐。在借书时,读者首先将要借的书和借阅证交给工作人员,然后工作人员将每本书的信息卡片和读者的借阅证放在一个小格栏里,最后在借阅证和每本书贴的借阅条上填写借阅信息。在还书时,读者首先将要还的书交给工作人员,工作人员根据图书信息找到相应的书卡和借阅证,并填好相应的还书信息。太过于繁琐了!所以,我们需求设计一个图书管理系统来方便学生的借书和图书馆管理书籍。

项目说明:

  • 本系统功能分为读者信息管理模块、图书信息管理模块、图书借阅管理模块、基础信息维护模块和用户管理模块。
  • 读者信息管理:能够对读者的基本信息进行管理,包括新增读者,如学校新来一名教师,想要借书,就必须先添加读者信息;读者信息的修改,如学生转到别的专业,此时要修改学生的基本信息;删除读者的信息,比如某个学生中途退学了,可以将其信息删除。查询读者的信息,比如有同学拾到了一张借阅卡,卡上有学生的编号,通过此号来查询学生的联系电话,从而可以找到学生。
  • 图书信息管理:能够对图书的基本信息进行管理,包括新增图书,学校每年会购进新书,此时需要将新书的信息录入系统中;图书信息的修改,如学生借书后将图书丢失,此时需要修改图书的总数量,使总数减1;删除图书,学校在购进新书的同时,每年会对过期的图书进行清理,不再提供借阅,此时就需要将这些图书的信息从系统中删除。查询图书的信息,比如要查看有哪些是Java相关的书籍或者指定ISBN号的图书等。
  • 图书借阅信息管理:能够对图书的借阅信息进行记录,包括读者信息、图书信息、借阅时间等信息。
  • 图书归还信息管理:能够对图书的借阅信息进行记录,包括读者信息、图书信息、归还时间、是否超期、罚金等信息。
  • 系统用户信息管理:能够对系统用户的信息进行管理,包括增加新的系统操作用户,对当前系统用户的密码进行修改,以及删除某一用户。

项目功能如下:

(1)读者信息管理:包括读者信息添加和读者信息查询与修改功能。用户登录成功之后,可以浏览所有读者的信息,也可以检索特定读者的信息;同时,可以对读者信息进行维护,包括增加、删除及修改。具体信息包括读者类型(读者的类型决定着他可以借到书的最大数量和最大归还天数)、读者姓名、出生日期、性别、电话、所在院系、注册日期等。(相关存储数据可通过I/O流直接存在文件,可也直接在文件里读的数据)

(2)图书信息管理:包括图书信息添加和图书信息查询与修改功能。用户登录成功之后,可以浏览所有图书信息和检索特定图书的信息;也可以对图书信息进行维护。包括添加图书、删除图书以及修改图书信息。具体信息包括:图书ISBN、图书名称、作者、出版社、出版日期、印刷次数、单价、图书类别等。(相关存储数据可通过I/O流直接存在文件,可也直接在文件里读的数据)

(3)图书借阅管理:包括图书借阅和图书归还功能。图书借阅功能,先输入读者的编号,然后输入要借阅的图书的信息,记录系统当前时间即借阅时间;图书归还功能,输入读者的编号,选择其名下已借阅的图书,判断当前日期即归还日期与借阅日期的差值是否超过了规定的期限,计算罚金,从而进行图书的归还操作。具体信息包括:借阅日期、归还日期、罚金。由于要计算罚金,故需要知道该读者的读者类型,根据类型判断其可借图书天数、可借图书数量等。(相关存储数据可通过I/O流直接存在文件,可也直接在文件里读的数据)

(4)基础信息维护:包括图书类别设置、读者类别设置及罚金设置。图书类别设置,可以对图书的类别进行增加、删除、修改和查询;读者类别设置可以对读者的类别进行增加、删除、修改和查询;罚金设置,可以指定超期一天的罚金标准。(相关存储数据可通过I/O流直接存在文件,可也直接在文件里读的数据)

(5)用户管理:包括修改密码、用户添加和删除。修改密码,是指当前用户修改自己的密码;用户添加和删除,是对新增和去除系统用户时对用户信息的维护。(相关存储数据可通过I/O流直接存在文件,可也直接在文件里读的数据)

项目分析:

让我们一起来看看项目的分析,该项目也是以增、删、改、查为基础,相信大家都不陌生。

与之前的项目一,团队调度有区别的就是:该项目的数据是通过IO流来保存的,这样的优势就是:

我们保存的数据不会因为重启项目时被清除掉,一直都会在文件里存在。对于数据的保存的角度来看,是个较好的选择。

通过需求:

我们可以将这些模块的实现划分为三个类包和一个数据包:(博主写得是):

三个包分别为:界面展示包(里面放的全是展示类);功能实现包(放的各个功能的实现类);

实体类包(放各个需要用到的实体类);数据包(存放各种用到的数据);

(—)用户管理模块

首先,我们进入到图书管理系统,进入的方式就是通过用户的账号和密码的输入匹配。

用户登录:

设计该功能时,我们选择将数据保存在文件中,也就是用IO流来做。

确定了IO流,这时,我们可以选择对应的实现方式,(1)Properties与IO流结合起来,设置值就是根据键获取值。(2)用序列化和反序列化来写。

这里,博主选择了用Properties来写。通过设置键值对,键代表账户,值代表密码。而且在文件中可以直接直观地读取数据。

其次就是用户数据的增删改查。

因为会用到IO流,在实现文件数据读写操作是需要抛出异常的。可以通过快捷键:

Alt+Enter来快速实现。

注意事项:

在存储和修改数据时我们都需要先将之前的数据读取到Properties集合中,然后再将新的数据写入

文件里。这样可以防止每次写数据的时候,不小心将之前想要保留的数据覆盖掉了。

还有一点就是:在用户登录成功,并执行删除用户数据的功能时,我们不能把当前的用户数据删掉。这里只需要加一个判断语句就可以了。

到这里,用户管理模块基本就完成了。

(二)基本信息维护模块

该模块下有,读者类别的设置,图书类别的设置,还有罚金的设置;

读者类别,就是当我们再添加读者时,可以将读者类别当做读者类的一个属性添加进去。

就比如说,我们当前添加的读者类型为学生,那么就在可以单独设置学生的可借阅图书的天数和图书的数量。

同理,图书类别的设置,就可以把图书进行分类。

罚金的设置:可以根据不同类型的读者,设置不同类型的罚金。

部分代码展示(读者类型的设置):

public class ReaderTypeServe {
    static String typeid,typename,limit,maxborrownum;

    //添加读者类型
    public static void addReaderType() throws IOException, ClassNotFoundException {
        boolean flog=true;
        System.out.println(" 🐕🐕🐕 欢迎来到读者类别添加界面 🐕🐕🐕 ");
        //读取文件中的数据,存入集合。
        TSUtility.readReaderType();
        ArrayList<ReaderType> array=TSUtility.readerTypesArray;
        System.out.println();
       /* if (array.size()==0){
                System.out.println("没有检测到读者类型信息...");
        }*/

        while (true){
            try {

                System.out.println("请添加读者唯一的的类型号:(正数)");
                typeid=TSUtility.readKeyBoard(3,false);
                if (Integer.parseInt(typeid)>=0){
                    break;
                }else {
                    System.out.println("格式不对,请检后输入:");
                }

            }catch (NumberFormatException e){
                System.out.println("请输入相应的整数...");
            }

        }

        for (ReaderType reader : array) {
            if (typeid.equals(reader.getTypeid())) {
                System.out.println("该id已被使用,自动返回上一界面!");
                flog=false;
                break;
            }
        }
        if (flog){
            System.out.println("请输入读者类型名称:");
            typename =TSUtility.readKeyBoard(4,false);
            for (ReaderType reader : array) {
                if (typename.equals(reader.getTypename())) {
                    System.out.println("该类型已被使用,自动返回上一界面!");
                    flog=false;
                    break;
                }
            }
        }

        if (flog){
            while (true){
                try {

                    System.out.println("请设置可借阅天数:(正数,且不能超过100天)");
                    limit =TSUtility.readKeyBoard(2,false);
                    if (Integer.parseInt(limit)>=0&&Integer.parseInt(typeid)<=100){
                        break;
                    }else {
                        System.out.println("未按规定格式,请检查后输入...");
                    }

                }catch (NumberFormatException e){
                    System.out.println("请输入相应的整数...");
                }

            }

            while (true){
                try {

                    System.out.println("请设置可借阅数量:(正数,且不能超过30本)");
                    maxborrownum =TSUtility.readKeyBoard(4,false);
                    if (Integer.parseInt(limit)>=0&&Integer.parseInt(typeid)<=30){
                        break;
                    }else {
                        System.out.println("未按规定格式,请检查后输入...");
                    }

                }catch (NumberFormatException e){
                    System.out.println("请输入相应的整数...");
                }

            }

            //创建对象
            ReaderType reader=new ReaderType(typeid,typename,limit,maxborrownum);
            TSUtility.writeReaderType(reader);
            System.out.println("添加成功!");
        }

    }

    //删除读者类型
    public static void deleteReaderType()throws IOException, ClassNotFoundException {
        System.out.println();
        showAllReaderType();
        ArrayList<ReaderType> array=TSUtility.readerTypesArray;
        if (array.size()!=0){
            //读取文件中的数据,存入集合。读者
            TSUtility.readReaderPath();
            ArrayList<Reader> readerArray=TSUtility.readerArray;
            //
            System.out.println("请选择您想要删除读者类型的编号(回车跳过该选项..):");
            String id =TSUtility.readString(10,"false");
            if (!(id.equals("false"))){
                for (int i=0;i<array.size();i++){
                    if (array.get(i).getTypeid().equals(id)){
                        int i1=0;
                        for (Reader reader : readerArray){
                            i1++;
                            if (reader.getReaderType().getTypename().equals(array.get(i).getTypename())){
                                System.out.println("该读者类型已经被使用,不能被删除!");
                                break;
                            }else {
                                if (i1==readerArray.size()){
                                    TSUtility.readerTypesArray.remove(i);
                                    System.out.println("删除成功!");
                                    break;
                                }
                            }
                        }

                    }else {
                        if (i==array.size()){
                            System.out.println("编号不存在,请重新输入...");
                        }
                    }
                }
            }
            //刷新
            flush();
        }

    }

    //修改读者类型
    public static void modifyReaderType()throws IOException, ClassNotFoundException {

        TSUtility.readReaderType();
        ArrayList<ReaderType> array=TSUtility.readerTypesArray;
        if (array.size()!=0){
            System.out.println();
            System.out.println(" 🐱 读者类型修改界面 🐱 ");
            showAllReaderType();
            boolean flog=true;
            while (flog){
                System.out.println("请选择您想要修改读者类型的编号(回车跳过...):");
                String id =TSUtility.readString(5,"false");
                if (!(id.equals("false"))){
                    //读取文件中的数据,存入集合。读者
                    TSUtility.readReaderPath();
                    ArrayList<Reader> readerArray=TSUtility.readerArray;
                    //
                    boolean flogs=true;
                    for (int i=0;i<array.size();i++){
                        if (array.get(i).getTypeid().equals(id)){

                            String typeName = array.get(i).getTypename();
                            for (Reader reader : readerArray) {
                                if (reader.getReaderType().getTypename().equals(typeName)) {
                                    System.out.println("该读者类型已经被使用,不能修改!");
                                    flogs=false;
                                    /*flog=false;*/
                                    break;
                                }
                            }
                            if (flogs){
                                System.out.println(" 🐕 修改读者类型名称("+array.get(i).getTypename()+"):(回车跳过该选项..) ");
                                String name=TSUtility.readString(10,array.get(i).getTypename());
                                TSUtility.readerTypesArray.get(i).setTypename(name);

                                while (true){
                                    System.out.println(" 🐕 修改读者可借阅天数(正数)("+array.get(i).getLimit()+"):(回车跳过该选项..) ");
                                    try {

                                        String limit=TSUtility.readString(5,array.get(i).getLimit());
                                        if (Integer.parseInt(id)>=0){
                                            TSUtility.readerTypesArray.get(i).setLimit(limit);
                                            break;
                                        }else {
                                            System.out.println("格式不对,请检后输入:");
                                        }

                                    }catch (NumberFormatException e){
                                        System.out.println("请输入相应的整数...");
                                    }
                                }

                                while (true){

                                    try {

                                        System.out.println(" 🐕 修改读者可借阅数量("+array.get(i).getMaxborrownum()+"):(回车跳过该选项..) ");

                                        String maxborrownum=TSUtility.readString(5,array.get(i).getMaxborrownum());
                                        if (Integer.parseInt(id)>=0){
                                            TSUtility.readerTypesArray.get(i).setMaxborrownum(maxborrownum);
                                            break;
                                        }else {
                                            System.out.println("格式不对,请检后输入:");
                                        }

                                    }catch (NumberFormatException e){
                                        System.out.println("请输入相应的整数...");
                                    }
                                }

                                //刷新
                                flush();
                                System.out.println("修改成功!");
                                flog=false;
                                break;
                            }else {
                                if (i==array.size()){
                                    System.out.println("该编号不存在,请检查后输入...");
                                }
                            }
                        }
                    }
                }else {
                    flog=false;
                    System.out.println("已取消修改...");
                }

            }
        }else {
            System.out.println("还没有读者类型信息...");
        }
    }

    //查询所有读者类型信息
    public static void showAllReaderType() throws IOException, ClassNotFoundException {
        //展示读者信息
        //读取文件中的数据,存入集合。
        TSUtility.readReaderType();
        ArrayList<ReaderType> array =TSUtility.readerTypesArray;
        if (array.size()!=0){
            System.out.println("编号 "+" 类型名称 "+" 可借阅天数 "+" 可借阅数量 ");
            for (int i = 0; i <array.size() ; i++) {
                System.out.println(array.get(i).getTypeid()+"\t "+array.get(i).getTypename()+"\t\t"+array.get(i).getLimit()+"\t\t"+array.get(i).getMaxborrownum() );
            }
            /*System.out.println("读者类型展示完成!");*/
            System.out.println();
        }else {
            System.out.println("目前还没有读者类型信息");
        }

    }

    //将集合重新序列化到文件,实现相应功能后刷新的功能
    public static void flush() throws IOException {
        //对象序列化
        ObjectOutputStream oos =new ObjectOutputStream(new FileOutputStream(TSUtility.pathRederType));
        //序列化对象的方法 void writeObject(Object obj)
        oos.writeObject(TSUtility.readerTypesArray);
        //释放资源
        oos.close();
    }

}

该模块主要注意的就是: 在某个类型被使用的时候,我们就不能让该类型被修改和删除!(添加一个判断语句,利用循环遍历实现。)

在罚金设置这里:因为我们需要根据不同的类型来设置罚金,所以,在这里我们用Properties通过键值对的形式,可以很好地将罚金设置出来。

读者管理模块

在我们设置该模块时,我们先明确,我们需要通过类的对象来实现这些功能,所以,我们这里首选序列化来写。然后就是该模块的基本功能,增、删、改、查。

注意事项:

在实现序列化和反序列化时,我们序列化的类一定要实现Serializable接口,不然会抛出异常!

在数据存储方面:一旦我们需要添加、修改或者删除数据时,我们都需要刷新数据(也就是说,我们都需要先将数据从文件里读取出来,操作完成后,我们再将数据写入回文件)。

这里,我们可以先建立相应的集合,用于存储反序列化出来的对象,这样,我们就只需要对该集合进行相应的操作,然后序列化该存储对象的集合就可以了。

今天我们就先看到这里,完整的代码,博主会通过链接放在后面,需要的童鞋提取下就可以了~

帮博主点个赞吧~ ~

链接:https://pan.baidu.com/s/1HlRMeSEIuWCy3K7KURnYTQ
提取码:5kvq

到此这篇关于JAVA实战练习之图书管理系统实现流程的文章就介绍到这了,更多相关Java 图书管理系统内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java实战项目 医院预约挂号系统

    目录 一.项目简述 二.项目运行 登录拦截器代码: 医院预约挂号系统后台管理页面代码: 一.项目简述 功能: 用户分为患者,医生,管理员,患者可进行注册选择医生 挂号,选择日期,选择号源,医生可进行接诊,管理员可 对用户,医生信息的维护等等功能. 二.项目运行 环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持) 项目技术: Jdbc+ Servlert + Jsp + css +

  • Java实战之用Swing实现通讯录管理系统

    一.系统介绍  1.系统功能 登录系统 查询信息 新增信息 修改信息 删除信息 2.环境配置 JDK版本:1.8 Mysql:8.0.13 3.数据库 /* Navicat Premium Data Transfer Source Server : MySQL Source Server Type : MySQL Source Server Version : 80013 Source Host : localhost:3306 Source Schema : swing_address Tar

  • Java实战项目 健身管理系统

    主要技术:springmvc. springboot .mybatis.mysql .jQuery.layui.css.jsp shiro权限控制 主要功能截图如下: 用户登录.首页主要功能有:会员信息管理.会员到期续费管理.充值管理.教练课程管理.私教管理.器材管理.小商品售卖管理.信息统计.修改密码等主要功能: 会员管理.续卡.会员卡类型管理: 教练列表展示和添加修改删除教练信息: 会员私教课程管理: 添加私教信息: 健身课程列表展示查询和添加修改: 健身器材列表展示查询和添加修改: 物品遗

  • Java实战之多线程模拟站点售票

    一.实验题目 二.分析 哦吼,这次的实验题目是一道非常经典的多线程买票问题.题目要求我们创建5个线程来模拟卖票,当然这其中就包含多线程存在也就是我们要解决的问题,重复卖票和超额卖票.即多个窗口卖出同一张票以及窗口卖出非正数编号的票. 不过这个问题可以先放一下,我们先来创建基础的线程模型,并在主方法中创建五个线程让他们跑起来: 话不多说,上代码. public class Ticket { public static void main(String[] args) { for(int i = 1

  • JAVA实战项目实现客户选购系统详细流程

    客户选购信息系统功能需求: 1)输入多个客户购买商品信息.包括客户名称,年龄,购买的商品,每种商品的单价和数量. 2)输出多个客户购买商品的信息.包括客户名字,年龄,购买商品,每种商品的单价和数量,总的消费金额. 方法:1)定义一个多个客户信息处理的类 CustomerGoodsAdmin .包括: 属性: Customer [ ]customers 方法: void show () //用户交互界面 void inputCustomerlnfo () / /客户采购信息输入 Void prin

  • Java实战之基于swing的QQ邮件收发功能实现

    一.电子邮件详解 假设自己的电子邮件是me@163.com,对方的邮件是you@163.com 我们编写好文件填写好对方文件,点击发送,这些电子邮件就发出去了 而这些电子邮件被称为MUA:Mail User Agent--邮件用户代理. Email发送出去的时候,不是直接到达对方的电脑,而是先发送到MTA:Mail Transfer Agent--邮件传输代理.如:网易 Email到达MTA后,MTA会把Emain投递到邮件的最终目的MDA:Mail Delivery Agent--邮件投递代理

  • JAVA实战练习之图书管理系统实现流程

    目录 前言 项目说明: 项目功能如下: 项目分析: (-)用户管理模块 (二)基本信息维护模块 读者管理模块 前言 长期以来,人们使用传统的人工方式管理图书馆的日常业务,其操作流程比较烦琐.在借书时,读者首先将要借的书和借阅证交给工作人员,然后工作人员将每本书的信息卡片和读者的借阅证放在一个小格栏里,最后在借阅证和每本书贴的借阅条上填写借阅信息.在还书时,读者首先将要还的书交给工作人员,工作人员根据图书信息找到相应的书卡和借阅证,并填好相应的还书信息.太过于繁琐了!所以,我们需求设计一个图书管理

  • Java 实战项目之仓库管理系统的实现流程

    一.项目简述 功能包括: 仓库管理,出入库管理,仓库人员管理,基本信息管理, 供应商信息,系统管理等等. 二.项目运行 环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持) 项目技术: JSP +Spring + SpringMVC + MyBatis + html+ css + JavaScript + JQuery + Ajax + layui+ maven等等. 客户信息管理

  • Java 实战项目之毕业设计管理系统的实现流程

    一.项目简述 功能包括: 该系统不错分为学生,教师,管理员,教导主任四种角 色,包括学生管理,教师管理,学生选题,教师选题,主 任审核,管理员审核,开题报告,中期检查,论文提交, 文件管理等等非常不错. 二.项目运行 环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持) 项目技术: JSP +Spring + SpringMVC + MyBatis + html+ css + Ja

  • Java 实战项目之教材管理系统的实现流程

    一.项目简述 功能包括: 管理员可以增删改查教材.教材商.入库教材.用户(用 户包括学生和教师)可以对教材商.教材进行.Excel的导入 导出操作.教师以领取入库的教材,可以退还教材.学生只能在对应的教师那里领取教材,并且可以退还教材. 查询自己已经领取的教材.并且对已领教材付款等等. 二.项目运行 环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持) 项目技术: JSP +Spr

  • Java实战网上电子书城的实现流程

    项目描述: spring mvc +jsp实现的简单书城项目,可以在支付宝沙箱内实现支付 运行环境: jdk8+tomcat9+mysql+IntelliJ IDEA 项目技术: spring+spring mvc+mybatis+jsp+maven 后台管理员图书管理代码: @Controller @RequestMapping("/admin/book") @RequiresPermissions("book-manage") public class Admi

  • Java实战之网上书店管理系统的实现

    目录 1.效果展示 2.需求功能 3.系统总体设计及部分代码 3.1登录模块设计 3.2新用户的注册 3.3图书添加模块 3.4图书添加事件 3.5买家信息维护 3.6订单管理模块 4.数据库设计 4.1系统数据库设计 4.2系统E-R图设计 5.JDBC连接数据库 1.效果展示 2.需求功能 用户可以进行注册登陆系统,在用户的界面上,其可以进行查看网上书店里的图书类别和所在类别下的图书,根据自己的需求可在订单项目里添加订单购买自己喜欢的图书: 管理员可以通过自己的账号登录到管理员系统对书店进行

  • JAVA初级项目——实现图书管理系统

    今天博主再给大家分享一个小项目:MiNi图书管理系统.用的是Java语言开发的,代码不多,大概260行左右吧,系统是实现图书的新增图书.删除图书.借阅图书.归还图书.查看图书等简单的功能(后附源代码)! 首先展示一下运行界面效果图:运行代码后,会在控制台显示如下界面: 然后让用户选择,如果用户不小心或者误输入了错误的数,会再次让用户进行输入. 当用户输入2后,可以查看图书,会显示已有的图书:包括图书书名.借阅状态.借阅次数.借阅日期等信息. 当用户输入1后,可以新增图书,再次让用户输入新增的图书

  • Java实战之客户信息管理系统

    一.软件设计结构 对于初学者来说,弄清框架显得尤为重要 首先该软件有以下三种模块组成 二.MVC设计模式 模型层:Customer处理数据 控制层:CustomerList处理业务逻辑 视图层:CustomerView显示数据 以下三点建议结合代码理解 1.Customer为实体对象,用于封装客户信息 2.CustomerList为Customer对象的管理模块,内部用数组管理一组Customer对象,并提供相应的添加.修改.删除和遍历的方法,供CustomerView调用 3.Customer

  • java实现简单的图书管理系统

    本文实例为大家分享了java实现简单的图书管理系统的具体代码,供大家参考,具体内容如下 一.项目分布 Book类: 定义了书的一些属性(书名,作者,价格,分类,状态)并且写了属性的get.set方法 Library类: 写了登录函数(1.普通用户,2.管理员,3.退出系统), Person类:定义的人的属性(姓名,性别,年龄)并且写了属性的get.set方法,定义了一些书. operate接口:操作的接口,操作方法:查询/查阅,删除/借阅,增加/还书,显示书籍列表 Root类:继承了Person

  • Java开发实例之图书管理系统的实现

    目录 一.项目分布 二.代码展示 1.SQL语句 2.Book类 3.User类 4.用户分为两种 4.1NormalUser类 4.2Admin类 5.DBUtil类 6.BookDao类 7.UserDao类 8.operations包 8.1AddOperation类:增加书籍 8.2BorrowOperation类:借阅书籍 8.3DeleteOperation类:删除书籍 8.4DisplayOperation类:查看书籍列表 8.5ExitOperation类:退出系统 8.6Fin

随机推荐