#1、程序简介
***该程序为c++,如果需要c版本,可以查看我的下一个文章,有完整代码哦。***
写一个可以满足添加、修改、删除、查找、遍历联系人身份信息(包括年龄、性别、手机号码等信息)的小程序已经成为不少学校的结课作业,这里介绍一下鄙人的代码思路,并提供码源。
#2、程序思路
首先要明确程序的主体是联系人,因此需要建立一个通讯录的类,通讯录中包括所有的联系人,这里要用到结构体嵌套结构体。
在者,要考虑所要实现的功能,例如:添加、查看、修改、查找、删除、清空联系人。逐个编写函数完成对应功能。(在此之前要先完成主函数框架)
最后,通过调试修改程序细节。
#3、码源分享+代码解析
const int my_max = 1000;
struct Contact_person
{
string name;
string gender;
int age;
string phone_number;
string address;
};
struct Communicator
{
struct Contact_person peopleArray[my_max];
int people_number = 0;
}num;
·首先创建人的类,包括年龄等属性,在创建通讯录类,记录存储的人数(数组内存有限,不能无限添加)。
void Main_menu()
{
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 choose = 0;
num.people_number = 0; //初始化人数
while (1)
{
Main_menu();
cin >> choose;
switch (choose)
{
case 1:
addperson(&num);
break;
case 2:
showpeople(&num);
break;
case 3:
changepeople(&num);
break;
case 4:
queryperson(&num);
break;
case 5:
deleteperson(&num);
break;
case 6:
clearpeople(&num);
break;
case 0:
cout << "欢迎下次使用" << endl;
return 0;
break;
default:
cout << "输入有误" << endl;
system("pause");
system("cls");
break;
}
}
system("pause");
return 0;
}
·这里进行主框架的搭建,记得在主函数循环外初始化人数。
void addperson(Communicator *num)
{
if (num->people_number >= 1000)
{
cout << "人数已满" << endl;
}
else
{
string name;
string sex;
int age = 0;
string phone;
string adds;
//1、输入姓名
cout << "请输入联系人姓名" << endl;
cin >> name;
num->peopleArray[num->people_number].name = name;
//2、输入性别
cout << "请输入联系人性别" << endl;
cout << "1、男" << endl;
cout << "2、女" << endl;
while (1)
{
cin >> sex;
if (sex == "1")
{
num->peopleArray[num->people_number].gender = "男";
break;
}
if (sex == "2")
{
num->peopleArray[num->people_number].gender = "女";
break;
}
else
{
cout << "输入有误" << endl;
continue;
}
}
//3、输入年龄
cout << "请输入联系人年龄" << endl;
cin >> age;
num->peopleArray[num->people_number].age = age;
//4、输入号码
cout << "请输入联系人电话号码" << endl;
cin >> phone;
num->peopleArray[num->people_number].phone_number = phone;
//5、输入地址
cout << "请输入联系人住址" << endl;
cin >> adds;
num->peopleArray[num->people_number].address = adds;
//记录人数
num->people_number++;
cout << "添加成功" << endl;
}
system("pause");
system("cls");
}
·这里实现第一个功能,添加联系人。需注意细节:使用地址传参,记录人数,使用system("cls")清屏。
void showpeople(Communicator* num)
{
if(!num->people_number)
{
cout << "暂无联系人" << endl;
}
else
{
for (int i = 0; i < num->people_number; i++)
{
cout << "姓名是: " << num->peopleArray[i].name << "\t";
cout << "性别是: " << num->peopleArray[i].gender << "\t";
cout << "年龄是: " << num->peopleArray[i].age << "\t";
cout << "号码是: " << num->peopleArray[i].phone_number << "\t";
cout << "住址是: " << num->peopleArray[i].address << endl;
}
}
system("pause");
system("cls");
}
·这里是第二个功能,遍历所有的联系人。注意:判断如果没有人输出“暂无人可查”
int findpeople(Communicator * num , string name)
{
for (int i = 0; i < num->people_number; i++)
{
if (num->peopleArray[i].name == name)
{
return i;
}
return -1;
}
}
*这个函数是以下几个功能的中心函数,可以查看通讯录中有无你所输入的人的名字,如果有返回所在位置,不存在则返回-1提示。
void deleteperson(Communicator * abs)
{
string name;
if(abs->people_number == 0)
{
cout << "暂无人可删" << endl;
}
else
{
cout << "请输入要删除的联系人姓名" << endl;
cin >> name;
int a = findpeople(abs, name);
if (a == -1)
{
cout << "查无此人" << endl;
}
else
{
for (int i = a; i < abs->people_number; i++)
{
abs->peopleArray[i] = abs->peopleArray[i + 1];
}
cout << "删除成功" << endl;
abs->people_number--;
}
}
system("pause");
system("cls");
}
·这里是删除联系人功能,删除思路:用后面人的信息覆盖要删除的人的信息(依次覆盖),可看作删除。
void clearpeople(Communicator* num)
{
string choose;
cout << "是否要清除?“是” 或 “否”" << endl;
cin >> choose;
while (true)
{
if(choose == "是")
{
num->people_number = 0;
cout << "清除完成" << endl;
break;
}
else if (choose == "否")
{
cout << "重新选择" << endl;
break;
}
else
{
cout << "请按规定输入" << endl;
continue;
}
}
system("pause");
system("cls");
}
·因查找和修改联系人代码雷同,故不在赘述。这里展示清空功能,实际上可以直接将联系人人数置0即可(添加即覆盖,查找也会屏蔽范围外的信息).
#4、结语
这就是全部介绍了,如果需要完整可直接应用的代码可以联系我哦。