实践项目2 图书管理系统

目录

前言

功能流程

心得体会


前言

        在学习完Java容器集合和文件IO流的内容后,迎来了又一个实践项目<图书管理系统>;这次与项目1不同的是,得用IO流知识实现项目。接下来,让我们一起来看看项目的需求及目标......

实践项目2 图书管理系统

        有一说一,当看到项目2的需求文档时,真的是一脸茫然啊。就这?就这?一张图,几段需求说明就把我打发了?我该怎么下手,从哪个角度下手?这可真的是个大难题,在徘徊惆怅了几个小时后,终究是像社会低下了头。我便在博客看看别人写过的此篇文章,像身边的大佬咨询......万事开头难,但我们得迈出第一步!接下来,迈入主题。冲冲冲!!!


功能流程

仔细揣摩文档给出的需求图后,我们其实最好不要按着给出的顺序依次写(不然后面太麻烦),因为读者和图书里面包含了相应的类别,图书借阅与归还也和读者、图书(读者类型、图书类型)相关联。

 鄙人实现项目流程:

  • 用户管理
  • 基本信息维护
  • 读者信息管理
  • 图书信息管理
  • 图书借阅管理

在写项目时,我们首先就得弄明白需要怎么构建起来该项目的框图。我这里参考项目一框架,一个界面显示区(view),一个实体类区域(domain),一个功能实现区(service);因为该项目用到的是IO流知识,得用一个包来装文件内容。

实践项目2 图书管理系统


心得体会

【1】因为IO流实现代码,必然涉及到文件读写操作,我是用的对象序列化完成的,用Properties集合也同样可以完成 。但因为类里面涉及的属性太多,我对split分割不能熟练应用,最后选择序列化。既然文件需要反复读写,可以把它封装到工具类!还有获取时间什么的也可以封装进去。

//反序列化
    public static ArrayList deserialization(File f) throws IOException, ClassNotFoundException {
        ArrayList<Object> o = null;
        if (!f.exists()) {
            f.createNewFile();
        } else {
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream(f));
            Object obj = ois.readObject();
            o = (ArrayList) obj;
            ois.close();
        }
        return o;
    }

    //序列化
    public static void serialization(ArrayList<Object> r, File f) throws IOException {
        if (!f.exists()) {
            f.createNewFile();
        } else {
            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(f));
            oos.writeObject(r);
            oos.close();
        }
    }
 //当前时间
    public static String currentTime() {
        Date time = new Date();
        SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        return ft.format(time);
    }

    //判断性别
    public static char isSex() {
        char c;
        for (; ; ) {
            String str = readKeyBoard(1, false).toUpperCase();
            c = str.charAt(0);
            if (c == '男' || c == '女') {
                break;
            } else {
                System.out.print("选择错误,请重新输入:");
            }
        }
        

 【2】在写读者和图书相关内容时,定义实体类时,属性不要定义为基本数据类型,不然之后内容存不了文件,不能实现项目需求。

实践项目2 图书管理系统

【3】该项目大部分都是增删改查,写出来一个,另一个对应的类,代码实现都差不多,可以Ctrl+C、Ctrl+V。 

        其实,该项目最难的地方就是图书的借阅与归还,还有罚金的设置等,这些得好好想。我因为不怎么会用循环嵌套,在写借书时,for循环,while循环把我脑阔都绕晕了,实在是遭不住。这里给出借书的相关代码。

 private static File file = new File("project2\\src\\file\\borrowInfo.txt");
    //借书
    public static void borrowBooks() throws IOException, ClassNotFoundException {
        int readerId = 0; //读者id
        String readerName = null;//读者姓名
        int bookId = 0;//图书id
        String bookName = null;//图书名字
        int count = 0;//借书次数 limit
        String typeName = null; //读者类型
        int maxborrownum = 0; //最大借书天数
        int limit = 0;

        boolean flag = true;
        while (flag) {
            File file1 = new File("project2\\src\\file\\readerInfo.txt");
            ArrayList readerArray = TSUtility.deserialization(file1);

            System.out.println("读者id\t姓名\t  性别  年龄\t  电话\t\t所在院系\t\t类别\t   可借阅数量\t  可借阅天数");
            for (int i = 0; i < readerArray.size(); i++) {
                Readers readers = (Readers) readerArray.get(i);
                System.out.println(readers.getReaderId() + "\t\t" + readers.getName() + "\t" + readers.getSex() + "\t" + readers.getAge() + "\t" + readers.getPhoneNumber() + "\t" + readers.getFaculty() + "\t\t" + readers.getRt().getName() + "\t\t" + readers.getRt().getLimit() + "\t\t" + readers.getRt().getMaxborrownum());
            }

            boolean flags = true;
            while (flags) {
                System.out.println("请输入你要选择的读者id:");
                readerId = TSUtility.readBookBorrowInt();
                for (int i = 0; i < readerArray.size(); i++) {
                    Readers r = (Readers) readerArray.get(i);
                    if (readerId == r.getReaderId()) {
                        readerName = r.getName();
                        typeName = r.getRt().getName(); //读者类别
                        count = r.getRt().getLimit(); //可借阅数量
                        maxborrownum = r.getRt().getMaxborrownum(); //最大借书天数
                        flags = false;
                        break;
                    }
                }
                if (flags) {
                    System.out.println("无此读者id,请重新输入!");
                }
            }

            if (count == 0) {
                System.out.println("该读者的借书数量已使用完,请先归还图书");
                flag = false;
            } else {
                File file2 = new File("project2\\src\\file\\bookInfo.txt");
                ArrayList bookArray = TSUtility.deserialization(file2);
                System.out.println("图书id\t  图书编号\t   \t书籍名称     作者\t  图书单价\t 出版社\t\t出版日期");

                for (int j = 0; j < bookArray.size(); j++) {
                    Books books = (Books) bookArray.get(j);
                        /*int id = books.getBt().getId();
                        String name = books.getBt().getName();*/
                    System.out.println(books.getBookId() + "\t\t" + books.getISBN() + "\t" + books.getBookName() + "\t   " + books.getAuthor() + "\t " + books.getMoney() + "\t     " + books.getPublisher() + "\t\t" + books.getPublishDate());
                }

                boolean flagss = true;
                while (flagss) {
                    boolean f1 = true; //是否借阅此书
                    System.out.println("请输入你选择的图书id:");
                    bookId = TSUtility.readBookBorrowInt();
                    for (int i = 0; i < bookArray.size(); i++) {
                        Books books = (Books) bookArray.get(i);
                        if (bookId == books.getBookId()) {
                            bookId = books.getBookId();
                            bookName =books.getBookName();
                            flagss = false;
                            break;
                        }
                    }
                    if (flagss) {
                        System.out.println("无此图书id,请重新输入!");
                    }
                    ObjectInputStream oos2 = new ObjectInputStream(new FileInputStream("project2\\src\\file\\borrowInfo.txt"));
                    Object obj = oos2.readObject();
                    ArrayList array2 = (ArrayList) obj;
                    for (int i = 0; i < array2.size(); i++) {
                        BorrowBook bb = (BorrowBook) array2.get(i);
                        if (bb.getReaderId() == readerId && bb.getBookId() == bookId) {
                            f1 = false;
                            flagss = true;
                            System.out.println("该读者已经借阅该书!");
                            break;
                        }

                    }
                    if (f1) {
                        //借书时间
                        String borrowTime = TSUtility.currentTime();
                        if (file.length() == 0) {

                            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("project2\\src\\file\\borrowInfo.txt"));
                            ArrayList<BorrowBook> array = new ArrayList<>();
                            BorrowBook bb = new BorrowBook(readerId, readerName, bookId, bookName, borrowTime);
                            array.add(bb);
//                        count--;
                            oos.writeObject(array);
                            System.out.println("借阅成功");
                            flag = false;
                            flagss = false;
                        } else if (file.length() != 0) {
                            ArrayList array1 = TSUtility.deserialization(file);
                            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("project2\\src\\file\\borrowInfo.txt"));
                            BorrowBook bb = new BorrowBook(readerId, readerName, bookId, bookName, borrowTime);
                            array1.add(bb);
                            oos.writeObject(array1);
                            System.out.println("*****************************************");
                            System.out.println();
                            System.out.println("该读者的借书情况如下:");
                            System.out.println("读者id\t读者姓名\t图书id\t图书名称\t借阅时间");
                            System.out.println(readerId + "\t\t" + readerName + "\t\t" + bookId + "\t" + bookName + "\t" + borrowTime);

                            for (int i = 0; i < readerArray.size(); i++) {
                                Readers r = (Readers) readerArray.get(i);
                                if (readerId == r.getReaderId()) {
                                    count--;
                                    System.out.println("你还可以借" + count + "本书~·");
                                    r.setRt(new ReaderType(typeName, count, maxborrownum));

                                    break;
                                }
                            }
                            ObjectOutputStream oos1 = new ObjectOutputStream(new FileOutputStream("project2\\src\\file\\readerInfo.txt"));
                            oos1.writeObject(readerArray);
                            flag = false;
                            flagss = false;
                        }
                    }
                }
            }
        }
    }
上一篇:解决Electron应用打开后短暂出现菜单栏和白屏闪烁问题


下一篇:python之第一个例子hello world