跟黑马全部学完了之后会把代码存一下csdn。VS2023年9月过期
显示联系人
1.封装显示联系人函数
位置在添加联系人功能后
void showPerson(Addressbooks* abs) {
//判断通讯录中人数是否为0
if (abs->m_Size == 0) {
cout << "通讯录中人数为0" << endl;
}
else {
for (int i = 0; i < abs->m_Size; i++) {
cout << "姓名:" << abs->personArray[i].m_Name << endl;
cout << "年龄:" << abs->personArray[i].m_Age << endl;
cout << "性别:" << abs->personArray[i].m_Sex << endl;
cout << "电话:" << abs->personArray[i].m_Phone << endl;
cout << "住址:" << abs->personArray[i].m_Addr << endl;
}
}
system("pause");
system("cls");
}
在int main函数内
case 2: //显示联系人
showPerson(&abs);
break;
运行之后发现行数过多,所以改成将一个联系人输在一行里:
cout << "姓名:" << abs->personArray[i].m_Name << "\t";
"\t"是制表符,一次空出8个单位的位置
修改性别显示:
cout << "性别:" << (abs->personArray[i].m_Sex == 1 ? "男":"女") << "\t";
二目运算符
仅仅修改了输出部分的代码:
for (int i = 0; i < abs->m_Size; i++) {
cout << "姓名:" << abs->personArray[i].m_Name << "\t";
cout << "年龄:" << abs->personArray[i].m_Age << "\t";
cout << "性别:" << (abs->personArray[i].m_Sex == 1 ? "男":"女") << "\t";
cout << "电话:" << abs->personArray[i].m_Phone << "\t";
cout << "住址:" << abs->personArray[i].m_Addr << endl;
}
测试显示联系人函数,成功!
删除联系人
1.封装检测联系人是否存在,如果存在,返回其所在位置
写在显示联系人之后
int isExist(Addressbooks* abs, string name) { //这里设置两个参数 abs 和 name
for (int i = 0; i < abs->m_Size < i++) {
if (abs->personArray[i].m_Name == name) {
return i;
}
}
//如果遍历了都没有,返回-1
return -1;
}
这里插入关于return函数的解释:
在C++中,当函数执行到`return`语句时,它将会终止当前函数的执行并返回一个值(如果函数的返回类型不是`void`)。在这种情况下,函数会立即跳出,并将控制权返回给调用该函数的地方。
但需要注意的是,当函数执行到`return`语句时,并不一定意味着整个程序都会立即终止。如果该函数是主函数(`main`函数),那么当`main`函数执行到`return`语句时,整个程序会终止。但对于其他函数,程序会继续执行调用这些函数的代码。
此外,如果在函数中存在多个`return`语句,只有第一个执行到的`return`语句会被执行,后面的`return`语句将不会被执行。这意味着函数在执行到第一个`return`语句后就会直接返回,并不会继续往后执行。
在int main ()里进行测试
isExist(&abs, name);//这里需要和之后的形参abs做区分
由于在case3里面行数比较多,所以会报错。需要加大括号{}
先省略
2.封装删除联系人函数
这里采取的删除方法是:要删除李四,把李四后面的数据都向前移动,并且m_size减一
void deletePerson(Addressbooks* abs) {
//先判断联系人是否存在,此时就需要用到上一个书写的函数
cout << "请输入需要删除的联系人姓名" << endl;
string name;
cin >> name;
int ret = isExist(abs, name); //这里注意本身就是指针,不需要&符号
if (ret != -1) {
//要删除李四,把李四后面的数据都向前移动,并且m_size减一
for (int j = ret; j < abs->m_Size - 1; j++) {
//数据前移
abs->personArray[j] = abs->personArray[j + 1];
}
abs->m_Size--;
cout << "删除成功" << endl;
}
else {
cout << "此人不存在" << endl;
}
system("pause");
system("cls");
}
测试之后发现成功
这里的数据前移 弹幕和黑马教程有出入!