一、本文采用c++语言实现的简易通讯录,具体功能包括添加、删除,查找和修改联系人信息,显示和清空联系人列表,以及实时显示通讯录的记录人数,具体操作根据对应提示输入即可。
二、该通讯录人数上限设置为1000,可以修改代码中main函数的NUMBER变量数值来自行修改。
三、一些问题及解决方法:
1.初始化大量结构体数组:由于结构体数组过大,没办法一一初始化,本文采用在最初定义结构体时初始化,将字符串赋值为空,将整型赋值为0。
2.可能的栈溢出:数组的变量所使用的空间在栈上,每个程序的占用空间是有限的,系统会提示将一些数据移动到堆,可以用new来分配内存存放结构体,需要人数上限过大者自行修改。
四、代码:
#include<iostream>
#include<string>
using namespace std;
struct linkman
{
string name="";
string sex = "";
int age=0;
int phonenumber=0;
string address = "";
};
void add(struct linkman arr[], int len)
{
int i = 0;
for (i = 0; i < len; i++)
{
if (arr[i].name == "")
{
break;
}
}
cout << "请输入联系人的姓名:";
cin >> arr[i].name;
cout << "请输入联系人的性别:";
cin >> arr[i].sex;
cout << "请输入联系人的年龄:";
cin >> arr[i].age;
cout << "请输入联系人的联系电话:";
cin >> arr[i].phonenumber;
cout << "请输入联系人的家庭住址:";
cin >> arr[i].address;
cout << "添加成功" << endl;
system("pause");
system("cls");
}
void display(struct linkman arr[], int len)
{
for (int i = 0; i < len; i++)
{
if (arr[i].name == "")
{
break;
}
cout << "姓名:" << "\t\t" << arr[i].name << endl;
cout << "性别:" << "\t\t" << arr[i].sex << endl;
cout << "年龄:" << "\t\t" << arr[i].age << endl;
cout << "联系电话:" << "\t" << arr[i].phonenumber << endl;
cout << "家庭住址:" << "\t" << arr[i].address << endl;
cout << endl;
}
system("pause");
system("cls");
}
void shanchu(struct linkman arr[], int len)
{
string name_1 = "";
cout << "请输入你想删除联系人的名字:";
cin >> name_1;
cout << endl;
int k = 0;//次数
for (int i = 0; i < len; i++)
{
if (arr[i].name == name_1)
{
for (int j = i; j < len - i; j++)
{
arr[j].name = arr[j + 1].name;
arr[j].sex = arr[j + 1].sex;
arr[j].age = arr[j + 1].age;
arr[j].phonenumber = arr[j + 1].phonenumber;
arr[j].address = arr[j + 1].address;
if (arr[j].name == "")
{
break;
}
}
arr[len-1].name = "";
arr[len - 1].sex = "";
arr[len - 1].age = 0;
arr[len - 1].phonenumber = 0;
arr[len - 1].address = "";
k++;
}
}
if (k != 0)
{
cout << "删除完成" << endl;
}
else
{
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
void search(struct linkman arr[], int len)
{
string name_2 = "";
cout << "请输入你想查找联系人的名字:";
cin >> name_2;
int j = 0;
for (int i = 0; i < len; i++)
{
if (arr[i].name == name_2)
{
cout << "姓名:" << "\t\t" << arr[i].name << endl;
cout << "性别:" << "\t\t" << arr[i].sex << endl;
cout << "年龄:" << "\t\t" << arr[i].age << endl;
cout << "联系电话:" << "\t" << arr[i].phonenumber << endl;
cout << "家庭住址:" << "\t" << arr[i].address << endl;
cout << endl;
j++;
}
}
if (j == 0)
{
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
void change(struct linkman arr[], int len)
{
string name_3 = "";
cout << "请输入你想更改联系人的名字:";
cin >> name_3;
cout << endl;
int number_3 = 0;
int j = 0;
for (int i = 0; i < len; i++)
{
if (arr[i].name == name_3)
{
cout << "联系人原姓名:" << "\t\t" << arr[i].name << endl;
cout << "联系人原性别:" << "\t\t" << arr[i].sex << endl;
cout << "联系人原年龄:" << "\t\t" << arr[i].age << endl;
cout << "联系人原联系电话:" << "\t" << arr[i].phonenumber << endl;
cout << "联系人原家庭住址:" << "\t" << arr[i].address << endl;
cout << endl;
while (1)
{
cout << "请输入你想更改联系人的信息:" << endl;
cout << "1.姓名 \n2.性别 \n3.年龄 \n4.联系电话 \n5.家庭住址 \n0.退出" << endl;
cin >> number_3;
if (number_3 == 0)
{
break;
}
switch (number_3)
{
case 1:cout << "请输入你想更改联系人的姓名:";
cin >> arr[i].name; break;
case 2:cout << "请输入你想更改联系人的性别:";
cin >> arr[i].sex; break;
case 3:cout << "请输入你想更改联系人的年龄:";
cin >> arr[i].age; break;
case 4:cout << "请输入你想更改联系人的联系电话:";
cin >> arr[i].phonenumber; break;
case 5:cout << "请输入你想更改联系人的家庭住址:";
cin >> arr[i].address; break;
default:
break;
}
}
cout << "修改后的联系人信息如下:"<<endl;
cout << "姓名:" << "\t\t" << arr[i].name << endl;
cout << "性别:" << "\t\t" << arr[i].sex << endl;
cout << "年龄:" << "\t\t" << arr[i].age << endl;
cout << "联系电话:" << "\t" << arr[i].phonenumber << endl;
cout << "家庭住址:" << "\t" << arr[i].address << endl;
j++;
}
}
if (j == 0)
{
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
void qingkong(struct linkman arr[], int len)
{
for (int i = 0; i < len; i++)
{
arr[i].name = "";
arr[i].sex = "";
arr[i].age = 0;
arr[i].phonenumber = 0;
arr[i].address = "";
}
cout << "通讯录已清空" << endl;
system("pause");
system("cls");
}
int main()
{
const int NUMBER = 1000;
linkman l[NUMBER] ;
int len = sizeof(l) / sizeof(l[0]);
int number = 0;
int i = 0;
while (1)
{
for (i = 0; i < NUMBER; i++)
{
if (l[i].name == "")
{
break;
}
}
len = i;
cout << "当前通讯录人数:" << len<<endl;
cout << "1.添加联系人" << endl;
cout << "2.显示联系人" << endl;
cout << "3.删除联系人" << endl;
cout << "4.查找联系人" << endl;
cout << "5.修改联系人" << endl;
cout << "6.清空联系人" << endl;
cout << "0.退出通讯录" << endl;
cout << endl;
cout << "请输入你需要进入的功能其对应数字" << endl;
cin >> number;
if (number == 0)
{
break;
}
switch (number)
{
case 1:add(l, len); break;
case 2:display(l, len); break;
case 3:shanchu(l, len); break;
case 4:search(l, len); break;
case 5:change(l, len); break;
case 6:qingkong(l, len); break;
default:
break;
}
}
system("pause");
return 0;
}