软件工程:面向数据结构的设计方法

📌目录



⚖️ 面向数据结构的设计方法:从数据结构到程序结构

面向数据结构的设计方法是以数据结构为中心的软件设计方法,它从系统的数据结构出发,导出程序结构。主要代表方法有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方法用层次方括号

📋 适用场景:数据处理系统、批处理系统、报表生成、文件格式处理。


核心启示:面向数据结构的设计方法是软件工程发展史上的重要方法,它们提出了"数据结构决定程序结构"的重要思想。虽然现代软件开发更多采用面向对象方法,但这两种方法的思想仍然具有重要价值:第一,数据结构是系统设计的重要基础;第二,数据结构与程序结构之间存在映射关系;第三,面向数据的分析思路在很多场景下仍然有效。在实际工作中,对于数据处理类系统,特别是输入输出明确的批处理系统,这两种方法仍然具有很好的指导意义。理解这两种方法的思想,有助于我们更好地理解软件设计的本质,提高系统设计能力。


相关推荐
CQU_JIAKE7 小时前
10.9【A】
数据结构
第25小时记录7 小时前
数据结构与算法 -第 3 章 常用算法-动态规划
数据结构·python
Logic10111 小时前
C语言/数据结构数位DP题解:平滑排列数字统计——区间内相邻位差不超过K的数字个数
c语言·数据结构·动态规划·时间复杂度·数位dp·算法题·前导零处理
wang090712 小时前
硬着头皮学数据结构和算法之Myers算法
数据结构·算法
垆边人似月.12 小时前
华为机试题 :最长递增子序列题目
数据结构·c++·算法·华为
guslegend14 小时前
从需求分析到 Spec-Kit 落地:三种思维、施工方案与规格驱动开发
aigc·软件工程·需求分析·ai编程·spec-kit
llilian_1615 小时前
失真度校准装置有哪些重点指标?失真度测量仪校准
功能测试·嵌入式硬件·51单片机·软件工程
yi0111 天前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
禾小西1 天前
Redis 数据结构:快速的 Redis 有哪些慢操作?
数据结构·数据库·redis