c++学习——通讯录管理系统

 1.系统需求

需要实现的功能:1添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人

2.显示联系人:显示通讯录中所有联系人信息

3.删除联系人:按照姓名进行删除指定联系人

4.查找联系人:按照姓名查看指定联系人信息

5.修改联系人:按照姓名重新修改指定联系人

6.清空联系人:清空通讯录中所有信息

7.退出通讯录:退出当前使用的通讯录

2.菜单功能

封装函数显示菜单界面

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;
}

3.退出功能

     思路:根据用户的不同选择,进入不同的功能,可以选择switch分支结构,将整个架构进行搭建 。当用户选择0的时候,执行退出,选择其它先不做操作,也不会退出程序                                                                                          

int main()
{
	//1.创建通讯录结构体变量
	Addressbooks abs;
	//2.初始化结构体变量中当前的人员数
	abs.size = 0;
	int select = 0;

	while (true)
	{
		showmenu();
		cin >> select;
		switch (select)
		{
		case 1://1、添加联系人
			addperson(&abs);//利用地址传递,可以修饰实参
			break;
		case 2://2、显示联系人
			break;
		case 3://3、删除联系人
			break;
		case 4://4、查找联系人
			break;
		case 5://5、修改联系人
			break;
		case 6://6、清空联系人
			break;
		case 0://0、退出通讯录 
			cout << "欢迎下次使用" << endl;
			system("pause");//按任意键继续
			return 0;//退出系统
			break;
		default:
			break;
		}
	}

	system("pause");
	return 0;
}

4.添加联系人

实现步骤:

1.设计联系人结构体

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

struct person {
	//添加联系人结构体
	string name;
	int  sex;
	int age;
	string phone;
	string addr;
};

2.设计通讯录结构体

在通讯录的结构体中,要维护一个容量为1000的存放联系人的数组,并记录当前通讯录中联系人数量设计如下

#define MAX 1000
//设计通讯录结构体,维护一个容量为1000的存放联系人的数组,并记录当前通讯录中联系人数量
struct Addressbooks {
	struct person personarray [MAX];//通讯录中保存的联系人数组
	int size;//通讯录中当前记录的联系人个数
};

3.main函数中创建通讯录                                                                                                                         

int main()
{
	//1.创建通讯录结构体变量
	Addressbooks abs;
	//2.初始化结构体变量中当前的人员数
	abs.size = 0;

  4.封装添加联系人函数

//添加联系人
void addperson( Addressbooks*abs) {
	//判断人数是否满1000
	if (abs->size == MAX) 
	{
		cout << "通讯录已满,无法添加!" << endl;
		return;
	}
	else
	{//1.添加联系人姓名
	string xname;
	cout << "请输入姓名: " << endl;
	cin >> xname;
	abs->personarray[abs->size].name = xname;
	//2.添加联系人性别
	int xsex=0;
	    cout << "请输入性别:" << endl;
		cout << "1--女" << endl;
		cout << "2--男" << endl;
	while (true) 
	{
		cin >> xsex;
		if (xsex == 1 || xsex == 2)
		{
			abs->personarray[abs->size].sex = xsex;
			break;
		}
		cout << "输入有误,请重新输入" << endl;
		}
	}
//3.年龄
	int xage = 0;
	cout << "请输入年龄: " << endl;
	while (true)
	{   
		cin >> xage;
		if (xage >= 10 && xage <= 120)
		{
        abs->personarray[abs->size].age = xage;
		break;
		}
		cout << "输入有误,请重新输入" << endl;
	}
	//4.电话
	string xphone ;
	cout << "请输入电话:" << endl;
	cin >> xphone;
	abs->personarray[abs->size].phone = xphone;
	//5.地址
	string xaddress;
	cout << "请输入地址:" << endl;
	cin >> xaddress;
	abs->personarray[abs->size].addr = xaddress;
	//更新通讯录人数
	abs->size++;
	cout << "添加成功" << endl;
	system("pause");//按任意键继续
	system("cls");//清屏
}

    5. 测试添加联系人功能

switch (select)
{
case 1://1、添加联系人
	addperson(&abs);//利用地址传递,可以修饰实参
	break;

5.显示联系人

功能描述:显示通讯录中已有的联系人信息

实现步骤:

5.1封装显示联系人函数

思路:如果当前通讯录没有人员,就提示为空,人数大于0,显示通讯录信息

//显示联系人
void showperson(Addressbooks* abs)
{
	//判断通讯录中人数是否为0,若为0,显示当前记录为空;如果不为0,显示记录的联系人信息
	if (abs->size == 0) {
		cout << "当前记录为空" << endl; 
	}
	else
	{
		for (int i = 0; i < abs->size; i++)
		{
			cout << "姓名:" << abs->personarray[i].name << "\t";//"/t"代表空8个字符
			cout << "性别:" << (abs->personarray[i].sex==1?"男":"女") << "\t";
			cout << "年龄:" << abs->personarray[i].age<< "\t";
			cout << "电话:" << abs->personarray[i].phone << "\t";
			cout << "住址:" << abs->personarray[i].addr<< "\t";
		}
	}
	system("pause");
	system("cls");
}

5.2测试显示联系人功能

   

case 2://2、显示联系人
	showperson(&abs);
	break;

6.删除联系人

实现步骤:

6.1封装检测联系人是否存在

设计思路:删除前判断联系人是否存在,如果存在,返回联系人在通讯录中的位置,不存在返回-1

//检测联系人是否存在,若存在,返回联系人所在数组中的具体位置,不存在返回-1
//参数1 通讯录 参数2 名字
int isexist(Addressbooks* abs, string name)
{
	for (int i = 0; i < abs->size; i++)
	{
		if (abs->personarray[i].name == name)
		{
			return i;//找到了,返回这个人在数组中的下标编号
		}
	}
		return -1;//如果遍历结束都没有找到,返回-1
}

6.2封装删除联系人函数

根据用户输入的联系人判断该通讯录是否有此人

查找到进行删除,并提示删除成功

查不到提示查无此人

//3.删除指定联系人
void deleteperson(Addressbooks* abs)
{
	cout << "请输入要删除的联系人的名字" << endl;
	string name;
	cin>> name;

	int ret = isexist(abs, name);
	if (ret == -1)
	{
		cout << "查无此人" << endl;
	}
	if (ret != -1) {
		for (int i = ret; i <=abs->size; i++)
		{
			abs->personarray[i].name = abs->personarray[i + 1].name;
		}
		abs->size--;
		cout << "删除成功" << endl;
	}
}

6.3测试删除联系人功能

case 3://3、删除联系人
		deleteperson(&abs);
	break;

 7.查找联系人

实现步骤:

7.1 封装查找联系人函数 

//4.查找指定联系人信息
void findperson(Addressbooks* abs)
{
	cout << "请输入要查找的联系人的名字" << endl;
	string name;
	cin >> name;

	int ret = isexist(abs, name);
	if (ret == -1)
	{
		cout << "查无此人" << endl;
	}
	if (ret != -1) //找到联系人
	{
		cout << "姓名:" << abs->personarray[ret].name << "\t";//  "/t"代表空8个字符
		cout << "年龄:" << abs->personarray[ret].age << "\t";
		cout << "性别:" << abs->personarray[ret].sex << "\t";
		cout << "电话:" << abs->personarray[ret].phone << "\t";
		cout << "地址:" << abs->personarray[ret].addr << "\t";
	}
	//任意键按下后清屏
	system("pause");//暂停执行程序,摁下任意键继续
	system("cls");//清屏
}

7.2测试查找指定联系人

case 4://4、查找联系人
	findperson(&abs);
	break;

8.修改联系人

实现步骤:

8.1封装修改联系人函数

//5.修改指定联系人信息
void modifyperson(Addressbooks* abs)
{
	cout << "请输入您要修改的联系人" << endl;
	string name;
	cin >> name;

	int ret = isexist(abs,name);
	if (ret != -1) {
		//姓名
		string name;
		cout << "请输入姓名:" << endl;
		cin >> name;
		abs->personarray[ret].name = name;
		//性别
		cout << "请输入性别:" << endl;
		cout << "1--男" << endl;
		cout << "2--女" << endl;
		int sex = 0;//设置初始值
		while (true)//无条件循环
		{
          cin >> sex;
		if (sex == 1 || sex == 2)
		{
		//输入正确 退出循环输入
			abs->personarray[ret].sex = sex;
			break;//跳出while循环,break的作用是立刻终止最近的包含它的循环体
		}
		cout << "输入有误,请重新输入" << endl;
}
		//年龄
		cout << "请输入年龄:" << endl;
		int age = 0;
		cin >> age;
		abs->personarray[ret].age = age;
		//电话
		cout << "请输入电话:" << endl;
		string phone;
		cin >> phone;
		abs->personarray[ret].phone = phone;
		//住址
		cout << "请输入住址:" << endl;
		string addr;
		cin >> addr;
		abs->personarray[ret].addr = addr;
	}
	else
	{
		cout << "查无此人" << endl;
	}
	//任意键按下后清屏
	system("pause");//暂停执行程序,摁下任意键继续
	system("cls");//清屏
}

8.2测试修改指定联系人    

case 5://5、修改联系人
	modifyperson(&abs);
	break;

9.清空联系人               

9.1封装清空联系人函数

//6.清空所有联系人
void cleanperson(Addressbooks*abs){
	abs->size = 0;
	cout << "通讯录已清空" << endl;
	system("pause");
	system("cls");
}

9.2 测试清空所有联系人                                                                             

case 6://6、清空联系人
	cleanperson(&abs);
	break;

                                                                                                                                         

int main()
{
	//1.创建通讯录结构体变量
	Addressbooks abs;
	//2.初始化结构体变量中当前的人员数
	abs.size = 0;
	int select = 0;

	while (true)
	{
		showmenu();
		cin >> select;
		switch (select)
		{
		case 1://1、添加联系人
			addperson(&abs);//利用地址传递,可以修饰实参
			break;
		case 2://2、显示联系人
			showperson(&abs);
			break;
		case 3://3、删除联系人
				deleteperson(&abs);
			break;
		case 4://4、查找联系人
			findperson(&abs);
			break;
		case 5://5、修改联系人
			modifyperson(&abs);
			break;
		case 6://6、清空联系人
			cleanperson(&abs);
			break;
		case 0://0、退出通讯录 
			cout << "欢迎下次使用" << endl;
			system("pause");//按任意键继续
			return 0;//退出系统
			break;
		default:
			break;
		}
	}

	system("pause");
	return 0;
}

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 

  • 28
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值