栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++项目实战--通讯录管理系统-----注释超详解

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++项目实战--通讯录管理系统-----注释超详解

#include
#include
using namespace std;
#define MAX 1000
//1.界面的展示
//2.整体的架构搭建和退出的实现
//3.添加联系人(结构体的一点小应用)( 结构体的嵌套定义于访问 )
//4.显示联系人
//5.删除联系人
//6.查找联系人
//7.修改联系人
//8.清空联系人
struct person//人的结构体
{
	string m_name;
	int m_sex;
	int m_age;
	string m_phone;
	string m_Address;

};
struct Addressbooks//通讯录的结构体
{
	struct person Arr[MAX];//使用宏 可以方便我们维护数据
	int m_size=0;
};
void menu()
{
	cout << "****1.添加联系人****" << endl;
	cout << "****2.显示联系人****" << endl;
	cout << "****3.删除联系人****" << endl;
	cout << "****4.查找联系人****" << endl;
	cout << "****5.修改联系人****" << endl;
	cout << "****6.清空联系人****" << endl;
	cout << "****0.   退出   ****" << endl;
}
void addperson(struct Addressbooks* abs)//也可以用引用(起别名)的方式
{
	//添加前先看存满了吗
	if (abs->m_size >= MAX)
	{
		cout << "存储已满,不能再添加";
		return;
	}

	//添加:
	//1.姓名
	cout << "姓名:" << endl;
	string name;
	cin >> name;
	abs->Arr[abs->m_size].m_name = name;//结构体的嵌套
	//2.性别 1男 2女
	while (1)
	{
		cout << "性别";
		cout << "1.男 ";
		cout << "2.女" << endl;
		int x;
		cin >> x;
		if (x == 1 || x == 2)
		{
			abs->Arr[abs->m_size].m_age = x;
			break;//退出这个循环的唯一方式(逼迫你输入正确)
		}

	}
	//3.年龄
	int age = 0;
	cout << "年龄:";
	cin >> age;
	abs->Arr[abs->m_size].m_age = age;
	//4.手机号
	string phone;
	cout << "手机号:";
	cin >> phone;
	abs->Arr[abs->m_size].m_phone = phone;
	//5.家庭住址
	string add;
	cout << "家庭住址:" ;
	cin >> add;
	abs->Arr[abs->m_size].m_Address = add;
	//6.更新通讯录人数
	abs->m_size++;
	//告知用户输入成功
	cout << "添加成功" << endl;
	system("pause");
	system("cls");//清屏的操作
}
void showperson(Addressbooks *abs)
{
	//判断通讯录中的人数是否为0
	if (abs->m_size == 0)
	{
		cout << "当前记录为空" << endl;
		system("pause");
		system("cls");
		return;
	}
	for (int i = 0; i < abs->m_size; i++)//遍历(结构体数组也是数组)
	{
		cout << abs->Arr[i].m_name<<"  ";//先从最外面的结构体往里走
		cout << (abs->Arr[i].m_sex==1?"男":"女") << "  ";//利用三木运算符进行判断(简化)
		cout << abs->Arr[i].m_age << "  ";
		cout << abs->Arr[i].m_Address << "  ";
		cout << abs->Arr[i].m_phone <m_size; i++)
	{
		if (abs->Arr[i].m_name==name)//判断两个字符串是否相同   调用函数去判断
			return i;
	}
	return -1;
}
void deleteperson(Addressbooks*abs)//将通讯录传进来
{
	string name;
	cout << "请输入要删除的联系人:";
	cin >> name;
	int ret=isExit(abs,name);//调用函数 判断是否存在这个联系人
	if (ret != -1)//找到时传回来的是所在下标
	{
		//将后面的数据前移,覆盖这个数据
		for (int j = ret; ret < abs->m_size; j++)
		{
			abs->Arr[j] = abs->Arr[j + 1];
		}
		//删完后将通讯录中的人数减1(更新人数)
		abs->m_size--;
	}
	else
		cout << "查无此人";
	system("pause");
	system("cls");
}
//查找联系人
void findperson(Addressbooks* abs)
{
	cout << "请输入您要查找的人:" << endl;
	string name;
	cin >> name;
	int ret=isExit(abs,name);//为什么这里不加& :因为在这个函数中abs已经是指针了
	//指向了本来的abs 只是我们把形参和实参设置成同一个名字了 就是*p=a,p=&a的意思
	if (ret != -1)//找到了 返回的是所在地址 利用地址将结构体数组进行输出
	{
		cout << "姓名:" << abs->Arr[ret].m_name << endl;
		cout << "性别: " << abs->Arr[ret].m_sex << endl;
		cout << "年龄:" << abs->Arr[ret].m_age << endl;
		cout << "家庭住址: " << abs->Arr[ret].m_Address << endl;
		cout << "手机号:" << abs->Arr[ret].m_phone << endl;
		
	}
	else
	{
		cout << "查无此人" << endl;
	}
	system("pause");
	system("cls");
}
//修改联系人
void modifyperson(Addressbooks* abs)
{
	cout << "请输入要修改的联系人:";
	string name;
	cin >> name;
	int ret=isExit(abs,name);
	if (ret != -1)
	{
		//姓名
		string name;
		cout << "请输入姓名:" << endl;
		cin >> name;
		abs->Arr[ret].m_name = name;
		//性别
		int sex;
		cout << "请输入性别:" << endl;
		cin >> sex;
		abs->Arr[ret].m_sex = sex;
		//年龄
		int age;
		cout << "请输入年龄:" << endl;
		cin >> age;
		abs->Arr[ret].m_age = age;
		//电话
		string phone;
		cout << "请输入电话:" << endl;
		cin >> phone;
		abs->Arr[ret].m_phone = phone;
	}
	else
	{
		cout << "查无此人"<m_size = 0;//将当前的练习人置零,做逻辑上的清空
	cout << "通讯录已清空"<> select;//输入不用换行
		switch (select)
		{
		case 1://1.添加联系人
			addperson(&abs);
			break;
		case 2://2.显示联系人
			showperson(&abs);
			break;
		case 3://3.删除联系人   看这个人是否存在(查找 删除 修改都用到这一步)  再删
			deleteperson(&abs);//abs才是实际的操作对象 addressbooks和address都是结构体,即框架
			break;
		case 4://4.查找联系人
			findperson(&abs);
			break;
		case 5://5.修改联系人
			modifyperson(&abs);
			break;
		case 6://6.清空联系人
			cleanperson(&abs);
			break;
		case 0:
			cout << "欢迎下次使用" << endl;
			system("pause");//按任意键继续
			return 0;
			break;
		}
	}
	return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/925441.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号