C++实现简易的通讯录管理系统

 更新时间:2022年06月20日 14:51:06   作者:爱思考的小伙  
这篇文章主要为大家详细介绍了C++实现简易的通讯录管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C++实现简易通讯录管理系统的具体代码,供大家参考,具体内容如下

1. 效果图

2. 需要的知识

C++基础知识(包括变量,运算符,顺序,分支,循环)
数组
函数
指针
结构体

3. 源码

#include <iostream>
using namespace std;
#define MAX 1000  //最大联系人个数 

struct Person {
    string name;
    string sex;
    int age;
    string tell;
    string addr;
};

struct Books {
    struct Person per[MAX];
    int N;//通讯录人数
};

//函数声明
void initBooks(Books *books);
void showMenu();
void addPerson(Books *books);
void showPerson(Books *books);
int  findPerson(Books *books,string name);
void findPerson(Books *books);
void deletePerson(Books *books);
void modifyPerson(Books *books);
void clearPerson(Books *books);

//初始化通讯录,向其中加入联系人
void initBooks(Books *books) {
    books->per[books->N].name = "张三";
    books->per[books->N].sex = "男";
    books->per[books->N].age = 22;
    books->per[books->N].tell = "123456789";
    books->per[books->N].addr = "成都";
    books->N++;
    books->per[books->N].name = "李四";
    books->per[books->N].sex = "男";
    books->per[books->N].age = 23;
    books->per[books->N].tell = "123456789";
    books->per[books->N].addr = "深圳";
    books->N++;
    books->per[books->N].name = "王五";
    books->per[books->N].sex = "男";
    books->per[books->N].age = 25;
    books->per[books->N].tell = "123456789";
    books->per[books->N].addr = "北京";
    books->N++;
}

//菜单
void showMenu() {
    system("color a");
    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 addPerson(Books *books) {
    if(books->N == MAX) {
        cout<<"通讯录已满,无法添加\n";
        return;
    } else {
        string name;
        string sex;
        int age;
        string tell;
        string addr;
        cout<<"请输入姓名,性别,年龄,电话以及地址:";
        cin>>name>>sex>>age>>tell>>addr;
        books->per[books->N].name = name;
        books->per[books->N].sex = sex;
        books->per[books->N].age = age;
        books->per[books->N].tell = tell;
        books->per[books->N].addr = addr;
        books->N++;
        cout<<"添加成功\n";
    }
}

//输出
void showPerson(Books *books) {
    if(books->N == 0) {
        cout<<"当前记录为空\n";
    } else {
        cout<<"姓名\t性别\t年龄\t电话\t\t地址\n";
        for(int i=0; i<books->N; i++) {
            cout<<books->per[i].name<<"\t"
                <<books->per[i].sex<<"\t"
                <<books->per[i].age<<"\t"
                <<books->per[i].tell<<"\t"
                <<books->per[i].addr<<"\n";
        }
    }
}

//查询并返回是否存在
int findPerson(Books *books,string name) {
    for(int i=0; i<books->N; i++) {
        if(books->per[i].name== name) {
            return i;
        }
    }
    return -1;
}

//查询并输出
void findPerson(Books *books) {
    cout<<"请输入你要查找的联系人的姓名:";
    string name;
    cin>>name;
    int ret = findPerson(books,name);
    if(ret!=-1) {
        cout<<books->per[ret].name<<"\t"
            <<books->per[ret].sex<<"\t"
            <<books->per[ret].age<<"\t"
            <<books->per[ret].tell<<"\t"
            <<books->per[ret].addr<<"\n";
    } else {
        cout<<"查无此人\n";
    }
}

//删除
void deletePerson(Books *books) {
    cout<<"请输入你要删除的联系人的姓名:";
    string name;
    cin>>name;
    int ret = findPerson(books, name);
    if(ret!=-1) {
        for(int i=ret; i<books->N; i++) {
            if(books->per[i].name== name) {
                books->per[i] = books->per[i+1];
            }
        }
        books->N--;
    } else {
        cout<<"查无此人\n";
    }
}

//修改
void modifyPerson(Books *books) {
    cout<<"请输入你要修改的联系人的姓名:";
    string name;
    cin>>name;
    int ret = findPerson(books, name);
    if(ret!=-1) {
        string name;
        string sex;
        int age;
        string tell;
        string addr;
        cout<<"请输入姓名,性别,年龄,电话以及地址:";
        cin>>name>>sex>>age>>tell>>addr;
        books->per[ret].name = name;
        books->per[ret].sex = sex;
        books->per[ret].age = age;
        books->per[ret].tell = tell;
        books->per[ret].addr = addr;
        cout<<"修改成功\n";
    } else {
        cout<<"查无此人,是否选择新增(Y/N):\n";
        char flag;
        cin>>flag;
        if(flag=='Y') {
            addPerson(books);
        }
    }
}

//清空
void clearPerson(Books *books) {
    books->N = 0;
    cout<<"通讯录已清空\n";
}

int main(int argc, char** argv) {
    showMenu();
    Books books;
    books.N = 0;
    initBooks(&books);
    showPerson(&books);

    while(true) {
        showMenu();
        cout<<"请输入功能前的序号:\n";
        int select=0;
        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:
                clearPerson(&books);
                break;
            case 0:
                cout<<"欢迎下次使用\n";
                exit(0);
            default:
                break;
        }
    }
    return 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 详解C++编程中的变量相关知识

    详解C++编程中的变量相关知识

    这篇文章主要介绍了详解C++编程中的变量相关知识,是C++入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • c语言中如何修改文件中间的几个字节

    c语言中如何修改文件中间的几个字节

    工作中碰到一个问题,如何只修改文件中间的几个字节,而其他的内容不变。这个问题看似简单,但是很多人估计都不知道怎么做。我开始seek到文件的特定的位置,然后写文件,但是使用的文件打开模式不对,文件不是被清空,就是被截断,达不到效果
    2020-10-10
  • c++中struct和class的区别小结

    c++中struct和class的区别小结

    在C++中,class和struct都是用于定义自定义数据类型的关键字,本文主要介绍了c++中struct和class的区别小结,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • C++针对bmp格式解析实例

    C++针对bmp格式解析实例

    这篇文章主要介绍了C++针对bmp格式解析实例,设计CWnd框架的使用及位图的操作,需要的朋友可以参考下
    2014-10-10
  • C++ opencv霍夫圆检测使用案例详解

    C++ opencv霍夫圆检测使用案例详解

    这篇文章主要介绍了C++ opencv霍夫圆检测使用案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • C++中BitBlt的使用方法详解

    C++中BitBlt的使用方法详解

    这篇文章主要介绍了C++中BitBlt的使用方法详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-09-09
  • C++深入分析讲解链表

    C++深入分析讲解链表

    当我们在写一段代码时,如果要频繁的在一块区域进行插入或者删除操作时,会发现用数组实现会比较复杂,这时候我们就要用另一种数据结构,链表来实现
    2022-06-06
  • 详解C++ OpenCV实现图像拼接的原理及方法

    详解C++ OpenCV实现图像拼接的原理及方法

    本文以实现图像拼接为目标,把分割开的图像进行拼接还原,核心的内容包括:OpenCV图像拼接相关原理以及OpenCV图像拼接案例的实现,感兴趣的可以了解一下
    2022-07-07
  • C语言开发实现井字棋及电脑落子优化示例详解

    C语言开发实现井字棋及电脑落子优化示例详解

    以前上课经常和同桌玩起井字棋,那么我们就当我们回忆童年,现在也用C语言来实现井字棋,本次代码相对于初阶的井字棋,在电脑下棋代码部分做了优化,使得电脑更加具有威胁
    2021-11-11
  • 深入浅出理解C语言指针的综合应用

    深入浅出理解C语言指针的综合应用

    指针是指向另一个变量的变量。意思是一个指针保存的是另一个变量的内存地址。换句话说,指针保存的并不是普通意义上的数值,而是另一个变量的地址值。一个指针保存了另一个变量的地址值,就说这个指针“指向”了那个变量
    2022-02-02

最新评论