项目二(图书管理系统)

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

一.项目需求
        

        

1.1 项目的具体功能:
       

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

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

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

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

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

二.项目设计
              2.1登录系统
              博主首先完成的是登录系统这个模块,程序先从文件中读取账户,读取账户我用的是字符流去写,将账户从文件中读取出来,如果账户不存在就注册。注册账户其实就是将内容写入到文件中。读取账户:先把文件里的内容一行一行的到集合里,集合我选用的是ArrayList。然后遍历集合通过分片拿到账户名,密码同理。以下是博主写的登录代码可以参考一下。


 此图是存账户的文件:

                 2.2用户管理模块
                这个模块因为跟密码账户这些东西挂钩所以我先选择写他。其实这个模块还是比较简单的无非就是改密码,改密码:通过文件到集合,在分片(上面有代码),然后再set()方法修改,再把集合的内容写进文件里,注册账户也是一样,其实就是文件到集合。集合到文件相互用起来就行了。附上关键代码:修改密码

  if (newPassword.equals(newPasswordpro)){
                        String account = array.get(getNum()).split(",")[0].split("=")[1];
                        String newUser="account="+account+",password="+newPassword;
                        array.set(num,newUser);
                        TSUtility.Writer(array,FilenameTeamp);
                        System.out.println("修改密码成功!!!");
                 2.3读者管理模块
                读者管理模块与图书管理模块非常相似,这里我就讲一下读者,图书就自己去完成。读者管理包括:增加读者,修改读者,查看读者,删除读者。写这段代码,我主要用的是,把对象读者放到集合里,然后把集合序列化。因为这样拿读者的属性非常的方便。直接反序列化,遍历集合就可以拿到。反序列化这里有一个点:如果文件为空反序列化会有异常,我的解决方法:字符流去读那个文件,看是否为空。肯定也有简单的方法自行百度。当然增添你的考虑账户名不能重名。

关键代码:


                 修改读者:

                将文件的内容读到集合,遍历拿到集合里的内容修改就行,最后别忘了把修改后的集合序列化存放到文件里去。

                查看读者:

                查看是最简单的。将文件的内容读到集合,遍历集合就行。

                删除读者:

                删除要考虑的是,读者是否存在,读者是否借阅了图书等,

                2.4借阅管理
                这个模块是最核心的模块,稍微复杂一些。借书你要考虑,图书存在不,数量是否足够,还有就是读者他最多能借几本书,图书数量的变化,读者的属性变化等等。因为这个模块牵涉到读者和图书两个类,你用了他们哪些属性,改了哪些东西,你都得把这些新内容重新写入文件中去。归还图书:跟借阅一样,注意属性变化,及时更新文件内容。重点是你的判断读者是否逾期,再根据读者的类别,借阅时间,计算罚金。借阅记录很简单,跟读者查看方法一样。

借阅的关键代码:

 boolean isnull = TSUtility.isnull(FilenameTeamp);
        boolean isnull1 = TSUtility.isnull(FilenameTeamp1);
        if (!isnull) {
            try {
                throw new Aexception("没有读者,请先添加");
            } catch (Aexception aexception) {
                System.out.println(aexception.getMessage());
            }
        } else {
            ReaderInfomationservice.lookReaderInfomation();
            System.out.println("请输入读者的ID: ");
            String ID = TSUtility.readKeyBoard(5, false);
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FilenameTeamp));
            Object o = ois.readObject();
            ReaderList = (ArrayList) o;
            boolean bb = true;
            for (int i = 0; i < ReaderList.size(); i++) {
                ReaderInformation r = (ReaderInformation) ReaderList.get(i);
                if (ID.equals(r.getID())) {
                    bb = false;
                    BookInformationservice.lookBook();
                    System.out.println(ANSI_GREEN);
                    System.out.println("===================================");
                    System.out.println("类型      可借数量      可借天数    ");
                    System.out.println(r.getType());
                    System.out.println("===================================");
                    System.out.println(ANSI_BLUE);
                    if (r.getType().getMaxbook() == 0) {
                        System.out.println("你借的书太多了,请及时归还!!!");
                        break;
                    }
                    if (!isnull1) {
                        break;
                    }
                    System.out.println("请输入你要借的图书名称: ");
                    String bookname = TSUtility.readKeyBoard(10, false);
                    ObjectInputStream ois1 = new ObjectInputStream(new FileInputStream(FilenameTeamp1));
                    Object oo = ois1.readObject();
                    BookList = (ArrayList) oo;
                    boolean flag = true;
                    for (int j = 0; j < BookList.size(); j++) {
                        BookInformation b = (BookInformation) BookList.get(j);
                        if (bookname.equals(b.getBookName())) {
                            flag = false;
                            if (b.getBookcount() <= 0) {
                                try {
                                    throw new Aexception("图书数量不足,请联系管理员!!!");
                                } catch (Aexception aexception) {
                                    System.out.println(aexception.getMessage());
                                }
                                break;
                            } else {
                                b.setBookcount(b.getBookcount() - 1);
                                r.setStatus(false);
                                r.getType().setMaxbook(r.getType().getMaxbook() - 1);
                                TSUtility.ObjectOutput(ReaderList, FilenameTeamp);
                                TSUtility.ObjectOutput(BookList, FilenameTeamp1);
                                boolean isnull2 = TSUtility.isnull(FilenameTeamp3);
                                if (isnull2) {
                                    ObjectInputStream ooo = new ObjectInputStream(new FileInputStream(FilenameTeamp3));
                                    Object O = ooo.readObject();
                                    BorrowPeopleList = (ArrayList) O;
                                }
                                String time = TSUtility.regionsTime();
                                String borrowpeople = r.getID() + "   " + r.getName() + "    " + time + "       " + b.getBookName() + "     " + b.getAnthor() + "     " + b.getPress() + "      " + b.getDate() + "      " + b.getPrice();
                                BorrowPeopleInformation bpi = new BorrowPeopleInformation(r.getID(), r.getName(), r.getPhoneNumber(), time, b.getBookName(), b.getAnthor(), b.getPress(), b.getPrice());
                                TSUtility.ObjectOutput(bpi, BorrowPeopleList, FilenameTeamp3);
                                BorrowList.add(borrowpeople);
                                TSUtility.Writer1(BorrowList, FilenameTeamp2);
                                String log = Loginservice.userAccount + "在  " + TSUtility.regionsTime() + "借出了图书" + b.getBookName() + "    借书人:" + r.getName() + "  ID:" + r.getID();
                                TSUtility.Writer(log, FilenameTeamplog);
                                System.out.println("借书成功!!!");
                                break;
                            }
                        }
 
                    }
                    if (flag) {
                        try {
                            throw new Aexception("目前没有这本图书");
                        } catch (Aexception aexception) {
                            System.out.println(aexception.getMessage());
                        }
                    }//图书不存在
                    break;
                }
 
            }
            if (bb) {
 
                try {
                    throw new Aexception("没有找到该读者!!! ");
                } catch (Aexception aexception) {
                    System.out.println(aexception.getMessage());
                }
            }//读者不存在
            ois.close();
        }
归还的代码:

 boolean isnull = TSUtility.isnull(FilenameTeamp3);
        if (isnull) {
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FilenameTeamp3));
            Object oo = ois.readObject();
            returnList = (ArrayList) oo;
            if (returnList.size() == 0) {
                System.out.println("没有记录!!!");
            } else {
                System.out.println("所有记录");
                Lookbook();
                System.out.println("请输入读者ID:");
                String name = TSUtility.readKeyBoard(5, false);
                boolean flag = true;
                String BorrowTime = null;
                int price = 0;
                for (int i = 0; i < returnList.size(); i++) {
                    BorrowPeopleInformation b = (BorrowPeopleInformation) returnList.get(i);
                    if (name.equals(b.getID())) {
                        flag = false;
                        System.out.println("你借的书有:");
                        System.out.println("=========================================");
                        System.out.println("书名      作者      借书日期     ");
                        for (int j = 0; j < returnList.size(); j++) {
                            BorrowPeopleInformation b1 = (BorrowPeopleInformation) returnList.get(j);
                            if (b.getID().equals(b1.getID())) {
                                System.out.println(b1.getBorrowBookName() + "    " + b1.getBorrowBookAnthor() + "     " + b1.getBorrwTime());
                                BorrowTime = b1.getBorrwTime();
                                flag = false;
                            }
                        }
                        System.out.println("请输入要归还的图书名称:");
                        boolean flag1 = true;
                        String Bookname = TSUtility.readKeyBoard(8, false);
                        for (int j = 0; j < returnList.size(); j++) {
                            BorrowPeopleInformation b2 = (BorrowPeopleInformation) returnList.get(j);
                            if (Bookname.equals(b2.getBorrowBookName())) {
                                ObjectInputStream oi = new ObjectInputStream(new FileInputStream(FilenameTeamp1));
                                Object ob = oi.readObject();
                                returnList1 = (ArrayList) ob;
                                //归还后图书数量+1
                                for (int k = 0; k < returnList1.size(); k++) {
                                    BookInformation bb = (BookInformation) returnList1.get(k);
                                    if (Bookname.equals(bb.getBookName())) {
                                        bb.setBookcount(bb.getBookcount() + 1);
                                        price = bb.getPrice();
                                        break;
                                    }
                                }
                                //归还后读者可借阅数量+1
                                ObjectInputStream oio = new ObjectInputStream(new FileInputStream(FilenameTeamp));
                                Object obo = oio.readObject();
                                returnList2 = (ArrayList) obo;
                                String Readerinfo = null;
                                String typeName = null;
                                int maxday = 0;
                                for (int k = 0; k < returnList2.size(); k++) {
                                    ReaderInformation bbb = (ReaderInformation) returnList2.get(k);
                                    if (name.equals(bbb.getID())) {
                                        bbb.getType().setMaxbook(bbb.getType().getMaxbook() + 1);
                                        Readerinfo = "你的类型是" + bbb.getType().getTypeName() + "你最久只能借" + bbb.getType().getMaxday() + "天";
                                        typeName = bbb.getType().getTypeName();
                                        maxday = bbb.getType().getMaxday();
                                        break;
                                    }
                                }
                                String log = "ID为:" + name + "的读者" + "在  " + TSUtility.regionsTime() + "归还了图书" + Bookname;
                                TSUtility.Writer(log, FilenameTeamplog);
                                //算钱================================================================
                                System.out.println(ANSI_YELLOW);
                                FileReader fir = new FileReader(FilenameTeampmony);
                                MonyList.load(fir);
                                String a = MonyList.getProperty(typeName);
                                Long aa = Long.parseLong(a);
 
                                fir.close();
                                System.out.println("========================================================");
                                System.out.println("注意:");
                                System.out.println("如果逾期了:   罚金=逾期天数*类型罚金*图书价格");
                                System.out.println("========================================================");
                                System.out.println(Readerinfo);
                                String nowTime = TSUtility.regionsTime();
                                long l = TSUtility.calculateTime(BorrowTime);
                                System.out.println("图书价格      借书时间                  还书时间                  借用时间(秒)  ");
                                System.out.println("   " + price + "       " + BorrowTime + "       " + nowTime + "   " + l);
                                if (l > maxday) {
                                    System.out.println("你逾期了!!!" + (l - maxday) + "秒");
                                    System.out.println("罚款:" + (l - maxday) * aa * price + "元");
                                } else {
                                    System.out.println("你没有逾期!!!!很好!!");
                                }
                                TSUtility.ObjectOutput(returnList1, FilenameTeamp1);
                                TSUtility.ObjectOutput(returnList2, FilenameTeamp);
                                returnList.remove(i);
                                TSUtility.ObjectOutput(returnList, FilenameTeamp3);
 
                                System.out.println("归还成功");
                                System.out.println(ANSI_CYAN);
                                flag1 = false;
                                break;
                            }
                        }
                        if (flag1) {
                            System.out.println("没有借阅该图书!!!");
                        }
                        break;
                    }
                }
                if (flag) {
                    System.out.println("没有找到该读者!!!");
                }
            }
        } else {
            System.out.println("没有借书记录!!!");

题目11:图书馆图书管理系统 图书馆管理系统是对籍的借阅及读者信息进行统管理的系统. 具体包括读者借书,还,籍的预定;图管理员的籍借出处理,籍归还处理,预定信息处理;系统管理员的系统维护,包括增加目,删除和更新目,增加籍,减少籍,增加读者帐户信息,删除可更新帐户信息,籍的信息查询,读者信息查询等. (1) 作为图书馆管理系统,首先需要有读者的参与,读者可以登录系统查询所需要的图,查到籍后可以考虑预订,当然最重要的是借书,还操作. (2) 对于系统来说,读者发起的借书,还操作最终还需要图管理人员处理,图管理人员还负责图的预订和预订取消 (3) 对于图书馆管理系统来说,系统的维护操作也是相当重要的.维护操作主要有增加目,删除或更新目,增加读者信息,删除或更新读者信息等.. 使用说明:导入项目后,输入http://localhost:8080/LibrarySystem/index,就可以访问登录页面了,然后三个权限的登录账号密码可以自己加,或者看我附件的sql文件。这里先提供三个可用的账号: 普通用户:xian 123 图书馆管理员:long 123 系统管理员:yang 123 然后第次发帖,有什么不对的地方希望大家可以指出来,然后想要交流java 的也可以相互谈论,楼主九月份即将大四,希望能在暑假再增强下自己的实力。
利用VS2013 Update5在唐大仕老师源代码的基础上编写的私人图书馆管理系统,用到的技术主要有:C#有关文件、数据库、图形化界面等方面的知识。 本程序的主要功能:  1.默认页提供关于图书馆的基本信息(ID、类别、名、装帧、作者、关键字、出版社、出版年代、定价、统号、页数、购地点、是否读完等); 2.图书馆管理者必须先登录才能了解图书馆的详细信息,并可以对图 进行添加、查找、修改、删除等的操作,还可进行管理与归类; 3.可以显示图的ISBN的维码; 使用说明: 1.信息的存储与读取,Access数据库,你的电脑可能需要安装AccessDatabaseEngine.exe(位于Debug目录下); 2.维码使用的是zxing类库(zxing.dll位于Debug目录下,已经引入); 3.软件主要在DPI为125的屏幕下调试,DPI为100时控件可能有错位,大家可以自行修改(不过本人坚持认为125的文本尺寸对眼睛有利),也可编写自动适应DPI的方法并Load之; 关于注释: 本人直人认为不注释才是最好的注释,程序代码应该简洁清晰易懂,所以除了唐老师原有的注释,本人几乎不作注释,这样做的好处是当我改变代码后,不必为忘了改注释而烦恼。 尚未完成的功能: 1.可以结合RichTxtBox,给每本图来个图文并茂的简介,简介文件可以读取保存编辑,并与名同名(名+.rtf); 2.查询可以增加其他字段如关键字的查询; 3.目录入可以增加更多字段(本人更喜欢在DataGridView上直接增删改);
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值