【C++】基础小练习--通讯录

练习简介

        本练习属于C++进入面向对象学习之前的基础知识综合运用小练习,该练习可分为三个文件来编写:一个用于声明函数和宏定义的头文件.h,一个用于编写函数的源文件.cpp和另一个用于编写主函数测试的源文件.cpp。

头文件 DefineandStruct.h

        用两个结构体来形成通讯录的基本模板,Person用于存放通讯录中每个人的基本信息;Addressbooks作为通讯录,用于存放写入通讯录的Person结构体。

#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;

#define MAXSIZE 1000
#define OK 1
#define ERROR 0
#define OVERFLOW -1

typedef int Status;

struct Person
{
	string name;
	int age;
	int sex;
	string phonenumber;
	string address;
};
struct Addressbooks
{
	struct Person personArray[MAXSIZE];
	int size;
};

//菜单界面
void Menu();

//添加联系人
Status AddPerson(Addressbooks* List);

//显示联系人
void TraverseBooks(Addressbooks Book);

//检查是否存在联系人
int isExsist(Addressbooks Book, string name);

//删除联系人
Status DeletePerson(Addressbooks* Book, string name);

//查找联系人
void SearchPerson(Addressbooks Book, string name);

//修改联系人
Status ModifyPerson(Addressbooks* Book, string name);

//清空通讯录
void CleanBook(Addressbooks* Book);

函数源文件 Function.cpp

#include <iostream>
#include <stdio.h>
#include <string>
#include "DefineandStruct.h"

using namespace std;

//菜单界面
void 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;
}

//添加联系人
Status AddPerson(Addressbooks* Book)
{
	if (Book->size == MAXSIZE)
	{
		return OVERFLOW;
	}

	Book->size++;
	
	cout << "请输入姓名:";
	cin >> Book->personArray[Book->size].name;
	while (true)
	{
		cout << "请输入年龄:";
		cin >> Book->personArray[Book->size].age;
		if (Book->personArray[Book->size].age > 0)
		{
			break;
		}
		else
		{
			cout << "输入有误,请重新输入年龄!" << endl;
		}
	}

	while (true)
	{
		cout << "请输入性别(1--男,0--女):";
		cin >> Book->personArray[Book->size].sex;
		if (Book->personArray[Book->size].sex == 1 || Book->personArray[Book->size].sex == 0)
		{
			break;
		}
		else
		{
			cout << "输入有误,请重新输入性别!" << endl;
		}
	}
	while (true)
	{
		cout << "请输入联系电话:";
		cin >> Book->personArray[Book->size].phonenumber;
		if (Book->personArray[Book->size].phonenumber.length() == 11)
		{
			break;
		}
		else
		{
			cout << "输入有误,请输入正确的联系电话!" << endl;
		}
	}
	cout << "请输入住址:";
	cin >> Book->personArray[Book->size].address;
	return OK;
}

//显示联系人
void TraverseBooks(Addressbooks Book)
{
	if (Book.size == 0)
	{
		cout << "电话簿为空!" << endl;
	}
	else
	{
		for (size_t i = 1; i <= Book.size; i++)
		{
			cout << Book.personArray[i].name << "\t"
				<< Book.personArray[i].age << "\t"
				<< (Book.personArray[i].sex == 1 ? "男" : "女") << "\t"
				<< Book.personArray[i].phonenumber << "\t"
				<< Book.personArray[i].address << "\t"
				<< endl;
		}
	}
}

//删除联系人
Status DeletePerson(Addressbooks* Book, string name)
{
	int tmp = isExsist(*Book, name);
	if (tmp == -1)
	{
		return ERROR;
	}
	for (int i = tmp; i <= Book->size; i++)
	{
		Book->personArray[i] = Book->personArray[i + 1];
	}
	Book->size--;
	return OK;
}

//检查是否存在联系人
int isExsist(Addressbooks Book, string name)
{
	for (int i = 1; i <= Book.size; i++)
	{
		if (Book.personArray[i].name == name)
		{
			return i;
		}
	}
	return -1;
}

//查找联系人
void SearchPerson(Addressbooks Book, string name)
{
	int tmp = isExsist(Book, name);
	if (tmp == -1)
	{
		cout << "查无此人!" << endl;
	}
	else
	{
		cout << Book.personArray[tmp].name << "\t"
			<< Book.personArray[tmp].age << "\t"
			<< (Book.personArray[tmp].sex == 1 ? "男" : "女") << "\t"
			<< Book.personArray[tmp].phonenumber << "\t"
			<< Book.personArray[tmp].address << "\t"
			<< endl;
	}
}

//修改联系人
Status ModifyPerson(Addressbooks* Book, string name)
{
	int tmp = isExsist(*Book, name);
	if (tmp == -1)
	{
		return ERROR;
	}
	else
	{
		cout << "请输入姓名:";
		cin >> Book->personArray[tmp].name;
		while (true)
		{
			cout << "请输入年龄:";
			cin >> Book->personArray[tmp].age;
			if (Book->personArray[tmp].age > 0)
			{
				break;
			}
			else
			{
				cout << "输入有误,请重新输入年龄!" << endl;
			}
		}

		while (true)
		{
			cout << "请输入性别(1--男,0--女):";
			cin >> Book->personArray[tmp].sex;
			if (Book->personArray[tmp].sex == 1 || Book->personArray[tmp].sex == 0)
			{
				break;
			}
			else
			{
				cout << "输入有误,请重新输入性别!" << endl;
			}
		}
		while (true)
		{
			cout << "请输入联系电话:";
			cin >> Book->personArray[tmp].phonenumber;
			if (Book->personArray[tmp].phonenumber.length() == 11)
			{
				break;
			}
			else
			{
				cout << "输入有误,请输入正确的联系电话!" << endl;
			}
		}
		cout << "请输入住址:";
		cin >> Book->personArray[tmp].address;
		return OK;
	}
}

//清空通讯录
void CleanBook(Addressbooks* Book)
{
	Book->size = 0;
}

主函数源文件 MainTest.cpp

#include <iostream>
#include <stdio.h>
#include "DefineandStruct.h"

using namespace std;

int main()
{
	Addressbooks Book;
	Book.size = 0;
	int select;
	do
	{
		Menu();
		cout << "请输入选择:";
		cin >> select;
		switch (select)
		{
		case 1:
		{
			int tmp = AddPerson(&Book);
			if (tmp == OVERFLOW)
			{
				cout << "已存满!" << endl;
			}
			else
			{
				cout << "添加成功!" << endl;
			}
			system("pause");
			system("cls");
			break;
		}
		case 2:
		{
			TraverseBooks(Book);
			system("pause");
			system("cls");
			break;
		}
		case 3:
		{
			string name;
			cout << "请输入删除对象:";
			cin >> name;
			int tmp = DeletePerson(&Book, name);
			if (tmp == ERROR)
			{
				cout << "查无此人!" << endl;
			}
			else
			{
				cout << "删除成功!" << endl;
			}
			system("pause");
			system("cls");
			break;
		}
		case 4:
		{
			string name;
			cout << "请输入查找对象:";
			cin >> name;
			SearchPerson(Book, name);
			system("pause");
			system("cls");
			break;
		}
		case 5:
		{
			string name;
			cout << "请输入需要修改的对象:";
			cin >> name;
			int tmp = ModifyPerson(&Book, name);
			if (tmp == ERROR)
			{
				cout << "查无此人!" << endl;
			}
			else
			{
				cout << "修改成功!" << endl;
			}
			system("pause");
			system("cls");
			break;
		}
		case 6:
		{
			cout << "清空成功!" << endl;
			CleanBook(&Book);
			system("pause");
			system("cls");
			break;
		}
		case 0:
		{
			cout << "感谢使用!" << endl;
			break;
		}
		default:
			cout << "输入有误,请重新输入!" << endl;
			system("pause");
			system("cls");
			break;
		}
	}while (select != 0);

	system("pause");
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值