简介:
本个通讯录的设计包含七个功能:
1,增添人员
2,展示通讯录中的人员
3,删除通讯录中的指定人员
4,查找通讯录中的指定人
5,修改指定人的消息
6,清空通讯录
7,用来查找指定人的序号
对于不同的功能,我们采取不同的函数功能来实现。
一,创建头文件
在头文件中,我们设置必要的函数和必要的C++头文件
#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
//下面为C++所提供的一系列头文件
#include<iostream>
#include<windows.h>
#include<cstring>
using namespace std;
//设置通讯录最大的容量,可根据情况进行修改
#define m 1000
//通讯录的菜单
void menu();//增添人员
void addperson(struct add* a, int*);
//展示通讯录中的人员
void show(struct add* a);
//删除通讯录中的指定人员
void deleteperson(struct add* a);
//查找通讯录中的指定人
void found(struct add* a);
//修改指定人的消息
void fix(struct add* a);
//清空通讯录
void clean(struct add* a);
//用来查找指定人的序号
int foundperson(struct add* a,string);
二,通讯录的实现
思路:
首先我们要理解通讯录的实现功能,是要存储个人的一系列消息,我们可以用创建一个结构体来存储这一系列的消息,因为通讯录中不知一个人的消息,所以需要创建一个结构体数组,而对于每一个通讯录的功能需要创建函数来实现,所以,为了改变每一个结构体中存储的人员消息,我们需要传递地址,即结构体指针
1,通讯录的框架实现
#include"list.h"//引用设计的头文件
struct person//创建要存储个人的结构体
{
string name;//姓名
int sex;//性别
int age;//年龄
string phone;//手机号
string number;//身份证号
string address;//地址
};
struct add
{
struct person arr[m];//用数组来存储一系列个人数据
int size;//表明通讯录中指向的个体
}a;//通讯录的菜单说明
void 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 select;
a.size = 0;
cout << "\t\t\t\t\t\t通讯录的制作" << endl;
do//结构框架,用循环结构实现多个功能
{
menu();
cin >> select;
switch (select)
{
case 0:
cout << "您已退出系统平台" << endl;
return 0;
case 1:
cout << "您已进入“添加联系人”模式" << endl;
addperson(&a,&a.size);
a.size++;//增向通讯录放入完一组数据后,将指向往后移动一位
break;
cout << "您已进入“显示联系人”模式" << endl;
case 2:
show(&a);
break;
case 3:
cout << "您已进入“删除联系人”模式" << endl;
deleteperson(&a);
break;
case 4:
cout << "您已进入“查找联系人”模式" << endl;
found(&a);
break;
case 5:
cout << "您已进入“修改联系人”模式" << endl;
fix(&a);
break;
case 6:
cout << "您已进入“清空联系人”模式" << endl;
clean(&a);
break;
default:cout << "输入错误,请重新输出" << endl;
}
} while (select);
return 0;
}
2,增添人员的功能实现
void addperson(struct add* a,int* p)
{
if (a->size == m)
{//考虑通讯放满时候的情况
cout << "通讯录存放已满,无法添加" << endl;
return;
}
else
{
//姓名
cout << "请输入姓名: ";
cin >> a->arr[*p].name;
//性别
cout << "1,男\n" << "2,女" << endl;
while (true)
{
cout << "请选择性别: ";
int select;
cin >> select;
if (select == 1 || select == 2)
{
if (select == 1)
a->arr[*p].sex = 1;
else
a->arr[*p].sex = 2;
break;
}
else
cout << "输入错误,请重新输入" << endl;
}
//年龄
cout << "请输入年龄: ";
cin >> a->arr[*p].age;
//电话
cout << "请输入电话: ";
cin >> a->arr[*p].phone;
//身份证号
cout << "请输入身份证号: ";
cin >> a->arr[*p].number;
//地址
cout << "请输入家庭地址: ";
cin >> a->arr[*p].address;
}
system("pause");
system("cls");
}
3,展示通讯录中的人员的功能
void show(struct add* a)
{//当没有任何数据放入的时候的情况
if (a->size == 0)
cout << "当前没有任何记录" << endl;
else
{
cout << "此时通讯录中的记录的人员如下:" << endl;
for (int i = 0; i < a->size; i++)
{
cout << "姓名: " << a->arr[i].name << " ";
cout << "性别: " << (a->arr[i].sex == 1 ? "男" : "女") << " ";
cout << "年龄: " << a->arr[i].age << " ";
cout << "手机号: " << a->arr[i].phone << " ";
cout << "身份证号: " << a->arr[i].number << " ";
cout << "家庭地址: " << a->arr[i].address << endl;
}
}
system("pause");
system("cls");
}
4,删除通讯录中的指定人员的功能
int foundperson(add* a,string name1)//用此函数来查找要指定的人员
{
for (int i = 0; i < a->size; i++)
{
if (a->arr[i].name == name1)
{
return i;
}
}
return -1;//当要删除的人没有在通讯录中时此函数返回-1
}void deleteperson(add* a)
{
string name;
int number;
cout << "请输入要删除人员的姓名: ";
cin >> name;
number = foundperson(a, name);//当要删除的人在通讯录中时,我们进行删除操作
if (number != -1)
{
for (int i = number; i < a->size; i++)
{
a->arr[i] = a->arr[i + 1];
}//删除完时候,通讯库的记录人员的数量减少1
a->size--;
cout << "删除成功" << endl;
}//当通讯录中没有要指定删除的人的情况
else
{
cout << "没有此人" << endl;
}
system("pause");
system("cls");
}
5,查找通讯录中的指定人的功能
void found(add* a)
{
int i;
string name;
cout << "请输入要查找人的姓名: ";
cin >> name;
i = foundperson(a, name);//用来查找指定的人//与删除功能的原理一样,当存在此人的时候输出,不存在此人的时候说明
if (i != -1)
{
cout << "姓名: " << a->arr[i].name << " ";
cout << "性别: " << (a->arr[i].sex == 1 ? "男" : "女") << " ";
cout << "年龄: " << a->arr[i].age << " ";
cout << "手机号: " << a->arr[i].phone << " ";
cout << "身份证号: " << a->arr[i].number << " ";
cout << "家庭地址: " << a->arr[i].address << endl;
}
else
{
cout << "没有此人" << endl;
}
system("pause");
system("cls");
}
6,修改指定人的消息
void fix(add* a)
{
int number;
string name;
cout << "请输入即将要修改人的名字: ";
cin >> name;
number = foundperson(a, name);//用此函数来查找指定的内容
if (number != -1)
{
cout << "请输入将要修改成员的信息" << endl;//用此函数进行修改,但是需注意的是,此时通讯录中的存储量是不变的
addperson(a, &number);show(a);//当修改完之后我们查看一下此时通讯录的内容
}
else
{
cout << "没有此人" << endl;
system("pause");
system("cls");
}
}
7,清空通讯录
因为我们在展示通讯录时是用size所包含的数量,当将其赋与0时,就相当无法访问里面的任何数据了,进而相当于与清空了
void clean(add* a)
{
a->size = 0;
cout << "通讯录已全部清空" << endl;
system("pause");
system("cls");
}
8,用来查找指定人的序号
此函数功能是配合其他功能所使用的,当我们需要查找通讯录中的莫个人的名字是,用此函数来查找
int foundperson(add* a,string name1)//a代表通讯录,而name1代表要查找的人
{
for (int i = 0; i < a->size; i++)
{
if (a->arr[i].name == name1)
{
return i;
}
}
return -1;
}
实现通讯录功能的总代码:
#include"list.h" struct person { string name; int sex; int age; string phone; string number;//身份证号 string address; }; struct add { struct person arr[m]; int size; }a; void 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; } void addperson(struct add* a,int* p) { if (a->size == m) { cout << "通讯录存放已满,无法添加" << endl; return; } else { //姓名 cout << "请输入姓名: "; cin >> a->arr[*p].name; //性别 cout << "1,男\n" << "2,女" << endl; while (true) { cout << "请选择性别: "; int select; cin >> select; if (select == 1 || select == 2) { if (select == 1) a->arr[*p].sex = 1; else a->arr[*p].sex = 2; break; } else cout << "输入错误,请重新输入" << endl; } //年龄 cout << "请输入年龄: "; cin >> a->arr[*p].age; //电话 cout << "请输入电话: "; cin >> a->arr[*p].phone; //身份证号 cout << "请输入身份证号: "; cin >> a->arr[*p].number; //地址 cout << "请输入家庭地址: "; cin >> a->arr[*p].address; } system("pause"); system("cls"); } void show(struct add* a) { if (a->size == 0) cout << "当前没有任何记录" << endl; else { cout << "此时通讯录中的记录的人员如下:" << endl; for (int i = 0; i < a->size; i++) { cout << "姓名: " << a->arr[i].name << " "; cout << "性别: " << (a->arr[i].sex == 1 ? "男" : "女") << " "; cout << "年龄: " << a->arr[i].age << " "; cout << "手机号: " << a->arr[i].phone << " "; cout << "身份证号: " << a->arr[i].number << " "; cout << "家庭地址: " << a->arr[i].address << endl; } } system("pause"); system("cls"); } int foundperson(add* a,string name1) { for (int i = 0; i < a->size; i++) { if (a->arr[i].name == name1) { return i; } } return -1; } void deleteperson(add* a) { string name; int number; cout << "请输入要删除人员的姓名: "; cin >> name; number = foundperson(a, name); if (number != -1) { for (int i = number; i < a->size; i++) { a->arr[i] = a->arr[i + 1]; } a->size--; cout << "删除成功" << endl; } else { cout << "没有此人" << endl; } system("pause"); system("cls"); } void found(add* a) { int i; string name; cout << "请输入要查找人的姓名: "; cin >> name; i = foundperson(a, name); if (i != -1) { cout << "姓名: " << a->arr[i].name << " "; cout << "性别: " << (a->arr[i].sex == 1 ? "男" : "女") << " "; cout << "年龄: " << a->arr[i].age << " "; cout << "手机号: " << a->arr[i].phone << " "; cout << "身份证号: " << a->arr[i].number << " "; cout << "家庭地址: " << a->arr[i].address << endl; } else { cout << "没有此人" << endl; } system("pause"); system("cls"); } void fix(add* a) { int number; string name; cout << "请输入即将要修改人的名字: "; cin >> name; number = foundperson(a, name); if (number != -1) { cout << "请输入将要修改成员的信息" << endl; addperson(a, &number); show(a); } else { cout << "没有此人" << endl; system("pause"); system("cls"); } } void clean(add* a) { a->size = 0; cout << "通讯录已全部清空" << endl; system("pause"); system("cls"); } int main() { int select; a.size = 0; cout << "\t\t\t\t\t\t通讯录的制作" << endl; do { menu(); cin >> select; switch (select) { case 0: cout << "您已退出系统平台" << endl; return 0; case 1: cout << "您已进入“添加联系人”模式" << endl; addperson(&a,&a.size); a.size++; break; case 2: cout << "您已进入“显示联系人”模式" << endl; show(&a); break; case 3: cout << "您已进入“删除联系人”模式" << endl; deleteperson(&a); break; case 4: cout << "您已进入“查找联系人”模式" << endl; found(&a); break; case 5: cout << "您已进入“修改联系人”模式" << endl; fix(&a); break; case 6: cout << "您已进入“清空联系人”模式" << endl; clean(&a); break; default:cout << "输入错误,请重新输出" << endl; } } while (select); return 0; }