第一部分 开发技术 2
第0章 如何学好编程 2
第1章 Java语言概述 4
1.1 Java简介 4
1.1.1 什么是Java语言 4
1.1.2 关于Java语言的诞生 4
1.1.3 Java的版本 6
1.1.4 Java的应用领域 7
1.1.5 Java API文档 7
1.2 Java特性 8
1.3 搭建Java环境 9
1.3.1 JDK下载 9
1.3.2 Windows系统的JDK环境 11
1.4 用文本编辑器编写Java程序 14
1.4.1 编写Java代码 14
1.4.2 保存源码文件 15
1.4.3 编译源代码 15
1.4.4 运行class文件 16
1.5 术语 17
1.6 小结 17
1.7 练习 17
第2章 主流开发工具 18
2.1 Eclipse简介 18
2.1.1 Eclipse下载和安装 18
2.1.2 安装Eclipse汉化包 20
2.1.3 Eclipse工作台 20
2.1.4 透视图与视图 22
2.1.5 菜单栏 22
2.1.6 工具栏 26
2.1.7 包资源管理器视图 27
2.1.8 控制台视图 27
2.2 使用Eclipse 28
2.2.1 创建Java项目 28
2.2.2 创建Java类文件 28
2.2.3 使用编辑器编写程序代码 29
2.2.4 运行Java程序 31
2.3 术语 31
2.4 小结 31
2.5 练习 31
第3章 Java语言基础 32
3.1 Java主类结构 32
3.1.1 包声明 32
3.1.2 声明成员变量和局部变量 33
3.1.3 编写主方法 33
3.1.4 导入API类库 33
3.2 基本数据类型 33
3.2.1 整数类型 33
3.2.2 浮点类型 35
3.2.3 字符类型 36
3.2.4 布尔类型 38
3.2.5 隐式类型转换 38
3.2.6 显示类型转换 39
3.3 变量与常量 40
3.3.1 标识符 40
3.3.2 关键字 41
3.3.3 声明变量 41
3.3.4 声明常量 42
3.3.5 变量的有效范围 43
3.4 运算符 44
3.4.1 赋值运算符 44
3.4.2 算术运算符 45
3.4.3 自增和自减运算符 46
3.4.4 比较运算符 46
3.4.5 逻辑运算符 47
3.4.6 位运算符 49
3.4.7 三元运算符 51
3.4.8 运算符优先级 52
3.5 代码注释与编码规范 53
3.5.1 代码注释 53
3.5.2 编码规范 54
3.6 术语 55
3.7 小结 55
3.8 练习 55
第4章 流程控制 56
4.1 条件语句 56
4.1.1 if条件语句 56
4.1.2 switch语句 60
4.2 JDK7在switch语句中对字符串的支持 62
4.3 循环语句 63
4.3.1 while语句 63
4.3.2 do-while语句 64
4.3.3 for循环语句 65
4.4 跳转语句 68
4.4.1 break语句 68
4.4.2 continue语句 69
4.4.3 return语句 70
4.5 术语 70
4.6 小结 71
4.7 练习 71
第5章 Java数组 72
5.1 数组概述 72
5.2 一维数组 73
5.2.1 一维数组的创建 73
5.2.2 一维数组的初始化 74
5.3 二维数组 75
5.3.1 二维数组的创建 75
5.3.2 二维数组的初始化 76
5.4 数组的基本操作 77
5.4.1 遍历数组 77
5.4.2 填充替换数组元素 79
5.4.3 对数组进行排序 81
5.4.4 复制数组 82
5.4.5 查询数组 84
5.5 数组排序算法 86
5.5.1 冒泡排序 86
5.5.2 直接插入排序 87
5.6 术语 88
5.7 小结 88
5.8 练习 88
第6章 字符串 89
6.1 创建字符串 89
6.2 字符串操作 89
6.2.1 字符串连接 90
6.2.2 获取字符串信息 91
6.2.3 去除字符串中的空格 92
6.2.4 字符串替换 94
6.2.5 判断字符串 95
6.2.6 字母大小写转换 97
6.2.7 字符串分割 98
6.3 格式化字符串 100
6.3.1 格式化方法 100
6.3.2 日期格式化 101
6.3.3 时间格式化 102
6.3.4 日期时间组合格式化 103
6.3.5 常规类型格式化 104
6.4 正则表达式 105
6.4.1 判断是否符合正则表达式的方法 106
6.4.2 正则表达式的元字符 106
6.4.3 正则表达式的限定符 107
6.5 字符串生成器 109
6.5.1 StringBuilder类 109
6.5.2 StringBuilder类的常用方法 110
6.6 术语 114
6.7 小结 114
6.8 练习 114
第7章 面向对象编程基础 115
7.1 面向对象概述 115
7.1.1 什么是对象 115
7.1.2 什么是类 116
7.1.3 面向对象的特点 117
7.2 类 119
7.2.1 类的构造方法 119
7.2.2 类的主方法 120
7.2.3 成员变量 121
7.2.4 成员方法 122
7.2.5 局部变量 123
7.2.6 局部变量的有效范围 123
7.2.7 静态变量、常量和方法 124
7.2.8 权限修饰符 126
7.2.9 this关键字 127
7.3 对象 128
7.3.1 对象的创建 128
7.3.2 访问对象的属性和行为 129
7.3.3 对象的引用 131
7.3.4 对象的比较 132
7.3.5 对象的销毁 133
7.4 术语 134
7.5 小结 134
7.6 练习 134
第8章 继承、封装和多态 135
8.1 Java中的父子关系 135
8.2 类之父Object 138
8.3 Class类与Java反射 140
8.3.1 访问构造方法 141
8.3.2 访问成员变量 144
8.3.3 访问方法 146
8.4 枚举类 150
8.4.1 使用枚举类型设置常量 150
8.4.2 深入了解枚举类型 152
8.4.3 使用枚举类型的优势 158
8.5 类的封装 158
8.6 多态的调用形式 159
8.7 术语 160
8.8 小结 161
8.9 练习 161
第9章 抽象类与接口 162
9.1 抽象类 162
9.1.1 定义抽象类 162
9.1.2 解析抽象方法 162
9.1.3 抽象类与接口的区别 164
9.2 接口 164
9.2.1 接口的意义 164
9.2.2 接口的定义 165
9.2.3 接口的实现 166
9.3 对象克隆 167
9.3.1 Java对象的假克隆 167
9.3.2 Java对象的浅克隆 168
9.3.3 Java对象的深克隆 171
9.3.4 序列化与对象克隆 173
9.3.5 深克隆效率的比较 175
9.4 术语 177
9.5 小结 178
9.6 练习 178
第10章 Java的类中类 179
10.1 内部类的含义 179
10.2 成员内部类 179
10.3 局部内部类 182
10.4 匿名内部类 183
10.5 静态内部类 184
10.6 内部类的继承 186
10.7 术语 186
10.8 小结 187
10.9 练习 187
第11章 包装类 188
11.1 包装类概述 188
11.1.1 Number类概述 189
11.1.2 Comparable接口简介 189
11.2 Byte类的使用 190
11.2.1 获得Byte对象的方法 190
11.2.2 获得byte变量的方法 192
11.3 Short类的使用 193
11.3.1 获得Short对象的方法 193
11.3.2 获得short变量的方法 194
11.4 Integer类的使用 194
11.4.1 获得Integer对象的方法 194
11.4.2 获得int变量的方法 197
11.4.3 将整数以其他进制输出 197
11.4.4 位运算相关方法简介 198
11.5 Long类的使用 199
11.5.1 获得Long对象的方法 199
11.5.2 获得long变量的方法 200
11.5.3 将长整数以其他进制输出 201
11.6 Float类的使用 201
11.6.1 获得Float对象的方法 201
11.6.2 获得float变量的方法 201
11.6.3 无穷大与非数字判断 201
11.6.4 Float类的其他方法 203
11.7 Double类的使用 204
11.7.1 获得Double对象的方法 205
11.7.2 获得double变量的方法 205
11.7.3 无穷大与非数字判断 205
11.7.4 Double类的其他方法 205
11.8 Boolean类的使用 206
11.8.1 获得Boolean对象的方法 206
11.8.2 获得boolean值的方法 207
11.9 Character类的使用 207
11.9.1 Character类的常用域 207
11.9.2 获得Character对象的方法 208
11.9.3 获得char变量的方法 209
11.9.4 字母、数字和空白的判断 210
11.9.5 Character类的其他方法 212
11.10 数字类型包装类共性 212
11.10.1 整数包装类的常用域 212
11.10.2 浮点数包装类的常用域 214
11.10.3 包装类的比较 215
11.11 装箱与拆箱 217
11.11.1 手动装箱与手动拆箱 217
11.11.2 自动装箱与自动拆箱 218
11.11.3 装箱与拆箱的潜在风险 218
11.12 术语 219
11.13 小结 220
11.14 练习 220
第12章 数字类 221
12.1 Math类的使用 221
12.1.1 Math类的域 221
12.1.2 三角函数与反三角函数 221
12.1.3 指数函数与对数函数 222
12.1.4 双曲函数 224
12.1.5 取整函数 224
12.1.6 最大值与最小值 226
12.1.7 与ULP相关的方法 227
12.1.8 Math类的其他方法 228
12.1.9 Math类与StrictMath类的异同 231
12.2 Random类的使用 232
12.2.1 随机数的基本概念 232
12.2.2 生成伪随机数的算法 232
12.2.3 获得Random对象的方法 233
12.2.4 获得boolean类型的随机数 233
12.2.5 获得int类型的随机数 233
12.2.6 获得long类型的随机数 233
12.2.7 获得float类型的随机数 234
12.2.8 获得double类型的随机数 234
12.2.9 Random类的其他方法 234
12.3 BigInteger类的使用 235
12.3.1 BigInteger类的常用域 235
12.3.2 BigInteger类的构造方法 236
12.3.3 基本的数学运算方法 239
12.3.4 增强的数学运算方法 240
12.3.5 位运算相关方法 241
12.3.6 BigInteger类的其他方法 243
12.4 BigDecimal类的使用 244
12.4.1 RoundingMode枚举简介 244
12.4.2 MathContext类简介 245
12.4.3 BigDecimal类的常用域 245
12.4.4 BigDecimal类的构造方法 246
12.4.5 基本的数学运算方法 248
12.4.6 增强的数学运算方法 250
12.4.7 转化成基本类型的方法 252
12.4.8 BigDecimal类的其他方法 253
12.5 DecimalFormat类的使用 255
12.5.1 DecimalFormat类的模式 255
12.5.2 特殊的模式字符 256
12.5.3 DecimalFormatSymbols类简介 256
12.5.4 DecimalFormat类的构造方法 256
12.5.5 模式的获取与设置 257
12.5.6 前缀和后缀的获取与设置 258
12.5.7 数字的获取与设置 259
12.5.8 格式化数字的方法 260
12.5.9 解析字符串的方法 261
12.5.10 DecimalFormat类的其他方法 262
12.6 术语 262
12.7 小结 262
12.8 练习 263
第13章 集合类 264
13.1 集合类概述 264
13.2 集合类接口的常用方法 264
13.2.1 List接口的常用方法 265
13.2.2 Set接口的常用方法 267
13.2.3 Map接口的常用方法 268
13.3 集合类接口的实现类 269
13.3.1 List接口的实现类 269
13.3.2 Set接口的实现类 270
13.3.3 Map接口的实现类 272
13.4 迭代器 276
13.5 术语 278
13.6 小结 278
13.7 练习 278
第14章 格式类 279
14.1 Date类的使用 279
14.1.1 测试当前日期是否在指定的日期之后 279
14.1.2 测试当前日期是否在指定的日期之前 280
14.1.3 获得毫秒数 281
14.1.4 设置当前Date对象所表示的日期时间值 281
14.2 GregorianCalendar类的使用 282
14.2.1 简单的数字时钟 282
14.2.2 简单的公历万年历 283
14.3 TimeZone类的使用 286
14.3.1 查看本地时区 286
14.3.2 简单的时区转换工具 287
14.4 术语 288
14.5 小结 288
14.6 练习 288
第15章 输入输出 289
15.1 流概述 289
15.2 文件类 289
15.2.1 File类的创建与删除 290
15.2.2 获取文件信息 291
15.2.3 JDK7新增文件操作 292
15.3 以byte为数据单位的流类 295
15.3.1 InputStream类 296
15.3.2 OutputStream类 297
15.4 以char为数据单位的流类 298
15.4.1 Reader类 298
15.4.2 Writer类 299
15.5 文件输入输出流 301
15.5.1 FileInputStream与FileOutput-Stream类 301
15.5.2 FileReader类与FileWriter类 302
15.6 带缓存的输入输出流 305
15.6.1 BufferedInputStream与Buffered-OutputStream类 305
15.6.2 BufferedReader与BufferedWriter类 306
15.7 数据输入输出流 308
15.8 ZIP压缩输入输出流 309
15.8.1 压缩文件 310
15.8.2 解压缩ZIP文件 311
15.9 术语 313
15.10 小结 314
15.11 练习 314
第16章 异常处理 315
16.1 异常概述 315
16.2 异常的分类 316
16.2.1 可控式异常 316
16.2.2 运行时异常 317
16.3 获取异常信息 319
16.4 处理异常 321
16.4.1 使用try-catch处理异常 321
16.4.2 使用try-catch-finally处理异常 322
16.4.3 使用try-finally处理异常 324
16.5 抛出异常 326
16.5.1 使用throws声明抛出异常 326
16.5.2 使用throw语句抛出异常 327
16.6 自定义异常 329
16.6.1 创建自定义异常类 329
16.6.2 使用自定义异常类 330
16.7 异常的使用原则 331
16.8 术语 331
16.9 小结 331
16.10 练习 332
第17章 Swing程序设计 333
17.1 JFrame窗体 333
17.2 常用布局管理器 336
17.2.1 绝对布局 336
17.2.2 流布局管理器(FlowLayout) 337
17.2.3 边界布局管理器(BorderLayout) 338
17.2.4 网格布局管理器(GridLayout) 340
17.3 常用面板 342
17.3.1 JPanel面板 342
17.3.2 JScrollPane面板 343
17.4 标签组件与图标 344
17.4.1 标签的使用 344
17.4.2 图标的使用 344
17.5 按钮组件 346
17.5.1 普通按钮组件(JButton) 346
17.5.2 单选按钮组件(JRadioButton) 347
17.5.3 复选框组件(JCheckBox) 348
17.6 文本组件 350
17.6.1 文本框组件(JTextField) 350
17.6.2 密码框组件(JPasswordField) 351
17.6.3 文本域组件(JTextArea) 352
17.7 列表组件 354
17.7.1 下拉列表框组件(JComboBox) 354
17.7.2 列表框组件(JList) 356
17.8 进度条 359
17.9 术语 360
17.10 小结 361
17.11 练习 361
第18章 GUI事件处理机制 362
18.1 什么是GUI事件 362
18.1.1 为程序添加交互能力 362
18.1.2 GUI事件类 364
18.1.3 事件监听器 365
18.1.4 适配器 366
18.2 窗体事件 367
18.3 掌握鼠标操作 369
18.3.1 鼠标事件监听器 370
18.3.2 鼠标事件处理 370
18.4 掌握键盘控制 373
18.4.1 键盘事件监听器 373
18.4.2 键盘事件处理 374
18.5 术语 378
18.6 小结 379
18.7 练习 379
第19章 菜单和工具栏 380
19.1 菜单栏与弹出菜单 380
19.1.1 创建菜单栏 380
19.1.2 添加菜单和菜单项 380
19.1.3 创建弹出菜单 383
19.2 工具栏 386
19.2.1 创建工具栏 386
19.2.2 添加工具按钮 387
19.3 术语 389
19.4 小结 389
19.5 练习 389
第20章 对话框设计 390
20.1 JOptionPane类的使用 390
20.1.1 询问对话框 390
20.1.2 提示对话框 391
20.1.3 输入对话框 393
20.2 文件对话框 394
20.2.1 创建文件选择对话框 395
20.2.2 添加文件过滤器 396
20.3 颜色对话框 399
20.4 术语 400
20.5 小结 400
20.6 练习 400
第21章 数据库设计 401
21.1 数据库基础知识 401
21.1.1 什么是数据库 401
21.1.2 数据库的种类及功能 402
21.2 JDBC技术 402
21.2.1 什么是JDBC技术 402
21.2.2 为什么要在项目中添加数据库驱动 403
21.3 JDBC中常用的类与接口 403
21.3.1 DriverManager类 403
21.3.2 Connection接口 403
21.3.3 Statement接口 404
21.3.4 PerparedStatement接口 405
21.3.5 ResultSet接口 405
21.4 数据库操作 406
21.4.1 操作数据库的执行步骤 406
21.4.2 添加数据 409
21.4.3 删除数据 410
21.4.4 修改数据 411
21.4.5 查找数据 412
21.4.6 使用预处理语句 413
21.4.7 模糊查询 415
21.5 术语 416
21.6 小结 417
21.7 练习 417
第22章 多线程技术 418
22.1 线程概述 418
22.1.1 进程 418
22.1.2 线程 418
22.2 Java实现线程的两种方式 420
22.2.1 继承Thread类 420
22.2.2 实现Runnable接口 421
22.3 线程的生命周期 423
22.4 操作线程的方法 424
22.4.1 线程的休眠 424
22.4.2 线程的挂起 426
22.4.3 线程的中断 428
22.4.4 线程的礼让 429
22.5 线程的优先级 430
22.6 线程同步 432
22.6.1 线程安全 432
22.6.2 线程同步机制 434
22.7 线程间的通信 436
22.8 术语 439
22.9 小结 439
22.10 练习 439
第23章 Swing表格组件 440
23.1 利用JTable类创建、定制、操作表格 440
23.1.1 创建表格 440
23.1.2 定制表格 442
23.1.3 操作表格 445
23.2 表格模型与表格 448
23.2.1 利用表格模型创建表格 448
23.2.2 维护表格模型 450
23.3 提供行标题栏的表格 453
23.4 术语 457
23.5 小结 457
23.6 练习 457
第24章 Swing树组件 458
24.1 简单的树 458
24.2 处理选中节点事件 460
24.3 遍历树节点 463
24.4 定制树 465
24.5 维护树模型 468
24.6 处理展开节点事件 471
24.7 术语 473
24.8 小结 473
24.9 练习 473
第25章 网络程序设计 474
25.1 网络程序设计基础 474
25.1.1 局域网和因特网 474
25.1.2 网络协议 474
25.2 端口与套接字 475
25.2.1 端口 475
25.2.2 套接字 476
25.3 学习TCP编程原理 476
25.3.1 什么是TCP协议 476
25.3.2 掌握TCP编程的常用类 477
25.3.3 如何编写TCP程序 480
25.4 学习UDP编程原理 483
25.4.1 什么是UDP协议 483
25.4.2 掌握UDP编程的常用类 483
25.4.3 如何编写UDP程序 484
25.5 术语 488
25.6 小结 489
25.7 练习 489
第26章 Java绘图技术 490
26.1 Java绘图 490
26.1.1 Graphics 490
26.1.2 Graphics2D 490
26.2 绘制图形 491
26.3 绘图颜色与笔画属性 494
26.3.1 设置颜色 495
26.3.2 笔画属性 496
26.4 绘制文本 497
26.4.1 设置字体 497
26.4.2 显示文字 497
26.5 绘制图片 499
26.6 图像处理 500
26.6.1 放大与缩小 500
26.6.2 图像翻转 502
26.6.3 图像旋转 504
26.6.4 图像倾斜 506
26.7 术语 507
26.8 小结 508
26.9 练习 508
第27章 程序打包 509
27.1 概述 509
27.1.1 jar文件 509
27.1.2 MANIFEST文件 510
27.2 使用命令实现程序打包 511
27.2.1 完成单个文件打包 511
27.2.2 完成多个文件打包 513
27.3 在Eclipse中实现程序打包 514
27.4 术语 516
27.5 小结 516
27.6 练习 517
第二部分 项目实战 520
第28章 图书开发计划管理系统 520
28.1 系统分析 520
28.1.1 开发背景 520
28.1.2 需求分析 520
28.1.3 功能结构图 521
28.1.4 程序界面预览 522
28.2 数据库设计 523
28.2.1 数据库建模 523
28.2.2 数据库建表 524
28.3 系统环境配置 526
28.3.1 创建项目 526
28.3.2 项目类包规划 527
28.4 登录模块设计 528
28.4.1 模块概述 529
28.4.2 登录窗体设计 529
28.4.3 编写登录面板 530
28.4.4 编写登录进度面板 530
28.4.5 编写登录窗体 532
28.5 主窗体设计 536
28.5.1 窗体界面设计 536
28.5.2 编写功能按钮组 537
28.5.3 编写登录信息面板 541
28.5.4 编写人员管理面板 543
28.5.5 编写功能区面板 546
28.6 部门管理模块实现 548
28.6.1 部门信息管理 548
28.6.2 职务信息管理 553
28.7 图书计划模块实现 557
28.7.1 图书项目界面 557
28.7.2 单元计划界面 565
28.7.3 图书计划面板 567
28.7.4 个人单元计划面板 570
28.7.5 单元计划表面板 578
28.8 程序调试与错误处理 581
28.8.1 无法使用JDK6以上的API 581
28.8.2 解除API限制的错误 582
28.9 小结 583
第29章 电子地图 584
29.1 系统分析 584
29.1.1 开发背景 584
29.1.2 系统目标 584
29.1.3 系统功能结构 585
29.1.4 系统预览 585
29.2 数据库设计 588
29.2.1 数据库概要说明 588
29.2.2 数据库技术分析 588
29.2.3 数据库实现过程 589
29.3 主窗体设计 591
29.3.1 主窗体模块概述 591
29.3.2 主窗体技术分析 591
29.3.3 主窗体实现过程 593
29.4 地图显示模块设计 595
29.4.1 地图显示模块概述 596
29.4.2 地图显示模块技术分析 596
29.4.3 地图显示模块实现过程 597
29.5 地图操作模块设计 600
29.5.1 地图操作模块概述 600
29.5.2 地图操作模块技术分析 601
29.5.3 地图操作模块实现过程 602
29.6 标记维护模块设计 605
29.6.1 标记维护模块概述 605
29.6.2 标记维护模块技术分析 605
29.6.3 标记维护模块实现过程 611
29.7 标记搜索模块设计 616
29.7.1 标记搜索模块概述 616
29.7.2 标记搜索模块技术分析 616
29.7.3 标记搜索模块实现过程 617
29.8 小结 622
第30章 物资管理系统 623
30.1 系统分析 623
30.1.1 开发背景 623
30.1.2 功能阐述 623
30.1.3 系统预览 623
30.1.4 功能结构 625
30.1.5 文件组织结构 625
30.2 数据库设计 626
30.2.1 物资管理系统的数据库设计 626
30.2.2 物资管理系统的数据表设计 626
30.3 使用CVS进行团队开发 627
30.3.1 安装CVS服务器 627
30.3.2 配置CVS服务器 629
30.3.3 添加CVS用户 631
30.3.4 连接CVS服务器 632
30.3.5 共享项目到CVS服务器 633
30.3.6 使用CVS资源库进行团队开发 636
30.4 公共模块 638
30.4.1 Spring+Hibernate整合配置 638
30.4.2 基本信息常量的接口Constant 639
30.4.3 Hibernate操作数据库的类BaseDao 641
30.4.4 类型转换与获得信息的类CommonUtil 641
30.4.5 获得Spring配置实例的类ManagerFactory 642
30.4.6 获得事务管理策略对象的类ManagerFactoryUtil 643
30.5 系统登录模块 644
30.5.1 系统登录模块概述 644
30.5.2 系统登录模块的实现过程 644
30.6 主窗体模块 646
30.6.1 主窗体模块概述 646
30.6.2 工具按钮的设计 647
30.6.3 主功能区介绍 649
30.7 物品管理模块设计 650
30.7.1 物品管理模块概述 650
30.7.2 添加物品信息 650
30.7.3 查看物品信息 652
30.7.4 修改物品信息 654
30.7.5 删除物品信息 655
30.7.6 出借物品信息 657
30.8 小结 658
第31章 进销存管理系统 659
31.1 系统分析 659
31.1.1 需求分析 659
31.1.2 系统目标 659
31.1.3 功能结构 660
31.1.4 系统业务流程图 660
31.2 数据库与数据表设计 661
31.2.1 数据库分析 661
31.2.2 创建数据表 661
31.3 系统文件夹组织结构 663
31.4 公共类设计 663
31.4.1 Item公共类 664
31.4.2 数据模型公共类 664
31.4.3 Dao公共类 667
31.5 系统登录模块设计 672
31.5.1 设计登录窗体 672
31.5.2 “密码”文本框的回车事件 673
31.5.3 “登录”按钮的事件处理 674
31.6 系统主窗体设计 675
31.6.1 设计菜单栏 675
31.6.2 设计工具栏 678
31.6.3 设计状态栏 678
31.7 进货单模块设计 679
31.7.1 设计进货单窗体 680
31.7.2 添加进货商品 680
31.7.3 进货统计 681
31.7.4 商品入库 682
31.8 销售单模块设计 684
31.8.1 设计销售单窗体 684
31.8.2 添加销售商品 685
31.8.3 销售统计 686
31.8.4 商品销售 686
31.9 库存盘点模块设计 688
31.9.1 设计库存盘点窗体 688
31.9.2 读取库存商品 689
31.9.3 统计损益数量 690
31.10 开发常见问题及其解决方法 691
31.10.1 无法打开内部窗体 691
31.10.2 “关于”界面被其他窗体覆盖 691
31.10.3 打包JAR文件之后无法运行 691
31.10.4 程序运行后没有出现闪屏界面 691
31.11 小结 692
附录 Java程序编码规范 693