《C语言项目开发实战入门》以趣味俄罗斯方块、挑战2048、贪吃蛇大作战、超级万年历、图书管理系统(窗体版)、学生个人消费管理系统、企业员工管理系统和学生信息管理系统共8个项目为案例,从软件工程的角度出发,按照项目的开发顺序,系统、全面地介绍了项目开发流程,从开发背景、系统功能分析、业务流程分析、数据库建模到项目开发,每一过程都进行了详细讲解,旨在使读者真正获得程序开发经验,提高项目开发能力。《C语言项目开发实战入门》应用的主要技术及知识点有:C、控制台API 、获得键盘按键实现、指针、遍历数组、循环控制实现、读写文件数据、按键监听实现、获得日期时间、条件选择实现、MySQL、WINAPI 编程实现、条件编译、数组排序算法实现、存储管理、字符串处理函数实现、结构体数组、格式输出实现。
迈进C语言的大门 2
0.1 什么是C语言 3
0.2 C语言的特点 5
0.2.1 高效性 5
0.2.2 灵活性 5
0.2.3 功能丰富 5
0.2.4 表达力强 5
0.2.5 移植性好 6
0.3 C语言能做什么 6
0.3.1 单片机系统 6
0.3.2 应用软件 7
0.3.3 数据处理 7
0.3.4 嵌入式系统 7
0.3.5 游戏方面 7
0.4 C语言与其他语言比较 8
0.4.1 比较C语言和C 8
0.4.2 比较C语言和VC 8
0.4.3 比较C语言和Java语言 9
0.4.4 比较C语言和Python 9
0.5 本书环境要求 10
0.5.1 选择电脑系统 10
0.5.2 选择输入法 10
0.5.3 选择开发环境 10
C语言的开发环境 11
1.1 常用开发环境 12
1.2 安装C语言开发环境 13
1.2.1 安装Visual Studio 2019 13
1.2.2 安装Visual C 6.0 17
捞点干货:Windows 10系统安装Visual C 6.0出现0xc0000142错误 21
捞点干货:为什么在Windows 10系统下Visual C 6.0能创建文件但不能打开文件? 21
捞点干货:Windows 10系统安装Visual C 6.0时为什么出现未响应的情况? 22
捞点干货:Linux系统的代码与Windows系统的代码相同吗? 22
1.3 熟悉C语言开发环境 22
1.3.1 Visual Studio 2019开发环境介绍 22
1.3.2 Visual C 6.0开发环境介绍 27
1.4 C程序开发步骤 30
1.4.1 使用Visual Studio 2019开发C程序 31
捞点干货:Visual C 6.0和Visual Studio 2019代码一样吗? 33
捞点干货:怎么设置控制台输出屏幕背景及文字颜色? 34
1.4.2 使用Visual C 6.0开发C程序 34
捞点干货: 为什么要编译程序? 36
捞点干货:常用的快捷键 37
1.5 初学者经常遇到的几个问题 37
1.5.1 中英文符号混淆 38
1.5.2 单词拼写失误 39
1.5.3 错误的格式输入/输出 39
实战任务 39
任务1. 输出Go Big Or Go Home 39
任务2. 输出计算机时代的无形之王
丹尼斯·里奇的传奇 40
任务3. 输出eat our own dog food 40
任务4. 输出情人节快乐 40
任务5. 输出开发资源库首页 41
任务6. 输出天气预报 41
任务7. 输出地铁来了主界面 42
C程序开发之旅 43
2.1 开篇实例:《阿甘正传》简历 44
2.2 C语言程序结构 44
2.2.1 头文件 45
2.2.2 主函数 46
2.2.3 函数体 47
2.2.4 输出函数:printf()函数 47
2.2.5 return 0 48
2.3 注释 48
2.3.1 单行注释 48
2.3.2 多行注释 49
2.3.3 文档注释 49
捞点干货:注释里应该写点啥? 50
2.4 关键字与标识符 50
2.4.1 关键字 51
2.4.2 标识符 52
捞点干货:标识符可以用中文吗? 53
2.5 常量和变量 53
2.5.1. 常量 53
2.5.2. 变量 54
捞点干货:变量的名字可以相同吗? 55
2.6 C程序的编程规范 56
2.6.1 使用空格 56
2.6.2 使用换行 57
2.6.3 变量、常量命名规范 57
2.6.4 函数的命名规范 57
快学快用 57
1. 为什么不内置输入和输出函数? 57
2. 注释应该写在哪? 57
3. C语言区分字母大小写 57
4. 提高程序可读性 58
5. 让C语言控制台输出色彩斑斓的文字和背景 58
6. 利用字符映射表输入特殊符号 60
实战任务 62
任务1. 输出电影《我和我的祖国》7个大事件时间 62
任务2. 输出手绘海报 62
任务3. 输出开发资源库登录界面 63
任务4. 输出2018年天猫双十一购物节总成交金额 63
任务5. 输出秒杀界面 64
基本数据类型 65
3.1 开篇实例:暗号 66
3.2 基本数据类型概述 66
3.3 整型数据 67
3.3.1 定义整数类型 67
3.3.2 初始化整数类型 68
3.3.3 其他整型类型 68
3.3.4 输出其他整数类型数据 69
3.3.5 整型常量 70
3.4 浮点类型 70
3.4.1 定义浮点类型 71
3.4.2 初始化浮点数据 72
3.4.3 输出浮点型数据 73
3.4.4 浮点型常量 74
捞点干货:利用小数解决浮点结果不精确问题 74
捞点干货:数字里可以有下划线吗? 75
3.5 字符型数据 75
3.5.1 声明字符型 75
3.5.2 初始化字符型 76
3.5.3 输出字符型数据 76
捞点干货:什么是ASCII码? 77
捞点干货:一秒记住52个大小写字母的ASCII码值 79
3.5.4 字符型常量 79
3.5.5 转义字符 80
捞点干货:各基本数据类型之间比较 81
3.6 类型转换 82
3.6.1 自动类型转换 82
捞点干货:默认类型造成的雷区 82
3.6.2 强制类型转换 83
快学快用 85
1. 常用转义字符 85
2. C语言获取或输出当前时间 85
3. 如何合理定义变量的类型 87
4. 指针简介 87
实战任务 88
任务1. 输出爱国者导弹的总数量 88
任务2. 模拟输出中国联通流量提醒 88
任务3. 模拟微信手机充值 88
任务4. 输出伟大航路烤鱼双人餐价目表 89
任务5. 不做时间的荒诞人 90
数据输入与输出 91
4.1 开篇实例:绘制《植物大战僵尸》中的墙果 92
4.2 字符串输入/输出函数 93
4.2.1 单字符输入/输出函数:putchar()和getchar() 93
捞点干货:putchar()函数中的括号里面可以写啥? 94
4.2.2 多字符输入/输出函数:puts()和gets() 95
4.3 格式化输入/输出函数 97
4.3.1 格式化输出函数:printf() 97
捞点干货:如何输出%d\和双引号? 100
4.3.2 格式输入函数:scanf_s() 100
4.4 混合数值和字符输入 102
捞点干货:scanf_s()函数输入形式必须一致吗? 103
捞点干货:scanf_s()函数必须要有&吗? 103
快学快用 104
1. getchar()函数可以不用返回值吗? 104
2. putchar()函数和puts()函数有啥不同? 104
3. %x、%X、%#x、%#X的区别 104
4. 输入验证 105
5. 文件的输入、输出 105
6. 单引号和双引号的区别 106
实战任务 107
任务1. 输出字母、数字或符号的ASCII状态值 107
任务2. 向往的生活 107
任务3. 设置百度地图常用地点 108
任务4. 实时更新导航菜单 108
运算符与表达式 109
5.1 开篇实例:燃烧我的卡路里 110
5.2 运算符与表达式 110
5.2.1 运算符 110
5.2.2 表达式 111
5.3 赋值运算符与赋值表达式 112
5.3.1 赋值运算符 112
5.3.2 赋值表达式 112
捞点干货:如何调换两个变量的值? 113
5.4 算术运算符与算术表达式 114
5.4.1 算术运算符 114
5.4.2 算术表达式 115
捞点干货:取任意数字的百位、十位、个位数字 115
5.4.3 自增/自减运算符 116
5.5 关系运算符与关系表达式 116
5.5.1 关系运算符 117
5.5.2 关系表达式 117
5.6 逻辑运算符与逻辑表达式 118
5.6.1 逻辑运算符 118
5.6.2 逻辑表达式 118
5.7 位运算符与位表达式 119
5.7.1 位运算符 120
5.7.2 位运算表达式 120
捞点干货:使用&运算符判断奇偶数 122
5.8 逗号运算符与逗号表达式 122
5.9 复合赋值运算符 123
5.10 优先级和结合性 124
快学快用 126
1. 自增/自减前缀与自增/自减后缀的区别
(例如: i,i ) 126
2. 数学函数 126
3. rand()函数,随机函数 127
4. srand()函数,初始化随机数发生器函数 127
5. if条件判断的使用 128
实战任务 129
任务1. 将港珠澳大桥的全长用中国古代的丈、
尺表示出来 129
任务2. 人民币与美元、欧元的转换 129
任务3. 模拟掷骰子游戏 129
任务4. 挑战10秒,买多少送多少 130
任务5. 摄氏温度转其他温度换算 130
条件判断语句 131
6.1 开篇实例:安全通行 132
6.2 if语 句 132
6.2.1 if语句 133
捞点干货:if语句的常见错误 134
6.2.2 if…else语句 135
捞点干货:在if语句中使用==比较两个浮点值的方法不可靠 136
6.2.3 else if语句 137
6.3 if语句的嵌套 139
6.4 条件运算符 140
6.5 switch语句 142
6.5.1 switch语句的基本形式 142
6.5.2 多路开关模式的switch语句 144
捞点干货:break关键字的作用是什么? 146
捞点干货:default部分是否可以被省略? 146
6.6 if…else语句和switch语句的区别 146
实战任务 147
任务1. 解决千年虫问题 147
任务2. 微信小程序,我该玩哪个 147
任务3. 运用条件运算符模拟自营产品配送情况 147
任务4. 用户拨打10086那些事儿 148
任务5. 运用switch语句模拟高考报考志愿 148
循环控制语句 149
7.1 开篇实例:公积金贷款买房 150
7.2 while语句 151
7.3 do…while语句 152
7.4 for语句 155
7.4.1 for语句使用 155
7.4.2 for循环的变体 157
7.4.3 for语句中的逗号应用 158
捞点干货:for循环的常用错误 使用浮点值 159
捞点干货:3种循环语句的比较 159
7.5 循环嵌套 160
7.6 转移语句 162
7.6.1 break语句 162
7.6.2 continue语句 165
7.6.3 goto语句 167
实战任务 169
任务1. 模拟手机分期付款 169
任务2. 星座大揭秘 169
任务3. 模拟跳一跳小游戏的加分块 169
任务4. 银行中英文对照 170
任务5. 猜数字游戏 170
利用数组处理批量数据 172
8.1 开篇实例:购物车清单 173
8.2 数组的概念 174
8.3 一维数组 174
8.3.1 一维数组的定义 175
8.3.2 一维数组初始化 176
8.3.3 一维数组的引用 177
捞点干货:数组中未被赋值元素的值自动设置\0 178
8.4 二维数组 179
8.4.1 二维数组的定义 179
8.4.2 二维数组初始化 180
8.4.3 二维数组的引用 181
捞点干货:千万不能这样引用二维数组 183
8.5 多维数组 183
8.6 数组的排序算法 183
8.6.1 选择法排序 183
8.6.2 冒泡法排序 185
8.6.3 交换法排序 187
8.6.4 插入法排序 189
8.6.5 折半法排序 191
捞点干货:5种排序方法的对比及应用场合 193
实战任务 194
任务1. 输出王者荣耀的游戏角色 194
任务2. 十二星座速配 194
任务3. 统计数字出现的次数 194
任务4. 数独游戏 195
任务5. 平安夜分苹果啦 195
字符串处理函数 197
9.1 char类型数组 198
捞点干货:C语言中存在字符串类型吗? 198
9.2 使用字符串 199
9.2.1 初始化 199
9.2.2 结束标志 199
9.2.3 输入和输出 200
捞点干货:字符串是存在字符数组中吗? 200
9.3 字符串复制 201
捞点干货:字符串复制的本质是什么? 202
9.4 字符串连接 203
9.5 字符串比较 204
9.6 字符串大小写转换 205
9.7 获取字符串长度 206
实战任务 207
任务1. 注册明日学院VIP账号 207
任务2. 打印象棋口诀 208
任务3. 谁被@啦 208
任务4. 判断车牌的归属地 208
任务5. 显示实时天气预报 208
输入验证 209
10.1 验证英文字母 210
10.2 验证小写英文字母 211
10.3 验证大写英文字母 212
10.4 验证标点符号 213
10.5 验证字母或数字 214
10.6 验证除空格外的字符 215
10.7 验证空格 216
实战任务 217
任务1. 对号入座 217
任务2. 模拟键盘打字 217
任务3. 符号表情大全 218
任务4. 对对联 218
任务5. 音量效果 219
用函数实现模块化程序设计 221
11.1 函数概述 222
11.2 函数的定义 222
11.2.1 函数定义的形式 222
11.2.2 定义与声明 224
捞点干货:函数必须先声明再定义吗? 224
11.3 返回语句 224
11.3.1 有返回值函数 225
11.3.2 无返回值函数 226
捞点干货:void意味着是函数无类型? 226
11.4 函数参数 226
11.4.1 形参与实参 226
11.4.2 数组作函数参数 227
11.4.3 main()函数的参数 229
捞点干货:C程序是在main()函数结束的吗? 229
捞点干货:每个程序都要有main()函数吗?为什么main()函数不需要声明就可以用? 230
11.5 函数的调用 230
11.5.1 函数的调用方式 230
11.5.2 嵌套调用 233
11.5.3 递归调用 235
11.6 内部函数和外部函数 236
11.6.1 内部函数 236
11.6.2 外部函数 238
11.7 局部变量和全局变量 238
11.7.1 局部变量 238
11.7.2 全局变量 239
11.8 数学函数 240
实战任务 242
任务1. 模拟12306抢票系统 242
任务2. 为和尚写诗 242
任务3. 一棵松树的梦 242
指针的使用 243
12.1 指针相关概念 244
12.1.1 地址与指针 244
12.1.2 变量与指针 245
12.1.3 指针变量 245
捞点干货:指针就是一个地址吗? 247
捞点干货:什么是野指针? 247
12.1.4 指针自增/自减运算 247
捞点干货:指针大小都一样吗? 249
12.2 数组与指针 249
12.2.1 一维数组与指针 249
12.2.2 二维数组与指针 251
12.2.3 字符串与指针 252
12.2.4 字符串数组 253
12.3 指向指针的指针 253
12.4 指针变量作函数参数 254
12.5 返回指针值的函数 256
12.6 指针数组作main()函数的参数 257
实战任务 258
任务1. 喊出2022冬季奥运会口号 258
任务2. 语文古诗词填空 258
任务3. 小猪渡河 258
结构体和共用体 259
13.1 结构体 260
13.1.1 结构体类型的概念 260
13.1.2 结构体变量的定义 261
13.1.3 结构体类型的初始化 262
13.1.4 结构体变量的引用 263
捞点干货:成员变量都可以被赋值吗? 264
13.2 结构体数组 264
13.2.1 定义结构体数组 264
13.2.2 初始化结构体数组 266
13.3 结构体指针 266
13.3.1 指向结构体变量的指针 267
捞点干货:->是指向运算符吗? 267
13.3.2 指向结构体数组的指针 268
13.3.3 结构体作为函数参数 268
13.4 包含结构的结构 269
13.5 链表 270
13.5.1 链表概述 270
13.5.2 创建动态链表 271
13.5.3 输出链表 273
13.6 链表相关操作 274
13.6.1 链表的插入操作 275
13.6.2 链表的删除操作 276
13.7 共用体 278
13.7.1 共用体的概念 278
13.7.2 共用体变量的初始化 279
13.7.3 共用体变量的引用 280
13.7.4 共用体类型的数据特点 281
捞点干货:结构体和共用体的区别 281
13.8 枚举类型 281
捞点干货:枚举类型什么时候使用? 282
实战任务 283
任务1. 长春三日游 283
任务2. 无人商店产品基本信息 283
任务3. 身份证信息暴露啦 283
预处理指令 285
14.1 宏定义 286
14.1.1 不带参数的宏定义 286
14.1.2 带参数的宏定义 288
捞点干货:#define命令能用指定标识符来代替字符串吗? 289
捞点干货:#define预处理命令应该写在程序哪里呢? 289
14.2 #include指令 289
捞点干货:程序中可以不加#include命令吗? 290
14.3 条件编译 291
14.3.1 #if命令 291
14.3.2 #elif命令 292
14.3.3 #ifdef和#ifndef命令 292
14.3.4 #undef命令 293
14.3.5 #pragma命令 294
实战任务 294
任务1. 一年有多少秒 294
任务2. 模拟控制交通灯场景 295
任务3. 模拟银行叫号服务 295
文件输入与输出 297
15.1 文件概述 298
捞点干货:什么是流? 298
15.2 文件基本操作 299
15.2.1 文件指针 299
捞点干货:可以直接用FILE类型定义变量来操作文件吗? 299
15.2.2 文件的打开 299
15.2.3 文件的关闭 301
15.3 文件的读写 301
15.3.1 fputc()函数 301
15.3.2 fgetc()函数 301
捞点干货:什么是结束标志EOF? 301
15.3.3 fputs()函数 302
15.3.4 fgets()函数 302
15.3.5 fprintf()函数 302
15.3.6 fscanf_s()函数 303
15.3.7 fread()和fwrite()函数 304
15.4 文件的定位 305
15.4.1 fseek()函数 305
15.4.2 rewind()函数 307
15.4.3 ftell()函数 308
实战任务 309
任务1. 读取蚂蚁庄园动态文件 309
任务2. 合并文件 310
任务3. 模拟淘宝客服自动回复 310
内存管理 311
16.1 内存组织方式 312
16.1.1 内存的组织方式 312
16.1.2 堆与栈 312
16.2 动态管理 314
16.2.1 malloc()函数 314
捞点干货:为什么static char *p=malloc(10);是错误的? 315
捞点干货:malloc() 函数分配内存为什么常写(int*)? 315
16.2.2 calloc()函数 315
捞点干货:calloc()函数有啥特性? 316
16.2.3 realloc()函数 316
16.2.4 free()函数 317
16.3 内存丢失 318
实战任务 319
任务1. 下载《英雄联盟》需要多大内存 319
任务2. 申请内存,输出十个0 319
任务3. 为演唱会会馆申请内存 319
SQL Server 数据库环境搭建与使用 322
17.1 SQL Server 数据库概述 323
17.2 安装SQL Server 2017 323
17.2.1 SQL Server 2017安装条件 323
17.2.2 下载SQL Server 2017安装引导文件 323
17.2.3 下载SQL Server 2017安装文件 324
17.2.4 安装SQL Server 2017数据库 326
17.2.5 安装SQL Server Management Studio管理工具 336
17.2.6 启动SQL Server管理工具 337
17.3 数据库、表的创建与删除 338
17.3.1 创建数据库 338
17.3.2 修改数据库 340
17.3.3 删除数据库 342
17.3.4 创建数据表 342
17.3.5 删除数据表 344
17.4 数据表常见操作 345
17.4.1 在表结构中添加新字段 345
17.4.2 在表结构中删除字段 345
17.4.3 数据表更名 346
17.5 数据的查增改删 346
17.5.1 查看数据 346
17.5.2 添加数据 347
17.5.3 修改数据 348
17.5.4 删除数据 348
17.6 数据库常用操作 349
17.6.1 分离数据库 349
17.6.2 附加数据库 349
17.6.3 执行脚本 351
SQL查询语句的使用 353
18.1 创建查询和测试查询 354
18.1.1 编写SQL语句 354
18.1.2 测试SQL语句 354
18.1.3 执行SQL语句 354
18.2 选择查询 355
18.2.1 简单的SELECT查询 355
18.2.2 选择查询字段 355
18.2.3 利用WHERE参数过滤数据 356
18.2.4 对查询结果进行排序 356
18.2.5 将查询结果分组统计 357
18.2.6 模糊查询 360
18.2.7 在查询语句中进行计算 361
18.2.8 为字段起一个别名 361
18.3 使用聚合函数进行查询 362
18.3.1 数据平均值查询 362
18.3.2 数据记录数查询 362
18.3.3 数据小值查询 363
18.3.4 数据值查询 363
18.4 复杂查询 364
18.4.1 子查询 364
18.4.2 联接 364
18.4.3 内联接 365
18.4.4 外联接 366
18.4.5 交叉联接 368
18.5 数据添加 368
18.5.1 INSERT语句 368
18.5.2 INSERT语句添加数据 369
18.6 数据修改 369
18.6.1 UPDATE语句 369
18.6.2 UPDATE语句修改数据 369
18.7 数据删除 370
18.7.1 DELETE语句 370
18.7.2 DELETE语句删除数据 370
存储过程、触发器与视图 371
19.1 存储过程概述 372
19.2 存储过程的应用 372
19.2.1 创建存储过程 372
19.2.2 修改存储过程 373
19.2.3 存储过程的调用 375
19.2.4 查询数据库中所有的存储过程 376
19.2.5 获取指定存储过程语句 377
19.2.6 删除存储过程 377
19.3 触发器介绍 378
19.4 使用触发器 378
19.4.1 新建触发器 378
19.4.2 修改触发器 379
19.4.3 删除触发器 380
19.5 视图介绍 381
19.6 视图应用 381
19.6.1 新建视图 381
19.6.2 修改视图 381
19.6.3 删除视图 382
19.6.4 获取数据库中所有的视图 382
19.6.5 获取指定视图语句 383
使用C语言操作数据库 385
20.1 连接数据库的准备工作 386
20.1.1 概述 386
20.1.2 配置SQL Server环境 386
20.1.3 配置C语言环境 387
20.2 使用ODBC连接数据库 388
20.2.1 ODBC数据源简介 388
20.2.2 配置ODBC数据源 388
20.2.3 连接数据库函数 393
20.2.4 C语言通过ODBC操作数据库 397
20.3 非ODBC方式操作数据库 399
20.3.1 删除、修改、插入数据 399
20.3.2 查询数据 403
智行共享汽车管理系统 407
21.1 概述 408
21.1.1 需求分析 408
21.1.2 开发工具的选择 408
21.2 系统设计 408
21.2.1 系统目标 408
21.2.2 系统功能结构 408
21.2.3 系统预览 409
21.3 数据库设计 411
21.4 功能设计 412
21.4.1 显示主菜单模块 412
21.4.2 认证租车模块 413
21.4.3 信息查询模块 420
21.4.4 一键转让模块 423
21.4.5 确认还车模块 426
21.4.6 连接与关闭数据库 428
单片机基础 430
22.1 单片机的模样 431
22.1.1 单片机概述 431
22.1.2 单片机组成部分 431
22.2 单片机的结构 433
22.2.1 单片机的外部结构 433
22.2.2 单片机内部结构分析 435
22.3 单片机开发的工具 440
22.3.1 Altium Designer电路设计工具 441
22.3.2 Keil uVision4集成开发环境 444
22.3.3 程序烧录工具 449
GSM短信控制家庭防盗报警系统 453
23.1 概述 454
23.1.1 需要分析 454
23.1.2 开发工具的选择 454
23.2 系统设计 454
23.2.1 系统功能设计 454
23.2.2 系统业务流程设计 455
23.2.3 系统预览 455
23.3 系统开发 455
23.3.1 电路原理图 455
23.3.2 元件列表 456
23.4 LED声光报警设计 457
23.4.1 LED灯报警设计 457
23.4.2 蜂鸣器报警设计 461
23.4.3 LED声光报警设计实物图 464
23.5 手机短信报警设计 464
23.5.1 液晶屏显示状态 464
23.5.2 GSM模块接收手机短信 471
23.5.3 手机短信报警设计实物图 475
23.6 按键设计 475
23.7 附录 479
划拳游戏 490
24.1 需求分析 491
24.2 系统设计 491
24.2.1 系统流程设计 491
24.2.2 系统预览 491
24.3 开发工具 493
24.4 划拳游戏的实现 493
24.4.1 预处理模块设计 493
24.4.2 游戏欢迎界面设计 494
24.4.3 游戏说明界面设计 496
24.4.4 游戏逻辑设计 498
24.4.5 显示游戏结束界面设计 501
单词背记闯关 507
25.1 需求分析 508
25.2 系统设计 508
25.2.1 系统流程设计 508
25.2.2 系统预览 508
25.3 开发工具准备 510
25.4 单词背记闯关的实现 510
25.4.1 创建单词文件 510
25.4.2 预处理模块设计 510
25.4.3 开始界面设计 512
25.4.4 积分规则界面设计 514
25.4.5 读取单词文件及文件存储分 516
25.4.6 系统逻辑设计 517
25.4.7 显示结果界面设计 520
缤纷水果消消乐游戏 523
26.1 需求分析 524
26.2 系统设计 524
26.2.1 系统流程设计 524
26.2.2 系统预览 525
26.3 开发工具 526
26.4 EasyX图形库 527
26.4.1 EasyX图形库简介 527
26.4.2 EasyX图形库的下载与配置 527
26.4.3 常用绘图函数 529
26.5 缤纷水果消消乐游戏的实现 532
26.5.1 主窗体的实现 532
26.5.2 游戏音乐的使用 541
26.5.3 鼠标与按键操作 543
26.5.4 水果消除的判断 549
26.5.5 为游戏应用添加图标 557
Visual Studio 2019常用快捷键 559
ASCII码表 561
C语言常用函数 565