第1章 绪论 1
1.1 计算机软件及其发展 1
1.1.1 计算机软件 1
1.1.2 计算机软件的分类 1
1.1.3 计算机软件的发展 2
1.2 计算机软件技术 3
1.2.1 计算机软件技术的主要范畴 3
1.2.2 计算机软件技术的现状 5
1.2.3 计算机软件技术的发展趋势 5
1.3 软件技术基础 5
第2章 软件工程概述 7
2.1 软件危机 7
2.2 软件工程 8
2.3 技术审查和管理复审 9
2.4 软件质量的评价 10
第3章 需求分析 13
3.1 问题定义和可行性研究 13
3.2 需求分析 13
3.3 结构化分析(SA方法)概述 15
3.3.1 由顶向下逐层分解 15
3.3.2 描述方式 16
3.4 数据流图 16
3.5 数据词典 18
3.5.1 数据词典与数据流图的联系 18
3.5.2 数据词典条目的各种类型 19
3.6 需求分析阶段的其他工作 20
4.1 模块化设计方法 22
第4章 总体设计 22
4.2 结构化设计(SD)方法 23
4.3 Parnas方法 24
4.4 Jackson方法 26
4.5 总体设计的其他工作 28
4.6 详细设计 29
4.7 编程 30
第5章 软件检验 31
5.1 动态检验 31
5.2 静态检验 32
5.3 正确性证明 32
5.4 测试步骤 33
6.1.1 引论 34
6.1 面向对象技术概论 34
第6章 面向对象的系统分析和设计 34
6.1.2 面象对象的基本概念 36
6.1.3 面向对象的分析方法 40
6.1.4 面向对象设计初步 43
6.2 面向对象的系统分析和系统设计 47
6.3 系统分析方法 50
6.3.1 OOA过程模型 50
6.3.2 研究问题论域及用户需求 51
6.3.3 对象识别的客观性方法 52
6.3.4 识别对象的内部特征 53
6.3.5 识别对象的外部特征 55
6.3.6 信息建模的规范化过程 58
6.4.1 系统划分 59
6.4 系统设计阶段和步骤 59
6.4.2 设计阶段 60
6.4.3 设计步骤 61
6.5 评审和修正OOA模型 62
6.5.1 分析模型的一致性和完整性 62
6.5.2 OOA模型的评审策略 63
6.5.3 从OOA到OOd的过渡 65
6.6 系统文档编制、实现和测试 66
6.6.1 编制设计文档 66
6.6.2 系统实现 67
6.6.3 系统测试 68
习题 69
7.1.1 程序的顺序执行 70
7.1.2 程序的并发执行 70
7.1 并发程序的引入 70
第7章 并发程序开发技术 70
7.2 进程和线程 72
7.2.1 进程 72
7.2.2 线程 73
7.2.3 使用多线程的原因 74
7.2.4 并发程序设计的注意事项 74
7.3 线程的状态与调度 75
7.3.1 线程的基本状态 75
7.3.2 线程的调度 76
7.4 基本同步机制 77
7.4.1 同步和互斥 77
7.4.2 同步机制 79
7.4.3 典型同步问题 80
7.5 死锁 83
7.5.1 死锁的概念 83
7.5.2 产生死锁的必要条件 84
7.5.3 死锁的预防 84
第8章 数据结构概述 86
8.1 数据结构的引入 86
8.2 数据结构的基本概念 88
8.3 关于算法的描述及算法分析 90
8.3.1 算法的概念 90
8.3.2 算法分析 91
习题 92
9.1.1 线性表的逻辑结构定义 94
第9章 线性表 94
9.1 线性表的基本概念及运算 94
9.1.2 线性表的运算 95
9.2 线性表的顺序存储结构 96
9.2.1 顺序表 96
9.2.2 顺序表的基本运算 97
9.3 线性表的链式存储结构 99
9.3.1 单链表 100
9.3.2 单链表的基本运算 101
9.3.3 循环链表 108
9.3.4 双向链表 110
习题 112
10.1.1 栈的基本概念及其运算 114
10.1.2 栈的存储结构 114
10.1 栈 114
第10章 栈和队列 114
10.2 栈的应用 118
10.2.1 递归调用 118
10.2.2 地图染色问题 119
10.3 队列 121
10.3.1 队列的基本概念和运算 121
10.3.2 队列的存储结构 122
10.4 队列应用举例 127
10.4.1 离散事件仿真 127
10.4.2 划分子集问题 130
习题 134
11.1 数组的定义和运算 135
第11章 数组 135
11.2 数组的顺序存储结构 136
11.3 矩阵的压缩存储 137
11.3.1 特殊矩阵 137
11.3.2 稀疏矩阵 139
习题 142
第12章 树 144
12.1 树的基本概念 144
12.2 二叉树 146
12.2.1 基本概念 146
12.2.2 二叉树的性质 148
12.3 二叉树的存储结构 149
12.3.1 顺序存储结构 149
12.3.2 链式存储结构 150
12.3.3 二叉树的建立 151
12.4 二叉树的遍历 152
12.4.1 二叉树的深度优先遍历 153
12.4.2 二叉树的广度优先遍历 155
12.4.3 深度优先的非递归算法 156
12.4.4 从遍历序列恢复二叉树 157
12.4.5 遍历算法的应用 159
12.5 二叉树的应用 159
12.5.1 哈夫曼树及应用 160
12.5.2 二叉排序树 166
习题 171
第13章 图 173
13.1 图的基本概念 173
13.2.1 邻接矩阵存储方法 175
13.2 图的存储方法 175
13.2.2 邻接表存储方法 177
13.3 图的遍历 179
13.3.1 深度优先搜索遍历 179
13.3.2 广度优先搜索遍历 181
13.4 生成树和最小生成树 183
13.5 最短路径 189
13.5.1 从某个源点到其余各顶点的最短路径 189
13.5.2 每一对顶点之间的最短路径 192
13.6 拓扑排序 194
13.7 关键路径 199
习题 204
第14章 排序 206
14.1 排序的基本概念 206
14.2.1 直接插入排序 207
14.2 插入排序 207
14.2.2 希尔排序 209
14.3 选择排序 211
14.4 交换排序 212
14.4.1 起泡排序 212
14.4.2 快速排序 214
14.5 归并排序 217
习题 220
第15章 查找 221
15.1 线性表的查找 221
15.1.1 顺序查找 221
15.1.2 折半查找 223
15.1.3 分块查找 224
15.2 二叉排序树的查找 226
15.3.1 散列表的概念 228
15.3 散列表的查找 228
15.3.2 散列函数的构造 230
15.3.3 解决冲突的几种方法 232
15.3.4 散列表的查找及分析 234
习题 237
第16章 数据库系统概述 238
16.1 数据描述 238
16.2 数据库系统的结构 239
16.3 用户对数据库系统的访问过程 242
16.4 数据库系统的不同视图 243
16.5 信息模型与数据模型 245
习题 249
17.1 基本概念 250
第17章 关系数据库基本理论 250
17.2 关系运算 251
17.3 关系数据库语言 260
17.4 关系模式规范化 273
习题 282
第18章 数据库设计 284
18.1 数据库设计概述 284
18.2 需求分析 285
18.3 概念设计 286
18.4 逻辑设计 289
18.5 物理设计 294
18.6 数据库的建立和测试 296
18.7 数据库的运行和维护 297
18.8 数据库保护 298
习题 300
第19章 客户/服务器数据库设计 302
19.1 客户/服务器的基本概念和体系结构 302
19.1.1 Client/Server的基本概念 302
19.1.2 Client/Server的体系结构 303
19.2 客户/服务器结构的数据库服务器 304
19.2.1 数据库的关系设计 304
19.2.2 服务器的数据安全 306
19.2.3 服务器的进程 307
19.3 客户/服务器结构的客户应用程序 308
19.3.1 客房开发平台与结构 308
19.3.2 客户应用程序设计 309
参考文献 312