目录
项目一、黑客攻击系统-功能菜单
第 1 节:项目介绍
第 2 节:项目需求
第 3 节:项目实现
3.1执行方式 1(开发时使用)
3.2执行方式 2
3.3执行方式 3
3.4执行方式 4
第 4 节:项目精讲
4.1编程的本质
4.2极简的 C/C++ 语言语法规则
4.3头文件的使用
4.4程序从哪里开始执行-main 函数
4.5使用其他函数
4.6 不变的誓言-“字符串常量” 编辑
4.7 让计算机说话:cout 和 printf 的使用
4.8 韩信谋反解密-命名空间的使用
4.9 软件是怎样炼成的: C++程序的编译过程
4.10 血的教训:程序的注释
4.11 常见错误总结
4.12 计算机英语加油站
第 5 节: 项目拓展
5.1 拓展 1:开发图形登录菜单
5.2 拓展 2: 宅男福利-在控制台上跳极乐净土(音频版)
第 6 节: 项目修炼
6.1 编程思维修炼
6.2 职场修炼
6.3 逼格提升
第 7 节: 项目练习
项目一、黑客攻击系统-功能菜单
第 1 节:项目介绍
为看书困难的小伙伴推荐视频教程:百度网盘 提取码:r59a
黑客/骇客/红客
- 黑客: 精于计算机技术的计算机专家或程序员(有伤害能力,但是不做任何伤害)
- 骇客: 恶意或非法地破解、破坏程序、系统及网络安全的人, 又称“黑帽黑客”。
- 红客,为捍卫中国主权而战的黑客(或骇客)
汪正扬,中国最小黑客,13岁向360提交多个系统漏洞
中美黑客大战
中美撞击事件(王伟在中国南海领空牺牲)引发”中美黑客大战” 中国红客与美国黑客激烈交战. 中国600多个网站被攻陷,美国92个网站陷落. 2001年5月4日,中国红客攻陷美国白宫网站,白宫网站被迫关闭2小时.说明:为提升中国南海的国防实力,研发了广州军区南海无线微波系统. 实现了南海主要岛屿在恶劣气候下的稳定通信,该项目的主体架构将在本课程的后续项目中带大家学习.
黑客攻击系统拓扑图
开发要求
配置要求:
1. 系统要求: windows7/8/10 系统, 或 Mac 系统
2. 开发工具 : visual c++ 2015 Express, 或其他 IDE 。 推荐配置: 1. 系统要求 : windows7/8/10 系统 2. 开发工具 : visual c++ 2015 Express 或其他 VS 版本 项目说明 1. 直接从项目需求入手 , 搞清需求后 , 直接开发项目 , 在项目实现中学习 C++ 2. 通过 6 个子项目迭代代码 , 实现黑客攻击功能 .第 2 节:项目需求
黑客打开这个攻击系统后,首先看到的就是一个“功能菜单”。 以便让黑客选择所需要的功能。 假设需求如下: 1. 网站 404 攻击 2. 网站篡改攻击 3. 网站攻击记录 4. DNS 攻击 5. 服务器重启攻击第 3 节:项目实现
创建一个空项目 CP1 添加文件 admin.c#include <iostream>
#include <Windows.h>
/*
1.网站 404 攻击
2.网站篡改攻击
3.网站攻击记录
4.DNS 攻击
5.服务器重启攻击
*/
int main(void) {
std::cout << "1.网站 404 攻击" << std::endl;
std::cout << "2.网站篡改攻击" << std::endl;
std::cout << "3.网站攻击记录" << std::endl;
std::cout << "4.DNS 攻击" << std::endl;
std::cout << "5.服务器重启攻击" << std::endl;
system("pause");
return 0;
}
3.1执行方式 1(开发时使用)
使用调试模式执行:
1、选择 Debug 模式(默认);2、单击开始按钮
3.2执行方式 2
直接双击运行调试模式下的可执行文件:
3.3执行方式 3
使用发布模式:
3.4执行方式 4
直接运行发布模式下编译后的可执行文件:
发布模式和调试模式的区别 调试模式中会生成很多调试信息,便于排查错误,但是对执行效率有影响。 确认程序正确后,使用发布模式生成可执行文件。第 4 节:项目精讲
4.1编程的本质
电影:骇客帝国
完全由程序控制的虚拟世界
电影《源代码》:多个平行世界
已投入使用的家庭服务机器人:
编程的本质 “程序员”预先编写一系列命令, 控制 程序执行特定的任务。 “程序员”就是“上帝 |
4.2极简的 C/C++ 语言语法规则
不做孔乙己,要做说干就干的平头哥
仅记原始规则,把握编程的本质 原始的规则: 1. 各“语法单位”(组成部分)使用任意个(至少 1 个)分隔符隔开。 分隔符有:空格,或 tab 键,或换行符。 int main(void) int main(void) 都是合法的。 intmain(void) 是非法的。 2. 必须使用英文输入法输入 (仅双引号括起来的“字符串”中可使用中文) 3. 每条代码的后面使用 ;表示这个指令代码结束。 4. #include 等预处理指令 , 必须一条指令占一行 其他规则不需记忆,在后面的项目实践中掌握。 以下代码也能编译运行以上风格的代码, 常见于报价低但是由要求给源码的外包软件中.(目的:让人看不懂)
高逼格的代码: (推荐)
无论如何 , 只要遵循最基本的原则 , 代码就是合法的 , 就能编译执行 . 懂得最基本的规则之后 , 再追求优雅风格的代码 ( 高逼格风格 ) 再次强调: 不要刻意记忆 C++ 的语法规则(记也没有意义) 初学时,仅掌握最基本的语法规则即可!4.3头文件的使用
为什么要使用头文件 事件回顾 : < 吐槽大会 > 第一季 嘉宾 ” 王建国 ” 吐槽另一名嘉宾 ” 常远 ”.
小咖见小咖, 互不认识. 不聊显得没礼貌, 强聊又太尴尬...
粉丝见蒙面偶像...
拜年走亲戚,分不清七大姑、八大姨...
原因 : 各种因素导致的互不认识! 程序如戏 程序中有很多元素 (std::cout, system), 都是一个个演员 但是他们之间都互不认识 , 但是却要一起合作, 强行编译 , 就会导致错误 !得预先介绍他们, 知道他们各自的名号和用法
解决方案 : 包含相应的头文件 ! ( 头文件中 , 含有相关元素的介绍说明 ) std::cout 头文件 : iostream system 头文件 : Windows.h #include <Windows.h> 表示把文件 Windows.h 中的所有内容拷贝 ( 复制 ) 到“这里”。 头文件的查找路径 #include <Windows.h> <> 表示,从编译器默认的路径中去找文件 stdio.h 这个默认路径,取决于编译器。不同平台下不同编译器的路径都不相同。 这个默认路径下,已经包含了 c 标准库所需要的所有头文件。 使用 C++ 标准库的头文件使用该方式。 #include “mytest.h” “” 表示从当前目录下寻找文件 mytest.h 如果在当前目录下找不到,再从编译器默认的路径中查找。 使用用户自定义的头文件使用该方式。 头文件的位置 要求放在文件的最前面。 #include 的作用是,把相关的声明拷贝到这个文件内, 所以都习惯把#include 放到文件的最前面。 如果放到后面,当 include 之前出现了相关的函数,就会有问题,例如4.4程序从哪里开始执行-main 函数
人生,就是一个程序。在不同的阶段,做不同的事。 每件事,就是一个函数。 每个人的人生都不相同, 以不同的顺序,做不同的事(相当于调用不同的“函数”), 但是都是从“出生”开始 . 每个软件也各不相同,包含不同的函数,但是都是从 main 函数开始: main 函数的要求: 1. 返回类型 2. 参数 3. 返回值 main 函数的作用 main 函数是程序的唯一入口。 也就是说,程序运行时,首先从 main 函数开始执行。 一个程序,必须要有一个 main 函数,而且也只能有一个 main 函数。 main 函数的格式 格式 1 : int main(void) { } 格式 2 : 具体用法在后面的函数部分,再详细讲解 int main(int argc , char* argv) { } main 函数的返回值 main 函数应该用 return 返回一个 int 类型数据,也就是说,必须返回一个整数。 一般用法: 程序成功结束,则 main 函数返回 0 程序有异常,则返回一个大于 0 的整数。4.5使用其他函数
真正强大的人,总是善于使用各种资源。 使用已有的函数,来完成自己的工作,而不是一切都由自己来实现。 IT 格言:不要重复制造轮子 --- 《人月神话》 解读:尽可能使用已经开发好的函数。 有哪些“其它函数”? 1 ) C 标准库 2 ) C++ 标准库 3 )第三方开源框架 4 )公司内已经开发好的函数 5 )程序员自己定义的函数4.6 不变的誓言-“字符串常量”
直到今天,“水帘洞”三个字一直没有变。 “水帘洞”就是“字符串常量” 什么是字符串? 什么时候需要使用字符串? 微信聊天、QQ 聊天,使用的都是字符串 字符串常量:内容永远不会发生变化的字符串。 字符串常量:用半角(英文输入法)双引号“”括起来。 “你爱我吗” “I love you.” std::cout << “我的战斗力是” << 10000; “我的战斗力是”是字符串常量 10000 是整数常量 std::cout << “9527”<<“的年龄是” << 38; “9527”是字符串常量 38 是整数常量 常量和变量的区别? 常量:在程序整个运行期间,值不会发生任何变化。 变量:在程序整个运行期间,值随时可以发生变化。 疑问: 字符串的存储方式? 除了字符串常量,还有哪些其他类型的常量? 变量又如何使用? 【在后续课程中详细讲解】4.7 让计算机说话:cout 和 printf 的使用
沉默不是金,爱需要表达。暗恋永远不会有结果。
“打印”是计算机最原始的表达方式。
C++风格的打印: 实例: std::cout << “ 你好! Rock.” ; std::cout << “ 你好! Rock.” << std::endl; std::cout << std::endl; std::cout <<” 工资 : “ << 30000; std::cout <<” 工资 : 30000“; std::cout << 3.1415; 使用要求: 需要包含头文件 #include <iostream> 注意不是 #include <iostream.h> std 是一个命名空间(下一节详细讲解) cout 是 std 命名空间内的一个“对象”。 endl 也是 std 命名空间内的一个对象,用来表示“回车符”(换到下一行的最前面) 对象:先简单的理解为一个具体的实体。 (在后续视频中,会详细介绍 C++ 面向对象的概念) std::cout << 相当于调用了一个特殊的函数(但不是函数),用来打印数据。 std::cout << " 你好! " << "Rock!"; 等效于: std::cout << " 你好! "; std::cout << "Rock!"; std::cout, 可以连续输出任意多个数据,中间用 << 隔开。 C 风格的打印: 实例: printf(“ 你好! Rock”); printf(“ 你好! Rock\n”); printf(“\n”); printf(“ 工资 :30000”); printf(“ 工资 :%d”, 30000); printf(“ 工资 :%d 年假: %d”, 30000, 12); printf(“%f”, 3.1415); printf(“ 圆周率: %f”, 3.1415); 说明 : 1. 占位符的使用 2. %d 整数 %f 浮点数(带小数部分的数据) 使用要求: 需要包含头文件 #include <stdio.h> 特别注意: std::cout 和 printf 还有很多用法,现在只需要掌握以上最常用的用法,其他的用法现在不需 要关注。 其他用法在后续课程中,需要时再讲解。 打印语句的使用场合: ‘打印’常常指:把信息输出到“标准输出设备”(标准输出设备,就是显示器中的“终端”)。 1. 控制台应用程序的输出 2. 程序调试 Bug 的重要手段 讨论: std 是一个命名空间,那么什么是命名空间?4.8 韩信谋反解密-命名空间的使用
韩信到底有没有谋反?
读《史记》:
研究一下历史: 韩信,战国时期韩国王室后裔。随刘邦征战天下。 公元前 205 年,韩信攻韩国,胜,刘邦命韩信为韩王 项羽被灭后,刘邦正式册封韩信为韩王。 公元前 196 年,韩信被告发谋反,韩信投降匈奴。韩信,淮阴人。被称兵家四圣之”兵仙”。 秦末投项羽,后投刘邦。 背水一战击败赵国,同时派人降服燕国。 汉五年,韩信会师垓下,围歼楚军,项羽自刎。 被封楚王,后被人诬告贬为淮阴侯。 吕后与萧何合谋,将韩信骗入长乐宫,被斩。 小结: 两个韩信,同时追随刘邦,都被封为王,都被告密谋反,都被杀(同一年被杀)。 区分: 韩王韩信、淮阴侯韩信 C++避免名字冲突:使用命名空间 使用命名空间。 用法 1 :
#include <iostream>
#include <string>
namespace China {
float population = 14.1; //单位: 亿
std::string capital = "北京";
}
namespace Japan {
float population = 1.27; //单位: 亿
std::string capital = "东京";
}
using namespace Japan;
int main(void) {
std::cout << "首都:" << capital << std::endl;
std::cout << "人口:" << population << std::endl;
std::cout << "首都:" << China::capital << std::endl;
std::cout << "人口:" << China::population << std::endl;
system("pause");
return 0;
}
用法2 :
#include <iostream>
#include <string>
namespace China {
float population = 14.1; //单位: 亿
std::string capital = "北京";
}
namespace Japan {
float population = 1.27; //单位: 亿
std::string capital = "东京";
}
//注意:没有 namespace
//直接指定命名空间中的标识符,而不是整个域名
using China::capital;
using Japan::population;
int main(void) {
std::cout << "首都:" << capital << std::endl;
std::cout << "人口:" << population << std::endl;
system("pause");
return 0;
}
用法3:
#include <iostream>
#include <string>
namespace China {
float population = 14.1; //单位: 亿
std::string capital = "北京";
}
namespace Japan {
float population = 1.27; //单位: 亿
std::string capital = "东京";
}
using namespace China;
using Japan::population;
int main(void) {
std::cout << "首都:" << capital << std::endl;
std::cout << "人口:" << population << std::endl; //出错!
system("pause");
return 0;
}
错误提示:
population”: 不明确的符号
错误原因:
解决方案:
指定完整的域名(Japan::population
)来表示。
......
int main(void) {
std::cout << "首都:" << capital << std::endl;
std::cout << "人口:" << Japan::population << std::endl; //出错!
system("pause");
return 0;
}
说明:
本节中的
string
是
c++
的字符串类型,先简单了解即可,后面会详细讲解。
4.9 软件是怎样炼成的: C++程序的编译过程
渣男是怎样炼成的 ? 经典流程(仅供参考)使用 vs, 只需单击一下,就把源代码转换成“软件”。
背后实际经历了一下 4 个处理阶段:
4.10 血的教训:程序的注释
热点事件回顾: 美国的一家名为 WTS Paradigm 的企业资源规划软件(ERP)开发商的办公楼内,该公司的一名程序员持枪 杀了 4 名同事,因他们总是不写注释,不遵循驼峰命名,最主要还天天 git push -f 。当时 43 岁的安东 尼·汤(Anthony Tong)在办公室,拿出一把事先藏起来的半自动手枪向周围 4 名同事开火。其他工作人 员见状纷纷逃离办公楼,跑到附近的公司避难。当警察来到现场时,他竟然还想袭击警察!看来这位程序 员真是被愤怒冲昏了头脑,因他的不配合,最后警察不得已向他开枪,在送往医院的途中安东尼流血过多 死亡。在第二天的警方发布会上,警察说嫌疑人之前没有任何的犯罪行为,事情发生的非常突然,目前没有任何的迹象表明凶手的动机何在。 使用注释的要点 注释的目的: 为了让程序更方便阅读(“可读”),以便于维护。 需要注释的内容: 1. 重要变量名的作用(用来表示什么) 2. 比较复杂的算法思想 3. 程序中的关键步骤 注释的方式: 有两种注释方式 1. 单行注释 // 在行尾,或代码的上一行 在代码的下一行也可以,但很少有人这么做。 2. 多行注释 /* */ 不支持嵌套。 3. 不要为了注释而注释! 过多的注释,反而有害!会把真正需要注意的东西淹没。......
int i; //定义了一个变量 i
......
注释的风格
函数的注释,有特别的“姿势”,可以让代码显得更规范。
1.
在行尾注释 使用
//
注释
2.
在代码的上一行使用
//
注释
3.
多方内容的注释,使用
/* */
4.
函数的注释
具体方法,在函数部分再详细讲解。
良好的注释风格,是一个程序员的基本修养。
4.11 常见错误总结
错误 1:VS 的中文乱码问题
VS 最知名的错误 ( 被程序员吐槽最多的 BUG) 。 VS 支持多种中文编码,但是使用不当时,常常导致中文乱码,而且难以解决。 中文乱码的原因 : 1. 中文在不同编码格式下 , 存储的方式不一样 . 2. 如果程序是 A 编码方式编译运行的 , 但是控制台却是以 B 编码方式来显示 , 就会出现乱码 . 3. vs 的控制台默认编码是 GB2312, 编号号是 836 注意:GBK 编码是兼容 GB2312 的 , 一般描述 GBK 常常就是指 BG2312 如果源代码文件的编码如果是其他编码格式, 就会导致中文乱码 . 正常场景 : 在 vs 中新建文件时 , 该文件默认都是 GB2312 编码 . 因为控制台默认也是 GB2312 编码 , 所以一般情况下 , 都不会出现中文乱码 . 错误场景 : 1. 直接在项目中导入了其他已经创建好的源代码文件 , 如果该文件不是 BG2312 编码 , 而且含有中文的话 , 就必定会出现中文乱码 . 2. 从其他文件中复制代码到 vs 的文件中 , 也可能导致编码错乱 . 3. 网络编程中 , 和服务器交互通信 , 两端的编码很可能不同 . 我们的 ” 黑客攻击系统 ” 的服务端木马 , 就是 UTF-8 编码格式的 . 解决方案一: 修改文件的编码 修改源代码文件的 ” 编码格式 ”, 使其和控制台的编码格式保持一致 . 代码文件的编码格式 , 可以通过 vs 很方便的修改 : 先用 vs 打开对应的文件 , 然后如下操作 :解决方案二: 强制指定文件执行 不修改文件的编码 , 而是直接指定程序执行时使用的编码 , 使其和运行程序的控制台的编码 一致 .
#pragma execution_character_set("gbk")
解决方案三: 修改控制台的编码格式
修改
vs
控制台的编码
,
使其和源代码的编码保持一致
.
修改注册表
,
可以修改控制台的编码格式
.
注意
:
不建议使用该方式
.
因为
,
把控制台的默认编码改为其他编码后
,
在该控制台输入中文
,
很可能导致输入的中文
无法识别
.
在
vs2010
中存在该问题
.
解决方案四: 对数据进行编码转换
适用于
:
服务器端和客户端
,
或多个客户端之间的编码不一致时
.
1)
收到对方的其他编码数据时
,
先使用特定的接口来进行编码转换
.
2)
发送本地数据给对方之前
,
先使用特定的接口来进行编码转换
.
错误
2
:
360
报告病毒
项目执行时,
360
安全卫士报告病毒,程序被拦截,提示如下:
解决方法:
方法
1.
关闭
360
方式
2.
在
360
中添加白名单。
定位到文件:C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
错误 3 :代码正确,但是无法通过编译 代码看不出错误,而且报错信息莫名其妙,则很可能是因为代码使用全角字符方式输入的。 特别是各种符号,比如双引号,圆括号,分号等。 解决方案: 1. 把原来的部分代码删除,切换到半角输入方式,再重新输入。 2. 使用搜狗输入法的“中文时使用英文标点”功能,可以避免因为中英文切换导致的全角 符号错误! 1 )打开任意编辑器,比如记事本或 word 等,并把光标定位到该编辑器内。 2 )同时按下 ctrl + shift + m + o 四个按键,以弹出搜狗工具箱: 单击工具箱(如上图所示):
在单击“属性设置”,勾选“中文时使用英文标点”
建议: 安装两种中文输入法. 写代码时, 切换到搜狗输入法.(要求按以上要求配置搜狗输入法) 其他情况下, 使用另一个中文输入法(比如 QQ 拼音输入法) 其他错误: LINK : fatal error LNK1561: 必须定义入口点 原因:没有 main 函数,或者 main 函数的 main 写错了
4.12 计算机英语加油站
IT 编程中 , 英语学习的误区 . 1) 误区 1: 不懂英语 , 不能学编程 2) 误区 2: 完全不需要英语 实际要求 : 认识最基本的英文单词即可 . ( 总计几百个 )IDE | 集成开发环境 |
fatal error | fatal 致命的 error 错误 fatal error 致命的错误 |
main | 主要的 |
include | 包含 |
io | input 输入 output 输出 input output 输入输出 io 输入输出的简写 |
stream | 流 iostream 输入输出流 |
system | 系统 system() 函数 , 用来执行控制台的各种命令 例如 : system( "pause"); system("ping www.baidu"); |
return | 返回 |
void | 空,空的 |
int | 整数类型 |
windows | 窗口 |
pause | 暂停 |
打印 printf C 语言的输出语句 | |
cout | console 控制台 output 输出 console output 控制台输出 cout 是 ”console output” 的简写 |
cin | console 控制台 input 输入 console input 控制台输入 cin 是 ”console input” 的简写 |
endl | end 结束 line 行 endl 行结束符 ( 回车换行 ) |
debug | 调试 |
release | 发布 |
use | 使用 using : use 的分词形式 , “ 正在使用 ” |
namespeace | name 名称 space 空间 namespace 命名空间 |
第 5 节: 项目拓展
5.1 拓展 1:开发图形登录菜单
搭建图形开发环境
图形开发环境 1. 使用 MFC 或 WPF 使用方便 , 但是需要先熟悉 C++, 仅适用于 Windows 平台 . 2. 使用跨平台 QT 跨平台 , 也要先熟悉 C++. 3. 使用图形库 OpenGL OpenGL 非常强大 , 很多大型游戏引擎就直接使用 OpenGL 绘制图像 缺点 : 太复杂 , 不适合初学者 . 4. EasyX 使用简单 , 非常适合 C/C++ 初学者构建图形界面 . 同时用来学习 / 提高 C/C++ 语言 为什么选择 EasyX 1. 作为学习、提高 C++ 的重要工具,在实际工作中再根据需要选择其他工具。 2. 开发简单的图形界面应用程序 搭建 EasyX 图形开发环境 1. 先安装 Visual C++2015 或 VS 的其他版本 在前面的课程中已经安装。 2. 下载EasyX的安装包。 3. 直接双击运行安装。 单击 visual c++ 2010 对应的“安装”按钮(或单击其他版本对应的按钮) 4. 开发第一个图形界面程序 在原项目所在的解决方案中,创建一个新项目(也可以重新创建一个新的解决方案) 右击解决方案,选择“添加” > “新建项目” : 在 VS 中,一个解决方案可包含多个项目。 在新项目 G1 中创建一个新文件 mainGraphic.cpp 代码如下: #include <graphics.h> // 引用 EasyX 图形库
#include <Windows.h>
int main(void)
{
initgraph(640, 480); // 初始化图形界面, 画布大小为 640x480
//画一个圆 circle(320, 240, 200); //画圆,圆心(320, 240),半径为 200
system("pause");
closegraph(); // 关闭图形界面
}
把新项目 G1 设置为找个解决方案的“启动项目”
运行:
把新项目 G1 设置为找个解决方案的“启动项目”并运行。
图形开发进阶
可参考 easyx 图形库的文档手册, 学习各个接口的用法.
效果图:分析:
背景色:用“画图”的拾色器获取。
代码:#include <graphics.h> // 引用 EasyX 图形库
#include <Windows.h>
int main(void)
{
initgraph(640, 480); // 初始化图形界面, 画布大小为 640x480
setbkcolor(RGB (64, 128, 128)); //设置背景色
cleardevice(); //用背景色清空整个屏幕(整个画布)
//画一个圆
setlinecolor(RGB (255, 0, 0)); //设置划线(画笔)的颜色
setlinestyle( PS_SOLID, 10); //设置线条为实线, 设置线宽为 10 像素
circle(320, 240, 200); //画圆,圆心(320, 240),半径为 200
//输出文本
settextcolor(RGB(255,255,0)); //设置字体颜色
//设置字体样式: 字体高度为 100 像素, 宽度不指定, 字体名称为"微软雅黑"
settextstyle(100, 0, "微软雅黑");
outtextxy(170, 190, ("无码高清")); //在指定位置输出文本
//画一条斜线 line(180, 380, 460, 100); //从(180,380) 到 (460, 100)画一条直线
system("pause");
closegraph(); // 关闭图形界面
}
黑客攻击系统-图形界面实现
效果:
分析:
图片: 600 x 340 实现: 1. 把图片资源 (bg.jpg) 复制到该项目的目录下: 2. 代码实现: mainGraphic.cpp#include <graphics.h> // 引用 EasyX 图形库
#include <Windows.h>
int main(void)
{
initgraph(600, 400); // 初始化图形界面, 画布大小为 640x480
loadimage(0, ("bg.jpg"));
settextcolor(RGB(255,255,0)); //设置字体颜色
settextstyle(30, 0, "微软雅黑");
rectangle(300, 40, 550, 80); //(左上角 x,左上角 y, 右上角 x,右上角
outtextxy(310, 45, "1-网站 404 攻击"); //在指定位置输出文本
rectangle(300, 100, 550, 140);
outtextxy(310, 105, "2-网站篡改攻击"); //在指定位置输出文本
rectangle(300, 160, 550, 200);
outtextxy(310, 165, "3-网站攻击修复"); //在指定位置输出文本
rectangle(300, 220, 550, 260);
outtextxy(310, 225, "4-查看攻击记录"); //在指定位置输出文本
rectangle(300, 280, 550, 320);
outtextxy(310, 285, "5-退出"); //在指定位置输出文本
system("pause");
closegraph(); // 关闭图形界面
}
思考:
各功能菜单,可以进一步完善:
鼠标移动到该菜单项时,整个菜单项就变色
但鼠标在这个菜单上点击时,菜单项再次变色,并播放一个短暂的音效。
5.2 拓展 2: 宅男福利-在控制台上跳极乐净土(音频版)
效果:
代码:
#include <graphics.h> // 引用 EasyX 图形库
#include <Windows.h>
#include <mmsystem.h> // mci 库头文件
#pragma comment(lib, "winmm.lib")
int main(void) {
initgraph(800, 513);
loadimage(0, "jile.jpg");
mciSendString("play 极乐净土.mp3 repeat", 0, 0, 0); //重复播放
system("pause");
closegraph();
}
说明: 后续升级为“动画版”。
第 6 节: 项目修炼
6.1 编程思维修炼
编程闯关
第 2 关:收集宝石- 程序的执行效率,普通解法和最优解法的区别。
- 函数参数的使用
// 只调用了一次 moveUp, 效率更高
hero.moveUp(2);
// 调用了两次 moveUp, 比调用一次开销更大。
hero.moveUp();
hero.moveUp();
第
3
关 地狱幽灵
- 直线不一定最短,在失败中前进
- 螺旋式开发方式
- 在失败中寻找解决方案,使用函数参数优化代码
- 使用策略突破关“概念挑战”。
Scratch 初体验
舞台大小 :(480 x 360) Scratch 进阶 分享: 版本 1 https://scratch.mit.edu/projects/286365442/fullscreen/ 版本 2 https://scratch.mit.edu/projects/286883048/fullscreen/ 注册账号,分享自己的作品,用手机的浏览器即可打开(也可用微信打开)6.2 职场修炼
工作遇到困难怎么办 , 问还是不问 ? 问题: 做任何有难度的项目,必定会遇到困难,甚至瓶颈。 顾虑: 1. 问同事,会不会显得自己的水平不行,有损个人的逼格形象。 2. 问领导(项目经理、主管等),会不会影响自己在公司的技术地位 3. 憋着不问,可能搞不定,会不会影响项目进度。 案例:南京研究所,某卫星通信项目的芯片移植,进度严重受阻,被迫更换芯片。 职场陷阱: 遇到困难,诉苦,说“我不会”。 试用期,如果常常说“我不会”,将严重影响考评,甚至会被辞退。 案例:某名校(华南理工)毕业生试用期被辞退。 解决方案: 1. 提出具体的问题,越具体越好。 案例:某嵌入式设备的 WEB 服务器不会做。 就问:在 xxx 设备, xxx 操作系统,提供 xxx 功能的 WEB 服务器,怎么做? 2. 同时提出几个备选方案,更好。6.3 逼格提升
排错的最后武器 - 代码对比工具 明明文档或代码是一样的,为什么还是出错 ? 使用场合: 1. 学习时,和参考代码做比较 2. 开发时,在多个版本之间做比较。第 7 节: 项目练习
练习 1 :增加两个功能选项 练习 2 :程序员的套路 : 约会 5 步骤 为看书困难的小伙伴推荐视频教程: 百度网盘 提取码:r59a更多推荐
零基础学习C++系列课程(二) 持续更新中
发布评论