引言
菜单功能
功能描述:用户选择功能的界面
菜单功能效果如下所示:
步骤:
1. 封装一个函数显示该界面,如:void showMenu()
2. 在main函数中调用此函数。
//菜单界面
void showMenu()
{
cout << "*******************************" << endl;
cout << "+++++\t"<< "1.添加联系人\t" << "+++++" << endl;
cout << "+++++\t"<< "2.显示联系人\t" << "+++++" << endl;
cout << "+++++\t"<< "3.删除联系人\t" << "+++++" << endl;
cout << "+++++\t"<< "4.查找联系人\t" << "+++++" << endl;
cout << "+++++\t"<< "5.修改联系人\t" << "+++++" << endl;
cout << "+++++\t"<< "6.清空联系人\t" << "+++++" << endl;
cout << "+++++\t"<< "0.退出通讯录\t" << "+++++" << endl;
cout << "*******************************" << endl;
}
退出功能
功能描述:退出通讯录系统
思路:根据用户不同的选择,做不同的操作,可以选择switch分支结构,将整个架构进行搭建
当用户选择0时,执行退出。
#include <iostream>
#include <string>
using namespace std;
//菜单界面
void showMenu()
{
cout << "*******************************" << endl;
cout << "+++++\t"<< "1.添加联系人\t" << "+++++" << endl;
cout << "+++++\t"<< "2.显示联系人\t" << "+++++" << endl;
cout << "+++++\t"<< "3.删除联系人\t" << "+++++" << endl;
cout << "+++++\t"<< "4.查找联系人\t" << "+++++" << endl;
cout << "+++++\t"<< "5.修改联系人\t" << "+++++" << endl;
cout << "+++++\t"<< "6.清空联系人\t" << "+++++" << endl;
cout << "+++++\t"<< "0.退出通讯录\t" << "+++++" << endl;
cout << "*******************************" << endl;
}
int main()
{
while (true){
showMenu();
int operation;
cout << "请选择一个操作 ";
cin >> operation;
if(operation == 0)
{
cout << "再见,欢迎下次光临" << endl;
break;
}
}
return 0;
}
#include <iostream>
#include <string>
using namespace std;
//菜单界面
void showMenu()
{
cout << "*******************************" << endl;
cout << "+++++\t"<< "1.添加联系人\t" << "+++++" << endl;
cout << "+++++\t"<< "2.显示联系人\t" << "+++++" << endl;
cout << "+++++\t"<< "3.删除联系人\t" << "+++++" << endl;
cout << "+++++\t"<< "4.查找联系人\t" << "+++++" << endl;
cout << "+++++\t"<< "5.修改联系人\t" << "+++++" << endl;
cout << "+++++\t"<< "6.清空联系人\t" << "+++++" << endl;
cout << "+++++\t"<< "0.退出通讯录\t" << "+++++" << endl;
cout << "*******************************" << endl;
}
int main()
{
while (true){
showMenu();
int operation;
cout << "请选择一个操作 ";
cin >> operation;
switch(operation){
case 1:
cout << "添加联系人" <<endl;
break;
case 2:
cout << "显示联系人" <<endl;
break;
case 3:
cout << "删除联系人" <<endl;
break;
case 4:
cout << "查找联系人" <<endl;
break;
case 5:
cout << "修改联系人" <<endl;
break;
case 6:
cout << "清空联系人" <<endl;
break;
case 0:
cout << "欢迎下次光临" <<endl;
// system("pause");
return 0;
break;
default:
break;
}
}
return 0;
}
添加联系人
功能描述:实现添加联系人,联系人上线为1000人,联系人信息包括(姓名,性别,年龄,家庭电话,家庭住址)
设计联系人结构体
联系人结构体包括:姓名,性别,年龄,家庭电话,住址
设置如下:
#include <iostream>
#include <string>
using namespace std;
#define MAX 1000 //宏常量,不需要加分号
//菜单界面
void showMenu()
{
cout << "*******************************" << endl;
cout << "+++++\t"<< "1.添加联系人\t" << "+++++" << endl;
cout << "+++++\t"<< "2.显示联系人\t" << "+++++" << endl;
cout << "+++++\t"<< "3.删除联系人\t" << "+++++" << endl;
cout << "+++++\t"<< "4.查找联系人\t" << "+++++" << endl;
cout << "+++++\t"<< "5.修改联系人\t" << "+++++" << endl;
cout << "+++++\t"<< "6.清空联系人\t" << "+++++" << endl;
cout << "+++++\t"<< "0.退出通讯录\t" << "+++++" << endl;
cout << "*******************************" << endl;
}
// 联系人结构体
struct Persion
{
string name;
int sex; //1男 2女
int age;
string phone;
string addr;
};
// 通讯录结构体
struct Addressbooks
{
//通讯录中保存的联系人的数组
struct Persion persionarray[MAX]; //MAX代表一个宏常量
// 通讯录中当前的联系人个数
int size;
};
int main()
{
while (true){
showMenu();
int operation;
cout << "请选择一个操作 ";
cin >> operation;
switch(operation){
case 1:
cout << "添加联系人" <<endl;
break;
case 2:
cout << "显示联系人" <<endl;
break;
case 3:
cout << "删除联系人" <<endl;
break;
case 4:
cout << "查找联系人" <<endl;
break;
case 5:
cout << "修改联系人" <<endl;
break;
case 6:
cout << "清空联系人" <<endl;
break;
case 0:
cout << "欢迎下次光临" <<endl;
// system("pause");
return 0;
break;
default:
break;
}
}
return 0;
}
显示联系人
#include <iostream>
#include <string>
using namespace std;
#define MAX 1000 //宏常量,不需要加分号
//菜单界面
void showMenu()
{
cout << "*******************************" << endl;
cout << "+++++\t"<< "1.添加联系人\t" << "+++++" << endl;
cout << "+++++\t"<< "2.显示联系人\t" << "+++++" << endl;
cout << "+++++\t"<< "3.删除联系人\t" << "+++++" << endl;
cout << "+++++\t"<< "4.查找联系人\t" << "+++++" << endl;
cout << "+++++\t"<< "5.修改联系人\t" << "+++++" << endl;
cout << "+++++\t"<< "6.清空联系人\t" << "+++++" << endl;
cout << "+++++\t"<< "0.退出通讯录\t" << "+++++" << endl;
cout << "*******************************" << endl;
}
// 联系人结构体
struct Persion
{
string name;
int sex; //1男 2女
int age;
string phone;
string addr;
};
// 通讯录结构体
struct Addressbooks
{
//通讯录中保存的联系人的数组
struct Persion persionarray[MAX]; //MAX代表一个宏常量
// 通讯录中当前的联系人个数
int size;
};
//1.添加联系人
void addPersion(Addressbooks * abs)
{
if(abs->size ==MAX)
{
cout << "通讯录满了" << endl;
}
else
{
//添加联系人
//姓名
string name;
cout << "输入姓名" << endl;
cin >> name;
abs->persionarray[abs->size].name = name;
// 性别
cout << "输入性别" << endl;
cout << "输入1代表男,输入2代码女" << endl;
int sex;
while(true){
cin >> sex;
if(sex ==1 || sex== 2)
{
abs->persionarray[abs->size].sex = sex;
break;
}
else{
cout << "你输入的不正确,请重新输入" <<endl;
cout << "输入1代表男,输入2代码女" << endl;
}
}
// 年龄
cout << "请输入年龄" << endl;
int age;
cin >> age;
abs->persionarray[abs->size].age = age;
// 电话
cout << "请输入电话" << endl;
string phone;
cin >> phone;
abs->persionarray[abs->size].phone = phone;
// 地址
cout << "请输入地址" << endl;
string addr;
cin >> addr;
abs->persionarray[abs->size].addr = addr;
}
//更新通讯录人数
abs->size++;
cout << "添加成功"<< endl;
system("pause"); //按任意键继续
system("cls"); //清除屏幕
}
// 2.显示联系人
void show_persion(Addressbooks abs ,Addressbooks *a)
{
if(abs.size==0)
{
cout << "通讯录中没有联系人,请添加" <<endl;
return;
}
for(int i=0;i<abs.size;i++){
cout << "联系人" << i << "\t";
cout << "姓名 " << abs.persionarray[i].name << "\t";
// cout << "性别 " << (abs.persionarray[i].sex) << "\t";
cout << "性别" <<(abs.persionarray[i].sex ==1 ? "男":"女") << "\t"; //要用字符串,不能是字符
cout << "年龄 " << abs.persionarray[i].age << "\t";
cout << "电话 " << abs.persionarray[i].phone <<"\t";
cout << "地址 " << abs.persionarray[i].addr << endl;
}
system("pause"); //按任意键继续
system("cls"); //清除屏幕
}
int main()
{
// 创建结构体变量
Addressbooks abs;
//初始化通讯录数据
abs.size = 0;
while (true){
showMenu();
int operation;
cout << "请选择一个操作 ";
cin >> operation;
switch(operation){
case 1:
addPersion(&abs); //利用地址传递,可以修改实参
cout << "添加联系人" <<endl;
break;
case 2:
cout << "显示联系人" <<endl;
show_persion(abs,&abs);
break;
case 3:
cout << "删除联系人" <<endl;
break;
case 4:
cout << "查找联系人" <<endl;
break;
case 5:
cout << "修改联系人" <<endl;
break;
case 6:
cout << "清空联系人" <<endl;
break;
case 0:
cout << "欢迎下次光临" <<endl;
// system("pause");
return 0;
break;
default:
break;
}
}
return 0;
}
删除联系人
功能描述:按照姓名进行删除信息人
//检测联系人是否存在,如果存在返回所在数组中的位置,不存在返回-1
int isexist(Addressbooks* abs, string name)
{
//参数1 通讯录 参数2 对比姓名
for (int i = 0; i < abs->size; i++) {
//找到了返回数组下标编号
if (abs->persionarray[i].name == name) {
return i;
}
}
return -1; //没找到返回-1
}
// 3.删除联系人
void delete_persion(Addressbooks* abs)
{
cout << "请输入要删除的联系人" << endl;
string d_name;
cin >> d_name;
int ret;
ret = isexist(abs, d_name);
if (ret == -1) //没有查到
{
cout << "查无此人" << endl;
} else //查到
{
//要删除一个数据,需要将数据进行整体前移,然后让通讯录中的人数减一
cout << ret << endl;
for (int i = ret; i < abs->size; i++) {
//数据前移
abs->persionarray[i] = abs->persionarray[i + 1];
}
//让abs数据减减
abs->size--;
cout << "删除成功" << endl;
}
system("pause");
system("cls");
}
查找联系人
功能描述:按照姓名查找联系人的信息
查找联系人的步骤
- 封装查找联系人函数
- 测试查找指定联系人
//检测联系人是否存在,如果存在返回所在数组中的位置,不存在返回-1
int isexist(Addressbooks* abs, string name)
{
//参数1 通讯录 参数2 对比姓名
for (int i = 0; i < abs->size; i++) {
//找到了返回数组下标编号
if (abs->persionarray[i].name == name) {
return i;
}
}
return -1; //没找到返回-1
}
// 4.查找联系人
void find_persion(Addressbooks * abs)
{
cout << "请输入你要查找的联系人" << endl;
string name;
cin >> name;
//判断是否存在
int ret;
ret = isexist(abs,name);
if(ret != -1)
{
//找到了
cout << "姓名 " << abs->persionarray[ret].name << "\t";
cout << "性别" << (abs->persionarray[ret].sex == 1 ? "男" : "女") << "\t"; //要用字符串,不能是字符
cout << "年龄 " << abs->persionarray[ret].age << "\t";
cout << "电话 " << abs->persionarray[ret].phone << "\t";
cout << "地址 " << abs->persionarray[ret].addr << endl;
}
else
{
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
// 5.修改联系人
void modify_persion(Addressbooks* abs)
{
cout << "输入你要修改的联系人" << endl;
string name;
cin >> name;
int ret;
ret = isexist(abs, name);
if (ret != -1) {
cout << "输入姓名" << endl;
string name;
cin >> name;
abs->persionarray[ret].name = name;
cout << "输入性别" << endl;
cout << "1-男" << endl;
cout << "2-女" << endl;
int sex;
cin >> sex;
abs->persionarray[ret].sex = sex;
cout << "输入年龄" << endl;
int age;
cin >> age;
abs->persionarray[ret].age = age;
cout << "输入电话" << endl;
string phone;
cin >> phone;
abs->persionarray[ret].phone = phone;
cout << "输入家庭住宅" << endl;
string addr;
cin >> addr;
abs->persionarray[ret].addr = addr;
cout << "修改成功" << endl;
} else {
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
// 6.清空联系人
void clear_persion(Addressbooks * abs)
{
abs->size = 0; //将当前联系人数量设置为0,做逻辑上清空
system("pause");
system("cls");
}
全部代码
#include <iostream>
#include <string>
using namespace std;
#define MAX 1000 //宏常量,不需要加分号
//菜单界面
void showMenu()
{
cout << "*******************************" << endl;
cout << "+++++\t"
<< "1.添加联系人\t"
<< "+++++" << endl;
cout << "+++++\t"
<< "2.显示联系人\t"
<< "+++++" << endl;
cout << "+++++\t"
<< "3.删除联系人\t"
<< "+++++" << endl;
cout << "+++++\t"
<< "4.查找联系人\t"
<< "+++++" << endl;
cout << "+++++\t"
<< "5.修改联系人\t"
<< "+++++" << endl;
cout << "+++++\t"
<< "6.清空联系人\t"
<< "+++++" << endl;
cout << "+++++\t"
<< "0.退出通讯录\t"
<< "+++++" << endl;
cout << "*******************************" << endl;
}
// 联系人结构体
struct Persion {
string name;
int sex; // 1男 2女
int age;
string phone;
string addr;
};
// 通讯录结构体
struct Addressbooks {
//通讯录中保存的联系人的数组
struct Persion persionarray[MAX]; // MAX代表一个宏常量
// 通讯录中当前的联系人个数
int size;
};
// 1.添加联系人
void addPersion(Addressbooks* abs)
{
if (abs->size == MAX) {
cout << "通讯录满了" << endl;
} else {
//添加联系人
//姓名
string name;
cout << "输入姓名" << endl;
cin >> name;
abs->persionarray[abs->size].name = name;
// 性别
cout << "输入性别" << endl;
cout << "输入1代表男,输入2代码女" << endl;
int sex;
while (true) {
cin >> sex;
if (sex == 1 || sex == 2) {
abs->persionarray[abs->size].sex = sex;
break;
} else {
cout << "你输入的不正确,请重新输入" << endl;
cout << "输入1代表男,输入2代码女" << endl;
}
}
// 年龄
cout << "请输入年龄" << endl;
int age;
cin >> age;
abs->persionarray[abs->size].age = age;
// 电话
cout << "请输入电话" << endl;
string phone;
cin >> phone;
abs->persionarray[abs->size].phone = phone;
// 地址
cout << "请输入地址" << endl;
string addr;
cin >> addr;
abs->persionarray[abs->size].addr = addr;
}
//更新通讯录人数
abs->size++;
cout << "添加成功" << endl;
system("pause"); //按任意键继续
system("cls"); //清除屏幕
}
// 2.显示联系人
void show_persion(Addressbooks abs, Addressbooks* a)
{
cout << "查看长度" << a->size << endl;
;
if (abs.size == 0) {
cout << "通讯录中没有联系人,请添加" << endl;
return;
}
for (int i = 0; i < abs.size; i++) {
cout << "联系人" << i << "\t";
cout << "姓名 " << abs.persionarray[i].name << "\t";
// cout << "性别 " << (abs.persionarray[i].sex) << "\t";
cout << "性别" << (abs.persionarray[i].sex == 1 ? "男" : "女") << "\t"; //要用字符串,不能是字符
cout << "年龄 " << abs.persionarray[i].age << "\t";
cout << "电话 " << abs.persionarray[i].phone << "\t";
cout << "地址 " << abs.persionarray[i].addr << endl;
}
system("pause"); //按任意键继续0
system("cls"); //清除屏幕
}
//检测联系人是否存在,如果存在返回所在数组中的位置,不存在返回-1
int isexist(Addressbooks* abs, string name)
{
//参数1 通讯录 参数2 对比姓名
for (int i = 0; i < abs->size; i++) {
//找到了返回数组下标编号
if (abs->persionarray[i].name == name) {
return i;
}
}
return -1; //没找到返回-1
}
// 3.删除联系人
void delete_persion(Addressbooks* abs)
{
cout << "请输入要删除的联系人" << endl;
string d_name;
cin >> d_name;
int ret;
ret = isexist(abs, d_name);
if (ret == -1) //没有查到
{
cout << "查无此人" << endl;
} else //查到
{
//要删除一个数据,需要将数据进行整体前移,然后让通讯录中的人数减一
cout << ret << endl;
for (int i = ret; i < abs->size; i++) {
//数据前移
abs->persionarray[i] = abs->persionarray[i + 1];
}
//让abs数据减减
abs->size--;
cout << "删除成功" << endl;
}
system("pause");
system("cls");
}
// 4.查找联系人
void find_persion(Addressbooks* abs)
{
cout << "请输入你要查找的联系人" << endl;
string name;
cin >> name;
//判断是否存在
int ret;
ret = isexist(abs, name);
if (ret != -1) {
//找到了
cout << "姓名 " << abs->persionarray[ret].name << "\t";
cout << "性别" << (abs->persionarray[ret].sex == 1 ? "男" : "女") << "\t"; //要用字符串,不能是字符
cout << "年龄 " << abs->persionarray[ret].age << "\t";
cout << "电话 " << abs->persionarray[ret].phone << "\t";
cout << "地址 " << abs->persionarray[ret].addr << endl;
} else {
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
// 5.修改联系人
void modify_persion(Addressbooks* abs)
{
cout << "输入你要修改的联系人" << endl;
string name;
cin >> name;
int ret;
ret = isexist(abs, name);
if (ret != -1) {
cout << "输入姓名" << endl;
string name;
cin >> name;
abs->persionarray[ret].name = name;
cout << "输入性别" << endl;
cout << "1-男" << endl;
cout << "2-女" << endl;
int sex;
cin >> sex;
abs->persionarray[ret].sex = sex;
cout << "输入年龄" << endl;
int age;
cin >> age;
abs->persionarray[ret].age = age;
cout << "输入电话" << endl;
string phone;
cin >> phone;
abs->persionarray[ret].phone = phone;
cout << "输入家庭住宅" << endl;
string addr;
cin >> addr;
abs->persionarray[ret].addr = addr;
cout << "修改成功" << endl;
} else {
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
// 6.清空联系人
void clear_persion(Addressbooks* abs)
{
abs->size = 0; //将当前联系人数量设置为0,做逻辑上清空
cout << "清空成功" <<endl;
system("pause");
system("cls");
}
int main()
{
// 创建结构体变量
Addressbooks abs;
//初始化通讯录数据
abs.size = 0;
while (true) {
showMenu();
int operation;
cout << "请选择一个操作 ";
cin >> operation;
switch (operation) {
case 1:
addPersion(&abs); //利用地址传递,可以修改实参
cout << "添加联系人" << endl;
break;
case 2:
cout << "显示联系人" << endl;
show_persion(abs, &abs);
break;
case 3: //注意:在case后是不能定义对象的,需要加对大括号才可以。
{
delete_persion(&abs);
break;
}
case 4:
find_persion(&abs);
break;
case 5:
modify_persion(&abs);
break;
case 6:
clear_persion(&abs);
break;
case 0:
cout << "欢迎下次光临" << endl;
// system("pause");
return 0;
break;
default:
break;
}
}
return 0;
}