C++(七):简单通讯录系统

本文介绍了使用C++编程实现一个简单的通讯录系统,涵盖了结构体定义、联系人增删查改功能,以及如何优化数据管理,如通过LXR_shuliang变量跟踪通讯录状态。
摘要由CSDN通过智能技术生成

自己的简单通讯录

0.功能介绍

我们的通讯录有以下功能:
在这里插入图片描述

1.通讯录菜单程序

显示通讯录的功能菜单:

#ifndef CAIDAN_H
#define CAIDAN_H
#include <iostream>
#include <string>
void f_caidan();
void f_caidan()
{
	std::cout << "**********************" << std::endl;
	std::cout << "**** 1.添加联系人 ****" << std::endl;
	std::cout << "**** 2.显示联系人 ****" << std::endl;
	std::cout << "**** 3.删除联系人 ****" << std::endl;
	std::cout << "**** 4.查找联系人 ****" << std::endl;
	std::cout << "**** 5.修改联系人 ****" << std::endl;
	std::cout << "**** 6.清空联系人 ****" << std::endl;
	std::cout << "**** 0.退出通讯录 ****" << std::endl;
	std::cout << "**********************" << std::endl;
	return;
}
#endif

2.结构体创建

结构体代表联系人,包含了联系人的名字、性别、年龄、电话号码和地址。

#ifndef LIANXIREN_H
#define LIANXIREN_H

#include <iostream>
#include <string>

struct LianXiRen
{
	std::string name;
	std::string sex;
	int age;
	std::string number;
	std::string location;
};

#endif

3.添加联系人

#ifndef TIANJIA_H
#define TIANJIA_H

#include <iostream>
#include <string>
#include <vector>

#include "lianxiren.h"

void f_tianjia(LianXiRen(&LXR)[1000]);

void f_tianjia(LianXiRen (&LXR)[1000])
{
	for(auto &r : LXR)
	{
		if (r.name.empty())
		{
			std::cout << "请输入联系人姓名:" << std::endl;
			std::cin >> r.name;
			std::cout << "请输入联系人性别:" << std::endl;
			std::cin >> r.sex;
			std::cout << "请输入联系人年龄:" << std::endl;
			std::cin >> r.age;
			std::cout << "请输入联系人电话:" << std::endl;
			std::cin >> r.number;
			std::cout << "请输入联系人地址:" << std::endl;
			std::cin >> r.location;
			std::cout << "保存成功!" << std::endl;
			break;
		}
	}
	std::cout << "继续添加联系人吗?" << std::endl;
	std::cout << "1.yes\t" << "2.no\t" << std::endl;
	int flag;
	std::cin >> flag;
	switch (flag)
	{
	case 1:
		f_tianjia(LXR);
		break;
	case 2:
		break;
	default:
		break;
	}
	
}
#endif

4.显示联系人

#ifndef XIANSHI_H
#define XIANSHI_H

#include <iostream>
#include <string>

#include "lianxiren.h"

void f_xianshi(LianXiRen(&LXR)[1000]);

void f_xianshi(LianXiRen(&LXR)[1000])
{
	int time = 0;
	for (auto &r : LXR)
	{
		if (!r.name.empty())
		{
			std::cout << r.name << "\t" << r.sex << "\t"
				<< r.age << "\t" << r.number << "\t" << r.location << std::endl;
		}
		else 
		{
			if (time == 0) std::cout << "通讯录为空!" << std::endl;
		}
		++time;
	}
}

#endif

5.删除联系人

#ifndef SHANCHU_H
#define SHANCHU_H

#include <iostream>
#include <string>

#include "lianxiren.h"

void f_shanchu(LianXiRen(&LXR)[1000]);

void f_shanchu(LianXiRen (&LXR)[1000])
{
	std::cout << "您想删除谁?" << std::endl;
	std::string name;
	std::cin >> name;
	for (auto &r : LXR)
	{
		if (r.name == name)
		{
			std::string s;
			r.name = s;
			r.age = 0;
			r.location = s;
			r.number = s;
			r.sex = s;
			std::cout << name << "已删除!" << std::endl;
			break;
		}
		else if ((&r) == &LXR[999])
		{
			std::cout << "查无此人!" << std::endl;
		}
	}

}



#endif

6.查找联系人

#ifndef CHAZHAO_H
#define CHAZHAO_H

#include <iostream>
#include <string>

#include "lianxiren.h"

void f_chazhao(LianXiRen(&LXR)[1000]);

void f_chazhao(LianXiRen(&LXR)[1000])
{
	int time = 0;
	std::cout << "您想查找谁?" << std::endl;
	std::string name;
	std::cin >> name;
	for (auto &r : LXR)
	{
		if (r.name == name)
		{
			std::cout << r.name << "\t" << r.sex << "\t"
				<< r.age << "\t" << r.number << "\t" << r.location << std::endl;
			std::cout << "查找完成" << std::endl;
			break;
		}
		else
		{
			if (time == 999) std::cout << "查无此人!" << std::endl;
		}
		++time;
	}
}



#endif

7.修改联系人

#ifndef XIUGAI_H
#define XIUGAI_H

#include <iostream>
#include <string>

#include "lianxiren.h"

void f_xiugai(LianXiRen(&LXR)[1000]);

void f_xiugai(LianXiRen(&LXR)[1000])
{
	std::cout << "您想修改谁:" << std::endl;
	std::string name;
	std::cin >> name;
	for (auto &r : LXR)
	{
		if (r.name == name)
		{
			std::cout << "请输入新的联系人姓名:" << std::endl;
			std::cin >> r.name;
			std::cout << "请输入新的联系人性别:" << std::endl;
			std::cin >> r.sex;
			std::cout << "请输入新的联系人年龄:" << std::endl;
			std::cin >> r.age;
			std::cout << "请输入新的联系人电话:" << std::endl;
			std::cin >> r.number;
			std::cout << "请输入新的联系人地址:" << std::endl;
			std::cin >> r.location;
			std::cout << "新的联系人保存成功!" << std::endl;
			break;
		}
		else if ((&r) == &LXR[999])
		{
			std::cout << "查无此人!" << std::endl;
		}
	}
}

#endif

8 清空联系人

#ifndef QINGKONG_H
#define QINGKONG_H

#include <iostream>
#include <string>

#include "lianxiren.h"

void f_qingkong(LianXiRen(&LXR)[1000]);

void f_qingkong(LianXiRen(&LXR)[1000])
{
	std::cout << "确定清空通讯录吗?" << std::endl;
	std::cout << "1.yes\t" << "2.no\t" << std::endl;
	int flag;
	std::cin >> flag;
	switch (flag)
	{
	case 1:
		for (auto &r : LXR)
		{
				std::string s;
				r.name = s;
				r.age = 0;
				r.location = s;
				r.number = s;
				r.sex = s;
		}
		std::cout << "已清空!" << std::endl;
		break;
	case 2:
		break;
	default:break;	
	}
}



#endif

9.退出通讯录

#ifndef TUICHU_H
#define TUICHU_H

#include <iostream>
#include <string>

bool f_tuichu();

bool f_tuichu()
{
	std::cout << "确认退出?" << std::endl;
	std::cout << "1.yes\t" << "2.no\t" << std::endl;
	int flag;
	std::cin >> flag;
	switch (flag)
	{
	case 1:return 1; break;
	case 2:return 0; break;
	default:return 0; break;
	}
}



#endif

10.主函数

#include <iostream>
#include <string>
#include <vector>
#include <ctime>

#include "caidan.h"
#include "tuichu.h"
#include "tianjia.h"
#include "xianshi.h"
#include "shanchu.h"
#include "chazhao.h"
#include "xiugai.h"
#include "qingkong.h"

using namespace std;

int main()
{
	LianXiRen LXR[1000];
	f_caidan();
	while (1)
	{
		int flag;
		cin >> flag;
		switch (flag)
		{
		case 0:
			if (f_tuichu())
			{
				cout << "欢迎再次使用!" << endl;
				return 0;
			}
			else
			{
				system("cls");
				f_caidan();
				break;
			}
		case 1:
			f_tianjia(LXR);
			system("cls");
			f_caidan();
			break;
		case 2:
			f_xianshi(LXR);
			break;
		case 3:
			f_shanchu(LXR);
			break;
		case 4:
			f_chazhao(LXR);
			break;
		case 5:
			f_xiugai(LXR);
			break;
		case 6:
			f_qingkong(LXR);
			break;
		default:return 0; break;
		}
	}
}

11.效果演示

为什么传不了视频?

演示视频

别人的思路

  1. 别人不仅建立了一个联系人的结构体,还建立了一个通讯录的结构体;我只有联系人的结构体,通讯录用数组代替了。
    LXR_shuliang 这个变量会在每次添加通讯录时加1,在删除时减1,在清空时归零。用这个可以轻松推断通讯录是否为空,以及定位该在哪写入数据。显然是个更好的思路。
struct TongXunLu
{
	LianXiRen LXR[1000];
	int LXR_shuliang;
};
  1. 封装了一个判断某个联系人是否在通讯录的程序,因为无论是显示还是删除、查找、修改,第一步都是判断人是否在通讯录中。
int ifExist(TongXunLu *TXL)
{
	string name;
	cin >> name;
	if(TXL->LXR_shuliang == 0)
	{
		cout << "通讯录为空" << endl;
		return -1;
	}
	else
	{
		for(int i = 0; i != TXL->LXR_shuliang; ++i)
		{
			if(TXL->LXR.name == name)
			{
				return i;
			}
			else
			{
				cout << "查无此人" << endl;
				return -1;
			}
		}
	}
}
  1. 删除操作采取了后一个数据覆盖前一个数据的操作,并不是令数据为空。
  2. 清空联系人的时候,只是把 LXR_shuliang 的值置为0,做了一个逻辑清零的操作,我是判断每个数据是否为0,这个效率太低了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值