基于Node.js+Vue+MySQL实现的(Web)图书管理系统

1 需求分析

本图书管理系统主要实现对图书馆的管理:图书、读者、管理员、借阅。由此,结构可分为:图书管理、读者管理、管理员管理、借还管理、罚单管理、还书信息。

1.1 需求定义

1.1.1 图书管理

可对图书信息进行浏览、编辑(包括对图书的修改、入库、删除)

  1. 浏览图书信息
  2. 编辑图书信息:修改、入库、删除

1.1.2 读者管理

可对读者信息进行浏览、编辑(包括对读者的修改、入库、删除)

  1. 浏览读者信息
  2. 编辑读者信息:修改、添加、删除

1.1.3 管理员管理

可对管理员信息进行浏览、编辑(包括对管理员的修改、入库、删除)

  1. 浏览管理员信息
  2. 编辑管理员信息:修改、添加、删除

1.1.4 借还管理

可对借书信息进行浏览;进行借书操作,每次只能进行一次操作,也可对新增借书进行删除;进行还书操作,如逾期欠费有提示,需要进行缴费操作,才能还书

  1. 浏览图书借书信息
  2. 借书(每次只能操作一次)-> 可对新增借书的删除
  3. 还书(逾期欠费需缴费才能还书)

1.1.5 罚单管理

可对罚单信息进行浏览;进行缴费操作;对已缴费的记录进行清理删除

  1. 浏览罚单信息
  2. 缴费
  3. 删除已缴费的记录

1.1.6 还书信息

可浏览还书信息

1.2 功能需求

  1. 图书的查阅、修改、删除、图书入库:编号、书名、作者、出版社、在库数、类别
  2. 读者的查询、修改、删除、新增读者:借书证号、姓名、班级、院系
  3. 管理员的查询、修改、删除、新增管理员:编号、姓名、负责书库
  4. 借还信息的查询、还书(逾期欠费需缴费才能还书)、新增借书:借书证号、读者名、编号、书名、借书日期、预计归还日期,可删除新增记录
  5. 罚单的查阅、缴费、删除(已缴费)
  6. 还书信息的查阅

图 1 图书管理系统功能图

2 概念结构设计

根据需求分析我们规划出实体有:读者信息实体、管理员信息实体、图书信息实体。各个实体具体的描述 E-R 实体如下。

2.1 读者信息模块

读者属性包括:借书证号、姓名、班级、院系

2.2 图书信息模块

图书属性包括:编号、书名、作者、出版社、在库数、类别

2.3 管理员信息模块

管理员属性包括:编号、姓名、负责书库

2.4 完整的 E-R 图

实体间的联系:

  1. 读者借书:拥有借书证号、图书编号、借出日期、应归还日期 属性
  2. 读者还书:拥有借书证号、图书编号、借出日期、应归还日期、归还日期、推迟天数、罚款总额 属性

3 逻辑结构设计

3.1 数据库逻辑设计

由 E-R 模型得到关系模型:借阅关系模型

3.3.1 借阅关系

属性:借书证号、图书编号、借出日期、应归还日期、归还日期、推迟天数、罚款总额

主键:借书证号、图书编号

3.2 数据库逻辑结构

  1. 图书信息表(属性:id(INT(11))、name(VARCHAR(20))、author(VARCHAR(20))、publisher(VARCHAR(20))、num(INT(11))、sort(VARCHAR(20)))
  2. 读者信息表(属性:id(INT(11))、name(VARCHAR(20))、class(VARCHAR(20))、department(VARCHAR(20)))
  3. 管理员信息表(属性:id(INT(11))、name(VARCHAR(20))、stackroom(VARCHAR(10)))
  4. 借书信息表(属性:bookId(INT(11))、readerId(INT(11))、borrow_date(DATE)、expect_rerurn_date(DATE))
  5. 罚单信息表(属性:bookId(INT(11))、readerId(INT(11))、over_date(INT)、ticket_fee(FLOAT)、payoff(INT))
  6. 还书信息表(属性:bookId(INT(11))、readerId(INT(11))、borrow_date(DATE)、rerurn_date(DATE))

3.2.1 图书信息表

4 物理设计

由上述数据库逻辑结构转换为实际数据模型,本图书管理系统的各个表如下:

4.1 建立图书馆数据库(library)

CREATE DATABASE library;

4.2 建立图书表(book)

CREATE TABLE `book` (
    `id` INT(11) NOT NULL DEFAULT '0',
    `name` VARCHAR(20) NOT NULL,
    `author` VARCHAR(20) NOT NULL,
    `publisher` VARCHAR(20) NOT NULL,
    `num` INT(11) NOT NULL,
    `sort` VARCHAR(20) NOT NULL,
    PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
        ENGINE=InnoDB
               ;
desc book;

4.3 建立读者表(reader)

CREATE TABLE `reader` (
    `id` INT(11) NOT NULL DEFAULT '0',
    `name` VARCHAR(20) NOT NULL,
    `class` VARCHAR(10) NOT NULL,
    `department` VARCHAR(10) NOT NULL,
    PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
        ENGINE=InnoDB
               ;
desc reader;

4.4 建立借阅表(borrow)

CREATE TABLE `borrow` (
    `bookId` INT(11) NOT NULL COMMENT '学生编号',
    `readerId` INT(11) NOT NULL COMMENT '图书编号',
    `borrow_date` DATE NULL DEFAULT NULL COMMENT '借书时间',
    `expect_return_date` DATE NULL DEFAULT NULL COMMENT '预期归还时间',
    PRIMARY KEY (`bookId`, `readerId`),
    INDEX `READERID` (`readerId`, `bookId`),
    CONSTRAINT `BOOKID` FOREIGN KEY (`bookId`) REFERENCES `book` (`id`),
    CONSTRAINT `READERID` FOREIGN KEY (`readerId`) REFERENCES `reader` (`id`)
)
COMMENT='存储学生的借书信息'
        COLLATE='latin1_swedish_ci'
                ENGINE=InnoDB
                       ;
desc borrow;

4.5 建立管理员表(administartors)

CREATE TABLE `administrators` (
    `id` INT(11) NOT NULL DEFAULT '0',
    `name` VARCHAR(20) NOT NULL,
    `stackroom` VARCHAR(10) NOT NULL,
    PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
        ENGINE=InnoDB
               ;
desc administrators;

4.6 建立还书信息表(return_table)

CREATE TABLE `return_table` (
    `bookId` INT(11) NOT NULL,
    `readerId` INT(11) NOT NULL,
    `borrow_date` DATE NULL DEFAULT NULL,
    `return_date` DATE NULL DEFAULT NULL COMMENT '实际还书情况',
    PRIMARY KEY (`bookId`, `readerId`),
    INDEX `readerId` (`readerId`, `bookId`),
    CONSTRAINT `BOOKID_R` FOREIGN KEY (`bookId`) REFERENCES `book` (`id`),
    CONSTRAINT `READERID_R` FOREIGN KEY (`readerId`) REFERENCES `reader` (`id`)
)
COMMENT='存储学生的归还信息'
        COLLATE='latin1_swedish_ci'
                ENGINE=InnoDB
                       ;
desc return_table;

4.7 建立罚单信息表(ticket)

CREATE TABLE `ticket` (
    `readerId` INT(11) NOT NULL COMMENT '学生编号',
    `bookId` INT(11) NOT NULL COMMENT '书籍编号',
    `over_date` INT(11) NULL DEFAULT NULL COMMENT '超期天数',
    `ticket_fee` FLOAT NULL DEFAULT NULL COMMENT '处罚金额',
    `payoff` INT(11) NULL DEFAULT NULL,
    PRIMARY KEY (`readerId`, `bookId`),
    INDEX `BOOKID_T` (`bookId`),
    CONSTRAINT `BOOKID_T` FOREIGN KEY (`bookId`) REFERENCES `book` (`id`),
    CONSTRAINT `READERID_T` FOREIGN KEY (`readerId`) REFERENCES `reader` (`id`)
)
COMMENT='存储学生的罚单信息'
        COLLATE='latin1_swedish_ci'
                ENGINE=InnoDB
                       ;
desc ticket;

5 实施过程

5.1 装载数据过程

5.1.1 用 DML 语句对 book 表加入数据

INSERT INTO `library`.`book` (`id`, `name`, `author`, `publisher`, `num`, `sort`) VALUES ('8', '时事报告', '张习文', '时事报告杂志社', '1', '政治');
INSERT INTO `library`.`book` (`id`, `name`, `author`, `publisher`, `num`, `sort`) VALUES ('9', '计算机网络安全', '马利', '清华大学出版社', '1', '计算机');
select * from book;

5.1.2 用 DML 语句对 reader 表加入数据

INSERT INTO `library`.`reader` (`id`, `name`, `class`, `department`) VALUES ('6', '张三', '1603', '机器人学院');
INSERT INTO `library`.`reader` (`id`, `name`, `class`, `department`) VALUES ('7', '李四', '1602', '金融学院');
select * from reader;

5.1.3 用 DML 语句对 administartors 表加入数据

INSERT INTO `library`.`administrators` (`id`, `name`, `stackroom`) VALUES ('4', '王五', '外国文学');
INSERT INTO `library`.`administrators` (`id`, `name`, `stackroom`) VALUES ('5', '江六', '中国文学');
select * from administrators;

5.2 设计视图

5.2.1 在 reader,borrow 和 book 上创建借书者的全面信息视图 reader_borrow

create view reader_borrow as
select reader.id AS reader_id,reader.name AS reader_name,book.id AS book_id,book.name AS book_name
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神仙别闹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值