项目二(图书管理系统)

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

一.项目需求
        

        

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("没有借书记录!!!");

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
软件工程与数据库 课程设计 任务书 学院名称: 数学与计算机学院 课程代码:_6014419_ 专 业: 年 级: 一、设计题目 图书管理系统 二、主要内容 一个简单的图书管理系统包括图书馆内书籍的信息、学校在校学生的信息以及学生的 借阅信息。此系统功能分为面向学生和面向管理员两部分,其中学生可以进行借阅、续 借、归还和查询书籍等操作,管理员可以完成书籍和学生的增加,删除和修改以及对学 生,借阅、续借、归还的确认。如: 图书室有各种图书一万多册。 每种图书都有书名、书号(ISBN)、一名或多名作者(译者)、出版社、定价和内容 简介。 借书证记录有借阅者的姓名、所在单位、职业等。 凭借书证借书,每次最多能借8本书。借书期限最长为30天。 实现新进图书的数据录入。 实现对所有购进图书的分类查询和分类统计。 能够按书名、作者等分类查询现有图书的数量。 记录借阅者的个人资料和所借图书的书名、书号数据等。 三、具体要求 1、完成系统的需求分析 通过需求分析确定系统需要处理的数据的需求,要求使用数据库的辅助设计工具( PowerDesigner等),建立业务处理模型。 2、完成系统概念结构设计 概念数据模型(CDM)用于完成数据库的设计,与人和数据库平台和具体数据存储结构和 工具无关。首先选择局部应用画出分E-R图,最终形成系统的E-R图 3、完成系统逻辑结构设计 按照E- R图转换成关系模式的规则,将CDM转换成逻辑数据模型,并为每个关系模式设计主键、 外键。分析关系模式中的依赖关系,对关系模式规范化处理 4、完成系统物理结构设计 为每个关系分配存储长度,建立数据库的索引和视图,定义关系中的主码和外码,写 出关系创建和查询的SQL语句。 5、编码 选择你自己熟悉的开发工具完成一个DBS系统的编码工作。 源代码格式规范,注释不少于三分之一 四、主要技术路线提示 1.仔细阅读设计指导书内容,认真掌握任务要求(2. 需求分析( 3.概念结构设计( 4.逻辑结构设计(5.物理结构设计(6.编码. 2.后台推荐采用SQL server或Oracle;前台开发环境不限制。可采用ADO,ODBC,OLE DB或JDBC连接数据库, 并调用系统存储过程、自定义存储过程、函数等。 五、进度安排 第1周: 数据库系统概念模型、数据模型设计,创建数据库以及相关对象; 第2周: 前台程序开发,撰写报告,接受检查。 六、完成后应上交的材料 1. 源程序一份(包含数据库) 2. 课程设计报告一份 七、推荐参考资料 1.王珊.数据库系统概论(第四版). 高等教育出版社 2.闪四清.数据库系统原理与应用教程.清华大学出版社 3.周龙骧.数据库管理系统实现技术.中国地质大学出版社 4.张海藩.软件工程概论.清华大学出版社 5.陈明 编著.实用软件工程基础.清华大学出版社 6.成先海.数据库基础与应用-SQL SERVER2000. 机械工业出版社出版 指导教师 签名日期 年 月 日 系 主 任 审核日期 年 月 日 ----------------------- 数据库课程设计--图书管理系统全文共3页,当前为第1页。 数据库课程设计--图书管理系统全文共3页,当前为第2页。 数据库课程设计--图书管理系统全文共3页,当前为第3页。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值