资源描述
信息工程学院
《数据库课程设计》论文
题 目:学校教材购销系统数据库设计
学 号:
2020012834
专业班级:
计算机科学与技术102班
姓 名:
指导老师:
李书琴
完成日期:
2012-1-13
教材购销系统数据库设计
姓名:张勇
(信息工程学院计算机科学与技术10级2班)
摘 要:通过了解,现在市场上很多学校的教材购销还处于人工管理阶段,存在着效率低下,耗费人力
教材购销的业务模式简单,操作流程却复杂。
教材购销系统是典型的进销存系统,它是针对改善当前人工管理的诸多缺点而设计的,能够处理进书、销书、存储管理等业务,包括有出版社管理、采购退书管理、学生购书管理、顾客退书管理、商品储存管理等功能,并且通过使用触发器、存储过程、视图等数据库技术,使得系统具有安全、实用、方便、基本业务功能完备等特点,基本上解决了人工管理的缺点,有助于实现学校的现代化、信息化、高效化、规模化。
关键字:数据库;SQL语言;索引;视图;触发器;教材;仓库
目 录
1.需求分析 1
1.1引言 1
1.2.系统任务概述 1
1.2.1目标 1
1.2.2用户的特点 2
1.3.需求规定 2
1.3.1对功能的规定 2
1.3.2对性能的规定 2
1.4.运行环境规定 3
1.5.数据流程、功能描述和设计 3
2.数据库结构设计 6
2.1 概念设计 6
2.1.1 分E-R图建立 7
2.1.2 全局/整体E-R图 9
2.2 逻辑设计 10
2.2.1建立关系模式 10
2.2.2 关系模式规范化处理 11
2.2.3 用户子模式建立 12
2.2.4 关系模式逻辑结构定义 12
3. 数据库物理设计 13
4.数据库实施与测试 13
4.1 数据库实施 13
4.1.1 数据库及数据库对象建立 13
4.1.2 数据入库 20
4.2 数据库测试 20
5.总结 20
6.附录 21
10级计算机科学与技术专业2班数据库应用系统课程设计课程论文
1.需求分析
主要包括内容:处理对象及组织;信息处理及系统功能;数据库系统性能需要,数据库系统开发环境需求等。在阐述信息及其处理过程时,要辅助业务流程图、数据流程图及数据字典。对上述三个问题可以以附录的形式详细罗列,但正文中必须指明做了哪些业务流程图、数据流程图和数据字典的规模。
1.1引言
本系统是学校教材科内部的一个教材订购系统,实现教材的销售和采购。
该系统还和学校财务科进行资金数据来往,.由本系统向财务处提供销售情况,实行教材的安全发放和采购.并顺便和各书店联营向个别人员单独售书。
1.2.系统任务概述
1.2.1目标
本系统可细化为两个子系统:销售系统,采购系统和存储系统
销售系统的工作过程为:首先由教师或班长提交购书单,经书库教材发行人员审核是有效购书单后,开售书单、登记并返给教师或班长领书单,教师或班长即可去书库领书。
采购系统的主要工作过程为:若是脱销教材或者没有班长购买的图书,则登记缺书,发缺书单给 书库采购人员;一旦新书入库后,即发进书通知给班长或老师。
下面给出系统的初步概图,方便用户和读者充分认识本系统的最初实现情况,并对系统有个初步的了解,也方便开发人员把握开发方向,最终实现本系统.
教材购销系统
出库表 缺书登记表
待购教材表
教材库存表 进库表
购书表
采 购
系 统
销 售
系 统
进书通知
图1 教材购销系统概图
1.2.2用户的特点
本系统主要在学期开学发书、学期结束订书时大幅度使用,这时候也是本系统最需要维护的时候,所以在这时候要对本系统进行必要的检修,防止数据出错。
1.3.需求规定
1.3.1对功能的规定
本系统在向班长售书时主要输入班长学号、班级代号、购书数量、购书书名信息,然后打印领书单返回给班长领取书籍。
本系统在查询数据库时主要输入需要查询的相关信息,包括图书编号、图书书名、出版社信息、图书特色等信息方便操作人员把握图书信息。
本系统还兼顾一点财务信息的管理,在发生单人购书时,系统直接向购书者收取现金,内部形成一个小小的财务管理。
1.3.2对性能的规定
对系统中输入的数据要按照数据字典的规定严格输入,尽量避免数溢出处和数据的不合法性。
1.4.运行环境规定
使用Windows NT 或 Windows 2000 Server以上操作系统
1.5.数据流程、功能描述和设计
根据前面的需求分析,进一步得出系统的数据流程和必须的数据字典,然后实现系统的相关功能,为下一步编码做好充分准备。
先面给出系统的第一层数据流图和各个分解的数据流程图。
图 图1.1 学校教材购销系统顶层DFD
下面把系统分为销售,采购和存储三个模块进行进一步分解,如图1.2。显然外部项班长或教师应与销售子系统联系。三个子系统之间也存在联系:其一是缺书单,又销售子系统把脱销书籍和未进书籍传给采购子系统;其二是进书通知,直接由采购子系统将教材入库信息通知销售系统。
图1.2 学校教材购销系统第二层DFD
继续分解,得到第三层数据流程图,其中图1.3由采购子系统扩展而成, 图1.4由销售子系统扩展而成。
图1.3 第三层DFD-----采购模块
图1.4第三层DFD-----销售子系统
图1.3中,采购子系统被分解为3个子加工,编号从P1.1.到P1.3,学校提交购书单,然后出版社根据学校的购书单那填写发书单发给学校,学校验书,如果合格则入库,填入库单和进书记录,如果不合格,则退书填写退书理由为不合格订单,填写退书记录。售书时,班长或教师持购书单申请购书,所购书存在就发给领书单到书库领取所购书籍。若所购书籍暂时没有就登记缺书登记单,汇总缺书登记单通知采购子系统购书,并最终汇总成为学校购书单,待书籍到库时通知班长或教师领书。
关于销售子系统的特殊说明,在售书过程中产生的补售书单只针对教师或者行政班级,对个人购书情况不做处理,也就是说个人所购之书有就代理,没有就不单独采购。
采购子系统可分为两个方面来加工:一是采购书,二是采购缺书。
下面将为本系统提供必要的数据字典,以方便系统是最终实现。下面将分别针对教材购销系统的数据流程土的各个项目进行定义。
2.数据库结构设计
2.1 概念设计
概念设计是将需求分析得到的用户需求抽象为概念模型的过程,这个阶段主要的目标是通过对用户需求进行综合、归纳与抽象,形成一个独立于DBMS的概念模型(E-R图)。对这个阶段的要求有:
(1)能真实、充分地反映现实世界,包括事物与事物之间的联系,能满足用户对数据的处理要求,是对现实世界的一个真实模型;
(2)易于理解,因此可以用它和不熟悉计算机的用户交换意见;
(3)易于更改,当应用环境和应用要求改变时,容易对概念模型修改和扩充;
(4)易于向关系、网状、层次等各种数据模型转换。
实现概念设计的任务和方法:
(1)设计分E-R图,生成初步E-R图;
(2)通过合并等方法,消除冲突、冗余等,生成全局E-R图。
2.1.1 分E-R图建立
分E-R图就是全局概念模式下的底层概念模式向E-R图的转化。先从用户全局需求出发,逐曾细化得到底层需求,把每个底层需求转换为一个概念模式,再逐层合成概念模式得到全局概念模式。每个底层概念模式都要转化为分E-R图。
设计分E-R图的思想是,以中层数据流为切入点,利用抽象机制对需求分析阶段收集到的数据进行分类、聚集、概括,形成实体、实体的属性、标识实体的码、确定实体之间的联系类型(1:1,1:n,m:n),再逐一设计分E-R图。下面是教材购销系统的4个分E-R图:
图2.1学生购书ER图:
图2.2 图书出版社ER图:
图2.3 购书退书ER图
图2.4 图书仓库ER图
2.1.2 全局/整体E-R图
由分E-R图到全局E-R图的过程就是视图集成的过程,有两种方式:
(1)多个分E-R图一次集成,难度较大;
(2)逐步集成,用累加的方式一次集成两个分E-R图,可以降低复杂度。
无论采用哪种方式,每次集成局部E-R图时都需要分两步走:(1)合并;(2)修改和重构。
在合并分E-R图时,主要是为消除各分E-R图之间的冲突,包括属性冲突、命名冲突、结构冲突。在消除属性冲突时,需要调整属性域和属性的取值单位;消除命名冲突,主要是为预防同名异义或异名同义的情况;结构冲突包括的比较多,每种都有自己的解决方法,主要有:(1)同一对象在不同应用中具有不同的抽象,解决时通常是把属性变换为实体或把实体转换为属性,使同一对象具有相同的抽象;(2)同一实体在不同分E-R图中所包含的属性个数和属性排列次序不完全相同,可以通过取该实体属性为各分E-R图中属性的并集,再适当调整属性的次序;(3)实体间的联系在不同的分E-R图中为不同的类型,可以根据应用的语义对实体联系的类型进行综合或调整。
修改或重构主要是为消除不必要的冗余。消除冗余主要采用分析方法,即以数据字典和数据流图为依据,根据数据字典中关于数据项之间逻辑关系的说明来消除冗余;此外也可以用规范化理论来消除冗余。当然,并非所有的冗余数据与冗余联系都必须加以消除,有时为了提高效率,也会不得不以冗余信息作为代价,这个需要根据用户的整体需求来确定。
在合并和修改或重构之后,教材购销系统的全局E-R图如图2-5所示
图2.5 总ER图
2.2 逻辑设计
2.2.1建立关系模式
将E-R模型转换为关系模型实际上就是要将实体型、实体的属性和实体型之间的联系转换为关系模式。转换一般遵循以下原则:
一个实体型转换为一个关系模式。实体的属性就是关系的属性,实体的码就是关系的码。
实体间的联系的转化情况:一个1:1联系可以转换为一个独立的关系,也可以与任意一段对应的关系模式合并;一个1:n联系可以转化为一个独立的关系模式,也可以与n端的关系模式合并;一个m:n的联系必须转化为一个关系模式。
由于出版社和出版社发书单以及班长和班长订书单之间的关系都是1:n联系,所以可以直接将出版社的码合并到出版社发书单中,将班长的码合并到班长订书单中。而虽然书库和图书之间的存储关系也是1:n联系,但是为表达清晰,故虽然存在部分数据冗余,但也可将存储关系也转化为一个关系模式。出版社、图书、班长、书库、出版社发书单、进书关系、班长订书单、购买关系,这些都需要转换为关系模式.
转换结果:
出版社(出版社编号,出版社名称,出版社地址,出版社电话)
班长(学号,姓名,班级,学院,专业)
出版(出版社编号,图书名称,图书编号)
图书(图书编号,图书出版社,图书名称,图书进价,图书售价,书库编号)
购买(购买单号,班长学号,图书编号,图书数量,图书总价,购买日期)
存储(图书编号,书库编号,剩数量)
书库(书库编号,库管理员姓名,书库电话)
进书(进书单号,书库编号,出版社编号,图书编号,图书数量,进书日期)
退书(退书单号,书库编号,出版社编号,图书编号,图书数量,退书理由)
完全函数依赖F:
出版社编号—>出版社名称 出版社编号—>出版社地址
出版社编号—>出版社电话 班长学号—>班长姓名
班长学号—>学院 班长学号—>班级
班长学号—>专业 图书编号—>图书出版社
图书编号—>图书名称
图书编号—>图书进价 图书编号—>图书售价
图书编号—>书库编号 库管员编号—> 库管员姓名
销售员编号—>销售员姓名 采购员编号—>采购员电话
班长学号—>顾客电话 图书编号—>图书名称
图书编号,书库编号—>剩余量
班长学号,图书编号,购买单号—>图书数量
班长学号,图书编号,购买单号—>图书总价
班长学号,图书编号,购买单号—>购买日期
出版社编号,书库编号,进书单号—>图书编号
出版社编号,书库编号,进书单号—>进书日期
出版社编号,书库编号,退书单号—>图书编号
出版社编号,书库编号,退书单号—>图书数量
出版社编号,书库编号,退书单号—>退书理由
2.2.2 关系模式规范化处理
出版社(出版社编号,出版社名称,出版社地址,出版社电话) 满足3NF
班长(学号,姓名,班级,学院,专业) 满足3NF
出版(出版社编号,图书名称,图书编号) 满足3NF
图书(图书编号,图书出版社,图书名称,图书进价,图书售价,书库编号) 满足3NF
购买(班长学号,图书编号,购买单号,图书数量,图书总价,购买日期) 满足3NF
存储(图书编号,书库编号,剩数量) 满足3NF
书库(书库编号,库管理员姓名,书库电话)满足3NF
进书(出版社编号,书库编号,进书单号,图书编号,图书数量,进书日期) 满足3NF
退书(出版社编号,书库编号,退书单号,图书编号,图书数量,退书理由) 满足3NF
2.2.3 用户子模式建立
目前关系数据库管理系统一般都提供了视图概念,可利用这一功能设计更符合全局用户使用的需要的用户外模式。
表2-1 (教材购销系统)关系外模式
序号
视图名称
作用
备注
1
stack_view
查询仓库信息
2
book_view
查询教材信息
3
back_view
查询退书单信息
4
BookRemain_View
查询书籍剩余量m
5
monitor_view
班长信息视图
6
bssave_view
仓库图书剩余量视图
2.2.4 关系模式逻辑结构定义
根据关系模式的转换原则,该教材购销系统可以抽象为九个关系模式。在定义关系模式时,有关系模式的逻辑结构定义、关系的完整性和安全性等内容。其中关系模式的逻辑结构定义包括关系模式各属性的确定、码的确定、外码的确定、各属性的约束等等。具体关系模式的逻辑结构如下表
编号
关系名称
模式说明
T-1
Supplier(出版社)(详见附录4-1)
(详见附录1-1)
T-2
Monitor(班长表)(详见附录4-2)
(详见附录1-2)
T-3
Publish(出版)(详见附录4-3)
(详见附录1-3)
T-4
Book(书)(详见附录4-4)
(详见附录1-4)
T-5
Buy(学生购书)(详见附录4-5)
(详见附录1-5)
T-6
Save(存储)(详见附录4-6)
(详见附录1-6)
T-7
Stack(仓库)(详见附录4-7)
(详见附录1-7)
T-8
Intobook(进书)(详见附录4-8)
(详见附录1-8)
T-9
Backbook(退书)详见附录4-9)
(详见附录1-9)
3. 数据库物理设计
数据库在物理设备上的存储结构与存取方法称为数据库的物理结构,它依赖于选定的数据库管理系统。为一个给定的逻辑数据模型选取一个最适合应用要求的物理结构的过程,就是数据库的物理设计。通常关系数据库物理设计的内容主要包括:
(1)为关系模式选择存取方法;
(2)设计关系、索引等数据库文件的物理存储结构。
4.数据库实施与测试
4.1 数据库实施
4.1.1 数据库及数据库对象建立
数据库的建立:
create user zhangyong
identified by zhangyong
default tablespace users
temporary tablespace temp
profile default
grant connect to zhangyong ;
grant resource to zhangyong;
grant dba to zhangyong;
出版社表
create table Supplier
(
BSNumber char(20) primary key,
BSupportName char(40) not null,
BSaddress char(100) not null,
BSPhone char(20) not null
);
班长表
create table Monitor
(
StuNumber char(15) primary key,
StuName char(20) not null,
StuDep char(40) not null,
StuMajor char(40) not null,
StuClass char(30) not null
)
出版表
create table Publish
(
BSNumber char(15) primary key,
BNumber char(10) not null,
BName char(50) not null,
foreign key (BSNumber) references Supplier(BSNumber)
)
图书表
create table Book
(
BNumber char(20) primary key,
BName char(40) not null,
BSPricre number not null,
BIPrice number not null,
Sto_ID char(5) not null
)
购买表
create table Buy
(
SBBNumber char(20),
StuNumber char(20) ,
BNumber char(20),
BBAmount int,
BSPrice number not null,
BIPrice number not null,
BuyDate Date,
primary key (SBBNumber,StuNumber,BNumber),
foreign key(StuNumber) references Monitor(StuNumber),
foreign key(BNumber) references Book(BNumber)
)
存储表
create table BSave
(
Sto_ID char(20) ,
BNumber char(20),
BRemain int,
primary key(Sto_ID,BNumber),
foreign key(Sto_ID) references Stack(Sto_ID),
foreign key(BNumber) references book(BNumber),
)
仓库表
create table Stack
(
Sto_ID char(20) primary key,
StoManger char(5) not null,
StoPhone char(15) not null
)
进书表
create table InBook
(
BSNumber char(20),
Sto_ID char(20),
BBNumber char(20),
BNumber char(20),
BIPrice number not null,
BBAmount int,
BIdate date,
primary key (BSNumber,Sto_ID,BBNumber),
foreign key(Sto_ID) references Stack(Sto_ID),
foreign key(BSNumber) references Supplier(BSnumber)
)
退书表
create table BackBook
(
BackNumber char(20),
Sto_ID char(20),
BSNumber char(20),
BNumber char(20),
BackAmount int not null,
BIdate date,
BCancel_Result char(200) not null,
Primary key(BackNumber,Sto_ID,BSNumber),
foreign key(Sto_ID) references Stack(Sto_ID),
foreign key(BSNumber) references Supplier(BSnumber)
)
视图的建立:
仓库视图
create view stack_view
as
select sto_id, stomanger, stophone
from stack
视图结果:
图书视图:
create view book_view
as
select bnumber,bname,sto_id,bsnumber
from book
视图结果:
退书视图
create view back_view
as
select backnumber,sto_id,bsnumber,bnumber,backamount,bidate,bcancel_result
from backbook
班长视图:
create view monitor_view
as
select stunumber,stuname,studep,stumajor,stuclass
from monitor
图书剩余量视图
create view bssave_view
as
select bnumber,sto_id,bremain
from bsave
触发器类:
学校购书触发器:
create or replace trigger Save_triger
after insert or update on inbook
for each row
begin
update bsave
set bsave.bremain=bsave.bremain+:new.bbamount
where :new.bnumber=bsave.bnumber;
end Sav_triger;
验证触发器
insert into inbook(bsnumber,sto_id,bbnumber,bnumber,biprice,bbamount,bidate)
values('012','01','142','787302109235 ',23,50,to_date('2012-1-11','YYYY-MM-DD'));
插入数据前
插入数据后
学校退书触发器:
create or replace trigger Back_triger
after insert or update on backbook
for each row
begin
update bsave
set bremain=bremain-:new.backamount
where bnumber=:new.bnumber;
end Back_triger
insert into inbook(backnumber,sto_id,bsnumber,bnumber,backamount,bidate,bacancle_result)
values('231','01','012','787302109235 ',50,to_date('2012-1-11','YYYY-MM-DD'),’发书错误’);
学生买书触发器:
create or replace trigger buy_triger
after insert on buy
for each row
begin
update bsave
set bsave.bremain=bsave.bremain-:new.bbamount
where :new.bnumber=bsave.bnumber;
end buy_triger;
验证触发器:
insert into buy(sbbnumber,stunumber,bnumber,bbamount,bsprice,buydate)
values('34','01108008','787302109235 ',39,25,to_date('2012-1-11','YYYY-MM-DD'));
commit
购买之前
购买之后:
存储过程类:
教材库添加新书的存储过程
declare
in_BNumber char(20):='486548715421';
in_bname char(40):='数据库系统概论';
in_BSpricer number:=45;
in_BIpricer number:=35;
in_sto_ID char(5):='02';
in_BSnumber char(20):='012';
begin
in_Book( in_BNumber,in_bname,in_BSpricer, in_BIpricer,in_sto_ID,in_BSnumber);
dbms_output.put_line(in_BNumber||'---'||in_bname||'---'||in_BSpricer||'---'||in_BIpricer||'---'||in_sto_ID||'---'||in_BSnumber);
commit;
end;
验证存储过程:
declare
in_BNumber char(20):='486548715421';
in_bname char(50):='数据库系统概论';
in_BSpricer double:=25;
in_BIpricer double:=35;
in_sto_ID char(5):='02';
in_BSnumber char(20):='012'
begin
i_Book( in_BNumber,in_bname,in_BSpricer, in_BIpricer,in_sto_ID,in_BSnumber);
dbms_output.put_line(in_BNumber||'---'||in_bname||'---'||in_BSpricer||'---'||in_BIpricerr||'---'||in_sto_ID||'----'||in_BSnumber);
end;
存储过程运行前:
存储过程运行后:
学校退书存储过程
Create or replace procedure back_book(vvv backbook.backnumber%type, STO backbook.sto_id%type,bsn backbook.bsnumber%type,bnu backbook.bnumber%type,
bac backbook.backamount%type,bid backbook.bidate%type,bca backbook.bcancel_result%type)
as
begin
insert into backbook(backnumber,sto_id,bsnumber,bnumber,backamount,bidate,bcancel_result)
values(vvv,Sto,bsn,bnu,bac,bid,bca);
commit;
end;
验证存储过程:
declare
a char(8):='011';
b char(8):='001';
c char(20):='008';
d char(20):= '787302109242';
e int:=30;
f date:=to_date('2012-1-12','YYYY-MM-DD');
g char(50):='发书错误'
begin
back_book(a,b,c,d,e,f,g);
end;
退书之前:
退书之后:
对图书信息更新的存储过程
create or replace procedure update_Goods is
begin
update book
set bspricre= 40
where bname = '数据库系统概论';
commit;
end ;
执行后:
begin update_goods;
end;
存储过程运行前:
存储过程运行后:
删除书库中图书的存储过程
create or replace procedure delete_book is
begin
delete
from book
where bname = '数据库系统概论';
commit;
end ;
执行;
begin delete_book;
end;
执行前:
执行后
4.1.2 数据入库
数据入库过程就是数据录入的过程。在SQL中,可以用EXCEL批量导入的方法录入,也可以逐条录入。由于学校定书的数量很大,所以采用EXCEL批量导入的方式录入。
4.2 数据库测试
数据库测试是数据库设计必不可少的阶段,它是对整个数据库设计合不合格的检验,也是判定此数据库设计是否达到目标的标准。由于这次的实习的时间较紧许多复杂的功能在此次实习中没有完成,只完成了一些简单的功能。
5.总结
两个周的数据库实习给我留下了一个感觉,就是累。由于这次的实习是和考试穿插进行的,然而考试的科目都是比较难的科目,所以我们往往是白天一天实习,晚上还要上自习,一天基本上没有什么休息时间了。虽然很累但是感觉这两个周是我大学生活中过的最充实的两个周了,这两个周让我学到了很多的东西。
通过这次实习让我更加深刻的理解了书本上的知识,得到了一个建立数据库的实践机会,将课本上的知识变为实践。通过这两个周的实习也大大的锻炼了我分析解决问题的能力,在建立数据库的初期,我觉得数据库的建立好像不难,但是越往后做越发现,越做越难,因为在往后做的过程中,发现了前面的数据项有问题或者是关系模式不对,因此就又要回过头去修改数据,修改E-R图,因此浪费了很多的时间。
令人遗憾的是在这次实践中,我所做的教材购销系统并没有是想预期的功能,本来是想着挺简单的,但是实践起来真的很难,再加上时间紧迫,所以就只实现了一些简单的功能。
虽然这次实习圆满结束了,但我感觉到有点遗憾,因为没能与实际的编程语言联系起来,没能设计出应用程序和图形界面,总觉得有点缺憾。如果能设计出一个能真正使用的数据库应用系统那就更好了。
总之,通过这次数据库实习,我收获很大,感受颇深
6.附录
附录1
数据项的定义:
数据项编号
数据项名
数据项含义
与其他数据相关系
类型
长度
取值范围
D1-1
BSNumber
出版社编号
Char
10
D1-2
BSupportName
出版社名称
Char
50
D1-3
BSaddress
出版社地址
Char
50
D1-4
BSPhone
出版社电话
Char
11
D2-1
StuNumber
班长学号
Char
20
D2-2
StuName
班长姓名
Char
20
D2-3
StuMajor
班长专业
Char
20
D2-4
StuClass
班长班级
Char
20
D3-1
BNumber
图书编号
Char
20
D3-2
BName
图书名称
Char
20
D3-3
BSPrice
图书进价
Char
20
D3-4
BIprice
图书售价
number
0~999
D3-4
BPublish
图书出版社
Char
30
D3-5
BRemain
图书剩余量
Int
0~100000
D4-1
SBBNumber
班长购书单编号
Char
20
D4-2
BBAmount
购书数量
Int
0~1000
D4-3
BBnumber
学校购书单号
Char
20
D4-4
PDelivery
出版社发书单
Char
20
D4-5
PPerson
出版社发货人
Char
20
D5-1
BackNumber
退书单号
Char
20
D5_2
BCancel_Result
退书理由
Char
500
D5_3
Sale_ID
销售单
Char
20
D6-1
Sto_ID
仓库编号
Char
10
D6_2
StoManger
仓库管理员
Char
20
D6_3
Sto
展开阅读全文