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++
2.2 Criar arquivos
Clique com o botão direito no arquivo de origem e selecione Adicionar->Novo Item
Dê um nome ao arquivo C++ e clique em Adicionar.
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:
Passos :
- A função encapsulada exibe a interface, como
void 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:
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:
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:
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;
}