JavaSE实践项目之图书管理系统(重构版)

目录

前言

一、项目说明

二、项目功能流程结构图

三、项目实现用到的软件以及依赖的jar包和设计模式

3.1 项目依赖的jar包

3.2 项目用到的软件

3.3 项目用到的开发模式以及设计模式

 3.3.1 此项目中在dal层运用到了dao层的impl中的单例对象,代码如下

3.3.2 此项目中在view层运用到了代理对象,代码如下

3.4项目分包

3.5数据库表

四、各功能简介

4.1 登录功能

4.1.1 首页运行界面如下

 4.1.2 登录功能运行界面展示如下

 4.2员工工作日志记录

 4.3设置借阅罚金

4.4借阅归还图书


前言

根据对数据库、JDBC和设计模式的学习,对图书管理系统进行重构。


一、项目说明

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

 

二、项目功能流程结构图

 

三、项目实现用到的软件以及依赖的jar包和设计模式

3.1 项目依赖的jar包

3.2 项目用到的软件

DEA+SQLyog;

3.3 项目用到的开发模式以及设计模式

三层架构+单例模式+代理模式。

 3.3.1 此项目中在dal层运用到了dao层的impl中的单例对象,代码如下

3.3.2 此项目中在view层运用到了代理对象,代码如下

3.4项目分包

3.5数据库表

创建七张表
在这里插入图片描述
book表
在这里插入图片描述
booktype表
在这里插入图片描述
borrowbook表
在这里插入图片描述
manager表
在这里插入图片描述
operator表
在这里插入图片描述
reader表
在这里插入图片描述
readertype表
在这里插入图片描述

四、各功能简介

4.1 登录功能

说明:登录功能展示在用户首页,包含管理员登录和操作员登录以及他们各自的忘记密码功能。

4.1.1 首页运行界面如下

 4.1.2 登录功能运行界面展示如下

 4.2员工工作日志记录

效果如下:

代码为:

public void readWorkLogs() {
        Properties pro = new Properties();
        try {
            BufferedReader bw = new BufferedReader(new FileReader("src\\view\\workLogs.txt"));
            pro.load(bw);

            TreeMap<Object, Object> treeMap = new TreeMap<>();
            treeMap.putAll(pro);
            treeMap.forEach((a,b)-> System.out.println(a.toString()+b.toString()));


            bw.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 4.3设置借阅罚金

public void setBorrowBookFine() {
        int count = 0;
        System.out.println("请输入读者类型名:");
        String readerTypeName = TSUtility.readKeyBoard(20, false);
        List<ReaderType> readerTypes = readerTypeDaoImp.listType(conn);
        for (ReaderType r : readerTypes) {
            if (readerTypeName.equals(r.getTypeName())) {
                count++;
                System.out.println("设置该读者类型逾期一天所需要的罚金为:");
                double dayFine = TSUtility.readDouble();
                if (dayFine>0){
                    readerTypeDaoImp.updateType(conn, new ReaderType(r.getId(), r.getTypeName(), r.getMaxBorrowNum(), r.getLimit(), dayFine));
                }else {
                    System.out.println("罚金不能为负,设置失败!");
                }
            }
        }
        if (count == 0) {
            System.out.println("没有此读者类型,设置失败!");
        }
    }

4.4借阅归还图书

  //借阅图书
    public void borrowBook() throws ParseException {
        int readerCount = 0;
        int bookCount = 0;
        int borrowBookCount = 0;
        List<Reader> readers = readerDaoImp.listReader(conn);
        System.out.println("读者信息有:");
        readers.forEach(System.out::println);
        System.out.println("请输入读者编号:");
        int readerId = TSUtility.readInt();
        for (Reader r : readers) {
            if (readerId == r.getReaderid()) {
                readerCount++;
                List<Book> books = bookDaoImp.listBook(conn);
                System.out.println("图书信息有:");
                books.forEach(System.out::println);
                System.out.println("请输入图书编号ISBN:");
                String bookISBN = TSUtility.readKeyBoard(10, false);
                for (Book b : books) {
                    if (bookISBN.equals(b.getISBN())) {
                        bookCount++;
                        List<BorrowBook> borrowBooks = borrowBookDaoImp.listBRInfo(conn);
                        for (BorrowBook bb : borrowBooks) {
                            if (readerId == bb.getReaderId() && bookISBN.equals(bb.getISBN()) && bb.getReturnDate() == null) {
                                borrowBookCount++;
                            }
                        }
                        if (borrowBookCount == 0) {
                            System.out.println("借阅时间默认为当前日期!");
                            borrowBookDaoImp.borrowBook(conn, new BorrowBook(readerId, bookISBN, new java.sql.Date(System.currentTimeMillis())));
                        } else {
                            System.out.println("同一个人不能借阅同一本书籍,借阅失败!");
                        }
                    }
                }
                if (bookCount == 0) {
                    System.out.println("没有该图书,借阅失败!");
                }
            }
        }
        if (readerCount == 0) {
            System.out.println("没有该读者,借阅失败!");
        }
    }
    
    //归还图书
    public void returnBook() throws ParseException {
        int readerCount = 0;
        int bookCount = 0;
        List<BorrowBook> borrowBooks = borrowBookDaoImp.listBRInfo(conn);
        if (borrowBooks != null) {
            System.out.println("借阅信息有:");
        }
        for (BorrowBook b : borrowBooks) {
            if (b.getReturnDate() == null) {
                System.out.println(b);
            }
        }
        for (BorrowBook bb : borrowBooks) {
            if (bb.getReturnDate() == null) {
                System.out.println("请输入归还的读者编号:");
                int readerId = TSUtility.readstock();
                if (readerId == bb.getReaderId()) {
                    readerCount++;
                    System.out.println("请输入归还的图书编号:");
                    String bookISBN = TSUtility.readKeyBoard(10, false);
                    if (bookISBN.equals(bb.getISBN())) {
                        bookCount++;
                        System.out.println("请输入归还日期:");
                        String returnDate = TSUtility.readKeyBoardMust(10, false);
                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                        Date returnDate1 = sdf.parse(returnDate);
                        java.sql.Date returnDate2 = new java.sql.Date(returnDate1.getTime());
                        List<ReaderType> readerTypes = readerTypeDaoImp.listType(conn);
                        List<Reader> readers = readerDaoImp.listReader(conn);
                        for (Reader r : readers) {
                            if (bb.getReaderId() == r.getReaderid()) {
                                for (ReaderType rt : readerTypes) {
                                    if (r.getType() == rt.getId()) {
                                        if (returnDate2.after(bb.getBorrowDate())) {
                                            borrowBookDaoImp.returnBook(conn, new BorrowBook(bb.getReaderId(), bb.getISBN(), bb.getBorrowDate(), returnDate2, bb.getFine()));
                                            BorrowBook bob = borrowBookDaoImp.selectInfoByIDAndISBN(conn, readerId, bookISBN);
                                            borrowBookDaoImp.Fine(conn, bob, rt.getLimit(), rt.getDayFine());
                                            return;
                                        }
                                        else {
                                            System.out.println("日期错误!!!!");
                                            return;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        if (readerCount == 0) {
            System.out.println("没有该读者的借阅记录!");
            return;
        }
        if (bookCount == 0) {
            System.out.println("没有该读者的借阅此图书的信息!");
        }
    }

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我可以为您提供一些建议来帮助您开发图书管理系统:1.使用Java SE中的类来存储图书信息;2.使用Java SE中的API来实现数据库功能;3.使用Java SE中的Swing类来创建图形用户界面;4.使用Java SE中的JOptionPane类来创建弹出式对话框;5.使用第三方库来实现其他功能,如报表和报告功能。 ### 回答2: 图书管理系统是一个用于管理图书馆或书店中图书信息的软件系统。它可以帮助管理员和读者更有效地管理图书资源,提高借阅书籍的效率。以下是使用Java SE编写一个简单的图书管理系统的步骤: 1. 创建图书类:首先,定义一个图书类,括书名、作者、ISBN、出社等属性,并提供相应的getter和setter方法。 2. 创建用户类:创建一个用户类来表示读者和管理员,其中用户名、密码、角色等属性。 3. 创建图书管理类:创建一个图书管理类来处理图书的借阅、归还、查询等功能。该类应含以下方法: - 添加图书:允许管理员根据图书信息添加新的图书到系统中。 - 删除图书:管理员可以根据书名或ISBN删除不再需要的图书。 - 借阅图书:用户可以根据书名或ISBN借阅图书,并更新图书的借阅状态。 - 归还图书:用户可以根据书名或ISBN归还已借阅的图书,并更新图书的借阅状态。 - 查询图书:用户可以根据书名、作者或ISBN查询符合条件的图书并显示在界面上。 4. 创建用户管理类:创建一个用户管理类来处理用户的注册、登录等功能。该类应含以下方法: - 注册用户:允许新用户向系统注册,用户名、密码、角色等信息。 - 登录验证:验证用户输入的用户名和密码是否正确,并返回对应的用户角色。 5. 创建主类:创建一个主类作为程序入口,提供图书管理系统用户界面和操作菜单。用户可以通过菜单选择所需功能,并提供相应的输入。 6. 实现系统功能:根据需求,在主类中调用图书管理类和用户管理类的方法,实现相应的功能。 7. 运行程序:运行主类,即可启动图书管理系统,并通过用户界面进行图书的管理操作。 以上是一个简单的图书管理系统的编写过程,可以根据实际需求在此基础上增加其他功能,如图书推荐,借阅历史记录等,以满足更多的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值