【完结】自学C鸭鸭笔记(二)—— 通讯录管理系统

学习视频资料见B站:https://www.bilibili.com/video/BV1et411b73Z

1 系统要求

系统中需要实现的功能如下:

  • 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人
  • 显示联系人:显示通讯录中所有联系人信息
  • 删除联系人:按照姓名进行删除指定联系人
  • 查找联系人:按照姓名查看指定联系人信息
  • 修改联系人:按照姓名重新修改指定联系人
  • 清空联系人:清空通讯录中所有信息
  • 退出通讯录:退出当前使用的通讯录

2 创建项目

创建项目和源文件,之前讲过,这里不再赘述。

3 菜单功能

菜单界面如下:
在这里插入图片描述
步骤:

  • 封装一个函数来实现菜单的显示void showMenu()
  • 在main函数中执行这个函数

示例:

#include<iostream>
using namespace std;

//封装一个显示菜单的函数
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;
}

	int main()
{
		showMenu();

	system("pause");
	return 0;
}

4 退出功能

用switch语句实现

5 添加联系人

功能描述

实现添加联系人功能,联系人上限为1000人,联系人信息包括(姓名、性别、年龄、联系电话、家庭住址)

添加联系人实现步骤:

  • 设计联系人结构体
  • 设计通讯录结构体
  • main函数中创建通讯录
  • 封装添加联系人函数
  • 测试添加联系人功能

5.1 设计联系人结构体

联系人信息包括:姓名、性别、年龄、联系电话、家庭住址

示例

#include<string>
//设计联系人结构体
struct Contact
{
	string name;
	int gender; //1--男性 2--女性
	int age;
	string phoneNum;
	string address;
};

5.2设计通讯录结构体

里面包括了一个联系人结构体数组,以及目前通讯录中已有的人数。

示例:

#define MACX 1000
//创建通讯录结构体
struct contactBook
{
	Contact pensonArray[MAX]; //通讯录中是一个联系人构成的数组,最大1000个

	int size;                 //用来记录现有的联系人个数
};

5.3 main函数中创建通讯录变量

示例:

    //创建一个通讯录变量
	contactBook ctb;

	//给这个变量赋初值
	ctb.size = 0;  //一开始通讯录人数为零

5.4 封装一个添加联系人子函数

示例:

//封装添加联系人子函数
void addPerson(contactBook * p)
{
	if (p->size >= MAX)
	{
		cout << "抱歉,通讯录已满" << endl;  //判断通讯录是否已经满了
	}
	else
	{
		//姓名
		cout << "请输入联系人姓名:" << endl;
		string name;
		cin >> name;
		p->pensonArray[p->size].name = name;

		//性别
		cout << "请输入联系人性别:" << endl;
		cout << "1——男性" << endl;
		cout << "2——女性" << endl;
		int gender;
		while (1)
		{
			cin >> gender;
			if (gender == 1 || gender == 2)
			{
				p->pensonArray[p->size].gender = gender;
				break;
			}
			else
			{
				cout << "请输入正确的性别!" << endl;

			}
		}

		//年龄
		cout << "请输入联系人年龄:" << endl;
		int age;
		cin >> age;
		p->pensonArray[p->size].age = age;

		//电话号码
		cout << "请输入联系人电话号码:" << endl;
		string num;
		cin >> num;
		p->pensonArray[p->size].phoneNum = num;

		//住址
		cout << "请输入联系人地址:" << endl;
		string add;
		cin >> add;
		p->pensonArray[p->size].address = add;

		//更新通讯录人数
		p->size++;

		cout<<"联系人 "<< name << " 添加成功!" << endl;

		system("pause"); //按任意键继续
		system("cls");  //清屏操作
	}
}

6 显示联系人

封装显示联系人子函数
示例:

//2.封装显示联系人子函数
void showPerson(contactBook * p)
{
	//判断通讯录是否为空
	if (p->size == 0)
	{
		cout << "当前通讯录为空!" << endl;
	}
	else
	{
		for (int i = 0; i < p->size; i++)
		{
			cout << "姓名:" << p->pensonArray[i].name << "\t"
				 << "性别:" << (p->pensonArray[i].gender == 1 ? "男" : "女") << "\t"
				 << "年龄:" << p->pensonArray[i].age << "\t"
				 << "电话:" << p->pensonArray[i].phoneNum << "\t"
				 << "住址:" << p->pensonArray[i].address << endl;
		}
	}

	system("pause");
	system("cls");
}

7 删除联系人

功能描述:按照姓名进行删除指定联系人

删除联系人实现步骤:

  • 封装检测联系人是否存在
  • 封装删除联系人函数
  • 测试删除联系人功能

7.1 封装检测联系人是否存在的子函数

示例:

//3.封装一个检测联系人是否存在的函数,存在返回位置,不存在返回-1
//  传入的参数 参数1:通讯录  参数2:查找的人
int weatherExist(contactBook * p, string name)
{
	for (int i = 0; i < p->size; i++)
	{
		if (p->pensonArray[i].name == name)
		{
			return i;
		}
	}
	return -1;
}

7.2 封装一个删除联系人的函数

示例:

//4.封装一个删除联系人的函数
void deletePerson(contactBook * p)
{
	cout << "请输入想要删除的联系人姓名:" << endl;
	string name;
	cin >> name;

	int resp = weatherExist(p, name);
	if (resp !=-1)
	{
		for (int i = resp; i < p->size; i++)
		{
			p->pensonArray[i] = p->pensonArray[i + 1];
		}
		p->size--;

		cout << "联系人 " << name << " 删除成功!" << endl;
	}
	else
	{
		cout << "查无此人!" << endl;
	}

	system("pause");
	system("cls");
}

8 查找联系人

封装一个查找联系人的子函数
示例:

//5.封装一个查找联系人的子函数
void findPerson(contactBook * p)
{
	cout << "请输入您想要查找的联系人姓名:" << endl;
	string name;
	cin >> name;
	int resp = weatherExist(p, name);
	if (resp != -1)   //联系人存在
	{
		cout << "姓名:" << p->pensonArray[resp].name << "\t"
			<< "性别:" << (p->pensonArray[resp].gender == 1 ? "男" : "女") << "\t"
			<< "年龄:" << p->pensonArray[resp].age << "\t"
			<< "电话:" << p->pensonArray[resp].phoneNum << "\t"
			<< "住址:" << p->pensonArray[resp].address << endl;
	}
	else     //联系人不存在
	{
		cout << "查无此人" << endl;
	}

	system("pause");
	system("cls");
}

9 修改联系人

封装一个修改联系人的子函数
示例:

//6.封装一个修改联系人的子函数
void modifyPerson(contactBook * p)
{
	cout << "请输入您想要修改的联系人姓名:" << endl;
	string name;
	cin >> name;
	int resp = weatherExist(p, name);
	if (resp != -1)   //联系人存在
	{
		//姓名
		cout << "请输入修改后联系人姓名:" << endl;
		string name;
		cin >> name;
		p->pensonArray[resp].name = name;

		//性别
		cout << "请输入修改后联系人性别:" << endl;
		cout << "1——男性" << endl;
		cout << "2——女性" << endl;
		int gender;
		while (1)
		{
			cin >> gender;
			if (gender == 1 || gender == 2)
			{
				p->pensonArray[resp].gender = gender;
				break;
			}
			else
			{
				cout << "请输入正确的性别!" << endl;

			}
		}

		//年龄
		cout << "请输入修改后联系人年龄:" << endl;
		int age;
		cin >> age;
		p->pensonArray[resp].age = age;

		//电话号码
		cout << "请输入修改后联系人电话号码:" << endl;
		string num;
		cin >> num;
		p->pensonArray[resp].phoneNum = num;

		//住址
		cout << "请输入修改后联系人地址:" << endl;
		string add;
		cin >> add;
		p->pensonArray[resp].address = add;

		cout << "联系人 " << name << " 修改成功!" << endl;
	}
	else     //联系人不存在
	{
		cout << "查无此人" << endl;
	}

	system("pause");
	system("cls");
}

10 清空联系人

封装清空联系人函数
示例:

//7.封装一个清空联系人的函数
void cleanPerson(contactBook * p)
{
	p->size = 0; //做逻辑清空操作
	cout << "清空通讯录成功!" << endl;

	system("pause");
	system("cls");
}

11 所有程序

#include<iostream>
using namespace std;
#include<string>

#define MAX 1000   //这里用宏定义方便以后直接修改人数上限

//封装一个显示菜单的函数
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;
}

//设计联系人结构体
struct Contact
{
	string name;
	int gender; //1--男性 2--女性
	int age;
	string phoneNum;
	string address;
};

//创建通讯录结构体MAX
struct contactBook
{
	Contact pensonArray[MAX]; //通讯录中是一个联系人构成的数组,最大1000个

	int size;                 //用来记录现有的联系人个数
};

//1.封装添加联系人子函数
void addPerson(contactBook * p)
{
	if (p->size >= MAX)
	{
		cout << "抱歉,通讯录已满" << endl;  //判断通讯录是否已经满了
	}
	else
	{
		//姓名
		cout << "请输入联系人姓名:" << endl;
		string name;
		cin >> name;
		p->pensonArray[p->size].name = name;

		//性别
		cout << "请输入联系人性别:" << endl;
		cout << "1——男性" << endl;
		cout << "2——女性" << endl;
		int gender;
		while (1)
		{
			cin >> gender;
			if (gender == 1 || gender == 2)
			{
				p->pensonArray[p->size].gender = gender;
				break;
			}
			else
			{
				cout << "请输入正确的性别!" << endl;

			}
		}

		//年龄
		cout << "请输入联系人年龄:" << endl;
		int age;
		cin >> age;
		p->pensonArray[p->size].age = age;

		//电话号码
		cout << "请输入联系人电话号码:" << endl;
		string num;
		cin >> num;
		p->pensonArray[p->size].phoneNum = num;

		//住址
		cout << "请输入联系人地址:" << endl;
		string add;
		cin >> add;
		p->pensonArray[p->size].address = add;

		//更新通讯录人数
		p->size++;

		cout<<"联系人 "<< name << " 添加成功!" << endl;

		system("pause"); //按任意键继续
		system("cls");  //清屏操作
	}
}

//2.封装显示联系人子函数
void showPerson(contactBook * p)
{
	//判断通讯录是否为空
	if (p->size == 0)
	{
		cout << "当前通讯录为空!" << endl;
	}
	else
	{
		for (int i = 0; i < p->size; i++)
		{
			cout << "姓名:" << p->pensonArray[i].name << "\t"
				 << "性别:" << (p->pensonArray[i].gender == 1 ? "男" : "女") << "\t"
				 << "年龄:" << p->pensonArray[i].age << "\t"
				 << "电话:" << p->pensonArray[i].phoneNum << "\t"
				 << "住址:" << p->pensonArray[i].address << endl;
		}
	}

	system("pause");
	system("cls");
}

//3.封装一个检测联系人是否存在的函数,存在返回位置,不存在返回-1
//  传入的参数 参数1:通讯录  参数2:查找的人
int weatherExist(contactBook * p, string name)
{
	for (int i = 0; i < p->size; i++)
	{
		if (p->pensonArray[i].name == name)
		{
			return i;
		}
	}
	return -1;
}

//4.封装一个删除联系人的函数
void deletePerson(contactBook * p)
{
	cout << "请输入想要删除的联系人姓名:" << endl;
	string name;
	cin >> name;

	int resp = weatherExist(p, name);
	if (resp !=-1)
	{
		for (int i = resp; i < p->size; i++)
		{
			p->pensonArray[i] = p->pensonArray[i + 1];   //数组整体前移,覆盖掉要删除的联系人
		}
		p->size--;

		cout << "联系人 " << name << " 删除成功!" << endl;
	}
	else
	{
		cout << "查无此人!" << endl;
	}

	system("pause");
	system("cls");
}

//5.封装一个查找联系人的子函数
void findPerson(contactBook * p)
{
	cout << "请输入您想要查找的联系人姓名:" << endl;
	string name;
	cin >> name;
	int resp = weatherExist(p, name);
	if (resp != -1)   //联系人存在
	{
		cout << "姓名:" << p->pensonArray[resp].name << "\t"
			<< "性别:" << (p->pensonArray[resp].gender == 1 ? "男" : "女") << "\t"
			<< "年龄:" << p->pensonArray[resp].age << "\t"
			<< "电话:" << p->pensonArray[resp].phoneNum << "\t"
			<< "住址:" << p->pensonArray[resp].address << endl;
	}
	else     //联系人不存在
	{
		cout << "查无此人" << endl;
	}

	system("pause");
	system("cls");
}

//6.封装一个修改联系人的子函数
void modifyPerson(contactBook * p)
{
	cout << "请输入您想要修改的联系人姓名:" << endl;
	string name;
	cin >> name;
	int resp = weatherExist(p, name);
	if (resp != -1)   //联系人存在
	{
		//姓名
		cout << "请输入修改后联系人姓名:" << endl;
		string name;
		cin >> name;
		p->pensonArray[resp].name = name;

		//性别
		cout << "请输入修改后联系人性别:" << endl;
		cout << "1——男性" << endl;
		cout << "2——女性" << endl;
		int gender;
		while (1)
		{
			cin >> gender;
			if (gender == 1 || gender == 2)
			{
				p->pensonArray[resp].gender = gender;
				break;
			}
			else
			{
				cout << "请输入正确的性别!" << endl;

			}
		}

		//年龄
		cout << "请输入修改后联系人年龄:" << endl;
		int age;
		cin >> age;
		p->pensonArray[resp].age = age;

		//电话号码
		cout << "请输入修改后联系人电话号码:" << endl;
		string num;
		cin >> num;
		p->pensonArray[resp].phoneNum = num;

		//住址
		cout << "请输入修改后联系人地址:" << endl;
		string add;
		cin >> add;
		p->pensonArray[resp].address = add;

		cout << "联系人 " << name << " 修改成功!" << endl;
	}
	else     //联系人不存在
	{
		cout << "查无此人" << endl;
	}

	system("pause");
	system("cls");
}
//7.封装一个清空联系人的函数
void cleanPerson(contactBook * p)
{
	p->size = 0; //做逻辑清空操作
	cout << "清空通讯录成功!" << endl;

	system("pause");
	system("cls");
}
int main()
{
	int select = 0;//创建一个变量,用来接收用户输入的选项
	//创建一个通讯录变量
	contactBook ctb;

	//给这个变量赋初值
	ctb.size = 0;  //一开始通讯录人数为零

	while (1)      //用while实现能够一直操作的目的
	{
		showMenu();

		cin >> select;
		switch (select)
		{
		case 1:
			addPerson(&ctb);  //创建一个子函数,实现添加联系人的功能,这里采用地址传递
			break;
		case 2:
			showPerson(&ctb); //封装一个显示联系人的子函数,也是地址传递
			break;
		case 3:
			deletePerson(&ctb); //封装的删除联系人的子函数
			break;
		case 4:
			findPerson(&ctb); //封装的查找联系人的子函数
			break;
		case 5:
			modifyPerson(&ctb);  //封装的修改联系人的子函数
			break;
		case 6:
			cleanPerson(&ctb); //封装的清空联系人的函数
			break;
		case 0:
			cout << "欢迎您下次使用本系统" << endl;
			system("pause");  
			return 0;  //可以直接跳出main函数,结束程序
			break;
		default:
			cout << "请输入正确的序号" << endl;
			break;
		}
	}
		

	system("pause");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dreautumn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值