JavaSE必修项目——图书馆管理系统

前言: 朋友们,经过了一段JavaSE知识的历练,终于来到了这个艰难的图书馆管理系统。对于刚学习的小白来说,是一次不错的项目体验,将理论和实践结合起来,会是一次巨大提升。接下来,就说说这个图书馆管理系统吧!!!

图书馆管理系统

一、项目前提

首先对于项目,我们应该了解该项目所存在的板块(该项目主要是对进行数据保存,用于下一次数据的流通,而不想以往所做的程序只是一次性存储),并对应的板块功能想好,同时明白所需要掌握的知识。
知识点:
 掌握java基本语法
 熟悉使用流程控制
 理解面向对象思想
 熟练封装,继承,多态
 熟悉使用接口,异常
 熟悉使用集合
 熟悉掌握I/o流相关操作

二、项目内容

1.项目结构图:
注意事项:每个板块功能可能会有什么说明,有什么要求需要注意下(文件则相对于生活中客户所提出的要求),否则不满足要求,就算完成了,也不会被客户所满意,将会耗费大量时间,所以一切要按照要求来。
2.主要的实体类和功能类

(1).实体类:
在这里插入图片描述
(2).功能类
在这里插入图片描述

3.项目内容
(1)读者信息管理:
  分析:读者信息管理主要分为读者信息添加,读者信息查询和修改。首先对于读者信息添加模块,需要创建一个关于读者的实体类,对读者的所拥有的属性(姓名,性别,名字,出生日期,读者类型,和录入读者管理系统的唯一编号)和行为进行修饰。添加时,可以通过List类集合来进行通过管理。主要注意的是读者类型是需要进入到读者类型信息管理所添加过的类型。读者信息查询和修改:则可以根据获得List集合进行查询和修改(修改也需要注意其读者类型),删除则也通过List集合进行增删改查。
最后: 别忘了对获得集合通过IO流输出到文件里。
删除部分代码:

public static void insertReaderDlete(List<Reader> list) {
    
    
        if (list.size() == 0) {
    
    
            System.out.println("请添加读者为先,现没有读者信息!!!");
        } else {
    
    
            System.out.println("请输入你要删除的读者id:");
            String id = TSUtility.readKeyBoard(15, true);
            for (Reader a : list) {
    
    
                if (a.getReaderid().equals(id)) {
    
    
                    System.out.println("是否删除Y/N(" + a.toString() + "):");
                    char c = TSUtility.readConfirmSelection();
                    if (c == 'Y') {
    
    
                        list.remove(a);
                        System.out.println("删除成功!!!");
                        return;
                    } else if (c == 'N') {
    
    
                        return;
                    }
                }
            }
            System.out.println("输入id有误!");
        }
    }

(2)读者类型管理
  分析:读者类型管理主要是对于读者信息的类型的区分,对于不同类型的,所可借阅的书籍本数和借阅期限,逾期罚金都与之不一样。所以读者类型主要是也可以用List集合进行增删改查,其注意的也是唯一编号的问题。而罚金可以通过Properties集合,以读者类型为键,罚金额度为值,进行增删改。
最后:也别忘了通过IO流输出到文件中。
罚金部分代码:

public static void Fine(File file,String s1,Properties p) throws IOException {
    
    
        FileReader fileReader=new FileReader(file);
        p.load(fileReader);
        if(p.getProperty(s1)==null){
    
    
            System.out.println("检查到你还未设置罚金,请先设置罚金!!");
            System.out.println("请输入你要设置的罚金");
            String s=TSUtility.readKeyBoard(2,false);
            p.setProperty(s1,s);
            FileWriter fileWriter=new FileWriter(file);
            p.store(fileWriter,null);
            fileWriter.close();
            fileReader.close();
        } else {
    
    
            System.out.println("请输入你要修改的罚金("+p.getProperty(s1)+")");
            String s=TSUtility.readString(2,p.getProperty(s1));
            System.out.println("是否修改罚金(Y/N)");
            char c = TSUtility.readConfirmSelection();
            if (c == 'Y') {
    
    
                p.setProperty(s1,s);
                FileWriter fileWriter=new FileWriter(file);
                p.store(fileWriter,null);
                System.out.println("修改成功!!!");
                fileWriter.close();
                fileReader.close();
            } else if (c == 'N') {
    
    
            fileReader.close();
            }
        }
    }

(3)图书信息管理
  分析:其图书信息管理跟读者信息管理有很多相似的功能,也可通过List集合进行增删改查,主要注意的是图书类型的添加和修改时,需判断是否类型是图书管理系统中添加过的类型。最后:别忘了通过IO流输出到文件中去。
查询部分代码:

//查询全部读者
    public static void selectBook(List<Book> list) {
    
    
        for (Book reader : list) {
    
    
            System.out.println(reader.toString());
        }
    }

    //根据id查找相应的读者
    public static Book selectBookById(List<Book> list, String id) {
    
    
        Book r = new Book();
        for (Book B : list) {
    
    
            if (B.getISBN().equals(id)) {
    
    
                r = B;
            }
        }
        return r;
    }

    //根据名字找到对应的图书
    public static List<Book> selectBookByName(List<Book> list, String name) {
    
    
        List<Book> r = new ArrayList<Book>();
        for (Book B : list) {
    
    
            if (B.getBokkname().equals(name)) {
    
    
                r.add(B);
            }
        }
        return r;
    }

(3)图书类型管理
  分析:图书类型管理与读者类型管理有很多相似的功能,也是通过List集合进行增删改查,主要是类型的唯一编号和类型添加和修改时重复问题。最后:别忘了输出到文件中。
(4)图书借阅管理
  分析:图书借阅管理系统,是通过读者编号,图书编号进行借阅,所以借阅系统实体类中应具有读者编号,和图书编号,借阅日期三个属性。 在借阅时,需注意的是借阅时,读者编号,图书编号添加的判断,库存是否为0的判断和减少,读者类型借阅书籍本数的限制范围判断。归还时,则注意:对于归还时,该读者借阅时间的时长和该读者类型所能借阅的期限的比较,大则需要交付该读者类型相应的罚金金额。最后:输出到文件中。
归还部分代码:

 // 图书归还,还书者的编号,图书编号,借阅日期
    public static String returnBook(String readerid,String ISBN){
    
    
        String i="0";
        for(BookBorrow b:bookBorrows){
    
    
                if(b.getReaderBorrowID().equals(readerid)) {
    
    
                    if (b.getBookBorrowIBSN().equals(ISBN)) {
    
    
                         i = b.getDate();
                        bookBorrows.remove(b);
                        break;
                    }else {
    
    
                        i="2";
                    }
                }
            }
            return i;
    }

(5)管理者用户管理
  分析:用户管理无非分为账户和密码,所以可以通过Properties集合进行增删改。首先需判断文件中是否存入账户和密码,存入则进行登录操作,不然则直接进入到注册功能中**。主要注意:**账户的唯一性,和删除时不能删除正在登录的账户,删除的话,则需要直接停止运行操作。
注册部分代码:

//注册界面
    public  static  void enroll(Properties p,File file) throws IOException {
    
    
        Set<String> set = p.stringPropertyNames();
        while(true){
    
    
        System.out.println("请输入注册的账号:");
        String s=TSUtility.readKeyBoard(10,false);
        int i=0;
        for(String s1:set){
    
    
            if(s1.equals(s)){
    
    
                i++;
                System.out.println("该账号已注册,请重新输入账号!!");
            }
        }
        if(i==0){
    
    
        System.out.println("请输入注册的密码:");
        String s1=TSUtility.readKeyBoard(10,false);
        p.setProperty(s,s1);
        FileWriter f=new FileWriter(file);
        p.store(f,null);
        System.out.println("注册成功!!");
        f.close();
        break;
        }
        }
    }

心得体会

  博主通过这个项目的实践,明白了学习归学习,还是需要多动手去实践,才能有更好的收获。对于项目更要明白每个板块之间的联系和要求,对于所遇到的不明白的问题,bug和异常,可以通过网上进行搜索解决,博主也再次体会到了网络信息的强大。
最后一句话: 努力总会有收获的!!

猜你喜欢

转载自blog.csdn.net/weixin_46870007/article/details/121516551