目录

项目一、黑客攻击系统-功能菜单

第 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编程的本质

电影:骇客帝国

完全由程序控制的虚拟世界

电影《源代码》:多个平行世界

已投入使用的家庭服务机器人:

编程的本质
     “程序员”预先编写一系列命令,控制程序执行特定的任务。
     “程序员”就是“上帝
体验编程本质:控制! 控制! 本质就是控制!
        

失去控制?除非程序有 Bug...
计算机时钟 BUG 导致美军海湾战争中,唯一过百的伤亡(死 28 人,伤 100 余人)
BUG 事件:1991 年 2 月,美军的爱国者反导弹系统失效,未能拦截伊拉克的飞毛腿导弹,宰
赫兰基地被炸毁,场炸死 28 个美国士兵,炸伤 100 多人,造成美军海湾战争中唯一一次伤
亡超过百人的重大损失。
BUG 分析:爱国者反导弹系统,每工作 1 小时,系统时钟延时 3ms 左右,当时已经连续工作
了 100 小时,延时达到三分之一秒!飞毛腿导弹足以击中目标了!
需要关机重启,战事太急,没时间关机 :-(
重要的事情再说一遍:
编程,就是使用程序员的思维,来控制计算机做事情。
编程思维修炼中的“编程闯关”,就是让玩家自己写代码,来控制游戏中的 Hero 打怪、捡
宝、闯关。

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 常见错误总结

错误 1VS 的中文乱码问题

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) 发送本地数据给对方之前, 先使用特定的接口来进行编码转换.
错误 2360 报告病毒
项目执行时,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.com");
return
返回
void
空,空的
int 整数类型
windows 窗口
pause 暂停
print

打印

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 命名空间
注意: 可以使用 vs 的智能提示 (ctrl + j)

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),半径为 200system("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 关 地狱幽灵
  • 直线不一定最短,在失败中前进
  • 螺旋式开发方式
使用策略突破第 4 关
  • 在失败中寻找解决方案,使用函数参数优化代码
  • 使用策略突破关“概念挑战”。
积木式编程训练
Scratch 介绍
Scratch 是一款由美国麻省理工学院(MIT) 设计开发的开源的图形化编程工具。
直接用图形化、积木式的方法开发应用程序。
目的:
1)忽略语言细节,专注编程的本质:编程思维
2)快速掌握编程技能。
应用:
1)可直接开发各种游戏、应用。
2)结合 Arduino 开发板(一种开源硬件),可开发各种极客项目、机器人项目。
适用于:
初学编程的所有人群。
不适用于:
已经具备丰富编程经验的程序员。
Scratch 版本
Scratch2.0
Scratch3.0 (2019 年 1 月正式发布,更新了部分功能,使用方法相同)
Scratch 使用方式
1. 网页方式
国外网站,受网速影响严重。
https://scratch.mit.edu/
2. 离线式
需安装 Scratch, 在 QQ 群可直接下载,直接双击安装即可。
3.0 离线版,要求 Windows10 系统。
双击安装后,弹出如下窗口,单击“No thanks”

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++系列课程(二) 持续更新中相关推荐

  1. 零基础学习C++系列课程(一) 持续更新中

    目录 第 1 节:课程目标 项目 1:C++基础编程-黑客攻击系统(含 6 个子项目) 项目 2:C++基础编程-人工智能之地形导航系统 项目 3:C++基础编程-人工智能之双色球预测系统 项目 4: ...

  2. 零基础学习C++系列课程(三) 持续更新中

    目录 项目二.黑客攻击系统-输入账号 第 1 节 项目需求 第 2 节 项目实现 第 3 节 项目精讲 3.1 C++的数据类型 3.2 构建 IT 大厦的砖块:变量 3.3 用于计数的整数类型 3. ...

  3. 零基础学习C++系列课程(五) 持续更新中

    目录 项目四.路由器管理系统-权限判断 第 1 节 项目需求.项目实现 第 2 节 项目精讲-string 字符串的比较 第 3 节 项目精讲-表示真假的布尔类型 第 4 节 项目精讲-C 语言字符串 ...

  4. 视频教程-零基础JS入门系列课程(2)之JS语法基础精讲-JavaScript

    零基础JS入门系列课程(2)之JS语法基础精讲 螺钉课堂讲师,擅长Vue.React.ReactNative.NodeJS等前端框架及技术 邓老师 ¥59.00 立即订阅 扫码下载「CSDN程序员学院 ...

  5. C++学习笔记目录链接(持续更新中)

    学习目标: C++学习笔记目录链接(持续更新中,未完待续) 学习内容: 序号 链接 0 C++ 常见bug记录(持续记录中) 1 C++学习笔记1[数据类型] 2 C++学习笔记2[表达式与语句] 3 ...

  6. 零基础学习SVN之(二):CVS与SVN的区别

    相信大家看了零基础学习SVN之(一):SCM与SVN的使用(基础篇)这篇博客之后,对版本控制就有了一定的理解,同时也应该知道SVN与CVS是比较流行的两款SCM工具.那么到底这两款工具有什么区别呢? ...

  7. Ambari源码二次开发实战课程(持续更新中)

    如果大家想基于 ambari 开发一套自己的大数据平台,那么 ambari 二次开发的相关知识就必须具备.比如:ambari 整体编译,ambrai 汉化,ambari 页面开发,ambari api ...

  8. YOLO 3/4/5/6/7/x、Efficient、MaskRcnn、FasterRcnn、FCOS、SSD、M2Det、Retina、CenterNet、PicoDet等系列数据模型汇总持续更新中

    做了很长时间的CV领域的任务了,见到了很多不错的项目,很多时候也是会选择直接拿来开源的项目去使用,自己也做过了很多项目,后面就萌生了一个想法,将看到的不错的文章或者是数据集或者是项目汇总记录一下,以便 ...

  9. 图谱(学习地图)系列总结,持续更新中

    目录 1.2022年最新前端学习路线图 2.2022年最新大数据学习路线图 3.2022年最新javaEE学习路线图 4.2022年最新UI/UE学习路线图 5.2022年java学习路线指南 6.J ...

  10. 技术文章系列汇总(持续更新中)并附博客上树状列表源代码

    系统架构系列 在多台服务器上简单实现Redis的数据主从复制 利用Nginx做负载均衡 软件设计系列 项目分析 [项目分析]ASP.NET MVC路由匹配检测组件的代码分析 [项目分析]保持你的网站激 ...

最新文章

  1. ldap导入mysql_openLDAP 部署(亲测可用)
  2. visual studio 设计器不显示_面向国际市场的装置开发运维软件设计与实现
  3. Python 之网络编程基础
  4. 50种方法巧妙优化你的SQLServer数据库(转)
  5. numpy中数组的简单运算以及使用
  6. s3c6410 nand初始化
  7. 优酷宠爱剧场发布新片单 包括近30部待播精品剧
  8. 用于打开和创建SQLite,Microsoft SQL Server,PostgreSQL和MySQL SQL数据库的WPF对话框
  9. 参加平安的笔试+喜欢古天乐的坚持+想拍自己的电影+人生的无奈
  10. Dreamweaver开发人员工作区 标准工作区的区别
  11. spss软件测试题题库,spss期末考试试题及答案
  12. 基于三星 bada 手机操作系统 的打泡泡游戏
  13. android 仿qq 功能,Android仿QQ、新浪相册的实现
  14. 本机电脑清除DNS缓存+浏览器清除DNS缓存
  15. 工作流开源系统--DRAKE
  16. Gson解析空字符串异常的处理
  17. 轨迹规划 trajectory planning
  18. Proxy和Reflect详解
  19. 阿里云服务器通用算力u1性能测评CPU处理器网络PPS
  20. java 分班_CoreJava分班测试试卷答案

热门文章

  1. Centos7修改IP地址
  2. 复现SCI图表-ggplot做花瓣图
  3. 委托 和 事件 总括:
  4. 离散数学2:命题逻辑的推理
  5. 前端模板template
  6. 最新win10系统激活教程
  7. 2022年NPS基准:NPS分数达到多少算好?
  8. 质谱的工作原理及发展史
  9. html如何转换为opml,使用并解析 OPML 格式的订阅列表来转移自己的 RSS 订阅(解析篇)...
  10. Word导出PDF图片模糊、失真 解决办法