【《基于Python的图书管理系统设计与实现》18000字(论文)】_第1页
【《基于Python的图书管理系统设计与实现》18000字(论文)】_第2页
【《基于Python的图书管理系统设计与实现》18000字(论文)】_第3页
【《基于Python的图书管理系统设计与实现》18000字(论文)】_第4页
【《基于Python的图书管理系统设计与实现》18000字(论文)】_第5页
已阅读5页,还剩40页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第I页共IV页基于Python的图书管理系统设计与实现摘要图书管理系统作为典型的管理信息系统,是为了取代传统的人工管理图书而诞生。由此本系统的设计旨在减轻人力的负担,确保可以通过少量的人使用图书管理系统可以轻松完成大量工作,从而提升图书管理效率。本文采用管理信息系统的先进概念,以Django作为Web框架,采用Pycharm作为集成开发环境,MySQL作为后台数据库,进而保障了系统拥一定程度稳定性,能够在较长的时间内都能适应图书管理的需求。设计之前提前进行了群众意见的收集,分析国内外优秀的设计,撰写需求说明,明确了设计目标。设计的过程中使用结构化的设计方式,包含了前端页面的设计和后台数据库的连接,使用前端开发技巧,实现动态网页的设计。且在最终设计完成之后进行了多次测试,保证了系统的稳定性和实用性。关键词:图书管理系统,Django,Web框架目录摘要IAbstractIITOC\o"1-3"\h\u1绪论 11.1选题背景与意义 11.2国内外研究现状及发展趋势 11.3选题目标及主要工作 21.4论文的内容组织 22需求分析 32.1问题定义 32.2可行性分析 32.3功能需求 32.3.1功能需求 32.3.2数据需求 52.3.3业务需求 72.3.4接口需求 112.3.5出错处理需求 122.4非功能需求 122.4.1性能需求 122.4.2可靠性和可用性需求 122.4.3约束 122.4.4逆向需求 122.4.5将来可能提出的需求 123系统设计 133.1软件设计原则 133.2总体设计 133.2.1设计背景 133.2.2系统架构设计 143.3数据设计 163.3.1数据表设计 163.3.2数据库模型设计 173.4详细设计 193.4.1图书借阅模块 193.4.2图书管理模块 203.4.3登录模块 203.4.4个人信息模块 214系统实现 234.1登录模块的实现 234.1.1账户注册 234.1.2账户登录 244.2图书借阅模块的实现 264.2.1个人信息 264.2.2查找书籍 264.2.3借阅记录 284.2.4更改密码 294.2.5退出登录 294.3图书管理模块的实现 304.3.1个人信息 304.3.2书籍管理 304.3.3采购书籍 344.4问题总结 345系统测试 365.1系统测试方法 365.2系统测试用例 365.2.1登录模块测试 365.2.2图书借阅模块测试 375.2.3图书管理模块测试 375.2.4系统性能测试 385.3系统测试结果 386结论与展望 396.1结论 396.2展望 39参考文献 40绪论选题背景与意义信息化的时代的到来意味着信息量的急剧上升,可供数据流向的通路不断地增多,产生的数据也不断增多。面对这种情况的信息的管理将成为这个时代的主题,信息管理的本质就是对数据的流向和流通方式进行规范化处理,这将会在之后的很长时间内成为时代的焦点。伴随着全球信息化的进程,信息技术飞速发展。在信息技术发展的过程中,逐步衍生出形式各异却又本质相同的管理信息系统。多样化的管理信息系统,它们从不同的切入点对数据处理环节进行优化。图书管理系统作为一个典型的管理信息系统,切入点就是书籍的管理。由于拥有较大的数据吞吐量,作为图书馆建设和的核心,高效化图书管理是图书馆建设发展不可或缺的一个环节,在放弃传统的图书管理的同时,我们需要考虑到图书管理系统的应用,又要确保图书管理系统能在相应的环境中起到功能的作用。国内外研究现状及发展趋势互联网时代的到来,信息量的储备需求急剧上升,各行各业都将要面对信息化带来的一系列问题。随着以数字化、网络化、智能化为特征的新时代信息化浪潮的蓬勃兴起,高校图书管理也面临着信息化浪潮的冲击[1]。传统的人工图书管理方式难以满足爆炸式增长的信息量的管理。发展图书管理系统就成为了解决信息管理的处理方式。一个图书馆会拥有成千上万的书籍要求我们进行管理,如今各大高校都已经拥有了自己的图书管理系统,并且熟练地应用数字化、网络化为代表的先进技术,凭借图书管理系统,提升管理者的管理效率。然而与此同时意味着对于系统的要求也在不断加强深化。放眼世界,国外的信息管理发展要早于国内的发展,时至今日多数早期诞生的图书管理系统取得了较高的成就。其中最有代表性的要属以色列艾利贝斯集团开发的Aleph500系统[2]。Aleph系统目前全球范围内的用户超过7000家,包括多个国家图书馆和世界著名大学图书馆,究其原因,是因为Aleph以Oracle数据库为后台,提供强大的资源共享、完全的系统连通以及与第三方系统的无缝协调工作能力[3]。凭借这些优势占据了世界图书管理的高端市场。此外,澳大利亚DYNIX公司研发的Horizon系统由于其先进的理念和高自动程度在全球市场上也赢得了较高的市场份额。以上就是国外最为出彩的两个管理系统。由于图书管理系统概念诞生之初,国内的多数人对于其发展并不看好,导致国内的图书管理系统相较于国外会有滞后的趋势,不过如今的国内的图书管理系统研发也处于蓬勃发展的阶段。从第一个系统在国内正式出现到今天,一共有30多种,截至目前国内使用最多的就是汇文系统、MELINETS系统[4]。尽管从市场占比来看,国内的图书管理系统在高端市场的占比不如国外的系统,但是不可置否的是这些系统仍旧有其独到之处。汇文系统起始于江苏省政策包含的重点研发项目,在设置的时候使用Oracle作为数据库由于支持多平台操作和卓越的稳定性拥有极强的市场竞争力。MELINETSII系统是国家“九五”重点科技攻关项目,采用三层网络体系结构模式。其独到之处在与所有分馆/虚拟馆的所有数据存贮在一个服务器一个数据库中。致使各馆数据既独立又统一,即业务相对独立和数据集中管理。通过参数控制和权限设置控制增强各个馆之间合作的紧密度,保证系统运行的安全性。综上所述,图书管理系统如今的发展主要趋势是,国外的图书管理系统认可度要高于国内。在设计理念和自动化的程度上要优于国内的图书管理系统,尤其是Aleph500其优越的性能足以成为其他系统开发追赶的目标。但是相应的国外的图书管理系统也面临一个问题,维护成本相比国内的要高出很多。同时可以看出近几年国内的图书管理系统发展已初露锋芒,开始引用主流的数据操作技术,假以时日必然可以实现追赶。现今依然有进步的空间。选题目标及主要工作本论文选题目标的确定主要基于目前国内高校的日益增长的图书数量与传统的图书管理方式难以匹配的问题。需要对图书管理的方式加以革新,实现高效化,简易化的新型图书管理方式。针对这个问题本文提出的解决方案是设计图书管理系统强化管理效率。主要工作内容有:(1)系统设计前期进行市场调研,采用问卷的形式,分发至各个社交媒体,采集人们对于本系统的功能需求。确定系统在完成时必须需要具备的功能。(2)确定选题之后,根据选题查询资料,对比相似系统的开发过程,从他人的开发过程得出结论,确定适宜的开发方式。(3)巩固所学知识,重新学习数据库的使用语句,掌握web应用开发后端数据的调用。争取开发出系统简洁的同时又不能缺少功能。论文的内容组织本文旨在研究图书管理系统的需求、设计、实现与测试。结合实际的需求情况,分析图书管理系统的功能组织,区分模块进行结构化设计,将预期功能一一实现,并对完整的系统进行测试。本文的内容组织如下:第一章绪论:在开头先是对于论文的选题背景以及意义进行介绍,对比国内外的研究现状,分析国内外图书管理系统的历程,确定本文的选题目标和主要工作。第二章需求分析:结合真实环境,根据软件工程的要求撰写需求分析说明书。对问题进行定义,分析设计的可行性,从功能需求和非功能需求分别展开分析。第三章系统设计:明确目标需求之后,展开需求进行具体的分析设计,规划设计的步骤,设计出详细的数据库和功能模块。第四章系统实现:完成每个模块的功能实现,对每个模块的功能进行详细的阐述和演示,讲解代码的关键技术以及设计中遇到的问题。第五章系统测试:系统实现之后开始测试系统的使用,首先是各个模块的功能测试,其次测试整体的性能,最后总结测试的结果。第六章结论与展望:对图书管理系统的研究内容进行高度凝练的概括总结,并且对今后发展方向发表自己的想法。

需求分析问题定义伴随着图书管理方式的发展,使用图书管理系统进行管理的方式将会是图书管理的主流方式。相对而言,传统的人工管理图书管理方式面将要面对三个问题:图书管理员凭借手工摘录统计借阅信息,致使记录图书流通过程任务量上升,图书管理员工作量大,且易导致记录失误。读者借阅图书后,图书库存信息不能及时更新,当另一位读者进行借阅的时候,将面临找不到图书的问题。图书数量上升之后,读者如果需要对某一本特定图书进行查找时,耗费时间精力较多。由此衍生出设计图书管理系统的需要解决的三个核心问题:需要大量记录借阅图书的读者的个人信息,展示图书的基本信息。图书借阅之后,图书库存需要在短时间更新,显示实时的数据变化。具备图书查找功能,可以对需要的图书进行索引,对需要查找的书籍位置实现信息的精准定位。可行性分析系统在正式准备开发之前,仍然有准备工作要做,需要在数据的支持上进行可行性分析,可行性分析的目的是压缩简化了系统分析和设计的过程,研究问题的范围。在大多数的情况下我们从经济、技术、操作三个方面来研究可行性分析[6]。经济可行性:目前我国大多数的图书馆都是免费对外开放的,基本不参与商业化的活动过程,没有对外的收入。所以对于图书管理系统的开发我们需要控制成本的投入,使得项目研究的经费得到有效的控制。确认经济可行的主要依据是目前电脑的普及程度非常高,图书馆几乎全部配有自己的电脑,并不需要支出额外的费用购买电脑。开发过程使用开源技术,不进行付费购买,由此确定本项目在经济上是可行的。技术可行性:图书管理系统是根据Python3的语法进行编写,背靠强大的Python库,不对计算机配置提出高要求,致使绝大多数的计算机都可以满足使用的要求。Django作为一个开放源代码的web框架,框架的发展已经趋至成熟。Python的语法足够满足基本功能的编写要求,可参考的开源项目丰富。这些条件能够为系统开发的技术可行性提供保障。操作可行性:图书馆管理系统已经诞生了数十年,在有条件部署系统的地方,开始计划引入图书管理系统,使用图书管理系统的把传统的人工管理方式淘汰。图书管理系统伴随着高校的成长不断地发展。随着计算机的普及,图书管理系统的管理方式在发展的历程中一步步的被大众接受。图书管理系统的使用过程中,人力的负担减轻,效率逐渐提升。用户可以轻松上手图书管理系统,无需对操作人员提出要求。因此,本系统在操作层面上拥有可行性。功能需求功能需求图书借阅模块功能需求:图书借阅模块由图书借阅、图书归还、图书查询三个功能构成。图书借阅:点击图书借阅之后,显示借阅成功,查看借阅记录时会出现图书的书名、借阅时间、以及图书的理论归还时间。图书归还:在已借阅的图书中,显示借阅记录,点击归还图书后,借阅记录删除。图书查询:提供一个文本框,可以输入书籍的名称进行查找。图书管理模块功能需求:图书管理模块是专门为管理员设计,负责对图书的流通过程进行记录。可执行操作包括图书的增加、修改、删除、查找四个功能构成。图书的增加:添加新图书的基本资料。图书的修改:对图书基本信息的更改。图书的删除:删除下架图书信息等功能。图书的查找:管理员根据图书的关键字进行查找,查找结果显示书籍的信息,方便管理员进行增加、修改、删除等操作。个人信息模块功能需求:个人信息模块由查看个人信息展示、编辑信息、修改密码三个功能构成。查看个人信息:用户登录后可以查看个人信息,包括用户名、姓名、电子邮件地址等。编辑信息:用户在登录后,可以更改所登录账户的电子邮件地址。修改密码:注册账户可以在此修改自己的登录密码。对以上的功能需求展开具体的分析绘制数据流图,阐明数据的流向图STYLEREF1\s2SEQ图\*ARABIC\s11图书管理系统数据流图顶层图STYLEREF1\s2SEQ图\*ARABIC\s12图书所管理系统数据流图0层图STYLEREF1\s2SEQ图\*ARABIC\s13图书管理系统数据流图1层信息管理图STYLEREF1\s2SEQ图\*ARABIC\s14图书管理系统数据流图1层图书管理数据需求数据需求分析是将业务流程抽象化实现的关键,整合系统中出现的数据变化,进行建模,对数据模型进行分析,可以明确描述待开发系统的概念结构数据模型。(1)数据字典图STYLEREF1\s2SEQ图\*ARABIC\s115管理员信息表图STYLEREF1\s2SEQ图\*ARABIC\s116学生信息表图STYLEREF1\s2SEQ图\*ARABIC\s117图书类型表图STYLEREF1\s2SEQ图\*ARABIC\s118用户信息表图STYLEREF1\s2SEQ图\*ARABIC\s119图书信息表图STYLEREF1\s2SEQ图\*ARABIC\s120借阅信息表(2)E-R图图STYLEREF1\s2SEQ图\*ARABIC\s121图书管理系统E-R图业务需求登录模块业务分析:在正式进入图书管理系统前需要设置一个模块对用户的身份进行甄别,确认用户的账户类型,在分别授予不同的功能。登录模块的业务项目有账户注册、用户登录。(1)账户注册设计账号登录的需求是采集用户的基本信息,注册之后的信息将会流向数据库进行存储。用户登录时会调用账户注册信息实施核对。图STYLEREF1\s2SEQ图\*ARABIC\s15账户注册业务流程图(2)用户登录用户登录功能主要用于区分账户性质,可以通过登录账户类型的不同将图书管理员与学生用户区别开来。图STYLEREF1\s2SEQ图\*ARABIC\s16用户登录业务流程图图书管理模块业务分析:图书管理模块给管理员提供图书管理的业务空间,实现图书管理系统的核心目的,对图书进行管理。图书管理分为四个业务分别是图书信息的增加、图书信息的删除、图书信息的修改、图书的查找。管理员在图书查找的结果内可以进行图书资料的编辑。(1)图书信息的增加图STYLEREF1\s2SEQ图\*ARABIC\s17图书信息增加业务流程图(2)图书信息的删除图STYLEREF1\s2SEQ图\*ARABIC\s18图书信息删除业务流程图(3)图书信息的修改图STYLEREF1\s2SEQ图\*ARABIC\s19图书信息修改业务流程图(4)图书的查找图STYLEREF1\s2SEQ图\*ARABIC\s110图书查找业务流程图图书借阅模块业务分析:图书借阅模块为读者提供图书借阅的业务功能,记录读者的借阅记录,将个人的借阅信息以及图书馆的库存情况反馈给读者。图书借阅分为三个业务分别是图书借阅、图书归还、图书查询(查找的业务流程和管理员的图书查找一样,但是读者的图书查询功能只可以进行图书的借阅,不可以进行图书资料的编辑)。(1)图书借阅图STYLEREF1\s2SEQ图\*ARABIC\s111图书借阅业务流程图(2)图书归还图STYLEREF1\s2SEQ图\*ARABIC\s112图书归还业务流程图个人信息管理模块业务分析:图书管理员系统是一个面向用户的系统,需要使用账户进行登录后才可以进行之后的功能。账户的个人信息我们要授予相关的功能,将不同的用户区别开来,使得用户对自己拥有账户的信息管理的权利。授予账户的业务功能分别为编辑信息和修改密码。(1)编辑信息图STYLEREF1\s2SEQ图\*ARABIC\s113编辑信息业务流程图(2)修改密码图STYLEREF1\s2SEQ图\*ARABIC\s114编辑信息业务流程图接口需求硬件接口需求:CPU:主频不低于1.8GHz。内存:不低于4GB。硬盘:大于256GB。软件接口需求:基础环境:Windows10。数据库管理系统:MySQL8.0。集成开发环境:Pycharm2020.1.5web框架:Django3.0。出错处理需求(1)无法响应时页面跳转并且显示相关的错误提示。(2)当用户进行不合理操作时进行错误操作提示。非功能需求性能需求(1)执行操作后,响应时间不应过长。(2)出现故障后可以在24小时内排除。(3)系统操作界面具有良好的交互性,简单易懂方便操作。(4)随着数据量和运行节点的增多,考虑功能进行拓展。可靠性和可用性需求本系统不仅从功能方面需要满足以上的需求,在其实际投入运行方面也有诸多考量:可靠性需求:保证能够7*24小时稳定运作,可操作性高,保证一个月之内不出现错误。即使产生错误也可以满足方便修正的要求。可用性需求:图书管理系统具有灵活性,对图书变化问题上,可以及时反映进行调整,方便项目进行部署。要求数据存储方式的选取具有高稳定性。对大量数据进行存储时有良好的兼容性,数据库具有高安全性。约束(1)使用Python3的语法要求进行开发。(2)使用Django作为Web开发框架。(3)为符合需求变化,投入使用后保证至少可以使用两年。逆向需求(1)Django的wsgi.py提供了Python应用和Web服务器的接口不需要自己编写。(2)Django的ORM模块,把数据表与Python类对应、表字段与类字段对应、类实例与数据记录对应,将对类实例的操作映射到数据库中,开发者不需要写SQL代码。将来可能提出的需求根据读者的需求增加图书论坛模块。进行收集资料,酌情考虑需要添加的功能,并且在使用过程中思考如何深度美化界面,优化设计提升系统性能。当前预测将来的要求是在添加读书的论坛的功能。

系统设计软件设计的最终目的是实现一个系统,系统设计的目的在于为我们捋清思路。结构化的分析方式对需求分析中需要使用的分析模型进行转化,使其成为实际可行的设计模型,以需求分析阶段得出的数据流图为依据深入阐述,进行软件结构的设计。软件设计原则在进行软件设计之前应该遵循软件设计的基本原则。软件设计的原则是人们在长期的开发过程中凭借问题得出结论,并且深化概括得到了以下几个原则。(1)模块化:增加各个模块之间的独立性,减少模块之间的耦合程度,每个模块的功能要有明显的区别性。此外,模块的规模要设计需要尽可能保持平衡,易于进行维护,模块接口需要简单清晰。(2)抽象:抽象是对客观世界进行观察的时候对认知复杂的事物,将其的共性结合起来概括说明。抽象的目的是降低系统的复杂程度,以精简凝练的方式对系统进行描述。(3)逐步求精:根据人类的认知过程符合Miller法则,即忽略非本质的细节,集中精力解决主要问题。把一个时间阶段内需要解决的问题,按照层次结构,在逐步精细化的过程中实现开发。(4)信息隐藏:为了避免模块之间相互干扰,但是每个模块仍旧需要在外界展示,而因此将部分信息隐藏起来,只显示部分信息,这个具体实现的细节对于外界看来就会是不可见的。(5)复用性设计:使用已经完成的软件成分,不用修改或者稍加修改就可以投入新的软件设计中,将已完成的部分再次使用去构造行的部分。(6)灵活性设计:软件各个模块之间的耦合性不能太强,要降低耦合,并且提升内聚建立软件的灵活性。要求是模块完成相对独立的子功能减少代码冗余。不要将代码写死。总体设计设计背景图书管理系统的设计选用的是在Python3的基础上编写的Django3.1.7。Django是当前主流的PythonWeb开发框架。Web服务器开发领域有著名的MVC设计模式:数据存取逻辑、业务逻辑、表现逻辑。将三个逻辑组合在一起,就是MVC设计的核心理念。Django框架设计的模式借鉴了经典的MVC,采用的是MTV设计模式。但是为了降低各个模块之间的耦合。Django框架将交互过程重新组合成MTV设计模式,即Model(模型)、Template(模板)、View(视图)。Django把MVC中的View(视图)分解为MTV中的View和Template,分别决定“数据的展示”和“如何展示”,然而Controller的功能完全由Django的URLconf取代。Django的ORM(对象-关系映射)模块将数据表与Python类对应、表字段与类属性对应、类实例与数据记录对应、并且将类实例的操作映射到数据中。极大地提升了开发效率。

图STYLEREF1\s3SEQ图\*ARABIC\s11Django框架原理图系统架构设计系统的总体架构设计对图书管理系统在日后是否能够投入运行起了决定性的作用。本系统参考了目前主流的信息管理系统(MIS)的设计原则,最初的MIS由信息的采集、信息的传递、信息的储存、信息的加工、信息的维护和信息的使用六个方面组成。本系统将围绕这六个方面对进行重新规划整合,实现整体的功能设计。根据模块化的设计方法,将系统分为四个模块,对数据流图展开分析。针对业务需求分析和功能需求分析,提炼出一整套完整的需求,并且依据需求进行模块的初步设计。图STYLEREF1\s3SEQ图\*ARABIC\s12图书管理系统层次方框图登录模块是系统的必要模块,主要由账户登录和账户注册两个子模块构成,通过处理用户的输入内容判断是否进入其余的模块,输出的内容是页面的跳转。图STYLEREF1\s3SEQ图\*ARABIC\s13登录模块IPO图个人信息模块由查看个人信息、编辑个人信息、修改密码三个子模块组成直接对系统主模块负责。读者在注册之后个人信息模块就会被激活使用。在登录后方可允许进行其余的子模块功能的调用。图STYLEREF1\s3SEQ图\*ARABIC\s14个人信息模块IPO图图书管理模块是属于图书管理员的模块,由图书增加、图书删除、图书修改、图书查询四个子模块构成。图书管理员需要的功能要在管理模块表现出来,是直接面向书籍管理的模块。图STYLEREF1\s3SEQ图\*ARABIC\s15图书管理模块IPO图图书借阅模块是学生账户需要的模块,由图书借阅和图书归还构成。学生账户在这个模块上进行图书的借阅和归还。图STYLEREF1\s3SEQ图\*ARABIC\s16图书借阅模块IPO图HIPO图是对软件层次结构的描述工具,由层次图和IPO图构成,反映输入输出和详细处理的内容。数据设计数据库的设计是系统设计环节最为关键的步骤,一个功能良好、结构完整的系统需要有清晰明确的数据走向。合理的设计数据库能够帮助系统高效率的完成工作。按照需求分析中搜集数据绘制的图书管理系统E-R图和数字字典,对数据进行分析,选出契合度高的数据库对数据加以管理。本系统选用的数据库为MySQL8.0。数据表设计在数据设计步骤主要的任务是把E-R图中的出现信息进行深化,转换成为与选用数据库契合的数据模型的逻辑设计。在设计每张表之前,要对数据表进行完整性约束,确保数据库的都需要有唯一的主键,且主键值不为空。与此同时对每个字段进行完整性约束,根据实际情况进行比对。表STYLEREF1\s3SEQ表\*ARABIC\s11用户信息表字段名称数据类型长度是否主键描述accountVARCHER24是账户名user-passwordVARCHAR24否用户密码user-identityVARCAHR24否用户身份表STYLEREF1\s3SEQ表\*ARABIC\s12学生信息表字段名称数据类型长度是否主键描述student_idVARCHAR24是学号student_nameVARCHAR24否姓名student_telVARCAHR24否电话student_majorVARCAHR24否学院student_emailVARCAHR64否邮箱表STYLEREF1\s3SEQ表\*ARABIC\s13管理员信息表字段名称数据类型长度是否主键描述manager_idVARCHAR24否工号manager_nameVARCHAR24是姓名manager_telVARCHAR24否电话manager_emailVARCHAR64否邮箱manager_stackVARCHAR24否管理书库表STYLEREF1\s3SEQ表\*ARABIC\s14图书类型表字段名称数据类型长度是否主键描述type_idVARCHAR24是类型编号type_nameVARCHAR24否类型名称表STYLEREF1\s3SEQ表\*ARABIC\s15图书信息表字段名称数据类型长度(取值范围)是否主键描述ISBNVARCHAR24是书籍编号book_nameVARCHAR24否书名book_authorVARCHAR24否作者book_publisherVARCHAR24否出版社book_versionVARCHAR24否版本book_priceVARCHAR24否价格book_numberINT-2147483648~2147483648否总库存数book_restINT-2147483648~2147483648否可借数book_placeVARCHAR24否所属书库表STYLEREF1\s3SEQ表\*ARABIC\s16借阅信息表字段名称数据类型长度(取值范围)是否主键描述student_idVARCHAR24是学号student_nameVARCHAR24否姓名student_telVARCAHR24否电话号码book_idVARCAHR24否书籍编号book_nameVARCAHR24否书名borrow_timeVARCAHR24否借书时间rest_timeINT-2147483648~2147483648否还书时间数据库模型设计图书管理系统的服务端采用ORM技术,因此在设计数据库的时候不用进行物理结构的设计,只需要设计Python类,将类实例的操作映射到数据库中。以下是对数据表对应的Python类设计。(1)用户信息表代码示例classUser(models.Model):account=models.CharField()user_password=models.CharField()user_identity=models.CharField()(2)学生信息表代码示例classStudent(models.Model):student_id=models.CharField()student_name=models.CharField()student_tel=models.CharField()student_major=models.CharField()student_email=models.CharField()(3)管理员信息表代码示例classManager(models.Model):manager_id=models.CharField()manager_name=models.CharField()manager_tel=models.CharField()manager_email=models.CharField()manager_stack=models.CharField()(4)图书类型表代码示例classType(models.Model):type_id=models.CharField()type_name=models.CharField()(5)图书信息表代码示例classBook(models.Model):ISBN=models.CharField()book_name=models.CharField()book_author=models.CharField()book_publisher=models.CharField()book_version=models.CharField()book_price=models.CharField()book_number=models.IntegerField()book_rest=models.IntegerField()book_place=models.CharField()book_type=models.ForeignKey(Type,on_delete=models.CASCADE)(6)借阅信息表代码示例classBorrow(models.Model):student_id=models.CharField()student_name=models.CharField()student_tel=models.CharField()book_id=models.CharField()book_name=models.CharField)borrow_time=models.CharField()rest_time=models.IntegerField()详细设计图书管理系统的设计采用B/S架构。使用Django框架的原因是,Django框架是一个典型的用来开发B/S架构的工具。B/S指的是浏览器/服务器全称是Browser/Server。B/S架构是通过web浏览器来进行显示的,将核心功能集中到服务器上从而避免了出现客户端堵塞的问题。图书管理系统划分为四个大模块分别是图书借阅模块、图书管理模块、登录模块、个人信息模块。为了降低耦合性,增加模块之间的独立性分别对每个模块进行单独设计。图书借阅模块图书借阅是本系统对读者提供的最主要的功能,读者可以凭借这个模块实现读者对图书所拥有的权限。即图书借阅和图书归还。读者的图书借阅权限包含图书查询功能,图书查询功能允许关键字进行索引,方便读者可以在数以万计的图书中能够精准的找出自己需要的图书。在确认借阅后,核对读者的账户信息,确认读者账户的借阅书目的库存情况,确认无误后进入下一个步骤,读者的信息进入借阅信息表,并且返回给读者账户的借阅记录。在图书归还后的时候,系统会选择调用,从借阅信息表删除读者信息。图STYLEREF1\s3SEQ图\*ARABIC\s17图书借阅模块系统流程图图书管理模块图书管理系统是本系统提供给管理员的主要功能,管理员可以凭借这个实现对图书的增、删改、查四大基本操作,也是图书管理系统的核心。根据MIS的设计原则,任何信息管理系统的设计的需要围绕信息展开。图书管理员在登录后进行图书管理,主要负责书籍信息表的信息流入和流出。判断图书查询、增加、删除、修改等操作是否符合输入规范才可以进行下一个步骤。确保程序在设计的时候是符合标准的。对于图书查询操作在输入合法之后需要和数据库进行核对,反馈给前端图书的查询结果。图STYLEREF1\s3SEQ图\*ARABIC\s18图书管理模块系统流程图登录模块登录模块是面向系统所有的用户,也是将用户区分开来的模块,登录模块定义账户的登录之前的登录行为。主要有账户注册和账户登录两个子模块。账户注册子模块记录账户的基本信息,在用户注册成功后注册信息进入个人信息表,同时在用户信息表里创建对应的记录。账户登录子模块主要用于核验登录账户的权限,由于图书管理员登录后与学生登录后账户需要实现的功能模块不一样,要在登录模块将两种类型的账户及其对应的模块区分开来。图书管理员账户登录后是图书管理模块,学生账户登录后是图书借阅模块。

图STYLEREF1\s3SEQ图\*ARABIC\s19登录模块系统流程图个人信息模块个人信息模块的设计考虑到在图书管理系统使用人数增多的时候,会有用更多的用户信息,对个人信息加以管理。个人信息模块会在之后融入其他的图书管理和图书借阅模块,给系统用户在登录后的提供一个修改功能。个人信息模块包含学生信息表、管理员信息表、用户信息表。允许用户进行个人信息的编辑,在点击提交之后,确认输入信息的合法性,允许用户进行资料的修改。同时对账户密码加以管理,在修改密码前通过输入原来的密码确认账户使用者的身份。确认修改密码后新密码需要符合输入规范才可以完成修改密码的相关操作。

图STYLEREF1\s3SEQ图\*ARABIC\s110个人信息模块系统流程图

系统实现完成需求分析为我制定了开发的核心需求之后,系统设计的过程中我们把初步的设计环节整合出来,在这两个步骤我们奠定了理论基础,图书管理系统一共分为三个功能模块,也就是三个的功能高度集中的模块。在系统实现设计的时候将个人信息模块融入了图书借阅模块和图书管理模块,这样会使页面功能更加齐全。下一步我们可以开始着手实施系统实现。在本章节我们将会对实现的过程展开具体的描述。登录模块的实现图书管理系统在设计想法萌发的时候,考虑到系统的主要受众,对登录界面的设计进行了精心规划。登录之前需要对图书管理系统的使用者实行一个账户登录的验证功能。验证功能要求登录用户在访问其余模块之前,使用已经注册的账户进行登录。由于图书管理员界面有界面隐蔽的需求,将登录模块分为连两个界面分别为学生登录界面和图书管理员登录界面。只有在输入相应URL之后才可以显示管理员的登录界面。每个登录模块主要包含两个功能分别是账户注册和账户登录。账户注册用户在正式登录之前,需要在这个功能区域完成账户的注册,完成用户个人信息的登记过程。注册之后的注册信息会进入相关数据表。在账户被注册之后,顶端会返回提示信息显示,显示账户已被注册。下图分别为两个界面的账户注册功能。图STYLEREF1\s4SEQ图\*ARABIC\s11登录模块的学生注册功能图STYLEREF1\s4SEQ图\*ARABIC\s12登录模块的学生注册功能账户注册的功能通过request.POST.get表单递交输入的个人信息。并且在表单递交个人信息之后通过User.Objects.filter()在用户表中搜索相应表的记录,设置变量result1和result2确认表中电话和学号是否重复,没有搜寻到相同的记录返回“注册成功”提示。如果在表中搜索到相应的记录,根据重复的项返回“账户已注册”和“学号已注册”的错误提示。详细代码如下(以学生注册为例):defstudent_register(request):#获取个人的基本资料name=request.POST.get("student_name")id=request.POST.get("student_id")major=request.POST.get("student_major")email=request.POST.get("student_email")telephone=request.POST.get("student_telephone")password=request.POST.get("student_password")register1=User.objects.filter(account=telephone)register2=Student.objects.filter(student_id=id)context={}iflen(register1)==1:#对结果使用状态数字context["info"]="滴滴,输入的账户已注册啦。"context["status"]=0#返回状态数字0表示结果returnrender(request,'login.html',context=context)else:#该账户是新用户iflen(register2)==1:#判断该学号是否有学生已使用context["info"]="当前学号已经注册啦,麻烦换个哦!"context["status"]=4#返回状态数字结果4returnrender(request,'login.html',context=context)else:#用create添加一条记录User.objects.create(account=telephone,user_password=password,user_identity='学生')Student.objects.create(student_name=name,student_id=id,student_major=major,student_tel=telephone,student_email=email)#对相应的表创建名字context["info"]="恭喜,已注册成功,请登录吧!"context["status"]=1#返回状态数字1表示结果returnrender(request,'login.html',context=context)#注册后页面的框移到登录框账户登录注册完成之后,会将手机号和密码加入用户信息表,生成登录时所需要验证的用户信息表。用户登录时,需要输入正确的手机号和密码在验证通过后才允许登录。学生登录和管理员登录的需要验证的登录信息都是手机号和密码。如果账户尚未注册或是输入错误的账户会显示“该账户不存在”,如果密码输入错误会显示“密码错误!!!”的字样。下图以学生登录为例。图STYLEREF1\s4SEQ图\*ARABIC\s13登录模块的账户登录功能图STYLEREF1\s4SEQ图\*ARABIC\s14登录模块的账户登录报错提示如图所示,上图为输入错误的账号信息之后的报错提示,该页面将会清空,返回错误信息(密码错误同样在该区域显示“密码错误!!!”的字样)。账户注册功能先定义三个全局变量account、st、me。通过request.POST.get表单递交输入的电话和密码,与用户信息表中的密码和账户类型进行校对之后返回对应的结果。核对成功之后允许登录,核对失败根据对应的错误返回相应的错误提示,并且清空登录页面的表单。详细实现代码如下:deflogin_judge(request):#对使用账户的登录实施权限验证globalaccount,st,me#在这里定义全局变量account=request.POST.get("telephone")user_password=request.POST.get("password")login1=User.objects.filter(account=account)iflen(login1)==1:password=login1[0].user_password#从后台得到结果identity=login1[0].user_identity#调用存储的身份类型,验证身份ifidentity=='学生':#只有在验证身份是学生之后才允许登录ifuser_password==password:login2=Student.objects.filter(student_tel=account)st=login2[0].student_namecontext={"name":login2[0].student_name,"id":login2[0].student_id,"major":login2[0].student_major,"telephone":login2[0].student_tel,"email":login2[0].student_email,}returnrender(request,'student/student_information.html',context)else:context={"info":当前登录账户,密码输入有误,请纠正!","status":2}returnrender(request,'login.html',context=context)#需要刷新页面方便接下来的操作else:#在这里设置相应的错误提示词语context={"info":"该账户不存在!!!","status":3}returnrender(request,'login.html',context=context)#失败之后回到重新登录的页面图书借阅模块的实现图书借阅模块是本系统提供给学生账户的主要功能模块。学生账号在登录后会进入图书借阅模块。在系统正式使用时也会是使用最为频繁的模块。该模块主要包含个人信息、查找书籍、借阅记录、密码修改、退出登录等功能。个人信息个人模块提供个人信息展示,用户登录之后会直接跳转到个人信息页面,注册账户时填写的资料会直接显示在这个页面,为了保障信息安全,本系统只允许更改邮箱地址。图STYLEREF1\s4SEQ图\*ARABIC\s15图书借阅模块的个人信息界页面个人信息展示的代码实现是通过request.method设置获取请求的方法,在前端点击后调用数据库用context进行接收后,将接收到的数据返回到前端页面,从而完成个人信息的显示。修改邮箱时调用表更新数据,再次使用context接收传回前端。详细实现的代码如下:defstudent_information(request):#个人信息ifrequest.method=="GET":#在使用者进行点击之后在再次获取个人信息的页面result=Student.objects.filter(student_tel=account)#调用之前设置好的全局变量其中的一个context={}returnrender(request,'st/st_information.html',context)else:email=request.POST.get("email")#从这里得到我们之前的在框里输入的值Student.objects.filter(student_tel=account).update(student_email=email)#把输入的值实现展示出来result=Student.objects.filter(student_tel=account)#此处再次传值到前端查找书籍查找书籍功能可以对管理员已经录入的书籍实施查询操作,可以根据书籍名称或者书籍类型进行查询操作。点击查询之后会显示图书的基本信息。点击操作栏下的图标之后允许读者进行借阅操作,弹出借阅成功,对应书籍可借数会随之相应的操作减少。图STYLEREF1\s4SEQ图\*ARABIC\s16图书借阅模块的查找书籍页面查找书籍代码实现先是每次点击侧边栏的时候进行数据库的调用,然后表中的数据通过context传到前端显示书籍资料。查找功能是通过objects.filter()过滤后使用将数据传到前端,若没有找到相关信息,则返回编写好的错误信息和错误页面。详细代码如下:defsearch_book(request):#查找书籍ifrequest.method=="GET":#当用户每次点击侧边栏的“查找书籍”选项时,都要显示出找到的全部books=Book.objects.all()#更新对应的数据表types=Type.objects.all()returnrender(request,'st/search.html',context={"books":books,"types":types,"name":st})else:book_name=request.POST.get("book_name")type_id=request.POST.get("type_id")types=Type.objects.all()ifbook_name:#确认在类型之前的那个输入框,是为空的情况下book_result=Book.objects.filter(book_name__icontains=book_name)ifbook_result:#把我们在数据库找到的值输出returnrender(request,'st/search.html',context={"books":book_result,"types":types,"name":st})else:#如果找到相对应的数字的话就在弹出的框里输出“未找到该书!”book_result=Book.objects.all()returnrender(request,'st/search.html',context={"books":book_result,"types":types,"name":st,"status":0})借阅记录在学生账户完成相应的借阅操作之后,借阅记录页面会显示读者的借阅信息相关书籍的编号和书名,并且显示剩余的借书时间,实现倒计时的功能,借阅记录页面可以实现图书归还的操作。图STYLEREF1\s4SEQ图\*ARABIC\s17图书借阅模块的借阅记录页面借阅记录的代码实现是先将记录从数据库调用显示,获取借阅时间分割之后,利用date函数得到借阅时间,最后将规定的最多借阅60天减去得出剩余的借阅天数。详细代码如下:defborrow_record(request):#借书记录ifrequest.method=="GET":records=Borrow.objects.filter(student_tel=account)#把当前用户的借阅记录搜索出来forrecordinrecords:borrow_t=record.borrow_time#print(borrow_t)str1=borrow_t.split('')#使用相关的语法对数字实现切割。str2=str1[0].split('-')#把切割出来的数据根据逻辑关系进行组合borrow_time=datetime.date(int(str2[0]),int(str2[1]),int(str2[2]))#now_time=datetime.date(datetime.datetime.now().year,datetime.datetime.now().month,datetime.datetime.now().day)#rest_day=60-(now_time-borrow_time).days#本次借书的时间上限print(rest_day)ifrest_day>=0:Borrow.objects.filter(borrow_time=record.borrow_time).update(rest_time=rest_day)else:Borrow.objects.filter(borrow_time=record.borrow_time).update(rest_time=0)returnrender(request,'st/record.html',context={"records":records,"name":st})更改密码考虑到用户需要对自己的账户拥有更多的管理权,本系统设计了密码更改的功能。进入密码修改输入原密码,再输入两次新密码,验证用户的原密码,验证通过后用户密码更改操作成功。图STYLEREF1\s4SEQ图\*ARABIC\s18图书借阅模块的密码修改页面更改密码的代码实现是先调用数据库中的密码,然后从表单获取输入的密码,使用条件语句判断输入的旧密码与数据库中的密码是否一致,并且在新密码两次输入一致后才能修改成功。详细代码如下:defchange_password(request):result=User.objects.filter(account=account).first()password=result.user_passwordifrequest.method=="GET":returnrender(request,'student/change_password.html',context={"password":password,"name":st})else:oldPassword=request.POST.get("oldPassword")newPassword=request.POST.get("newPassword")reNewPassword=request.POST.get("reNewPassword")ifpassword==oldPasswordandnewPassword==reNewPasswordandnewPasswordandreNewPassword:User.objects.filter(account=account).update(user_password=newPassword)#更新该用户的密码password=newPasswordreturnrender(request,'student/change_password.html',context={"password":password,"name":st})退出登录当用户完成所有的操作之后,可以选择右上角的退出按钮可以实现登出的功能。也可以通过退出系统点击之后回到登录界面。代码实现是通过设置<a>中的href连接视图函数,跳转回到登录界面。

详细代码如下:deflogin(request):#返回登录界面returnrender(request,'login.html')图书管理模块的实现图书管理模块是本系统提供给图书管理员账户的主要功能模块。图书管理员在登录后会进入图书管理模块。图书管理模块是本系统的核心模块,真正的实现管理功能的模块。该模块主要包含个人信息、书籍管理、采购书籍、密码修改和退出登录等功能(图书管理员账户的密码修改功能和退出登录功能和学生账户一样)。个人信息图书管理员账户登录来到个人信息页面,学生账户和图书管理员账户的个人信息差别在于,学生的工号一栏是学号,学生的书库一栏是学院。图书管理员不仅允许更改邮箱还可以更改管理的书库。图STYLEREF1\s4SEQ图\*ARABIC\s19图书管理模块的个人信息页面图书管理员账户的个人信息模块在代码实现时与学生账户的个人信息模块原理一样的,通过调用数据库context接收值,传到前端进行展示。当编辑数据点击保存后,获取表单的输入内容,更改数据库里的对应字段,并且返回结果到个人信息显示页面。详细的代码展示如同学生的个人信息管理系统相同,在管理员个人信息管理的代码实现中书籍管理在书籍管理给图书管理员提供对已录入书籍实施操作的页面。具体的操作有:图书的数量的增加和减少、图书资料修改、图书删除。点击加号的图标会实现书籍库存数增加一的效果,减号的图标会使得书籍库存数减少一。图STYLEREF1\s4SEQ图\*ARABIC\s110图书管理模块的书籍管理页面图书数量控制的代码是通过调用数据库的书籍信息表,更改书籍信息表的可借数和总库存数字段来实现,对应的我们设置两个变量,在每次点击图标字后对两个进行加一的操作,在数量增加通过objects.all()更新查询的结果。图书数量减少的原理也是和这个问题一样,我们只需要把加号和减号实现一个互相对调的结果,然后在调用数据库的命令是实行一个更新数据表的功能。详细代码如下:defadd_book(request):ifrequest.method=="GET":ISBN=request.GET.get("book_ISBN1")#这里对书籍资料的功能进行编号result=Book.objects.filter(ISBN=ISBN).first()number=result.book_number+1rest=result.book_rest+1Book.objects.filter(ISBN=ISBN).update(book_number=number,book_rest=rest)books=Book.objects.all()types=Type.objects.all()returnrender(request,me/me.html',context={"books":books,"types":types,"name":me})在操作栏的修改图标点击修改之后,会显示修改书籍页面,可以对已经编辑完成的书籍资料进行更改,在用户点击保存的按钮之后系统就会确认更改。返回书籍管理页面,页面刷新加载新的书籍资料。在修改书籍资料的页面我们会呈现出我们之前采购书籍的时候输入的图书资料,有国际标准书号、书本类型、书名、价格、作者、馆藏数、出版社、可借数、版本、书库等书籍的资料。图STYLEREF1\s4SEQ图\*ARABIC\s111图书管理模块的修改书籍页面修改书籍功能的代码是先调用数据库,获取书籍信息在前端展示,这样进入修改页面时之前编辑好的信息就会显示出来。在前端点击保存后,会继续执行else之后的代码,获取表单输入的数据对页面重新进行填充。详细代码如下:defalter_book(request):#修改书籍types=Type.objects.all()ifrequest.method=="GET":#从数据库中对应的表获取书籍的信息ISBN=request.GET.get("book_ISBN3")#书籍操作栏的第三个功能result=Book.objects.filter(ISBN=ISBN).first()context={"ISBN":result.ISBN,"book_name":result.book_name,"book_author":result.book_author,"book_publisher":result.book_publisher,"book_version":result.book_version,"book_price":result.book_price,"book_number":result.book_number,"book_rest":result.book_rest,"book_place":result.book_place,"type_name":result.book_type.type_name,"name":st,"types":types}returnrender(request,me/append.html',context)else:ISBN=request.POST.get("ISBN")book_name=request.POST.get("book_name")book_author=request.POST.get("book_author")book_publisher=request.POST.get("book_publisher")book_version=request.POST.get("book_version")book_price=request.POST.get("book_price")book_number=request.POST.get("book_number")book_rest=request.POST.get("book_rest")book_place=request.POST.get("book_place")type_name=request.POST.get("type_name")在点击删除图标之后页面变暗,设置弹出提示“是否清空该书籍”。在确认删除之后,页面会重新刷新,该图书资料成功删除。提示的设置是为了防止图书管理员的操作误触,从而更好地保障系统的使用。点击取消之后回到书籍管理页面,一切不变。图STYLEREF1\s4SEQ图\*ARABIC\s112图书管理模块的删除书籍提示删除书籍的代码通过输出ISBN后对书籍信息表使用Book.objects.filter(ISBN=ISBN).delete()过滤出要删除书籍的ISBN以此作为索引删除书籍信息表中的对应的元组,前端显示页面当中的书籍信息也就删除了。详细代码如下:defdelete_book(request):#清空该书籍ifrequest.method=="GET":ISBN=request.GET.get("ISBN")print(ISBN)Book.objects.filter(ISBN=ISBN).delete()#在Book表里删除该条记录books=Book.objects.all()#对Book实现更新types=Type.objects.all()returnrender(request,'me/me.html',context={"books":books,"types":types,"name":st})#向前端传递所有查找到的书籍信息的集合采购书籍采购书籍主要负责全新书籍的添加,与修改书籍页面最大的差别是书库一栏的输入方式是下拉菜单,在编辑完成书籍资料之后点击保存就会刷新页面,再次进入书籍管理页面就可以查看已经添加成功的书籍。图STYLEREF1\s4SEQ图\*ARABIC\s113图书管理模块的添加书籍页面添加书籍的再输入数据之后,判断总库存数量和可借数是否为数字,确认为数字之后再执行下面的代码,先是使用obejects.create()在数据表中建立对应字段,然后通过context接收值返回给前端页面。详细代码如下:defadd_new_book(request):#types=Type.objects.all()ifrequest.method=="GET":returnrender(request,'manager/add_new_book.html',context={"name":st,"types":types})Book.objects.create(ISBN=ISBN,book_name=book_name,book_author=book_author,book_publisher=book_publisher,book_v

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论