【C++】2021-09-15-C++叒复习过程(四)(程序实践)

一个通讯录的小程序实现:

#include<iostream>
#include<string>
#define max 1000
using namespace std;

//显示操作界面

	void show_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;

		}
	
//添加联系人

	//设计联系人的结构体

	struct person
	{

		string per_name;
		int per_sex;
		int per_age;
		int per_phone;
		string per_home;

	};

	//设计通讯录结构体

	struct addressbook
	{

		struct person person_arr[max];		//联系人数组
		int per_size;						//联系人数量

	};

	//封装设计联系人函数

	void add_person(addressbook *abs)
	{

	//	判断通讯录是不是已经满了

		if (abs->per_size == max)
		{
			cout << "通讯录已满,无法继续添加" << endl;
			return;
		}
		else
		{

	//开始添加联系人
			
	//姓名
			cout << "请输入姓名" << endl;
			string name;
			cin >> name;
			abs->person_arr[abs->per_size].per_name = name;

	//性别
			cout << "请输入性别" << ": 1 代表男性 2代表女性" << endl;
			int sex;
			while(true)
			{
				cin >> sex;
				if (sex == 1 || sex == 2)
				{
					abs->person_arr[abs->per_size].per_sex = sex;
					break;
				}
				else
					cout << "请重新输入" << endl;
			}

	//年龄
			cout << "请输入年龄" << endl;
			int age;
			while (true)
			{
				cin >> age;
				if (age >= 0 && age <= 150)
				{
					abs->person_arr[abs->per_size].per_age = age;
					break;
				}
				else
					cout << "你输入的年龄似乎不正确,请检查后再输入" << endl;
			}

	//电话
			cout << "请输入6位电话号码" << endl;
			int number;
			while(true)
			{
				cin >> number;
				if (number >= 100000 && number <= 999999)
				{
					abs->person_arr[abs->per_size].per_phone = number;
					break;
				}
				else
					cout << "您输入的电话号码位数有误,请检查后重新输入" << endl;
			}
	//住址
			cout << "请输入家庭住址" << endl;
			string address;
			cin >> address;
				abs->person_arr[abs->per_size].per_home = address;

	//更新通讯录人数
			abs->per_size++;
     
	//优化界面
			system("pause");	//请按任意键继续
			system("cls");		//清屏
		}
	}

	//显示联系人函数
	void show_person(addressbook* abs)
	{

	//判断联系人通讯录是否为空
		if (abs->per_size == 0)
		{
			cout << "您还未添加任何联系人" << endl;
		}
		else
		{
			for(int i=0;i<abs->per_size;i++)
			{
				cout << "姓名:" << abs->person_arr[i].per_name << '\t';
				cout << "性别:" << (abs->person_arr[i].per_sex==1?"男":"女")<< '\t';
				cout << "年龄:" << abs->person_arr[i].per_age <<'\t';
				cout << "电话:" << abs->person_arr[i].per_phone << '\t';
				cout << "住址:" << abs->person_arr[i].per_home << endl;
			}
			system("pause");
			system("cls");

		}


	//显示联系人
	
	}

	//查找联系人是否存在
	int if_exit_person(addressbook* abs, string name)
	{
		for (int i = 0; i < abs->per_size; i++)
	{
			if (abs->person_arr[i].per_name == name)
			{
				return i;//返回这个人的姓名
			}
			else
				return -1;
	}
	}

	//删除联系人
	void delete_person(addressbook* abs)
	{
		cout << "请输入您要删除的联系人" << endl;
		string name;
		cin >> name;
		int ret;
		ret = if_exit_person(abs, name);
		if (ret == -1)
			cout << "查无此人" << endl;
		else
		{
			if (ret = abs->per_size)
				abs->per_size--;
			else
			{
				for (int i = ret; i < abs->per_size; i++)
				{
					abs->person_arr[i] = abs->person_arr[i+1];
				
				}
				abs->per_size--;
			}
		}
		system("pause");
		system("cls");
	}

	//查找联系人
	void find_person(addressbook* abs)
	{
		cout << "请输入要查找的联系人" << endl;
		string name;
		cin >> name;
		int ret = if_exit_person(abs, name);
		if (ret == -1)
			cout << "查无此人" << endl;
		else
		{
			cout << "姓名:" << abs->person_arr[ret].per_name << '\t';
			cout << "性别:" << (abs->person_arr[ret].per_sex == 1 ? "男" : "女") << '\t';
			cout << "年龄:" << abs->person_arr[ret].per_age << '\t';
			cout << "电话:" << abs->person_arr[ret].per_phone << '\t';
			cout << "住址:" << abs->person_arr[ret].per_home << endl;
		}
		system("pause");
		system("cls");

	}

	//修改联系人
	void modify_person(addressbook* abs)
	{
		cout << "请输入您要修改的联系人" << endl;
		string name;
		cin >> name;
		int ret;
		ret = if_exit_person(abs, name);
		if (ret != -1)
			cout << "查无此人" << endl;
		else
		{
			//姓名
			string name;	
			cout << "请输入修改后的姓名" << endl;
			cin >> name;
			abs->person_arr[ret].per_name = name;
			
			//性别
			cout << "请输入修改后的性别" << ": 1 代表男性 2代表女性" << endl;
			int sex;
			while (true)
			{
				cin >> sex;
				if (sex == 1 || sex == 2)
				{
					abs->person_arr[ret].per_sex = sex;
					break;
				}
				else
					cout << "请重新输入" << endl;
			}

			//年龄
			cout << "请输入修改后的年龄" << endl;
			int age;
			while (true)
			{
				cin >> age;
				if (age >= 0 && age <= 150)
				{
					abs->person_arr[abs->per_size].per_age = age;
					break;
				}
				else
					cout << "你输入的年龄似乎不正确,请检查后再输入" << endl;
			}

			//电话
			cout << "请输入修改后的6位电话号码" << endl;
			int number;
			while (true)
			{
				cin >> number;
				if (number >= 100000 && number <= 999999)
				{
					abs->person_arr[ret].per_phone = number;
					break;
				}
				else
					cout << "您输入的电话号码位数有误,请检查后重新输入" << endl;
			}

			//住址
			cout << "请输入家庭住址" << endl;
			string address;
			cin >> address;
			abs->person_arr[ret].per_home = address;

			cout << "修改成功" << endl;
		}
		system("pause");	//请按任意键继续
		system("cls");		//清屏
	}

	//清空联系人
	void cleanperson(addressbook* abs)
	{
		abs->per_size = 0;
		cout << "所有人的信息都已经清空" << endl;
		system("pause");	//请按任意键继续
		system("cls");		//清屏
	}

	int main()
{

//创建通讯录

	addressbook abs_1;

//初始化通讯录中的人员个数

	abs_1.per_size = 0;

	while(true)
{
//显示操作界面

	show_menu();
	int delect = 0;
	cin >> delect;

	switch (delect)
	{ 
		case 1: 
			add_person(&abs_1);
			break;
		case 2:
			show_person(&abs_1);
			break;
		case 3:
			delete_person(&abs_1);
			break;
		case 4: 
			find_person(&abs_1);
			break;
		case 5: 
			modify_person(&abs_1);
			break;
		case 6:
			cleanperson(&abs_1);
			break;

		//退出通讯录	

		case 0:	
		{
		cout << "已退出,欢迎下次使用" << endl;
		system("pause");
		return 0;
		break; 
		}
		
		default:
		break;
	}
}
	
	return 0;
}

具体的已经写在注释里了,写到这里是越来越懒了不想多说话了;再去开一门数据结构。
(掐指一算,我要总结回顾或者学习的大概有C++,Python,Java,数据结构,离散数学,普通物理,数学分析,复变函数,线性代数,概率论,电路与电子线路,数字设计和计算机体系结构,统计学习方法……???)
爬了爬了;还好这学期没选五选二的数学,不然死定了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值