目录
通讯录管理系统
通讯录系统的各个子函数
1. 头文件,结构体
2. 主函数
3. 菜单界面
4. 添加联系人函数
5. 显示联系人
6. 删除联系人
7. 查找联系人
8. 修改联系人信息
9. 清空通讯录
10.退出通讯录管理系统
源代码
通讯录使用结果展示:
说明:
系统中需要实现的功能如下:
#include
#include
#include
#define M 1000 // 定义联系人的最大个数
using namespace std;
struct person { // 联系人结构体
string name; // 姓名
string sex; // 性别
int age; // 年龄
string phone; // 电话
string addr; // 地址
};
struct addr_book {
struct person p_arr[M];
int size; // 通讯录中人的个数
};
// 菜单界面
void showmenu();
// 1.添加联系人
void add_person(addr_book* abs);
// 2.显示联系人
void show_person(addr_book* abs);
// 3.删除联系人
// 首先判断联系人是否存在
int isexist(addr_book* abs, string name);
// 具体的删除
void del_person(addr_book* abs);
// 4.查找联系人
void find_person(addr_book* abs);
// 5.修改联系人信息
void change_person(addr_book* abs);
// 6.清空联系人
void clear_person(addr_book* abs);
// 0.退出函数
bool quite();
int main()
{
struct addr_book abs;
abs.size = 0;
int select = 0;// 用户输入
bool flag = true;
while (flag) {
// 菜单调用
showmenu();
cin >> select;
switch (select) {
case 1:
// 1.添加联系人
add_person(&abs); // 利用地址传递,可以修饰实参
break;
case 2:
// 2.显示联系人
show_person(&abs);
break;
case 3:
// 3.删除联系人
del_person(&abs);
break;
case 4:
// 4.查找联系人
find_person(&abs);
break;
case 5:
// 5.修改联系人
change_person(&abs);
break;
case 6:
// 6.清空联系人
clear_person(&abs);
break;
case 0:
flag = quite();
//cout << "欢迎下次使用!" << endl;
//flag = false;
system("pause");
system("cls");
break;
}
}
return 0;
}
// 菜单界面
void showmenu()
{
cout << "--------通讯录管理系统--------" << endl;
cout << "\t1.添加联系人" << endl;
cout << "\t2.显示联系人" << endl;
cout << "\t3.删除联系人" << endl;
cout << "\t4.查找联系人" << endl;
cout << "\t5.修改联系人" << endl;
cout << "\t6.清空联系人" << endl;
cout << "\t0.推出通讯录" << endl;
cout << "------------------------------" << endl;
}
按1进入添加联系人界面
首先,判断通讯录系统是否已经存满上限个联系人,
分别输入姓名,性别(判断输入是否“男”或者"女",其他情况均输出重新输入),
年龄(判断年龄是否在10到100的范围内,如果超出范围,要求用户重新输入),
电话(判断电话号码是否为三位,如果位数不对要求用户重新输入)(其他位也可以,3位比较方便),
住址后完成录入。
录入完成后,更新通讯录中联系人的个数,并返回菜单界面。
// 1.添加联系人
void add_person(addr_book* abs)
{
// 判断通讯录是否已满
if (abs->size == M) {
cout << "通讯录已满,无法添加!" << endl;
return;
}else{
string name;
// 添加姓名
cout << "请输入姓名: ";
cin >> name;
abs->p_arr[abs->size].name=name;
// 添加性别
string sex;
cout << "请输入性别: ";
while (true) {
cin >> sex;
if (sex == "男" || sex == "女") {
abs->p_arr[abs->size].sex = sex;
break;
}
else {
cout << "请重新输入: ";
}
}
// 添加年龄
int age;
cout << "请输入年龄: ";
while (true) {
cin >> age;
if (age >= 10 && age <= 100) {
abs->p_arr[abs->size].age = age;
break;
}
else {
cout << "请重新输入: ";
}
}
// 添加电话
cout << "请输入电话: ";
string phone;
while (true) {
cin >> phone;
if (phone.length() == 3) {
abs->p_arr[abs->size].phone = phone;
break;
}
else {
cout << "你输入的电话位数不对,请重新输入: ";
}
}
// 添加地址
cout << "请输入家庭住址: ";
cin >> abs->p_arr[abs->size].addr;
abs->size++;
cout << "--------添加成功--------" << endl;
// 清屏的操作
system("pause");// 请按任意键继续
system("cls");
}
}
将通讯录中所有联系人打印出来,同样,先判断通讯录是否为空。
// 2.显示联系人
void show_person(addr_book* abs)
{
// 判断通讯录中人数是否为0
if (abs->size == 0) {
cout << "当前的记录为空" << endl;
}
else {
for (int i = 0; i < abs->size; i++) {
cout << "姓名\t性别\t年龄\t电话\t家庭地址" << endl;
cout << abs->p_arr[i].name << "\t" << abs->p_arr[i].sex << "\t" << abs->p_arr[i].age
<< "\t" << abs->p_arr[i].phone << "\t" << abs->p_arr[i].addr << endl;
}
}
system("pause");
system("cls");
}
通过判断联系人是否存在通讯录中的子函数,查找要删除的联系人是否存在通讯录中,找到了就返回当前联系人在通讯录数组中的下标位置,没找到返回-1。
通过联系人的姓名在通讯录中查找要删除的联系人,如果没找到,给用户反馈该用户不存在提示,
如果找到该联系人,用数组的下一个位置的信息覆盖到当前位置,以此类推,将要删除联系人之后的每一个联系人位置更新后,通讯录大小-1即可。
// 3.删除联系人
// 首先判断联系人是否存在
int isexist(addr_book* abs, string name)
{
for (int i = 0; i < abs->size; i++) {
if (abs->p_arr[i].name == name) {
return i; // 找到返回在数组中的编号
}
}
return -1;
}
// 具体的删除
void del_person(addr_book* abs)
{
string name;
cout << "请输入您要删除的联系人: ";
cin >> name;
int ret = isexist(abs, name);
if (ret == -1) {
cout << "查无此人" << endl;
}
else {
// 得到的是要删除的人的数组下标
// 要删除可以直接将后一个数据覆盖到要删除的数据上
for (int i = ret; i < abs->size; i++) {
abs->p_arr[i] = abs->p_arr[i + 1];
}
abs->size--;
cout << "--------删除成功--------" << endl;
}
system("pause");
system("cls");
}
与删除联系人相同,首先判断联系人是否在通讯录系统中,
如果未找到给用户提示该联系人不存在,找到了就打印联系人的所有信息。
// 4.查找联系人
void find_person(addr_book* abs)
{
cout << "请输入您要查找的联系人: ";
string name;
cin >> name;
int ret = isexist(abs, name);
if (ret == -1) {
cout << "您要查找的联系人不存在。" << endl;
}
else {
cout << "姓名\t性别\t年龄\t电话\t家庭地址" << endl;
cout << abs->p_arr[ret].name << "\t" << abs->p_arr[ret].sex << "\t" << abs->p_arr[ret].age
<< "\t" << abs->p_arr[ret].phone << "\t" << abs->p_arr[ret].addr << endl;
cout << "--------查找完毕--------" << endl;
}
system("pause");
system("cls");
}
通过联系人姓名在通讯录系统中查找要找的联系人是否存在,如果未找到,给用户反馈,查无此人。
找到要修改的联系人位置后,将新输入的信息覆盖到原本的位置即可。
// 5.修改联系人信息
void change_person(addr_book* abs)
{
cout << "请输入您要修改的联系人: ";
string name;
cin >> name;
int ret = isexist(abs, name);
if (ret == -1) {
cout << "查无此人。" << endl;
system("pause");// 请按任意键继续
system("cls");
}
else {
string name;
// 修改姓名
cout << "请输入姓名: ";
cin >> name;
abs->p_arr[ret].name = name;
// 修改性别
string sex;
cout << "请输入性别: ";
while (true) {
cin >> sex;
if (sex == "男" || sex == "女") {
abs->p_arr[ret].sex = sex;
break;
}
else {
cout << "请重新输入: ";
}
}
// 添加年龄
int age;
cout << "请输入年龄: ";
while (true) {
cin >> age;
if (age >= 10 && age <= 100) {
abs->p_arr[ret].age = age;
break;
}
else {
cout << "请重新输入: ";
}
}
// 添加电话
cout << "请输入电话: ";
string phone;
while (true) {
cin >> phone;
if (phone.length() == 3) {
abs->p_arr[ret].phone = phone;
break;
}
else {
cout << "你输入的电话位数不对,请重新输入: ";
}
}
// 添加地址
cout << "请输入家庭住址: ";
cin >> abs->p_arr[ret].addr;
cout << "--------修改成功--------" << endl;
// 清屏的操作
system("pause");// 请按任意键继续
system("cls");
}
}
直接将size置零就行。
// 6.清空联系人
void clear_person(addr_book* abs)
{
// 直接将size的数量置为0就ok
abs->size = 0;
cout << "--------所有联系人已经全部清空--------" << endl;
system("pause");
system("cls");
}
通过用户输入判断是否退出系统,将用户输入的y或n统一转为大写进行比较
y退出系统,n回到菜单界面,输入其他内容,提示重新输入
// 0.退出函数
bool quite()
{
char n;
cout << "是否确认退出(Y/N): ";
while (true)
{
cin >> n;
if (toupper(n) == 'Y') {
cout << "欢迎下次使用!" << endl;
return false;
break;
}
else if (toupper(n) == 'N') {
return true;
break;
}
else {
cout << "输入错误,请重新输入: ";
}
}
}
#include
#include
#include
#define M 1000 // 定义联系人的最大个数
using namespace std;
struct person { // 联系人结构体
string name; // 姓名
string sex; // 性别
int age; // 年龄
string phone; // 电话
string addr; // 地址
};
struct addr_book {
struct person p_arr[M];
int size; // 通讯录中人的个数
};
// 菜单界面
void showmenu();
// 1.添加联系人
void add_person(addr_book* abs);
// 2.显示联系人
void show_person(addr_book* abs);
// 3.删除联系人
// 首先判断联系人是否存在
int isexist(addr_book* abs, string name);
// 具体的删除
void del_person(addr_book* abs);
// 4.查找联系人
void find_person(addr_book* abs);
// 5.修改联系人信息
void change_person(addr_book* abs);
// 6.清空联系人
void clear_person(addr_book* abs);
// 0.退出函数
bool quite();
int main()
{
struct addr_book abs;
abs.size = 0;
int select = 0;// 用户输入
bool flag = true;
while (flag) {
// 菜单调用
showmenu();
cin >> select;
switch (select) {
case 1:
// 1.添加联系人
add_person(&abs); // 利用地址传递,可以修饰实参
break;
case 2:
// 2.显示联系人
show_person(&abs);
break;
case 3:
// 3.删除联系人
del_person(&abs);
break;
case 4:
// 4.查找联系人
find_person(&abs);
break;
case 5:
// 5.修改联系人
change_person(&abs);
break;
case 6:
// 6.清空联系人
clear_person(&abs);
break;
case 0:
flag = quite();
//cout << "欢迎下次使用!" << endl;
//flag = false;
system("pause");
system("cls");
break;
}
}
return 0;
}
// 菜单界面
void showmenu()
{
cout << "--------通讯录管理系统--------" << endl;
cout << "\t1.添加联系人" << endl;
cout << "\t2.显示联系人" << endl;
cout << "\t3.删除联系人" << endl;
cout << "\t4.查找联系人" << endl;
cout << "\t5.修改联系人" << endl;
cout << "\t6.清空联系人" << endl;
cout << "\t0.推出通讯录" << endl;
cout << "------------------------------" << endl;
}
// 1.添加联系人
void add_person(addr_book* abs)
{
// 判断通讯录是否已满
if (abs->size == M) {
cout << "通讯录已满,无法添加!" << endl;
return;
}else{
string name;
// 添加姓名
cout << "请输入姓名: ";
cin >> name;
abs->p_arr[abs->size].name=name;
// 添加性别
string sex;
cout << "请输入性别: ";
while (true) {
cin >> sex;
if (sex == "男" || sex == "女") {
abs->p_arr[abs->size].sex = sex;
break;
}
else {
cout << "请重新输入: ";
}
}
// 添加年龄
int age;
cout << "请输入年龄: ";
while (true) {
cin >> age;
if (age >= 10 && age <= 100) {
abs->p_arr[abs->size].age = age;
break;
}
else {
cout << "请重新输入: ";
}
}
// 添加电话
cout << "请输入电话: ";
string phone;
while (true) {
cin >> phone;
if (phone.length() == 3) {
abs->p_arr[abs->size].phone = phone;
break;
}
else {
cout << "你输入的电话位数不对,请重新输入: ";
}
}
// 添加地址
cout << "请输入家庭住址: ";
cin >> abs->p_arr[abs->size].addr;
abs->size++;
cout << "--------添加成功--------" << endl;
// 清屏的操作
system("pause");// 请按任意键继续
system("cls");
}
}
// 2.显示联系人
void show_person(addr_book* abs)
{
// 判断通讯录中人数是否为0
if (abs->size == 0) {
cout << "当前的记录为空" << endl;
}
else {
for (int i = 0; i < abs->size; i++) {
cout << "姓名\t性别\t年龄\t电话\t家庭地址" << endl;
cout << abs->p_arr[i].name << "\t" << abs->p_arr[i].sex << "\t" << abs->p_arr[i].age
<< "\t" << abs->p_arr[i].phone << "\t" << abs->p_arr[i].addr << endl;
}
}
system("pause");
system("cls");
}
// 3.删除联系人
// 首先判断联系人是否存在
int isexist(addr_book* abs, string name)
{
for (int i = 0; i < abs->size; i++) {
if (abs->p_arr[i].name == name) {
return i; // 找到返回在数组中的编号
}
}
return -1;
}
// 具体的删除
void del_person(addr_book* abs)
{
string name;
cout << "请输入您要删除的联系人: ";
cin >> name;
int ret = isexist(abs, name);
if (ret == -1) {
cout << "查无此人" << endl;
}
else {
// 得到的是要删除的人的数组下标
// 要删除可以直接将后一个数据覆盖到要删除的数据上
for (int i = ret; i < abs->size; i++) {
abs->p_arr[i] = abs->p_arr[i + 1];
}
abs->size--;
cout << "--------删除成功--------" << endl;
}
system("pause");
system("cls");
}
// 4.查找联系人
void find_person(addr_book* abs)
{
cout << "请输入您要查找的联系人: ";
string name;
cin >> name;
int ret = isexist(abs, name);
if (ret == -1) {
cout << "您要查找的联系人不存在。" << endl;
}
else {
cout << "姓名\t性别\t年龄\t电话\t家庭地址" << endl;
cout << abs->p_arr[ret].name << "\t" << abs->p_arr[ret].sex << "\t" << abs->p_arr[ret].age
<< "\t" << abs->p_arr[ret].phone << "\t" << abs->p_arr[ret].addr << endl;
cout << "--------查找完毕--------" << endl;
}
system("pause");
system("cls");
}
// 5.修改联系人信息
void change_person(addr_book* abs)
{
cout << "请输入您要修改的联系人: ";
string name;
cin >> name;
int ret = isexist(abs, name);
if (ret == -1) {
cout << "查无此人。" << endl;
system("pause");// 请按任意键继续
system("cls");
}
else {
string name;
// 修改姓名
cout << "请输入姓名: ";
cin >> name;
abs->p_arr[ret].name = name;
// 修改性别
string sex;
cout << "请输入性别: ";
while (true) {
cin >> sex;
if (sex == "男" || sex == "女") {
abs->p_arr[ret].sex = sex;
break;
}
else {
cout << "请重新输入: ";
}
}
// 添加年龄
int age;
cout << "请输入年龄: ";
while (true) {
cin >> age;
if (age >= 10 && age <= 100) {
abs->p_arr[ret].age = age;
break;
}
else {
cout << "请重新输入: ";
}
}
// 添加电话
cout << "请输入电话: ";
string phone;
while (true) {
cin >> phone;
if (phone.length() == 3) {
abs->p_arr[ret].phone = phone;
break;
}
else {
cout << "你输入的电话位数不对,请重新输入: ";
}
}
// 添加地址
cout << "请输入家庭住址: ";
cin >> abs->p_arr[ret].addr;
cout << "--------修改成功--------" << endl;
// 清屏的操作
system("pause");// 请按任意键继续
system("cls");
}
}
// 6.清空联系人
void clear_person(addr_book* abs)
{
// 直接将size的数量置为0就ok
abs->size = 0;
cout << "--------所有联系人已经全部清空--------" << endl;
system("pause");
system("cls");
}
// 0.退出函数
bool quite()
{
char n;
cout << "是否确认退出(Y/N): ";
while (true)
{
cin >> n;
if (toupper(n) == 'Y') {
cout << "欢迎下次使用!" << endl;
return false;
break;
}
else if (toupper(n) == 'N') {
return true;
break;
}
else {
cout << "输入错误,请重新输入: ";
}
}
}
1. 菜单界面
2. 添加联系人
正常添加
输入有误的情况下添加
3. 显示联系人
4. 删除联系人
要删除的联系人存在
要删除的联系人不存在
5. 查找联系人
查找联系人存在于通讯录管理系统中
查找联系人不存在
6. 修改联系人
7. 清空联系人
8. 退出通讯录