练习 ~黑马程序员匠心之作-第二阶段实战-P72~P83-通讯录管理系统
黑马程序员匠心之作|C++教程从0到1入门编程
关于P72~P83-练习-通讯录管理系统
- 1、系统功能介绍
- 2、创建项目
- 3、菜单功能
- 4、退出功能实现
- 5、添加联系人-结构体设计
- 6、添加联系人-功能实现
- 7、显示联系人
- 8、删除联系人-检测联系人是否存在
- 9、删除联系人-功能实现
- 10、查找联系人
- 11、修改联系人
- 12、清空联系人
- 至此,通讯录管理系统完成,后面部分非课程内,是本人尝试所得
- 13、项目发布、打包成可安装部署的应用程序
- 14、通讯录管理系统Demo的安装
- 15、项目资源及应用程序资源
1、系统功能介绍
系统需求:
通讯录是一个可以记录亲人、好友信息的工具。本教程主要利用C++来实现一个通讯录管理系统系统中需实现的功能如下:
1、添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记 1000人
2、显示联系人:显示通讯录中所有联系人信息
3、删除联系人:按照姓名进行删除指定联系人
4、查找联系人:按照姓名查看指定联系人信息
5、修改联系人:按照姓名重新修改指定联系人
6、清空联系人:清空通讯录中所有信息
7、退出通讯录:退出当前使用的通讯录
2、创建项目
打开vs之后,点击创建新项目,创建新的c++项目。
3、菜单功能
菜单界面效果如下:
步骤:
1、封装函数显示该界面,如:void showMenu()
2、在main函数中调用封装好的函数
#include<iostream>
using namespace std;//1、封装函数显示该界面,如:`void showMenu()`
//菜单界面
void showMenu()
{cout << "*************************" << endl;cout << "***** 1、添加联系人 *****"<< endl;cout << "***** 2、显示联系人 *****" << endl;cout << "***** 3、删除联系人 *****" << endl;cout << "***** 4、查找联系人 *****" << endl;cout << "***** 5、修改联系人 *****" << endl;cout << "***** 6、清空联系人 *****" << endl;cout << "***** 0、退出通讯录 *****" << endl;cout << "*************************" << endl;
}int main()
{ //2、在main函数中调用封装好的函数//菜单调用showMenu();system("pause");return 0;
}
4、退出功能实现
思路:根据用户不同的选择,进入不同功能,可以选择switch分支结构,将整个框架进行搭建。
当用户选择0的时候,执行退出,选择其他先不做操作,也不会退出程序。
#include<iostream>
using namespace std;//菜单界面
void showMenu()
{cout << "*************************" << endl;cout << "***** 1、添加联系人 *****"<< endl;cout << "***** 2、显示联系人 *****" << endl;cout << "***** 3、删除联系人 *****" << endl;cout << "***** 4、查找联系人 *****" << endl;cout << "***** 5、修改联系人 *****" << endl;cout << "***** 6、清空联系人 *****" << endl;cout << "***** 0、退出通讯录 *****" << endl;cout << "*************************" << endl;
}int main()
{ int select = 0;//创建用户选择输入的变量while (true){//菜单调用showMenu();cin >> select;switch (select){case 1://1、添加联系人 break;case 2://2、显示联系人break;case 3://3、删除联系人break;case 4://4、查找联系人break;case 5://5、修改联系人break;case 6://6、清空联系人break;case 0://0、退出通讯录cout << "欢迎下次使用!" << endl;system("pause");return 0;break;default:break;}}system("pause");return 0;
}
while()的作用:
没加之前,输入1~6都会显示“请按任意键继续……”,是由于最结尾处的system("pause");return 0;
。
加入后,只有在输入0时,才会显示“请按任意键继续……”,且按后退出;按其他键仍旧显示菜单目录。
5、添加联系人-结构体设计
添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记 1000人
实现步骤:
1、设计联系人结构体
2、设计通讯录结构体
3、main函数中创建通讯录
4、封装添加联系人函数
5、测试添加联系人功能
#define MAX 1000 //最大人数
//联系人结构体
//信息包括(姓名、性别、年龄、联系电话、家庭住址)
struct person
{string m_Name;//姓名int m_Sex;//性别:1男 2女int m_Age;//年龄string m_Phone;//联系电话string m_Addr;//
};//通讯录结构体
struct Addressbooks
{struct person personArry[MAX]; //通讯录中保存的联系人数组int m_Size;//通讯录中人员个数
};
6、添加联系人-功能实现
实现步骤:
1、设计联系人结构体
2、设计通讯录结构体
3、main函数中创建通讯录
4、封装添加联系人函数
5、测试添加联系人功能
//main函数起始位置添加://创建通讯录结构体变量struct Addressbooks abs;//初始化通讯录中当前人员个数abs.m_Size = 0;
//封装添加联系人函数
//判断通讯录是否已满,满了不再添加,未满情况将联系人信息逐个加入到通讯录
//添加联系人函数
void addPerson(struct Addressbooks * abs)
{//判断通讯录是否已满,满了就不再添加if (abs->m_Size == MAX){cout << "通讯录已满,无法添加!" << endl;return ;}else{//添加具体联系人//姓名string name;cout << "请输入姓名:"<< endl;cin >> name;abs->personArry[abs->m_Size].m_Name = name;//性别int sex = 0;cout << "请输入性别:" << endl;cout << "1 --- 男:" << endl;cout << "2 --- 女:" << endl;cin >> sex;//输入对了,退出循环//输入错了,一直输入while (true){//cin >> sex;//错误位置,加在这里需要输入两次if (sex == 1 || sex == 2){abs->personArry[abs->m_Size].m_Sex = sex;break; //输入对了,存后退出}cout << "输入错误,请重新输入性别" << endl;cin >> sex;//正确位置,输入的不对就一直输}//年龄int age = 0;cout << "请输入年龄:" << endl;cin >> age;while (true){//cin >> sex;//错误位置,加在这里需要输入两次if (age > 0 && age < 150){abs->personArry[abs->m_Size].m_Age = age;break; //输入对了,存后退出}cout << "输入错误,请重新输入年龄" << endl;cin >> age;//正确位置,输入的不对就一直输}//电话string phone;cout << "请输入电话:" << endl;cin >> phone;abs->personArry[abs->m_Size].m_Phone = phone;//住址string address;cout << "请输入住址:" << endl;cin >> address;abs->personArry[abs->m_Size].m_Addr = address;//更新通讯录人数abs->m_Size++;cout << "添加成功" << endl;system("pause");//请按任意键继续system("cls");//清屏操作}
}
//main函数switch (select)中case 1变为:case 1://1、添加联系人 //addPerson(abs); //值传递,不改变实参,无法增加addPerson(&abs);//利用地址传递,可以修改实参break;
清屏操作后,返回主菜单。
7、显示联系人
步骤:
1、封装显示联系人函数
2、测试显示联系人功能
//显示所有联系人函数
void showPerson(struct Addressbooks * abs)
{//判断通讯录中是否为0//如果为0,提示记录为空//如果不为0,显示记录的联系人信息if (abs->m_Size == 0){cout << "当前的记录为空" << endl;}else{for (int i = 0;i < abs->m_Size;i++){cout << "姓名:" << abs->personArry[i].m_Name << "\t"<< "性别:" << (abs->personArry[i].m_Sex == 1 ? "男":"女" )<< "\t"<< "年龄:" << abs->personArry[i].m_Age << "\t"<< "联系电话:" << abs->personArry[i].m_Phone << "\t"<< "家庭地址:" << abs->personArry[i].m_Addr << endl;}}system("pause");//请按任意键继续system("cls");//清屏操作
}
//main函数switch (select)中case 2变为:case 2://2、显示联系人showPerson(&abs);break;
8、删除联系人-检测联系人是否存在
步骤:
1、封装检测联系人是否存在
2、封装删除联系人函数
3、测试删除联系人功能
设计思路:
删除联系人前,我们需要先判断用户输入的联系人是否存在,如果存在删除,不存在提示用户没有要删除的联系人。因此,我们可以把检测联系人是否存在封装成一个函数中,如果存在,返回联系人在通讯录中的位置,不存在返回-1。
//检测联系人是否存在
//如果存在,返回联系人所在数组具体位置;如果不存在,返回-1
int isExist(struct Addressbooks * abs,string name)
{for(int i=0;i<abs->m_Size;i++){//找到用户输入的姓名了if (abs->personArry[i].m_Name==name){ return i;//找到了,返回这个人在数组中的下标编号}}return -1;//如果遍历后,没找到用户输入的姓名,返回-1system("pause");//请按任意键继续system("cls");//清屏操作
}
//main函数switch (select)中case 3变为:
case 3://3、删除联系人{ //不加大括号,switch就会底下有红色波浪线cout << "请输入删除联系人姓名:" << endl;string name;cin >> name;if (isExist(&abs, name) == -1){cout << "查无此人" << endl;}else{cout << "找到了" << endl;}}break;
注意:如果不把case3中break前代码用{}括起来,switch底下有红色波浪线,因为代码过长。
9、删除联系人-功能实现
步骤:
1、封装检测联系人是否存在
2、封装删除联系人函数
3、测试删除联系人功能
根据用户输入的联系人判断通讯录中是否有人
查找到进行删除,并提示删除成功
查不到提示查无此人
//删除指定联系人
void delectPerson(struct Addressbooks * abs)
{cout << "请输入删除联系人姓名:" << endl;string name;cin >> name;int ret = isExist(abs, name);if (ret == -1){cout << "查无此人" << endl;}else{ //查到此人,进行删除操作int i = ret;//要删除i,将i后所有数据进行前移,并让通讯录中人员个数-1for (;i < abs->m_Size;i++){//数据前移abs->personArry[i].m_Name = abs->personArry[i + 1].m_Name;abs->personArry[i].m_Sex = abs->personArry[i + 1].m_Sex;abs->personArry[i].m_Age = abs->personArry[i + 1].m_Age;abs->personArry[i].m_Phone = abs->personArry[i + 1].m_Phone;abs->personArry[i].m_Addr = abs->personArry[i + 1].m_Addr;}abs->m_Size--;//更新通讯录中人员数cout << "删除成功" << endl;}system("pause");system("cls");
}
//main函数switch (select)中case 3变为:
case 3://3、删除联系人//{ //不加大括号,switch就会底下有红色波浪线// cout << "请输入删除联系人姓名:" << endl;// string name;// cin >> name;// if (isExist(&abs, name) == -1)// {// cout << "查无此人" << endl;// }// else// {// cout << "找到了" << endl;// }//}delectPerson( &abs);break;
10、查找联系人
步骤:
1、封装查找联系人函数
2、测试查找指定联系人
//查找联系人
void findPerson(struct Addressbooks * abs)
{cout << "请输入您想要查找的联系人:" << endl;string name;cin >> name;int ret = isExist(abs, name);if (ret == -1){cout << "查无此人" << endl;}else{ //查到此人,进行显示操作int i = ret;cout << "姓名:"<< abs->personArry[i].m_Name <<"\t";cout << "性别:" << abs->personArry[i].m_Sex << "\t";cout << "年龄:" << abs->personArry[i].m_Age << "\t";cout << "联系方式:" << abs->personArry[i].m_Phone << "\t";cout << "地址:" << abs->personArry[i].m_Addr << endl;}system("pause");system("cls");
}
//main函数switch (select)中case 4变为:
case 4://4、查找联系人findPerson(&abs);break;
注意:功能2显示所有联系人,功能4只显示你查找的联系人
11、修改联系人
步骤:
1、封装修改联系人函数
2、测试修改指定联系人
//修改联系人
void modifyPerson(struct Addressbooks *abs)
{cout << "请输入您想要修改的联系人:" << endl;string name;cin >> name;int ret = isExist(abs, name);if (ret == -1){cout << "查无此人" << endl;}else{ //查到此人,进行修改操作//姓名int i = ret;string name;cout << "请输入姓名:" << endl;cin >> name;abs->personArry[i].m_Name = name;//性别int sex = 0;cout << "请输入性别:" << endl;cout << "1 --- 男:" << endl;cout << "2 --- 女:" << endl;cin >> sex;//输入对了,退出循环//输入错了,一直输入while (true){//cin >> sex;//错误位置,加在这里需要输入两次if (sex == 1 || sex == 2){abs->personArry[i].m_Sex = sex;break; //输入对了,存后退出}cout << "输入错误,请重新输入性别" << endl;cin >> sex;//正确位置,输入的不对就一直输}//年龄int age = 0;cout << "请输入年龄:" << endl;cin >> age;while (true){//cin >> sex;//错误位置,加在这里需要输入两次if (age > 0 && age < 150){abs->personArry[i].m_Age = age;break; //输入对了,存后退出}cout << "输入错误,请重新输入年龄" << endl;cin >> age;//正确位置,输入的不对就一直输}//电话string phone;cout << "请输入电话:" << endl;cin >> phone;abs->personArry[i].m_Phone = phone;//住址string address;cout << "请输入住址:" << endl;cin >> address;abs->personArry[i].m_Addr = address;cout << "修改成功" << endl;}system("pause");system("cls");}
//main函数switch (select)中case 5变为:
case 5://5、修改联系人modifyPerson(&abs);break;
12、清空联系人
步骤:
1、封装清空联系人函数
2、测试清空指定联系人
思路:
将通讯录中所有联系人信息删除,只要将通讯录记录人数置为0,做逻辑清空即可。
//删除所有联系人
void cleanPerson(struct Addressbooks *abs)
{cout << "是否确认清空?" << endl;cout << "1 --- 是" << endl;cout << "2 --- 否" << endl;int a;cin >> a;if (a == 1){abs->m_Size = 0;//将当前记录联系人数量置为0,做逻辑上的清空操作cout << "通讯录已清空" << endl;}system("pause");system("cls");
}
//main函数switch (select)中case 6变为:
case 6://6、清空联系人cleanPerson(&abs);break;
至此,通讯录管理系统完成,后面部分非课程内,是本人尝试所得
13、项目发布、打包成可安装部署的应用程序
1、在要通讯录管理系统项目的解决方案 右键→添加→ 新建项目
2、安装Visual Studio Installer (如果已经存在 Visual Studio Installer,直接跳往第3步)
左侧安装和部署底下没有Visual Studio Installer 说明没有安装打包插件,如果按确定的话会弹出以下界面
安装打包插件:Microsoft Visual Studio 2015 Installer Projects
方法1:点击链接Microsoft Visual Studio 2015 Installer Projects,进行下载
方法2:工具 --> 扩展和更新 --> 联机,搜索Microsoft Visual Studio 2017 Installer Projects
下载并安装,安装过程简单,不再详述
安装好以后,重启vs2017
3、回到我们的新建项目,选择其他项目类型 --> Visual Studio Installer --> Setup Project --> 输入Setup --> 确定
4、在出现的界面中,右键Application Folder → Add → 项目输出,然后选择 主输出 点击确定
5、右键【主输出from 通讯录管理系统】 选择 Create Shortcut to… 生成快捷方式。
7、修改快捷方式的名称为通讯录管理系统Demo,并拖入 User‘s Desktop
8、右键 setup project,选择生成
9、生成成功后,打开所在文件夹就可以看到生成后的安装文件
10、在通讯录管理系统Demo\Debug中可以看到
一个exe,一个msi。
msi是重点,可直接安装在Windows中。
exe是需要调用msi文件的。
14、通讯录管理系统Demo的安装
1、在通讯录管理系统Demo\Debug中可以看到,一个exe,一个msi。双击.msi文件进行安装
2、点击下一步
3、选择安装位置
4、确认安装
5、安装成功后桌面显示图标
6、双击图标可进行操作
15、项目资源及应用程序资源
1、通讯录管理系统-项目资源
链接:https://pan.baidu.com/s/19HNO7kWwXEjjG5zzxbXSpA
提取码:bm2e
2、通讯录管理系统Demo-可安装部署的应用程序
链接:https://pan.baidu.com/s/1S44-1Ujl_2D1MmFclKILaA
提取码:v1zm
3、通讯录管理系统-源码
#include<iostream>
#include<string>
using namespace std;#define MAX 1000 //最大人数
//联系人结构体
//信息包括(姓名、性别、年龄、联系电话、家庭住址)
struct person
{string m_Name;//姓名int m_Sex;//性别:1男 2女int m_Age;//年龄string m_Phone;//联系电话string m_Addr;//
};//通讯录结构体
struct Addressbooks
{struct person personArry[MAX]; //通讯录中保存的联系人数组int m_Size;//通讯录中人员个数
};//1、添加联系人
void addPerson(struct Addressbooks * abs)
{//判断通讯录是否已满,满了就不再添加if (abs->m_Size == MAX){cout << "通讯录已满,无法添加!" << endl;return ;}else{//添加具体联系人//姓名string name;cout << "请输入姓名:"<< endl;cin >> name;abs->personArry[abs->m_Size].m_Name = name;//性别int sex = 0;cout << "请输入性别:" << endl;cout << "1 --- 男:" << endl;cout << "2 --- 女:" << endl;cin >> sex;//输入对了,退出循环//输入错了,一直输入while (true){//cin >> sex;//错误位置,加在这里需要输入两次if (sex == 1 || sex == 2){abs->personArry[abs->m_Size].m_Sex = sex;break; //输入对了,存后退出}cout << "输入错误,请重新输入性别" << endl;cin >> sex;//正确位置,输入的不对就一直输}//年龄int age = 0;cout << "请输入年龄:" << endl;cin >> age;while (true){//cin >> sex;//错误位置,加在这里需要输入两次if (age > 0 && age < 150){abs->personArry[abs->m_Size].m_Age = age;break; //输入对了,存后退出}cout << "输入错误,请重新输入年龄" << endl;cin >> age;//正确位置,输入的不对就一直输}//电话string phone;cout << "请输入电话:" << endl;cin >> phone;abs->personArry[abs->m_Size].m_Phone = phone;//住址string address;cout << "请输入住址:" << endl;cin >> address;abs->personArry[abs->m_Size].m_Addr = address;//更新通讯录人数abs->m_Size++;cout << "添加成功" << endl;}system("pause");//请按任意键继续system("cls");//清屏操作
}
//2、显示所有联系人
void showPerson(struct Addressbooks * abs)
{//判断通讯录中是否为0//如果为0,提示记录为空//如果不为0,显示记录的联系人信息if (abs->m_Size == 0){cout << "当前的记录为空" << endl;}else{for (int i = 0;i < abs->m_Size;i++){cout << "姓名:" << abs->personArry[i].m_Name << "\t"<< "性别:" << (abs->personArry[i].m_Sex == 1 ? "男":"女" )<< "\t"<< "年龄:" << abs->personArry[i].m_Age << "\t"<< "联系电话:" << abs->personArry[i].m_Phone << "\t"<< "家庭地址:" << abs->personArry[i].m_Addr << endl;}}system("pause");//请按任意键继续system("cls");//清屏操作
}
//检测联系人是否存在
//如果存在,返回联系人所在数组具体位置;如果不存在,返回-1
int isExist(struct Addressbooks * abs,string name)
{for(int i=0;i<abs->m_Size;i++){//找到用户输入的姓名了if (abs->personArry[i].m_Name==name){ return i;//找到了,返回这个人在数组中的下标编号}}return -1;//如果遍历后,没找到用户输入的姓名,返回-1system("pause");//请按任意键继续system("cls");//清屏操作
}
//3、删除指定联系人
void delectPerson(struct Addressbooks * abs)
{cout << "请输入删除联系人姓名:" << endl;string name;cin >> name;int ret = isExist(abs, name);if (ret == -1){cout << "查无此人" << endl;}else{ //查到此人,进行删除操作int i = ret;//要删除i,将i后所有数据进行前移,并让通讯录中人员个数-1for (;i < abs->m_Size;i++){//数据前移abs->personArry[i].m_Name = abs->personArry[i + 1].m_Name;abs->personArry[i].m_Sex = abs->personArry[i + 1].m_Sex;abs->personArry[i].m_Age = abs->personArry[i + 1].m_Age;abs->personArry[i].m_Phone = abs->personArry[i + 1].m_Phone;abs->personArry[i].m_Addr = abs->personArry[i + 1].m_Addr;}abs->m_Size--;//更新通讯录中人员数cout << "删除成功" << endl;}system("pause");system("cls");
}
//4、查找联系人
void findPerson(struct Addressbooks * abs)
{cout << "请输入您想要查找的联系人:" << endl;string name;cin >> name;int ret = isExist(abs, name);if (ret == -1){cout << "查无此人" << endl;}else{ //查到此人,进行显示操作int i = ret;cout << "姓名:"<< abs->personArry[i].m_Name <<"\t";cout << "性别:" << abs->personArry[i].m_Sex << "\t";cout << "年龄:" << abs->personArry[i].m_Age << "\t";cout << "联系方式:" << abs->personArry[i].m_Phone << "\t";cout << "地址:" << abs->personArry[i].m_Addr << endl;}//按任意键清屏system("pause");system("cls");
}
//5、修改联系人
void modifyPerson(struct Addressbooks *abs)
{cout << "请输入您想要修改的联系人:" << endl;string name;cin >> name;int ret = isExist(abs, name);if (ret == -1){cout << "查无此人" << endl;}else{ //查到此人,进行修改操作//姓名int i = ret;string name;cout << "请输入姓名:" << endl;cin >> name;abs->personArry[i].m_Name = name;//性别int sex = 0;cout << "请输入性别:" << endl;cout << "1 --- 男:" << endl;cout << "2 --- 女:" << endl;cin >> sex;//输入对了,退出循环//输入错了,一直输入while (true){//cin >> sex;//错误位置,加在这里需要输入两次if (sex == 1 || sex == 2){abs->personArry[i].m_Sex = sex;break; //输入对了,存后退出}cout << "输入错误,请重新输入性别" << endl;cin >> sex;//正确位置,输入的不对就一直输}//年龄int age = 0;cout << "请输入年龄:" << endl;cin >> age;while (true){//cin >> sex;//错误位置,加在这里需要输入两次if (age > 0 && age < 150){abs->personArry[i].m_Age = age;break; //输入对了,存后退出}cout << "输入错误,请重新输入年龄" << endl;cin >> age;//正确位置,输入的不对就一直输}//电话string phone;cout << "请输入电话:" << endl;cin >> phone;abs->personArry[i].m_Phone = phone;//住址string address;cout << "请输入住址:" << endl;cin >> address;abs->personArry[i].m_Addr = address;cout << "修改成功" << endl;}system("pause");system("cls");}
//6、删除所有联系人
void cleanPerson(struct Addressbooks *abs)
{cout << "是否确认清空?" << endl;cout << "1 --- 是" << endl;cout << "2 --- 否" << endl;int a;cin >> a;if (a == 1){abs->m_Size = 0;//将当前记录联系人数量置为0,做逻辑上的清空操作cout << "通讯录已清空" << endl;}system("pause");system("cls");
}//菜单界面
void showMenu()
{cout << "*************************" << endl;cout << "***** 1、添加联系人 *****"<< endl;cout << "***** 2、显示联系人 *****" << endl;cout << "***** 3、删除联系人 *****" << endl;cout << "***** 4、查找联系人 *****" << endl;cout << "***** 5、修改联系人 *****" << endl;cout << "***** 6、清空联系人 *****" << endl;cout << "***** 0、退出通讯录 *****" << endl;cout << "*************************" << endl;
}int main()
{ //创建通讯录结构体变量struct Addressbooks abs;//初始化通讯录中当前人员个数abs.m_Size = 0;int select = 0;//创建用户选择输入的变量while (true){//菜单调用showMenu();cin >> select;switch (select){case 1://1、添加联系人 //addPerson(abs); //值传递,不改变实参,无法增加addPerson(&abs);//利用地址传递,可以修改实参break;case 2://2、显示联系人showPerson(&abs);break;case 3://3、删除联系人//{ //不加大括号,switch就会底下有红色波浪线// cout << "请输入删除联系人姓名:" << endl;// string name;// cin >> name;// if (isExist(&abs, name) == -1)// {// cout << "查无此人" << endl;// }// else// {// cout << "找到了" << endl;// }//}delectPerson( &abs);break;case 4://4、查找联系人findPerson(&abs);break;case 5://5、修改联系人modifyPerson(&abs);break;case 6://6、清空联系人cleanPerson(&abs);break;case 0://0、退出通讯录cout << "欢迎下次使用!" << endl;system("pause");return 0;break;default:break;}}system("pause");return 0;
}
练习 ~黑马程序员匠心之作-第二阶段实战-P72~P83-通讯录管理系统相关推荐
- 黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难——讲义
基础课部分讲义 核心课部分讲义 提高课部分讲义 黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难--视频链接
- 黑马程序员匠心之作|C++教程从0到1入门编程(60 指针-const修饰指针61 指针-指针和数组62 指针-指针和函数63 指针-指针配合数组和函数的案例)
黑马程序员匠心之作|C++教程从0到1入门编程(60 指针-const修饰指针61 指针-指针和数组62 指针-指针和函数63 指针-指针配合数组和函数的案例) 一.60 指针-const修饰指针 二 ...
- 黑马程序员匠心之作|C++教程从0到1入门编程-c++核心编程
内存四大区域: 运行前: 全局区(存放全局变量,静态变量,常量) ,常量区中存放 const修饰的全局常量和字符串常量,静态变量为static修饰的变量 代码区(存放二进制机器指令,特点:共享与只读) ...
- 黑马程序员匠心之作|C++教程从0到1入门编程(基础)
1 C++初识 1.1 第一个C++程序 编写一个C++程序总共分为4个步骤: 创建项目 创建文件 编写代码 运行程序 1.1.1 C++程序通用模块 #include <iostream> ...
- 【黑马程序员匠心之作|C++教程】C++基础入门、通讯录管理系统
文章目录 C++基础入门 1 C++初识 1.2 注释 1.3变量 1.4 常量 1.5 关键字 1.6 标识符命名规则 2 数据类型 2.1 整形 2.2 `sizeof` 关键字 2.3 实型(浮 ...
- 《黑马程序员2023新版黑马程序员大数据入门到实战教程,大数据开发必会的Hadoop、Hive,云平台实战项目》学习笔记总目录
本文是对<黑马程序员新版大数据入门到实战教程>所有知识点的笔记进行总结分类. 学习视频:黑马程序员新版大数据 学习时总结的学习笔记以及思维导图会在后续更新,请敬请期待. 前言:配置三台虚拟 ...
- day30 | 黑马程序员Java全程笔记 | 第二阶段MySQL高级 JDBC
01.反馈回顾 事务: ★ 概述: 逻辑上的一组操作,组成这组操作的各个单元要么同时成功,要么同时失败. 事务是一个最小的执行单元. mysql中的事务控制: 手动事务: 需要手动开启,提交,回滚开启 ...
- day29 | 黑马程序员Java全程笔记 | 第二阶段MySQL高级事务-索引-视图-触发器-存储过程
目录 01.反馈 02.回顾 03.并发访问MySQL-问题概述 并发访问的问题 04.并发访问MySQL-问题演示 05.并发访问MySQL-read-committed解决脏读问题 06.并发访问 ...
- 【黑马程序员 C++教程从0到1入门编程】【笔记3】C++核心编程(内存分区模型、引用、函数提高)
黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难 文章目录 1 内存分区模型 1.1 程序运行前 1.2 程序运行后(手动开辟内存:c语言malloc,c++new) 1.3 new操作 ...
最新文章
- 2022-2028年中国电压力锅市场投资分析及前景预测报告
- Visual Studio Code连接SQL SERVER 2019
- 分享实用监控脚本:使用Shell检查进程是否存在
- Markdown 基础学习
- 和可被 K 整除的子数组
- 人工智能和计算机软件,人工智能在计算机软件方面有什么应用?
- 2021-08-26
- mysql 自定义函数教程_MySQL自定义函数
- 2008.10 井冈山-金秋 【律动音符篇】
- 【论文笔记】Convolutional Neural Networks for Sentence Classification
- f5源站获取http/https访问的真实源IP解决方案
- Db4o 新建、查询、更新、删除操作
- excel计算机考试题库,2016年职称计算机考试题库EXCEL题库及答案
- 不带脏字的英文骂人法
- 经典Bug永流传---每周一“虫”(二十一)
- C语言学习--01 认识数据类型
- IPhone多视图切换
- 神州云服务平台(型号:DCC-CRL1000)基本配置教学视频
- Halcon 图形窗口显示文本
- C#窗体Click事件没反应