实验八 团队作业5:团队项目需求建模与系统设计

团队作业5—团队项目需求建模与系统设计(2)

项目
内容
课程班级博客链接
班级博客链接
这个作业要求链接
作业要求链接
团队名称
天线宝宝突击队
团队成员分工描述 包凤梅:对项目进行模块划分、撰写团队项目软件系统设计说明书、编写博客;
崔红梅:绘制系统数据流图、编写数据字典(ER图)以及软件系统状态图,编写博客;
冯永萍:编制团队项目系统需求规格说明书,编制团队项目的WBS,编写博客;
王芬:绘制项目psp,编制团队项目系统需求规格说明书,编写博客。
团队的课程学习目标 1.学习使用UML建模工具Visio;
2.掌握面向对象需求分析建模技术;
3.理解和掌握面向对象软件系统设计原理、设计过程和技术。
这个作业在哪些方面帮助团队实现学习目标 1.团队合作,讨论使得软件开软件可行性,提高开发效率;
2.培养团队意识;
3.通过项目的学习,团队成员掌握了UML建模工具和需求分析功能书的编写。
团队博客链接 博客链接
团队项目Github长仓库地址链接 仓库链接

一、实验目的与要求

(1)学习使用UML建模工具Visio;

(2)掌握面向对象需求分析建模技术;

(3)理解和掌握面向对象软件系统设计原理、设计过程和技术。

二、实验内容与步骤

任务1:按团队项目互评名单,对互评方《实验七 项目需求分析建模与系统设计(1)》的项目成果进行评价,具体要求如下:

(1)阅读互评团队项目博文作业并进行评论,评论要点包括:博文结构、博文内容、任务分工与时间耗费。将以上评论内容发布到互评团队博客评论区。

(2)下载并阅读互评方团队项目资料。

图1 进入互评方团队github
图2 将互评方团队项目资料下载到本地
图3 互评方团队软件需求规格说明书
图4 互评方团队软件系统说明书
图5 互评方团队数据流图
图5 互评方团队数据字典
  • 结合实验七评分标准,给出互评团队作业评分成绩:140

  • 面向对象分析与设计与结构化软件分析与设计的异同

面向对象方法与结构化方法都是软件开发过程中的方法。在传统的软件开发过程中多采用结构化技术完成软件开发的一系列工作,但这种方法并不适应发型软件产品的开发,而随着硬件发展,对于大型软件产品的需求又逐步提高,于是面向对象方法就应运而生。面向对象方法在上世纪八十年代中期开始被人们所关注的,而到了九十年代,面向对象方法学已经成为开发大型软件的首选范型。面向对象方法学的极大推广在目前并没有完全取代传统方法学说明了面向对象方法学目前也有缺陷需要进一步提高。

  • 二者的不同点主要有以下几个方面:

    一、开发思想方面

    • 结构化方法开发的背景是在上世纪六十年代末提出软件危机之后,为了应对软件危机,软件开发的先辈们模仿当时比较成熟的工程化生产而提出一种方法。而这种方法也确实减轻或者说缓解了软件危机。结构化方法学的思想是面向过程,自上而下、逐步地分解问题,把一个大问题分解成多个小问题,小问题再分解成多个更小的问题,直到保证底层的问题足够简单,容易解决。

    • 面向对象方法学在开始,是编程语言而被引入的。而把对象作为编程的实体最早是上世纪六十年代由Simula 67语言引入思维。在结构化方法学提出几年之后,上世纪八十年代面向对象方法学逐渐走上历史的舞台,并在之后乃至现在大放异彩。面向对象方法学的思想是面向对象,以对象为中心,把数据封装在对象内部成为对象的属性,把面向过程的函数转为对象的行为方法,把对象抽象成为类,用以描述和设计、开发软件系统。

    二、基本概念方面

    • 结构化方法学又被称生命周期方法学或传统方法学。软件从设计者诞生开发想法起始,到没有人用、被废弃结束,称为软件的生命周期。传统的软件开发方法中,软件的生存周期分为三个大的阶段,即软件定义阶段,开发阶段,维护阶段。详细又可以分为问题定义、可行性分析、需求分析、系统设计、系统实现、后期维护等阶段。

    • 面向对象方法学是一种把面向对象程序设计语言的思想应用于软件开发过程,指导开发过程的方法。面向对象方法学由以下三部分面向对象分析、面向对象设计、面向对象程序设计组成。面向对象开发是按照人的逻辑概念,思维方式去解决问题,使软件开发时的代码重用性和可靠性大大提高。也使软件更容易被人理解,从而提高软件后期运行易维护性。

    三、开发过程方面
    (1)结构化软件分析与设计开发分为以下五个阶段

    • 1、系统规划阶段
      系统规划阶段的内容主要为明确软件的发展规划,确定用户对软件需求,并制定软件开发的计划。

    • 2、系统分析阶段
      系统分析阶段的内容有解析软件所对应的工作任务,工作任务中的数据和数据流图,软件的功能所需要的技术支持和选择。

    • 3、系统设计阶段
      系统设计阶段的工作有设计系统总体的结构,相关硬件设施的建设,相关环境的建立与进一步确定和数据库、数据结构设计等。

    • 4、系统实施阶段
      系统实施阶段的内容为按照上衣阶段的成果,协调技术人员开始编程同时对软件编程开发人员展开培训,测试等相关任务。

    • 5、系统运行阶段
      系统运行阶段的工作包括以下三个部分即对软件的运行管理,用户评价反馈,后台数据监省察。在软件运行时,一定会出现一些问题,这是也一定需要对软件进行修改,维护和调整,又时甚至会出现影响比较大的问题,如用户需求发生重大改变,相关技术革新,例如网络系统的更新换代,平台的升级更新,虽然这些问题可能出现的时间会比较晚,但也要即使监管并进行相关软件功能或者模块的升级。

    (2)面向对象分析与设计开发分为以下四个阶段

    • 1、面向对象分析阶段(OOA)
      这一阶段的工作主要有需求分析以及建立相关需求模型。具体来说就是建立软件中需要的相关的完整的对象,包括这些对象应具有的属性和相关行为。

    • 2、面向对象设计阶段(OOD)
      这个阶段的主要任务就是将上一阶段得到的需求转化为有技术能力实现的,成本符合预算的并且能够达到用户需求的软件实现方案。具体呢就是确定软件的高层架构,确定需要的类以及对外接口和实现算法等。

    • 3、面向对象编程阶段(OOP)
      此阶段的工作内容就是实现上一阶段的设计结果,并在编程的过程中修正出现的设计不到位的部分,实现预计的各项功能。

    • 4、面向对象测试阶段(OOT)
      面向对象测试阶段的主要工作任务就是测试软件各项功能是否存在问题,各项性能如容错性,稳定性,安全性等各项性能,以让软件不断完善。

    四、优劣对比的方面
    (1)结构化软件分析与设计开发
    优点

    • 1、传统方法学吧软件的大生命周期分成了许多小的阶段,每一个小阶段又可以分为其他多个不同的阶段,知道每个阶段的任务足够简单,实现相对独立,这样在开发时的分工合作就会比较简单,这样面对一些相同软件便可以流水线式快速高效开发。

    • 2、在传统方法学软件生命周期每一个阶段都会细细划分,这样也便于科学的管理开发进度使开发工作可以科学条理的开展,而且由于传统方法学中有着非常严格的审查制度,只有审查合格之后才可以进行下一阶段的开发工作。这可以在一定程度上保证软件的质量及其可维护性。而且值得肯定的是这种开发方法由于使用时间较长使其管理层面和技术层面都比较成熟,所以在一些简单的软件开发中,它的效率很高,甚至在当代一些软件开发仍然或多或少地使用传统方法学进行开发。

    缺点

    • 1、由于传统方法学的开发只能串行开发,前面的工作如果没有做好,就会给后面的工作带来非常大的麻烦,所以它的生产效率总体来说会比较低。

    • 2、由于其面向过程的局限性,软件的重用性非常差,程序冗余比较严重

    • 3、因为软件代码冗余比较多,这就会给后期的开发带来许多困难,这就使得软件的可维护性很低,由此带来的软件容错性、稳定性也比较低。

    • 4.开发出的软件无法很好地满足用户需求。由于用户一般是非专业人员,其所使用的语言逻辑,描述都可能有误差,这就导致呢软件在满足用户需求上效果不佳。

    (2)面向对象方法开发
    优点

    • 1、面向对象方法学的开发逻辑和人的逻辑思维方法相近。开发大型软件难度相对降低,易被人所理解,同时也可以更好的满足客户需求。
    • 2、可以灵活的修改软件,软件稳定性高,这就使的后期可维护性有了很大的提高。而后期的软件升级也相对更加容易,更加稳定。
    • 3、面向对象的程序可重用性有了很大的提高,减少了程序冗余,代码重复,这在一定程度上也降低了开发难度,同时便于维护。

    缺点

    • 1、面向对象开发也存在着许多弊端,由于面向对象对环境的依赖,虽然大部分拥有了不错的跨平台性能,但需要依赖环境的支持,而相关的开发软件并不全面充分。
    • 2、面向对象开发不大适合比较大型的信息管理系统开发,而如果从整体设计划分不合理的情况下,会导致系统结构有较大缺陷,关系无法正常分配。
    • 3、由于其开发逻辑思维与人相似,所以无法从科学的角度管理和优化开发。

任务2:使用Visio,应用面向对象分析方法(OOA),完善团队项目的《软件需求规格说明书》:

(1)采用用例图表示项目功能需求,模型使用规范一致的图形符号和文字描述内容;

《开饭了》网上订餐系统的参与者有:

a.订餐者用例图 订餐者可以登录系统,登录后可以订餐,订餐过程包括选择店铺、选择餐饮、下订单以及到餐付款,用餐后还可以对餐饮进行评价。
b.商家用例图 商家可以登录系统,登录后需要对订餐者的订单进行核实并安排配送,然后更新店铺有关餐饮信息(增加、删除、修改)。
c.店铺管理员用例图 店铺管理员可以更新店铺信息((包括录入新申请通过的商家、修改、删除和查询店铺信息),还要为每一个店铺建立客户评价档案盒商家监察档案。
d.订单管理员用例图 订单管理员当订餐者下订单后要立即生成新订单,如果订单有所改动需及时更新(查询、修改、删除)。
e.系统管理员用例图 系统管理员可以登录系统,对商家和订餐者的信息进行管理(增加、删除、修改、查询),还有系统的维护。

(2)参考《构建之法—现代软件工程》8.5节功能的定位和优先级,给出功能分析的四个象限;

  • 四象限分析法:
    在软件工程进行需求分析的时候,四象限分析法可以帮助开发人员清晰定位软件的功能特点和将来要进行研发的创新点,如图所示:
杀手功能:针对某一应用需求我们的竞争对手和用户已经决定了的必要满足的需求,我们的创新功能也在这一部分。

外围功能:辅助性的功能,比如良好的用户体验界面等。

必要需求:能够准确解决用户主要功能的需求,比如词典软件要保证短语释义的准确性。

辅助需求:非必要需求,比如换肤等功能。

  • 此项目功能分析的四个象限:
外围功能 杀手功能
必要需求 1.外卖点餐系统的登录注册功能;
2.修改个人信息功能;
3.菜单的增删改查功能;
4.食品加购物车功能;
5. 在线支付及订单状态查询功能;
6.评价及评分的查看功能。
1.对食品进行具体的分类;
2.点餐人员可以去实体店铺进行线下点餐。
辅助需求 界面的跳转、美化、更换皮肤 可以使用在线支付方式

(3)选择适当的UML模型,建立问题域对象模型;

uml(unified Modeling Language )为面向对象软件设计提供统一的、标准的、可视化的建模语言。适用于描述以用例为驱动,以体系结构为中心的软件设计的全过程。

  • uml的定义包括UML语义和UML表示法两个部分。

    • UML语义:UML对语义的描述使开发者能在语义上取得一致认识,消除因人而异的表示方法造成的影响。

    • UML表示法:UML表示法定义UML符号的表示法,为开发者或者开发工具使用这些图形符号和文本语法为系统建模提供了标准。

  • UML模型图的构成

    • 事物(things):UML模型中的最基本的构成元素,是具有代表性的成分的抽象。

    • 关系(relationship):关系把事物紧密联系在一起。

    • 图(Diagrams):图是关系和事物的可视化表示。

  • UML包括静态建模和动态建模:

    • 静态建模:创建并记录一个系统的静态特征; 反应一个软件系统基础、固定的框架结构;创建相关问题域主要元素的视图。

    • 静态建模包括:用例图、类图、对象图、组件图、部署图。

    • 动态建模包括:时序图、协作图、状态图、活动图。

  • UML模型:

  • 系统中类与类之间的关系图:

(4)完善项目的WBS,估计各项任务所需时间

  • 项目的WBS:
  • 各项任务所需时间估计如下:

任务3:查阅资料,回答以下问题:

B/S和C/S都是随着互联网的发展而出现的一种网络结构模式,而其用的非常广泛,在我们生活中都很常见。

(1)什么是C/S结构?

C/S 结构,即大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。

(2)什么是B/S结构?

B/S结构(Browser/Server,浏览器/服务器模式),是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。浏览器通过Web Server 同数据库进行数据交互。

  • B/S结构和C/S结构的区别

    • 硬件环境不同,C/S通常是建立在专用的网络上,小范围的网络环境。而B/S是建立在广域网上的,适应范围强,通常有操作系统和浏览器就行;

    • C/结构比B/S结构更安全,因为用户群相对固定,对信息的保护更强;

    • B/S结构维护升级比较简单,而C/S结构维护升级相对困难;

(3)什么是MVC设计模式?

Model View Controller,是模型-视图-控制器的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个组件里,在改进和个性化定制界面的及用户交互的时候,不需要重新编写业务逻辑。mvc用于映射传统的输入、处理、输出功能在一个逻辑的图形用户界面的结构中。
mvc就是类似三层的一种架构,主要采用封装(分层)的思想,来降低耦合度,从而使我们的系统更灵活,扩展性更好。
model是应用程序中用于处理数据逻辑的部分。通常模型对象负责在数据库中存取数据。
view是应用程序中处理数据显示的部分。通常视图是依据数据模型创建的。
controller是应用程序中处理数据交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送。

  • mvc的优点
    • 多个视图共享一个模型,大大提高代码的可重用性。

    • 三个模块相互独立,改变其中一个不会影响其他两,所以依据这种设计模式能构建良好的松耦合性的组件。

    • 控制器提高了应用程序的灵活性和可控制性。控制器可以用来连接不同的模型和视图去完成用户的需求,这样控制器可以为构造应用程序提高强有力的手段。

任务四:以任务2的成果为基础,使用Visio,应用面向对象设计(OOD)方法,撰写团队项目软件系统设计说明书,以回答:软件是如何实现用户需求的:

1) 采用适合的软件设计模式设计软件系统总体结构,具体内容看《软件系统设计说明书》;

图6 软件系统总体结构

更改实验七的软件设计说明书版本号为1.1,采用OOD技术编制《“开饭了”软件设计说明书1.2》

图7 《“开饭了”软件设计说明书1.2》

(2)设计软件系统数据库逻辑结构;

(3)说明软件重用方案

  • 软件重用:
    软件重用,是指在两次或多次不同的软件开发过程中重复使用相同或相似软件元素的过程。软件元素包括程序代码、测试用例、设计文档、设计过程、需求分析文档甚至领域知识。通常,可重用的元素也称作软构件,可重用的软构件越大,重用的粒度越大。软件重用可以直接提高软件的开发效率、降低软件的开发成本、缩短软件的开发周期、提高软件质量。

  • 重用层次
    a.知识重用(例如,软件工程知识的重用);
    b.方法和标准的重用(例如,面向对象方法或国家制定的软件开发规范的重用);
    c.软件成分的重用。

  • 常用的软件重用形式:
    a.源代码重用。
         这是最简单也是最常见的重用形式,但由于软件系统的复杂性,很难大规模地重用已有源代码。
    b.架构重用。
         架构重用也很常见,随着软件架构风格和设计模式的推广和应用,架构重用已经对软件开发产生了重大的影响。
    c.应用框架的重用。
         随着软件技术的发展,应用框架的重用变得越来越普遍,很多成熟的软件公司都建立了自己的开发框架。在开源社区中,世界各地的技术爱好者也在不断地推出应用了各种新技术的开发框架,例如,应用了 AOP(Aspect Oriented Programming,面向方面编程)技术的 Spring 等。
    d.业务建模的重用。
         虽然不同的软件的业务领域各自不同,但人们还是总结出了一些常见领域的建模方法,重用这些领域模型可以降低因领域知识不足而造成的需求风险。
    e.文档及过程的重用。
         软件文档和软件过程也是软件开发中不可或缺的元素,有效地重用这些文档和过程也有助于提高开发效率和软件质量、降低开发成本。
    f.软件服务的重用。
         随着 Web 服务的提出,人们越来越关注服务的重用。 SOA(Service-Oriented Architecture,面向服务的架构)提出了面向服务的软件架构,并定义了相应的标准。

  • 构件技术
    构件的两个最重要的特性是自包容与可重用。自包容指的是构件的本身是一个功能完整的独立体,构件内部与外部的功能界限清晰明确,可以独立配置与使用。而可重用既是构件的特点,也是构件出现的目的。

    目前应用比较广泛的构件标准有 CORBA、Java Bean/EJB、COM/DCOM。

1)代码的重用性
   因为在开发软件的过程当中,我们采用的软件代码都是比较简单的,所以在某种程度上来说,如果有人想在我们的代码上继续研究开发,可以继续使用我们的代码去开发,但是如果他们想用自己的代码去实现自己的软件目标,也可以采用我们软件的相关类,以及对象的重用,这些都是相对来说比较简单的,开发者可以简单的读懂代码的类以及对象,然后可以根据他们的想法去开发自己的项目。
2)项目的重用性
   在开发项目的过程中,因为我们设计的是线上点餐系统,在各项功能方面可能还达不到一定的标准,但是在后期的开发研究的过程当中,我们还是可以继续在这个项目的研究上进行开发,当然,一些同行要是想在我们的系统上继续进行开发,也是相对来说可以的,因为在一些功能的设计上,可能还是不太健全,但是在经过后期的修改之后,这样的情况相对来说是可以改变的,然后将系统的功能完善。
3)项目的领域上
   在项目的领域方面,我想我们的项目是跟着社会的发展走,社会的生活节奏越来越快,未来的线上点餐肯定是最重要的,在这一方面肯定是毋庸置疑的,所以随着社会的发展,现在设计的这种线上点餐的功能可能是不够健全的。然后我们可以在这个线上点餐的领域,不停的将我们这个系统进行重用,进行一个项目的改进,最终让这个项目的功能越来越完善,以至于最后可以用于一些发达地区的餐饮行业。

(4)设计关键类的重点服务
《开饭了》线上点餐系统包括:注册模块、登录模块、商家用户模块、买家用户模块、系统管理员模块。

  • 前台设计:
    a.注册:用户通过注册用户名和密码注册商家用户、用户两种身份;用户直接通过用户名和密码进行注册,
              商家用户需要一定的注册资格证书,比如相关的食品安全等等。
    b.登录:用户和商家用户根据用户名和密码进行登录到《开饭了》订餐系统;
    c.用户功能:用户可登录《开饭了》订餐系统可维护个人信息,修改密码、查看商家列表及商家菜单列表,
              筛选菜单,加入维护购物车查看商家评价信息等;
    d.商家用户功能:主要功能是维护用户信息修改商家用户密码,维护菜单列表对菜单列表进行按照销量和价格进行排序,
              查看用户订单完成情况,对用户订单进行下单时间排序或价格排序查看用户对菜品评价。

  • 后台管理:
    a.系统管理员可查看各商家获得的评价信息,增加对用餐文评价本的情感分析,以此来为消费者用餐提供有价值的评判依据。
    b.系统管理员根据商家获得的评价信息,对各商家获得的评价信息按照评分升序查看,并且可自行移除哪些恶意营销商家。

  • 系统重要功能说明:
    a.输入给定的URL即可进入系统网页,进入系统后可看到注册界面
    b.新用户点击注册按钮进行用户注册,只能注册商家或买家;
    c.用户选择身份(包括管理员、商家用户以及买家用户)并输入正确的密码登录进入用户主页面;
    d.用户登陆进去可以进行个人信息修改;
    e.商家可以把自己的商品添加进去,可以详细的添加自己的商品信息,以及附上图片,可以让用户更直观看到商品信息;
    f.用户可以在商家个人主页查看并购买到商品;
    g.系统具有添加购物车功能,使得用户一次可以购买多种商品,用户添加完成后可以进入购物车进行结算;
    h.用户对商家商品具有点评功能,买家和卖家可以看到其他买家对该商品的评价,买家用户还可以联系商家进行交流

(5) 将文件上传到GitHub

  • 更改实验七的软件需求规格说明书版本号为1.1,采用OOA技术编制《“开饭了”线上点餐软件需求规格说明书1.2》上传到团队项目Github仓库:

  • 更改实验七的软件设计说明书版本号为1.1,采用OOD技术编制《“开饭了”线上点餐软件系统说明书1.2》上传到团队项目Github仓库:

任务5:完成《实验八 团队作业5:团队项目需求建模与系统设计(2)》团队博文作业

  1. 记录完成《实验八 团队作业5:团队项目需求建模与系统设计(2)》各项任务实际花费的时间和分工

    任务 时间(min)
    任务1 30
    任务2 120
    任务3 45
    任务4 110
    任务5 60
  2. 结合实验七、实验八的学习体验,对比陈述结构化软件分析与设计、面向对象分析与设计两类软件开发技术的异同

    • 处理问题时的出发点不同

    结构化方法是强调过程抽象化和模块化,以过程为中心构造或处理客观世界问题,它是一种面向过程的开发方法,是一种典型的面向数据流分析设计方法;面向对象方法强调的是把问题域的要领直接映射到对象及对象之间的接口上,符合人们的通常思维。

    • 处理问题的基本单位和层次逻辑关系不同

    结构化方法把客观世界的问题抽象成计算机可以处理的过程,处理问题的基本单位是能清晰表达过程的模块,用模块的层次结构来概括模块与模块之间的关系和功能;面向对象方法是用计算机逻辑来模拟客观世界中的物理存在,以对象的集合类作为处理问题的基本单位,面向对象方法是用类的层次结构来体现类之间的继承和发展。

    • 数据处理方式与控制程序方式不同

    结构化方法是直接通过程序来处理数据,处理完毕后就可显示出结果,在控制程序方式上是按照设计调用或返回程序不能自由导航,各模块程序之间存在着控制与被控制的关系;面向对象方法将数据与对应代码封装成一个整体,原则上其它对象不能直接修改其数据,即对象的修改只能由自身的成员函数完成,控制程序方式上是通过“事件驱动”来激活和运行程序。

    • 分析设计间的转换方式不同

    结构化方法中的分析设计按规定的规则进行转换,分析设计之间实现的是一种有缝连接;面向对象方法从分析到设计采用的是一致性的模型表示,使得从分析到设计不存在转换,只需要做必要的修改和调整。面向对象分析与设计之间不存在传统方法中分析与设计之间的鸿沟,二者能够紧密衔接,实现的是一种无缝连接。

  3. 从团队分工和协作学习角度,陈述团队实施Visio建模工具学习、项目需求分析建模、软件系统设计等学习活动的心得

    在团队实施Visio建模工具学习、项目需求分析建模、软件系统设计等学习活动的过程中,最明显的感受就是一听就会,一上手就废,听别人讲的时候觉得很简单,没那么难,自己实际上手结合项目做得时候状况百出,并没有看起来那么简单 。从团队分工来看,每个人都承担了每个任务中的一部分,所以就需要经常沟通讨论。从安装软件visio到需求分析再到最后的系统设计,虽然我们也出现了一些分歧,但最后还是得到了统一且大家一致认同的答案。

posted @ 2021-06-09 09:54  天线宝宝突击队  阅读(448)  评论(3编辑  收藏  举报