通讯录管理系统、C++0基础小白练习项目
前言
该项目是练习C++基础比较不错的项目,可练习数组、指针、循环体、结构体、函数等方面的基础知识
1、系统需求
- 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000
- 显示联系人:显示通讯录中所有联系人信息
- 删除联系人:按照姓名进行删除指定联系人。
- 查找联系人:按照姓名查看指定联系人信息
- 修改联系人:按照姓名重新修改指定联系人
- 清空联系人:清空通讯录中所有信息
- 退出通讯录:退出当前使用的通讯录
2 菜单栏的实现
命名为Sysmain.cpp
这是最简单的实现方法,但丝毫没有封装,没有代码的可复用性
//
#include<iostream>
using namespace std;
int main()
{
//往往大家都会这样先写出来,但是一个项目的实现往往考虑的就是函数的封装
cout << " ------------------ 通讯录管理系统 -----------------" << endl;
cout << " ------------------ 1. 添加联系人信息 -----------------" << endl;
cout << " ------------------ 2. 删除联系人信息 -----------------" << endl;
cout << " ------------------ 3. 修改联系人信息 -----------------" << endl;
cout << " ------------------ 4. 查找联系人信息 -----------------" << endl;
cout << " ------------------ 5. 清除联系人信息 -----------------" << endl;
cout << " ------------------ 6. 退出系统 -----------------" << endl;
system("pause");
return 0;
}
改进:把功能函数进行封装
void ShowMenu()
{
cout << " ------------------ 通讯录管理系统 -----------------" << endl;
cout << " ------------------ 1. 添加联系人信息 -----------------" << endl;
cout << " ------------------ 2. 删除联系人信息 -----------------" << endl;
cout << " ------------------ 3. 修改联系人信息 -----------------" << endl;
cout << " ------------------ 4. 查找联系人信息 -----------------" << endl;
cout << " ------------------ 5. 清除联系人信息 -----------------" << endl;
cout << " ------------------ 6. 退出系统 -----------------" << endl;
}
int main()
{
ShowMenu();
system("pause");
return 0;
}
2.退出通讯录系统功能实现
思路:根据用户不同选择(输入),程序来执行不同的功能,可用switch分支架构搭建框架
案例:首先以最简单的退出通讯录系统为例
按理说可以将每一个功能都封装起来,但是退出系统较为简单直接写即可
#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;
}
int main()
{
while (true) // 加一个while循环,当某些功能执行完毕重新显示菜单
{
ShowMenu();//显示菜单
int select = 0; //创建一个变量存储用户的输入
cin >> select;
switch (select)
{
case 1: //1. 添加联系人信息
break;
case 2: //2. 删除联系人信息
break;
case 3: //3. 修改联系人信息
break;
case 4: //4. 查找联系人信息
break;
case 5: //5. 清除联系人信息
break;
case 6: //6. 退出系统
cout << "即将退出通讯录系统" << endl;
system("pause");
return 0;
break;
}
}
system("pause");
return 0;
}
3 添加联系人功能实现
增删改查中首先要实现添加联系人的功能,其他功能才能具体实现。
3.1功能描述与实现步骤
功能描述:添加上限为1000人,每个联系人的信息为: 姓名 性别 联系电话 家庭住址
实现步骤:
注意添加添加 #include < string >
- 设计联系人结构体
- 设计通讯录结构体
- main函数中创建通讯录
- 封装添加联系人功能
- 测试添加联系人功能
3.1.1结构体设计部分
#define MAX 1000
//设计联系人结构体
struct Person
{
string m_Name;
string m_Address;
string m_Phone;
int m_Age;
};
//设计通讯录结构体
struct AddressBook
{
//通讯录中保存联系人的数组
struct Person personArray[MAX];
//通讯录中当前记录联系人的个数
int m_Size;
};
3.1.2 添加功能函数实现
首先要在main中创建一个结构体变量
int main()
{
//创建一个通讯录变量
AddressBook book;
//初始化通讯录当前人员个数
book.m_Size = 0;
while (true) // 加一个while循环,当某些功能执行完毕重新显示菜单
{
上面代码(略)
}
system("pause");
return 0;
}
封装添加功能函数
#include<iostream>
#include<string>
using namespace std;
#define MAX 1000
//设计联系人结构体
struct Person
{
略
};
//设计通讯录结构体
struct AddressBook
{
略
};
void ShowMenu()
{
略
}
//添加联系人功能 传入的是一个地址用指针接受
void addPerson(AddressBook * book)
{
//判断通讯录是否已满
if (book->m_Size == MAX)
{
cout << "通讯录已满,无法添加!" << endl;
return;
}
else
{
//添加具体联系人
string name;
cout << "请输入联系人姓名:" << endl;
cin >> name;
book->personArray[book->m_Size].m_Name = name;
string address;
cout << "请输入联系人地址:" << endl;
cin >>address;
book->personArray[book->m_Size].m_Address = address;
string phone;
cout << "请输入联系人电话:" << endl;
cin >> phone;
book->personArray[book->m_Size].m_Phone = phone;
int age;
cout << "请输入联系人年龄:" << endl;
cin >> age;
book->personArray[book->m_Size].m_Age = age;
//更新通讯录人数
book->m_Size++;
cout << "添加联系人成功!" << endl;
system("pause");
system("cls");
}
}
int main(略)
4.删除联系人功能实现
功能描述:根据姓名删除联系人(首先要判断是否存在)
步骤实现:
- 封装检测联系人是否存在
- 封装删除联系人功能
//检测人员是否存在,如果存在返回联系人所在数组中的具体位置,不存在返回-1
int isExist(AddressBook* book, string name)
{
for (int i = 0; i < book->m_Size; i++)
{
if ( book->personArray[i].m_Name ==name)
{
return i;
}
}
return -1;
}
封装删除联系人功能
void deletePerson(AddressBook *book)
{
string name;
cout << "请输入所要删除联系人姓名" << endl;
cin >> name;
int p =isExist(book,name);
if (p != - 1)
{
for (int i = p; i < book->m_Size; i++)
{
book->personArray[i] = book->personArray[i + 1];
}
book->m_Size--;
cout << "删除成功" << endl;
system("pause");
system("cls");
}
else
{
cout << "未找到该联系人" << endl;
system("pause");
system("cls");
}
}
5.查找联系人功能实现
功能描述:1.可根据姓名特定查找联系人也可 2.显示通讯录中所有联系人
在精确查找中我们复用了之前的isExist()函数
void ShowPerson(AddressBook * book)
{
if (book->m_Size == 0)
{
cout << "联系人还为空" << endl;
system("pause");
system("cls");
}
else
{
int i;
cout << "输入1精确查找 输入2显示全部联系人" << endl;
cin >> i;
if (i == 1)
{
string name;
cout << "请输入您要查找的联系人:" << endl;
cin >> name;
isExist(book, name);
int p = isExist(book, name);
cout << "联系姓名:" << book->personArray[p].m_Name << "\t";
cout << "联系人地址" << book->personArray[p].m_Address << "\t";
cout << "联系人年龄" << book->personArray[p].m_Age << "\t";
cout << "联系人电话" << book->personArray[p].m_Phone << endl;
}
else
{
for (int i = 0; i < book->m_Size; i++)
{
cout << "联系姓名:" << book->personArray[i].m_Name << "\t";
cout << "联系人地址" << book->personArray[i].m_Address << "\t";
cout << "联系人年龄" << book->personArray[i].m_Age << "\t";
cout << "联系人电话" << book->personArray[i].m_Phone << endl;
}
system("pause");
system("cls");
}
}
}
6.修改联系人功能
修改功能其实就是把添加 查找功能做出一个部分代码的结合
void modifyPerson(AddressBook* book)
{
string name;
cout << "请输入所要修改联系人姓名" << endl;
cin >> name;
int p = isExist(book, name);
if (p != - 1)
{
string name;
cout << "请输入联系人姓名:" << endl;
cin >> name;
book->personArray[p].m_Name = name;
string address;
cout << "请输入联系人地址:" << endl;
cin >> address;
book->personArray[p].m_Address = address;
string phone;
cout << "请输入联系人电话:" << endl;
cin >> phone;
book->personArray[p].m_Phone = phone;
int age;
cout << "请输入联系人年龄:" << endl;
cin >> age;
book->personArray[p].m_Age = age;
system("pause");
system("cls");
}
else
{
cout << "未找到该联系人" << endl;
system("pause");
system("cls");
}
}
7.清空功能
因为本案例并没有涉及文件的读写操作,所以清空联系人实际上相当于修改地址
void cleanPerson(AddressBook* book)
{
book->m_Size = 0;
cout << "清空联系人成功" << endl;
system("pause");
system("cls");
}
全部代码
#include<iostream>
#include<string>
using namespace std;
#define MAX 1000
//设计联系人结构体
struct Person
{
string m_Name;
string m_Address;
string m_Phone;
int m_Age;
};
//设计通讯录结构体
struct AddressBook
{
//通讯录中保存联系人的数组
struct Person personArray[MAX];
//通讯录中当前记录联系人的个数
int m_Size;
};
void ShowMenu()
{
cout << endl;
cout << " ------------------ 通讯录管理系统 -----------------" << endl;
cout << " ------------------ 1. 添加联系人信息 -----------------" << endl;
cout << " ------------------ 2. 删除联系人信息 -----------------" << endl;
cout << " ------------------ 3. 修改联系人信息 -----------------" << endl;
cout << " ------------------ 4. 查找联系人信息 -----------------" << endl;
cout << " ------------------ 5. 清除联系人信息 -----------------" << endl;
cout << " ------------------ 6. 退出系统 -----------------" << endl;
}
//添加联系人功能 传入的是一个地址用指针接受
void addPerson(AddressBook * book)
{
//判断通讯录是否已满
if (book->m_Size == MAX)
{
cout << "通讯录已满,无法添加!" << endl;
return;
}
else
{
//添加具体联系人
string name;
cout << "请输入联系人姓名:" << endl;
cin >> name;
book->personArray[book->m_Size].m_Name = name;
string address;
cout << "请输入联系人地址:" << endl;
cin >>address;
book->personArray[book->m_Size].m_Address = address;
string phone;
cout << "请输入联系人电话:" << endl;
cin >> phone;
book->personArray[book->m_Size].m_Phone = phone;
int age;
cout << "请输入联系人年龄:" << endl;
cin >> age;
book->personArray[book->m_Size].m_Age = age;
//更新通讯录人数
book->m_Size++;
cout << "添加联系人成功!" << endl;
system("pause");
system("cls");
}
}
//检测人员是否存在,如果存在返回联系人所在数组中的具体位置,不存在返回-1
int isExist(AddressBook* book, string name)
{
for (int i = 0; i < book->m_Size; i++)
{
if ( book->personArray[i].m_Name ==name)
{
return i;
}
}
return -1;
}
//显示联系人功能函数
void ShowPerson(AddressBook * book)
{
if (book->m_Size == 0)
{
cout << "联系人还为空" << endl;
system("pause");
system("cls");
}
else
{
int i;
cout << "输入1精确查找 输入2显示全部联系人" << endl;
cin >> i;
if (i == 1)
{
string name;
cout << "请输入您要查找的联系人:" << endl;
cin >> name;
int p =isExist(book, name);
if (p != - 1)
{
cout << "联系姓名:" << book->personArray[p].m_Name << "\t";
cout << "联系人地址" << book->personArray[p].m_Address << "\t";
cout << "联系人年龄" << book->personArray[p].m_Age << "\t";
cout << "联系人电话" << book->personArray[p].m_Phone << endl;
system("pause");
system("cls");
}
else
{
cout << "未找到该联系人" << endl;
system("pause");
system("cls");
}
}
else
{
for (int i = 0; i < book->m_Size; i++)
{
cout << "联系姓名:" << book->personArray[i].m_Name << "\t";
cout << "联系人地址" << book->personArray[i].m_Address << "\t";
cout << "联系人年龄" << book->personArray[i].m_Age << "\t";
cout << "联系人电话" << book->personArray[i].m_Phone << endl;
}
system("pause");
system("cls");
}
}
}
//删除联系人函数
void deletePerson(AddressBook *book)
{
string name;
cout << "请输入所要删除联系人姓名" << endl;
cin >> name;
int p =isExist(book,name);
if (p != - 1)
{
for (int i = p; i < book->m_Size; i++)
{
book->personArray[i] = book->personArray[i + 1];
}
book->m_Size--;
cout << "删除成功" << endl;
system("pause");
system("cls");
}
else
{
cout << "未找到该联系人" << endl;
system("pause");
system("cls");
}
return;
}
//修改联系人功能
void modifyPerson(AddressBook* book)
{
string name;
cout << "请输入所要修改联系人姓名" << endl;
cin >> name;
int p = isExist(book, name);
if (p != - 1)
{
string name;
cout << "请输入联系人姓名:" << endl;
cin >> name;
book->personArray[p].m_Name = name;
string address;
cout << "请输入联系人地址:" << endl;
cin >> address;
book->personArray[p].m_Address = address;
string phone;
cout << "请输入联系人电话:" << endl;
cin >> phone;
book->personArray[p].m_Phone = phone;
int age;
cout << "请输入联系人年龄:" << endl;
cin >> age;
book->personArray[p].m_Age = age;
system("pause");
system("cls");
}
else
{
cout << "未找到该联系人" << endl;
system("pause");
system("cls");
}
}
//清空联系人功能
void cleanPerson(AddressBook* book)
{
book->m_Size = 0;
cout << "清空联系人成功" << endl;
system("pause");
system("cls");
}
int main()
{
//创建一个通讯录变量
AddressBook book;
//初始化通讯录当前人员个数
book.m_Size = 0;
while (true) // 加一个while循环,当某些功能执行完毕重新显示菜单
{
ShowMenu();//显示菜单
int select = 0; //创建一个变量存储用户的输入
cin >> select;
switch (select)
{
case 1: //1. 添加联系人信息
addPerson(&book);
break;
case 2: //2. 删除联系人信息
deletePerson(& book);
break;
case 3: //3. 修改联系人信息
modifyPerson(&book);
break;
case 4: //4. 查找联系人信息
ShowPerson(&book);
break;
case 5: //5. 清除联系人信息
cleanPerson(&book);
break;
case 6: //6. 退出系统
cout << "即将退出通讯录系统" << endl;
system("pause");
return 0;
break;
}
}
system("pause");
return 0;
}