没过几天通讯录也终于做完了,今天就为我们近三个星期的c++初级学习画上一个完美的句号吧
系统需求
通讯录是一个可以记录亲人、好友信息的工具。
本教程主要利用C++来实现一个通讯录管理系统
系统中需要实现的功能如下:
-
添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人
-
显示联系人:显示通讯录中所有联系人信息
-
删除联系人:按照姓名进行删除指定联系人
-
查找联系人:按照姓名查看指定联系人信息
-
修改联系人:按照姓名重新修改指定联系人
-
清空联系人:清空通讯录中所有信息
-
退出通讯录:退出当前使用的通讯录
首先我们先创建一个项目,创建完后就可以开始编写代码了
1.菜单功能
功能描述:用户选择功能的界面
菜单界面效果如下图:
步骤:
-
封装函数显示该界面 如:void menu();
-
在main函数中调用封装好的函数
代码如下:
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;
}
同时在main函数中对函数进行调用:
int main()
{
showmenu();
system("pause");
return 0;
}
做完菜单后我们就可以开始着手制作各种功能了
其中最简单的是退出功能
我们就先从最简单的开始
2.退出功能
功能描述:退出通讯录系统
思路:根据用户不同的选择,进入不同的功能,可以选择switch分支结构,将整个架构进行搭建
当用户选择0时候,执行退出,选择其他先不做操作,也不会退出程序
代码如下:
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;
}
做完退出功能后,我们运行一下看看效果:
大致框架搭建好后我们就可以对各个功能进行填充;
3.添加联系人
功能描述:
实现添加联系人功能,联系人上限为1000人,联系人信息包括(姓名、性别、年龄、联系电话、家庭住址)
添加联系人实现步骤:
-
设计联系人结构体
-
设计通讯录结构体
-
main函数中创建通讯录
-
封装添加联系人函数
-
测试添加联系人功能
第一步设计联系人结构体,联系人信息包括:姓名、性别、年龄、联系电话、家庭住址
代码如下:
include<string>//不要忘记添加string头文件
struct person {
string name;
int sex;
int age;
string phone;
string addr;
};
同样的设计通讯录结构体,可以在通讯录结构体中,维护一个容量为1000的存放联系人的数组,并记录当前通讯录中联系人数量;
代码如下:
#define max 1000//最大人数
struct addressbooks {
//通讯录中保存的联系人数组
struct person personarray[max];
//通讯录中当前记录联系人个数
int size;
};
然后在添加联系人函数封装好后,在main函数中创建一个通讯录变量,这个就是我们需要一直维护的通讯录
代码如下:
//创建通讯录结构体变量
addressbooks abs;
abs.size = 0;
封装添加联系人函数
思路:添加联系人前先判断通讯录是否已满,如果满了就不再添加,未满情况将新联系人信息逐个加入到通讯录
代码如下:
void addperson(addressbooks*abs){
//判断通讯录是否已满,如果满了就不再添加
if(abs->size==max)
{
cout << "通讯录已满,无法再添加!" << endl;
return;
}
else {
//添加具体联系人
//姓名
string name;
cout << "请输入姓名:" << endl;
cin >> name;
abs->personarray[abs->size].name = name;
//性别
cout << "请输入性别:" << endl;
cout << "1----男" << endl;
cout << "2----女" << endl;
int sex = 0;
while (true) {
//如果输入的是1或者2可以退出循环
cin >> sex;
if (sex == 1 || sex == 2) {
abs->personarray[abs->size].sex = sex;
break;
}
cout << "输入有误,请重新输入" << endl;
}
//年龄
cout << "请输入年龄:" << endl;
int age = 0;
while (true) {
cin >> age;
if (0 < age < 150) {
abs->personarray[abs->size].age = age;
break;
}
cout << "输入有误,请重新输入" << endl;
}
//电话
cout << "请输入联系电话:" << endl;
string phone;
cin >> phone;
abs->personarray[abs->size].phone = phone;
//地址
cout << "请输入家庭地址:" << endl;
string addr;
cin >> addr;
abs->personarray[abs->size].addr = addr;
//更新通讯录人数
abs->size++;
cout << "添加成功" << endl;
system("pause");//请按任意键继续
system("cls");//清屏操作
}
}
封装好添加联系人的函数后我们要在main函数中调用该函数测试添加联系人功能
case 1://1.添加联系人
addperson(&abs);//地址传递修饰实参
break;
运行结果如下:
4.显示联系人
功能描述:显示通讯录中已有的联系人信息
显示联系人实现步骤:
-
封装显示联系人函数
-
测试显示联系人功能
封装显示联系人函数
思路:判断如果当前通讯录中没有人员,就提示记录为空,人数大于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<<" ";
cout << "性别" << abs->personarray[i].sex<< " ";
cout << "年龄" << abs->personarray[i].age <<" ";
cout << "电话" << abs->personarray[i].phone << " ";
cout << "地址" << abs->personarray[i].addr << endl;
}
}
system("pause");
system("cls");
}
然后就是测试显示联系人功能,在main函数中调用该函数;
case 2://2.显示联系人
showperson(&abs);
break;
运行结果如下:
大体上没问题,不过你们发现了没有性别那里显示的是1,因为我们要求用户输入的是数字,不过要让结果输出男或者女可以用之前学过的三目运算符进行一个判断输出,更改后代码如下:
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<<" ";
cout << "性别" << (abs->personarray[i].sex ==1?"男":"女") << " ";//三目运算符
cout << "年龄" << abs->personarray[i].age <<" ";
cout << "电话" << abs->personarray[i].phone << " ";
cout << "地址" << abs->personarray[i].addr << endl;
}
}
system("pause");
system("cls");
}
运行结果:
5.删除联系人
功能描述:按照姓名进行删除指定联系人
删除联系人实现步骤:
-
封装检测联系人是否存在
-
封装删除联系人函数
-
测试删除联系人功能
封装检测联系人是否存在
设计思路:
删除联系人前,我们需要先判断用户输入的联系人是否存在,如果存在删除,不存在提示用户没有要删除的联系人,因此我们可以把检测联系人是否存在封装成一个函数中,如果存在,返回联系人在通讯录中的位置,不存在返回-1
先封装一个检测联系人是否存在的函数,代码如下:
int isexist(addressbooks* abs, string name) {
for (int i = 0; i < abs->size; i++) {
//找到用户输入的姓名了
if (abs->personarray[i].name == name) {
return i;//找到了,返回这个人在数组中的下标和编号
}
else { return -1;
}
}
}
然后封装一个删除联系人的函数,实现思路:
根据用户输入的联系人判断该通讯录中是否有此人,查找到进行删除,并提示删除成功,查不到提示查无此人。(其实就是依次查找,找到我们想要删除的联系人后,将后面的联系人数据都往前移一格,将目标数据覆盖掉就可以了)
代码如下:
void delectperson(addressbooks* abs) {
cout << "请输入您要删除的联系人" << endl;
string name;
cin >> name;
int ret=isexist(abs, name);//ret==-1未查到//ret!=-1查到了
if (ret != -1) {
//查找到人进行删除操作
for (int i = ret; i < abs->size; i++) {
//数据前移
abs->personarray[i] = abs->personarray[i + 1];
}
abs->size--;//更新通讯录中的人员数
cout << "删除成功" << endl;
}
else { cout << "查无此人" << endl; }
system("pause");
system("cls");
}
测试删除联系人功能
在main函数中引用
case 3://3.删除联系人
delectperson(&abs);
break;
运行结果如下:
6.查找联系人
功能描述:按照姓名查看指定联系人信息
查找联系人实现步骤
- 封装查找联系人函数
- 测试查找指定联系人
封装查找联系人函数
实现思路:判断用户指定的联系人是否存在,如果存在显示信息,不存在则提示查无此人。
代码如下:
void findperson(addressbooks* abs) {
cout << "请输入您要查找的联系人" << endl;
string name;
cin >> name;
//判断指定联系人是否在通讯录中
int ret = isexist(abs, name);
if (ret != -1) {
cout << "姓名:" << abs->personarray[ret].name << "\t";
cout << "性别:" <<( abs->personarray[ret].sex==1?"男":"女") << "\t";
cout << "年龄:" << abs->personarray[ret].age << "\t";
cout << "地址:" << abs->personarray[ret].addr << "\t";
cout << "电话:" << abs->personarray[ret].phone << endl;
}//找到联系人
else//未找到联系人
{
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
检测查找联系人函数:
在main函数中引用该函数
代码如下:
case 4://4.查找联系人
findperson(&abs);
break;
运行结果:
7.修改联系人
功能描述:按照姓名重新修改指定联系人
修改联系人实现步骤
- 封装修改联系人函数
- 测试修改联系人功能
封装修改联系人函数
实现思路:查找用户输入的联系人,如果查找成功进行修改操作,查找失败提示查无此人
代码如下:
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;
//性别
int sex = 0;
while(true){
cout << "请输入性别:" << endl;
cout << "1----男" << endl;
cout << "2----女" << endl;
cin >> sex;
if (sex == 1 || sex == 2) {
abs->personarray[ret].sex = sex;
break;
}
cout << "输入有误,请重新输入" << endl;
}
//年龄
cout << "请输入年龄:" << endl;
int age = 0;
cin >> age;
abs->personarray[ret].age;
//电话
cout << "请输入联系电话:" << endl;
string phone;
cin >> phone;
abs->personarray[ret].phone = phone;
//地址
cout << "请输入家庭地址:" << endl;
string address;
cin >> address;
abs->personarray[ret].addr = address;
cout << "修改成功" << endl;
}
else {
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
测试修改联系人功能
case 5://5.修改联系人
modifyperson(&abs);
break;
运行结果:
8.清空联系人
功能描述:清空通讯录中所有信息
清空联系人实现步骤
-
封装清空联系人函数
-
测试清空联系人
封装清空联系人函数
实现思路:
将通讯录所有联系人信息清除掉,只要将通讯录记录的联系人数量置为0,做逻辑清空即可。
代码如下:
void cleanperson(addressbooks* abs) {
abs->size = 0;//将当前联系人数置为0,做逻辑清空操作
cout << "通讯录已清空" << endl;
system("pause");
system("cls");
}
检测清空联系人功能
case 6://6.清空联系人
cleanperson(&abs);
break;
运行结果:
至此通讯录的全部功能就完成了
下面是全部的代码:
#include<iostream>
#include<string>
#define max 1000
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;
}
//设计联系人结构体
struct person {
string name;
int sex;
int age;
string phone;
string addr;
};
//设计通讯录结构体
struct addressbooks {
//通讯录中保存的联系人数组
struct person personarray[max];
//通讯录中当前记录联系人个数
int size;
};
//1.添加联系人
void addperson(addressbooks*abs){
//判断通讯录是否已满,如果满了就不再添加
if(abs->size==max)
{
cout << "通讯录已满,无法再添加!" << endl;
return;
}
else {
//添加具体联系人
//姓名
string name;
cout << "请输入姓名:" << endl;
cin >> name;
abs->personarray[abs->size].name = name;
//性别
cout << "请输入性别:" << endl;
cout << "1----男" << endl;
cout << "2----女" << endl;
int sex = 0;
while (true) {
//如果输入的是1或者2可以退出循环
cin >> sex;
if (sex == 1 || sex == 2) {
abs->personarray[abs->size].sex = sex;
break;
}
cout << "输入有误,请重新输入" << endl;
}
//年龄
cout << "请输入年龄:" << endl;
int age = 0;
while (true) {
cin >> age;
if (0 < age < 150) {
abs->personarray[abs->size].age = age;
break;
}
cout << "输入有误,请重新输入" << endl;
}
//电话
cout << "请输入联系电话:" << endl;
string phone;
cin >> phone;
abs->personarray[abs->size].phone = phone;
//地址
cout << "请输入家庭地址:" << endl;
string addr;
cin >> addr;
abs->personarray[abs->size].addr = addr;
//更新通讯录人数
abs->size++;
cout << "添加成功" << endl;
system("pause");//请按任意键继续
system("cls");//清屏操作
}
}
//2.显示联系人
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<<" ";
cout << "性别" << (abs->personarray[i].sex ==1?"男":"女") << " ";//三目运算符
cout << "年龄" << abs->personarray[i].age <<" ";
cout << "电话" << abs->personarray[i].phone << " ";
cout << "地址" << abs->personarray[i].addr << endl;
}
}
system("pause");
system("cls");
}
//检测联系人是否存在,如果存在,返回联系人所在数组中的具体位置,不存在返回-1
int isexist(addressbooks* abs, string name) {
for (int i = 0; i < abs->size; i++) {
//找到用户输入的姓名了
if (abs->personarray[i].name == name) {
return i;//找到了,返回这个人在数组中的下标和编号
}
else {
return -1;
}
}
}
//3.删除联系人
void delectperson(addressbooks* abs) {
cout << "请输入您要删除的联系人" << endl;
string name;
cin >> name;
int ret=isexist(abs, name);//ret==-1未查到//ret!=-1查到了
if (ret != -1) {
//查找到人进行删除操作
for (int i = ret; i < abs->size; i++) {
//数据前移
abs->personarray[i] = abs->personarray[i + 1];
}
abs->size--;//更新通讯录中的人员数
cout << "删除成功" << endl;
}
else { cout << "查无此人" << endl; }
system("pause");
system("cls");
}
//4.查找联系人
void findperson(addressbooks* abs) {
cout << "请输入您要查找的联系人" << endl;
string name;
cin >> name;
//判断指定联系人是否在通讯录中
int ret = isexist(abs, name);
if (ret != -1) {
cout << "姓名:" << abs->personarray[ret].name << "\t";
cout << "性别:" <<( abs->personarray[ret].sex==1?"男":"女") << "\t";
cout << "年龄:" << abs->personarray[ret].age << "\t";
cout << "地址:" << abs->personarray[ret].addr << "\t";
cout << "电话:" << abs->personarray[ret].phone << endl;
}//找到联系人
else//未找到联系人
{
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
//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;
//性别
int sex = 0;
while(true){
cout << "请输入性别:" << endl;
cout << "1----男" << endl;
cout << "2----女" << endl;
cin >> sex;
if (sex == 1 || sex == 2) {
abs->personarray[ret].sex = sex;
break;
}
cout << "输入有误,请重新输入" << endl;
}
//年龄
cout << "请输入年龄:" << endl;
int age = 0;
cin >> age;
abs->personarray[ret].age;
//电话
cout << "请输入联系电话:" << endl;
string phone;
cin >> phone;
abs->personarray[ret].phone = phone;
//地址
cout << "请输入家庭地址:" << endl;
string address;
cin >> address;
abs->personarray[ret].addr = address;
cout << "修改成功" << endl;
}
else {
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
//6.清空所有联系人
void cleanperson(addressbooks* abs) {
abs->size = 0;//将当前联系人数置为0,做逻辑清空操作
cout << "通讯录已清空" << endl;
system("pause");
system("cls");
}
int main() {
//创建通讯录结构体变量
addressbooks abs;
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.删除联系人
/*{cout << "请输入删除联系人姓名:" << endl;
string name;
cin >> name;
if (isexist(&abs, name) == -1) {
cout << "查无此人" << endl;
}
else {
cout << "找到此人" << endl;
}
}*/
delectperson(&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;
}
}
system("pause");
return 0;
}
我们下周再见咯
标签:cout,联系人,c++,---,abs,通讯录,personarray,ret From: https://www.cnblogs.com/shugexia-blogs/p/16732711.html