@[toc]
项目:C++创建通讯录管理系统
1.创建操作界面
创建showMenu函数显示如下界面:
1.添加联系人 2.显示联系人 3.删除联系人
4.查找联系人 5.修改联系人 6.清空联系人 0.退出通讯录
示例 封装showMenu函数显示界面
#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;
}
2.退出功能
只有输入0时才退出选择界面 示例 输入0退出界面
#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)//返回0时才退出选择界面
{
showMenu();
cout << "请选择: " << endl;
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.清空联系人
break;
case 0://0.退出通讯录
cout << "欢迎下次使用!" << endl;
system("pause");
return 0;
break;
}
}
system("pause");
return 0;
}
3.添加联系人
程序要求: 联系人上限1000人,信息包含姓名,性别,年龄,联系电话,家庭住址
编程思路: 1.创建person联系人结构体用于存储联系人信息 2.创建addressPerson通讯录结构体用于存储person及联系人数量 3.创建addPerson函数用于添加联系人
3.1先判断联系人数量是否小于1000,小于继续操作否则提示并退出 3.2输入联系人信息并编号
3.1封装联系人结构体
示例 person结构体
struct person
{
string name;
string age;
int sex;//性别:1.男2.女
int number;
string address;
};
3.2封装通讯录结构体
示例 addressBooks结构体
#define max 1000;//max最大量为1000
struct addressBooks
{
//联系人数组
struct person personarr[max];
//当前联系人个数
int size;
};
3.3封装添加联系人函数
示例 封装addPerson函数添加联系人
void addPerson(struct addressBooks *namelist )
{
//判断:如果通讯录达到1000条则退出界面,否则可以继续操作
if (namelist->size == max)
{
cout << "通讯录已满!" << endl;
return;
}
else
{
//输入联系人姓名
string name;
cout << "请输入联系人姓名:" << endl;
cin >> name;
namelist->personArr[namelist->size].name = name;//添加联系人编号
//输入联系人性别
cout << "请输入联系人性别:" << endl;
cout << "1 ------ 男:" << endl;
cout << "2 ------ 女:" << endl;
int sex = 0;
while (true)//while循环如果输入的性别不正确则重新输入
{
cin >> sex;
if (sex == 1 || sex == 2)
{
namelist->personArr[namelist->size].sex = sex;
break;
}
cout << "请输入正确的性别!" << endl;
}
//输入年龄
int age = 0;
cout << "请输入联系人年龄:" << endl;
cin >> age;
namelist->personArr[namelist->size].age = age;
//输入电话
int number = 0;
cout << "请输入联系人电话:" << endl;
cin >> number;
namelist->personArr[namelist->size].number = number;
//输入地址
string address;
cout << "请输入联系人地址:" << endl;
cin >> address;
namelist->personArr[namelist->size].address = address;
namelist->size++;//增加联系人数量
cout << "添加成功!" << endl;
system("pause");//按任意键继续
system("cls");//清屏
}
}
case1 中调用addPerson函数
case 1://1.添加联系人
addPerson(&namelist);
break;
4.显示联系人
编程思路: 1.创建showPerson函数用于显示联系人 >>1.1.showPerson先判断联系人数量,数量为0提示没有联系人,不为0则显示联系人内容
示例 封装showPerson函数显示联系人
void showPerson(struct addressBooks* namelist)
{
if (namelist->size == 0)//判断联系人数量是否为0
{
cout << "没有联系人!" << endl;
}
else
{
for (int i = 0; i < namelist->size; i++)
{
cout << "姓名:" << namelist->personArr[i].name << "\t";
cout << "性别: " << (namelist->personArr[i].sex == 1 ? "男" : "女") << "\t";//三木运算符?:判断性别 1男 2女
cout << "年龄:" << namelist->personArr[i].age << "\t";
cout << "电话:" << namelist->personArr[i].number << "\t";
cout << "住址:" << namelist->personArr[i].address << endl;
system("pause");
system("cls");
}
}
}
示例 调用showPerson函数显示联系人
case 2://2.显示联系人
showPerson(&namelist);
break;
5.删除联系人
设计思路: 1.封装函数isExist按联系人姓名查找联系人返回联系人编号,没有返回-1 2.封装函数delPerson在其中调用isExist函数,返回联系人值删除该联系人,若不存在输出查无此人 3.删除后减少对应联系人数量
示例 封装isExist函数查找联系人
int isExist(struct addressBooks* namelist, string name)//整型函数有返回值,返回联系人编号或-1
{
for (int i = 0; i < namelist->size; i++)
{
if (namelist->personArr[i].name == name)//查找联系人并返回编号
{
return i;
}
}
return -1;
}
示例 初步测试isExist函数
case 3://3.删除联系人
{
string name;
cout << "请输入联系人姓名:" << endl;
cin >> name;
if (isExist(&namelist, name) == -1)
{
cout << "查无此人!" << endl;
}
}
break;
示例 封装delPerson函数删除联系人
void delPerson(struct addressBooks *namelist)
{
string name;
cout << "请输出要删除的联系人姓名:" << endl;
cin >> name;
//ret == -1没查到,ret != -1查到了
int ret = isExist(namelist, name);//调用isExist函数返回联系人编号,用变量ret接受返回值
if (ret != -1)
{
for(int i = ret; i < namelist->size; i++ )
{
namelist->personArr[i] = namelist->personArr[i + 1];//用i+1个联系人的信息覆盖第i个联系人,从而删除i的信息
}
namelist->size--;//删除后联系人数量-1
cout << "删除成功!" << endl;
}
else
{
cout << "查无此人!" << endl;//isExist函数返回-1则输出查无此人
}
system("pause");
system("cls");
};
6.查找联系人
编程思路: 封装findPerson函数在其中调用isExist函数,根据其返回值输出联系人信息,没有则返回查无此人
示例 封装findPerson函数
void findPerson(struct addressBooks* namelist)
{
string name;
cout << "请输入要查找的联系人姓名:" << endl;
cin >> name;
int ret = isExist(namelist, name);
if (ret != -1)
{
cout << "姓名:" << namelist->personArr[ret].name << "\t";
cout << "性别: " << (namelist->personArr[ret].sex == 1 ? "男" : "女") << "\t";//三木运算符?:判断性别 1男 2女
cout << "年龄:" << namelist->personArr[ret].age << "\t";
cout << "电话:" << namelist->personArr[ret].number << "\t";
cout << "住址:" << namelist->personArr[ret].address << endl;
}
else
{
cout << "查无此人" << endl;
system("pause");
system("cls");
}
};
7.修改联系人
编程思路: 封装modifyPerson函数在其中调用isExit函数,根据回值覆盖原联系人信息,无返回值则返回查无此人
示例 modifyPerson函数修改联系人
void modifyPerson(struct addressBooks * namelist)
{
cout << "请输入要修改的联系人姓名:" << endl;
string name;
cin >> name;
int ret = isExist(namelist, name);
if (ret != -1)
{
//修改联系人姓名
cout << "请输入新的联系人姓名:" << endl;
cin >> name;
namelist->personArr[ret].name = name;//添加联系人编号
//输入联系人性别
cout << "请输入新的联系人性别:" << endl;
cout << "1 ------ 男:" << endl;
cout << "2 ------ 女:" << endl;
int sex = 0;
while (true)//while循环如果输入的性别不正确则重新输入
{
cin >> sex;
if (sex == 1 || sex == 2)
{
namelist->personArr[ret].sex = sex;
break;
}
cout << "请输入正确的性别!" << endl;
}
//输入年龄
int age = 0;
cout << "请输入新的联系人年龄:" << endl;
cin >> age;
namelist->personArr[ret].age = age;
//输入电话
int number = 0;
cout << "请输入联系人电话:" << endl;
cin >> number;
namelist->personArr[ret].number = number;
//输入地址
string address;
cout << "请输入新的联系人地址:" << endl;
cin >> address;
namelist->personArr[ret].address = address;
cout << "修改成功!" << endl;
}
else
{
cout << "查无此人!" << endl;
}
system("pause");//按任意键继续
system("cls");//清屏
}
8.清空联系人
编程思路: 封装cleanPerson函数清空联系人信息,将联系人数量清零,做逻辑清空
示例 cleanPerson函数逻辑清空联系人
void cleanPerson(struct addressBooks* namelist)
{
while (true)
{
int sure;
cout << "确认要清空联系人列表吗?" << endl;
cout << "确认回复\"1\"" << endl;
cout << "取消回复\"0\"" << endl;
cin >> sure;
if (sure == 1)
{
namelist->size = 0;//联系人数量为0,逻辑清空联系人列表
cout << "已清空联系人列表!" << endl;
break;
}
else if(sure == 0)
{
cout << "取消清空联系人列表!" << endl;
break;
}
else
{
cout << "输入有误,请重新输入!" << endl;
}
}
system("pause");
system("cls");
}
9.完整代码
#include<iostream>
using namespace std;
#include<string>
#define max 1000//定义max最大值为1000
//1.创建选择界面showMenu
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;
}
//2.创建结联系人构体保存联系人信息
struct person
{
string name;
int sex;
int age;
int number;
string address;
};
struct addressBooks
{
struct person personArr[max];
int size;
};
//3.创建添加联系人函数addPerson
void addPerson(struct addressBooks *namelist )
{
//判断:如果通讯录达到1000条则退出界面,否则可以继续操作
if (namelist->size == max)
{
cout << "通讯录已满!" << endl;
return;
}
else
{
//输入联系人姓名
string name;
cout << "请输入联系人姓名:" << endl;
cin >> name;
namelist->personArr[namelist->size].name = name;//添加联系人编号
//输入联系人性别
cout << "请输入联系人性别:" << endl;
cout << "1 ------ 男:" << endl;
cout << "2 ------ 女:" << endl;
int sex = 0;
while (true)//while循环如果输入的性别不正确则重新输入
{
cin >> sex;
if (sex == 1 || sex == 2)
{
namelist->personArr[namelist->size].sex = sex;
break;
}
cout << "请输入正确的性别!" << endl;
}
//输入年龄
int age = 0;
cout << "请输入联系人年龄:" << endl;
cin >> age;
namelist->personArr[namelist->size].age = age;
//输入电话
int number = 0;
cout << "请输入联系人电话:" << endl;
cin >> number;
namelist->personArr[namelist->size].number = number;
//输入地址
string address;
cout << "请输入联系人地址:" << endl;
cin >> address;
namelist->personArr[namelist->size].address = address;
namelist->size++;//增加联系人数量
cout << "添加成功!" << endl;
system("pause");//按任意键继续
system("cls");//清屏
}
}
void showPerson(struct addressBooks* namelist)
{
if (namelist->size == 0)//判断联系人数量是否为0
{
cout << "没有联系人!" << endl;
}
else
{
for (int i = 0; i < namelist->size; i++)
{
cout << "姓名:" << namelist->personArr[i].name << "\t";
cout << "性别: " << (namelist->personArr[i].sex == 1 ? "男" : "女") << "\t";//三木运算符?:判断性别 1男 2女
cout << "年龄:" << namelist->personArr[i].age << "\t";
cout << "电话:" << namelist->personArr[i].number << "\t";
cout << "住址:" << namelist->personArr[i].address << endl;
}
}
system("pause");
system("cls");
}
int isExist(struct addressBooks* namelist, string name)//整型函数有返回值,返回联系人编号或-1
{
for (int i = 0; i < namelist->size; i++)
{
if (namelist->personArr[i].name == name)//查找联系人并返回编号
{
return i;
}
}
return -1;
}
void delPerson(struct addressBooks *namelist)
{
string name;
cout << "请输出要删除的联系人姓名:" << endl;
cin >> name;
//ret == -1没查到,ret != -1查到了
int ret = isExist(namelist, name);//调用isExist函数返回联系人编号,用变量ret接受返回值
if (ret != -1)
{
for(int i = ret; i < namelist->size; i++ )
{
namelist->personArr[i] = namelist->personArr[i + 1];//用i+1个联系人的信息覆盖第i个联系人,从而删除i的信息
}
namelist->size--;//删除后联系人数量-1
cout << "删除成功!" << endl;
}
else
{
cout << "查无此人!" << endl;//isExist函数返回-1则输出查无此人
}
system("pause");
system("cls");
};
void findPerson(struct addressBooks* namelist)
{
string name;
cout << "请输入要查找的联系人姓名:" << endl;
cin >> name;
int ret = isExist(namelist, name);
if (ret != -1)
{
cout << "姓名:" << namelist->personArr[ret].name << "\t";
cout << "性别: " << (namelist->personArr[ret].sex == 1 ? "男" : "女") << "\t";//三木运算符?:判断性别 1男 2女
cout << "年龄:" << namelist->personArr[ret].age << "\t";
cout << "电话:" << namelist->personArr[ret].number << "\t";
cout << "住址:" << namelist->personArr[ret].address << endl;
}
else
{
cout << "查无此人" << endl;
system("pause");
system("cls");
}
};
void modifyPerson(struct addressBooks * namelist)
{
cout << "请输入要修改的联系人姓名:" << endl;
string name;
cin >> name;
int ret = isExist(namelist, name);
if (ret != -1)
{
//修改联系人姓名
cout << "请输入新的联系人姓名:" << endl;
cin >> name;
namelist->personArr[ret].name = name;//添加联系人编号
//输入联系人性别
cout << "请输入新的联系人性别:" << endl;
cout << "1 ------ 男:" << endl;
cout << "2 ------ 女:" << endl;
int sex = 0;
while (true)//while循环如果输入的性别不正确则重新输入
{
cin >> sex;
if (sex == 1 || sex == 2)
{
namelist->personArr[ret].sex = sex;
break;
}
cout << "请输入正确的性别!" << endl;
}
//输入年龄
int age = 0;
cout << "请输入新的联系人年龄:" << endl;
cin >> age;
namelist->personArr[ret].age = age;
//输入电话
int number = 0;
cout << "请输入联系人电话:" << endl;
cin >> number;
namelist->personArr[ret].number = number;
//输入地址
string address;
cout << "请输入新的联系人地址:" << endl;
cin >> address;
namelist->personArr[ret].address = address;
cout << "修改成功!" << endl;
}
else
{
cout << "查无此人!" << endl;
}
system("pause");//按任意键继续
system("cls");//清屏
}
void cleanPerson(struct addressBooks* namelist)
{
while (true)
{
int sure;
cout << "确认要清空联系人列表吗?" << endl;
cout << "确认回复\"1\"" << endl;
cout << "取消回复\"0\"" << endl;
cin >> sure;
if (sure == 1)
{
namelist->size = 0;//联系人数量为0,逻辑清空联系人列表
cout << "已清空联系人列表!" << endl;
break;
}
else if(sure == 0)
{
cout << "取消清空联系人列表!" << endl;
break;
}
else
{
cout << "输入有误,请重新输入!" << endl;
}
}
system("pause");
system("cls");
}
int main()
{
struct addressBooks namelist;
namelist.size = 0;
while (true)//返回0时才退出选择界面
{
int select = 0;
showMenu();
cout << "请选择: " << endl;
cin >> select;
switch(select)
{
case 1://1.添加联系人
addPerson(&namelist);
break;
case 2://2.显示联系人
showPerson(&namelist);
break;
case 3://3.删除联系人
/*{
string name;
cout << "请输入联系人姓名:" << endl;
cin >> name;
if (isExist(&namelist, name) == -1)
{
cout << "查无此人!" << endl;
}
}*/
delPerson(&namelist);
break;
case 4://4.查找联系人
findPerson(&namelist);
break;
case 5://5.修改联系人
modifyPerson(&namelist);
break;
case 6://6.清空联系人
cleanPerson(&namelist);
break;
case 0://0.退出通讯录
cout << "欢迎下次使用!" << endl;
system("pause");
return 0;
break;
}
}
system("pause");
return 0;
}