《《数据库系统原理》课程设计.doc》由会员分享,可在线阅读,更多相关《《数据库系统原理》课程设计.doc(23页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据库系统原理课程设计高福娜(信息与电气工程学院,计算机科学与技术,计本2班,20122212611)摘要:本系统是针对高等院校的学生成绩管理,因此成绩管理系统的用户包括系统管理员、教师和学生。主要涉及系部信息、班级信息、任课教师信息、学生信息、课程信息以及选课记录和成绩等多种数据信息。关键词:需求分析,概念结构设计,逻辑结构设计,物理结构设计,数据库实施,数据库运行和维护。1. 需求分析1.1 引言 进行数据库设计首先必须准确了解也分析用户需求(包括数据和处理)。目的是为成绩管理数据库系统的设计打下牢牢的基础,是数据库开发的重要文件依据,主要为数据库设计人员使用,是用户和系统分析员的项目依据
2、文件。作为“地基”的需求分析是否做得充分与准确,它决定了在其上构建数据库大厦的速度和质量。需求分析做得不好,甚至会导致整个数据库设计返工重做。本系统的开发是设计一个学生成绩管理系统(数据库系统)。1.2 用户需求本系统是针对高等院校的学生成绩管理,因此成绩管理系统的用户包括系统管理员、教师和学生。主要涉及系部信息、班级信息、任课教师信息、学生信息、课程信息以及选课记录和成绩等多种数据信息。实现的具体功能如下:基本信息管理系统管理员负责对各种基本信息的录入、修改、删除等操作。学生成绩管理系统管理员负责对学生成绩的录入、修改、删除等操作,学生可以查询各科成绩。信息查询统计学生可以查询基本信息和各科
3、的考试成绩,老师可以查询基本信息和授课信息,系统管理员负责把老师提交的学生成绩进行管理,计算总成绩和平均成绩,最后再输出所有的信息。系统用户管理系统管理员负责用不同的权限来限制不同用户对系统的使用。以上是用户对系统的基本的功能要求,此外用户还要求系统的效率要高,查询速度要快,比较小的冗余,易维护,具有较高的数据安全性。1.3 系统目标设计1.使得学生的成绩管理工作更加清晰、条理化、自动化。2.很容易地完成学生信息的输入、查询、更新、保存等。3.当学生需要查询成绩时,可以很简单地将其需要的信息从数据库中查找出来。4.可以对学生的成绩进行一些简单的处理,例如:求和,求平均。1.4系统功能要求(1)
4、学生基本信息系统1.能够完成新、老生信息的输人、修改、插人、删除等工作。2.可以按照特定的信息进行查找,并按照特定的要求进行排序。(2)课程信息系统1.能够完成课程信息的输人、修改、插人、删除等工作。2.可以按照特定的信息进行查找,并按照特定的要求进行排序。(3)学生选课信息系统1.能够完成选课信息的输人、修改、插人、删除等工作。2.可以按照特定的信息进行查找、输人、修改、插人、删除并按照特定的要求进行排序。3.可以对学生的成绩进行一些简单的处理,例如:求和,求平均。1.5 系统功能模块图图1.11.6 数据字典数据字典是系统中各类数据描述的集合,是进行详细的数据收集和数据分析所获得的主要成果
5、,数据字典是对系统所用到的所有表结构的描述,学生成绩管理的主要数据见下表。序号字段别名数据类型数据长度码1sno学号char20Y2sname姓名char20N3ssex性别char20N4sage年龄intN5sdept所在系char20N表student序号字段别名数据类型数据长度码1cno课程号char20Y2cname课程名char20N3cpno先行课char20N4ccredit学分intN 表course序号字段别名数据类型数据长度码1sno学号char20Y2cno课程号char20Y3grade成绩intN 表sc1.7 数据结构数据结构反映了数据之间的组合关系。一个数据结构
6、可以由若干个数据项组成,也可以由若干个数据结构组成,或若干个数据项和数据结构混合组成。经过数据项和用户需求的分析,我对本系统一共分了4个组,具体如下表所示:数据结构名含义说明组成部分学生基本信息管理描述学生基本信息学号+姓名+性别+年龄+所在系课程基本信息管理描述课程基本信息课程号+课程名+先行课+学分学生选课、成绩管理描述学生平均成绩、总成绩的计算,统计相关信息学号+课程号+成绩系统管理描述用户修改密码,帮助信息 数据结构表1.8 数据流数据流是数据结构在系统内传输的路径。通过对用户的需求分析,以及数据项和数据流的设计,得出了相应的数据流描述如下表所示:编号数据流名组成流量备注1学生信息学号
7、+姓名+性别+年龄+所在系大学生基本信息2课程信息课程号+课程名+先行课+学分大课程基本信息3学生成绩学号+姓名+性别+学号+课程号+成绩大学生详细信息4科目成绩学号+课程号+成绩大学生考试成绩数据流定义表1.9 数据存储数据存储是数据结构停留或保存的地方,也是数据流的来源和去向之一。经过数据项、数据结构和数据流的设计,本系统一共选用了三个数据存储,具体对数据存储的描述通常如下表所示:编号数据存储名输入数据流输出数据流数据量存取方式1学生相关信息01大批处理、顺序检索2课程相关信息02一般批处理、顺序检索3学生成绩单3,4大批处理、更新、顺序检索 数据存储图1.10 处理过程处理过程的具体处理
8、逻辑一般用判定表或判定树来描述。对于本系统用于学生学籍管理一共设计了四种处理方法,具体处理方式如下表所示:编号名称输入数据流输出数据流备注1插入修改1,21,2插入学生信息和课程信息 2更新修改1,21,2更新学生信息和课程信息3删除修改1,21,2删除学生信息和课程信息4统计分析3,43,4统计学生信息和成绩 处理过程图2.概念结构设计概念结构设计是整个数据库设计的关键,它通过对用户需求进行综合、归纳与抽形成独立于具体DBMS的概念模型.2.1系统E-R图1 对于学生信息管理,我们可以将学生实体抽象出来。图2.12. 对于课程信息管理,我们可以将课程实体抽象出来。图2.23. 对于选课信息管
9、理图2.34. 总的E-R图 图2.43.逻辑结构设计3.1 关系模型将E-R图转换为关系模型实际上就是要奖实体型、实体的属性和实体型之间的联系转换为关系模式,这种转换一般遵循如下原则:一个实体型转换为一个关系模式。实体的属性就是关系的属性,实体的码就是关系的码。对于实体型间的联系则有以下不同的情况:(1)一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的个实体的码以及联系本身的属性均转换为关系的属性,每个实体的码均是该关系的侯选码。如果与某一端实体对应的关系模式合并,则需要在关系模式的属性中加入另一个关系模式的码和联
10、系本身的属性。(2)一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的个各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为n端实体的码。(3)一个m:n联系转换为一个关系模式。与该联系相连的个实体的码以及联系本身的属性均转换为关系的属性,各实体的码组成关系的码或关系码的一部分。(4)3个或3个以上实体间的一个多元联系可以转换为一个关系模式。与该多元联系相连的各实体的码以及联系本身的属性均转换为关系的属性,各实体的码组成关系的码或关系码的一部分。(5)具有相同码的关系模式可合并。将概念结构设计阶段设计好的基本E-R
11、图转换为关系模型,如下所示:n 学生(学号,姓名,性别,年龄,所在系),此为学生实体对应的关系模式。n 课程(课程号,课程名,先行课,学分),此为课程实体对应的关系模式。n 选修(学号,课程号,成绩),此为选修实体对应的关系模式。4. 物理结构设计4.1表的创建和信息的输入(1) 学生表create table student(sno char(20),sname char(20),ssex char(20),sage smallint,sdept char(20);insert into Studentvalues (2000115121,李勇,男,20,CS);insert into St
12、udentvalues (2000115122,刘晨,女,19,CS);insert into Studentvalues (2000115123,王敏,女,18,ma);insert into Studentvalues (2000115125,张立,男,19,CS);图4.1(2) 课程表create table course(cno char(20),cname char(20),cpno char(20),ccredit smallint);insert into course values (1,数据库,5,4);insert into course values (2,数学,nul
13、l,2);insert into course values (3,信息系统,1,4);insert into course values (4,操作系统,6,3);insert into course values (5,数据结构,7,4);insert into course values (6,数据处理,null,2);insert into course values (7,PASCAL语言,6,4);图4.2(3)选课表create table sc(sno char(20),cno char(20),grade smallint);insert into sc values (20
14、0215121,1,92);insert into sc values (200215121,2,85);insert into sc values (200215121,3,88);insert into sc values (200215122,2,90);insert into sc values (200215122,3,80);图4.3(4)对表的查询,信息的修改、删除查询学号为200215121的同学的姓名select snamefrom Student where sno=200215121; 图4.4.1查询课号为2的课程名select cnamefrom coursewher
15、e cno=2;图4.4.2查询学号为200215121的成绩select gradefrom scwhere sno=200215121;图4.4.3计算2号课的平均成绩select AVG(grade)from scwhere cno=2;图4.4.4计算2号课的最大成绩select max(grade)from scwhere cno=2;图4.4.5查找2号课的成绩,并按降序排序select gradefrom scwhere cno=2order by grade desc;图4.4.6将所有学生年龄加1update Student set sage=sage+1;图4.4.7从st
16、udent中删除学号是1的记录deletefrom Studentwhere sno=200215128;图4.4.85. 数据库的运行和维护数据库试运行合格后,数据库开发工作就基本完成,即可投入正式运行了。但是,由于应用环境在不断变化,数据库运行过程中物理存储也会不断变化,对数据库设计进行评价、调整、修改等维护工作是一个长期的任务,也是设计工作的继续和提高。5.1 数据库的安全性 在DB存储这一级可采用密码技术,当物理存储设备失窃后,它起到保密作用。在数据库系统这一级中提供两种控制:用户标识和鉴定,数据存取控制。在ORACLE多用户数据库系统中,安全机制作下列工作:(1)防止非授权的数据库存
17、取;(2)防止非授权的对模式对象的存取;(3)控制磁盘使用;(4)控制系统资源使用;(5)审计用户动作。ORACLE利用下列机制管理数据库安全性: (1)数据库用户和模式; (2)特权; (3)角色; (4)存储设置和空间份额; (5)资源限制; (6)审计。5.2 数据库的存取控制 ORACLE保护信息的方法采用任意存取控制来控制全部用户对命名对象的存取。用户对对象的存取受特权控制。一种特权是存取一命名对象的许可,为一种规定格式。 ORACLE使用多种不同的机制管理数据库安全性,其中有两种机制:模式和用户。模式为模式对象的集合,模式对象如表、视图、过程和包等。第一数据库有一组模式。 每一OR
18、ACLE数据库有一组合法的用户,可存取一数据库,可运行一数据库应用和使用该用户各连接到定义该用户的数据库。当建立一数据库用户时,对该用户建立一个相应的模式,模式名与用户名相同。一旦用户连接一数据库,该用户就可存取相应模式中的全部对象,一个用户仅与同名的模式相联系,所以用户和模式是类似的。 用户的存取权利受用户安全域的设置所控制,在建立一个数据库的新用户或更改一已有用户时,安全管理员对用户安全域有下列决策: (1) 是由数据库系统还是由操作系统维护用户授权信息。 (2)设置用户的缺省表空间和临时表空间。 (3)列出用户可存的表空间和在表空间中可使用空间份额。 (4)设置用户资源限制的环境文件,该
19、限制规定了用户可用的系统资源的总量。 (5)规定用户具有的特权和角色,可存取相应的对象。每一个用户有一个安全域,它是一组特性,可决定下列内容:(1) 用户可用的特权和角色;(2) 用户可用的表空间的份额;(3) 用户的系统资源限制。5.3 审计审计是对选定的用户动作的监控和记录,通常用于: 审查可疑的活动。例如:数据被非授权用户所删除,此时安全管理员可决定对该数据库的所有连接进行审计,以及对数据库的所有表的成功地或不成功地删除进行审计。 监视和收集关于指定数据库活动的数据。例如:DBA可收集哪些被修改、执行了多少次逻辑的I/O等统计数据。ORACLE支持三种审计类型: 语句审计,对某种类型的S
20、QL语句审计,不指定结构或对象。 特权审计,对执行相应动作的系统特权的使用审计。 对象审计,对一特殊模式对象上的指定语句的审计。ORACLE所允许的审计选择限于下列方面: 审计语句的成功执行、不成功执行,或者其两者。 对每一用户会话审计语句执行一次或者对语句每次执行审计一次。 对全部用户或指定用户的活动的审计。当数据库的审计是使能的,在语句执行阶段产生审计记录。审计记录包含有审计的操作、用户执行的操作、操作的日期和时间等信息。审计记录可存在数据字典表(称为审计记录)或操作系统审计记录中。数据库审计记录是在SYS模式的AUD$表中。5.4 数据完整性 它是指数据的正确性和相容性。数据的完整性是为
21、了防止数据库存在不符合主义的数据,防止错误信息输入和输出,即数据要遵守由DBA或应用开发者所决定的一组预定义的规则。ORACLE应用于关系数据库的表的数据完整性有下列类型:(l) 在插入或修改表的行时允许不允许包含有空值的列,称为空与非空规则。(2)一列值规则,允许插入或修改的表行在该列上的值唯一。(3)引用完整性规则,同关系模型定义(4)用户对定义的规则,为复杂性完整性检查。ORACLE允许定义和实施上述每一种类型的数据完整性规则,这些规则可用完整性约束和数据库触发器定义。1 完整性约束ORACLE利用完整性约束机制防止无效的数据进入数据库的基表,如果任何DML执行结果破坏完整性约束,该语句
22、被回滚并返回一上个错误。ORACLE实现的完整性约束完全遵守ANSIX3。135-1989和ISO9075-1989标准。利用完整性约束实施数据完整性规则有下列优点:(l) 定义或更改表时,不需要程序设计,便很容易地编写程序并可消除程序性错误,其功能是由ORACLE控制。所以说明性完整性约束优于应用代码和数据库触发器。(2) 对表所定义的完整性约束是存储在数据字典中,所以由任何应用进入的数据都必须遵守与表相关联的完整性约束。(3) 具有最大的开发能力。当由完整性约束所实施的事务规则改变时,管理员只需改变完整性约束的定义,所有应用自动地遵守所修改的约束。(4) 由于完整性约束存储在数据字典中,数
23、据库应用可利用这些信息,在SQL语句执行之前或由ORACLE检查之前,就可立即反馈信息。(5) 由于完整性约束说明的语义是清楚地定义,对于每一指定说明规则可实现性能优化。(6)由于完整性约束可临时地使不能,以致在装入大量数据时可避免约束检索的开销。当数据库装入完成时,完整性约束可容易地使其能,任何破坏完整性约束的任何新行在例外表中列出。 ORACLE的DBA和应用开始者对列的值输入可使用的完整性约束有下列类型:(1) NOT NULL约束:如果在表的一列的值不允许为空,则需在该列指定NOT NULL约束。(2)UNIQUE码约束:在表指定的列或组列上不允许两行是具有重复值时,则需要该列或组列上
24、指定UNIQUE码完整性约束。在UNIQUE码约束定义中的列或组列称为唯一码。所有唯一完整性约束是用索引方法实施。(3) PRIMARY KEY约束:在数据库中每一个表可有一个PRIMARY KEY约束。包含在PRIMARYKEY完整性约束的列或组列称为主码,每个表可有一个主码。ORACLE使用索引实施PRIMARY KEY约束。(4) FOREIGN KEY约束(可称引用约束):在关系数据库中表可通过公共列相关联,该规则控制必须维护的列之间的关系。包含在引用完整性约束定义的列或组列称为外来码。由外来码所引用的表中的唯一码或方码,称为引用码。包含有外来码的表称为子表或从属表。由子表的外来码所引
25、用的表称为双亲表或引用表。如果对表的每一行,其外来码的值必须与主码中一值相匹配,则需指定引用完整性约束。(5)CHECK约束:表的每行对一指定的条件必须是TRUE或未知,则需在一列或列组上指定CHECK完整性约束。如果在发出一个DML语句时,CHECK约束的条件计算得FALSE时,该语句被回滚。5.5 并发控制 数据库是一个共享资源,可为多个应用程序所共享。这些程序可串行运行,但在许多情况下,由于应用程序涉及的数据量可能很大,常常会涉及输入/输出的交换。为了有效地利用数据库资源,可能多个程序或一个程序的多个进程并行地运行,这就是数据库的并行操作。在多用户数据库环境中,多个用户程序可并行地存取数
26、据库,如果不对并发操作进行控制,会存取不正确的数据,或破坏数据库数据的一致性。(1) 封锁 在多用户数据库中一般采用某些数据封锁来解决并发操作中的数据一致性和完整性问题。封锁是防止存取同一资源的用户之间破坏性的干扰的机制,该干扰是指不正确地修改数据或不正确地更改数据结构。在多用户数据库中使用两种封锁:排它(专用)封锁和共享封锁。排它封锁禁止相关资源的共享,如果一事务以排它方式封锁一资源,仅仅该事务可更改该资源,直至释放排它封锁。共享封锁允许相关资源可以共享,几个用户可同时读同一数据,几个事务可在同一资源上获取共享封锁。共享封锁比排它封锁具有更高的数据并行性。 在多用户系统中使用封锁后会出现死锁
27、,引起一些事务不能继续工作。当两个或多个用户彼此等待所封锁数据时可发生死锁。(2) ORACLE多种一致性模型。 ORACLE利用事务和封锁机制提供数据并发存取和数据完整性。在一事务内由语句获取的全部封锁在事务期间被保持,防止其它并行事务的破坏性干扰。一个事务的SQL语句所作的修改在它提交之后所启动的事务中才是可见的。在一事务中由语句所获取的全部封锁在该事务提交或回滚时被释放。 ORACLE在两个不同级上提供读一致性:语句级读一致性和事务级一致性。ORCLE总是实施语句级读一致性,保证单个查询所返回的数据与该查询开始时刻相一致。所以一个查询从不会看到在查询执行过程中提交的其它事务所作的任何修改
28、。为了实现语句级读一致性,在查询进入执行阶段时,在注视SCN的时候为止所提交的数据是有效的,而在语句执行开始之后其它事务提交的任何修改,查询将是看不到的。 ORACLE允许选择实施事务级读一致性,它保证在同一事务内所有查询的数据(4) 封锁机制 ORACLE自动地使用不同封锁类型来控制数据的并行存取,防止用户之间的破坏性干扰。ORACLE为一事务自动地封锁一资源以防止其它事务对同一资源的排它封锁。在某种事件出现或事务不再需要该资源时自动地释放。(5) 手工的数据封锁下列情况允许使用选择代替ORACLE缺省的封锁机制:l 应用需要事务级读一致或可重复读。l 应用需要一事务对一资源可排它存取,为了
29、继续它的语句,具有对资源排它存取的事务不必等待其它事务完成。ORACLE自动封锁可在二级被替代:事务级各系统级。l 事务级:包含下列SQL语句的事务替代ORACLE缺省封锁:LOCK TABLE命令、SELECTFOR UPDATE命令、具有READONLY选项的SET TRANSACTIN命令。由这些语句所获得的封锁在事务提交或回滚后所释放。55 数据库恢复当我们使用一个数据库时,总希望数据库的内容是可靠的、正确的,但由于计算机系统的故障(硬件故障、软件故障、网络故障、进程故障和系统故障)影响数据库系统的操作,影响数据库中数据的正确性,甚至破坏数据库,使数据库中全部或部分数据丢失。因此当发生
30、上述故障后,希望能重新建立一个完整的数据库,该处理称为数据库恢复。恢复子系统是数据库管理系统的一个重要组成部分。恢复处理随所发生的故障类型所影响的结构而变化。5.5.1 实例故障的恢复当实例意外地(如掉电、后台进程故障等)或预料地(发出SHUTDOUMABORT语句)中止时出现实例故障,此时需要实例恢复。实例恢复将数据库恢复一故障之前的事务一致状态。如果在在线后备发现实例故障,则需介质恢复。在其它情况ORACLE在下次数据库起动时(对新实例装配和打开),自动地执行实例恢复。如果需要,从装配状态变为打开状态,自动地激发实例恢复,由下列处理:(1) 为了解恢复数据文件中没有记录的数据,进行向前滚。
31、该数据记录在在线日志,包括对回滚段的内容恢复。(2) 回滚未提交的事务,按步1重新生成回滚段所指定的操作。(3) 释放在故障时正在处理事务所持有的资源。(4) 解决在故障时正经历一阶段提交的任何悬而未决的分布事务。5.5.2 介质故障的恢复 介质故障是当一个文件、一个文件的部分或一磁盘不能读或不能写时出现的故障。介质故障的恢复有两种形式,决定于数据库运行的归档方式。 如果数据库是可运行的,以致它的在线日志仅可重用但不能归档,此时介质恢复为使用最新的完全后备的简单恢复。在完全后备执行的工作必须手工地重作。 如果数据库可运行,其在线日志是被归档的,该介质故障的恢复是一个实际恢复过程,重构受损的数据
32、库恢复到介质故障前的一个指定事务一致状态。不管哪种形式,介质故障的恢复总是将整个数据库恢复到故障之前的一个事务一致状态。如果数据库是在ARCHIVELOG方式运行,可有不同类型的介质恢复:完5.5.3全介质恢复和不完全介质恢复。 完全介质恢复可恢复全部丢失的修改。仅当所有必要的日志可用时才可能。有不同类型的完全介质恢复可使用,其决定于毁坏文件和数据库的可用性。例: 关闭数据库的恢复。当数据库可被装配却是关闭的,完全不能正常使用,此时可进行全部的或单个毁坏数据文件的完全介质恢复。 打开数据库的离线表空间的恢复。当数据库是打开的,完全介质恢复可以处理。未损的数据库表空间是在线的可以使用,而受损耗捕
33、空间是离线的,其所有数据文件作为恢复的单位。 打开数据库的离线表间的单个数据文件的恢复。当数据库是打开的,完全介质恢复可以处理。未损的数据库表空间是在线的可以使用,而所损的表空间是离线的,该表空间的指定所损的数据文件可被恢复。 使用后备的控制文件的完全介质恢复。当控制文件所有拷贝由于磁盘故障而受损时,可进行介质恢复而不丢失数据。不完全介质恢复是在完全介质恢复不可能或不要求时进行的介质恢复。重构受损的数据库,使其恢复介质故障前或用户出错之前的一个事务一致性状态。不完全介质恢复有不同类型的使用,决定于需要不完全介质恢复的情况,有下列类型:基于撤消、基于时间和基于修改的不完全恢复。 基于撤消恢复:在
34、某种情况,不完全介质恢复必须被控制,DBA可撤消在指定点的操作。基于撤消的恢复地在一个或多个日志组(在线的或归档的)已被介质故障所破坏,不能用于恢复过程时使用,所以介质恢复必须控制,以致在使用最近的、未损的日志组于数据文件后中止恢复操作。 基于时间和基于修改的恢复:如果DBA希望恢复到过去的某个指定点,不完全介质恢复地理想的。可在下列情况下使用: 当用户意外地删除一表,并注意到错误提交的估计时间,DBA可立即关闭数据库,恢复它到用户错误之前时刻。 由于系统故障,一个在线日志文件的部分被破坏,所以活动的日志文件突然不可使用,实例被中止,此时需要介质恢复。在恢复中可使用当前在线日志文件的未损部分,
35、DBA利用基于时间的恢复,一旦有将效的在线日志已应用于数据文件后停止恢复过程。在这两种情况下,不完全介质恢复的终点可由时间点或系统修改号(SCN)来指定。6. 设计体会与建议 通过努力,我们组设计出了一个学生成绩管理的数据库系统,这个系统可以帮助用户更好、更快、更有效地管理学生的成绩问题。在这个系统中,我们主要实现了的功能有能够完成信息的输人、修改、插人、删除等工作,可以按照特定的信息进行查找,并按照特定的要求进行排序,可以对学生的信息进行打印输出,学生成绩的输入、修改、删除等基本操作,成绩的综合统计功能,包括学生成绩按照不同条件进行排名。管理人员可以选择不同的排序条件,并可以将排序结果进行打印输出,计算各班的总分和平均分,并按照平均分将各班成绩进行排序,统计不及格考生的信息。其中有优点,但也存在不足的地方。优点是可以保证用户更好地管理数据,可以运用多种功能。不足的地方是我在设计触发器和存储过程的时候没有实现好,分析其中的原因,是我自己对触发器和存储过程没有更加深入的了解,平时没有花时间去练习,因此我决定在以后的学习中要更加努力。
限制150内