Prática de programação C++ - sistema de gerenciamento de catálogo de endereços

Este projeto usa C++ para implementar um sistema de gerenciamento de catálogo de endereços.

Sistema de gerenciamento de catálogo de endereços

1 Requisitos do sistema

A agenda de endereços é uma ferramenta que pode registrar informações sobre parentes e amigos.

Este tutorial usa principalmente C++ para implementar um sistema de gerenciamento de catálogo de endereços

As funções a serem implementadas no sistema são as seguintes:

  • Adicionar contatos: Adicione novas pessoas à agenda, as informações incluem (nome, sexo, idade, número de contato, endereço residencial) e registre até 1000 pessoas;
  • Mostrar contatos: exibe todas as informações de contato no catálogo de endereços
  • Excluir contato: exclui o contato especificado por nome
  • Encontrar contatos: visualize as informações de contato especificadas por nome
  • Modificar contato: edite novamente o contato especificado por nome
  • Limpar contatos: limpe todas as informações do catálogo de endereços
  • Sair do catálogo de endereços: sai do catálogo de endereços atual

2 Criar projeto

As etapas para criar um projeto são as seguintes:

  • Criar novo projeto
  • adicionar arquivos

2.1 Criar projeto

Após abrir o Visual Studio, clique em Criar Novo Projeto para criar um novo projeto C++

imagem-20220123124340461 imagem-20220123125134404 imagem-20220123125917692

2.2 Criar arquivos

Clique com o botão direito no arquivo de origem e selecione Adicionar->Novo Item

imagem-20220123130442955

Dê um nome ao arquivo C++ e clique em Adicionar.

imagem-20220123130813668

3 funções do menu

Descrição da função : Programas com funções selecionadas pelo usuário

O efeito da interface do menu é o seguinte:

imagem-20220127201349127

Passos :

  • A função encapsulada exibe a interface, comovoid showMenu()
  • Chame a função encapsulada na função principal

Código:

#include<iostream>
using namespace std;

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

int main() {
    
    
	//调用菜单
	showMenu();

	system("pause");
	return 0;
}

4 Função de saída

Descrição da função: Sair do sistema de catálogo de endereços

Ideia: De acordo com as diferentes escolhas dos usuários, para inserir diferentes funções, você pode escolher a estrutura do switch branch para construir toda a estrutura

Quando o usuário seleciona 0, execute exit, selecione outro e não opere e não saia do programa

Código:

#include<iostream>
using namespace std;

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

int main() {
    
    

	int select = 0;//创建用户选择的输入的变量

	while (true) {
    
    
		//调用菜单
		showMenu();
		cin >> select;
		switch (select) {
    
    
		case 1://添加联系人
			break;
		case 2://显示联系人
			break;
		case 3://删除联系人
			break;
		case 4://查找联系人
			break;
		case 5://修改联系人
			break;
		case 6://清空联系人
			break;
		case 0://退出通讯录
			cout << "欢迎下次使用!" << endl;
			system("pause");//按任意键退出系统
			return 0;
			break;
		default:break;
		}
	}

	system("pause");
	return 0;
}

Renderização:

imagem-20220127204035545

5 Adicione contatos

Descrição da função:

Implemente a função de adicionar contatos. O limite máximo de contatos é de 1.000 pessoas. As informações de contato incluem (nome, sexo, idade, número de contato, endereço residencial)

Etapas para adicionar um contato:

  • Projetar estrutura de contato
  • Projetar estrutura do catálogo de endereços
  • Criar catálogo de endereços na função principal
  • Encapsular a função de adição de contato
  • Teste a função de adicionar contatos

5.1 Projete a estrutura de contato

As informações de contato incluem: nome, sexo, idade, número de contato, endereço residencial

O projeto é o seguinte:

#include<string> //string头文件
//联系人结构体
struct Person
{
    
    
    string m_Name;//姓名
    int m_Sex;//性别
    int m_Age;//年龄
    string m_Phone;//电话
    string m_Addr;//住址
};

5.2 Projete a estrutura do catálogo de endereços

Ao projetar, você pode manter uma matriz de 1.000 contatos na estrutura do catálogo de endereços e registrar o número de contatos no catálogo de endereços atual

O projeto é o seguinte:

#define MAX 1000 //

//通讯录结构体
struct Addressbooks{
    
    
    struct Person personArray[MAX];//通讯录中保存的联系人数组
    int m_Size;//通讯录中人员个数
}

5.3 Criar catálogo de endereços na função principal

Depois que a função adicionar contato for empacotada, crie uma variável de catálogo de endereços na função principal, que é o catálogo de endereços que precisamos manter o tempo todo.

Adicione no início da função principal:

Addressbooks abs;//创建通讯录
abs.m_Size = 0;//初始化通讯录中的人数

5.4 Encapsular a função de adição de contato

Ideia: Antes de adicionar um contato, avalie se o catálogo de endereços está cheio. Se estiver cheio, não adicione. Se não estiver cheio, adicione novas informações de contato ao catálogo de endereços, uma por uma.

Adicione o código de contato:

void addPerson(Addressbooks* abs) {
    
    
	if (abs->m_Size == MAX) {
    
    
		cout << "通讯录已满,无法添加!" << endl;
		return;
	}
	else {
    
    
		string name;
		cout << "请输入姓名:" << endl;
		cin >> name;
		abs->personArray[abs->m_Size].m_Name = name;

		int sex = 0;
		cout << "请输入性别:" << "1 --- 男" << "2 --- 女" << endl;
		while (true) {
    
    
			cin >> sex;
			if (sex == 1 || sex == 2) {
    
    
				abs->personArray[abs->m_Size].m_Sex = sex;
				break;
			}
			else {
    
    
				cout << "输入错误,请重新输入:" << endl;
			}
		}

		int age = 0;
		cout << "请输入年龄:" << endl;
		while (true) {
    
    
			cin >> age;
			if (age >= 0 || age <= 150) {
    
    
				abs->personArray[abs->m_Size].m_Age = age;
				break;
			}
			else {
    
    
				cout << "输入错误,请重新输入:" << endl;
			}
		}

		string phonenumber;
		cout << "请输入联系电话:" << endl;
		cin >> phonenumber;
		abs->personArray[abs->m_Size].m_Phone = phonenumber;

		string address;
		cout << "请输入家庭住址:" << endl;
		cin >> address;
		abs->personArray[abs->m_Size].m_Addr = address;

		abs->m_Size++;//更新通讯录人数
		cout << "添加成功!" << endl;
		system("pause");//按任意键继续
		system("cls");//清屏操作
	}
}

5.5 Teste a função de adição de contatos

Na interface de seleção, se o jogador selecionar 1, significa adicionar um contato, você pode testar esta função

Na instrução switch case, adicione case1:

	case 1://添加联系人
			addPerson(&abs);//利用地址传递,可以修饰形参
			break;

Renderizações de teste:

imagem-20220127223018395

6 Mostrar contatos

Descrição da função: Exibir as informações de contato existentes no catálogo de endereços

Etapas para exibir contatos:

  • Encapsular função de contato de exibição
  • Teste a função de exibição de contatos

6.1 Encapsular função de contato de exibição

Idéia: Determine se existe alguma pessoa na agenda atual, caso contrário, o registro do prompt fica vazio, se o número for maior que 0, então exiba as informações na agenda.

Mostrar código de contato:

//显示所有联系人
void showPerson(Addressbooks* abs) {
    
    
	if (abs->m_Size == 0) {
    
    
		cout << "通讯录为空。" << endl;
	}
	else {
    
    
		for (int i = 0; i < abs->m_Size; i++) {
    
    
			cout << "姓名:" << abs->personArray[i].m_Name<<"\t";
			cout << "年龄:\t" << abs->personArray[i].m_Age << "\t";
			cout << "性别:\t" << (abs->personArray[i].m_Sex == 1 ? "男" : "女") << "\t";
			cout << "电话:\t" << abs->personArray[i].m_Phone << "\t";
			cout << "地址:" << abs->personArray[i].m_Addr << endl;
		}
	}
	system("pause");
	system("cls");
}

6.2 Teste a função de exibição de contato

Na instrução switch case, adicione no caso 2

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

Renderizações de teste:

imagem-20220127225933453

7 Excluir contatos

Descrição da função: exclua o contato especificado por nome

Etapas para excluir um contato:

  • O pacote detecta se o contato existe
  • Encapsular função de exclusão de contato
  • Teste a função de exclusão de contato

7.1 Detecção de pacote se o contato existe

Ideia de design: Antes de excluir um contato, é necessário determinar se o contato inserido pelo usuário existe. Se existir, exclua-o. Se não existir, avisará ao usuário que não há contato para excluir. Portanto, a detecção se o contato existe é encapsulada em uma função e, se existir, retorna a posição do contato no catálogo de endereços, retorna -1 se não existir.

//检测联系人是否存在,如果存在,返回联系人所在数组中的具体位置,不存在返回-1
int isExist(Addressbooks* abs, string name) {
    
    
	for (int i = 0; i < abs->m_Size; i++) {
    
    
		if (abs->personArray[i].m_Name == name) {
    
    
			return i;//找到,返回这个人在数组中的编号
		}
	}
	return -1;//如果没有找到,返回-1
}

7.2 Encapsular a função de exclusão de contato

De acordo com o contato inserido pelo usuário, julgue se existe tal pessoa no catálogo de endereços, pesquise e exclua, e avise que a exclusão foi bem-sucedida; se a pessoa não puder ser encontrada, será avisado que não existe tal pessoa.

void deletePerson(Addressbooks* 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->personArray[i] = abs->personArray[i + 1];//数据前移
		}
		abs->m_Size--;//更新通讯录中的人员数
		cout << "删除成功!" << endl;
	}
	else {
    
    
		cout << "查无此人!" << endl;
	}
	system("pause");
	system("cls");
}

7.3 Teste a função de exclusão de contatos

Na instrução switch case, adicione case3:

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

8 Encontre um contato

Descrição da função: Visualize informações de contato especificadas por nome

Etapas para encontrar contatos

  • Encapsular a função de pesquisa de contato
  • Teste para encontrar um contato específico

8.1 Encapsular a função de pesquisa de contato

Idéia de implementação: Determine se o contato especificado pelo usuário existe. Se existir, exiba as informações, caso contrário avisará que a pessoa não foi encontrada.

Encontre o código de contato:

void findPerson(Addressbooks* abs) {
    
    
	cout << "请输入您要查找的联系人:" << endl;
	string name;
	cin >> name;
	
	int ret = isExist(abs, name);
	if (ret != -1) {
    
    //找到联系人
		cout << "姓名:" << abs->personArray[ret].m_Name << "\t";
		cout << "年龄:\t" << abs->personArray[ret].m_Age << "\t";
		cout << "性别:\t" << (abs->personArray[ret].m_Sex == 1 ? "男" : "女") << "\t";
		cout << "电话:\t" << abs->personArray[ret].m_Phone << "\t";
		cout << "地址:" << abs->personArray[ret].m_Addr << endl;
	}
	else {
    
    
		cout << "查无此人!" << endl;
	}
	system("pause");
	system("cls");
}

8.2 Teste para encontrar o contato especificado

Na instrução switch case, adicione case4:

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

9 Modificar contatos

Descrição da função: Modifique novamente o contato designado por nome

Etapas para modificar um contato:

  • Encapsular a função de modificação de contato
  • Teste a função de modificação de contatos

9.1 Encapsular e modificar a função de contato

Ideia de implementação: Procure a pessoa de contato inserida pelo usuário. Se a operação de modificação for bem-sucedida, se a busca falhar, será avisado que essa pessoa não foi encontrada.

Modifique o código de contato:

void modifyPerson(Addressbooks* abs) {
    
    
	cout << "请输入您要修改的联系人:" << endl;
	string name;
	cin >> name;

	int ret = isExist(abs, name);
	if (ret != -1) {
    
    //找到联系人

		string name1;
		cout << "请输入姓名:" << endl;
		cin >> name1;
		abs->personArray[ret].m_Name = name1;

		int sex = 0;
		cout << "请输入性别:" << endl;
		while (true) {
    
    
			cout << "1 - 男" << "  2 - 女" << endl;
			cin >> sex;
			if (sex == 1 || sex == 2) {
    
    
				abs->personArray[ret].m_Sex = sex;
				break;
			}
			else {
    
    
				cout << "输入有误,请重新输入:" << endl;
			}
		}

		int age = 0;
		cout << "请输入年龄:" << endl;
		while (true) {
    
    
			cin >> age;
			if (age >= 0 || age <= 150) {
    
    
				abs->personArray[ret].m_Age = age;
				break;
			}
			else {
    
    
				cout << "输入错误,请重新输入:" << endl;
			}
		}

		string phonenumber;
		cout << "请输入联系电话:" << endl;
		cin >> phonenumber;
		abs->personArray[ret].m_Phone = phonenumber;

		string address;
		cout << "请输入家庭住址:" << endl;
		cin >> address;
		abs->personArray[ret].m_Addr = address;

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

	}
	else {
    
    
		cout << "查无此人!" << endl;
	}
}

9.2 Teste a função de modificação de contatos

Na instrução switch case, adicione case5:

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

10 Limpar contatos

Descrição da função: Limpar todas as informações do catálogo de endereços

Etapas para limpar contatos

  • Encapsular a função de limpeza de contatos
  • Teste de limpeza de contatos

10.1 Encapsular a função de limpeza de contatos

Ideia de implementação: Limpar todas as informações de contato do catálogo de endereços. Basta definir o número de contatos registrados no catálogo de endereços como 0 e limpá-lo de forma lógica.

Limpar código de contato:

void cleanPerson(Addressbooks* abs) {
    
    
	abs->m_Size = 0;
	cout << "通讯录已清空!" << endl;
	system("pause");//按任意键继续
	system("cls");//清屏操作
}

10.2 Teste para limpar contatos

Na instrução switch case, adicione case6:

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

11 Programa Geral

#include<iostream>
using namespace std;
#include<string> //string头文件
#define MAX 1000 //

//设计联系人的结构体
struct Person
{
    
    
	string m_Name;//姓名
	int m_Sex;//性别
	int m_Age;//年龄
	string m_Phone;//电话
	string m_Addr;//住址
};

//通讯录结构体
struct Addressbooks {
    
    
	struct Person personArray[MAX];//通讯录中保存的联系人数组
	int m_Size;//通讯录中人员个数
};

//1.添加联系人
void addPerson(Addressbooks* abs) {
    
    
	if (abs->m_Size == MAX) {
    
    
		cout << "通讯录已满,无法添加!" << endl;
		return;
	}
	else {
    
    
		string name;
		cout << "请输入姓名:" << endl;
		cin >> name;
		abs->personArray[abs->m_Size].m_Name = name;

		int sex = 0;
		cout << "请输入性别:" << "1 - 男" << "   2 - 女" << endl;
		while (true) {
    
    
			cin >> sex;
			if (sex == 1 || sex == 2) {
    
    
				abs->personArray[abs->m_Size].m_Sex = sex;
				break;
			}
			else {
    
    
				cout << "输入错误,请重新输入:" << endl;
			}
		}

		int age = 0;
		cout << "请输入年龄:" << endl;
		while (true) {
    
    
			cin >> age;
			if (age >= 0 || age <= 150) {
    
    
				abs->personArray[abs->m_Size].m_Age = age;
				break;
			}
			else {
    
    
				cout << "输入错误,请重新输入:" << endl;
			}
		}

		string phonenumber;
		cout << "请输入联系电话:" << endl;
		cin >> phonenumber;
		abs->personArray[abs->m_Size].m_Phone = phonenumber;

		string address;
		cout << "请输入家庭住址:" << endl;
		cin >> address;
		abs->personArray[abs->m_Size].m_Addr = address;

		abs->m_Size++;//更新通讯录人数
		cout << "添加成功!" << endl;
		system("pause");//按任意键继续
		system("cls");//清屏操作
	}
}

//显示所有联系人
void showPerson(Addressbooks* abs) {
    
    
	if (abs->m_Size == 0) {
    
    
		cout << "通讯录为空。" << endl;
	}
	else {
    
    
		for (int i = 0; i < abs->m_Size; i++) {
    
    
			cout << "姓名:" << abs->personArray[i].m_Name<<"\t";
			cout << "年龄:\t" << abs->personArray[i].m_Age << "\t";
			cout << "性别:\t" << (abs->personArray[i].m_Sex == 1 ? "男" : "女") << "\t";
			cout << "电话:\t" << abs->personArray[i].m_Phone << "\t";
			cout << "地址:" << abs->personArray[i].m_Addr << endl;
		}
	}
	system("pause");
	system("cls");
}

//检测联系人是否存在,如果存在,返回联系人所在数组中的具体位置,不存在返回-1
int isExist(Addressbooks* abs, string name) {
    
    
	for (int i = 0; i < abs->m_Size; i++) {
    
    
		if (abs->personArray[i].m_Name == name) {
    
    
			return i;//找到,返回这个人在数组中的编号
		}
	}
	return -1;//如果没有找到,返回-1
}

void deletePerson(Addressbooks* 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->personArray[i] = abs->personArray[i + 1];//数据前移
		}
		abs->m_Size--;//更新通讯录中的人员数
		cout << "删除成功!" << endl;
	}
	else {
    
    
		cout << "查无此人!" << endl;
	}
	system("pause");
	system("cls");
}

void findPerson(Addressbooks* abs) {
    
    
	cout << "请输入您要查找的联系人:" << endl;
	string name;
	cin >> name;
	
	int ret = isExist(abs, name);
	if (ret != -1) {
    
    //找到联系人
		cout << "姓名:" << abs->personArray[ret].m_Name << "\t";
		cout << "年龄:\t" << abs->personArray[ret].m_Age << "\t";
		cout << "性别:\t" << (abs->personArray[ret].m_Sex == 1 ? "男" : "女") << "\t";
		cout << "电话:\t" << abs->personArray[ret].m_Phone << "\t";
		cout << "地址:" << abs->personArray[ret].m_Addr << endl;
	}
	else {
    
    
		cout << "查无此人!" << endl;
	}
	system("pause");
	system("cls");
}

void modifyPerson(Addressbooks* abs) {
    
    
	cout << "请输入您要修改的联系人:" << endl;
	string name;
	cin >> name;

	int ret = isExist(abs, name);
	if (ret != -1) {
    
    //找到联系人

		string name1;
		cout << "请输入姓名:" << endl;
		cin >> name1;
		abs->personArray[ret].m_Name = name1;

		int sex = 0;
		cout << "请输入性别:" << endl;
		while (true) {
    
    
			cout << "1 - 男" << "  2 - 女" << endl;
			cin >> sex;
			if (sex == 1 || sex == 2) {
    
    
				abs->personArray[ret].m_Sex = sex;
				break;
			}
			else {
    
    
				cout << "输入有误,请重新输入:" << endl;
			}
		}

		int age = 0;
		cout << "请输入年龄:" << endl;
		while (true) {
    
    
			cin >> age;
			if (age >= 0 || age <= 150) {
    
    
				abs->personArray[ret].m_Age = age;
				break;
			}
			else {
    
    
				cout << "输入错误,请重新输入:" << endl;
			}
		}

		string phonenumber;
		cout << "请输入联系电话:" << endl;
		cin >> phonenumber;
		abs->personArray[ret].m_Phone = phonenumber;

		string address;
		cout << "请输入家庭住址:" << endl;
		cin >> address;
		abs->personArray[ret].m_Addr = address;

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

	}
	else {
    
    
		cout << "查无此人!" << endl;
	}
}

void cleanPerson(Addressbooks* abs) {
    
    
	abs->m_Size = 0;
	cout << "通讯录已清空!" << endl;
	system("pause");//按任意键继续
	system("cls");//清屏操作
}

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

int main() {
    
    

	Addressbooks abs;//创建通讯录
	abs.m_Size = 0;//初始化通讯录中的人数

	int select = 0;//创建用户选择的输入的变量

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

	system("pause");
	return 0;
}

Acho que você gosta

Origin blog.csdn.net/m0_66238629/article/details/131549730
Recomendado
Clasificación