我的通讯录
主要功能:1.黑框菜单功能
void showMenu()
{
cout << "*************************************" << endl;
cout << "***********1. 添加联系人************" << endl;
cout << "***********2. 删除联系人************" << endl;
cout << "***********3. 显示联系人************" << endl;
cout << "***********4. 查找联系人************" << endl;
cout << "***********5. 修改联系人************" << endl;
cout << "***********6. 清空联系人************" << endl;
cout << "***********7. 退出通讯录************" << endl;
cout << "************************************" << endl;
}
2.联系人的属性 姓名, 年龄,性别,电话号码,家庭住址。
由于已经不是基础类型的数局 , 可以考虑结构体,类来
做成自己需要的数据类型。
class person {
public:
string m_name;
int m_age;
int m_sex;
string m_phNumber;
string m_address;
};
3.通讯录属性,存储这些联系人。并且记录他们的个数。
class messgebox {
public:
person m_messagebox[max];
int m_number;
};
4.更具项目需要,可以考虑 if else 的数据结构,但是 switch 结构 明显比较合适这个 项目。
```cpp
int main()
{
messgebox abbs;
abbs.m_number = 0;
int number;
while (1)
{
showMenu();
cin >> number;
switch (number)
{
case 1:
addPerson(abbs);
break;
case 2:
movePerson(abbs);
break;
case 3:
showPerson(abbs);
break;
case 4:
findPerson(abbs);
break;
case 5:
removePerson(abbs);
break;
case 6:
clearAll(abbs);
break;
case 7:
quitIt();
break;
}
}
return 0;
}
1.添加联系人实现思路。
创建一个通讯录-》给该通讯录加上一个人物。
在主程序创建一个通讯录, 在切入点1添加人物, 传递参数 , 在分函数中想要 改变主函数中的变量
所以应是地址传递。使用 引用的传递技术可以很好的解决这个问题。
void addPerson(messgebox& abs)
{
if (abs.m_number == max)
cout << "it is so much" << endl;
else{
cout << "please input name " << endl;
string name;
cin >> name;
abs.m_messagebox[abs.m_number].m_name = name;
cout << "please input your age " << endl;
int age;
cin >> age;
abs.m_messagebox[abs.m_number].m_age = age;
cout << "input your sex " << endl;
int sex;
while (true)
{
cin >> sex;
if (sex == 0 || sex == 1)
{
abs.m_messagebox[abs.m_number].m_sex = sex;
break;
}
else
cout << "0-- 男性 , 1--女性" << endl;
}
cout << "input phone number" << endl;
string phone;
cin >> phone;
abs.m_messagebox[abs.m_number].m_phNumber = phone;
cout << "input address" << endl;
string address;
cin >> address;
abs.m_messagebox[abs.m_number].m_address = address;
abs.m_number++;
system("pause");
system("cls");
}
}
添加之前 做条件判断,规避越界问题。规定 0 – 男性 , 1-- 女性 如果用户输入错误,可以通过
while(1)死循环强制用户重新输入,输入合法数据才跳出该循环。
system(“pause”) 按任意键继续。
system (“cls”) 清屏 保持频幕的整洁。
**2.**删除功能 同过名字 查找该人是否存在。存在先找到其位置,然后根据储存结构是连续数组,删除某个元素时 后面元素依次覆盖前一个元素的算法实现改功能。
查找元素是否存在后面还会继续使用,封装成一个函数为好的做法。
int isExit(messgebox& abs, string name)
{
for (int i = 0; i < abs.m_number; i++)
{
if (abs.m_messagebox[i].m_name == name)
return i;
}
return -1;
}
返回其在 连续数组中的下标位置,然后通过算法解决,在维护通讯录的数量,及-- 操作。
void movePerson(messgebox& abs)
{
if (abs.m_number == 0)
cout << "It is empty ." << endl;
else
{
cout << "Input the name ." << endl;
string name;
cin >> name;
int ret = isExit(abs, name) ;
if (ret == -1)
{
cout << "查无此人" << endl;
}
else
{
for (int i = ret; i < abs.m_number; i++)
{
abs.m_messagebox[i] = abs.m_messagebox[i + 1];
}
abs.m_number--;
}
}
system("pause");
system("cls");
}
3 修改联系人,通过名字找到该人,通过一个 switch 结构 决定是该哪些选项, 通过死循环结构,输入特定值 结束 修改。
void removePerson(messgebox & abs)
{
if (abs.m_number == 0)
cout << "It is empty ." << endl;
else
{
cout << " input name ." << endl;
string name;
cin >> name;
int ret = isExit(abs, name);
if (-1 == ret)
{
cout << " 查无此人" << endl;
}
else
{
// 1. 修改姓名 2. 修改性别 3. 修改联系电话 4. 修改地址
while (true)
{
cout << " 1. 修改姓名 2. 修改性别 3. 修改年龄 4. 修改电话 5 . 修改地址 6 .结束输入" << endl;
int num;
cin >> num;
switch (num)
{
case 1:
{
cout << "name" << endl;
string name;
cin >> name;
abs.m_messagebox[ret].m_name = name;
}
break;
case 2:
{
cout << "性别" << endl;
int sex1 = 0;
cin >> sex1;
while (true)
{
if (1 == sex1 || 0 == sex1)
break;
else
cout << "0 -- 男性, 1-- 女性" << endl;
}
abs.m_messagebox[ret].m_sex = sex1;
}
break;
case 3:
{
cout << "age :" << endl;
int age;
cin >> age;
abs.m_messagebox[ret].m_age = age;
}
break;
case 4:
{
cout << " phone number : " << endl;
string number;
cin >> number;
abs.m_messagebox[ret].m_phNumber = number;
}
break;
case 5:
{
cout << "address " << endl;
string address;
cin >> address;
abs.m_messagebox[ret].m_address = address;
}
break;
case 6:
cout << "输入完毕" << endl;
break;
default:
cout << "错误选项,再次输入" << endl;
break;
}
if (6 == num)
break;
}
}
}
system("pause");
system("cls");
}
. 4 清空通讯录 ,只需要将 通讯录数目变量置为零即可。(内存没有绝对的空)
oid clearAll(messgebox &abs)
{
//逻辑清空即可,内存里面原本就没有空的概念
if (abs.m_number == 0)
cout << "It is empty ." << endl;
else
{
abs.m_number = 0;
cout << "通讯录 以经清空了" << endl;
system("pause");
system("cls");
}
}
大致结束,B站c++黑马初级 项目解读。