【c++】通讯录管理系统

1.系统功能介绍及展示
2.创建项目
3.菜单实现
4.退出功能实现
5.添加联系人—结构体设计
6.添加联系人—功能实现
7.显示联系人
8.删除练习人—检测联系人是否存在
9.删除联系人—功能实现
10.查找联系人
11.修改联系人
12.清空通讯录

在这里插入图片描述

#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
 
const int MAX = 1e3 + 10; // 最大人数
 
struct Person
{
    string name;    // 姓名
    string sex;     // 性别
    int age;        // 年龄
    string phone;   // 电话号码
    string address; // 住址
};
 
struct addressbook
{
    Person personarray[MAX]; // 通讯录中保存的联系人数组
    int size;                // 通讯录中人员个数
};
 
void showMenu();
void addPerson(addressbook *abs);
void showPerson(const addressbook *abs);
int namefind(addressbook *abs);
int phonefind(addressbook *abs);
int addressfind(addressbook *abs);
void deletePerson(addressbook *abs);
void findPerson(addressbook *abs);
void modifyPerson(addressbook *abs);
void ofaddressbook(const addressbook *abs);
void ifaddressbook(addressbook *abs);
void cleanPerson(addressbook *abs);
void end();
 
int main()
{
    int select;
    addressbook abs;
    abs.size = 0;
    while (true)
    {
        showMenu(); // 菜单调用
        cin >> select;
        system("clear");
        switch (select)
        {
        case 0: // 退出通讯录
            end();
            break;
        case 1: // 添加联系人
            addPerson(&abs);
            break;
        case 2: // 显示联系人
            showPerson(&abs);
            break;
        case 3: // 删除联系人
            deletePerson(&abs);
            break;
        case 4: // 查找联系人
            findPerson(&abs);
            break;
        case 5: // 修改联系人
            modifyPerson(&abs);
            break;
        case 6: // 备份通讯录
            ofaddressbook(&abs);
            break;
        case 7: // 恢复通讯录
            ifaddressbook(&abs);
            break;
        case 8: // 清空通讯录
            cleanPerson(&abs);
            break;
        default:
            cout << "输入错误,请重新输入" << endl;
            cout << "请按任意键并回车继续" << endl; // MAC系统
            cin >> select;                          // MAC系统
            system("clear");                        // MAC系统
            // system("pause");WINDOWS系统
            // system("cls");WINDOWS系统
            continue;
        }
        cout << "请按任意键并回车继续" << endl; // MAC系统
        cin >> select;                          // MAC系统
        system("clear");                        // MAC系统
        // system("pause");WINDOWS系统
        // system("cls");WINDOWS系统
    }
    return 0;
}
 
void showMenu()
{
    cout << "***********************" << endl
         << "*****1、添加联系人*****" << endl
         << "*****2、显示联系人*****" << endl
         << "*****3、删除联系人*****" << endl
         << "*****4、查找联系人*****" << endl
         << "*****5、修改联系人*****" << endl
         << "*****6、备份通讯录*****" << endl
         << "*****7、恢复通讯录*****" << endl
         << "*****8、清空通讯录*****" << endl
         << "*****0、退出通讯录*****" << endl
         << "***********************" << endl;
}
 
void addPerson(addressbook *abs)
{
    if (abs->size == MAX) // 判断通讯录人数是否已满
    {
        cout << "通讯录人数已满" << endl;
    }
    else
    {
        cout << "请输入姓名:";
        cin >> abs->personarray[abs->size].name;
        cout << "请输入性别:";
        cin >> abs->personarray[abs->size].sex;
        cout << "请输入年龄:";
        cin >> abs->personarray[abs->size].age;
        cout << "请输入电话号码:";
        cin >> abs->personarray[abs->size].phone;
        cout << "请输入住址:";
        cin >> abs->personarray[abs->size].address;
        abs->size++;
        cout << "联系人添加成功" << endl;
    }
}
 
void showPerson(const addressbook *abs)
{
    if (abs->size) // 判断人数是否为零
    {
        for (int i = 0; i < abs->size; i++)
        {
            cout << "姓名:" << abs->personarray[i].name
                 << "\t性别:" << abs->personarray[i].sex
                 << "\t年龄:" << abs->personarray[i].age
                 << "\t电话号码:" << abs->personarray[i].phone
                 << "\t住址:" << abs->personarray[i].address
                 << endl;
        }
    }
    else
    {
        cout << "通讯录为空" << endl;
    }
}
 
int namefind(addressbook *abs)
{
    string name;
    cout << "请输入您要查找联系人的姓名" << endl;
    cin >> name;
    for (int i = 0; i < abs->size; i++) // 查找输入的联系人
    {
        if (name.compare(abs->personarray[i].name) == 0)
        {
            return i;
        }
    }
    return -1;
}
 
int phonefind(addressbook *abs)
{
    string phone;
    cout << "请输入您要查找联系人的电话号码" << endl;
    cin >> phone;
    for (int i = 0; i < abs->size; i++) // 查找输入的联系人
    {
        if (phone.compare(abs->personarray[i].phone) == 0)
        {
            return i;
        }
    }
    return -1;
}
 
int addressfind(addressbook *abs)
{
    string address;
    cout << "请输入您要查找联系人住址" << endl;
    cin >> address;
    for (int i = 0; i < abs->size; i++) // 查找输入的联系人
    {
        if (address.compare(abs->personarray[i].address) == 0)
        {
            return i;
        }
    }
    return -1;
}
 
void deletePerson(addressbook *abs)
{
    int n;
    cout << "请输入查询方式\n1.姓名\n2.电话号码\n3.住址" << endl;
    cin >> n;
    switch (n) // 选择查询方式
    {
    case 1:
        n = namefind(abs);
        break;
    case 2:
        n = phonefind(abs);
        break;
    case 3:
        n = addressfind(abs);
        break;
    default:
        cout << "您输入有误,请重新输入" << endl;
    }
    system("clear");
    if (n != -1)
    {
        abs->personarray[n] = abs->personarray[abs->size - 1]; // 替换将删除的联系人
        abs->size--;                                           // 通讯录人数-1
        cout << "删除成功" << endl;
    }
    else
    {
        cout << "查无此人" << endl;
    }
}
 
void findPerson(addressbook *abs)
{
    int n;
    cout << "请输入查询方式\n1.姓名\n2.电话号码\n3.住址" << endl;
    cin >> n;
    switch (n) // 选择查询方式
    {
    case 1:
        n = namefind(abs);
        break;
    case 2:
        n = phonefind(abs);
        break;
    case 3:
        n = addressfind(abs);
        break;
    default:
        cout << "您输入有误,请重新输入" << endl;
    }
    system("clear");
    if (n != -1)
    {
        cout << "姓名:" << abs->personarray[n].name
             << "\t性别:" << abs->personarray[n].sex
             << "\t年龄:" << abs->personarray[n].age
             << "\t电话号码:" << abs->personarray[n].phone
             << "\t住址:" << abs->personarray[n].address
             << endl;
    }
    else
    {
        cout << "查无此人" << endl;
    }
}
 
void modifyPerson(addressbook *abs)
{
    int n;
    cout << "请输入查询方式\n1.姓名\n2.电话号码\n3.住址" << endl;
    cin >> n;
    switch (n) // 选择查询方式
    {
    case 1:
        n = namefind(abs);
        break;
    case 2:
        n = phonefind(abs);
        break;
    case 3:
        n = addressfind(abs);
        break;
    default:
        cout << "您输入有误,请重新输入" << endl;
    }
    system("clear");
    if (n != -1)
    {
        cout << "请输入修改后的姓名:";
        cin >> abs->personarray[n].name;
        cout << "请输入修改后的性别:";
        cin >> abs->personarray[n].sex;
        cout << "请输入修改后的年龄:";
        cin >> abs->personarray[n].age;
        cout << "请输入修改后的电话号码:";
        cin >> abs->personarray[n].phone;
        cout << "请输入修改后的住址:";
        cin >> abs->personarray[n].address;
        cout << "修改成功" << endl;
    }
    else
    {
        cout << "查无此人" << endl;
    }
}
 
void ofaddressbook(const addressbook *abs)
{
    ofstream ofs;
    ofs.open("addressbook.txt", ios::out); // 打开文件
    ofs << "姓名\t性别\t年龄\t电话号码\t住址" << endl;
    for (int i = 0; i < abs->size; i++)
    {
        ofs << abs->personarray[i].name
            << "\t\t" << abs->personarray[i].sex
            << "\t\t" << abs->personarray[i].age
            << "\t\t" << abs->personarray[i].phone
            << "\t\t" << abs->personarray[i].address
            << endl;
    }
    ofs.close(); // 关闭文件
    cout << "备份成功" << endl;
}
 
void ifaddressbook(addressbook *abs)
{
    string temp;
    ifstream ifs;
    ifs.open("addressbook.txt", ios::in); // 打开文件
    if (ifs.is_open())
    {
        getline(ifs, temp); // 将文件上方的标签输入到临时字符串
        while (ifs >> abs->personarray[abs->size].name >> abs->personarray[abs->size].sex >> abs->personarray[abs->size].age >> abs->personarray[abs->size].phone >> abs->personarray[abs->size].address)
        {
            abs->size++; // 人数+1
        }
        ifs.close(); // 关闭文件
        cout << "恢复成功" << endl;
    }
    else
    {
        cout << "文件打开失败" << endl;
    }
}
 
void cleanPerson(addressbook *abs)
{
    abs->size = 0; // 将通讯录清空
    cout << "通讯录已清空" << endl;
}
 
void end()
{
    cout << "欢迎下次使用" << endl;
    exit(0); // 退出程序
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵远疴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值