文章目录
本数据库的用户主要是学校人员,通过对用户需求的收集和分析,获得用户对数据库的如下要求。
- 信息需求分析
(1) 图书信息:包括书籍编号,书籍名称,出版社,作者,库存量,出版日期,价格,库存,剩余量,类别等;
(2) 借阅证信息:包括借阅证编号,办证日期,可借数量等;
(3) 读者信息:读者编号,读者姓名,读者性别,读者电话
(4) 图书借还信息:包括图书编号,借阅证编号,读者编号,借阅日期,借阅数量,归还日期,归还数量,超期天数,罚款金额等;
- 功能需求
学校图书借阅系统主要由:图书信息管理,读者信息管理,借阅证信息管理,借还信息管理,规则信息等模块组成。进入改系统后,用户可以对系统中的信息进行添加、修改、删除、查询等操作,包括以下功能:
(1) 图书信息管理模块:对图书信息进行增、删、改、查等操作;
(2) 读者信息管理模块:对读者信息进行增、删、改、查等操作;
(3) 借阅证信息管理模块:增加办卡,注销借阅卡等操作;
(4) 借还信息管理模块:进行借书、续借、还书等操作,查找出逾期的人及其逾期的天数;
(5) 操作记录管理模块:对读者的借,还,续借进行实时记录,便于管理员查找出指定读者的所有借阅记录。
(6) 规则信息管理模块:记录借书逾期的人及其逾期的天数,罚款。
- 数据项:书籍类别编号
含义说明:书籍类别的编号
类型:varchar
长度:5- 数据项:书籍类别名称
含义说明:书籍类别的名称
类型:varchar
长度:100- 数据项:书籍编号
含义说明:书籍的编号
类型:int
长度:30- 数据项:书籍名称
含义说明:书籍的名称
类型:varchar
长度:30- 数据项:作者
含义说明:书籍的作者
类型:varchar
长度:30- 数据项:出版日期
含义说明:书籍的出版日期
类型:date- 数据项:出版社
含义说明:书籍的出版社
类型:varchar
长度:50- 数据项:价格
含义说明:书籍的价格
类型:int
长度:10- 数据项:库存
含义说明:相同书籍的库存
类型:int
长度:100
取值范围:自然数- 数据项:剩余量
含义说明:相同书籍的剩余量
类型:int
长度:100
取值范围:自然数且小于库存量- 数据项:借阅证编号
含义说明:读者所办理的借阅证编号
类型:char
长度:5- 数据项:办证日期
含义说明:读者所办理的借阅证日期
类型:date- 数据项:可借数量
含义说明:该借阅证的可借数量
类型:int
长度:4- 数据项:读者编号
含义说明:读者的编号
类型:varchar
长度:10- 数据项:读者姓名
含义说明:读者的姓名
类型:varchar
长度:20- 数据项:性别
含义说明:读者的性别
类型:char
长度:10- 数据项:电话
含义说明:读者的电话
类型:int
长度:20- 数据项:借书日期
含义说明:图书被借出的日期
类型:date- 数据项:归还日期
含义说明:借出的图书归还的日期
类型:date- 数据项:是否续借
含义说明:0为否,1为续借
类型:int
长度:2- 数据项:借书数量
含义说明: 借书的数量
类型:int
长度:100- 数据项:还书数量
含义说明: 还书的数量
类型:int
长度:100- 数据项:超期天数
含义说明:借书期限超出了10天
类型:int
长度:30- 数据项:本书
含义说明:超期的本书
类型:int
长度:100- 数据项:罚款金额
含义说明:超期罚款(元/本/天)
类型:varchar
长度:100- 数据项:说明
含义说明:对操作进行备注
类型:varchar
长度:100
1.数据流程图
学校图书管理系统数据流程图设计,如图2-1所示:

2.系统E-R图
(1)图书实体E-R图如图2-2所示:

(2)图书类别实体E-R图如图2-3所示:

(3)借阅证实体E-R图如图2-4所示:

图2-4 借阅证实体E-R图
(4)读者实体E-R图如图2-5所示:

图2-5 读者实体E-R图
(5)规则实体E-R图如图2-6所示:



学校图书管理系统关系模型
通过E-R图转换得到关系模型如下:
(1) book(book_id,book_name,author,pubdate,publish,price,inventory,residue,typeid)
(2) book_type(typeid,typename)
(3) js_crad(js_id,period,read_id,state,kj_number)
(4) reader(read_id,read_name,read_sex,read_tel,js_id
(5) borrow_back(js_id,read_id,book_id,borrowdate,due,shf_xvjie,js_count,hs_count,text_jh)
(6) sf_rule(read_id,book_id,js_id,days,num,mony)
(7) record(jishu, read_id, time, text)
说明:
(1) book关系模型中有9个属性,其中book_id(书籍编号)为主键,typeid为外键;
(2) book_type表有2个属性,其中typeid为主键,图书分类;
(3) js_crad表有5个属性,其中js_id为主键,read_id为外键;
(4) reader表中有5个属性,其中read_id为主键,js_id为外键
(5) borrow_back有9个属性,其中js_id,read_id,book_id为外键,没有主键
(6) sf_rule表有6个属性,其中js_id,read_id,book_id为外键,没有主键
(7) record表有4个属性,其中jishu,为主键。
关系模型对应的二维表
(1) book表信息如下表所示:(书籍信息)


(3) js_card表信息如下表所示:(借阅证信息)





CREATE DATEBASE library;
CREATE TABLE
book(
book_idINT(10) NOT NULL,
book_nameVARCHAR(30) NOT NULL,
authorVARCHAR(30) NOT NULL,
pubdateDATE NOT NULL COMMENT ‘出版日期’,
publishVARCHAR(50) NOT NULL COMMENT ‘出版社’,
PriceINT(20) NOT NULL,
inventoryINT(100) NOT NULL COMMENT ‘总数量’,
residueINT(100) NOT NULL COMMENT ‘剩余量’,
typeidVARCHAR(20) NOT NULL COMMENT ‘书籍类别’,
PRIMARY KEY (book_id),
KEYbo1(typeid),
CONSTRAINTbook_ibfk_1FOREIGN KEY (typeid) REFERENCESbook_type(typeid)
)
CREATE TABLE
book_type(
typeidVARCHAR(5) NOT NULL,
typenameVARCHAR(100) DEFAULT NULL,
PRIMARY KEY (typeid)
)
CREATE TABLE
js_card(
js_idCHAR(5) NOT NULL,
periodDATE DEFAULT NULL COMMENT ‘签证日期’,
read_idVARCHAR(10) DEFAULT NULL,
stateVARCHAR(50) DEFAULT NULL COMMENT ‘说明’,
kj_numberINT(4) DEFAULT NULL COMMENT ‘可借数量’,
is-kejieVARCHAR(10) DEFAULT NULL COMMENT ‘是否可借’,
PRIMARY KEY (js_id),
KEYread_id(read_id),
CONSTRAINTjs_card_ibfk_1FOREIGN KEY (read_id) REFERENCESreader(read_id)
)
CREATE TABLE
reader(
read_idVARCHAR(10) NOT NULL,
read_nameVARCHAR(20) NOT NULL,
read_sexCHAR(2) NOT NULL,
read_telINT(20) NOT NULL,
js_idCHAR(5) NOT NULL,
PRIMARY KEY (read_id),
KEY1(js_id),
CONSTRAINTreader_ibfk_1FOREIGN KEY (js_id) REFERENCESjs_card(js_id)
)
CREATE TABLE
borrow_back(
js_idVARCHAR(10) DEFAULT NULL COMMENT ‘借书证号’,
read_idVARCHAR(10) DEFAULT NULL COMMENT ‘读者编号’,
book_idINT(10) DEFAULT NULL COMMENT ‘书籍编号’,
borrowdateDATE DEFAULT NULL COMMENT ‘出借日期’,
dueDATE DEFAULT NULL COMMENT ‘归还日期’,
shf_xvjieTINYINT(4) DEFAULT NULL COMMENT ‘是否续借’,
js_countINT(100) DEFAULT NULL COMMENT ‘借书个数(本)’,
hs_countINT(100) DEFAULT NULL COMMENT ‘还书个数(本)’,
text_jhVARCHAR(100) DEFAULT NULL COMMENT ‘借还说明’,
KEYbb1(js_id),
KEYbb2(read_id),
KEYbb3(book_id),
CONSTRAINTbb1FOREIGN KEY (js_id) REFERENCESjs_card(js_id),
CONSTRAINTbb2FOREIGN KEY (read_id) REFERENCESreader(read_id),
CONSTRAINTbb3FOREIGN KEY (book_id) REFERENCESbook(book_id)
)
CREATE TABLE
sf_rule(read_idvarchar(10) DEFAULT NULL,
book_idint(10) DEFAULT NULL COMMENT ‘书籍编号’,
js_idvarchar(10) DEFAULT NULL COMMENT ‘借书证号’,
daysint(30) DEFAULT NULL COMMENT ‘期限’,
numint(100) DEFAULT NULL COMMENT ‘本书’,
monyvarchar(100) DEFAULT NULL COMMENT ‘超期处罚’,
KEYjs-id(js_id),
KEYread_id(read_id),
KEYbook_id(book_id),
CONSTRAINTsf_rule_ibfk_3FOREIGN KEY (js_id) REFERENCESjs_card(js_id),
CONSTRAINTsf_rule_ibfk_1FOREIGN KEY (read_id) REFERENCESreader(read_id),
CONSTRAINTsf_rule_ibfk_2FOREIGN KEY (book_id) REFERENCESbook(book_id)
CREATE TABLE
record(
jishuint(100) NOT NULL AUTO_INCREMENT,
read_idvarchar(10) NOT NULL,
timedatetime DEFAULT NULL,
textvarchar(200) DEFAULT NULL,
PRIMARY KEY (jishu)
)
1.book表信息
SQL语句:INSERT INTO library.book
VALUES(4, 《底层逻辑》,刘一,2021-12-20, 人民出版社, 34, 100, 100, B1);
结果如下图4-1:

2.js_card表信息
SQL语句:INSERT INTO library.js_card
VALUES(a11,2021-12-2,re1,最多借5本,不得超期,5);
结果如图4-2所示:
3.reader表信息
SQL语句:INSERT INTO library.reader
VALUES(re1,刘三,男,199999991,a11);
结果如图4-3所示:

1.实现信息的添加
结果如图4-4所示:

2. 实现信息的删除
删除操作记录表中读者编号为re3的借还记录
结果如图4-5所示:

3.信息修改操作
UPDATE js_card SET state=‘不得超期10天’ WHERE js_id=‘b11’;
结果如图4-6所示:

4.信息查询操作
SELECT * FROM book_type;
结果如图4-7所示:

5. 创建触发器实现借阅图书时,自动更新图书剩余量
CREATE TRIGGER jie_1 – 借书减少剩余量
AFTER INSERT
ONborrow_back
FOR EACH ROW
UPDATEbookSETresidue=residue-NEW .js_countWHEREbook_id=NEW .book_id;
结果如图4-8所示:

6. 创建触发器实现借阅图书时,自动更新借阅证的可借量
CREATE TRIGGER jie_2 – 借书减少借阅证的可借量
BEFORE INSERT
ONborrow_back
FOR EACH ROW
UPDATEjs_cardSETkj_number=kj_number-NEW .js_countWHEREjs_id=NEW .js_id;
结果如图4-9所示:

7. 创建触发器实现还书图书时,自动更新图书的剩余量
DELIMITER @@
CREATE TRIGGER huan_1 – 还书增加剩余量
BEFORE UPDATE
ONborrow_back
FOR EACH ROW
BEGIN
IF OLD .dueIS NULL AND NEW .dueIS NOT NULL
THEN
UPDATEbookSETresidue=residue+NEW .hs_countWHEREbook_id=NEW .book_id;
END IF;
END @@

8.创建触发器实现归还图书时,自动更新借阅卡的可借量
CREATE TRIGGER huan_2 – 还书增加借阅卡的可借量
BEFORE UPDATE
ONborrow_back
FOR EACH ROW
UPDATEjs_cardSETkj_number=kj_number+NEW .hs_countWHEREjs_id=NEW .js_id;
结果如图4-11所示:

9. 创建触发器实现借还图书时,记录的自动更新
DELIMITER@@-- 创建触发器,实现借,还,续借时,记录的自动更新
CREATE TRIGGER record222
AFTER UPDATE ONborrow_back
FOR EACH ROW
BEGIN
INSERT INTOrecord
VALUES(NULL,NEW .read_id,NOW(),NEW .text_jh);
END@@
结果如图4-12所示:

11.创建存储过程查询指定读者的借书情况
DELIMITER @@
CREATE PROCEDURE reader_xx(IN a VARCHAR(10))
BEGIN
SELECT * FROMrecordWHEREread_id=a ;
END@@
结果如图4-14所示:

12.创建视图查询图书的书籍编号,书籍名称,库存量,剩余量
CREATE VIEW v_book
AS
SELECTbook_idAS 书籍编号 ,book_name书籍名称,
inventory库存量,residue剩余量
FROMbook;
结果如图4-15所示:
13.查找超期10天的人
SELECT *,TIMESTAMPDIFF(DAY,
borrowdate,due)-10 超期天数
FROMborrow_back
WHERE TIMESTAMPDIFF(DAY,borrowdate,due)>=10;
结果如图4-16所示:

14.创建存储过程计算罚款金额
DELIMITER @@
CREATE PROCEDURE mony(IN c VARCHAR(10))
BEGIN
SELECT , 0.2days*numAS 罚款金额 FROMsf_ruleWHEREjs_id=c;
END@@
DELIMITER ;
CALL mony(‘a11’);
结果如图4-17所示:

1.在数据库中备份数据,文件名为myemployees.sql
如图5-1所示:

2.转储与备份的导入
如图5-2所示:

对于这次的学校图书借阅管理系统的设计上,还存在一些细化的问题,该系统只能满足一般的功能需求,存在一定的缺陷。比如,先在借还表中查找借书逾期人员,然后需要手动将信息导入规则表中。
在读者进行借书时,缺少权限的设置。应该创建一个存储过程,传入借阅证号和书籍编号,没有图书时,输出“该书籍不存在”;借阅证的可借量为0时,输出“该卡不能借阅”。但对于数据库语法不够熟练,出错太多,该功能未能实现
最后,感谢老师和同学的指导和帮助,以后我会更加用心学习知识,并运用到实际中。
参考文献:
[1]数据库原理及应用:MySQL版:微课视频版/李月军,付良延编著.—北京:清华大学出版社,2019(2021.2重印).
[2] 钱雪忠、陈国俊等,数据库原理及应用实验指导[M].北京:北京邮电大学出版社,2015.
我正在使用i18n从头开始构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在rubyonrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi
我安装了ruby版本管理器,并将RVM安装的ruby实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby。有没有办法让emacs像shell一样尊重ruby的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el
是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s
电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。 准备工作: 1、U盘一个(尽量使用8G以上的U盘)。 2、一台正常联网可使用的电脑。 3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。 4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。 U盘启动盘制作步骤: 注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc
我想用这两种语言中的任何一种(最好是ruby)制作一个窗口管理器。老实说,除了我需要加载某种X模块外,我不知道从哪里开始。因此,如果有人有线索,如果您能指出正确的方向,那就太好了。谢谢 最佳答案 XCB,X的下一代API使用XML格式定义X协议(protocol),并使用脚本生成特定语言绑定(bind)。它在概念上与SWIG类似,只是它描述的不是CAPI,而是X协议(protocol)。目前,C和Python存在绑定(bind)。理论上,Ruby端口只是编写一个从XML协议(protocol)定义语言到Ruby的翻译器的问题。生
因为我现在正在做一些时间测量,我想知道是否可以在不使用Benchmark类或命令行实用程序time的情况下测量用户时间或系统时间。使用Time类只显示挂钟时间,而不显示系统和用户时间,但是我正在寻找具有相同灵active的解决方案,例如time=TimeUtility.now#somecodeuser,system,real=TimeUtility.now-time原因是我有点不喜欢Benchmark,因为它不能只返回数字(编辑:我错了-它可以。请参阅下面的答案。)。当然,我可以解析输出,但感觉不对。*NIX系统的time实用程序也应该可以解决我的问题,但我想知道是否已经在Ruby中实
这是我在ActiveAdmin中的自定义页面ActiveAdmin.register_page"Settings"doaction_itemdolink_to('Importprojects','settings/importprojects')endcontentdopara"Text"endcontrollerdodefimportprojectssystem"rakedataspider:import_projects_ninja"para"OK"endendend我想做的是,当我单击“导入项目”按钮时,我想在Controller中执行rake任务。但是我无法访问该方法。可能是什