使用c++做一个通讯录管理项目
项目要求:
1、添加联系人
2、显示联系人
3、删除联系人
4、查找联系人
5、修改联系人
6、清空联系人
0、推出通讯录
一、确定主函数主体,使用switch语句来判断对应要求
二、初始菜单
1.创建一个void函数,输出通讯录的提示信息
#include"Menu.h"
//创建一个菜单栏
void Menu()
{
cout << "*************************" << endl
<< "***** 1、添加联系人 *****" << endl
<< "***** 2、显示联系人 *****" << endl
<< "***** 3、删除联系人 *****" << endl
<< "***** 4、查找联系人 *****" << endl
<< "***** 5、修改联系人 *****" << endl
<< "***** 6、清空联系人 *****" << endl
<< "***** 0、退出通讯录 *****" << endl
<< "*************************" << endl;
}
三、创建结构体
1.创建所需结构体(联系人)Struct_connect.h文件
#pragma once
#include<iostream>
using namespace std;
#define Max 1000
struct Connect
{
string name;
int age;
int sex;
string loc; //位置
string phone;
};
struct AddressBooks
{
struct Connect Addarr[Max];
int Size; //记录当前人员
};
四、编写Add函数来添加联系人
#include"Add.h"
#include"Struct_connect.h"
void add(AddressBooks *abs)
{
//判断通讯录是否满了
if (abs->Size == Max)
{
cout << "通讯录已满无法添加" << endl;
}
else
{
string name;
int age;
int sex = 0;
string loc; //位置
string phone;
//姓名
cout << "请输入姓名" << endl;
//cin >> abs->Addarr->name; 后续输入的信息,在数组里引发位置冲突
/*
创建并输入名字,经过abs传值到Addarr数组,
再因为Size自己++,
当多个信息写入不会有重复地址,最后赋值name
*/
cin >> name;
abs->Addarr[abs->Size].name = name;
//年龄
cout << "请输入年龄" << endl;
cin >> age;
abs->Addarr[abs->Size].age = age;
cout << "请输入性别" << endl;
//性别
cout << "1 -------- 男" << endl
<< "2 -------- 女" << endl;
while (true)
{
cin >> sex;
if (sex == 1 || sex == 2 || sex == 0)
{
abs->Addarr[abs->Size].sex = sex;
break;
}
else
cout << "请重新输入" << endl;
}
//地理位置
cout << "请输入家庭住址" << endl;
cin >> loc;
abs->Addarr[abs->Size].loc = loc;
//联系电话
cout << "请输入电话号码" << endl;
while (true)
{
cin >> phone;
//string phone用phone.length()可以判断电话号码长度
if (phone.length() == 11)
{
abs->Addarr[abs->Size].phone = phone;
break;
}
else
cout << "请输入正确电话号码" << endl;
}
//更新通讯录的人数
abs->Size++;
cout << "添加成功" << endl;
system("pause");
//清屏
system("cls");
}
}
最重要的核心代码:
cin >> name;
abs->Addarr[abs->Size].name = name;
abs为AddressBooks 此结构体的指针,abs->Addarr[]即为找到AddressBooks中的Addarr这个数组,然后abs->Size为加入数组的下标,abs->Addarr[abs->Size].name = name;即为将输入的name传到结构体的name中
abs->Size++;
Size自己++,可以让多个信息写入不会有重复地址。
五、编写show函数来显示联系人
#include"Show.h"
void show(AddressBooks* abs)
{
//判断联系人人数
if (abs->Size == 0 )
{
cout << "暂无联系人" << endl;
}
else
{
for (int i = 0; i<abs->Size;i++)
{
cout << "姓名 :" << abs->Addarr[i].name << "\t"
//三元运算符如果是1是男,不是1是女
<< "性别 :" << (abs->Addarr[i].sex == 1 ?"男":"女" )<< "\t"
<< "年龄 :" << abs->Addarr[i].age << "\t"
<< "电话号码 :" << abs->Addarr[i].phone << "\t"
<< "家庭住址 :" << abs->Addarr[i].loc << endl;
}
}
system("pause");
system("cls");
}
if(abs->Size == 0)为判断联系人个数,若为0,则输出”暂无联系人“
六、编写查找代码Find
#include"Find.h"
int Findpeo(AddressBooks* abs, string name)
{
for (int i = 0; i < abs->Size; i++)
{
if (abs->Addarr[i].name == name)
{
return i; //找到了返回所在数组的位置
}
}
return -1; //没有找到
}
输入名字来查询是否有这个人,若有这个人则返回他数组的下标i,如若没有找到这个人则返回-1
七、编写delete函数来删除联系人,输入名字确定是否有这个人再进行删除操作。
#include"Delete.h"
void Delete(AddressBooks *abs)
{
//按照姓名来找人
cout << "请输入删除人的姓名 " << endl;
string name;
cin >> name;
int ret = Findpeo(abs, name);
if (ret == -1)
{
cout << "查无此人" << endl;
}
else
{
//删除操作(数组删除)
for (int i = ret; i < abs->Size; i++)
{
abs->Addarr[i] = abs->Addarr[i + 1];
}
abs->Size--;//更新通讯录中的数
cout << "删除成功!" << endl;
}
system("pause");
system("cls");
}
其中核心代码为 int ret = Findpeo(abs, name);
用ret变量来保存Findpeo返回回来的变量值,再使用if语句来判断是否有这个人,以及进行删除工作
八、编写findpeofun函数,来使用名字查找通讯录是否存储这个人
#include"findpeofun.h"
void findpeofun(AddressBooks* abs)
{
string name;
cout << "请输入你要查找人的名字" << endl;
cin >> name;
int ret = Findpeo(abs, name);
if (ret != -1)
{
cout << "姓名 :" << abs->Addarr[ret].name << "\t";
//三元运算符如果是1是男,不是1是女
cout << "性别 :" << (abs->Addarr[ret].sex == 1 ? "男" : "女") << "\t";
cout << "年龄 :" << abs->Addarr[ret].age << "\t";
cout << "电话号码 :" << abs->Addarr[ret].phone << "\t";
cout << "地理位置 :" << abs->Addarr[ret].loc << endl;
}
else
{
cout << "查无此人" << endl;
}
system("pause");
//清屏
system("cls");
}
同样也是使用Find函数来查找是否存在,并进行下一步查找
九、编写change 函数来修改联系人
#include"change.h"
void change(AddressBooks* abs)
{
string name;
cout << "请输出你要修改的人的姓名" << endl;
cin >> name;
int ret = Findpeo(abs, name);
if (ret != -1)
{
cout << "请重新输入姓名" << endl;
cin >> abs->Addarr[ret].name;
cout << "请重新输入性别" << endl;
cout << "1 -------- 男" << endl
<< "2 -------- 女" << endl;
while (true)
{
cin >> abs->Addarr[ret].sex;
int sex = abs->Addarr[ret].sex;
if (sex == 1 || sex == 2 || sex == 0)
{
abs->Addarr[abs->Size].sex = sex;
break;
}
else
cout << "请重新输入" << endl;
}
cout << "请重新输入年龄" << endl;
cin >> abs->Addarr[ret].age;
cout << "请重新输入电话号码" << endl;
while (true)
{
cin >> abs->Addarr[ret].phone;
string phone = abs->Addarr[ret].phone;
//string phone用phone.length()可以判断电话号码长度
if (phone.length() == 11)
{
abs->Addarr[abs->Size].phone = phone;
break;
}
else
cout << "请输入正确电话号码" << endl;
}
cout << "请重新输入家庭住址" << endl;
cin >> abs->Addarr[ret].loc;
cout << "修改成功" << endl;
}
else
{
cout << "查无此人" << endl;
}
system("pause");
//清屏
system("cls");
}
同理使用find函数
其中
string phone = abs->Addarr[ret].phone;
//string phone用phone.length()可以判断电话号码长度
if (phone.length() == 11)
用string 来定义电话号码,可以使用.length 来判断是否有11位,是否满足要求
十、编写clear函数,清空联系人
#include"clear.h"
void clear(AddressBooks* abs)
{
cout << "是否真的要清空通讯录 是按1 否按0" << endl;
int num;
while (true)
{
cin >> num;
if (num == 1)
{
abs->Size = 0;//通讯录置0,无法访问
cout << "通讯录清空" << endl;
system("pause");
system("cls");
break;
}
else if (num == 0)
{
system("pause");
system("cls");
break;
}
else
{
cout << "输入有误,请重新输入 1 或 0" << endl;
}
}
}
清空的核心思路为将数组置0,外部找不到存储
abs->Size = 0;//通讯录置0,无法访问
十一、退出通讯录
cout << "欢迎下次使用" << endl;
system("pause");
return 0;
break;
最后主函数为
#include<iostream>
using namespace std;
#include"Menu.h"
#include"Add.h"
#include"Struct_connect.h"
#include"Show.h"
#include"Delete.h"
#include"findpeofun.h"
#include"change.h"
#include"clear.h"
int main()
{
int Num = 0;
AddressBooks abs;
abs.Size = 0;
while (true)
{
//显示菜单
Menu();
cin >> Num;
switch (Num)
{
case 1: //添加联系人
add(&abs);
break;
case 2: //显示联系人
show(&abs);
break;
case 3: //删除联系人
Delete(&abs);
break;
case 4: //查找联系人
findpeofun(&abs);
break;
case 5: //修改联系人
change(&abs);
break;
case 6: //清空联系人
clear(&abs);
break;
case 0: //退出通讯录
cout << "欢迎下次使用" << endl;
system("pause");
return 0;
break;
default:
system("cls");
cout << "通讯录目前还没有此功能请重新输入其他数字" << endl
<< "--------------------------------------" << endl;
break;
}
}
system("pause");
return 0;
}