软件工程技术--第四章 概要设计

2023-10-26

第四章 概要设计

4.1 软件设计概述

4.1.1 软件设计的概念与重要性

​ 软件设计是软件工程的重要阶段,是一个将软件需求转换为软件表示的过程。软件设计的基本目标是用比较抽象概括的方式确定目标系统如何完成预定的任务,即确定系统的物理模型,解决软件系统“怎么做”的问题

软件设计的重要性有以下几点:

(1)软件开发阶段(设计、编码、测试)

(2)软件设计是开发阶段最重要的步骤,是将用户需求准确地转化为最终的软件产品的唯一途径。

(3)软件设计作出的决策,最终将直接影响软件实现的成败。

(4)软件设计是软件工程和软件维护的基础。

4.1.2 软件设计的任务

从工程管理的角度来看,可以将软件设计分为两个阶段:

概要设计(总体设计)——着重解决程序模块的设计问题

详细设计 (过程设计)——确定每个模块数据结构和内部的具体算法

4.2 概要设计的任务与步骤

4.2.1 概要设计的基本任务

(1)设计软件系统结构;

(2)数据结构及数据库设计;

(3)编写概要设计文档;

(4)评审概要设计文档。

  • 概要设计
    • 概要设计的主要任务是把需求分析得到的模型转换软件结构和数据结构

4.2.2 概要设计的步骤

  1. 选定体系结构

  2. 确定设计方案

  3. 设计软件结构

  4. 数据结构及数据库设计

  5. 制订测试计划

  6. 编写概要设计文档

  7. 概要设计文档评审

4.3 概要设计的原则

4.3 概要设计的原则

  • 模块化、抽象与逐步求精、信息隐蔽和局部化、模块独立、复用性设计。
  1. 模块化

模块化就是把整体软件划分成若干个模块,每个模块完成一个子功能。每个模块可独立地开发、测试,最后组装成完整的软件。

模块是构成软件的基本构件、模块化是大型软件设计中的基本策略

  • 模块化结论

​ 采用模块化,是使软件设计从难到易的基本方法。

​ 模块分解应适度。模块规模太小,完成每个模块的工作量很小,但设计和调试模块间的接口工作量随之增加。

  1. 抽象与逐步求精

抽象是指忽视一个主题中与当前目标无关的方面,以便更充分地注意与当前目标有关的方面。抽象可以分成若干级别,级别越高,细节越少。

逐步求精是人类解决复杂问题时采用的基本方法,也是许多软件工程技术(例如,规格说明技术,设计和实现技术)的基础。

  1. 信息隐藏和局部化

信息隐藏提高了模块的独立性,加强了外部对模块内部信息进行访问控制,它使得模块的局部错误尽量不影响其他模块。

  1. 模块独立性

​ 模块独立性概括了把软件划分为模块时要遵守的准则,也是判断模块构造是否合理的标准。模块独立性好的软件接口简单、容易开发,独立的模块也容易测试和维护。因此,模块独立性是软件质量的关键

  1. 复用性设计

​ 复用是指同一事物不做修改或稍加修改就可以多次重复使用。将复用思想用于软件开发称为软件复用,将软件的重用部分称为软构件。也就是说,在构造软件系统时不必从零做起,可通过直接使用或加以修改已有软构件来组装成新系统。

软件复用可提高软件的生产率。

4.4 模块的独立性

​ 模块独立性是指软件系统中每个模块只涉及软件要求的具体的子功能,而与软件系统中其他模块的接口是简单的。

​ 模块独立性的重要性:

具有独立的模块的软件比较容易开发出来。

独立的模块比较容易测试和维护。

​ 总之,模块独立是优秀设计的关键,而设计又是决定软件质量的关键环节。

​ 模块独立性取决于模块的内部和外部特征。一般用耦合内聚两个定性的指标来度量。

  • 模块之间的联系程度–耦合
  • 模块内的联系程度–内聚

​ 一个模块内部各个元素之间的联系越紧密,则模块的内聚度就越高,相对地,它与其他模块之间的耦合就越低,模块的独立性就越强。

​ 一个优秀的软件设计,应尽量做到高内聚、低耦合,从而提高模块的独立性。

4.4.1耦合性

软件结构中模块之间互相依赖的程度用耦合来度量。

连接模块之间的信息有: 数据信息、描述标志信息、控制信息

在这里插入图片描述

  1. 非直接耦合

​ 如果两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,这就是非直接耦合。这种耦合的模块独立性最强。

在这里插入图片描述

  1. 数据耦合

​ 若两个模块之间仅通过模块参数交换信息,且交换的信息全部为简单数据,则称这种耦合为数据耦合。

在这里插入图片描述

  1. 标记耦合(特征耦合)

​ 如两个模块通过传递数据结构(不是简单数据,而是记录、数组等)加以联系,或都与一个数据结构有关系, 则称这两个模块间存在标记耦合。

  1. 控制耦合

如果一个模块通过传送开关、标志、名字 等控制信息,明显地控制选择另一模块的功能就是控制耦合。

  1. 外部耦合

​ 一组模块均与同一外部环境关联(例如, I/O模块与特定的设备、格式和通信协议相关联),它们之间

便存在外部耦合。外部偶合必不可少,但这种模块数目应尽量少

  1. 公共耦合(公共环境耦合)

​ 若两个或多个模块通过引用公共数据相互联系,则称这种耦合为公共耦合。例如,在程序中定义了全局变量,并在多个模块中对全局变量进行了引用,则引用全局变量的多个模块间就具有了公共耦合关系。

​ 公共耦合存在的问题: (1)软件可理解性降低。(2)诊断错误困难。(3)软件可维护性差。(4)软件可靠性差

​ (公共数据区及全程变量无保护措施) 慎用公共数据区和全程变量!!!

  1. 内容耦合

​ 如果发生下列情形,两个模块之间就发生了内容耦合

​ (1)一个模块直接访问另一个模块的内部数据;

​ (2) 一个模块不通过正常入口转到另一模块内部;

​ (3) 两个模块有一部分程序代码重迭(只可能出现在汇编语言中);

​ (4) 一个模块有多个入口。

4.4.2内聚性

​ 一个模块内各个元素彼此结合的紧密程度用内聚(或称聚合)来度量。一个理想的模块只完成一个功能,模块设计的目标之一是尽可能高内聚

在这里插入图片描述

  1. 功能内聚

一个模块中各个部分都是完成某一具体功能必不可少的组成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割的。则称该模块为功能内聚模块。

  1. 顺序内聚

若一个模块中的各个部分都与同一个功能密切相关,并且必须按照先后==顺序执行(==通常前一个部分的输出数据就是后一个部分的输入数据),则称该模块的内聚为顺序内聚。

  1. 通信内聚

如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据,则称之为通信内聚模块。通常,通信内聚模块是通过数据流图来定义的。

  1. 过程内聚

如果一个模块内的处理元素是相关的,而且必须以特定次序执行则称为过程内聚。

  1. 时间内聚

若一个模块包含了需要在同一时间段中执行的多个任务,则称该模块的内聚为时间内聚。

  1. 逻辑内聚

这种模块是把几种功能组合在一起,每次调用时,则由传递给模块的判定参数来确定该模块应执行哪一种功能。

  1. 偶然内聚

若一个模块由多个完成不同任务的语句段组成,各语句段之间的联系十分松散或根本没有任何联系,则称此模块的内聚为偶然内聚。

设计目标:高内聚,模块在软件过程中完成单一的任务

总结:

在这里插入图片描述

力争强内聚、弱耦合

耦合、内聚与模块独立性关系:耦合与内聚都是模块独立性的定性标准,都反映模块独立性的良好程度。但耦合是直接的主导因素,内聚则辅助耦合共同对模块独立性进行衡量。

4.4.3软件结构优化准则

  1. 模块功能的完善化
  2. 消除重复功能,改善软件结构
  3. 模块规模应该适中
  4. 模块的深度、宽度、扇出和扇入都应适当
  5. 模块的作用范围应该在控制范围之内
  6. 力争降低模块接口的复杂程度
  7. 设计单入口、单出口的模块
  8. 模块功能应该可以预测

4.5 软件结构设计的图形工具

概要设计的任务是确定软件系统的组成结构、各模块功能及模块间的里联系(接口)

表示软件结构的图形工具有层次图、IPO图和结构图

4.5.1 层次图

也称H图,用于表示软件的层次结构,特别适用于在自顶向下的设计时使用。

4.5.2 IPO图

IPO图是输入/处理/输出图(Input Process Output),其基本形式是三个方框,左边方框列出所有的输入数据,中间框列出主要的处理,右边框列出输出数据。

4.5.3 结构图

模块结构图用于表示软件系统的层次分解关系、模块调用关系、模块之间数据流和控制信息流的传递关系,是描述软件系统物理模型、进行概要设计的主要工具,也是软件文档的一部分。

4.6 结构化的设计方法

结构化设计方法SD)是面向数据流的设计方法,它以数据流图为基础,定义了将数据流图映射为软件结构图(即DFD→SC)的方法。它的设计步骤是先根据系统数据流图建立系统逻辑模型,再进行结构设计

设计步骤

  • 数据流图——>模块结构图

  • 数据流分为变换流和事务流两种,因此由数据流组成的数据流图也分为变换型数据流图和事务型数据流图两种类型。

  • 由变换型数据流图向结构图的映射称变换分析,由事务型数据流图向结构图的映射称事务分析

  • 分析数据流图中的数据流的类型:(1)变换型数据流(2)事务型数据流

  1. 数据流图的类型

    1. 变换流

      变换型数据流的特征是可以把它看成由输入变换中心输出三部分组成,这样的数据流图称为变换型数据流图

    2. 事务流

      事务型数据流的特征是可以把它看成具有在多种事务中选择执行某类事务的能力。这样的数据流图称为事务型数据流图

结构化设计的过程

  1. 精化DFD
  2. 确定DFD类型
  3. 把DFD映射到系统模块结构,设计模块结构的上层
  4. 基于DFD逐步分解高层模块,设计出下层模块
  5. 根据模块独立性原理,精化模块结构。
  6. 描述模块接口。

变换型DFD——导出模块结构图的方法

一、确定主处理,输入,输出

  • 确定主处理(即变换中心)

二、设计顶层模块及第一层模块

  • 顶层命名——按变换中心整体功能或关键处理命名

  • 第一层设计——输入模块、主处理、输出模块

三、设计中下层模块

  • 展开上层模块,分解出详细功能模块

事务型DFD——导出模块结构图的方法

  1. 确定事务中心
  2. 设计第一层模块——输入模块,事务中心模块
  3. 设计中下层模块

或者

  1. 顶层——控制模块
  2. 中下层各个子模块

练习题

  1. 在对数据流的分析中,主要是找到中心变换,这是从( C ) 导出结构图的关键。

    A.数据结构 B.实体关系 C.数据流图 D.E—R图

  2. ( D )数据处理问题的工作过程大致分为三步,即取得数据、变换数据和给出数据。

    A.非结构化 B.事务型 C.结构化验室 D.变换型

  3. 软件结构图中,模块框之间若有直线连接,表示它们之间存在( A )。

    A、 调用关系 B、 组成关系 C、 链接关系 D、 顺序执行关系

  4. 银行计算机储蓄管理信息系统中,根据客户提出的要求(如存款、取款、查询、挂失、咨询等)进行相应的业务处理的该层数据流图是( B )。

    A、变换型   B、事务型    C、既不是A也不是B    D、不一定

  5. 由变换型数据流图转换成模块结构图,其中包括变换模块,则( A )。

    A、变换模块就是主模块 B、变换模块的功能是将逻辑输入变换为逻辑输出

    C、变换模块没有下层模块 D、变换模块只能有一个输入量、一个输出量

  6. 变换型数据流图通常是( A )形态。

    A、线性   B、层次    C、网状   D、无规则

总结

  • 软件结构优化准则
  • 大型数据流图中,变换型、事务型两类结构同时存在。分级画结构图。
  • 任何数据都要经过输入—处理—输出,都可以用变换型分析方法来设计软件结构
  • 但当数据具有明显事务型特点时,用事务型分析方法。

概要设计文档与复审

  • 概要设计说明书
  • 引言
  • 总体设计
  • 接口设计
  • 运行设计
  • 系统数据结构设计(E-R转换成数据库结构
  • 系统出错处理设计

概要设计总结

一、任务

  1. 系统体系结构设计:确定系统的总体物理实现方案。

  2. 软件结构设计:确定模块和模块间的动态调用管理。

  3. 数据结构设计(或数据库设计):确定系统中数据的总体结构。(数据库:逻辑设计、物理设计、安全性设计)。

  4. 接口设计:外部接口、人机界面设计

二、设计原理

  1. 模块独立性原理:信息隐蔽、耦合、内聚

  2. 思维工具:抽象

  3. 启发式规则:改进软件结构,提高系统质量

三、设计工具: IPO图、结构图

四、面向数据流的设计方法----结构化设计方法

  1. 从分析型的数据流图向软件结构的转换

  2. 从事务型的数据流图向软件结构的转换

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

软件工程技术--第四章 概要设计 的相关文章

  • 软件工程毕业设计选题大全 毕设题目推荐

    文章目录 0 前言 1 题目推荐 2 开题指导 2 1 起因 2 2 如何避坑 重中之重 2 3 为什么这么说呢 2 4 难度把控 2 5 题目名称 3 最后 0 前言 这是学长亲手整理的 软件工程毕设选题系列第三篇 都是经过学长精心审核的
  • 概说概要设计怎么做

    概说概要设计怎么做 51CMM COM原创 作者 厦门巨龙软件工程有限公司 卢琳生 2003 12 22 摘要 本文是在概要设计实践和学习中的一些心得与学习笔记 希望与大家分享 如有不妥之处欢迎指正 关键字 概要设计 结构化 OOD 正文
  • 软件工程学习日记(4)----面向数据流的设计方法

    用面向数据流的方法设计下列系统的软件结构 问题回顾 为方便储户 某银行拟开发计算机储蓄系统 储户填写的存款单或取款单由业务员输入系统 如果是存款 系统记录存款人姓名 住址 存款类型 存款日期 利率等信息 并印出存款单给储户 如果是取款 系统
  • 17、系统设计篇-技术选型

    技术选型 就是在两个或多个技术方案中选择适合当前项目情况的方案 技术选型不仅是个技术的选择 也是一个和项目情况密切相关的项目决策 技术选型 本质上是项目决策的一种 要做好技术选型 就是要做好项目决策 一 项目决策需考虑的角度 1 时间 范围
  • 音乐软件案例分析

    项目 内容 这个作业属于哪个课程 2023年北航敏捷软件工程 这个作业的要求在哪里 软件案例分析 我在这个课程的目标是 学习软件工程理论 在实践中体会并运用软件工程理论 收获团队开发和软件工程实践经验 这个作业在哪个具体方面帮助我实现目标
  • 软工导论知识框架(五)面向对象方法学

    传统软件工程方法学适用于中小型软件产品开发 面向对象软件工程方法学适用于大型软件产品开发 一 四要素 对象 类 继承 传递消息实现通信 二 概念 1 对象 具有相同状态的一组操作的集合 对状态和操作的封装 2 类 对具有相同状态和相同操作的
  • 【软件工程】详细设计说明书

    详细设计说明书 1引言 1 1编写目的 说明编写这份详细设计说明书的目的 指出预期的读者 该文档实在概要设计的基础上 进一步的细化系统结构 展示了软件啊结构的图标 物理设计 数据结构设计 及算法设计 详细的介绍了系统各个模块是如何实现的 包
  • 软考:中级软件设计师:多媒体基础,音频,图像,颜色,多媒体技术的种类,图像音频视频的容量计算,常见的多媒体标准

    软考 中级软件设计师 多媒体基础 提示 系列被面试官问的问题 我自己当时不会 所以下来自己复盘一下 认真学习和总结 以应对未来更多的可能性 关于互联网大厂的笔试面试 都是需要细心准备的 1 自己的科研经历 科研内容 学习的相关领域知识 要熟
  • 什么是项目管理?项目经理应该如何进行管理?

    项目管理 一是指一种管理活动 一种有意识地按照项目的特点和规律 对项目进行组织管理的活动 二是指一种管理学科 以项目管理活动为研究对象的一门学科 它是探求项目活动科学组织管理的理论与方法 就是把各种知识 技能 手段和技术应用于项目活动之中
  • 选择软件外包公司需要注意哪些方面

    每个行业中不同公司的实力都是良莠不齐 特别是IT软件外包公司更是如此 当我们一旦将整个项目交付对方之后 项目的成败就全看软件外包公司的表现 风险极大 那么 我们该如何选择一家靠谱的深圳软件外包公司 选择软件外包公司需要注意哪些方面 北京木奇
  • JAVAWEB编程题

    1 登陆验证代码
  • 推荐111个软件工程本科的计算机毕业设计,有手就会

    对于即将挑战计算机专业毕业设计的学子们 是否已经为选题和项目感到焦虑 今天 我们为即将毕业的学生提供了大量的毕业设计项目 期望对于正在为毕业设计挠头的同学们有所助益 一 成品列表 以下所有springboot框架项目的源码博主已经打包好上传
  • 【车载开发系列】FlashMemory基本概念

    车载开发系列 FlashMemory基本概念 车载开发系列 FlashMemory基本概念 车载开发系列 FlashMemory基本概念 一 FlashMemory的特征 二 常见的FlashMemory 1 NOR FlashMemory
  • 软件工程期末复习+数据仓库ETL

    一 软件工程 请用基本路径测试方法为下列程序设计测试用例 并写明中间过程 第1步 画出流程图 1 菱形用于条件判断 用在有分支的地方 2 矩形表示一个基本操作 3 圆形是连接点 第2步 计算程序环路复杂性 流图G的环路复杂度V G 定义为
  • MES系统工单进度查询:提升生产控制与监控

    在MES系统中 工单进度查询是一个至关重要的功能 它为企业提供了实时 准确地追踪和监控生产工单进度的能力 一 MES系统工单进度查询的重要性 1 实时监控生产进度 通过工单进度查询 企业能够随时了解每个工单的进展情况 包括已完成的工序 正在
  • DEVOPS 持续部署的例子:IMVU

    持续部署的例子 IMVU IMVU是一家社交娱乐公司 它的产品允许用户以一种3D阿凡达式的体验互相连接起来 本节内容改编自一位IMVU工程师所写的博客 IMVU采用了持续集成 开发人员尽早提交并经常提交 每次提交都触发测试套件的执行 IMV
  • 68 | 软件工程的宏观视角

    软件工程 今天开始 我们进入第六章 谈谈软件工程 我理解的架构师的职责其实是从软件工程出发的 也许大家都学过软件工程 但如果我们把软件工程这门课重新看待 这门学科到底谈的是什么 是软件项目管理的方法论 无论如何 软件工程是一门最年轻的学科
  • C++ 中 const 和 constexpr 关键字解析:常量、函数和指针

    很多 C 的初学者看到 const 这个关键字的第一反应都是一头雾水 主要是因为 const 可 以出现在很多的位置 以及后面加入的 constexpr 更是常常感到困惑 今天就为大家一一解释出现它们的含义和以及作用 const 关键字 c
  • C# 介绍、应用领域、入门、语法、输出和注释详解

    什么是 C C 发音为 C Sharp 是一种由 Microsoft 创建的面向对象的编程语言 运行在 NET Framework 上 源于 C 家族 与流行的语言如 C 和 Java 相近 首个版本发布于 2002 年 而最新版本 C 1
  • 掌握 C# 变量:在代码中声明、初始化和使用不同类型的综合指南

    C 变量 变量是用于存储数据值的容器 在 C 中 有不同类型的变量 用不同的关键字定义 例如 int 存储整数 没有小数点的整数 如 123 或 123 double 存储浮点数 有小数点 如 19 99 或 19 99 char 存储单个

随机推荐

  • VBA学习基础之1.4条件语句

    VBA学习基础之条件语句 1 4 1 If Then 一个if语句由一个布尔表达式和一个或多个语句组成 如果条件被评估为True 则执行If条件块下的语句 如果条件被评估为False 则执行If循环块后面的语句 If boolean exp
  • Leetcode169.多数元素——摩尔投票

    文章目录 引入 摩尔投票 引入 Leetcode上有如下的题 169 多数元素 给定一个大小为 n 的数组 找到其中的多数元素 多数元素是指在数组中出现次数大于 n 2 的元素 你可以假设数组是非空的 并且给定的数组总是存在多数元素 示例
  • 批量提取PDF和图片发票信息 2.2

    人工录入发票信息真的好烦 有什么软件可以快速解决这个问题吗 那天看到这个问题后 自己写了一个批量提取发票信息的小软件 打开软件之后 选择大量发票文件所在的文件夹就可以了 会自动把发票识别的结果输出为一个Excel 文件 应较多使用者的提议
  • 面试小结

    百度内推一面 1 深浅拷贝 2 const char char const 3 对象的复制拷贝 注意的四个点 初级 高级程序员做法4 介绍项目 5 函数指针 指针函数 6 给定二叉树的前序和中序确定二叉树 前序和后续不能确定 7 SVM分类
  • yum安装dhcp安装包时报错的解决办法([Errno 256] No more mirrors to try.-----或者睡眠中)

    安装环境 CentOS 7 6 问题描述1 报错 无法安装 root localhost yum y install dhcp 已加载插件 fastestmirror langpacks Loading mirror speeds from
  • vue3(1)

    Vue3 0 了解vue3 0 1 简要了解 Vue js 3 0 one Piece 正式版再20年9月份发布 Vue3支持vue2的大多数特性 更好的支持TS 性能提升 打包大小减少41 初次渲染快55 重新渲染快133 内存减少54
  • VSCode: Conda activate base error - The term “conda“ is not recongised

    If you have your Anaconda installed and your VSCode can recognize it in interpreter selection like below then do not bot
  • mac os x 下五款播放器评测

    OS X上到底要用哪款播放器是永恒的主题 就我个人而言 1 4的Mac使用时间是在动漫中度过的 所以用过很多款视频播放器 比较多人用的播放器有QuickTime Movist MPlayerX VLC 射手影音 所以简单做个评测 评分带有主
  • 数据结构与算法:哈夫曼树与哈夫曼编码

    1 举例引入 我们先以成绩评级举例分析 一步一步的认识Haffman树和Haffman编码 分数 0 59 60 69 70 79 80 89 90 100 成绩 不及格 及格 中等 良好 优秀 所占比例 5 15 40 30 10 如果是
  • 安装系统键盘鼠标无法使用

    安装Windows原版系统 发现在BIOS中可以正常使用键盘鼠标 但是进入U盘 开始安装系统的时候键盘鼠标全部失灵 原因应该是U盘中的系统不能识别鼠标 这个大致是微软和Intel芯片之间兼容的问题 我也讲不清 直接上解决方案 我不是创造者
  • 【多人姿态估计】Alphapose_yolov8复现

    1 环境 参考此处安装docker nvidia docker https blog csdn net qq 35975447 article details 113248132 然后导入docker image https blog cs
  • 2021Java大厂面试经验分享,100%好评!

    Spring Security观后感 手绘思维脑 供参考 手绘的思维导图 是我自己根据自身的情况读完这套阿里出品的Spring Security王者晋级文档之后所绘的 相当于是一个知识的总结与梳理 我将其分为 核心组件 与 工作原理 认证流
  • 【从零开始学习C++

    目录 前言 委托构造函数 类内初始化 空指针 枚举类 总结 前言 C 的学习难度大 内容繁多 因此我们要及时掌握C 的各种特性 因此我们更新本篇文章 向大家介绍C 的新增特性 委托构造函数 委托构造函数是指一个类的构造函数调用另一个类的构造
  • 【云原生之k8s】k8s控制器

    文章目录 引言 Pod与控制器之间的关系 1 Deployment 无状态 2 SatefulSet 有状态 2 1 有状态与无状态的区别 2 2 常规service和无头服务区别 2 2 1 Service类型 2 2 2 headles
  • 未来会怎样?

    伴随Visual Studio 2008 的发布 NET 3 5也一起来了 J2EE风采依旧 Python风头正劲 未来会怎样 我们究竟要学多少新的东西才能不被日新月异的技术浪头打沉在海底 或许本不应该为了技术而技术 QQ不也很成功么 易趣
  • Docker镜像推送(push)到Docker Hub

    Docker镜像推送 push 到Docker Hub 1 Docker hub 注册账户 2 登录注册账户 随后输入账户名 密码 docker login 3 修改镜像名称 docker tag originName username o
  • n边形划分

    题目描述 已知存在n多边形 n为奇数 连接多边形所有对角线 能形成多少区域 输入描述 给定整数n 1 lt n lt 1e9 输出描述 输出区域数 对1e9 7取模 示例 输入5 输出11 include
  • 2018.09.18 atcoder Best Representation(kmp)

    传送门 思路简单不知为何调试了很久 显然要么分成n个 所有字符相同 要么分成1个 原字符串无循环节 要么分成两个 有长度至少为2的循环节 一开始以为可以直接hash搞定 后来wa了几次之后发现可以轻松举出反例于是弃了hash kmp大法好啊
  • 毕业设计 - 基于单片机的MP3设计与实现

    文章目录 1 简介 2 主要器件 3 实现效果 4 设计原理 核心算法 音频解码流程 5 部分实现代码 6 最后 1 简介 Hi 大家好 今天向大家介绍一个学长做的单片机项目 基于单片机的MP3设计与实现 大家可用于 课程设计 或 毕业设计
  • 软件工程技术--第四章 概要设计

    第四章 概要设计 4 1 软件设计概述 4 1 1 软件设计的概念与重要性 软件设计是软件工程的重要阶段 是一个将软件需求转换为软件表示的过程 软件设计的基本目标是用比较抽象概括的方式确定目标系统如何完成预定的任务 即确定系统的物理模型 解