0
点赞
收藏
分享

微信扫一扫

用c++实现对通讯录的人员管理

TiaNa_na 2022-03-12 阅读 50
c++

 写了一个关于通讯录管理的程序,没啥技术含量,发给喜好朋友们玩玩

made by Tony杨竣尧
///仅供个人娱乐使用///
//-------------------------//
//-------------------------//
#include<iostream>//菜单功能
#include <string>
constexpr auto MAX = 1000;//方便代码员对他维护,之后的修改可以直接对最上面的MAX进行修改,不需要修改下面的每一个常量
using namespace std;
struct people {
	string name;
	int sex;//1 男 2 女
	string num;
	int age = 0;
	string address;
};
struct addresslist {
	struct people personarr[MAX];
	int m_size = 0;
};
//1.添加联系人
void addperson(addresslist* abs) {//注意abs的位置
	if (abs->m_size == MAX) {
		cout << "通讯录已满,无法添加!" << endl;
		return;
	}
	else {
		string name;
		cout << "请输入姓名:" << endl;
		cin >> name;
		abs->personarr[abs->m_size].name = name;
		//第一个abs是指这个联系人在总的人中在第几个,之后那个abs的name是其中那个人的姓名
		cout << "请输入性别:(请输入1或者2)" << endl;
		cout << "1--男" << endl;
		cout << "2--女" << endl;
		int sex = 0;
		while (true) {
			cin >> sex;
			if (sex == 1 || sex == 2) {//如果输入的是1或者2,可以统一出循环,否则需要一直输入
				abs->personarr[abs->m_size].sex = sex;
				break;//如果输入的是对的,就退出
			}
			else {
				cout << "性别有误!重新输入!" << endl;
				break;
			}
		}
		cout << "请输入年龄: " << endl;
		int age = 0;
		while (true) {
			cin >> age;
			if (age >= 0 && age <= 100) {
				abs->personarr[abs->m_size].age = age;
				break;
			}
			else {
				cout << "输入年龄不在常人范围之内!重新输入!" << endl;
			}
			
		}
		string num;
		cout << "请输入该联系人的电话号码:" << endl;
		cin >> num;
				abs->personarr[abs->m_size].num = num;
		cout << "请输入该联系人的家庭住址:" << endl;
		string place;
		cin >> place;
		abs->personarr[abs->m_size].address = place;
		//最后还要更新一下通讯录之中的人数
		abs->m_size++;
		cout << "添加成功" << endl;
		system("pause");
		system("cls");
	}
}
//添加联系人
void showperson(addresslist* abs) {
	//如果联系人的数量为0,则显示记录为空
	if (abs->m_size == 0) {
		cout << "当前记录为空" << endl;
	}
	else {
		for (int i = 0; i < abs->m_size; i++) {
			cout << "姓名: " << abs->personarr[i].name << "\t";
			cout << "性别: " ;
			if (abs->personarr[i].sex == 1) {
				cout << "男" << "\t";
			}
			else {
				cout << "女" << "\t";
			}
			cout << "联系方式: " << abs->personarr[i].num<< "\t";
			cout << "年龄: " << abs->personarr[i].age<< "\t";
			cout << "家庭住址: " << abs->personarr[i].address << endl << endl;
		}
	}
	system("pause");
	system("cls");
}
//显示联系人,全部
int isexist(addresslist* abs, string name) {
	for (int i = 0; i < abs->m_size; i++) {
		if (abs->personarr[i].name == name) {
			return i;
		}
}
	return -1;
}///删除联系人,首先测试是否存在该联系人,再进行判断是否删除
//判断是否存在联系人
//检测联系人是否存在,按照姓名查找
//删除指定联系人
void deleteperson(addresslist* abs) {
	cout << "请输入您要删除的联系人" << endl;

	string name;
	cin >> name;
	int ret = isexist(abs, name);
	if (ret != -1) {
		//找到此人,进行删除操作
		for (int i = ret; i < abs->m_size; i++) {
			abs->personarr[i] = abs->personarr[i + 1];
		}
		//将后一个人的变量赋值给前一个人,进行删除
		abs->m_size--;
		//重新更新通讯录中的人员数量
		cout << "删除成功!" << endl;
	}
	//这里不可以用取地址符号,因为前面已经是以地址为传递变量了,否则就二次取地址了
}
//删除联系人
void findperson(addresslist* abs) {
	cout << "请输入您要查找的联系人: ";
	string name;
	cin >> name;
	//判断指定联系人是否存在
	int ret = isexist(abs, name);
	if (ret != -1){
		cout << "姓名: " << abs->personarr[ret].name << "\t";
		cout << "性别: ";
		if (abs->personarr[ret].sex == 1) {
			cout << "男" << "\t";
		}
		else {
			cout << "女" << "\t";
		}
			cout << "联系方式: " << abs->personarr[ret].num << "\t";
			cout << "年龄: " << abs->personarr[ret].age << "\t";
			cout << "家庭住址: " << abs->personarr[ret].address << endl << endl;
	}
	else {
		cout << "查无此人" << endl;
	}
	system("pause");
	system("cls");
}
//查找并显示联系人,单独
void modifyperson(addresslist* abs) {
	cout << "请输入要修改的联系人: ";
	string name;
	cin >> name;
	int ret = isexist(abs, name);
	//如果有这个人就进行修改
	if (ret != -1) {
		cout << "原姓名: " << abs->personarr[ret].name << "\t";
		string name;
		cout << "请输入新姓名: " << endl;
		cin >> name;
		cout << endl;
		cout << "原性别: ";
		if (abs->personarr[ret].sex == 1) {
			cout << "男" << "\t";
		}
		else {
			cout << "女" << "\t";
		}
		cout << "请输入新性别: " << endl;
		cout << "1--男" << endl;
		cout << "2--女" << endl;
		int sex;
		cin >> sex;
		abs->personarr[ret].sex=sex;
		cout << endl;
		cout << "原联系方式: " << abs->personarr[ret].num << "\t";
		cout << "请输入新联系方式: " << endl;
		string numn;
		cin >> numn;
		abs->personarr[ret].num = numn;
		cout << endl;
		cout << "原年龄: " << abs->personarr[ret].age << "\t";
		int agen;
		cin >> agen;
		abs->personarr[ret].age = agen;
		cout << endl;
		cout << "原家庭住址: " << abs->personarr[ret].address << endl;
		string addressn;
		cin >> addressn;
		abs->personarr[ret].address = addressn;
		cout << "已完成更新!" << endl;
		system("pause");
}
	else {
		cout << "查无此人" << endl;
		system("pause");
	}
	//如果查不到这个人,就显示没有这个人
}
void deleteall(addresslist* abs) {
	//清空所有联系人
	abs->m_size = 0;
	cout << "通讯录已清空" << endl;
	system("pause");
	system("cls");
}
//封装显示该界面的函数
void showMenu() {
	//后在main函数中进行调用即可
	cout << "1.添加联系人" << endl;
	cout << "2.显示联系人" << endl;
	cout << "3.删除联系人" << endl;
	cout << "4.存在联系人" << endl;
	cout << "5.查找联系人" << endl;
	cout << "6.修改联系人" << endl;
	cout << "7.清空联系人" << endl;
	cout << "0.退出通讯录" << endl;
}
int main() {
	cout << "写了一个关于通讯录管理的程序,没啥技术含量,发给喜好朋友们玩玩" << endl;
	system("pause");
	system("cls");
	//创建一个通讯录的结构体变量
	showMenu();//菜单的调用
	addresslist abs;
	//初始的通讯录中人员数量
	abs.m_size = 0;
	//!!!!!一开始的m_size 为零,所以之后每添加一个联系人就会多加一个数
	int select = 0;
	while (true) {
		cin >> select;
		switch (select)
		{
		case 1://1.添加联系人
			addperson(&abs);//利用地址传递
			break;
		case 2://2.显示联系人
			showperson(&abs);
			break;
		case 3://3.删除联系人
			deleteperson(&abs);
			system("pause");
			system("cls");
			break;
		case 4://4.存在联系人
		{
			cout << "请输入删除联系人的姓名" << endl;
			string namein;
			cin >> namein;
			if (isexist(&abs, namein) == -1) {
				cout << "查无此人" << endl;
			}
			else {
				cout << "找到此人" << endl;
				deleteperson(&abs);
			}
		}
		///如果switch语句下面的代码很长,则有可能会报错,此时应该用一个括号把代码都括起来
		//防止报错!
		system("pause");
			system("cls");
			break;
		case 5://5.查找联系人
			findperson(&abs);
			break;

		case 6://6.修改联系人
			modifyperson(&abs);
			system("cls");
			break;
		case 7://清空联系人
			break;
		case 0://0.退出通讯录
			cout << "欢迎下次使用" << endl;
			system("pause");
			return 0;
			//因为有这个return 0所以他不是真正意义上的死循环
			break;
		default:
			break;
		}
		showMenu();//菜单的调用
	}
	system("pause");
	return 0;
}
举报

相关推荐

0 条评论