XiShiYuYuan's Blogs  
其实,我只会打游戏。。。

记录一下利用C++来实现一个通讯录管理系统

系统中需要实现的功能如下:

  • 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人
  • 显示联系人:显示通讯录中所有联系人信息
  • 删除联系人:按照姓名进行删除指定联系人
  • 查找联系人:按照姓名查看指定联系人信息
  • 修改联系人:按照姓名重新修改指定联系人
  • 清空联系人:清空通讯录中所有信息
  • 退出通讯录:退出当前使用的通讯录

显示菜单功能

首先创建一个cpp文件,写好基本框架:

#include <iostream>
using namespace std;

int main(){

    system("pause");
    return 0;
}

之后创建一个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;
}

之后在main函数中调用这个函数即可:

#include <iostream>
using namespace std;

int main(){
	showMenu();
    system("pause");
    return 0;
}

退出系统功能

定义个select变量接收用户输入,

使用switch结构分别对用户不同的输入数字进行处理,

同时在外层使用一个while循环,让程序循环执行,使用户能持续输入,

最终输入0后,直接结束程序,达到退出系统的功能。

int main(){

    int select = 0;	//用于接收用户输入的数字,对应执行不同的功能
    while (true)
    {
        showMenu();
        cin >> select;
        switch (select)
        {
            case 1:
                
                break;
            case 2:
                
                break;                
            case 3:
                
                break;
            case 4:
                
                break;
            case 5:
                
                break;
            case 6:
                
                break;
            case 0:								
                cout << "欢迎下次使用" << endl;
                system("pause");
                return 0;					//当输入0后,直接return退出程序
                break;
            default:
                cout << "你输入的是啥玩意???" << endl;
                break;
        }
    }
    system("pause");
    return 0;
}

定义人员结构体和通讯录结构体

#define MAX 1000


struct Person
{
    string name;
    int sex;
    int age;
    string phone;
    string address;
};

struct Books
{
    struct Person personArray[MAX];     //用于保存联系人信息的数组,最大人数为1000

    int p_size;     //记录通讯录中的人员个数
    
};

添加联系人

在函数最后使用system("cls");实现窗口信息清屏操作

void addPerson(struct Books * b){
    if (b->p_size == MAX)
    {
        cout << "已经满员啦!!" << endl;
        return;
    }
    else{
        //输入姓名
        string name;
        cout << "请输入姓名:" << endl;
        cin >> name;
        b->personArray[b->p_size].name = name;

        //输入性别
        cout << "请输入性别:" << endl;
        cout << "1 代表 男" << endl;
        cout << "2 代表 女" << endl;
        int sex = 0;
        while (true)
        {
            cin >> sex;
            if (sex == 1 || sex == 2)
            {
                b->personArray[b->p_size].sex = sex;
                break;
            }
            cout << "输入错误!请检查输入" << endl;
        }
        
        //输入年龄
        int age = 0;
        cout << "请输入年龄:" << endl;
        cin >> age;
        b->personArray[b->p_size].age = age;
        
        //输入电话
        string phone;
        cout << "请输入电话:" << endl;
        cin >> phone;
        b->personArray[b->p_size].phone = phone;

        //输入地址
        string address;
        cout << "请输入地址:" << endl;
        cin >> address;
        b->personArray[b->p_size].address = address;


        b->p_size++;
        cout << "添加完成" << endl;
        system("pause");
        system("cls");		//进行清屏操作,使用户完成操作后,终端只显示菜单信息

    }
    
}

查看联系人

打印出通讯录内的所有联系人信息

void showPerson(struct Books * b){
    if (b->p_size == 0)
    {
        cout << "当前记录为空!" << endl;		//检查通讯录是否为空
        system("pause");
        system("cls");
    }
    else
    {
        for (int i = 0; i < b->p_size; i++)		//打印出所有联系人信息
        {
            cout << "姓名:" << b->personArray[i].name << "\t";
            cout << "性别:" << (b->personArray[i].sex == 1 ? "男" : "女") << "\t";
            cout << "年龄:" << b->personArray[i].age << "\t";
            cout << "电话:" << b->personArray[i].phone << "\t";
            cout << "地址:" << b->personArray[i].address << endl;
        }

        system("pause");
        system("cls");
    }
}

判断联系人是否存在

这里定义了一个根据姓名判断联系人是否存在的函数,

因为后续的删除、查找、修改功能都需要先进行检查联系人是否存在,因此封装了一个额外的函数

int isExist(struct Books * b, string name){
    for (int i = 0; i < b->p_size; i++)
    {
        if (b->personArray[i].name == name)
        {
            return i;      //如果通讯录中有联系人的姓名,返回联系人信息的下标索引编号             
        }
        
    }
    return -1;              //没有则返回-1
}

删除联系人

删除联系人:只需要将后面联系人信息往前覆盖,就可以删除当前的联系人信息了

void deletePerson(struct Books * b){
    cout << "请输入需要删除的联系人姓名:" << endl;
    string name;
    cin >> name;
    if (isExist(b, name) != -1)
    {
        for (int i = isExist(b, name); i < b->p_size; i++)
        {   
            //联系人信息进行一个前移的操作,即实现删除当前联系人
            b->personArray[i] = b->personArray[i+1];    
        }
        b->p_size--;
        cout << "删除成功!" << endl;

    }
    else
    {
        cout << "查无此人,请重新输入" << endl;
    }
    system("pause");
    system("cls");
}

查找联系人

根据姓名查找联系人信息,并打印出来

void findPerson(struct Books * b){
    cout << "请输入需要查找的联系人姓名:" << endl;
    string name;
    cin >> name;
    int ret = isExist(b, name);
    if (ret != -1)
    {
        cout << "姓名:" << b->personArray[ret].name << "\t";
        cout << "性别:" << (b->personArray[ret].sex == 1 ? "男" : "女") << "\t";
        cout << "年龄:" << b->personArray[ret].age << "\t";
        cout << "电话:" << b->personArray[ret].phone << "\t";
        cout << "地址:" << b->personArray[ret].address << endl;
    }
    else
    {
        cout << "查无此人,请重新输入" << endl;
    }
    system("pause");
    system("cls");
}

修改联系人

根据姓名选择所要修改的联系人信息,把新输入的信息覆盖掉原来的信息

void modifyPerson(struct Books * b){
    cout << "请输入需要修改的联系人姓名:" << endl;
    string name;
    cin >> name;
    int ret = isExist(b, name);
    if (ret != -1)
    {
        //修改姓名
        cout << "请输入修改的姓名:" << endl;
        string name;
        cin >> name;
        b->personArray[ret].name = name;

        //修改性别
        cout << "请输入修改的性别:" << endl;
        cout << "1 代表 男" << endl;
        cout << "2 代表 女" << endl;
        int sex;
        while(true){
            cin >> sex;            
            if (sex == 1 || sex == 2)
            {
                b->personArray[ret].sex = sex;
                break;
            }
            else
            {
                cout << "输入有误,请重新输入!" << endl;
            }
        }
        
        //修改年龄
        int age = 0;
        cout << "请输入修改的年龄:" << endl;
        cin >> age;
        b->personArray[ret].age = age;
        
        //修改电话
        string phone;
        cout << "请输入修改的电话:" << endl;
        cin >> phone;
        b->personArray[ret].phone = phone;

        //修改地址
        string address;
        cout << "请输入修改的地址:" << endl;
        cin >> address;
        b->personArray[ret].address = address;

        cout << "修改成功!!" << endl;
    }
    else
    {
        cout << "查无此人,请重新输入" << endl;
    }
    system("pause");
    system("cls");
}

清空通讯录

void cleanPerson(struct Books * b){
    cout << "确定清空通讯录所有信息?" << endl;
    cout << "1 代表 确定" << endl;
    cout << "2 代表 取消" << endl;
    int n;
    while(true){
        cin >> n;            
        if (n == 1)
        {
            b->p_size = 0;  //直接把通讯录的联系人数量置为0,做逻辑清空即可
            cout << "通讯录已清空" << endl;
            break;
        }
        else if (n == 2)
        {
            cout << "已取消" << endl;
            break;
        }
        else
        {
            cout << "输入有误,请重新输入!" << endl;
        }
    }
    system("pause");
    system("cls");
}

主函数程序

在主函数中根据用户输入的数字调用不同的功能函数即可:

int main(){
    Books books;        //创建通讯录结构体
    books.p_size = 0;   //先初始化人员个数为 0

    int select = 0;
    while (true)
    {
        showMenu();
        cin >> select;
        switch (select)
        {
            case 1:
                addPerson(&books);
                break;
            case 2:
                showPerson(&books);
                break;                
            case 3:
                deletePerson(&books);
                break;
            case 4:
                findPerson(&books);
                break;
            case 5:
                modifyPerson(&books);
                break;
            case 6:
                cleanPerson(&books);
                break;
            case 0:
                cout << "欢迎下次使用" << endl;
                system("pause");
                return 0;
                break;
            default:
                cout << "你输入的是啥玩意???" << endl;
                system("pause");
                system("cls");
                break;
        }
    }
    system("pause");
    return 0;
}
posted on   惜时与缘  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
 
点击右上角即可分享
微信分享提示