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

📌目录



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

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

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


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


相关推荐
白狐_7982 小时前
408数据结构第7章:查找②——顺序、折半、分块查找秒杀 + 真题
数据结构·算法
jufeng13072 小时前
【系列:MiniKV 原理剖析 · 第 6 篇】
linux·软件工程·个人开发·makefile
__zRainy__3 小时前
软件开发工程化 · 入门篇:什么是工程化
软件工程·工程化
hold?fish:palm3 小时前
链表的基本原理和实现(C++版本)
数据结构·c++·链表
jufeng13073 小时前
【系列:MiniKV 原理剖析 · 第 5 篇】
linux·网络·c++·软件工程
码完就睡4 小时前
数据结构——树、二叉树基础概念
数据结构·算法
jufeng13074 小时前
【系列:MiniKV 原理剖析 · 第 8 篇(完结篇)】
linux·c++·log4j·软件工程·makefile
疯狂打码的少年5 小时前
【数据结构】栈:定义、顺序栈与链式栈
数据结构·笔记
wabs6665 小时前
关于图论【最短路径之Bellman_ford 算法|卡码网94.城市间货物运输的思考】
数据结构·算法·图论·卡码网·bellman_ford·求最短路径