MySQL 图书管理系统

1.需求分析

1.1项目需求分析简介

1.1.1信息需求分析

(1) 图书信息:包括书籍编号,书籍名称,出版社,作者,库存量,出版日期,价格,库存,剩余量,类别等;

(2) 借阅证信息:包括借阅证编号,办证日期,可借数量等;

(3) 读者信息:读者编号,读者姓名,读者性别,读者电话

(4) 图书借还信息:包括图书编号,借阅证编号,读者编号,借阅日期,借阅数量,归还日期,归还数量,超期天数,罚款金额等;

1.1.2功能需求

学校图书借阅系统主要由:图书信息管理,读者信息管理,借阅证信息管理,借还信息管理,规则信息等模块组成。进入改系统后,用户可以对系统中的信息进行添加、修改、删除、查询等操作,包括以下功能:

(1) 图书信息管理模块:对图书信息进行增、删、改、查等操作;

(2) 读者信息管理模块:对读者信息进行增、删、改、查等操作;

(3) 借阅证信息管理模块:增加办卡,注销借阅卡等操作;

(4) 借还信息管理模块:进行借书、续借、还书等操作,查找出逾期的人及其逾期的天数;

(5) 操作记录管理模块:对读者的借,还,续借进行实时记录,便于管理员查找出指定读者的所有借阅记录。

(6) 规则信息管理模块:记录借书逾期的人及其逾期的天数,罚款。

1.2数据字典

1.2.1数据结构

1.数据结构:图书

含义说明:是学校图书借阅管理系统的主要数据结构,定义了图书的信息

组成:图书编号,书名,作者,出版日期,出版社,库存,剩余量,类别;

2.数据结构:读者

含义说明:是学校图书借阅管理系统的主要数据结构,定义了借阅者的基本信息

组成:读者编号,姓名,性别,电话号码;

3.数据结构:借阅证

含义说明:是学校图书借阅管理系统的主要数据结构,定义了借阅证的信息

组成:借阅证号,办证日期,可借数量;

4.数据结构:借,还,续借

含义说明:是学校图书借阅管理系统的主要数据结构,定义了图书借还的详细情况

组成:图书编号,借阅证编号,读者编号,借还日期,借还数量,是否续借

5.数据结构:规则

含义说明:是学校图书借阅管理系统的主要数据结构,定义了规则的详细情况

组成:读者编号,图书编号,借阅证编号,超期天数,超期本书,超期处罚

1.3系统分析

1.3.1功能模块简介

1.3.2功能需求描述

  1. 借阅功能:

图书出借时考虑三个问题:

读者是否因为超期、罚款等情况被关闭了借阅权限;

读者是否已经借满其限额。

该书是否不在库中;

如果不存在以上情况,则可以出借。

  1. 预约功能:

读者想借的书如果不在库中(已经被出借),读者可以预约该图书,当该图书被归还时系统给读者发送邮件,提醒他来借阅,此时其他读者也可以借阅该书。

  1. 续借功能:

读者还书的时候可以续借该图书,续借的过程包括先执行还书操作,再执行借阅操作。

  1. 发送催还邮件:

管理员可以发送邮件提醒读者到期还书。

  1. 读者管理功能:

对读者信息进行查看、添加、修改、删除。将读者分为不同类别,赋以不同权限。

  1. 系统管理功能:

对管理员的登录账号、密码进行添加、修改、删除。

  1. 借阅规则管理功能:

对图书借阅规则进行查看、添加、修改、删除。

  1. 概念结构设计

2.画E-R图

(1)图书实体E-R图

 

(2)图书类别实体E-R图

 

(3)借阅证实体E-R图

(4)读者实体E-R图

(5)规则实体E-R图

(6)记录实体E-R图

(7)学校图书借阅管理系统E-R图

 3.逻辑结构设计

学校图书管理系统关系模型

通过E-R图转换得到关系模型如下:

图书(书籍编号,书籍名称,作者,出版日期,出版社,价格,储存量,剩余量)

图书类别(类别编号,类别名称)

借阅证(借阅证号,办证日期,读者编号,说明,可借数量)

读者(读者编号,读者姓名,读者性别,读者电话,借阅证号)

借还(借读证编号,读者编号,书籍编号,借书日期,还书日期,是否续借,借书数量,还书数量,说明)

规则(读者编号,读者姓名,借阅证号,超期天数,本书,超期罚款)

记录表(序号,读者编号,记录时间,说明)

4.物理结构设计

图书表

书籍类别表

借阅证表

读者表

借还表

规则表

记录表

  5.数据库实施

  创建数据库:

CREATE database tushuguanli;

创建图书表:

use tushuguanli;CREATE TABLE book (book_id INT(10) NOT NULL,book_name VARCHAR(30) NOT NULL,author VARCHAR(30) NOT NULL,pubdate DATE NOT NULL ,publish VARCHAR(50) NOT NULL ,Price INT(20) NOT NULL,inventory INT(100) NOT NULL ,residue INT(100) NOT NULL ,typeid VARCHAR(20) NOT NULL ,PRIMARY KEY (book_id),KEY bo1 (typeid),CONSTRAINT book_ibfk_1 FOREIGN KEY (typeid) REFERENCES book_type (typeid))

创建图书类别表:

CREATE TABLE book_type (typeid VARCHAR(5) NOT NULL,typename VARCHAR(100) DEFAULT NULL,PRIMARY KEY (typeid))

创建借阅证表:

CREATE TABLE js_card (js_id CHAR(5) NOT NULL,period DATE DEFAULT NULL,read_id VARCHAR(10) DEFAULT NULL,state VARCHAR(50) DEFAULT NULL,kj_number INT(4) DEFAULT NULL,kejie VARCHAR(10) DEFAULT NULL,PRIMARY KEY (js_id),KEY read_id (read_id),CONSTRAINT js_card_ibfk_1 FOREIGN KEY (read_id) REFERENCES reader (read_id))

创建读者表:

CREATE TABLE reader (read_id VARCHAR(10) NOT NULL,read_name VARCHAR(20) NOT NULL,read_sex CHAR(2) NOT NULL,read_tel INT(20) NOT NULL,js_id CHAR(5) NOT NULL,PRIMARY KEY (read_id),KEY js_id (js_id),CONSTRAINT reader_ibfk_1 FOREIGN KEY (js_id) REFERENCES js_card (js_id))

创建借还表:

CREATE TABLE borrow_back (js_id VARCHAR(10) DEFAULT NULL,read_id VARCHAR(10) DEFAULT NULL,book_id INT(10) DEFAULT NULL,borrowdate DATE DEFAULT NULL,due DATE DEFAULT NULL,shf_xvjie TINYINT(4) DEFAULT NULL,js_count INT(100) DEFAULT NULL,hs_count INT(100) DEFAULT NULL,text_jh VARCHAR(100) DEFAULT NULL,KEY bb1 (js_id),KEY bb2 (read_id),KEY bb3 (book_id),CONSTRAINT bb1 FOREIGN KEY (js_id) REFERENCES js_card (js_id),CONSTRAINT bb2 FOREIGN KEY (read_id) REFERENCES reader (read_id),CONSTRAINT bb3 FOREIGN KEY (book_id) REFERENCES book (book_id))

创建规则表:

CREATE TABLE sf_rule (read_id varchar(10) DEFAULT NULL,book_id int(10) DEFAULT NULL,js_id varchar(10) DEFAULT NULL,days int(30) DEFAULT NULL,num int(100) DEFAULT NULL,mony varchar(100) DEFAULT NULL,KEY js_id (js_id),KEY read_id (read_id),KEY book_id (book_id),CONSTRAINT sf_rule_ibfk_3 FOREIGN KEY (js_id) REFERENCES js_card (js_id),CONSTRAINT sf_rule_ibfk_1 FOREIGN KEY (read_id) REFERENCES reader (read_id),CONSTRAINT sf_rule_ibfk_2 FOREIGN KEY (book_id) REFERENCES book (book_id))

创建操作记录表:

CREATE TABLE record (jishu int(100) NOT NULL AUTO_INCREMENT,read_id varchar(10) NOT NULL,time datetime DEFAULT NULL,text varchar(200) DEFAULT NULL,PRIMARY KEY (jishu))

增加数据

INSERT into js_card VALUES('003','2021-03-29','rw3','最多借五本','5','');

删除数据

delete from record where read_id='rw1';

修改数据

UPDATE js_card SET state='不得超期10天' WHERE js_id='001';

查询数据

SELECT * from book_type;

存储过程

create procedure proc_borrow_book(IN a char(4),IN b int, IN m int,OUT state varchar(20))begindeclare read_count int default 0;declare book_count int default 0;declare stock int default 0;select count(read_id) INTO read_count from reader where read_id=a;if read_count>0 thenselect count(book_id) INTO book_count from book where book_id=b;if book_count >0 thenselect inventory INTO stock from book where book_id=b;if stock >= m thenset state='借书成功';elseset state='库存不足';end if;             elseset state = '图书不存在';end if;elseset state = '非学校人员';end if;end;

触发器

创建触发器实现借阅图书时,自动更新图书剩余量CREATE TRIGGER jie_1AFTER INSERTON borrow_backFOR EACH ROWUPDATE book SET residue=residue-NEW .js_count WHERE book_id=NEW .book_id ;创建触发器实现借阅图书时,自动更新借阅证的可借量CREATE TRIGGER jie_2BEFORE INSERTON borrow_backFOR EACH ROWUPDATE js_card SET kj_number=kj_number-NEW .js_count WHERE js_id=NEW .js_id;创建触发器实现还书图书时,自动更新图书的剩余量DELIMITER @@CREATE TRIGGER huan_1BEFORE UPDATEON borrow_backFOR EACH ROWBEGINIF OLD .due IS NULL AND NEW .due IS NOT NULLTHENUPDATE book SET residue=residue+NEW .hs_count WHERE book_id=NEW .book_id;END IF;END @@

  6.总结

这个图书馆系统我写了好长时间,而且也改了很多次,因为写的不是这不完整就是那不完整,总会有一些问题,第一次写的时候,一次就只能增加一条信息,第二次写的时候又出现了错误,增加信息是无限循环,总之,出现了很多错误,来来回回改了无数次,我学到很多知识,也学会如何去写一个完整的系统,写系统时应该注意什么。

我们写这个图书管理系统,就是一个很大的挑战我们都要去勇敢的迎接挑战,写代码过程中,我们也会遇到很多问题,我们应该去慢慢解决,不是后退,因为只有我们练得多了,解决的问题多了,才会有掌握写代码的技巧。我们也要相信自己,对自己有自信,还应该多花时间去学好我们的专业课。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/616850.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android Retrofit使用详情

一、 Retrofit是什么 Retrofit是Android用来接口请求的网络框架,内部是基于OkHttp实现的,retrofit负责接口请求的封装,retrofit可以直接将接口数据解析为Bean类、List集合等,直接简化了中间繁琐的数据解析过程 二、 Retrofit的简单…

必须掌握的100+个Linux命令大全【持续更新中】

别有一番风趣的alias … note:: 寒蝉凄切,对长亭晚,骤雨初歇。 柳永《雨霖铃》 Linux alias命令用于设置指令的别名,可以将比较长的命令进行简化。 默认情况下会输出当前的设置: $ alias lls -lah lals -lAh llls -lh lsls --…

C++学习笔记——多态与静态联编和动态联编

目录 一、多态 二、静态联编(Static Binding)和动态联编(Dynamic Binding) 2.1静态联编 2.2动态联编 一、多态 是C中面向对象编程的一个核心概念,它允许派生类对象替代其基类对象,从而实现代码重用和扩…

代码随想录算法训练营第17天 | 110.平衡二叉树 + 257. 二叉树的所有路径 + 404.左叶子之和

今日内容 110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和 110.平衡二叉树 - Easy 题目链接:. - 力扣(LeetCode) 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为&#xff1…

springboot注解@PropertySource作用

简介 PropertySource 是 Spring 框架中的一个注解,用于指定一个或多个属性文件(通常是.properties文件)这些文件包含了应用程序需要的配置信息。当你在 Spring 的配置类中使用此注解时,Spring 容器会加载这些属性文件&#xff0c…

01.坦克大战项目-Java绘图坐标体系

01.坦克大战项目- Java绘图 01. Java绘图坐标体系 1. 坐标体系介绍 ​ 下图说明了java坐标系。坐标原点位于左上角,以像素为单位。在Java坐标系中,第一个是x坐标系,表示当前位置为水平方向,距离坐标原点x个像素;第二…

揭露欧拉骗局4.“Σ1/n²=π²/6”里的猫腻

自然数平方倒数求和Σ1/n是一个并不复杂的问题,但它困扰了欧洲大陆整整90年,在欧系数学里它被称为“巴塞尔级数”。 解决巴塞尔级数让欧拉一战成名,然而欧拉采用的方法对数学这门学问是严重的侮辱。数学是工具学科,数学的宗旨是化…

Asp .Net Core 系列: 集成 Consul 实现 服务注册与健康检查

文章目录 什么是 Consul?安装和运行 ConsulAsp .Net Core 如何集成 Consul 实现服务注册和健康检查Consul.AspNetCore 中的 AddConsul 和 AddConsulServiceRegistration 方法 究竟做了什么?AddConsul 方法AddConsulServiceRegistration 方法 配置 Consul 检查服务封…

【椒盐玉兔】GPTs Store 商店的TOP100 自定义GPT使用报告

详细的图文报告有100张图,因为太长就放网盘链接 链接:百度网盘 请输入提取码 提取码:ub2n 解压密码:heehel 更多作品:长期更新国内外,中英文AI人工智能作品 整理获取 通过算法,筛选出了目前访…

每天刷两道题——第十四天

1.1矩阵置零 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用原地算法。 输入:matrix [[0,1,2,0],[3,4,5,2],[1,3,1,5]] 输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]] 原地算法(…

Java面试题(java高级面试题)

线程池的核心线程数设置为多大比较合理? Worker线程在执行的过程中,有一部计算时间需要占用CPU,另一部分等待时间不需要占用CPU,通过量化分析,例如打日志进行统计,可以统计出整个Worker线程执行过程中这两…

书生·浦语大模型--第二节课笔记

书生浦语大模型--第二节课 大模型及InternLM基本介绍实战部分demo部署准备工作模型下载代码准备终端运行web demo 运行 Lagent 智能体工具调用 Demo准备工作Demo 运行 浦语灵笔图文理解创作 Demo环境准备下载模型下载代码运行 大模型及InternLM基本介绍 大模型 定义&#xff…

一阶低通滤波器

一阶低通滤波器 X为输入,Y为滤波后得到的输出值;本次的输出结果主要取决于上次的滤波输出值,其中a是和滤波效果有关的一个参数,称为滤波系数;它决定新采样值在本次滤波结果中所占的权重; 滤波系数a越小&a…

500mA High Voltage Linear Charger with OVP/OCP

一、General Description YHM2810 is a highly integrated, single-cell Li-ion battery charger with system power path management for space-limited portable applications. The full charger function features Trickle-charge, constant current fast charge and const…

Java中的栈和队列操作,相互实现(力扣 232, 225)

栈和队列(Java) Java中的 栈 & 队列 操作栈的使用队列的使用 LeetCode 232. 用栈实现队列我的代码 LeetCode 225. 用队列实现栈我的代码 Java中的 栈 & 队列 操作 栈的使用 栈的方法功能Stack()构造一个空的栈E push(E e)将e入栈,并…

【开源】基于JAVA语言的民宿预定管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用例设计2.2 功能设计2.2.1 租客角色2.2.2 房主角色2.2.3 系统管理员角色 三、系统展示四、核心代码4.1 查询民宿4.2 新增民宿4.3 新增民宿评价4.4 查询留言4.5 新增民宿订单 五、免责说明 一、摘要 1.1 项目介绍 基于…

Vulnhub-GoldenEye

一、信息收集 nmap探测:nmap -p 1-65535 -T4 -A -v 192.168.1.9 PORT STATE SERVICE VERSION 25/tcp open smtp Postfix smtpd |_smtp-commands: ubuntu, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN |_…

Python基础知识:整理12 JSON数据格式的转换

首先导入python中的内置包json import json 1 准备一个列表,列表内每个元素都是字典,将其转换为JSON 使用json.dumps()方法 data [{"name": "John", "age": 30}, {"name": "Jane", "age":…

HarmonyOS Stage模型 UIAbility生命周期状态

UIAbility的生命周期包括Create、Foreground、Background、Destroy四个状态 Create状态,在UIAbility实例创建时触发,对应onCreate回调。可以在onCreate回调中进行相关初始化操作 import UIAbility from ohos.app.ability.UIAbility; import window from…

NAND SCA接口对性能影响有多大?

在多LUN场景下,SCA接口尤其有助于提高随机读取性能。通过合理安排读取命令和等待时间(如tR),SCA接口可以在一个LUN完成读取后立即开始另一个LUN的读取操作,而无需等待整个DQ总线空闲,从而减少了延迟和提高了…