前期的准备工作
#include<iostream>
#include<string>
#define MAX 1000 //后续通讯录结构体中设定的联系人最大值
using namespace std;
int main(){
system("pause");
return 0;
}
联系人与通讯录结构体的构建
// 设计联系人结构体
struct person{
string name; // 联系人姓名
int sex; // 联系人性别,整型存放,1为男性,0为女性
int age; //联系人年龄
string phone; // 联系人电话号码
string address; // 联系人地址
};
// 设计通讯录结构体
struct addresstel {
// 通讯录中保存的联系人数组
struct person personArray[MAX];
// 通讯录中当前记录联系人个数
int size;
};
模块
菜单界面
为了便于用户选择各项功能,使用一个自定义函数来显示该程序的各项功能
void showMenu() {
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;
}
1.添加联系人
自定义的添加联系人模块,利用指针接收地址
void addperson(addresstel* s1) {
//if语句判断通讯录是否已满
if (s1->size == MAX) { //联系人满,return退出
cout << "通讯录已满,无法添加联系人。" << endl;
return;
}
else {
// 添加联系人
//姓名
string name;
cout << "请输入联系人姓名" << endl;
cin >> name;
s1->personArray[s1->size].name = name;
//性别
string sex; //定义字符串变量接受用户输入
cout << "请输入联系人性别" << endl;
cin >> sex;
if(sex == "男") //男,数据存放为1
s1->personArray[s1->size].sex = 1;
else if(sex == "女") //女,数据存放为0
s1->personArray[s1->size].sex = 0;
//年龄
int age;
cout << "请输入联系人年龄" << endl;
cin >> age;
s1->personArray[s1->size].age = age;
//电话号码
string phone;
cout << "请输入联系人电话" << endl;
cin >> phone;
s1->personArray[s1->size].phone = phone;
//地址
string address;
cout << "请输入联系人地址" << endl;
cin >> address;
s1->personArray[s1->size].address = address;
//每次添加完成后,size++
s1->size++;
}
}
2.显示联系人
void seeperson(addresstel* s1) {
if (s1->size == 0)
cout << "当前通讯录为空" << endl;
else {
for (int i = 0; i < s1->size; i++) {
cout << "姓名: " << s1->personArray[i].name;
if(s1->personArray[i].sex == 1)
cout << " 性别:男 ";
else if (s1->personArray[i].sex == 0)
cout << " 性别:女 ";
else
cout << " 性别:未知 ";
cout << " 年龄: " << s1->personArray[i].age << " 电话: " << s1->personArray[i].phone << " 地址: " << s1->personArray[i].address << endl;
}
}
}
3.删除联系人
根据联系人的姓名来查找需要删除的联系人
void delperson(addresstel* s1) {
string name;
cout << "请输入需要删除的联系人姓名:" << endl;
cin >> name;
int flag = 0;
int flagsize;
for (int i = 0; i < s1->size; i++) {
if (name == s1->personArray[i].name) {
flag = 1;
flagsize = i;
}
}
if (flag != 1)
cout << "通讯录中未能搜寻到此人信息" << endl;
else {
for (int i = flagsize; i < s1->size; i++) {
if (i + 1 != s1->size)
s1->personArray[i] = s1->personArray[i + 1];
s1->size--;
}
cout << "删除成功!" << endl;
}
}
4.查找联系人
void searchperson(addresstel* s1) {
string name;
cout << "请输入需要查找的联系人姓名:" << endl;
cin >> name;
int flag = 0;
int flagsize;
for (int i = 0; i < s1->size; i++) {
if (name == s1->personArray[i].name) {
flag = 1;
flagsize = i;
}
}
if (flag != 1)
cout << "通讯录中未能搜寻到此人信息" << endl;
else {
cout << "姓名: " << s1->personArray[flagsize].name;
if (s1->personArray[flagsize].sex == 1)
cout << " 性别:男 ";
else if (s1->personArray[flagsize].sex == 0)
cout << " 性别:女 ";
else
cout << " 性别:未知 ";
cout << " 年龄: " << s1->personArray[flagsize].age << " 电话: " << s1->personArray[flagsize].phone << " 地址: " << s1->personArray[flagsize].address << endl;
}
}
5.修改联系人
void gaiperson(addresstel* s1) {
string name;
cout << "请输入需要修改的联系人姓名:" << endl;
cin >> name;
int flag = 0;
int flagsize;
for (int i = 0; i < s1->size; i++) {
if (name == s1->personArray[i].name) {
flag = 1;
flagsize = i;
}
}
if (flag != 1)
cout << "通讯录中未能搜寻到此人信息" << endl;
else {
while (true) {
cout << "请输入需要修改信息的编号:" << endl;
cout << "\t1------性别" << endl;
cout << "\t2------年龄" << endl;
cout << "\t3------电话" << endl;
cout << "\t4------地址" << endl;
cout << "\t0------退出" << endl;
int select1;
cin >> select1;
switch (select1) {
case 1:
{
string sex;
cout << "请输入联系人性别" << endl;
cin >> sex;
if (sex == "男")
s1->personArray[flagsize].sex = 1;
else if (sex == "女")
s1->personArray[flagsize].sex = 0;
break;
}
case 2:
{
int age;
cout << "请输入联系人年龄" << endl;
cin >> age;
s1->personArray[flagsize].age = age;
break;
}
case 3:
{
string phone;
cout << "请输入联系人电话" << endl;
cin >> phone;
s1->personArray[flagsize].phone = phone;
break;
}
case 4:
{
string address;
cout << "请输入联系人地址" << endl;
cin >> address;
s1->personArray[flagsize].address = address;
break;
}
case 0:
{
cout << "修改结束" << endl;
return;
break;
}
default:
break;
}
}
}
}
6.清空联系人
void clearperson(addresstel* s1) {
s1->size = 0;
cout << "清理完成!" << endl;
}
main函数
int main() {
int select = 0; // 定义用户选择变量
// 定义通讯录结构体变量
struct addresstel s1;
// 初始化变量中的联系人个数
s1.size = 0;
while (true)
{
// 显示菜单
showMenu();
cin >> select;
switch (select)
{
case 1: // 1、添加联系人
addperson(&s1);
break;
case 2: // 2、显示联系人
seeperson(&s1);
break;
case 3: // 3、删除联系人
delperson(&s1);
break;
case 4: // 4、查找联系人
searchperson(&s1);
break;
case 5: // 5、修改联系人
gaiperson(&s1);
break;
case 6: // 6、清空联系人
clearperson(&s1);
break;
case 0: // 0、退出通讯录
cout << "欢迎下次使用!" << endl;
system("pause");
return 0;
break;
default:
break;
}
}
system("pause");
return 0;
}
总结
创建两个结构体,各个模块中均利用地址传递来修饰实参来实现一个简易的通讯录管理系统