数据库图书管理系统设计报告(基于软件工程)

文章目录

一、实验目的

通过充分查阅相关资料,学生自选题目作为实验课题,按照需求分析、概念设计、逻辑设计、数据库应用设计等开发步骤用数据库设计的方法、技术和原理规范设计一个完整的应用程序。

二、实验内容

选题方向

图书借阅管理系统(自助借阅)

设计背景

随着人们知识水平层次的提高,图书馆成为日常生活中不可缺少的一部分,图书管理也变得困难而重要,需要可靠的图书管理系统对图书进行有效的管理,理由如下:图书存书量和业务量庞大,仅靠传统的记帐式管理不可行;图书馆需要为学校或社会有需求者提供图书的详细信息和馆内库存情况,需要建立庞大的数据库,一个健全的图书管理系统可以极大的方便图书管理员的操作,减少图书管理员的工作量并使其能更有效的管理书库中的图书,实现了传统的图书管理工作的信息化建设。

第一章 需求分析

第一部分 系统设计目标

1.图书管理系统能够为一定数量的借阅者提供服务。每个借阅者能够拥有唯一标识其存在的编号。当借阅者交付押金后,图书馆向每一个借阅者发放阅览卡,阅览卡中包含每一个借阅者的编号和个人信息。系统通过一个单独的程序为借阅者提供服务,借阅者可以独立操作,不需要管理人员的干预,这些服务包括提供查询图书信息、查询个人信息服务、借阅图书和归还图书服务等。
2.当借阅者需要借阅书籍、归还书籍时不需要通过图书管理员进行,也就是说借阅者可以直接通过软件与系统交互,当借阅者借阅的图书数量超过限制时,不运行借阅者再进行借阅。
3.当借阅者借阅的图书超过一定的期限或所借图书有损坏时,需要对其进行处罚,借阅图书时需要阅览卡作为凭据,归还时也需要需要。
4.图书管理员负责系统的管理维护工作,维护工作包括图书的添加、删除和修改,书目的添加和删除,借阅者的添加、删除和修改,并且系统管理员能够查询借阅者、图书和图书管理员的信息。
5.当库存不足时,图书馆从出版社购买的图书,管理人员将图书编号并将其分好图书图书类别,之后再通过系统进行入库操作。
6.图书管理人员对读者的借阅信息的输入,之后系统根据借阅者的借阅情况生成罚款缴费单。

第二部分 功能需求分析

1.系统的功能描述

(1)、基础信息设置
① 设置图书信息:对图书的基本信息进行增加、修改、删除
② 设置图书类型信息:对图书类型的基本信息进行增加、修改、删除
③ 设置图书管理员信息:对图书管理员的基本信息进行增加、修改、删除
④ 设置读者信息:对读者的基本信息进行增加、修改、删除
⑤ 设置阅览卡信息:对阅览卡的基本信息进行增加、修改、删除
⑥ 设置出版社信息:对出版社的基本信息进行增加、修改、删除
(2)、图书借阅管理
① 图书编号:阅览卡持卡人所借的图书编号
② 借书日期:图书借出的日期
③ 还书日期:图书归还的日期
④ 罚款金额:显示持卡人未在规定期限内归还图书或对图书造成了损坏而需要罚款的金额
⑤ 是否续期:延长图书的借阅时间
(3)、图书报损管理
① 图书总数:统计所有类型的受损图书数量
② 图书数量:统计该类型的受损数量
③ 受损原因:对受损图书的描述
(4)、图书购买管理
① 图书入库编号:对购买的图书进行编号
② 是否入库:显示图书的入库情况
③ 入库日期:图书编号之后记录至系统的时间
④ 图书数量:该图书入库的数量
(5)、罚款缴费管理
① 阅览卡编号:显示需要缴费的卡号
② 日期:显示罚款单的日期
③ 金额:显示需要缴纳的罚款金额
(6)、查询统计管理
① 图书查询:通过图书编号查询图书基本信息
② 借阅情况查询:通过阅览卡编号查询借阅基本信息
③ 图书受损情况查询:通过受损图书编号查询图书受损基本信息
④ 图书入库情况查询:通过图书入库编号查询图书入库基本信息
⑤ 罚款缴费单查询:通过缴费单号查询罚款缴费基本信息

2.主要的操作描述

(1)、图书管理:实现图书信息管理:可以实现新书入库,图书信息修改,删除,添加等更新操作。
(2)、学生管理:实现读者信息管理:可以实现读者信息的录入,修改,删除,添加等更新操作。
(3)、借阅管理:系统管理员通过此模块来进行借书、还书以及相关信息的查询操作,该模块主要提供借书信息的登记和查询。
(4)、查询报表:实现图书信息查询,借/还纪录查询,未还图书查询,从而可以方便的进行分组管理。

3.数据流图的演示

(1)、顶层流程图

在这里插入图片描述

(2)、第一层流程图

在这里插入图片描述

第三部分 系统功能的设计与划分

1.读者管理部分

(1)处理读者申请阅览卡
(2)读者可以查询本人信息。
(3)读者可以实现自助借/还书
(4)读者可以通过系统完成罚款缴费
(5)读者可以注销阅览卡

2.图书管理员管理部分

(1)处理管理员操作
(2)管理员可以查询所有读者信息。
(3)管理员可以查询所有图书。
(4)管理员可以查询所有借阅信息
(5)管理员可以注销读者阅览卡信息
(6)管理员可以发布与更新图书信息。
(7)管理员可以插入、修改与查询图书受损信息。
(8)管理员可以插入与查询读者罚款缴费信息。

第四部分 数据需求分析

1.数据项

图书(book-info)数据字典B:

数据项名 别名 类型 长度 备注
图书编号 BNo varchar 20 主键
图书类型编号 BTNo char 10 外键
出版社编号 PNo char 10 外键
图书名 BName varchar 50
作者 BAuthor varchar 20
出版时间 PTime datetime
价格 Price Numeric(8,2)
入库时间 InputTime datetime
库存总量 TotalNum int
现存量 Biomass int

图书类型(booktype-info)数据字典BT:

数据项名 别名 类型 长度 备注
图书类编号 BTNo char 10 主键
图书类型名 BTName varchar 50

图书管理员(manager-info)数据字典M:

数据项名 别名 类型 长度 备注
管理员编号 MNo varchar 20 主键
管理员姓名 MName char 10
性别 MSex char 4
电话号码 MTNumber char 11
家庭住址 MHAddress varchar 50
文化程度 MEducation varchar 50

读者(readerinfo)数据字典R:

数据项名 别名 类型 长度 备注
读者编号 RNo varchar 20 主键
阅览卡编号 CNo char 12 外键
持卡人姓名 RName char 8
性别 RSex char 4
身份证号 RIDNum char 24
未交罚款金额 RFine Numeric(8,2)

阅览卡(bookcredit-info)数据字典C:

数据项名 别名 类型 长度 备注
阅览卡编号 CNo char 12 主键
读者编号 RNo varchar 20 外键
余额 CFine Numeric(8,2)
可借书册数 CNum int
是否挂失 CW char 2
借期天数 CDate datetime
可续借天数 CRenew datetime
还书日期 CBack detetime

出版社(publisher-info)数据字典P:

数据项名 别名 类型 长度 备注
出版社编号 PNo varchar 20 主键
出版社名 PName varchar 50
出版社地址 PAddress varchar 50

借阅表(borrow-info)数据字典BB:

数据项名 别名 类型 长度 备注
阅览卡编号 CNo char 12 外键
图书编号 BNo varchar 20 外键
借书日期 BBRTime datetime
还书日期 BBBTime datetim
罚款金额 BBFine Numeric(8,2)
是否续期 BBW char 2

读者还书(return-info)表数据字典Re:

数据项名 别名 类型 长度 备注
阅览卡编号 CNo char 12 外键
图书编号 BNO varchar 20 外键
图书类型编号 BTNo char 10 外键
是否逾期 ReW char 2

图书报损单表(breakage-info)数据字典BA:

数据项名 别名 类型 长度 备注
报损单编号 BANo varchar 20 主键
受损图书编号 BADNo varchar 20 外键
报损时间 BATime datetime
图书总数 BASum int
经手人编号(图书馆人员) MNo varchar 20

图书报损明细表(br-detail-info)数据字典BAD:

数据项名 别名 类型 长度 备注
受损图书编号 BADNo varchar 20 主键
图书编号 BNo varchar 20 外键
受损原因 Reasons char 50
数量 BADNum int

图书购买表(bookBuy-info)数据字典BBuy:

数据项名 别名 类型 长度 备注
图书购买单编号 BBuyNo varchar 20 主键
图书入库编号 BBSNo varchar 20 外键
经手人编号 MNo varchar 20 外键

图书购买入库表(bookStocking-info)数据字典BBS:

数据项名 别名 类型 长度 备注
图书入库编号 BBSNo varchar 20 主键
入库日期 BBSTime datetime
是否入库 BBSW char 2
图书编号 BNo varchar 20 外键
图书数量 BBSNum int

罚款缴费单表(fine-info)数据字典F:

数据项名 别名 类型 长度 备注
缴费单号 FNo char 18 主键
阅览卡编号 CNo char 12 外键
日期 FTime datetime
金额 FFine Numeric(8,2)

2.数据结构

数据结构名 组成
图书 图书编号、图书类型编号、出版社编号、图书条形码、书名、作者、出版时间、价格、入库时间、库存总量、现存量
图书类型 图书类编号、图书类型名
图书管理员 管理员编号、管理员姓名、性别、电话号码、家庭住址、文化程度
读者 读者编号、阅览卡编号、持卡人姓名、性别、身份证号、未交罚款金额
阅览卡 阅览卡编号、读者编号、余额、可借书册数、是否挂失、借期天数、可续借天数、还书日期
出版社 出版社编号、出版社名、出版社名
借阅表 阅览卡编号、图书编号、借书日期、还书日期、罚款金额、是否续期
读者还书表 阅览卡编号、图书编号、图书类型编号、是否逾期
图书报损单表 报损单编号、受损图书编号、报损时间、图书总数、经手人编号
图书报损明细表 受损图书编号、图书编号、受损原因、数量
图书购买表 图书购买单编号、图书入库编号、经手人编号
图书购买入库表 图书入库编号、入库日期、是否入库、图书编号、图书数量
罚款缴费单表 缴费单号、阅览卡编号、日期、金额

3.数据流

数据流名 数据流来源 数据流去向 组成
办理阅览卡信息 读者 阅览卡表 阅览卡表信息
查询读者信息 阅览卡表 管理员 读者信息
借阅图书 读者 借阅表 借阅信息
查询图书借阅信息 借阅表 管理员 借阅信息
归还图书 读者 图书归还表 图书归还信息
记录图书受损信息 管理员 图书受损表 图书受损信息
查询图书报损信息 图书受损表 管理员 图书受损信息
记录图书购买信息 管理员 图书购买表 图书购买信息
查询图书购买信息 图书购买表 管理员 图书购买信息
查询罚款缴费信息 罚款缴费表 管理员 罚款缴费信息

4.数据存储

数据储存名 输入的数据流 输出的数据流 组成
借阅表 借阅信息 借阅信息 借阅信息
图书报损单表 图书受损信息、图书报损信息 图书报损信息 图书受损信息 、图书报损信息
图书购买入库表 图书购买信息 图书购买入库信息 图书购买信息
罚款缴费单表 罚款缴费信息 罚款缴费信息 罚款缴费信息

第二章 概念设计

(一)、局部E-R图模型设计

1.识别实体与实体的主键

图书(主键:图书编号)、图书类型(主键:图书类型编号)、图书管理员(主键:管理员编号)、读者(主键:读者编号)、阅览卡(主键:阅览卡编号)、出版社(主键:出版社编号)

2.定义实体之间的联系

① 一个出版社对应多个图书,一个图书对应一个出版社,出版社和图书是一对多联系。
② 一个图书类型对应多个图书,一个图书对应一个图书类型,图书类型和图书是一对多联系。
③ 一个读者类型对应多个读者,一个读者对应一个读者类型,读者类型和读者是一对多联系。
④ 一个图书库对应多个图书类型,一个图书类型对应一个图书库,图书库和图书类型是一对多联系。
⑤ 一个图书入库单对应多个图书入库单明细,一个图书入库单明细对应一个图书入库单,图书入库单和图书入库单明细是一对多联系。
⑥ 一个图书报损单对应多个图书报损单明细,一个图书报损单明细对于一个图书报损单,图书报损单和图书报损单明细是一对多联系。
⑦ 一个图书对应多个图书入库单明细,一个图书入库单明细对应一个图书,图书和图书入库单明细是一对多联系。
⑧ 一个图书对应多个图书报损单明细,一个图书报损单明细对应一个图书,图书和图书报损单明细是一对多联系。
⑨ 一个读者对应多个罚款缴费单,一个罚款缴费单对应一个读者,读者和罚款缴费单是一对多联系。
⑩ 一个管理员对应多个借阅表,一个借阅表对应一个管理员,管理员和借阅是一对多的关系。
⑪ 一个管理员对应多个图书入库单,一个图书入库单对应一个管理员,管理员和图书入库单是一对多联系。
⑫ 一个管理员对应多个图书报损单,一个图书报损单对应一个管理员,管理员和图书报损单是一对多联系。
⑬ 一个管理员对应多个罚款缴费单,一个罚款交费单对应一个管理员,管理员和罚款缴费单是一对多联系。
⑭ 一个读者对应多个图书,一个图书对应多个读者,读者和图书之间是多对多联系。

3.局部E-R图

读者—借阅—图书:
在这里插入图片描述

读者—归还—图书:
在这里插入图片描述

管理员—管理—读者:
在这里插入图片描述

管理员—报损—图书:
在这里插入图片描述

管理员—购买—图书:
在这里插入图片描述

出版社—管理—图书:
在这里插入图片描述

(二)、全局E-R图模型设计

在这里插入图片描述

第三章 逻辑设计

(一)、由实体集转换而来的关系模式

1.图书(book-info)实体集

book-info(BNo、BTNo、PNo、BName、BAuthor、PTime、Price、InputTime、TotalNum、Biomass)

2.图书类型(booktype-info)实体集

booktype-info(BTNo、BTName)

3.图书管理员(manager-info)实体集

manager-info(MNo、MName、MSex、MTNumber、MHAddress、MEducation)

4.读者(readerinfo)实体集

Readerinfo(RNo、CNo、RName、RSex、RIDNum、RFine)

5.阅览卡(bookcredit-info)实体集

bookcredit-info(CNo、RNo、CFine、CNum、CW、CDate、CRenew、CBack)

6.出版社(publisher-info)实体集

publisher-info(PNo、PName、PAddress)

(二)、由联系集转换而来的关系模式

1.借阅表(borrow-info)联系集

borrow-info(CNo、BNo、BBRTime、BBBTime、BBFine、BBW)

2.读者还书表(return-info) 联系集

return-info(CNo、BNO、BTNo、ReW)

3.图书报损单表(breakage-info)联系集

breakage-info(BANo、BADNo、BATime、BASum、MNo)

4.图书报损明细表(br-detail-info)联系集

br-detail-info(BADNo、BNo、Reasons、BADNum)

5.图书购买表(bookBuy-info)联系集

bookBuy-info(BBuyNo、BBSNo、MNo)

6.图书购买入库表(bookStocking-info)联系集

bookStocking-info(BBSNo、BBSTime、BBSW、BNo、BBSNum)

7.罚款缴费单表(fine-info)联系集

fine-info(FNo、CNo、FTime、FFine)

第四章 数据库应用设计

(一)、建表语句

 CREATE TABLE 出版社
 (
 出版社编号 INT PRIMARY KEY,
 出版社名称 VARCHAR(50) NOT NULL,
 出版社地址 VARCHAR(50)
 );
 CREATE TABLE 图书
 (
 图书编号 VARCHAR(20) PRIMARY KEY,
 出版社编号 INT NOT NULL,
 图书类型编号 CHAR(1) ,
 书名 VARCHAR(50) NOT NULL,
 作者 VARCHAR(20) NOT NULL,
 价格 NUMERIC(8,2) NOT NULL,
 页码 INT NOT NULL,
 库存总量 INT NOT NULL,
 现存量 INT NOT NULL,
 入库时间 DATETIME ,
  FOREIGN KEY(出版社编号) REFERENCES 出版社(出版社编号),
 FOREIGN KEY(图书类型编号) REFERENCES 图书类型(图书类型编号)
 );
 CREATE TABLE 读者类型
 (
 读者类型编号 CHAR(10) PRIMARY KEY,
 读者类型名 VARCHAR(20) NOT NULL,
 可借阅册数 INT CHECK(可借阅册数>=20 AND 可借阅册数<=60),
 借期天数 INT  CHECK(借期天数>=90 AND 借期天数<=120),
 可续借天数 INT  CHECK(可续借天数>=10 AND 可续借天数<=60)
 )
 CREATE TABLE 读者
 (
 证书编号 INT PRIMARY KEY,
 读者类型编号 CHAR(10),
 姓名 VARCHAR(50) NOT NULL,
 性别 CHAR(10) CHECK (性别 IN ('男','女')),
 出生日期 DATETIME NOT NULL,
 身份证编号 CHAR(18) CHECK(LEN(TRIM(身份证编号))=18),
 图书借阅次数 INT,
 是否挂失 INT,
 已借册数 INT,
 未交罚款金额 NUMERIC(8,2),
 FOREIGN KEY(读者类型编号) REFERENCES 读者类型 (读者类型编号)
 )
CREATE TABLE 管理员
 (
 管理员编号 INT  PRIMARY KEY,
 管理员姓名 VARCHAR(50) NOT NULL,
 性别 CHAR(10) CHECK (性别  IN ('男','女')),
 出生日期 DATETIME NOT NULL,
 文化程度 VARCHAR(20) NOT NULL
 )
 CREATE TABLE 罚款交费单
 (
 交费单号 INT PRIMARY KEY,
 借书证编号 INT ,
 日期 DATETIME NOT NULL,
 金额 NUMERIC(8,2) NOT NULL,
 FOREIGN KEY(借书证编号) REFERENCES 读者(证书编号)
  )
CREATE TABLE 图书入库单
  (
  入库单编号 INT PRIMARY KEY,
  入库日期 DATETIME NOT NULL,
  经手人编号 INT,
  是否入库 INT,
  FOREIGN KEY(经手人编号) REFERENCES 管理员(管理员编号)
  )
  CREATE TABLE 图书入库单明细
  (
  入库单编号 INT,
  图书编号 VARCHAR(20),
  数量 INT NOT NULL,
  PRIMARY KEY(入库单编号,图书编号),
  FOREIGN KEY(入库单编号) REFERENCES 图书入库单(入库单编号),
  FOREIGN KEY(图书编号) REFERENCES 图书(图书编号)
  )
  CREATE TABLE 图书报损单
  (
  报损单编号 INT PRIMARY KEY,
  报损日期 DATETIME NOT NULL,
  经手人编号 INT,
  FOREIGN KEY(经手人编号) REFERENCES 管理员(管理员编号)
  )
  CREATE TABLE 图书报损单明细
  (
  报损单编号 INT,
  图书编号 VARCHAR(20),
  数量 INT NOT NULL,
  报损原因 VARCHAR(100) NOT NULL,
  PRIMARY KEY(报损单编号,图书编号),
  FOREIGN KEY(报损单编号) REFERENCES 图书报损单(报损单编号),
  FOREIGN KEY(图书编号) REFERENCES 图书(图书编号)
  )
  CREATE TABLE 借阅
  (
  借书证编号 INT ,
  图书编号 VARCHAR(20),
  借书日期 DATETIME NOT NULL,
  还书日期 DATETIME,
  罚款金额 NUMERIC(8,2),
  是否续借 INT,
  CHECK (借书日期>=还书日期),
  PRIMARY KEY(借书证编号,图书编号),
  FOREIGN KEY(借书证编号) REFERENCES 读者(证书编号),
  FOREIGN KEY(图书编号) REFERENCES 图书(图书编号)
  )

(二)、建视图语句

1.入库单

CREATE VIEW 入库单(入库单编号,入库日期,经手人姓名,是否已入库,图书编号,书名,出版社名,入库数量)
 AS
 SELECT 图书入库单.入库单编号,图书入库单.入库日期,管理员.管理员姓名,图书入库单.是否入库,图书入库单明细.图书编号,图书.书名,出版社.出版社名称,图书入库单明细.数量
 FROM 图书入库单,图书入库单明细,管理员,图书,出版社
 WHERE 图书入库单明细.入库单编号=图书入库单.入库单编号 AND 图书入库单明细.图书编号=图书.图书编号 AND 图书入库单.经手人编号=管理员.管理员编号 AND 图书.出版社编号=出版社.出版社编号

2.报损单

CREATE VIEW 报损单(报损单编号,报损日期,经手人姓名,图书编号,书名,出版社名,报损数量,报损原因)
 AS
 SELECT 图书报损单.报损单编号,图书报损单.报损日期,管理员.管理员姓名,图书报损单明细.图书编号,图书.书名,出版社.出版社名称,图书报损单明细.数量,图书报损单明细.报损原因
 FROM  图书报损单,管理员,图书报损单明细,图书,出版社
 WHERE 图书报损单明细.报损单编号=图书报损单.报损单编号 AND 图书报损单明细.图书编号=图书.图书编号 AND 图书报损单.经手人编号=管理员.管理员编号 AND 图书.出版社编号=出版社.出版社编号

3.读者未还借书

CREATE VIEW 读者未还借书(借书证编号,读者姓名,未还书编号,未还书名,出版社名,借书日期,可借期天数,罚款金额)
 AS
 SELECT 借阅.借书证编号,读者.姓名,借阅.图书编号,图书.书名,出版社.出版社名称,借阅.借书日期,读者类型.可续借天数,借阅.罚款金额
 FROM  借阅,读者,图书,出版社,读者类型
 WHERE 借阅.借书证编号=读者.证书编号 AND 借阅.图书编号=图书.图书编号 AND  图书.出版社编号=出版社.出版社编号 AND 读者.读者类型编号=读者类型.读者类型编号

4.图书分类库存

CREATE VIEW 图书分类库存(图书类型编号,图书类型名,库存册数合计,库存金额合计)
 AS
 SELECT 图书类型.图书类型编号,图书类型.图书类型名,sum(图书.库存总量),sum(图书.价格*图书.库存总量)
 FROM  图书,图书类型
 WHERE 图书类型.图书类型编号=图书.图书类型编号
 GROUP BY 图书类型.图书类型编号,图书类型.图书类型名

(三)、建索引语句

CREATE INDEX 书名索引 ON 图书(书名);
  CREATE INDEX 出版社编号索引 ON 图书(出版社编号);
  CREATE INDEX 图书类型编号索引 ON 图书(图书类型编号);
  CREATE INDEX 作者索引 ON 图书(作者);
  CREATE INDEX 书库号索引 ON 图书类型(书库号);
  CREATE INDEX 姓名索引 ON 读者(姓名);
  CREATE INDEX 图书借阅次数索引 ON 读者(图书借阅次数);
  CREATE INDEX 已借册数索引 ON 读者(已借册数);
  CREATE INDEX 未交罚款金额索引 ON 读者(未交罚款金额);
  CREATE INDEX 管理员姓名索引 ON 管理员(管理员姓名);
  CREATE INDEX 借书证编号索引 ON 罚款交费单(借书证编号);
  CREATE INDEX 经手管理员编号索引 ON 图书入库单(经手人编号);
  CREATE INDEX 图书入库单编号索引 ON 图书入库单明细(入库单编号);
  CREATE INDEX 图书编号索引 ON 图书入库单明细(图书编号);
  CREATE INDEX 经手管理员编号索引 ON 图书报损单(经手人编号);
  CREATE INDEX 图书报损单编号索引 ON 图书报损单明细(报损单编号);
  CREATE INDEX 图书编号索引 ON 图书报损单明细(图书编号);
  CREATE INDEX 借书证编号索引 ON 借阅(借书证编号);
  CREATE INDEX 图书编号索引 ON 借阅(图书编号);
  

三、实验小结

这在本次的设计过程中,首先必须要清楚我们所需要的设计的图书管理系统的结构。一个完善的图书管理系统所需要的基本模块都必须要先设计好才能让我们的设计过程不会被各种突然遇到的问题打断,而在本次的锻炼实践中,我们也得到了从理论到实践的机会。在课程中学到的很多东西都可以有所得,有所悟,而不只是单纯的纸上谈兵。同时,借此机会,我们也学到了很多课堂上学不到的东西,掌握了许多实用的工具,例如学会了SQL Server的基本使用,Visual Stdio 2019 的基本使用,它们都是非常有用的工具,不仅仅是在课堂作业中,更会在我们日后的职业生涯中有着不可估摸的作用。其次本次系统的设计也对我学习用户界面设计有所启发,一个系统不仅仅需要具有合理的功能模块设计,而且也需要有更加人性化的界面设计,便于用户学习使用和掌握,这样才能使系统能够让更多的人接受。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>