C++入门通讯录综合管理系统代码(自写,开源)
2023-12-15 17:33:24
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
1.代码量约300行,仅实现了基于命令行的简易通讯录管理功能,其中还有许多地方可以拓展改进,以提高代码的可读性和健壮性。
2.综合运用了C++入门的if-else、switch-case、string、for、结构体嵌套、结构体数组、键值判断等思想。
3.技巧上,包括值传递与指针地址传递、函数调用、结构体数组成员变量属性的修改、索引记录等手段。
代码开源
很简单,就不进行解释了。
#include <iostream>
#include <string>
#include <cstdlib> // 添加这个头文件
using namespace std;
#define MAX_NUM 1000
//①实现一个显示菜单的功能函数
void showManu() {
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 People {
string name;//姓名
string sex;//性别
int age;//年龄
string phone_number;//电话号码
string address;//地址
};
struct AddressBooks {
struct People personArray[MAX_NUM];//嵌套联系人结构体
int current_num;//当前人数
};
//④编写添加联系人的功能函数
void Addperson(AddressBooks * ads) {//用一个指针去接收通讯录结构体的地址
//首先判断通讯录是否已经满了,满了就不再添加
if (ads->current_num >= MAX_NUM) {
cout << "通讯录已满,无法添加!" << endl;
}
else {//添加具体联系人
//姓名
string name;
cout << "请输入姓名:" << endl;
cin >> name;
ads->personArray[ads->current_num].name = name;
//年龄
int age;
cout << "请输入年龄:" << endl;
cin >> age;
ads->personArray[ads->current_num].age = age;
//性别,为了提高健壮性需要进行逻辑判断
string sex;
while (true) {
cout << "请输入性别:" << endl;
cin >> sex;
// 输入验证逻辑
if (sex == "男" || sex == "女") {
break; // 输入有效,退出循环
}
else {
cout << "性别输入无效,请重新输入。" << endl;
}
}
ads->personArray[ads->current_num].sex = sex;
//电话号码
string number;
cout << "请输入电话号码:" << endl;
cin >> number;
ads->personArray[ads->current_num].phone_number = number;
//家庭住址
string address;
cout << "请输入家庭住址:" << endl;
cin >> address;
ads->personArray[ads->current_num].address = address;
}
ads->current_num++;
cout << "添加成功!" << endl;
//_sleep(500);
system("cls");
}
//⑤编写功能:显示目前的所有联系人信息
void showperson(AddressBooks ads) {
if (ads.current_num == 0) {
cout << "抱歉,目前通讯录无联系人。" << endl;
}
else {
for (int i = 0; i < ads.current_num; i++) {
cout <<"序号:"<<i << " 联系人:" << ads.personArray[i].name << " 年龄:" << ads.personArray[i].age << " 性别:" <<
ads.personArray[i].sex << " 电话号码:" << ads.personArray[i].phone_number
<< " 家庭住址:" << ads.personArray[i].address << "\t" << endl;
}
}
}
//⑥编写功能删除特定的联系人:首先检索是否存在与输入姓名相同的联系人,然后再一次确认是否删除,最后进行删除
void deleteperson(AddressBooks* ads) {
if (ads->current_num == 0) {
cout << "通讯录为空,无法删除联系人" << endl;
}
else {
string same_name;
int ifensure;
int delete_index=-1;//一开始是一个无效值
cout << "请输入您要删除的联系人姓名:" << endl;
cin >> same_name;
for (int i = 0; i < ads->current_num; i++) {
if (ads->personArray[i].name == same_name) {
delete_index = i;//这是用来记录姓名相同的那个人在结构体数组中的序号
cout << "请再次确认您是否要删除该联系人:按“1”删除,按“2”退出" << endl;
cin >> ifensure;
}
}
if (ifensure == 1&&delete_index!=-1) {//如果要删除,并且从前往后检索一遍能找到这个相同姓名的联系人
for (int j = delete_index; j < ads->current_num-1; j++) {
ads->personArray[j] = ads->personArray[j + 1];//从delete_index后面的元素整体前移
}
ads->current_num--;//结构体数组长度减一
cout << "删除成功!" << endl;
}
else {
cout << "未找到匹配的联系人,无法删除。" << endl;
}
}
//_sleep(500);
system("cls");
}
//⑦查找指定姓名的联系人,报出全部信息
void selectperson(AddressBooks ads) {
string same_name;
int delete_index = -1;//一开始是一个无效值
cout << "请输入您要查找的联系人姓名:" << endl;
cin >> same_name;
for (int i = 0; i < ads.current_num; i++) {
if (ads.personArray[i].name == same_name) {
delete_index = i;//这是用来记录姓名相同的那个人在结构体数组中的序号
cout << "序号:" << i << " 联系人:" << ads.personArray[i].name << " 年龄:" << ads.personArray[i].age << " 性别:" <<
ads.personArray[i].sex << " 电话号码:" << ads.personArray[i].phone_number
<< " 家庭住址:" << ads.personArray[i].address << "\t" << endl;
}
}
if (delete_index == -1) {
cout << "未找到匹配的联系人。" << endl;
}
}
//⑧修改指定联系人的相关信息
void changeperson(AddressBooks* ads) {
if (ads->current_num == 0) {
cout << "通讯录为空,无法修改联系人信息" << endl;
}
else {
string same_name;
int changenumber;
int change_index = -1;//一开始是一个无效值
string new_name;
int new_age;
string new_sex;
string new_number;
string new_address;
cout << "请输入您要修改的联系人姓名:" << endl;
cin >> same_name;
for (int i = 0; i < ads->current_num; i++) {
if (ads->personArray[i].name == same_name) {
change_index = i;//这是用来记录姓名相同的那个人在结构体数组中的序号
cout << "请确认您要修改该联系人的信息为:"<<endl;
cout << "按“1”修改姓名,按“2”修改年龄,按“3”修改性别,按“4”修改电话号码,按“5”修改家庭住址"<< endl;
cin >> changenumber;
break;
}
}
if (change_index == -1) {
cout << "未找到匹配的联系人,无法修改。" << endl;
}
else {
switch (changenumber) {
case 1:
cout << "请输入您要更改的姓名:" << endl;
cin >> new_name;
ads->personArray[change_index].name = new_name;
break;
case 2:
cout << "请输入您要更改的年龄:" << endl;
cin >> new_age;
ads->personArray[change_index].age = new_age;
break;
case 3:
cout << "请输入您要更改的性别:" << endl;
cin >> new_sex;
ads->personArray[change_index].sex = new_sex;
break;
case 4:
cout << "请输入您要更改的电话号码:" << endl;
cin >> new_number;
ads->personArray[change_index].phone_number = new_number;
break;
case 5:
cout << "请输入您要更改的家庭地址:" << endl;
cin >> new_address;
ads->personArray[change_index].address = new_address;
break;
}
cout << "修改成功!" << endl;
}
}
system("cls");
}
//⑨清空通讯录
void clear(AddressBooks *ads) {
ads->current_num = 0;//给通讯录结构体的长度清零即可
cout << "通讯录已清空!" << endl;
system("cls");
}
int main() {
int current_num = 0;
int key_select = 0;//创建一个用户按键键值
AddressBooks addbooks;//实例化通讯录结构体
addbooks.current_num = 0;//一开始人数为0
while (1) {
showManu();
cin >> key_select;//判断用户接下来输入的是什么键值
switch (key_select) {
case 1://添加联系人
Addperson(&addbooks);//地址传递,因为要切实的操作(改变)结构体成员属性
break;
case 2://显示联系人
showperson(addbooks);//值传递,因为不用改变结构体属性,只需要展示属性
break;
case 3://删除联系人
deleteperson(&addbooks);//地址传递
break;
case 4://查找
selectperson(addbooks);//值传递
break;
case 5://修改信息
changeperson(&addbooks);//地址传递
break;
case 6://清空通讯录
clear(&addbooks);//地址传递
break;
case 0://退出系统
cout << "欢迎下一次继续使用通讯录。" << endl;
system("pause");
return 0;
break;
}
}
system("pause");
return 0;
}
文章来源:https://blog.csdn.net/qq_53092944/article/details/135017999
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!