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.rhkb.cn/news/254091.html

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

相关文章

JPEG图像的压缩标准(1)

分3个博客详细介绍JPEG图像的压缩标准,包含压缩和解压缩流程,熵编码过程和文件存储格式。 一、JPEG压缩标准概述 JPEG压缩标准由国际标准化组织 (International Organization for Standardization, ISO) 制订,用于静态图像压缩。JPEG标准包…

MVC框架学习

大一的时候写过一个mvc框架的跑酷游戏,但是那时候基础不扎实,没学明白也没听懂。现在深入的学习一下 以下内容参考:MVC 模式 | 菜鸟教程 (runoob.com) MVC 模式 MVC 模式代表 Model-View-Controller(模型-视图-控制器&#xff…

vue3 之 商城项目—一级分类

整体认识和路由配置 场景:点击哪个分类跳转到对应的路由页面,路由传对应的参数 router/index.js import { createRouter, createWebHashHistory } from vue-router import Layout from /views/Layout/index.vue import Home from /views/Home/index.vu…

智慧自助餐饮系统(SpringBoot+MP+Vue+微信小程序+JNI+ncnn+YOLOX-Nano)

一、项目简介 本项目是配合智慧自助餐厅下的一套综合系统,该系统分为安卓端、微信小程序用户端以及后台管理系统。安卓端利用图像识别技术进行识别多种不同菜品,识别成功后安卓端显示该订单菜品以及价格并且生成进入小程序的二维码,用户扫描…

transformer剪枝论文汇总

文章目录 NN Pruning摘要实验 大模型剪枝LLM-PrunerSparseGPT LTPVTPWidth & Depth PruningPatch SlimmingDynamicViTSPViTDynamicBERTViT SlimmingFastFormersNViTUVCPost-training pruning NN Pruning 《Block Pruning For Faster Transformers》 《为更快的transformer…

Django学习记录02

1.请求与响应 1.1get与post的区别 get 一般是从url输入地址,会调用get请求 post 一般是内部数据传输# get请求 def something(request):# req是一个对象,封装了用户发送过来的所有请求相关数据# 1.获取请求方式 http://localhost:8000/something# pri…

Go 语言 for 的用法

For statements 本文简单翻译了 Go 语言中 for 的三种用法,可快速学习 Go 语言 for 的使用方法,希望本文能为你解开一些关于 for 的疑惑。详细内容可见文档 For statements。 For statements with single condition 在最简单的形式中,只要…

centos7编译安装redis

一、环境 系统:CentOS Linux release 7.9.2009 (Core) redis版本:redis 6.0.6 二、安装及部署 当前最新稳定版本是redis 6.0.6 国内网址:http://www.redis.cn redis下载列表:http://download.redis.io/releases/ 下载 wge…

机器学习--K-近邻算法常见的几种距离算法详解

文章目录 距离度量1 欧式距离(Euclidean Distance)2 曼哈顿距离(Manhattan Distance)3 切比雪夫距离 (Chebyshev Distance)4 闵可夫斯基距离(Minkowski Distance)5 标准化欧氏距离 (Standardized EuclideanDistance)6 余弦距离(Cosine Distance)7 汉明距离(Hamming Distance)【…

14.scala隐式转换

目录 概述实践代码执行结果 结束 概述 隐式转换:偷偷的(隐式)对现有功能进行增强(转换) 实践 代码 package com.fun.scalaimport java.io.File import scala.io.Sourceobject ImplicitApp {def main(args: Array[String]): Unit {// implicit 2 to 等价 &…

K8S之Pod常见的状态和重启策略

Pod常见的状态和重启策略 常见的Pod状态PendingPodScheduledUnschedulablePodInitializingImagePullBackOffInitializedRunningErrorCrashLoopBackOffTerminatingSucceededFailedEvictedUnknown Pod的重启策略使用Always重启策略使用Never重启策略使用OnFailure重启策略(常用) …

go消息队列RabbitMQ - 订阅模式-direct

1.发布订阅 在Fanout模式中,一条消息,会被所有订阅的队列都消费。但是,在某些场景下,我们希望不同的消息被不同的队列消费。这时就要用到Direct类型的Exchange。 在Direct模型下: 队列与交换机的绑定,不能…

NuxtJs安装Sass后出现ERROR:Cannot find module ‘webpack/lib/RuleSet‘

最近了解NuxtJs时,发现问题比较多,对于初学者来说是件比较头痛的事。这次是安装sass预处理器,通过命令安装后,出现了ERROR:Cannot find module webpack/lib/RuleSet 错误,于是根据之前经验,对版…

解析spritf和sscanf与模拟常用字符串函数strchr,strtok(二)

今天又来继续我们的字符串函数的文章,这也是最后一篇了。希望这两篇文章能让各位理解透字符串函数。 目录 strchr strtok sprintf和sscanf strchr strchr 是一个用于在字符串中查找特定字符首次出现位置的函数。以下是解析和模拟实现 strchr 函数的示例&…

在Visual Studio中引用和链接OpenSceneGraph (OSG) 库

在Visual Studio中引用和链接OpenSceneGraph (OSG) 库,按照以下步骤操作: 构建或安装OSG库 下载OpenSceneGraph源代码(如3.0版本)并解压。使用CMake配置项目,为Visual Studio生成解决方案文件。通常您需要设置CMake中的…

Bee+SpringBoot稳定的Sharding、Mongodb ORM功能(同步 Maven)

Hibernate/MyBatis plus Sharding JDBC Jpa Spring data GraphQL App ORM (Android, 鸿蒙) Bee 小巧玲珑!仅 860K, 还不到 1M, 但却是功能强大! V2.2 (2024春节・LTS 版) 1.Javabean 实体支持继承 (配置 bee.osql.openEntityCanExtendtrue) 2. 增强批…

Spring Boot + 七牛OSS: 简化云存储集成

引言 Spring Boot 是一个非常流行的、快速搭建应用的框架,它无需大量的配置即可运行起来,而七牛云OSS提供了稳定高效的云端对象存储服务。利用两者的优势,可以为应用提供强大的文件存储功能。 为什么选择七牛云OSS? 七牛云OSS提供了高速的…

PCIE Order Set

1 Training Sequence Training Sequence是由Order Set(OS) 组成,它们主要是用于bit aligment,symbol aligment,交换物理层的参数。当data_rate 2.5GT or 5GT 它们不会被扰码(scramble),当date_rate 8GT or higher 根据特殊的规则…

第59讲订单数据下拉实现

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;/*** 订单查询 type值 0 全部订单 1待付款 2 待收货 3 退款/退货* param type* return*/RequestMapping("/list")public R list(Integer type,Integer page,Integer pageSize){System.out.pri…

Golang数据库编程详解 | 深入浅出Go语言原生数据库编程

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站https://www.captainbed.cn/kitie。 Golang学习专栏:https://blog.csdn.net/qq_35716689/category_12575301.html 前言 对数据库…