C#课程设计 - 图书管理系统

更新时间:2024-04-08 04:12:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

设计要求:

1.进行需求分析,编写数据字典。 2.设计E-R图。

3.实现新进图书的数据录入。

4.实现对所有购进图书的分类查询和分类统计。 5.能够按书名、作者等分类查询现有图书的数量。 6.记录借阅者的个人资料和所借图书的书名、书号数据等。

2程序的主要功能

2.1添加功能

添加一本图书的基本信息,包括书名、书号、名作者(译者)、出版社和图书简介。 添加图书借阅的基本信息,包括书号,借书证号,借书日期,应还书日期。

2.2删除功能

删除一本图书的基本信息,删除读者的基本信息,删除图书借阅基本信息。

2.3显示功能

显示所有图书信息,包括图书代码,图书名称,作者,出版社和简介。 显示所有借阅信息,包括读者号,图书号,借书日期,应还书日期。

2.4查找功能

图书信息查找,可以更具图书代码,图书名称,作者,出版日期和出版社进行查找。 读者信息查找,可更具读者姓名,读者编号,年龄,性别和所在系进行查找。 借阅信息查询,可更具图书编号和读者编号进行查询。

2.5修改功能

对图书和读者的信息进行修改。

3 程序运行平台

VS 2008(C#) SQL Server 2005 Windows Xp (sp3)

4系统总体框架图

登 录 输入用户名和密码 YN 系统管理 图书信息 借阅信息 读者信息 系统退出 系统帮助 图书入库 图书查询 借阅情况 借阅查询 信息简介 信息查询

图4.1 系统总体框架图

2

黄淮学院计算机科学系课程设计说明书

5 数据库设计说明

5.1、需求分析

1.1信息需求

在数据库Library中需要设计如下所示的数据字段和数据表:

1图书信息表---dbo.libary,包括:图书编号、图书名称、作者、出版日期、出○版社和简介。

2借阅登记表---dbo.jy,包括:读者编号、图书编号、借书日期、应还书日期。 ○

○3系统用户表---dbo.manage,包括:密码、用户名。

○4读者表----dbo.reader,包括:读者编号、读者姓名、性别、所在系、年龄。

1.2处理需求

此数据库系统应用于图书馆的图书基本信息管理、读者信息管理、图书借阅管理等

主要功能。 具体功能如下: 1.2.1.基本信息管理 一、图书信息

1图书信息管理部分:主要包括图书信息的添加、修改、删除和查询。此功能为○

图书的分类管理提供依据。

2图书信息管理部分:主要包括图书基本信息的添加、修改、删除和查询。 ○3退出系统。 ○二、读者信息

1读者信息管理部分:主要包括读者信息的添加、修改、删除和查询。此功能为○

读者信息管理提供依据。

2读者管理部分:主要包括读者的基本信息的添加、修改、删除和查询。 ○

3

3退出系统。 ○三、借阅信息

1借阅信息管理部分:主要包括借阅信息的添加、查询。此功能为借阅信息管理○提供依据。

2读者管理部分:主要包括读者的基本信息的添加、和查询。 ○3退出系统。 ○1.2.2图书借阅管理

1图书借阅管理部分:主要包括图书借阅、和借阅查询。 ○1.2.3系统用户管理

1用户管理部分:只有Admin系统用户有权限进入图书管理系统并对相应信息进○行管理。

5.2、数据库的概念设计

5.2.1数据库E-R模型设计

实体列表 实 体 读 者 书 籍 借 阅 描 述 所有借阅者,查阅者,由读者编号标识 图书馆所有图书,由图书编号标识 图书编号、读者编号、借阅日期、应归还日期等属性,由方式标识 系统管理员 系统维护人员 (说明:

1、本系统牵涉到的内容比较少,在复杂的数据库应用系统中,可能会存在很多需要处理的对象,并且这些对象关系复杂。

4

黄淮学院计算机科学系课程设计说明书

2、有关数据库设计方面的内容,请参考ACCP3.0 Sem2《SQL Server数据库设计和实现》有关数据库设计方面的内容。)

5.22数据流程图

图 书 馆 管 理 员 读者管理信息 图书管理信息 图书借阅信息 图书借阅统计 图书信息查询 P0 图书 管理 系统 书目信息 读 者 图书借阅 数据流程图 1-1

5.2.3数据库E-R图

通过上面对系统的总体分析,可以得到大概的实体—关系模型(E-R模型),如下:

2.1. 图书基本信息E-R图

1图书基本信息:{图书编号、图书名称、作者、出版日期、出版社和简介。} ○

图书编号 图 书 出版日期 简 介 编 号 图书名称 作 者 出 版 社

2.2借阅信息类型E-R图

2借阅信息类型:{读者编号、图书编号、借书日期、应还书日期} ○

5

读者编号 应还书日期 借阅信息 图书编号 借书日期

2.3用户信息E-R图

3用户信息:{用户名,密码} 用户 用 户 名 密 码

2.4读者信息E-R图

○4读者信息:{读者编号、读者姓名、性别、所在系、年龄}

读者编号 年 龄 读者信息 读者姓名 性 别 所在系

2.5图书管理系统系E-R总图

6

黄淮学院计算机科学系课程设计说明书

图书编号 简 介 图书名称 作 者 编 号

出 版 社 出版日期 读者姓名 所 在 系 1 图 书 N M 读者信息 性 别 借 还 N 年 龄 读者编号 借 期 Q 还 期 管 理 借阅信息 读者编号 1 O 图书编号 管理员 管 理 7

5.3、数据库物理设计

3.1创建数据库

(1)在服务器资源管理器中的任一节点右击。

(2)执行快捷菜单中的“新建数据库”命令,并在打开的“创建数据库”对话框中输入数据库名Library。

(3)单击“确定”按钮,则新建的数据库就会出现在服务器上。 3.2创建数据表

创建数据库后,为Library数据库添加数据表,步骤如下。

(1)在服务器资源管理器中右击数据库Library下的“表”文件夹。在弹出的快捷菜单中执行“新建表”命令,出现表设计器。

(2)添加表的字段和其他详细资料。各表数据结构如下表所示。

表 名 图书信息 列 名 图书编号 图书名称 作者 出版日期 出版社 读者信息 简介 读者编号 读者姓名 性别 所在系别 年龄 借阅信息 图书编号 读者编号 借阅日期 应归日期 管理者信息 用户名称 密码 数据类型 nrchar nrchar nchar smalldatetime nchar nchar nchar nchar char nchar int char char smalldatetime smalldatetime nchar nchar 10 20 10 20 10 10 10 1 20 10 10 10 10 长 度 主 键 是否可以为空 Yes Yes Yes Yes Yes 否 是 是 是 是 是 否 否 否 否 是 否 否 是 是 是 否 表2.1 图书管理系统各表数据结构 8

黄淮学院计算机科学系课程设计说明书

3.3物理文档

/*----------创建数据库----------*/ create database libary on primary (

name=libary,

filename='C:\\Program Files\\Microsoft SQL Server\\MSSQL\\Data\\libary.mdf', size=100MB, maxsize=200MB, filegrowth=20MB )

log on (

name=libary,

filename='C:\\Program Files\\Microsoft SQL Server\\MSSQL\\Data\\libary.ldf', size=60MB, maxsize=200MB, filegrowth=20MB ) go

/*----------创建基本表----------*/ use [libary] go

/*创建图书信息表*/

CREATE TABLE dbo.jy (

Lno nchar(10) Primary key , Lname nchar(20) NULL , Wr nchar(10) NULL ,

Ldate smalldate NULL , Lprees nchar(20) NULL Lbz nchar(20) NULL ) GO

/*创建读者信息表*/

CREATE TABLE dbo.reader (

Rno nchar(10) Primary key , Rname nchar(10) NOT NULL ,

9

Rsex nchar(1) NOT NULL , Rdep nchar(20) NOT NULL Rage int NULL ) GO

/*创建借阅信息表*/

CREATE TABLE dbo.jy (

Rno nchar(10) Primary key , Lno nchar(10) Primary key , data smalldate NULL , Ldata smalldate NULL ) GO

/*创建用户表*/

CREATE TABLE dbo.manage (

Pwd nchar(10) Primary key , Id nchar(10) NULL , ) GO

5.4、数据库的逻辑设计

5.4.1系统关系模型

该设计以概念结构设计中的E-R图为主要依据,设计出相关的整体逻辑结构。根据总E-R图了解有四个实体,四个关系模式如下:

图书信息表(图书编号,图书名称,作者,出版日期,出版社,简介) 读者信息表(读者编号,姓名,性别,系别,年龄) 用户表(密码,账号)

借阅信息表(图书编号,读者编号,结束日期,应还书日期)

5.4.2逻辑结构设计

主键及关系说明:

表dbo.manage中Pwd为主键 表dbo.libary中Lno为主键

10

黄淮学院计算机科学系课程设计说明书

表dbo.reader中Rno为主键

表dbo.jy中Lno为主键, Lno受表dbo.libary中Lno约束,Rno受表dbo.reader中Rno约束

5.4.3表设计:数据库对应的表设计如下图(字段采用英文表示):

5.4.4、视图对象设计

5.4.4系统数据库表结构

数据库表索引

编号 1 dbo.jy 表名 借阅信息表 中文名 11

2 3 4

dbo.libary dbo.manage dbo.reader 图书信息表 系统用户表 读者信息表 5.4.5数据字典

数据库由以下四个数据表组成:第一个是借阅信息表,命名为dbo.jy

;第二个是图书基本信息表,命名为dbo.libary;第三个是系统用户表,命名为dbo.manage;第四个是读者表,命名为dbo.reader,下面设计它们的具体字段。

4.1 借阅登记表

表1-1为借阅登记表。图书类型表记录了图书借阅记录,用于用于管理员进行管理。该表主要包括了类别号和类别名称等数据。

表1-1 dbo.jy——借阅登记表 编号 字段名称 数据结构 说明 1 2 3 4 Rno Lno Data Ldata nchar(10) nchar(10) smalldate smalldate 读者编号 图书编号 结束日期 应还书日期 4.2图书基本信息表

表1-2为图书基本信息表。图书基本信息表记录了图书馆藏书的基本资料,可供查询。该表主要包括了图书编号、图书名称、作者、出版社、出版日期、简介。

表1-2 dbo.libary——图书信息表 编号 字段名称 数据类型 说明 1 Lno nchar(10) 图书编号 12

黄淮学院计算机科学系课程设计说明书

2 3 4 Lname Wr Ldate nchar(20) nchar(10) smalldate 图书名称 作者 出版日期 出版社 简介 5 6 Lprees Lbz nchar(20) nchar(10) 4.3用户信息表

表1-7为用户信息表。用户信息表记录了系统用户的用户名,该表包括用户名和密码,保存用户信息。

表1-3 dbo.manage——管理员信息表 字段名称 数据类型 长度 具体说明 Pwd Id nchar nchar 10 10 密码 用户名

4.4读者信息表

表1-4为读者信息表。读者信息表记录了所有读者的基本资料,包括读者编号、读者姓名、性别、所在系,年龄。

表1-4 dbo.reader——读者信息表 编号 字段名称 数据类型 说明 1 Rno nchar(10) 读者编号 13

2 Rname nchar(10) 读者姓名 3 Rsex char(1) 性别 4 Rdep nchar(20) 所在系 5 Rage int 年龄 14

黄淮学院计算机科学系课程设计说明书

5.4.6、系统功能模块

图书借阅管理 借借阅阅情查况 询 图书借阅管理系统 图读书者基信本息信管息理 管理 图图读读书书者者入查信信库 询 息 息图4.1 图书借阅管理系统功能模块示意图 系统管理 系系统统帮退助 出 15

系统用户信息管Admin用户 登陆系统 对图书和读者的信息进行管理 普通用户 暂无功能实现 图4.2 用户管理功能集合模块关系图 5.4.7安全保密设计

数据库只被少数授权用户访问,必须提供用户名和正确的密码。

数据库文件加密,以防止直接打开数据库进行数据修改,只有少数人有权直接打开数据库文件进行修改信息和记录。

数据库的安全策略,遵从SQL Server 2000的安全策略事项。

6 模块分析

6.1 系统管理模块

系统帮助:让用户知道使用该系统的操作方法。

系统退出:安全的退出系统,以方便再次进入,否则再次进入系统肯能会出错, 如图6.1

系统管理 系统帮助 系统退出

图6.1 系统管理

16

黄淮学院计算机科学系课程设计说明书

代码:namespace 登陆

{

partial class Help {

///

/// Required designer variable. ///

private System.ComponentModel.IContainer components = null;

///

/// Clean up any resources being used. ///

///

protected override void Dispose(bool disposing) {

if (disposing && (components != null)) {

components.Dispose(); }

base.Dispose(disposing); }

#region Windows Form Designer generated code

///

/// Required method for Designer support - do not modify /// the contents of this method with the code editor. ///

private void InitializeComponent() {

this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.label3 = new System.Windows.Forms.Label(); this.label4 = new System.Windows.Forms.Label(); this.SuspendLayout(); // // label1 //

this.label1.AutoSize = true;

this.label1.Font = new System.Drawing.Font(\宋体\, 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));

this.label1.Location = new System.Drawing.Point(154, 29); this.label1.Name = \;

17

this.label1.Size = new System.Drawing.Size(123, 19); this.label1.TabIndex = 0;

this.label1.Text = \图书管理系统\; // // label2 //

this.label2.AutoSize = true;

this.label2.Font = new System.Drawing.Font(\宋体\, 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));

this.label2.Location = new System.Drawing.Point(34, 78); this.label2.Name = \;

this.label2.Size = new System.Drawing.Size(368, 32); this.label2.TabIndex = 1;

this.label2.Text = \打开SQL Server企业管理器,启动SQL相关服务,\\r\\n连接数据库。\\r\\n\; // // label3 //

this.label3.AutoSize = true;

this.label3.Font = new System.Drawing.Font(\宋体\, 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));

this.label3.Location = new System.Drawing.Point(34, 140); this.label3.Name = \;

this.label3.Size = new System.Drawing.Size(400, 64); this.label3.TabIndex = 2;

this.label3.Text = \鼠标右键点击【数据库】->【附加(A)...】,然后\\r\\n单击【...】按钮,选择本程序所在文件夹下的中的\\r\\nDataBase文件夹下的Library.mdf文\ + \件,其他采用默认设\\r\\n置,然后单击【确定】按钮\; // // label4 //

this.label4.AutoSize = true;

this.label4.Font = new System.Drawing.Font(\宋体\, 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));

this.label4.Location = new System.Drawing.Point(34, 233); this.label4.Name = \;

this.label4.Size = new System.Drawing.Size(272, 16); this.label4.TabIndex = 3;

this.label4.Text = \如需帮助请登http://www.google.com\;

this.label4.Click += new System.EventHandler(this.label4_Click); // // Help //

this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackColor = System.Drawing.Color.Olive;

18

黄淮学院计算机科学系课程设计说明书

this.ClientSize = new System.Drawing.Size(472, 349); this.Controls.Add(this.label4); this.Controls.Add(this.label3); this.Controls.Add(this.label2); this.Controls.Add(this.label1); this.Name = \; this.Text = \; this.ResumeLayout(false); this.PerformLayout();

}

#endregion

private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label2; private System.Windows.Forms.Label label3; private System.Windows.Forms.Label label4; }

}

6.2图书信息模块

图书信息模块包含图书入库和图书查询两个子模块 图书入库:添加新的图书并保存信息。

图书查询:可按图书代码,图书名称,作者,出版日期,出版社五项进行查询,可删除一些废弃图书的信息,并将修改后的数据入库保存,如图6.2。

图书信息 图书入库 图书查询 添加 重置 查询 删除 重置 退出

图6.2 图书信息 代码:namespace 登陆

19

{

class LibraryManage {

private SqlConnection sqlConnection1 = null; private SqlCommand sqlCommand1 = null; private string strSql = null; public LibraryManage() {

this.sqlConnection1 = new SqlConnection(dbconnection.connection); this.sqlCommand1 = new SqlCommand();

this.sqlCommand1.CommandType = CommandType.Text; this.sqlCommand1.Connection = this.sqlConnection1;

// TODO: 在此处添加构造函数逻辑 // }

public void Library_add(string Lno, string Lname, string Wr, string Lpress, string Lbz) {

DateTime Ldate = Convert.ToDateTime(DateTime.Now.ToString(\)); this.strSql = \ +

\ + Lno + \ + Lname + \ + Wr + \ + Ldate + \ + Lpress + \ + Lbz + \;

this.sqlCommand1.CommandText = this.strSql; try {

this.sqlConnection1.Open(); this.sqlCommand1.ExecuteNonQuery(); //Lno_add(Lno); }

catch (System.Exception E) {

Console.WriteLine(E.ToString()); } finally {

this.sqlConnection1.Close(); } }

public void ts_del(string Lno) {

this.strSql = \ + \ + Lno + \; this.sqlCommand1.CommandText = this.strSql; try {

20

黄淮学院计算机科学系课程设计说明书

this.sqlConnection1.Open(); this.sqlCommand1.ExecuteNonQuery(); }

catch (System.Exception E) {

Console.WriteLine(E.ToString()); } finally {

this.sqlConnection1.Close(); } } }

}

6.3 借阅信息模块

图书信息模块包含借阅情况和借阅查询两个子模块。

借阅情况:添加新的借阅信息,将读者号,图书号,借书日期和应还书日期保存。 借阅查询:可更具读者号和图书编号进行查询,还书时在此模块中删除该读者的借阅信息,并将修改后的信息保存,如图6.3。

借阅信息 借阅情况 借阅查询 添加 重置 查询 重置 全部 删除 退出

图6.3 图书信息 代码:namespace 登陆

{

class jieyue {

21

private SqlConnection sqlConnection1 = null; private SqlCommand sqlCommand1 = null; private string strSql = null; public jieyue() {

this.sqlConnection1 = new SqlConnection(dbconnection.connection); this.sqlCommand1 = new SqlCommand();

this.sqlCommand1.CommandType = CommandType.Text; this.sqlCommand1.Connection = this.sqlConnection1;

// TODO: 在此处添加构造函数逻辑 // }

public void Jieyue_add(string Rno, string Lno) {

DateTime Date = Convert.ToDateTime(DateTime.Now.ToString(\)); DateTime Redate = Convert.ToDateTime(DateTime.Now.ToString(\)); this.strSql = \ +

\ + Rno + \ + Lno + \ + Date + \ + Redate + \; this.sqlCommand1.CommandText = this.strSql; try {

this.sqlConnection1.Open(); this.sqlCommand1.ExecuteNonQuery(); //Lno_add(Lno); }

catch (System.Exception E) {

Console.WriteLine(E.ToString()); } finally {

this.sqlConnection1.Close(); } }

public void jieyue_del(string Lno)

{

this.strSql = \ + \ + Lno + \; //this.strSql = \ this.sqlCommand1.CommandText=this.strSql; try

{

22

黄淮学院计算机科学系课程设计说明书

}

catch(System.Exception E) { } finally { }

this.sqlConnection1.Close(); Console.WriteLine(E.ToString()); this.sqlConnection1.Open();

this.sqlCommand1.ExecuteNonQuery();

} } }

6.4 读者信息模块

读者信息模块包含了读者信息和读者信息查询两个子模块

读者信息:添加新读者的读者号,姓名,性别,所在系,年龄并将修改后的信息入库保存

读者信息查询:可按照读者号,姓名,性别,所在系,年龄五种类型进行查询,可删除读者的信息并将修改后的信息保存,如图6.4。

读者信息 读者信息 读者信息查询 添加 重置 查询 重置 全部 删除 退出

图6.4 读者信息

代码: namespace 登陆

{

23

class duzhe {

private SqlConnection sqlConnection1 = null; private SqlCommand sqlCommand1 = null; private string strSql = null; public duzhe() {

this.sqlConnection1 = new SqlConnection(dbconnection.connection); this.sqlCommand1 = new SqlCommand();

this.sqlCommand1.CommandType = CommandType.Text; this.sqlCommand1.Connection = this.sqlConnection1;

// TODO: 在此处添加构造函数逻辑 // }

public void dz_add(string Rno, string Rname, string Rsex, string Rdep, int Rage) {

//DateTime Ldate = Convert.ToDateTime(DateTime.Now.ToString(\ this.strSql = \ +

\ + Rno + \ + Rname + \ + Rsex + \ + Rdep + \ + Rage + \; this.sqlCommand1.CommandText = this.strSql; try {

this.sqlConnection1.Open(); this.sqlCommand1.ExecuteNonQuery(); //Lno_add(Lno); }

catch (System.Exception E) {

Console.WriteLine(E.ToString()); } finally {

this.sqlConnection1.Close(); } }

public void dz_del(string Rno) {

this.strSql = \ + \ + Rno + \; this.sqlCommand1.CommandText = this.strSql; try {

this.sqlConnection1.Open(); this.sqlCommand1.ExecuteNonQuery();

24

黄淮学院计算机科学系课程设计说明书

}

catch (System.Exception E) {

Console.WriteLine(E.ToString()); } finally {

this.sqlConnection1.Close(); } } } }

7 系统测试

具体操作如下:

(1)打开数据库SQL Service 2005,数据库右键选择‘附加’,选择要添加的数据库,如图

图1 添加数据库 (2)打开VS 2008 选择 文件>打开->文件,如图2

25

图2 用VS 2008打开登陆文件

(3)编译后可进入登陆界面,输入用户名及密码就可以进入图书管理系统了见图3和图4

26

黄淮学院计算机科学系课程设计说明书

图3 登陆界面

图4 图书借阅管理界面

(4)进人 图书信息->图书入库 界面,可以向管理系统中添加新的图书,如图5-1

27

图5-1 图书入库

输入相应的图书信息以后点击添加,确认添加成功如图:5-2

图5-2

(5)进入图书信息->图书查询 界面,可以查看系统中图书的信息,如图6-1

28

黄淮学院计算机科学系课程设计说明书

图6-1 图书查询

添加相应的查询条件图书代码0106点击查询得出如图6-2

图 6-2

(6)进入借阅信息->借阅情况,你可以看到书的借阅情况如图7

29

图7 借阅情况

(7)进入借阅信息->借阅查询,你可以查询书的借阅情况如图8

图8 借阅查询

(8)进入读者信息->读者信息,你可以添加读者的信息。如图9

图9 学生信息

(8)进入读者信息->读者信息查询,你可以查询,重置,删除读者的信息如图10

30

黄淮学院计算机科学系课程设计说明书

图10 读者信息查询

8 小组分工

程省委:程序代码设计与分析、运行结果 刘洋:功能需求、用户界面设计

王翼:数据库设计、文档编写

9 参考文献

[1] 萨师煊,王珊. 数据库系统概论. 北京:高等教育出版社,2002

[2]孙明丽 王斌,sql server 2005 数据库系统开发.北京,人民邮电出版社.2007.7 [3]苗雪兰.数据库系统原理及应用教程[M].北京,机械工业出版社.2007.8

[4] 李敏波 黄静 张少华.C#高级编程(第3版),北京,清华大学出版社.2005.6

10结论

31

进过这段时间的努力基本完成了图书管理系统的基本功能:管理员对图书信息的管理以及对读者信息的管理,主要是对其中的表(图书信息表dbo.libary和读者信息表读者表dbo.reader)的信息进行添加、查询和删除。但部分功能未能实现例如读者对该系统的注册,登陆、借阅查寻等一些列功能。

同时通过这几天的程序及报告编写,我们也发现了自己的很多不足,自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还是比较脆弱。尤其是编写大型的程序所要拥有的知识和技能比较缺乏。程序编好了,还要经过调试和修改,这步也很关键,好的程序是经过了无数次的修改和调试才产生的。我们的程序基本上能够满足要求,但还有一些地方需要改进,在今后我们应该在多看书的同时还要加强实践的练习。才能进一步提高自己的编程能力。

最后,在这里对老师和同学给予的帮助表示最诚挚的感谢!

32

本文来源:https://www.bwwdw.com/article/uxrr.html

Top