黑马程序员匠心之作|C++教程从0到1入门编程
学习笔记
目标:对C++有初步了解,能够有基础编程能力
案例:通讯录管理系统
功能:
void showMenu() {
cout << "***************************" << endl;
cout << "通讯录" << "\n 1. 添加联系人" << "\n 2. 显示联系人" << "\n 3. 删除联系人(按照姓名方式删除)" << "\n 4. 查找联系人(按照姓名查看)" << "\n 5. 修改联系人(按照姓名修改)" << "\n 6. 清空联系人(清空所有联系人)" << "\n 0. 退出通讯录" << "\n请输入数字使用对应功能" << endl;
cout << "***************************" << endl;
}
int main() {
int choose = 0;
while(true) {
showMenu();
cin >> choose;
switch (choose) {
case(1):
cout << "您选择的是1.添加联系人" << endl;
break;
case(2):
cout << "您选择的是2.显示联系人" << endl;
break;
case(3):
cout << "您选择的是3.删除联系人" << endl;
break;
case(4):
cout << "您选择的是4.查找联系人" << endl;
break;
case(5):
cout << "您选择的是5.修改联系人" << endl;
break;
case(6):
cout << "您选择的是6.清空联系人" << endl;
break;
case(0):
cout << "成功退出登录!" << endl;
system("pause");
return 0;
break;
default:
cout << "您输入的有误,请重新输入" << endl;
break;
}
}
}
实现步骤:
struct contact {
string name;
int sex;//1 男 2 女
int age;
string phone;
string address;
};
#define MAX 1000
//设计通讯录结构体
struct AddressBook {
struct contact contactArray[MAX];
int m_Size;//通讯录中人员个数
};
int main() {
//创建通讯录结构体变量
AddressBook abs;
//初始化通讯录中当前的人数个数
abs.m_Size = 0;
int choose = 0;
while(true) {
showMenu();
cin >> choose;
switch (choose) {
case(1):
cout << "您选择的是1.添加联系人" << endl;
addContact(&abs);//利用地址传递可以修改实参
break;
...
}
void addContact(struct AddressBook *abs) {
//判断通讯录是否已满,如果满了不再添加
if (abs->m_Size == MAX) {
cout << "通讯录已满,无法添加" << endl;
}
else {
string addName;
int addSex;
int addAge;
string addPhone;
string addAddress;
//添加具体联系人
//姓名
cout << "请输入联系人姓名:" << endl;
cin >> addName;
abs->contactArray[abs->m_Size].name = addName;
//性别
while (true) {
cout << "请选择性别:1.男 2. 女" << endl;
cin >> addSex;
if (addSex == 1 || addSex == 2) {
abs->contactArray[abs->m_Size].sex = addSex;
break;
}
else {
cout << "您输入有误,请重新输入"<<endl;
}
}
//年龄
cout << "请输入年龄:" << endl;
cin >> addAge;
abs->contactArray[abs->m_Size].age = addAge;
//联系电话
cout << "请输入联系电话:" << endl;
cin >> addPhone;
abs->contactArray[abs->m_Size].phone = addPhone;
//家庭住址
cout << "请输入家庭住址:" << endl;
cin >> addAddress;
abs->contactArray[abs->m_Size].address = addAddress;
//更新通讯录人数
abs->m_Size++;
cout << "添加成功" << endl;
//清屏的操作
system("pause");//请按任意键继续
system("cls");//清屏
}
}
封装显示联系人函数:
思路:判断如果当前通讯录没有联系人,就提示为空,如果大于0,则显示全部信息。
void showContact(struct AddressBook *abs) {
if (abs->m_Size == 0) {
cout << "当前通讯录为空" << endl;
}
else {
for (int i = 0; i < abs->m_Size; i++) {
cout << "姓名:" << abs->contactArray[i].name << "\t";
cout << "性别:" << (abs->contactArray[i].sex ==1 ?"男":"女") << "\t";//三目运算符
cout << "年龄:" << abs->contactArray[i].age << "\t";
cout << "联系电话:" << abs->contactArray[i].phone << "\t";
cout << "家庭住址:" << abs->contactArray[i].address<< endl;
}
}
//清屏的操作
system("pause");//请按任意键继续
system("cls");//清屏
}
实现步骤
//检测联系人是否存在
int isExist(struct AddressBook *abs,string inputName) {
for (int i = 0; i < abs->m_Size; i++) {
//找到
if (abs->contactArray[i].name == inputName) {
return i;//返回在数组中的编号
}
}
return -1;
}
检测代码:
int main() {
...
case(3):
{//case代码太长会报错,括起来就不会了
cout << "您选择的是3.删除联系人" << endl;
cout << "请输入删除联系人的姓名:" << endl;
string inputName;
cin >> inputName;
if (isExist(&abs, inputName) == -1) {
cout << "查无此人" << endl;
}
else {
cout << "找到此人" << endl;
}
break;
}
...
}
//删除指定联系人
void deleteContact(struct AddressBook *abs) {
cout << "请输入删除联系人的姓名:" << endl;
string inputName;
cin >> inputName;
//ret == -1;未查到
int ret = isExist(abs, inputName);
if (ret != -1) {
//删除操作
for (int i = ret; i < abs->m_Size; i++) {
//数据前移
abs->contactArray[i] = abs->contactArray[i + 1];
}
abs->m_Size--;//更新通讯录中人员数
cout << "删除成功" << endl;
}
else {
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
//查找指定联系人信息
void findContact(struct AddressBook *abs) {
cout << "请输入您要查找的联系人:" << endl;
string inputName;
cin >> inputName;
//ret == -1;未查到
int ret = isExist(abs, inputName);
if (ret != -1) {
cout << "姓名:" << abs->contactArray[ret].name << "\t";
cout << "性别:" << (abs->contactArray[ret].sex == 1 ? "男" : "女") << "\t";//三目运算符
cout << "年龄:" << abs->contactArray[ret].age << "\t";
cout << "联系电话:" << abs->contactArray[ret].phone << "\t";
cout << "家庭住址:" << abs->contactArray[ret].address << endl;
}
else {
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
//修改指定联系人
void modifyContact(struct AddressBook *abs) {
cout << "请输入您要修改的联系人:" << endl;
string inputName;
cin >> inputName;
//ret == -1;未查到
int ret = isExist(abs, inputName);
if (ret != -1) {
cout << "您查找联系人的姓名:" << abs->contactArray[ret].name << endl;
cout << "请输入修改后的姓名:" << endl;
string name;
cin >> name;
abs->contactArray[ret].name = name;
cout << "您查找联系人的性别:" << (abs->contactArray[ret].sex == 1 ? "男" : "女") << endl;;//三目运算符
while (true) {
cout << "请输入修改后的性别,1.男 2.女:" << endl;;
int sex;
cin >> sex;
if (sex == 1 || sex == 2) {
abs->contactArray[ret].sex = sex;
break;
}
else {
cout << "您输入有误,请重新输入" << endl;
}
}
cout << "您查找联系人的年龄:" << abs->contactArray[ret].age << endl;
cout << "请输入修改后的年龄:" << endl;
int age;
cin >> age;
abs->contactArray[ret].age = age;
cout << "您查找联系人的联系电话:" << abs->contactArray[ret].phone << endl;
cout << "请输入修改后的联系电话:" << endl;
string phone;
cin >> phone;
abs->contactArray[ret].phone = phone;
cout << "您查找联系人的家庭住址:" << abs->contactArray[ret].address << endl;
cout << "请输入修改后的家庭住址:" << endl;
int address;
cin >> address;
abs->contactArray[ret].address = address;
cout << "修改成功!" << endl;
}
else {
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
实现思路:将通讯录记录的联系人数量置为0,做逻辑清空即可
//清空所有联系人
void cleanContact(struct AddressBook *abs) {
abs->m_Size = 0;
cout << "通讯录已清空" << endl;
system("pause");
system("cls");
}
#include
using namespace std;
#include
#define MAX 1000
//1. 添加联系人(姓名,性别,年龄,联系电话,家庭住址),最多1000人
//2. 显示联系人(所有信息)
//3. 删除联系人(按照姓名方式删除)
//4. 查找联系人(按照姓名查看)
//5. 修改联系人(按照姓名修改)
//6. 清空联系人(清空所有联系人)
//7. 退出通讯录
//菜单功能
void showMenu() {
cout << "***************************" << endl;
cout << "通讯录" << "\n 1. 添加联系人" << "\n 2. 显示联系人" << "\n 3. 删除联系人(按照姓名方式删除)" << "\n 4. 查找联系人(按照姓名查看)" << "\n 5. 修改联系人(按照姓名修改)" << "\n 6. 清空联系人(清空所有联系人)" << "\n 0. 退出通讯录" << "\n请输入数字使用对应功能" << endl;
cout << "***************************" << endl;
}
//设计联系人结构体
struct contact {
string name;
int sex;
int age;
string phone;
string address;
};
//设计通讯录结构体
struct AddressBook {
struct contact contactArray[MAX];
int m_Size;//通讯录中人员个数
};
void addContact(struct AddressBook *abs) {
//判断通讯录是否已满,如果满了不再添加
if (abs->m_Size == MAX) {
cout << "通讯录已满,无法添加" << endl;
}
else {
string addName;
int addSex;
int addAge;
string addPhone;
string addAddress;
//添加具体联系人
//姓名
cout << "请输入联系人姓名:" << endl;
cin >> addName;
abs->contactArray[abs->m_Size].name = addName;
//性别
while (true) {
cout << "请选择性别:1.男 2. 女" << endl;
cin >> addSex;
if (addSex == 1 || addSex == 2) {
abs->contactArray[abs->m_Size].sex = addSex;
break;
}
else {
cout << "您输入有误,请重新输入"<<endl;
}
}
//年龄
cout << "请输入年龄:" << endl;
cin >> addAge;
abs->contactArray[abs->m_Size].age = addAge;
//联系电话
cout << "请输入联系电话:" << endl;
cin >> addPhone;
abs->contactArray[abs->m_Size].phone = addPhone;
//家庭住址
cout << "请输入家庭住址:" << endl;
cin >> addAddress;
abs->contactArray[abs->m_Size].address = addAddress;
//更新通讯录人数
abs->m_Size++;;
cout << "添加成功" << endl;
//清屏的操作
system("pause");//请按任意键继续
system("cls");//清屏
}
}
void showContact(struct AddressBook *abs) {
if (abs->m_Size == 0) {
cout << "当前通讯录为空" << endl;
}
else {
for (int i = 0; i < abs->m_Size; i++) {
cout << "姓名:" << abs->contactArray[i].name << "\t";
cout << "性别:" << (abs->contactArray[i].sex ==1 ?"男":"女") << "\t";//三目运算符
cout << "年龄:" << abs->contactArray[i].age << "\t";
cout << "联系电话:" << abs->contactArray[i].phone << "\t";
cout << "家庭住址:" << abs->contactArray[i].address<< endl;
}
}
//清屏的操作
system("pause");//请按任意键继续
system("cls");//清屏
}
//检测联系人是否存在
int isExist(struct AddressBook *abs,string inputName) {
for (int i = 0; i < abs->m_Size; i++) {
//找到
if (abs->contactArray[i].name == inputName) {
return i;//返回在数组中的编号
}
}
return -1;
}
//删除指定联系人
void deleteContact(struct AddressBook *abs) {
cout << "请输入删除联系人的姓名:" << endl;
string inputName;
cin >> inputName;
//ret == -1;未查到
int ret = isExist(abs, inputName);
if (ret != -1) {
//删除操作
for (int i = ret; i < abs->m_Size; i++) {
//数据前移
abs->contactArray[i] = abs->contactArray[i + 1];
}
abs->m_Size--;//更新通讯录中人员数
cout << "删除成功" << endl;
}
else {
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
//查找指定联系人信息
void findContact(struct AddressBook *abs) {
cout << "请输入您要查找的联系人:" << endl;
string inputName;
cin >> inputName;
//ret == -1;未查到
int ret = isExist(abs, inputName);
if (ret != -1) {
cout << "姓名:" << abs->contactArray[ret].name << "\t";
cout << "性别:" << (abs->contactArray[ret].sex == 1 ? "男" : "女") << "\t";//三目运算符
cout << "年龄:" << abs->contactArray[ret].age << "\t";
cout << "联系电话:" << abs->contactArray[ret].phone << "\t";
cout << "家庭住址:" << abs->contactArray[ret].address << endl;
}
else {
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
//修改指定联系人
void modifyContact(struct AddressBook *abs) {
cout << "请输入您要修改的联系人:" << endl;
string inputName;
cin >> inputName;
//ret == -1;未查到
int ret = isExist(abs, inputName);
if (ret != -1) {
cout << "您查找联系人的姓名:" << abs->contactArray[ret].name << endl;
cout << "请输入修改后的姓名:" << endl;
string name;
cin >> name;
abs->contactArray[ret].name = name;
cout << "您查找联系人的性别:" << (abs->contactArray[ret].sex == 1 ? "男" : "女") << endl;;//三目运算符
while (true) {
cout << "请输入修改后的性别,1.男 2.女:" << endl;;
int sex;
cin >> sex;
if (sex == 1 || sex == 2) {
abs->contactArray[ret].sex = sex;
break;
}
else {
cout << "您输入有误,请重新输入" << endl;
}
}
cout << "您查找联系人的年龄:" << abs->contactArray[ret].age << endl;
cout << "请输入修改后的年龄:" << endl;
int age;
cin >> age;
abs->contactArray[ret].age = age;
cout << "您查找联系人的联系电话:" << abs->contactArray[ret].phone << endl;
cout << "请输入修改后的联系电话:" << endl;
string phone;
cin >> phone;
abs->contactArray[ret].phone = phone;
cout << "您查找联系人的家庭住址:" << abs->contactArray[ret].address << endl;
cout << "请输入修改后的家庭住址:" << endl;
int address;
cin >> address;
abs->contactArray[ret].address = address;
cout << "修改成功!" << endl;
}
else{
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
void cleanContact(struct AddressBook *abs) {
abs->m_Size = 0;
cout << "通讯录已清空" << endl;
system("pause");
system("cls");
}
int main() {
//创建通讯录结构体变量
AddressBook abs;
//初始化通讯录中当前的人数个数
abs.m_Size = 0;
int choose = 0;
while(true) {
showMenu();
cin >> choose;
switch (choose) {
case(1):
cout << "您选择的是1.添加联系人" << endl;
addContact(&abs);//利用地址传递可以修改实参
break;
case(2):
cout << "您选择的是2.显示联系人" << endl;
showContact(&abs);
break;
case(3):
cout << "您选择的是3.删除联系人" << endl;
deleteContact(&abs);
break;
case(4):
cout << "您选择的是4.查找联系人" << endl;
findContact(&abs);
break;
case(5):
cout << "您选择的是5.修改联系人" << endl;
modifyContact(&abs);
break;
case(6):
cout << "您选择的是6.清空联系人" << endl;
cleanContact(&abs);
break;
case(0):
cout << "成功退出登录!" << endl;
system("pause");
return 0;
break;
default:
cout << "您输入的有误,请重新输入" << endl;
system("pause");
system("cls");
break;
}
}
}
***************************
通讯录
1. 添加联系人
2. 显示联系人
3. 删除联系人(按照姓名方式删除)
4. 查找联系人(按照姓名查看)
5. 修改联系人(按照姓名修改)
6. 清空联系人(清空所有联系人)
0. 退出通讯录
请输入数字使用对应功能
***************************
1
您选择的是1.添加联系人
请输入联系人姓名:
张三
请选择性别:1.男 2. 女
1
请输入年龄:
21
请输入联系电话:
2234738543
请输入家庭住址:
北京
添加成功
请按任意键继续. . .
***************************
通讯录
1. 添加联系人
2. 显示联系人
3. 删除联系人(按照姓名方式删除)
4. 查找联系人(按照姓名查看)
5. 修改联系人(按照姓名修改)
6. 清空联系人(清空所有联系人)
0. 退出通讯录
请输入数字使用对应功能
***************************
1
您选择的是1.添加联系人
请输入联系人姓名:
李四
请选择性别:1.男 2. 女
2
请输入年龄:
32
请输入联系电话:
223728278
请输入家庭住址:
山东
添加成功
请按任意键继续. . .
***************************
通讯录
1. 添加联系人
2. 显示联系人
3. 删除联系人(按照姓名方式删除)
4. 查找联系人(按照姓名查看)
5. 修改联系人(按照姓名修改)
6. 清空联系人(清空所有联系人)
0. 退出通讯录
请输入数字使用对应功能
***************************
2
您选择的是2.显示联系人
姓名:张三 性别:男 年龄:21 联系电话:2234738543 家庭住址:北京
姓名:李四 性别:女 年龄:32 联系电话:223728278 家庭住址:山东
请按任意键继续. . .
***************************
通讯录
1. 添加联系人
2. 显示联系人
3. 删除联系人(按照姓名方式删除)
4. 查找联系人(按照姓名查看)
5. 修改联系人(按照姓名修改)
6. 清空联系人(清空所有联系人)
0. 退出通讯录
请输入数字使用对应功能
***************************
4
您选择的是4.查找联系人
请输入您要查找的联系人:
张三
姓名:张三 性别:男 年龄:21 联系电话:2234738543 家庭住址:北京
请按任意键继续. . .
***************************
通讯录
1. 添加联系人
2. 显示联系人
3. 删除联系人(按照姓名方式删除)
4. 查找联系人(按照姓名查看)
5. 修改联系人(按照姓名修改)
6. 清空联系人(清空所有联系人)
0. 退出通讯录
请输入数字使用对应功能
***************************
5
您选择的是5.修改联系人
请输入您要修改的联系人:
张三
您查找联系人的姓名:张三
请输入修改后的姓名:
张小三
您查找联系人的性别:男
请输入修改后的性别,1.男 2.女:
2
您查找联系人的年龄:21
请输入修改后的年龄:
12
您查找联系人的联系电话:2234738543
请输入修改后的联系电话:
4532450823
您查找联系人的家庭住址:北京
请输入修改后的家庭住址:
上海
修改成功!
请按任意键继续. . .