📌目录
- [⚖️ 面向数据结构的设计方法:从数据结构到程序结构](#⚖️ 面向数据结构的设计方法:从数据结构到程序结构)
-
- [🎯 一、面向数据结构的设计方法概述](#🎯 一、面向数据结构的设计方法概述)
- [📦 二、Jackson方法](#📦 二、Jackson方法)
- [🌐 三、Warnier方法](#🌐 三、Warnier方法)
- [📊 四、两种方法的比较](#📊 四、两种方法的比较)
- [💡 五、面向数据结构设计方法的应用](#💡 五、面向数据结构设计方法的应用)
- [📋 六、面向数据结构设计方法的优缺点](#📋 六、面向数据结构设计方法的优缺点)
- [📝 总结](#📝 总结)

⚖️ 面向数据结构的设计方法:从数据结构到程序结构
面向数据结构的设计方法是以数据结构为中心的软件设计方法,它从系统的数据结构出发,导出程序结构。主要代表方法有Jackson方法和Warnier方法。本文将详细介绍这两种面向数据结构的设计方法。

🎯 一、面向数据结构的设计方法概述
(一)面向数据结构设计方法的定义
面向数据结构的设计方法是以数据结构为中心的软件设计方法,它从系统的数据结构出发,导出程序结构。
方法概念:
#mermaid-svg-5srfOjSMjVmxhMM7{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-5srfOjSMjVmxhMM7 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-5srfOjSMjVmxhMM7 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-5srfOjSMjVmxhMM7 .error-icon{fill:#552222;}#mermaid-svg-5srfOjSMjVmxhMM7 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-5srfOjSMjVmxhMM7 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-5srfOjSMjVmxhMM7 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-5srfOjSMjVmxhMM7 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-5srfOjSMjVmxhMM7 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-5srfOjSMjVmxhMM7 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-5srfOjSMjVmxhMM7 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-5srfOjSMjVmxhMM7 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-5srfOjSMjVmxhMM7 .marker.cross{stroke:#333333;}#mermaid-svg-5srfOjSMjVmxhMM7 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-5srfOjSMjVmxhMM7 p{margin:0;}#mermaid-svg-5srfOjSMjVmxhMM7 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-5srfOjSMjVmxhMM7 .cluster-label text{fill:#333;}#mermaid-svg-5srfOjSMjVmxhMM7 .cluster-label span{color:#333;}#mermaid-svg-5srfOjSMjVmxhMM7 .cluster-label span p{background-color:transparent;}#mermaid-svg-5srfOjSMjVmxhMM7 .label text,#mermaid-svg-5srfOjSMjVmxhMM7 span{fill:#333;color:#333;}#mermaid-svg-5srfOjSMjVmxhMM7 .node rect,#mermaid-svg-5srfOjSMjVmxhMM7 .node circle,#mermaid-svg-5srfOjSMjVmxhMM7 .node ellipse,#mermaid-svg-5srfOjSMjVmxhMM7 .node polygon,#mermaid-svg-5srfOjSMjVmxhMM7 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-5srfOjSMjVmxhMM7 .rough-node .label text,#mermaid-svg-5srfOjSMjVmxhMM7 .node .label text,#mermaid-svg-5srfOjSMjVmxhMM7 .image-shape .label,#mermaid-svg-5srfOjSMjVmxhMM7 .icon-shape .label{text-anchor:middle;}#mermaid-svg-5srfOjSMjVmxhMM7 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-5srfOjSMjVmxhMM7 .rough-node .label,#mermaid-svg-5srfOjSMjVmxhMM7 .node .label,#mermaid-svg-5srfOjSMjVmxhMM7 .image-shape .label,#mermaid-svg-5srfOjSMjVmxhMM7 .icon-shape .label{text-align:center;}#mermaid-svg-5srfOjSMjVmxhMM7 .node.clickable{cursor:pointer;}#mermaid-svg-5srfOjSMjVmxhMM7 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-5srfOjSMjVmxhMM7 .arrowheadPath{fill:#333333;}#mermaid-svg-5srfOjSMjVmxhMM7 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-5srfOjSMjVmxhMM7 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-5srfOjSMjVmxhMM7 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5srfOjSMjVmxhMM7 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-5srfOjSMjVmxhMM7 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5srfOjSMjVmxhMM7 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-5srfOjSMjVmxhMM7 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-5srfOjSMjVmxhMM7 .cluster text{fill:#333;}#mermaid-svg-5srfOjSMjVmxhMM7 .cluster span{color:#333;}#mermaid-svg-5srfOjSMjVmxhMM7 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-5srfOjSMjVmxhMM7 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-5srfOjSMjVmxhMM7 rect.text{fill:none;stroke-width:0;}#mermaid-svg-5srfOjSMjVmxhMM7 .icon-shape,#mermaid-svg-5srfOjSMjVmxhMM7 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5srfOjSMjVmxhMM7 .icon-shape p,#mermaid-svg-5srfOjSMjVmxhMM7 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-5srfOjSMjVmxhMM7 .icon-shape .label rect,#mermaid-svg-5srfOjSMjVmxhMM7 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5srfOjSMjVmxhMM7 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-5srfOjSMjVmxhMM7 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-5srfOjSMjVmxhMM7 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 面向数据结构设计方法
分析数据结构
导出程序结构
编写程序
输入数据结构
输出数据结构
(二)面向数据结构设计方法的特点
方法特点:
| 特点 | 说明 |
|---|---|
| 面向数据 | 以数据结构为中心 |
| 映射关系 | 数据结构映射程序结构 |
| 结构化 | 结构化设计方法 |
| 适用性 | 适合数据处理系统 |
(三)主要方法
主要方法:
#mermaid-svg-giNh8QN7Ttx2dcKi{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-giNh8QN7Ttx2dcKi .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-giNh8QN7Ttx2dcKi .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-giNh8QN7Ttx2dcKi .error-icon{fill:#552222;}#mermaid-svg-giNh8QN7Ttx2dcKi .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-giNh8QN7Ttx2dcKi .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-giNh8QN7Ttx2dcKi .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-giNh8QN7Ttx2dcKi .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-giNh8QN7Ttx2dcKi .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-giNh8QN7Ttx2dcKi .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-giNh8QN7Ttx2dcKi .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-giNh8QN7Ttx2dcKi .marker{fill:#333333;stroke:#333333;}#mermaid-svg-giNh8QN7Ttx2dcKi .marker.cross{stroke:#333333;}#mermaid-svg-giNh8QN7Ttx2dcKi svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-giNh8QN7Ttx2dcKi p{margin:0;}#mermaid-svg-giNh8QN7Ttx2dcKi .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-giNh8QN7Ttx2dcKi .cluster-label text{fill:#333;}#mermaid-svg-giNh8QN7Ttx2dcKi .cluster-label span{color:#333;}#mermaid-svg-giNh8QN7Ttx2dcKi .cluster-label span p{background-color:transparent;}#mermaid-svg-giNh8QN7Ttx2dcKi .label text,#mermaid-svg-giNh8QN7Ttx2dcKi span{fill:#333;color:#333;}#mermaid-svg-giNh8QN7Ttx2dcKi .node rect,#mermaid-svg-giNh8QN7Ttx2dcKi .node circle,#mermaid-svg-giNh8QN7Ttx2dcKi .node ellipse,#mermaid-svg-giNh8QN7Ttx2dcKi .node polygon,#mermaid-svg-giNh8QN7Ttx2dcKi .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-giNh8QN7Ttx2dcKi .rough-node .label text,#mermaid-svg-giNh8QN7Ttx2dcKi .node .label text,#mermaid-svg-giNh8QN7Ttx2dcKi .image-shape .label,#mermaid-svg-giNh8QN7Ttx2dcKi .icon-shape .label{text-anchor:middle;}#mermaid-svg-giNh8QN7Ttx2dcKi .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-giNh8QN7Ttx2dcKi .rough-node .label,#mermaid-svg-giNh8QN7Ttx2dcKi .node .label,#mermaid-svg-giNh8QN7Ttx2dcKi .image-shape .label,#mermaid-svg-giNh8QN7Ttx2dcKi .icon-shape .label{text-align:center;}#mermaid-svg-giNh8QN7Ttx2dcKi .node.clickable{cursor:pointer;}#mermaid-svg-giNh8QN7Ttx2dcKi .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-giNh8QN7Ttx2dcKi .arrowheadPath{fill:#333333;}#mermaid-svg-giNh8QN7Ttx2dcKi .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-giNh8QN7Ttx2dcKi .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-giNh8QN7Ttx2dcKi .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-giNh8QN7Ttx2dcKi .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-giNh8QN7Ttx2dcKi .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-giNh8QN7Ttx2dcKi .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-giNh8QN7Ttx2dcKi .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-giNh8QN7Ttx2dcKi .cluster text{fill:#333;}#mermaid-svg-giNh8QN7Ttx2dcKi .cluster span{color:#333;}#mermaid-svg-giNh8QN7Ttx2dcKi div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-giNh8QN7Ttx2dcKi .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-giNh8QN7Ttx2dcKi rect.text{fill:none;stroke-width:0;}#mermaid-svg-giNh8QN7Ttx2dcKi .icon-shape,#mermaid-svg-giNh8QN7Ttx2dcKi .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-giNh8QN7Ttx2dcKi .icon-shape p,#mermaid-svg-giNh8QN7Ttx2dcKi .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-giNh8QN7Ttx2dcKi .icon-shape .label rect,#mermaid-svg-giNh8QN7Ttx2dcKi .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-giNh8QN7Ttx2dcKi .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-giNh8QN7Ttx2dcKi .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-giNh8QN7Ttx2dcKi :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 面向数据结构设计方法
Jackson方法
Warnier方法
JSP方法
JSD方法
Warnier-Orr方法
📦 二、Jackson方法
(一)Jackson方法的定义
Jackson方法(Jackson System Development, JSD)是由M.A.Jackson于1975年提出的一种面向数据结构的软件开发方法。
Jackson方法概念:
#mermaid-svg-2uR8Rb5wCQ6Rtfhw{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .error-icon{fill:#552222;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .marker{fill:#333333;stroke:#333333;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .marker.cross{stroke:#333333;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw p{margin:0;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .cluster-label text{fill:#333;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .cluster-label span{color:#333;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .cluster-label span p{background-color:transparent;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .label text,#mermaid-svg-2uR8Rb5wCQ6Rtfhw span{fill:#333;color:#333;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .node rect,#mermaid-svg-2uR8Rb5wCQ6Rtfhw .node circle,#mermaid-svg-2uR8Rb5wCQ6Rtfhw .node ellipse,#mermaid-svg-2uR8Rb5wCQ6Rtfhw .node polygon,#mermaid-svg-2uR8Rb5wCQ6Rtfhw .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .rough-node .label text,#mermaid-svg-2uR8Rb5wCQ6Rtfhw .node .label text,#mermaid-svg-2uR8Rb5wCQ6Rtfhw .image-shape .label,#mermaid-svg-2uR8Rb5wCQ6Rtfhw .icon-shape .label{text-anchor:middle;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .rough-node .label,#mermaid-svg-2uR8Rb5wCQ6Rtfhw .node .label,#mermaid-svg-2uR8Rb5wCQ6Rtfhw .image-shape .label,#mermaid-svg-2uR8Rb5wCQ6Rtfhw .icon-shape .label{text-align:center;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .node.clickable{cursor:pointer;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .arrowheadPath{fill:#333333;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .cluster text{fill:#333;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .cluster span{color:#333;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw rect.text{fill:none;stroke-width:0;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .icon-shape,#mermaid-svg-2uR8Rb5wCQ6Rtfhw .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .icon-shape p,#mermaid-svg-2uR8Rb5wCQ6Rtfhw .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .icon-shape .label rect,#mermaid-svg-2uR8Rb5wCQ6Rtfhw .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-2uR8Rb5wCQ6Rtfhw :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Jackson方法
数据结构分析
程序结构导出
程序编写
输入数据结构
输出数据结构
程序结构图
(二)Jackson方法的基本概念
三种基本结构:
Jackson方法使用三种基本结构描述数据结构。
| 结构 | 符号 | 说明 | 示例 |
|---|---|---|---|
| 顺序 | ○ | 元素依次出现 | A B C |
| 选择 | ○ | 选择其一 | A | B | C |
| 重复 | * | 重复出现 | A* |
数据结构图:
#mermaid-svg-wkawxEKxmVEuek36{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-wkawxEKxmVEuek36 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-wkawxEKxmVEuek36 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-wkawxEKxmVEuek36 .error-icon{fill:#552222;}#mermaid-svg-wkawxEKxmVEuek36 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-wkawxEKxmVEuek36 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-wkawxEKxmVEuek36 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-wkawxEKxmVEuek36 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-wkawxEKxmVEuek36 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-wkawxEKxmVEuek36 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-wkawxEKxmVEuek36 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-wkawxEKxmVEuek36 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-wkawxEKxmVEuek36 .marker.cross{stroke:#333333;}#mermaid-svg-wkawxEKxmVEuek36 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-wkawxEKxmVEuek36 p{margin:0;}#mermaid-svg-wkawxEKxmVEuek36 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-wkawxEKxmVEuek36 .cluster-label text{fill:#333;}#mermaid-svg-wkawxEKxmVEuek36 .cluster-label span{color:#333;}#mermaid-svg-wkawxEKxmVEuek36 .cluster-label span p{background-color:transparent;}#mermaid-svg-wkawxEKxmVEuek36 .label text,#mermaid-svg-wkawxEKxmVEuek36 span{fill:#333;color:#333;}#mermaid-svg-wkawxEKxmVEuek36 .node rect,#mermaid-svg-wkawxEKxmVEuek36 .node circle,#mermaid-svg-wkawxEKxmVEuek36 .node ellipse,#mermaid-svg-wkawxEKxmVEuek36 .node polygon,#mermaid-svg-wkawxEKxmVEuek36 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-wkawxEKxmVEuek36 .rough-node .label text,#mermaid-svg-wkawxEKxmVEuek36 .node .label text,#mermaid-svg-wkawxEKxmVEuek36 .image-shape .label,#mermaid-svg-wkawxEKxmVEuek36 .icon-shape .label{text-anchor:middle;}#mermaid-svg-wkawxEKxmVEuek36 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-wkawxEKxmVEuek36 .rough-node .label,#mermaid-svg-wkawxEKxmVEuek36 .node .label,#mermaid-svg-wkawxEKxmVEuek36 .image-shape .label,#mermaid-svg-wkawxEKxmVEuek36 .icon-shape .label{text-align:center;}#mermaid-svg-wkawxEKxmVEuek36 .node.clickable{cursor:pointer;}#mermaid-svg-wkawxEKxmVEuek36 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-wkawxEKxmVEuek36 .arrowheadPath{fill:#333333;}#mermaid-svg-wkawxEKxmVEuek36 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-wkawxEKxmVEuek36 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-wkawxEKxmVEuek36 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wkawxEKxmVEuek36 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-wkawxEKxmVEuek36 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wkawxEKxmVEuek36 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-wkawxEKxmVEuek36 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-wkawxEKxmVEuek36 .cluster text{fill:#333;}#mermaid-svg-wkawxEKxmVEuek36 .cluster span{color:#333;}#mermaid-svg-wkawxEKxmVEuek36 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-wkawxEKxmVEuek36 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-wkawxEKxmVEuek36 rect.text{fill:none;stroke-width:0;}#mermaid-svg-wkawxEKxmVEuek36 .icon-shape,#mermaid-svg-wkawxEKxmVEuek36 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wkawxEKxmVEuek36 .icon-shape p,#mermaid-svg-wkawxEKxmVEuek36 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-wkawxEKxmVEuek36 .icon-shape .label rect,#mermaid-svg-wkawxEKxmVEuek36 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wkawxEKxmVEuek36 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-wkawxEKxmVEuek36 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-wkawxEKxmVEuek36 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 数据结构
顺序结构
选择结构
重复结构
元素依次出现
选择其一
重复出现
(三)Jackson方法的步骤
方法步骤:
#mermaid-svg-yY7z3YVKNiPwENF0{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-yY7z3YVKNiPwENF0 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-yY7z3YVKNiPwENF0 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-yY7z3YVKNiPwENF0 .error-icon{fill:#552222;}#mermaid-svg-yY7z3YVKNiPwENF0 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-yY7z3YVKNiPwENF0 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-yY7z3YVKNiPwENF0 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-yY7z3YVKNiPwENF0 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-yY7z3YVKNiPwENF0 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-yY7z3YVKNiPwENF0 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-yY7z3YVKNiPwENF0 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-yY7z3YVKNiPwENF0 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-yY7z3YVKNiPwENF0 .marker.cross{stroke:#333333;}#mermaid-svg-yY7z3YVKNiPwENF0 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-yY7z3YVKNiPwENF0 p{margin:0;}#mermaid-svg-yY7z3YVKNiPwENF0 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-yY7z3YVKNiPwENF0 .cluster-label text{fill:#333;}#mermaid-svg-yY7z3YVKNiPwENF0 .cluster-label span{color:#333;}#mermaid-svg-yY7z3YVKNiPwENF0 .cluster-label span p{background-color:transparent;}#mermaid-svg-yY7z3YVKNiPwENF0 .label text,#mermaid-svg-yY7z3YVKNiPwENF0 span{fill:#333;color:#333;}#mermaid-svg-yY7z3YVKNiPwENF0 .node rect,#mermaid-svg-yY7z3YVKNiPwENF0 .node circle,#mermaid-svg-yY7z3YVKNiPwENF0 .node ellipse,#mermaid-svg-yY7z3YVKNiPwENF0 .node polygon,#mermaid-svg-yY7z3YVKNiPwENF0 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-yY7z3YVKNiPwENF0 .rough-node .label text,#mermaid-svg-yY7z3YVKNiPwENF0 .node .label text,#mermaid-svg-yY7z3YVKNiPwENF0 .image-shape .label,#mermaid-svg-yY7z3YVKNiPwENF0 .icon-shape .label{text-anchor:middle;}#mermaid-svg-yY7z3YVKNiPwENF0 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-yY7z3YVKNiPwENF0 .rough-node .label,#mermaid-svg-yY7z3YVKNiPwENF0 .node .label,#mermaid-svg-yY7z3YVKNiPwENF0 .image-shape .label,#mermaid-svg-yY7z3YVKNiPwENF0 .icon-shape .label{text-align:center;}#mermaid-svg-yY7z3YVKNiPwENF0 .node.clickable{cursor:pointer;}#mermaid-svg-yY7z3YVKNiPwENF0 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-yY7z3YVKNiPwENF0 .arrowheadPath{fill:#333333;}#mermaid-svg-yY7z3YVKNiPwENF0 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-yY7z3YVKNiPwENF0 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-yY7z3YVKNiPwENF0 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-yY7z3YVKNiPwENF0 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-yY7z3YVKNiPwENF0 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-yY7z3YVKNiPwENF0 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-yY7z3YVKNiPwENF0 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-yY7z3YVKNiPwENF0 .cluster text{fill:#333;}#mermaid-svg-yY7z3YVKNiPwENF0 .cluster span{color:#333;}#mermaid-svg-yY7z3YVKNiPwENF0 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-yY7z3YVKNiPwENF0 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-yY7z3YVKNiPwENF0 rect.text{fill:none;stroke-width:0;}#mermaid-svg-yY7z3YVKNiPwENF0 .icon-shape,#mermaid-svg-yY7z3YVKNiPwENF0 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-yY7z3YVKNiPwENF0 .icon-shape p,#mermaid-svg-yY7z3YVKNiPwENF0 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-yY7z3YVKNiPwENF0 .icon-shape .label rect,#mermaid-svg-yY7z3YVKNiPwENF0 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-yY7z3YVKNiPwENF0 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-yY7z3YVKNiPwENF0 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-yY7z3YVKNiPwENF0 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Jackson方法步骤
分析数据结构
导出程序结构
分配操作
编写程序
输入数据结构
输出数据结构
程序结构图
步骤详解:
| 步骤 | 任务 | 产出 |
|---|---|---|
| 分析数据结构 | 分析输入输出数据结构 | 数据结构图 |
| 导出程序结构 | 从数据结构导出程序结构 | 程序结构图 |
| 分配操作 | 为程序成分分配操作 | 操作列表 |
| 编写程序 | 根据结构图编写程序 | 程序代码 |
(四)Jackson方法实例
数据结构:
学生成绩文件
├── 学生记录 *
│ ├── 学号
│ ├── 姓名
│ └── 成绩记录 *
│ ├── 课程名
│ └── 成绩
数据结构图:
#mermaid-svg-T0qovvNVZjRLUZtf{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-T0qovvNVZjRLUZtf .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-T0qovvNVZjRLUZtf .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-T0qovvNVZjRLUZtf .error-icon{fill:#552222;}#mermaid-svg-T0qovvNVZjRLUZtf .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-T0qovvNVZjRLUZtf .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-T0qovvNVZjRLUZtf .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-T0qovvNVZjRLUZtf .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-T0qovvNVZjRLUZtf .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-T0qovvNVZjRLUZtf .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-T0qovvNVZjRLUZtf .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-T0qovvNVZjRLUZtf .marker{fill:#333333;stroke:#333333;}#mermaid-svg-T0qovvNVZjRLUZtf .marker.cross{stroke:#333333;}#mermaid-svg-T0qovvNVZjRLUZtf svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-T0qovvNVZjRLUZtf p{margin:0;}#mermaid-svg-T0qovvNVZjRLUZtf .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-T0qovvNVZjRLUZtf .cluster-label text{fill:#333;}#mermaid-svg-T0qovvNVZjRLUZtf .cluster-label span{color:#333;}#mermaid-svg-T0qovvNVZjRLUZtf .cluster-label span p{background-color:transparent;}#mermaid-svg-T0qovvNVZjRLUZtf .label text,#mermaid-svg-T0qovvNVZjRLUZtf span{fill:#333;color:#333;}#mermaid-svg-T0qovvNVZjRLUZtf .node rect,#mermaid-svg-T0qovvNVZjRLUZtf .node circle,#mermaid-svg-T0qovvNVZjRLUZtf .node ellipse,#mermaid-svg-T0qovvNVZjRLUZtf .node polygon,#mermaid-svg-T0qovvNVZjRLUZtf .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-T0qovvNVZjRLUZtf .rough-node .label text,#mermaid-svg-T0qovvNVZjRLUZtf .node .label text,#mermaid-svg-T0qovvNVZjRLUZtf .image-shape .label,#mermaid-svg-T0qovvNVZjRLUZtf .icon-shape .label{text-anchor:middle;}#mermaid-svg-T0qovvNVZjRLUZtf .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-T0qovvNVZjRLUZtf .rough-node .label,#mermaid-svg-T0qovvNVZjRLUZtf .node .label,#mermaid-svg-T0qovvNVZjRLUZtf .image-shape .label,#mermaid-svg-T0qovvNVZjRLUZtf .icon-shape .label{text-align:center;}#mermaid-svg-T0qovvNVZjRLUZtf .node.clickable{cursor:pointer;}#mermaid-svg-T0qovvNVZjRLUZtf .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-T0qovvNVZjRLUZtf .arrowheadPath{fill:#333333;}#mermaid-svg-T0qovvNVZjRLUZtf .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-T0qovvNVZjRLUZtf .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-T0qovvNVZjRLUZtf .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-T0qovvNVZjRLUZtf .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-T0qovvNVZjRLUZtf .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-T0qovvNVZjRLUZtf .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-T0qovvNVZjRLUZtf .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-T0qovvNVZjRLUZtf .cluster text{fill:#333;}#mermaid-svg-T0qovvNVZjRLUZtf .cluster span{color:#333;}#mermaid-svg-T0qovvNVZjRLUZtf div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-T0qovvNVZjRLUZtf .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-T0qovvNVZjRLUZtf rect.text{fill:none;stroke-width:0;}#mermaid-svg-T0qovvNVZjRLUZtf .icon-shape,#mermaid-svg-T0qovvNVZjRLUZtf .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-T0qovvNVZjRLUZtf .icon-shape p,#mermaid-svg-T0qovvNVZjRLUZtf .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-T0qovvNVZjRLUZtf .icon-shape .label rect,#mermaid-svg-T0qovvNVZjRLUZtf .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-T0qovvNVZjRLUZtf .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-T0qovvNVZjRLUZtf .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-T0qovvNVZjRLUZtf :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 学生成绩文件
学生记录 *
学号
姓名
成绩记录 *
课程名
成绩
程序结构图:
#mermaid-svg-xD84l8eFH10OWZCi{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-xD84l8eFH10OWZCi .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-xD84l8eFH10OWZCi .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-xD84l8eFH10OWZCi .error-icon{fill:#552222;}#mermaid-svg-xD84l8eFH10OWZCi .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-xD84l8eFH10OWZCi .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-xD84l8eFH10OWZCi .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-xD84l8eFH10OWZCi .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-xD84l8eFH10OWZCi .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-xD84l8eFH10OWZCi .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-xD84l8eFH10OWZCi .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-xD84l8eFH10OWZCi .marker{fill:#333333;stroke:#333333;}#mermaid-svg-xD84l8eFH10OWZCi .marker.cross{stroke:#333333;}#mermaid-svg-xD84l8eFH10OWZCi svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-xD84l8eFH10OWZCi p{margin:0;}#mermaid-svg-xD84l8eFH10OWZCi .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-xD84l8eFH10OWZCi .cluster-label text{fill:#333;}#mermaid-svg-xD84l8eFH10OWZCi .cluster-label span{color:#333;}#mermaid-svg-xD84l8eFH10OWZCi .cluster-label span p{background-color:transparent;}#mermaid-svg-xD84l8eFH10OWZCi .label text,#mermaid-svg-xD84l8eFH10OWZCi span{fill:#333;color:#333;}#mermaid-svg-xD84l8eFH10OWZCi .node rect,#mermaid-svg-xD84l8eFH10OWZCi .node circle,#mermaid-svg-xD84l8eFH10OWZCi .node ellipse,#mermaid-svg-xD84l8eFH10OWZCi .node polygon,#mermaid-svg-xD84l8eFH10OWZCi .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-xD84l8eFH10OWZCi .rough-node .label text,#mermaid-svg-xD84l8eFH10OWZCi .node .label text,#mermaid-svg-xD84l8eFH10OWZCi .image-shape .label,#mermaid-svg-xD84l8eFH10OWZCi .icon-shape .label{text-anchor:middle;}#mermaid-svg-xD84l8eFH10OWZCi .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-xD84l8eFH10OWZCi .rough-node .label,#mermaid-svg-xD84l8eFH10OWZCi .node .label,#mermaid-svg-xD84l8eFH10OWZCi .image-shape .label,#mermaid-svg-xD84l8eFH10OWZCi .icon-shape .label{text-align:center;}#mermaid-svg-xD84l8eFH10OWZCi .node.clickable{cursor:pointer;}#mermaid-svg-xD84l8eFH10OWZCi .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-xD84l8eFH10OWZCi .arrowheadPath{fill:#333333;}#mermaid-svg-xD84l8eFH10OWZCi .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-xD84l8eFH10OWZCi .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-xD84l8eFH10OWZCi .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-xD84l8eFH10OWZCi .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-xD84l8eFH10OWZCi .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-xD84l8eFH10OWZCi .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-xD84l8eFH10OWZCi .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-xD84l8eFH10OWZCi .cluster text{fill:#333;}#mermaid-svg-xD84l8eFH10OWZCi .cluster span{color:#333;}#mermaid-svg-xD84l8eFH10OWZCi div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-xD84l8eFH10OWZCi .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-xD84l8eFH10OWZCi rect.text{fill:none;stroke-width:0;}#mermaid-svg-xD84l8eFH10OWZCi .icon-shape,#mermaid-svg-xD84l8eFH10OWZCi .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-xD84l8eFH10OWZCi .icon-shape p,#mermaid-svg-xD84l8eFH10OWZCi .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-xD84l8eFH10OWZCi .icon-shape .label rect,#mermaid-svg-xD84l8eFH10OWZCi .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-xD84l8eFH10OWZCi .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-xD84l8eFH10OWZCi .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-xD84l8eFH10OWZCi :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 程序
初始化
处理循环 *
结束处理
读入学生记录
处理学生记录
输出结果
🌐 三、Warnier方法
(一)Warnier方法的定义
Warnier方法是由Jean-Dominique Warnier于1974年提出的一种面向数据结构的软件开发方法。
Warnier方法概念:
#mermaid-svg-BfD0xJu5jMp7t1S1{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-BfD0xJu5jMp7t1S1 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-BfD0xJu5jMp7t1S1 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-BfD0xJu5jMp7t1S1 .error-icon{fill:#552222;}#mermaid-svg-BfD0xJu5jMp7t1S1 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-BfD0xJu5jMp7t1S1 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-BfD0xJu5jMp7t1S1 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-BfD0xJu5jMp7t1S1 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-BfD0xJu5jMp7t1S1 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-BfD0xJu5jMp7t1S1 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-BfD0xJu5jMp7t1S1 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-BfD0xJu5jMp7t1S1 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-BfD0xJu5jMp7t1S1 .marker.cross{stroke:#333333;}#mermaid-svg-BfD0xJu5jMp7t1S1 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-BfD0xJu5jMp7t1S1 p{margin:0;}#mermaid-svg-BfD0xJu5jMp7t1S1 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-BfD0xJu5jMp7t1S1 .cluster-label text{fill:#333;}#mermaid-svg-BfD0xJu5jMp7t1S1 .cluster-label span{color:#333;}#mermaid-svg-BfD0xJu5jMp7t1S1 .cluster-label span p{background-color:transparent;}#mermaid-svg-BfD0xJu5jMp7t1S1 .label text,#mermaid-svg-BfD0xJu5jMp7t1S1 span{fill:#333;color:#333;}#mermaid-svg-BfD0xJu5jMp7t1S1 .node rect,#mermaid-svg-BfD0xJu5jMp7t1S1 .node circle,#mermaid-svg-BfD0xJu5jMp7t1S1 .node ellipse,#mermaid-svg-BfD0xJu5jMp7t1S1 .node polygon,#mermaid-svg-BfD0xJu5jMp7t1S1 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-BfD0xJu5jMp7t1S1 .rough-node .label text,#mermaid-svg-BfD0xJu5jMp7t1S1 .node .label text,#mermaid-svg-BfD0xJu5jMp7t1S1 .image-shape .label,#mermaid-svg-BfD0xJu5jMp7t1S1 .icon-shape .label{text-anchor:middle;}#mermaid-svg-BfD0xJu5jMp7t1S1 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-BfD0xJu5jMp7t1S1 .rough-node .label,#mermaid-svg-BfD0xJu5jMp7t1S1 .node .label,#mermaid-svg-BfD0xJu5jMp7t1S1 .image-shape .label,#mermaid-svg-BfD0xJu5jMp7t1S1 .icon-shape .label{text-align:center;}#mermaid-svg-BfD0xJu5jMp7t1S1 .node.clickable{cursor:pointer;}#mermaid-svg-BfD0xJu5jMp7t1S1 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-BfD0xJu5jMp7t1S1 .arrowheadPath{fill:#333333;}#mermaid-svg-BfD0xJu5jMp7t1S1 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-BfD0xJu5jMp7t1S1 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-BfD0xJu5jMp7t1S1 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-BfD0xJu5jMp7t1S1 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-BfD0xJu5jMp7t1S1 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-BfD0xJu5jMp7t1S1 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-BfD0xJu5jMp7t1S1 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-BfD0xJu5jMp7t1S1 .cluster text{fill:#333;}#mermaid-svg-BfD0xJu5jMp7t1S1 .cluster span{color:#333;}#mermaid-svg-BfD0xJu5jMp7t1S1 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-BfD0xJu5jMp7t1S1 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-BfD0xJu5jMp7t1S1 rect.text{fill:none;stroke-width:0;}#mermaid-svg-BfD0xJu5jMp7t1S1 .icon-shape,#mermaid-svg-BfD0xJu5jMp7t1S1 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-BfD0xJu5jMp7t1S1 .icon-shape p,#mermaid-svg-BfD0xJu5jMp7t1S1 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-BfD0xJu5jMp7t1S1 .icon-shape .label rect,#mermaid-svg-BfD0xJu5jMp7t1S1 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-BfD0xJu5jMp7t1S1 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-BfD0xJu5jMp7t1S1 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-BfD0xJu5jMp7t1S1 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Warnier方法
分析输出结构
分析输入结构
导出程序结构
编写程序
(二)Warnier方法的基本概念
层次方括号表示法:
Warnier方法使用层次方括号表示数据结构。
表示符号:
| 符号 | 含义 | 说明 |
|---|---|---|
| { | 开始 | 结构开始 |
| } | 结束 | 结构结束 |
| }n | 重复n次 | 重复n次 |
| }0,n | 重复0到n次 | 重复范围 |
| }0,* | 重复任意次 | 重复任意 |
| ( ) | 选择 | 选择其一 |
| 可选 | 可选成分 |
(三)Warnier方法的步骤
方法步骤:
#mermaid-svg-eUzBSrnXwlqUL49U{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-eUzBSrnXwlqUL49U .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-eUzBSrnXwlqUL49U .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-eUzBSrnXwlqUL49U .error-icon{fill:#552222;}#mermaid-svg-eUzBSrnXwlqUL49U .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-eUzBSrnXwlqUL49U .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-eUzBSrnXwlqUL49U .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-eUzBSrnXwlqUL49U .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-eUzBSrnXwlqUL49U .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-eUzBSrnXwlqUL49U .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-eUzBSrnXwlqUL49U .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-eUzBSrnXwlqUL49U .marker{fill:#333333;stroke:#333333;}#mermaid-svg-eUzBSrnXwlqUL49U .marker.cross{stroke:#333333;}#mermaid-svg-eUzBSrnXwlqUL49U svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-eUzBSrnXwlqUL49U p{margin:0;}#mermaid-svg-eUzBSrnXwlqUL49U .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-eUzBSrnXwlqUL49U .cluster-label text{fill:#333;}#mermaid-svg-eUzBSrnXwlqUL49U .cluster-label span{color:#333;}#mermaid-svg-eUzBSrnXwlqUL49U .cluster-label span p{background-color:transparent;}#mermaid-svg-eUzBSrnXwlqUL49U .label text,#mermaid-svg-eUzBSrnXwlqUL49U span{fill:#333;color:#333;}#mermaid-svg-eUzBSrnXwlqUL49U .node rect,#mermaid-svg-eUzBSrnXwlqUL49U .node circle,#mermaid-svg-eUzBSrnXwlqUL49U .node ellipse,#mermaid-svg-eUzBSrnXwlqUL49U .node polygon,#mermaid-svg-eUzBSrnXwlqUL49U .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-eUzBSrnXwlqUL49U .rough-node .label text,#mermaid-svg-eUzBSrnXwlqUL49U .node .label text,#mermaid-svg-eUzBSrnXwlqUL49U .image-shape .label,#mermaid-svg-eUzBSrnXwlqUL49U .icon-shape .label{text-anchor:middle;}#mermaid-svg-eUzBSrnXwlqUL49U .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-eUzBSrnXwlqUL49U .rough-node .label,#mermaid-svg-eUzBSrnXwlqUL49U .node .label,#mermaid-svg-eUzBSrnXwlqUL49U .image-shape .label,#mermaid-svg-eUzBSrnXwlqUL49U .icon-shape .label{text-align:center;}#mermaid-svg-eUzBSrnXwlqUL49U .node.clickable{cursor:pointer;}#mermaid-svg-eUzBSrnXwlqUL49U .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-eUzBSrnXwlqUL49U .arrowheadPath{fill:#333333;}#mermaid-svg-eUzBSrnXwlqUL49U .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-eUzBSrnXwlqUL49U .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-eUzBSrnXwlqUL49U .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-eUzBSrnXwlqUL49U .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-eUzBSrnXwlqUL49U .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-eUzBSrnXwlqUL49U .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-eUzBSrnXwlqUL49U .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-eUzBSrnXwlqUL49U .cluster text{fill:#333;}#mermaid-svg-eUzBSrnXwlqUL49U .cluster span{color:#333;}#mermaid-svg-eUzBSrnXwlqUL49U div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-eUzBSrnXwlqUL49U .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-eUzBSrnXwlqUL49U rect.text{fill:none;stroke-width:0;}#mermaid-svg-eUzBSrnXwlqUL49U .icon-shape,#mermaid-svg-eUzBSrnXwlqUL49U .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-eUzBSrnXwlqUL49U .icon-shape p,#mermaid-svg-eUzBSrnXwlqUL49U .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-eUzBSrnXwlqUL49U .icon-shape .label rect,#mermaid-svg-eUzBSrnXwlqUL49U .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-eUzBSrnXwlqUL49U .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-eUzBSrnXwlqUL49U .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-eUzBSrnXwlqUL49U :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Warnier方法步骤
分析输出结构
分析输入结构
导出程序结构
分配操作
编写程序
步骤详解:
| 步骤 | 任务 | 产出 |
|---|---|---|
| 分析输出结构 | 分析输出数据结构 | 输出结构图 |
| 分析输入结构 | 分析输入数据结构 | 输入结构图 |
| 导出程序结构 | 导出程序结构 | 程序结构图 |
| 分配操作 | 分配基本操作 | 操作列表 |
| 编写程序 | 编写程序代码 | 程序代码 |
(四)Warnier方法实例
输出结构:
学生成绩报表
{
报表头
{
标题
日期
}
报表体
{
学生记录
{
学号
姓名
成绩
}
}0,*
报表尾
{
统计信息
结束标记
}
}
程序结构:
统计程序
{
初始化
{
打开文件
输出表头
}
处理循环
{
读入记录
计算统计
输出统计
}0,*
结束
{
输出表尾
关闭文件
}
}
📊 四、两种方法的比较
(一)方法比较
详细比较:
| 比较项 | Jackson方法 | Warnier方法 |
|---|---|---|
| 提出者 | M.A.Jackson | J.D.Warnier |
| 提出时间 | 1975年 | 1974年 |
| 核心思想 | 数据结构映射程序结构 | 数据结构映射程序结构 |
| 出发点 | 输入输出并重 | 输出优先 |
| 表示方法 | 树形图 | 层次方括号 |
| 复杂度 | 较复杂 | 较简洁 |
| 适用性 | 数据处理 | 数据处理 |
| 学习难度 | 中等 | 较易 |
(二)共同点
共同点:
| 共同点 | 说明 |
|---|---|
| 面向数据 | 都以数据结构为中心 |
| 映射关系 | 都建立数据结构到程序结构的映射 |
| 结构化 | 都是结构化方法 |
| 适用性 | 都适合数据处理系统 |
(三)选择建议
选择建议:
| 场景 | 推荐方法 |
|---|---|
| 输入输出并重 | Jackson方法 |
| 输出为主 | Warnier方法 |
| 复杂系统 | Jackson方法 |
| 简单系统 | Warnier方法 |
| 团队熟悉 | 选择熟悉的 |
💡 五、面向数据结构设计方法的应用
(一)适用场景
适用场景:
| 场景 | 说明 |
|---|---|
| 数据处理系统 | 输入输出明确的系统 |
| 批处理系统 | 批量数据处理 |
| 报表生成 | 报表系统开发 |
| 文件格式 | 文件格式处理 |
(二)不适用场景
不适用场景:
| 场景 | 说明 |
|---|---|
| 实时系统 | 实时控制 |
| 交互系统 | 人机交互 |
| 复杂算法 | 算法密集型 |
(三)应用实例
项目:销售统计系统
输入数据结构:
销售记录文件
├── 销售记录 *
│ ├── 日期
│ ├── 产品编号
│ ├── 销售数量
│ └── 单价
输出数据结构:
销售报表
├── 报表头
│ ├── 标题
│ └── 日期
├── 销售明细 *
│ ├── 产品编号
│ ├── 产品名称
│ ├── 销售数量
│ └── 销售金额
└── 汇总信息
├── 总数量
└── 总金额
程序结构:
#mermaid-svg-CqUTWy9EKoAPbiuo{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-CqUTWy9EKoAPbiuo .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-CqUTWy9EKoAPbiuo .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-CqUTWy9EKoAPbiuo .error-icon{fill:#552222;}#mermaid-svg-CqUTWy9EKoAPbiuo .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-CqUTWy9EKoAPbiuo .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-CqUTWy9EKoAPbiuo .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-CqUTWy9EKoAPbiuo .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-CqUTWy9EKoAPbiuo .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-CqUTWy9EKoAPbiuo .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-CqUTWy9EKoAPbiuo .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-CqUTWy9EKoAPbiuo .marker{fill:#333333;stroke:#333333;}#mermaid-svg-CqUTWy9EKoAPbiuo .marker.cross{stroke:#333333;}#mermaid-svg-CqUTWy9EKoAPbiuo svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-CqUTWy9EKoAPbiuo p{margin:0;}#mermaid-svg-CqUTWy9EKoAPbiuo .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-CqUTWy9EKoAPbiuo .cluster-label text{fill:#333;}#mermaid-svg-CqUTWy9EKoAPbiuo .cluster-label span{color:#333;}#mermaid-svg-CqUTWy9EKoAPbiuo .cluster-label span p{background-color:transparent;}#mermaid-svg-CqUTWy9EKoAPbiuo .label text,#mermaid-svg-CqUTWy9EKoAPbiuo span{fill:#333;color:#333;}#mermaid-svg-CqUTWy9EKoAPbiuo .node rect,#mermaid-svg-CqUTWy9EKoAPbiuo .node circle,#mermaid-svg-CqUTWy9EKoAPbiuo .node ellipse,#mermaid-svg-CqUTWy9EKoAPbiuo .node polygon,#mermaid-svg-CqUTWy9EKoAPbiuo .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-CqUTWy9EKoAPbiuo .rough-node .label text,#mermaid-svg-CqUTWy9EKoAPbiuo .node .label text,#mermaid-svg-CqUTWy9EKoAPbiuo .image-shape .label,#mermaid-svg-CqUTWy9EKoAPbiuo .icon-shape .label{text-anchor:middle;}#mermaid-svg-CqUTWy9EKoAPbiuo .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-CqUTWy9EKoAPbiuo .rough-node .label,#mermaid-svg-CqUTWy9EKoAPbiuo .node .label,#mermaid-svg-CqUTWy9EKoAPbiuo .image-shape .label,#mermaid-svg-CqUTWy9EKoAPbiuo .icon-shape .label{text-align:center;}#mermaid-svg-CqUTWy9EKoAPbiuo .node.clickable{cursor:pointer;}#mermaid-svg-CqUTWy9EKoAPbiuo .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-CqUTWy9EKoAPbiuo .arrowheadPath{fill:#333333;}#mermaid-svg-CqUTWy9EKoAPbiuo .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-CqUTWy9EKoAPbiuo .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-CqUTWy9EKoAPbiuo .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-CqUTWy9EKoAPbiuo .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-CqUTWy9EKoAPbiuo .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-CqUTWy9EKoAPbiuo .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-CqUTWy9EKoAPbiuo .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-CqUTWy9EKoAPbiuo .cluster text{fill:#333;}#mermaid-svg-CqUTWy9EKoAPbiuo .cluster span{color:#333;}#mermaid-svg-CqUTWy9EKoAPbiuo div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-CqUTWy9EKoAPbiuo .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-CqUTWy9EKoAPbiuo rect.text{fill:none;stroke-width:0;}#mermaid-svg-CqUTWy9EKoAPbiuo .icon-shape,#mermaid-svg-CqUTWy9EKoAPbiuo .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-CqUTWy9EKoAPbiuo .icon-shape p,#mermaid-svg-CqUTWy9EKoAPbiuo .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-CqUTWy9EKoAPbiuo .icon-shape .label rect,#mermaid-svg-CqUTWy9EKoAPbiuo .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-CqUTWy9EKoAPbiuo .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-CqUTWy9EKoAPbiuo .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-CqUTWy9EKoAPbiuo :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 程序
初始化
处理循环 *
结束处理
打开文件
输出表头
读入销售记录
计算销售金额
累计汇总
输出销售明细
输出汇总信息
关闭文件
📋 六、面向数据结构设计方法的优缺点
(一)优点
优点:
| 优点 | 说明 |
|---|---|
| 直观性 | 从数据结构出发,直观易懂 |
| 系统性 | 系统化的设计方法 |
| 结构化 | 保证程序结构清晰 |
| 可维护性 | 程序结构清晰,易于维护 |
(二)缺点
缺点:
| 缺点 | 说明 |
|---|---|
| 局限性 | 只适合数据处理系统 |
| 复杂性 | 复杂系统难以应用 |
| 效率问题 | 可能产生效率问题 |
(三)改进方向
改进方向:
| 方向 | 说明 |
|---|---|
| 与其他方法结合 | 与面向对象方法结合 |
| 工具支持 | 提供自动化工具 |
| 扩展应用 | 扩展到更多场景 |
📝 总结
面向数据结构的设计方法是以数据结构为中心的软件设计方法。
🎯 方法定义:从系统的数据结构出发,导出程序结构。主要代表方法有Jackson方法和Warnier方法。
📦 Jackson方法:
- 由M.A.Jackson于1975年提出
- 使用树形图表示数据结构
- 三种基本结构:顺序、选择、重复
- 步骤:分析数据结构→导出程序结构→分配操作→编写程序
🌐 Warnier方法:
- 由J.D.Warnier于1974年提出
- 使用层次方括号表示数据结构
- 从输出数据结构开始分析
- 步骤:分析输出结构→分析输入结构→导出程序结构→分配操作→编写程序
💡 方法比较:
- 共同点:都面向数据结构,都建立数据结构到程序结构的映射
- 不同点:Jackson方法输入输出并重,Warnier方法输出优先;Jackson方法用树形图,Warnier方法用层次方括号
📋 适用场景:数据处理系统、批处理系统、报表生成、文件格式处理。
核心启示:面向数据结构的设计方法是软件工程发展史上的重要方法,它们提出了"数据结构决定程序结构"的重要思想。虽然现代软件开发更多采用面向对象方法,但这两种方法的思想仍然具有重要价值:第一,数据结构是系统设计的重要基础;第二,数据结构与程序结构之间存在映射关系;第三,面向数据的分析思路在很多场景下仍然有效。在实际工作中,对于数据处理类系统,特别是输入输出明确的批处理系统,这两种方法仍然具有很好的指导意义。理解这两种方法的思想,有助于我们更好地理解软件设计的本质,提高系统设计能力。