C/C++通讯录管理系统:个人信息管理与操作实现(入门级)

c++小项目——通讯录

实现功能总览:

1.添加联系人

实现功能:向通讯录添加新人,信息包括(姓名,性别,年龄,电话,家庭住址)最多纪录100人

2.显示联系人

实现功能:显示所有联系人信息

3.删除联系人

实现功能:按指定名字删除联系人

4.查找联系人

实现功能:按指定名字查找联系人

5.修改联系人

实现功能:按指定名字修改联系人信息

6.清空联系人

实现功能:清空通讯录

7.退出通讯录

实现功能:退出当前使用通讯录

准备

我们将创建以下三个文件来实现模块化管理通讯录程序:

  • contacts.cpp:主程序入口,包含 main() 函数;
  • func.cpp:实现各类功能函数,如添加、删除、查找联系人等;
  • func.h:功能函数的声明和头文件引用。

1.菜单栏

void menue()
{
    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.通讯录结构体

typedef struct contacts
{
    string name ;
    int age;
    string sex;
    int number;
    string addr; 
}
contacts;

typedef struct contact_list {
    contacts info[100];  
    int people_num;            
} contact_list;

3.退出程序

在用户选择0的时候退出,首先我们需要搭建一个switch框架

 switch (num)
    {
    case 0://退出通讯录
        cout<<"欢迎下次使用"<<endl;
        return 0;
    case 1://添加联系人
        add(&arr_list);
        break;
    case 2://显示联系人
        show_contact(&arr_list);
        break;
    case 3://删除联系人
        delete_contact(&arr_list);
        break;
    case 4://查找联系人
        find_contact(&arr_list);
        break;
    case 5://修改联系人
        change_contact(&arr_list);
        break;
    case 6://清空通讯录
        clear_contact(&arr_list);
        break;
    default:
        cout << "无效的输入,请重新选择一个有效的选项!" << endl;
        continue;
    }

4.添加联系人

add函数实现方法

// 添加联系人
void add(contact_list *arr)
{   
    if(arr->people_num >= 100)
    {
        cout << "通讯录已满,无法添加联系人。" << endl;
        return;
    }
    string s;
    int num;
    cout << "请输入姓名: ";
    cin >> s;
    arr->info[arr->people_num].name = s;
    
    cout << "请输入年龄: ";
    while (!(cin >> num)) {
        cout << "请输入有效的年龄(数字): ";
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');  // 忽略当前输入缓冲区的错误内容
    }
    arr->info[arr->people_num].age = num;

    cout << "请输入性别: ";
    cin >> s;
    arr->info[arr->people_num].sex = s;

    cout << "请输入电话号码: ";
    while (!(cin >> num)) {
        cout << "请输入有效的电话号码(数字): ";
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
    }
    arr->info[arr->people_num].number = num;

    cout << "请输入地址: ";
    cin >> s;
    arr->info[arr->people_num].addr = s;

    arr->people_num += 1;
    cout << "添加成功!" << endl;
    cin.ignore();
    cin.get();
    system("clear");  // 如果你在 Windows 上运行,请修改为 system("cls");
}


5.显示联系人

// 显示联系人
void show_contact(contact_list *arr)
{
    if (arr->people_num == 0) {
        cout << "通讯录为空。" << endl;
    }
    for (int i = 0; i < arr->people_num; i++)
    {
        cout << "姓名: " << arr->info[i].name << endl;
        cout << "年龄: " << arr->info[i].age << endl;
        cout << "性别: " << arr->info[i].sex << endl;
        cout << "电话号码: " << arr->info[i].number << endl;
        cout << "住址: " << arr->info[i].addr << endl;
        cout << "-----------------------" << endl;
    }
    cout << "请按任意键继续..." << endl;
    cin.ignore();
    cin.get();
    system("clear");
}


6.删除联系人

如果你有想法只将people_num-1,下一个覆盖?嗯…想法不错,但是只能删除最后一个联系人,倘若删除中间某个人这个方法就不太适合

// 删除联系人
void delete_contact(contact_list *arr)
{
    string name;
    int num = -1;
    cout << "请输入你要删除的人的姓名: ";
    cin >> name;

    // 查找联系人
    for (int i = 0; i < arr->people_num; i++)
    {
        if (arr->info[i].name == name)
        {
            num = i;
            break;
        }
    }

    // 如果找到了联系人,删除
    if (num != -1)
    {
        for (int j = num; j < arr->people_num - 1; j++)
        {
            arr->info[j] = arr->info[j + 1];
        }
        arr->people_num -= 1;
        cout << "删除成功!" << endl;
    }
    else
    {
        cout << "未找到该联系人。" << endl;
    }
    cout << "请按任意键继续..." << endl;
    cin.ignore();
    cin.get();
    system("clear");
}

7.查找联系人

// 查找联系人
void find_contact(contact_list *arr)
{
    string name;
    int num = -1;
    cout << "请输入要查找的联系人姓名: ";
    cin >> name;

    // 查找联系人
    for (int i = 0; i < arr->people_num; i++)
    {
        if (arr->info[i].name == name)
        {
            cout << "姓名: " << arr->info[i].name << endl;
            cout << "年龄: " << arr->info[i].age << endl;
            cout << "性别: " << arr->info[i].sex << endl;
            cout << "电话号码: " << arr->info[i].number << endl;
            cout << "住址: " << arr->info[i].addr << endl;
            num = i;
            break;
        }
    }
    if (num == -1)
    {
        cout << "该联系人不存在。" << endl;
    }

    cout << "请按任意键继续..." << endl;
    cin.ignore();
    cin.get();
    system("clear");
}

8.修改联系人

// 修改联系人
void change_contact(contact_list *arr)
{
    string name, s;
    int num;
    bool found = false;
    cout << "请输入要修改的联系人姓名: ";
    cin >> name;

    for (int i = 0; i < arr->people_num; i++)
    {
        if (arr->info[i].name == name)
        {
            cout << "请输入新的姓名: ";
            cin >> s;
            arr->info[i].name = s;

            cout << "请输入新的年龄: ";
            while (!(cin >> num)) {
                cout << "请输入有效的年龄(数字): ";
                cin.clear();
                cin.ignore(numeric_limits<streamsize>::max(), '\n');
            }
            arr->info[i].age = num;

            cout << "请输入新的性别: ";
            cin >> s;
            arr->info[i].sex = s;

            cout << "请输入新的电话号码: ";
            while (!(cin >> num)) {
                cout << "请输入有效的电话号码(数字): ";
                cin.clear();
                cin.ignore(numeric_limits<streamsize>::max(), '\n');
            }
            arr->info[i].number = num;

            cout << "请输入新的地址: ";
            cin >> s;
            arr->info[i].addr = s;

            cout << "修改成功!" << endl;
            found = true;
            break;
        }
    }
    if (!found)
    {
        cout << "未找到该联系人。" << endl;
    }
    cout << "请按任意键继续..." << endl;
    cin.ignore();
    cin.get();
    system("clear");
}


9.清除通讯录

// 清空通讯录
void clear_contact(contact_list *arr)
{
    arr->people_num = 0;
    cout << "通讯录已清空。" << endl;
    cout << "请按任意键继续..." << endl;
    cin.ignore();
    cin.get();
    system("clear");
}

总览

contacts.cpp

#include"func.h"
#include<string>
using namespace std;

int main()
{
    
    int num=0;
    contact_list arr_list;
    arr_list.people_num=0;
    while (true)
    {
    menue();
    cin>>num;
    
    switch (num)
    {
    case 0://退出通讯录
        cout<<"欢迎下次使用"<<endl;
        return 0;
    case 1://添加联系人
        add(&arr_list);
        break;
    case 2://显示联系人
        show_contact(&arr_list);
        break;
    case 3://删除联系人
        delete_contact(&arr_list);
        break;
    case 4://查找联系人
        find_contact(&arr_list);
        break;
    case 5://修改联系人
        change_contact(&arr_list);
        break;
    case 6://清空通讯录
        clear_contact(&arr_list);
        break;
    default:
        cout << "无效的输入,请重新选择一个有效的选项!" << endl;
        continue;
    }
}
    return 0;
}

func.cpp

#include "func.h"

// 显示菜单
void menue()
{
    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;
}

// 添加联系人
void add(contact_list *arr)
{   
    if(arr->people_num >= 100)
    {
        cout << "通讯录已满,无法添加联系人。" << endl;
        return;
    }
    string s;
    int num;
    cout << "请输入姓名: ";
    cin >> s;
    arr->info[arr->people_num].name = s;
    
    cout << "请输入年龄: ";
    while (!(cin >> num)) {
        cout << "请输入有效的年龄(数字): ";
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');  // 忽略当前输入缓冲区的错误内容
    }
    arr->info[arr->people_num].age = num;

    cout << "请输入性别: ";
    cin >> s;
    arr->info[arr->people_num].sex = s;

    cout << "请输入电话号码: ";
    while (!(cin >> num)) {
        cout << "请输入有效的电话号码(数字): ";
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
    }
    arr->info[arr->people_num].number = num;

    cout << "请输入地址: ";
    cin >> s;
    arr->info[arr->people_num].addr = s;

    arr->people_num += 1;
    cout << "添加成功!" << endl;
    cin.ignore();
    cin.get();
    system("clear");  // 如果你在 Windows 上运行,请修改为 system("cls");
}

// 显示联系人
void show_contact(contact_list *arr)
{
    if (arr->people_num == 0) {
        cout << "通讯录为空。" << endl;
    }
    for (int i = 0; i < arr->people_num; i++)
    {
        cout << "姓名: " << arr->info[i].name << endl;
        cout << "年龄: " << arr->info[i].age << endl;
        cout << "性别: " << arr->info[i].sex << endl;
        cout << "电话号码: " << arr->info[i].number << endl;
        cout << "住址: " << arr->info[i].addr << endl;
        cout << "-----------------------" << endl;
    }
    cout << "请按任意键继续..." << endl;
    cin.ignore();
    cin.get();
    system("clear");
}

// 删除联系人
void delete_contact(contact_list *arr)
{
    string name;
    int num = -1;
    cout << "请输入你要删除的人的姓名: ";
    cin >> name;

    // 查找联系人
    for (int i = 0; i < arr->people_num; i++)
    {
        if (arr->info[i].name == name)
        {
            num = i;
            break;
        }
    }

    // 如果找到了联系人,删除
    if (num != -1)
    {
        for (int j = num; j < arr->people_num - 1; j++)
        {
            arr->info[j] = arr->info[j + 1];
        }
        arr->people_num -= 1;
        cout << "删除成功!" << endl;
    }
    else
    {
        cout << "未找到该联系人。" << endl;
    }
    cout << "请按任意键继续..." << endl;
    cin.ignore();
    cin.get();
    system("clear");
}
// 查找联系人
void find_contact(contact_list *arr)
{
    string name;
    int num = -1;
    cout << "请输入要查找的联系人姓名: ";
    cin >> name;

    // 查找联系人
    for (int i = 0; i < arr->people_num; i++)
    {
        if (arr->info[i].name == name)
        {
            cout << "姓名: " << arr->info[i].name << endl;
            cout << "年龄: " << arr->info[i].age << endl;
            cout << "性别: " << arr->info[i].sex << endl;
            cout << "电话号码: " << arr->info[i].number << endl;
            cout << "住址: " << arr->info[i].addr << endl;
            num = i;
            break;
        }
    }
    if (num == -1)
    {
        cout << "该联系人不存在。" << endl;
    }

    cout << "请按任意键继续..." << endl;
    cin.ignore();
    cin.get();
    system("clear");
}
// 修改联系人
void change_contact(contact_list *arr)
{
    string name, s;
    int num;
    bool found = false;
    cout << "请输入要修改的联系人姓名: ";
    cin >> name;

    for (int i = 0; i < arr->people_num; i++)
    {
        if (arr->info[i].name == name)
        {
            cout << "请输入新的姓名: ";
            cin >> s;
            arr->info[i].name = s;

            cout << "请输入新的年龄: ";
            while (!(cin >> num)) {
                cout << "请输入有效的年龄(数字): ";
                cin.clear();
                cin.ignore(numeric_limits<streamsize>::max(), '\n');
            }
            arr->info[i].age = num;

            cout << "请输入新的性别: ";
            cin >> s;
            arr->info[i].sex = s;

            cout << "请输入新的电话号码: ";
            while (!(cin >> num)) {
                cout << "请输入有效的电话号码(数字): ";
                cin.clear();
                cin.ignore(numeric_limits<streamsize>::max(), '\n');
            }
            arr->info[i].number = num;

            cout << "请输入新的地址: ";
            cin >> s;
            arr->info[i].addr = s;

            cout << "修改成功!" << endl;
            found = true;
            break;
        }
    }
    if (!found)
    {
        cout << "未找到该联系人。" << endl;
    }
    cout << "请按任意键继续..." << endl;
    cin.ignore();
    cin.get();
    system("clear");
}
// 清空通讯录
void clear_contact(contact_list *arr)
{
    arr->people_num = 0;
    cout << "通讯录已清空。" << endl;
    cout << "请按任意键继续..." << endl;
    cin.ignore();
    cin.get();
    system("clear");
}

func.h

#ifndef FUNC_H
#define FUNC_H
#include<iostream>
#include <cstdlib>
#include<string>
#include <iomanip>

using namespace std;

typedef struct contacts
{
    string name ;
    int age;
    string sex;
    int number;
    string addr; 
}
contacts;

typedef struct contact_list {
    contacts info[100];  
    int people_num;            
} contact_list;


//菜单展示
void menue();
//添加联系人
void add(contact_list* arr);
//显示联系人
void show_contact(contact_list* arr);
//删除联系人
void delete_contact(contact_list*arr);
//查找联系人
void find_contact(contact_list*arr);
//修改联系人
void change_contact(contact_list*arr);
//清空通讯录
void clear_contact(contact_list*arr);
#endif

总结

本项目属于入门级别,是对结构体和指针的运用程度的考验,后续还会继续实现动态以及文件io的项目,项目还是有点小拙劣,还请海涵,我也会不断优化与进步的!(本项目是在Linux环境下编译的!windows部分代码需要修改)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值