版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、中级软件设计师下午试题 -117( 总分: 89.05 ,做题时间: 90 分钟 )一、试题一 (总题数: 1,分数: 15.00) 说明 某房屋租赁公司欲建立一个房屋租赁服务系统, 统一管理房主和租赁者的信息, 从而快速地提供租赁服务。 该系统具有以下功能:1登记房主信息。 对于每名房主, 系统需登记其姓名、 住址和联系电话, 并将这些信息写入房主信息文件。 2登记房屋信息。所有在系统中登记的房屋都有一个唯一的识别号( 对于新增加的房屋,系统会自动为其分配一个识别号 ) 。除此之外,还需登记该房屋的地址、房型 ( 如平房、带阳台的楼房、独立式住宅等 ) 、最 多能够容纳的房客数、租金及房屋状
2、况 ( 待租赁、已出租 ) 。这些信息都保存在房屋信息文件中。一名房主 可以在系统中登记多个待租赁的房屋。3登记租赁者信息。 所有想通过该系统租赁房屋的租赁者, 必须首先在系统中登记个人信息, 包括:姓名、 住址、电话号码、出生年月和性别。这些信息都保存在租赁者信息文件中。4租赁房屋。已经登记在系统中的租赁者,可以得到一份系统提供的待租赁房屋列表。一旦租赁者从中找 到合适的房屋,就可以提出看房请求。系统会安排租赁者与房主见面。对于每次看房,系统会生成一条看 房记录并将其写入看房记录文件中。5收取手续费。房主登记完房屋后,系统会生成一份费用单,房主根据费用单缴纳相应的费用。:6变更房屋状态。当租
3、赁者与房主达成租房或退房协议后,房主向系统提交变更房屋状态的请求。系统将 根据房主的请求,修改房屋信息文件。数据流图 1-1 和图 1-2 分别给出了该系统的顶层数据流图和 0 层数据流图。(分数: 15.00 )(1) .使用说明中给出的词汇,将数据流图1-1中 处的数据流补充完整。(分数:5.00 ) 正确答案: (1) 费用单 (2) 待租赁房屋列表 (3) 看房请求 (4) 变更房屋状态请求 ) 解析:(2) .使用说明中给出的词汇,将数据流图图1-2中的(5)(8)补充完整。(分数:5.00 ) 正确答案: (5) 房主信息文件 (6) 租赁者信息文件 (7) 房屋信息文件 (8)
4、看房记录文件 ) 解析:(3) . 数据流程图图 1-2 中缺失了三条数据流,请指出这三条数据流的起点、终点和数据流名称。* (分数: 5.00)正确答案: (1) 起点:房主 终点:变更房屋状态数据流名称:变更房屋状态请求(2) 起点:租赁者 终点:登记租赁者信息 数据流名称:租赁者信息(3) 起点:租赁者 终点:安排租赁者看房 数据流名称:看房请求 )解析: 解析 本题考查的是分层数据流图,该题型每年必考,是需要重点掌握的内容。 解题的两大原则:数据平衡原则,系统功能描述与数据流图的一致性原则。首先根据数据平衡原则有:在0 层图中,与“房主”相关的数据流有 5条。根据数据平衡原则顶层图应有
5、与之对应的数据流,但“费 用单”数据流在顶层图中找不到,所以 (1) 应是“费用单”数据流。通过比较顶层图和 0层图中与外部实体“租赁者”相关的数据流, 可以发现: 出现在 0层图上的数据流“待 租赁房屋列表”是顶层图上没有的, 且与 (2) 处的数据流方向一致。 由此可以判定, (2) 处的数据流就是“待 租赁房屋列表”。而顶层图中的数据流“租赁者信息”却是 0层图上没有的。这样就找到了 0层图上缺失 的第 2条数据流:租赁者信息,它的起点是“租赁者”,终点是加工“登记租赁者信息”。根据系统功能描述与数据流图的一致性原则有:由于(4)处缺失的数据流是一条输入数据流,从说明中可以看出,只有功能
6、6 “当租赁者与房主达成租房或退房协议后,房主向系统提交变更房屋状态的请求”所描述的数据流没有在“房主”与系统之间体现岀来。因此可以确定,(4)处缺失的数据流就是“变更房屋状态请求”。相应的,可以确定,在0层图中缺失的其中一条数据流也是它,其起点是“房主”,终点是“变更房屋状态”这个加工。由于说明中有“租赁者”相关的功能“一旦租赁者从中找至倍适的房屋,就可以提出看房请求”,这一功 能未在图中体现出来。这样就能确定(3)处的数据流应该是“看房请求”。而0层图中也没有出现这条数据流。所以,0层图中缺失的第3条数据流就是“看房请求”,它的起点是“租赁者”,终点是加工“安排 租赁者看房”。由说明的描述
7、可以得知,本系统中的数据存储有:房主信息文件、房屋信息文件、租赁者信息文件、看房记录文件。下面就可以根据相应的加工对号入座了。显然,(5)处的是房主信息文件;(6)处的是租赁者信息文件;(7)处的是房屋信息文件;(8)处的是看房记录文件。二、试题二(总题数:1,分数:15.00)说明某汽车维修站拟开发一套小型汽车维修管理系统,对车辆的维修情况进行管理。1 对于新客户及车辆,汽车维修管理系统首先登记客户信息,包括:客户编号、客户名称、客户性质(个人、单位)、折扣率、联系人、联系电话等信息;还要记录客户的车辆信息,包括:车牌号、车型、颜色、 车辆类别等信息。一个客户至少有一台车。客户及车辆信息如表
8、2-1所示。2记录维修车辆的故障信息。包括:维修类型(普通、加急)、作业分类(大、中、小修)、结算方式(自付、三包、索赔)等信息。维修厂的员工分为:维修员和业务员。车辆维修首先委托给业务员。业务员对车辆进 行检查和故障分析后,与客户磋商,确定故障现象,生成维修委托书。如表2-2所示。3. 维修车间根据维修委托书和车辆的故障现象,在已有的维修项目中选择并确定一个或多个具体维修项目,安排相关的维修工及工时,生成维修派工单。维修派工单如表2-3所示。4. 客户车辆在车间修理完毕后,根据维修项目单价和维修派工单中的工时计算车辆此次维修的总费用,记录在委托书中。根据需求阶段收集的信息,设计的实体联系图(
9、见图2-1)和关系模式(不完整)如下所示。图2-1中业务员和维修工是员工的子实体。概念结构设计逻辑结构设计客户(5)_,折扣率,联系人,联系电话 ) 车辆(车牌号,客户编号,车型,颜色,车辆类别)委托书(6)_,维修类型,作业分类,结算方式,进厂时间,预计完工时间,登记日期,故障描述,总费 用)维修项目(维修项目编号,维修项目,单价 )派工单(7)_,工时)员工(8)_,工种,员工类型,级别)(分数:15.00 )(1).根据问题描述,填写图 2.1中(1) 处联系的类型。联系类型分为一对一、一对多和多对多三种, 分别使用1:1、1:n或1:*、m:n或*:*表示。(分数:3.75 ) 正确答
10、案:(1) n 或m或* (2) 1n 或m或*n 或m或*) 解析:.1中的联系并指明其联系类型。联系名可为:联系1,联系2,。(分数:3.75 )正确答案:(完整的实体联系图如下图所示。3.75 )系统需解析:(3).根据图2-1和说明,将逻辑结构设计阶段生成的关系模式中的空(5)(8)补充完整。(分数:正确答案:(5)客户编号,客户名称,客户性质(6)委托书编号,客户编号,车牌号,业务员编号或委托书编号,车牌号,业务员编号(7)委托书编号,维修工编号,维修项目编号(8)员工编号,员工姓名)解析:(4).根据问题描述,写岀客户、委托书和派工单这三个关系的主键。(分数:3.75 ) 正确答案
11、:(客户:客户编号委托书:委托书编号派工单:委托书编号,维修项目编号,维修工编号)解析:解析本题考查数据库设计,设计考点有:数据库的概念结构设计和逻辑结构设计。问题1由维修委托书的故障描述,维修类型、作业分类,可知,一台车可能有多个故障,对应多个维修 委托书,所以(1)空填写:* ;题目中“维修车间根据维修委托书和车辆的故障现象,在已有的维修项目中 选择并确定一个或多个具体维修项目,安排相关的维修工及工时,生成维修派工单”,很明显,一份委托 书包含了一个或多个维修项目,而每个维修项目可以由多个维修工来完成,每一个维修工又可以完成多个 维修项目,所以(2)空填写:1,(3)、 填写:*。问题2需
12、要补充车辆和客户之间以及委托书和业务员之间的关系。由题目“一个客户至少拥有一台车” 可知,客户和车辆之间是“拥有”关系,且是一对多的关系;在由题目中“业务员对车辆进行检查和故障 分析后,与客户磋商,确定故障现象,生成维修委托书”可知,业务员与委托书之间是“委托”关系,且 一名业务员可以受理多份委托书,而一份委托书由一名业务员来生成。问题3本题又是补充逻辑结构设计题,几乎每年都考,这类题目只要仔细看需求分析结果或者仔细观察 题目中已知的表,很容易就能做岀,关键是需要细心,不要漏掉什么属性。根据客户和车辆信息表可知, 客户关系应包括客户编号、客户名称、客户性质、折扣率、联系人等属性,主键显然为客户
13、编号;而车辆 关系应包括车牌号、客户编号、车型、颜色、车辆类别等属性,主键为车牌号。根据维修委托书表可知委 托书应包括委托书编号、车牌号、客户编号、业务员编号、维修类型等属性,其主键为委托书编号。根据 维修派工单可知,派工单应包括委托书编号、维修项目编号、维修工编号、工时等属性,主键是委托书编 号、维修项目编号和维修员编号。根据实体联系图知,员工包括业务员和维修工,他们共有的属性是员工 编号、员工姓名、工种、员工类型、级别等属性,主键为员工编号。问题4参考问题3的分析。三、试题三(总题数:1,分数:15.00)说明某图书管理系统的主要功能如下。1.图书管理系统的资源目录中记录着所有可供读者借阅
14、的资源,每项资源都有一个唯一的索引号。登记每项资源的名称、岀版时间和资源状态(可借阅或已借岀)。2资源可以分为两类:图书和唱片。对于图书,系统还需登记作者和页数;对于唱片,还需登记演唱者和 介质类型(CD或者磁带)。3读者信息保存在图书管理系统的读者信息数据库中,记录的信息包括:读者的识别码和读者姓名。系统 为每个读者创建了一个借书记录文件,用来保存读者所借资源的相关信息。现采用面向对象方法开发该图书管理系统。识别类是面向对象分析的第一步。比较常用的识别类的方法是 寻找问题描述中的名词,再根据相关规则从这些名词中删除不可能成为类的名词,最终得到构成该系统的 类。表3-1给岀了说明中岀现的所有名
15、词。通过对表3-1中的名词进行分析,最终得到了图3-1所示的UML表类图(类的说明见表3-21(分数:15.00 )(1).表3-2所给出的类并不完整,根据说明和表3-1 ,将图3-1中的(a)(c)处补充完整。(分数:5.00 ) 正确答案:(a)资源目录;(b)图书;(c)唱片)解析:(2) .根据说明中的描述,给出图3-1中的类Catalogitem 以及(b)、(c)处所对应的类的关键属性(使用表3-1中给出的词汇),其中,Catalogitem有4个关键属性;(b)、(c)处对应的类各有2个关键属性。(分 数: 5.00 ) 正确答案:(Catalogitem 的属性:索引号、名称、
16、出版时间、资源状态图书的属性:作者、页数唱片的属性:演唱者、介质类型 )解析:(3) .识别关联的多重度是面向对象建模过程中的一个重要步骤。根据说明中给岀的描述,完成图3-1中的(1) (6)。*(分数:5.00 )正确答案:(1) 1,(2) 0.*,(3) 1,(4) 0.*,(5) 1,(6) 1 或者 0.1)解析:解析本题主要考查UML中的类图设计,题目3个问题都是对类图的元素进行补充。类图的设计是 根据系统的功能需求而来的,所以解题的关键在于对“系统功能说明”的理解。下面我们将通过对“系统 功能说明”的分析,来解答试题:从系统功能说明中的“图书管理系统的资源目录中记录着所有可供读者
17、阅读的资源”和“资源可分为两类: 图书和唱片”,可以得知1个资源目录中对应着多个可供读者借阅的资源,这些资源分为图书类与唱片类,所以(a)为资源目录,(b)和(c)分别为图书和唱片,同时(1)应填:1, 应填:0.*。(所有的可供读者借 阅资源数有可能为0,即还未录入任何资源的状态)。从“每项资源都有一个唯一的索引号。系统需登记每项资源的名称、岀版时间和资源状态”。可以得知,资源目录中的每项资源,即类图中的Catalogitern ,有索引号、名称、出版时间和资源状态这4个关键属性。从“对于图书,系统还需登记作者和页数;对于唱片,还需登记演唱者和介质类型(CD或者磁带)”,可以得知图书有作者和
18、页数 2个关键属性,唱片有演唱者和介质类型2个关键属性。Borrower代表读者,而Borroweritems为借书记录文件,同时系统功能说明中有“系统为每个读者创建了 一个借书记录文件,用来保存读者所借资源的相关信息”,所以它们之间的关系应为1对1,即第(5)空和第(6)空均填1。四、试题四(总题数:1,分数:15.00)说明一般的树结构常采用孩子-兄弟表示法表示,即用二叉链表作树的存储结构,链表中节点的两个链域分别指向该节点的第一个孩予节点和下一个兄弟节点。例如,图4-1(a)所示的树的孩子-兄弟表示如图4-1fb)所示。函数LevelTraverse()的功能是对给定树进行层序遍历。例如
19、,对图4-1所示的树进行层序遍历时,节点的访问次序为:D B A E F P C 。对树进行层序遍历时使用了队列结构,实现队列基本操作的函数原型如下表所示。Bool、Status类型定义如下:typedef enum FALSE = 0, TRUE = 1 Bool;typedef enum OVERFLOW = -2, UNDERFLOW = -1, ERROR = 0, OK = 1 Status;树的二叉链表节点定义如下:typedef struct Nodechar data ;struct Node *fimrstchiid, *nextbrother;Node, *TreeNode
20、;函数Status LevelTraverse(TreeNode root)/*层序遍历树,树采用孩子-兄弟表示法,root是树根节点的指针*/Queue tempQ;TreeNode ptr, brotherptr;if (!root)return ERROR;InitQueue( & tempQ);;brotherptr = root -> nextbrother;while (brotherptr) EnQueue(&tempQ, brotherptr);;/*end-while*/while( (3);printf( "%c'、t",
21、ptr- > data);if( (5) )continue;(6);brotherptr = ptr- > firstchild- > nextbrother;while(brotherptr) EnQueue(&tempQ, brotherptr);(7);/*end-while*/*end-while*/return OK;(分数:14.98 )填空项1:解析:填空项1:解析:填空项1:解析:填空项1:解析:填空项1:解析:填空项1:解析:填空项1:)/*LevelTraverse*/(正确答案:EnQueue(&tempQ,root)(正确答案:bro
22、therptr=brotherptr- > nextbrother )(正确答案:!lsEmpty(tempQ)(正确答案:DeQueue(&tempQ,&ptr)(正确答案:!ptr- > firstchild )(正确答案:EnQueue(&tempQ,ptr- >firstchild) )(正确答案:brotherptr=brotherptr- > nextbrother ) 解析:解析解答此题的关键在于理解用队列层序遍历树的过程。算法的流程是这样的:首先将树根节点 入队,然后将其所有兄弟节点入队 (当然,由于是根节点,故无兄弟节点 );完
23、成这一操作以后,便开始出 队、打印;在打印完了之后,需要进行一个判断,判断当前节点有无孩子节点,若有孩子节点,则将孩子 节点入队,同时将孩子节点的所有兄弟节点入队;完了以后继续进行出队操作,出队后再次判断当前节点 是否有孩子节点,并重复上述过程,直至所有节点输岀。接下来以本题为例来说明此过程。首先将树根节点D入队,并同时检查是否有兄弟节点,对于兄弟节点则一并入队。这里的 D没有兄弟节点,所以队列此时应是:Do接下来执行出队操作。D出队,出队以后检查 D是否有子节点,经检查,D有子节点B,所以将B入队,同时将B的兄弟节点A和E按顺序入队。得到队列: B A、Eo接下来再执行出队操作。B出队,同时
24、检查B是否有子节点,B无子节点,所以继续执行出队操作。 A出队,同时检查A是否有子节点,DA有子节点F,所以将F入队,同时将F的兄弟节点P入队。得到队列:E、F、Po接下来再次执行岀队操作。 接下来再次执行岀队操作。 个过程结束。E出队,E有子节点C,所以C出队。得:F、P、CoF出队,F无子节点,继续出队操作,P出队,P仍无子节点,最后 C出队,整通过对算法的详细分析,我们可以轻松得到答案。(1)应是对根节点root执行入队操作,即。EnQueue(&tempQ,root)。(2)在一个循环当中,循环变量是brotherptr ,此变量无语句对其进行更新,所以(2)必定是更新brot
25、herptr 。结合前面的算法分析可知 (2)应填:brotherpu=brotherptr- > nextbrother 。 、加上后面的语句“ printf("%c t",ptr- > data); ”是控制数据的输出,这些数据应是从队列中 得到,所以此处必有出队操作,同时在出队之前应判断队列是否为空,所以(3)、 填:!IsEmpty(tempQ)和DeQueue(&tempQ,&ptr)。(5)实际上是问"在什么情况下,要持续进行出队操作?”,前面的算法分析中已指出:若出队节点无子节点,则继续进行出队操作,所以(5)填:!ptr
26、- >firstchild 。(6)和(7)所在的语句段的功能是将刚出队节点的子节点及其兄弟节点入队,所以(6)填:EnQueue(&tempQ,ptr- >firstchild) 。 (7)和(2)相同,填:brotherptr- > brotherptr- > nextbrother 。五、试题五(总题数:1,分数:15.00)说明某游戏公司现欲开发一款面向儿童的模拟游戏,该游戏主要模拟现实世界中各种鸭子的发声特征、飞行特 征和外观特征。游戏需要模拟的鸭子种类及其特征如表下表所示。为支持将来能够模拟更多种类鸭子的特征,采用策略设计模式(strategy)设计
27、的类图如图5-1所示。其中,Duck 为抽象类,描述了抽象的鸭子,而类RubberDuck、MallardDuck、CottonDuck 和 RedHeadDuck分别描述具体的鸭子种类,方法fly() 、quack()和display()分别表示不同种类的鸭子都具有飞行特征、发声特征和外观特征;类 FlyBehavior与QuackBehavior为抽象类,分别用于表示抽象的飞行行为与发声 行为;类FlyNoWay与FlyWithWings分别描述不能飞行的行为和用翅膀飞行的行为;类Quack、Squeak与QuackNoWa分别描述发出“嘎嘎”声的行为、发出橡皮与空气摩擦声的行为与不发声的
28、行为。请填补以下 代码中的空缺。C+代码# include < iostream >using namespace (1);class FlyBehaviorpublic : fly()=0;class QuackBehavior public: (3) quack()=0;Class FlyWithWings :public F1yBehaviorclass FlyNoWay :public FlyBehavior public: void fly()cout<< "不能飞行!" >>endl;>class Quack :publ
29、ic QuackBehaviorpublic: void quack()cout << "发出 '嘎嘎'声!" << endl;class Squeak :public QuackBehavior public: void quack()cout << "发出空气与橡皮摩擦声!" << endl;class QuackNOWay :public QuackBehaVior public: void quack()cout << "不能发声!" <<
30、 endl;>C1ass Duckprotected:FlyBehavior * (4);QuackBehaVior * (5);public:VOid fly() (6)_VOid quack();virtual void display()=0;>class RubberDuck: public Duckpublic:RubberDuck() flyBehavior=new (8);quackBehavior=new (9);RubberDuck()if (!flyBehavior) delete flyBehaVior;i f(!quackBehavior)delete qu
31、ackBehaviorVoid display() /*此处省略显示橡皮鸭的代码*/其他代码省略(分数:15.03 )填空项1:(正确答案:std )解析:填空项1:(正确答案:Virtual void )解析:填空项1:(正确答案:Virtual void )解析:填空项1:(正确答案:flyBehavior )解析:填空项1:(正确答案:quackBehavior )解析:填空项1:(正确答案:flyBehavior- > fly()解析:填空项 1: (正确答案: quackBehaviot- > quack()解析:填空项1: (正确答案:FlyNoWay()解析:填空项1
32、: (正确答案:Squeak()解析:解析本题考查面向对象的程序设计的抽象类和多态。程序解释如下:(1)using namespacestd ; /* 所谓namespace,是指标识符的各种可见范围。C+标准程序库中的所有标识符都被定义于一个名为std的namespace中。*/由题中信息:类FlyBehavior与QuackBehavior为抽象类,分别用于表示抽象的飞行行为与发声行为, 而这两种行为对应的不止是一种方式,为了表示多种行为方式(即多态),需要定义虚函数,用以给子类进行重载。再由予类中的函数voidfly() 及void quack()可知,父类中的对应函数返回值也应为voi
33、d。所以和的填空如下:class FlyBehaviorpublic: (2) virtual void fly( )=0;;class Qutack: Behaviorpublic: (3) virtual void quack( )=0;(3)Duck 类的定义, 由子类 RubberDuck 类中出现的“ flvBehavior=newlyNoWay();quackBehavior=new Squeak(); ”可知这两个指针类型对象为nyBehavior。和quackBehavior。所以和(5)填空如下:Class Duck protected:FlyBehavior * (4) f
34、iybehavior;QuackBehavior * (5) quackBehavior;由“ FlyBehavior * flyBehavior;QuackBehavior * quackBehavior;” 及函数名可知,该函数体应调用FlyBehavior 类中的ny函数和QuackBehavior类中的quack函数。所以(6)和(7)填空如下: public:void fly() (6) fiybehavior-> fiy(); void quack() (7) quackBehavior-> quack(); ;virtual void display()=0;由题中所
35、给信息可知 RubberDuck是“发出空气与橡皮摩擦声”并且“不能飞行”的鸭子种类,因此构造函数中创建的对象 flyBehavior 和quackBehavior对应的类型分别为 FlyNoWay, Squeak,所以第(8)和(9)空的填空如下:Class RubberDuck: public Duck public:RubberDuck()flyBehavior=n ew (8) FiyNoWay();quackBehavior=new (9) Squeak();六、试题六(总题数:1,分数:14.00)说明某游戏公司现欲开发一款面向儿童的模拟游戏,该游戏主要模拟现实世界中各种鸭子的发声
36、特征、飞行特 征和外观特征。游戏需要模拟的鸭子种类及其特征如下表所示。为支持将来能够模拟更多种类鸭子的特征,采用策略设计模式(Strategy)设计的类图如图6-1所示。其中,Duck 为抽象类,描述了抽象的鸭子,而类RubberDuck、MallardDuck、CottonDuck 和 RedHeadDuck分别描述具体的鸭子种类,方法fly() 、quack()和display()分别表示不同种类的鸭子都具有飞行特征、发声特征和外观特征;接口FlyBehavior与QuackBehavior分别用于表示抽象的飞行行为与发声行为;类FlyNoWay与FlyWithWings分别描述不能飞行的行为和用翅膀飞行的行为;类Quack、Squeak与QuackNoWay分别描述发岀“嘎嘎”声的行为、发岀橡皮与空气摩擦声的行为与不发声的行为。请填补以下代码中的空 缺。Java代码 FlyBehaVior public void fly(););(2) QuackBehavior public void quack();Class FlyWithWings implements FlyBehavior使用翅膀飞行 r);不能飞行!");发岀'嘎嘎声!");发岀空气与橡皮摩擦声!");Class QuackNoWay impleme
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论