图书馆管理系统(IO流)

项目内容:

项目功能结构图:

图书馆管理系统(IO流)

 项目功能如下:
(1)读者信息管理:包括读者信息添加和读者信息查询与修改功能。用户登录成功之后,可以浏览所有读者的信息,也可以检索特定读者的信息;同时,可以对读者信息进行维护,包括增加、删除及修改。具体信息包括读者类型(读者的类型决定着他可以借到书的最大数量和最大归还天数)、读者姓名、出生日期、性别、电话、所在院系、注册日期等。(相关存储数据可通过I/O流直接存在文件,可也直接在文件里读的数据)
(2)图书信息管理:包括图书信息添加和图书信息查询与修改功能。用户登录成功之后,可以浏览所有图书信息和检索特定图书的信息;也可以对图书信息进行维护。包括添加图书、删除图书以及修改图书信息。具体信息包括:图书ISBN、图书名称、作者、出版社、出版日期、印刷次数、单价、图书类别等。(相关存储数据可通过I/O流直接存在文件,可也直接在文件里读的数据)
(3)图书借阅管理:包括图书借阅和图书归还功能。图书借阅功能,先输入读者的编号,然后输入要借阅的图书的信息,记录系统当前时间即借阅时间;图书归还功能,输入读者的编号,选择其名下已借阅的图书,判断当前日期即归还日期与借阅日期的差值是否超过了规定的期限,计算罚金,从而进行图书的归还操作。具体信息包括:借阅日期、归还日期、罚金。由于要计算罚金,故需要知道该读者的读者类型,根据类型判断其可借图书天数、可借图书数量等。(相关存储数据可通过I/O流直接存在文件,可也直接在文件里读的数据)
(4)基础信息维护:包括图书类别设置、读者类别设置及罚金设置。图书类别设置,可以对图书的类别进行增加、删除、修改和查询;读者类别设置可以对读者的类别进行增加、删除、修改和查询;罚金设置,可以指定超期一天的罚金标准。(相关存储数据可通过I/O流直接存在文件,可也直接在文件里读的数据)
(5)用户管理:包括修改密码、用户添加和删除。修改密码,是指当前用户修改自己的密码;用户添加和删除,是对新增和去除系统用户时对用户信息的维护。(相关存储数据可通过I/O流直接存在文件,可也直接在文件里读的数据)

项目思路:

我的项目文件结构如下: 

图书馆管理系统(IO流)

整个项目下来,查询、添加、修改、删除都进行了多次,完全可以套模板。

现在拿图书信息管理模块说明:

图书文件内容如下:

图书馆管理系统(IO流)文件中每一行是一个图书对象,获取文件每一行数据:

 for (int i = 0; i < array.size(); i++) {
            Book b = (Book) array.get(i);
        }

此时每一个 i 获取的是一个图书对象,也就是文件中的一行数据

新建两个类读取文件内容和存储内容到文件

从文件读取数据到集合

public static void readData(String fileName, ArrayList array)throws IOException {
        BufferedReader br = new BufferedReader(new FileReader(fileName));
        String line;
        while ((line=br.readLine())!=null){
            String[] strArray = line.split(",");
            Book b = new Book();
            b.setISBN(strArray[0]);
            b.setTypeid(Integer.parseInt(strArray[1]));
            b.setBookname(strArray[2]);
            b.setAuthor(strArray[3]);
            b.setPublish(strArray[4]);
            b.setPublishdate(strArray[5]);
            b.setPrinttime(Integer.parseInt(strArray[6]));
            b.setUnitprice(Double.parseDouble(strArray[7]));
            b.setTypename(strArray[8]);
            array.add(b);
        }
        br.close();
    }

把集合中的数据存储到文件中

public static void writeData(String fileName, ArrayList array) throws IOException{
        BufferedWriter bw=new BufferedWriter(new FileWriter(fileName));
        for (int i = 0; i < array.size(); i++) {
            Book b = (Book) array.get(i);
            StringBuilder sb= new StringBuilder();
            sb.append(b.getISBN()).append(",").append(b.getTypeid()).append(",").append(b.getBookname())
                    .append(",").append(b.getAuthor()).append(",").append(b.getPublish()).append(",").append(b.getPublishdate())
                    .append(",").append(b.getPrinttime()).append(",").append(b.getUnitprice()).append(",").append(b.getTypename());
            bw.write(sb.toString());
            bw.newLine();
            bw.flush();
        }
        bw.close();
    }

这两个文件的格式都是通用的,只需要修改读取和写入部分,就能对不同的文件进行读取写入

写好这两个读取存入类后,就可以对图书信息进行查询、添加,修改和删除操作

下面讲整个系统下来的需要注意的地方:

1)图书借阅信息:被借阅的图书不能被修改,删除

        我们拿删除来说,首先获取借阅情况文件中图书的ISBN存入集合arrayList2,当在删除图书的时候,要删除的图书ISBN不存在集合arrayList2,就可以进行删除,当还需判断要删除的图书ISBN存不存在。反之,存在就不能删除。同样的,修改也可以这样写。

       for (int i = 0; i < arrayList.size(); i++) {
            BorrowBook bb = (BorrowBook) arrayList.get(i);
            arrayList2.add(bb.getISBN());
        }
        boolean flag = true;
        while (flag){
            try {
                if(!arrayList2.contains(ISBN)){
                    flag = false;
                    int index = -1;
                    while (true){
                        for (int i = 0; i < array.size(); i++) {
                            Book b = (Book)array.get(i);
                            if(b.getISBN().equals(ISBN)){
                                index=i;
                                break;
                            }
                        }
                        if(index==-1){
                            System.out.println("图书不存在");
                            break;
                        }else {
                            System.out.println("你要删除的图书如下:");
                            selectBookByISBN(ISBN);
                            System.out.print("确认要删除吗?(Y/N):");
                            char yn = TSUtility.readConfirmSelection();
                            if (yn == 'Y') {
                                array.remove(index);
                                writeData(fileName,array);
                                System.out.println("删除成功");
                            }
                            break;
                        }
                    }
                }else{
                    flag = true;
                    throw new Exception("当前图书有借阅情况,不能删除");

                }
            }catch (Exception e){
                System.out.println(e.getMessage());
                break;
            }
        }

2)图书借阅后,数量需要减少。图书借阅数量减少就是一个修改功能,当添加了图书借阅情况,通过借阅的图书ISBN,就可以修改图书的数量减一。

3)计算罚金首先需要计算借阅日期和归还日期相差的天数,知道如何时间格式化就行。然后判断读者的类别,通过类别获取读者最大借阅天数,从而计算出罚金。

总结:

        作为javaSE基础部分的一个过渡项目,还是有些逻辑需要好好考虑的,做完项目会遇到一些Bug,都是在做之前没考虑到的。这次的项目给我的教训就是,在做之前,一定要好好规划,好好想做完之后存在的明显的Bug,在做之前就想到并解决它。

上一篇:大文件上传+解决方案


下一篇:一种消息接收并打印的结构设计