热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C++实现简单版通讯录管理系统

这篇文章主要为大家详细介绍了C++实现简单版通讯录管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

这个通讯录管理系统是我听课后做的笔记,都是很基础的逻辑实现,第一次动手写了一个小案例感觉找到了一点方向,也希望能帮到一点忙!

1、系统需求

通讯录是一个可以记录亲人、好友信息的工具。 本教程主要利用C++来实现一个通讯录管理系统 系统中需要实现的功能如下:

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

2、创建项目

3、菜单功能

功能描述:用户选择功能的界面

步骤:

封装函数显示该界面,如:void showMenu() 在main函数中调用封装好的函数

void mean()
{
    cout <<"1、创建联系人" <

4、退出功能

功能描述:退出通讯录系统

思路:根据用户不同的选择,进入不同的功能,可以选择switch分支结构,将整个架构进行搭建

当用户选择0的时候,执行退出,选择其他先不做操作,也不会退出程序

cout <<"欢迎下次使用系统" <

5、添加联系人

功能描述:

实现添加联系人功能,联系人上限为1000人,联系人信息包括(姓名、性别、年龄、联系电话、家庭住址)

添加联系人实现步骤:

设计联系人结构体

设计通讯录结构体

main函数中创建通讯录

封装添加联系人函数

测试添加联系人功能

5.1 设计联系人结构体

联系人信息包括:姓名、性别、年龄、联系电话、家庭住址

void addPerson(Arraybooks *abs)
{
    if(abs -> Size == MAX){
        cout <<"通讯录已满" <> name;
        abs->ArrayList[abs->Size].name = name;

        cout <<"输入性别" <> sex;
            if(sex == 1 || sex == 2) {
                abs->ArrayList[abs->Size].Sex = sex;
                break;
            }
            cout <<"输入有误,请重新输入";
        }

        cout <<"请输入年龄" <> age;
        abs->ArrayList[abs->Size].old = age;

        cout <<"请输入电话:" <> phone;
        abs->ArrayList[abs->Size].phOne= phone;

        cout <<"请输入地址" <> address;
        abs->ArrayList[abs->Size].address = address;

        abs->Size++;

        cout <<"添加成功" <

6、显示联系人

功能描述:显示通讯录中已有的联系人信息

显示联系人实现步骤:

封装显示联系人函数

测试显示联系人功能

void showPerson(Arraybooks *abs)
{
    if(abs->Size == 0){
        cout <<"记录为空" <Size;i++){
            cout <<"姓名:" <ArrayList[i].name <<"\t";
            cout <<"性别:" <<(abs->ArrayList[i].Sex == 1?"男":"女")  <<"\t";
            cout <<"年龄: " <ArrayList[i].old <<"\t";
            cout <<"电话:" <ArrayList[i].phone <<"\t";
            cout <<"地址: " <ArrayList[i].address <

7、删除联系人

实现步骤:

1、封装检测联系人是否存在

2、封装删除联系人函数

3、测试删除联系人功能

7.1 封装检测联系人是否存在

设计思路:

删除联系人前,我们需要先判断用户的联系人是否存在,如果存在删除,不存在提示用户没有要删除的联系人,因此我们可以把检测联系人是否存在封装成一个函数中,如果存在,返回联系人在通讯录中的位置,不存在返回-1。

int isExist(Arraybooks * abs , string name)
{
    for (int i = 0; i Size; ++i) {
        if(abs->ArrayList[i].name == name){
            return i;
        }

        }
    return -1;
    }

7.2 封装删除联系人函数

根据用户输入的联系人判断该通讯录中是否有此人

查找到进行删除,并提示删除成功

查不到提示查无此人

void DalatePerson(Arraybooks *abs )
{
    cout <<"输入你要删除的联系人" <> name;

    int ret = isExist(abs, name);
    if(ret != -1){
        for (int i = 0; i Size; ++i) {
            abs->ArrayList[i].name = abs->ArrayList[i+1].name;
            abs->Size--;
        }
        cout <<"删除成功" <

8、查找联系人

功能描述:按照姓名查看指定联系人信息
查找联系人实现步骤

1、封装查找联系人函数

2、测试查找指定联系人

8.1 封装查找联系人函数

实现思路:判断用户指定的联系人是否存在,如果存在显示信息,不存在则提示查无此人。

void findPerson(Arraybooks * abs)
{
    cout <<"请输入要查找的人:" <> name;

    int ret = isExist(abs , name);
    if(ret != -1){
        cout <<"姓名 : " <ArrayList[ret].name<ArrayList[ret].Sex<ArrayList[ret].old <ArrayList[ret].phone<ArrayList[ret].address<

9、修改联系人

功能描述:按照姓名重新修改指定联系人
修改联系人实现步骤

1、封装修改联系人函数

2、测试修改联系人功能

9.1 封装修改联系人函数

实现思路:查找用户输入的联系人,如果查找成功进行修改操作,查找失败提示查无此人。

void modifyPerson(Arraybooks * abs) {
    cout <<"输入你要修改的联系人" <> name;

    int ret = isExist(abs, name);
    if (ret != -1) {

        cout <<"请输入姓名:" <> name;
        abs->ArrayList[ret].name = name;

        cout <<"请输入性别:" <> sex;
        while (true) {
            if (sex == 1 || sex == 2) {
                abs->ArrayList[ret].Sex = sex;
                break;
            } else {
                cout <<"输入错误" <> old;
        abs->ArrayList[ret].old = old;

        cout <<"输入电话" <> phone;
        abs->ArrayList[ret].phOne= phone;

        cout <<"输入地址" <> address;
        abs->ArrayList[ret].address = address;

        cout <<"修改成功" <

10、清空联系人

功能描述:清空通讯录中所有信息
清空联系人实现步骤

1、封装清空联系人函数

2、测试清空联系人10.1封装清空联系人函数
实现思路:将通讯录所有联系人信息清楚掉,只要将通讯录记录的联系人数量置为0,做逻辑清空即可。

void cleanPerson(Arraybooks * abs){
    abs->Size = 0;
    cout <<"清空完成" <

整段代码:

#include 
using namespace std;
#include 
#define MAX 100

struct Person
{
    string name;
    int Sex;
    int old;
    string phone;
    string address;
};

struct Arraybooks
{
    struct Person ArrayList[MAX];
    int Size;
};

void addPerson(Arraybooks *abs)
{
    if(abs -> Size == MAX){
        cout <<"通讯录已满" <> name;
        abs->ArrayList[abs->Size].name = name;

        cout <<"输入性别" <> sex;
            if(sex == 1 || sex == 2) {
                abs->ArrayList[abs->Size].Sex = sex;
                break;
            }
            cout <<"输入有误,请重新输入";
        }

        cout <<"请输入年龄" <> age;
        abs->ArrayList[abs->Size].old = age;

        cout <<"请输入电话:" <> phone;
        abs->ArrayList[abs->Size].phOne= phone;

        cout <<"请输入地址" <> address;
        abs->ArrayList[abs->Size].address = address;

        abs->Size++;

        cout <<"添加成功" <Size == 0){
        cout <<"记录为空" <Size;i++){
            cout <<"姓名:" <ArrayList[i].name <<"\t";
            cout <<"性别:" <<(abs->ArrayList[i].Sex == 1?"男":"女")  <<"\t";
            cout <<"年龄: " <ArrayList[i].old <<"\t";
            cout <<"电话:" <ArrayList[i].phone <<"\t";
            cout <<"地址: " <ArrayList[i].address <Size; ++i) {
        if(abs->ArrayList[i].name == name){
            return i;
        }

    }
    return -1;
}


void DalatePerson(Arraybooks *abs )
{
    cout <<"输入你要删除的联系人" <> name;

    int ret = isExist(abs, name);
    if(ret != -1){
        for (int i = 0; i Size; ++i) {
            abs->ArrayList[i].name = abs->ArrayList[i+1].name;
            abs->Size--;
        }
        cout <<"删除成功" <> name;

    int ret = isExist(abs , name);
    if(ret != -1){
        cout <<"姓名 : " <ArrayList[ret].name<ArrayList[ret].Sex<ArrayList[ret].old <ArrayList[ret].phone<ArrayList[ret].address<> name;

    int ret = isExist(abs, name);
    if (ret != -1) {

        cout <<"请输入姓名:" <> name;
        abs->ArrayList[ret].name = name;

        cout <<"请输入性别:" <> sex;
        while (true) {
            if (sex == 1 || sex == 2) {
                abs->ArrayList[ret].Sex = sex;
                break;
            } else {
                cout <<"输入错误" <> old;
        abs->ArrayList[ret].old = old;

        cout <<"输入电话" <> phone;
        abs->ArrayList[ret].phOne= phone;

        cout <<"输入地址" <> address;
        abs->ArrayList[ret].address = address;

        cout <<"修改成功" <Size = 0;
    cout <<"清空完成" <> istream;
        switch(istream){
            case 1:
                addPerson(&abs);
                break;
            case 2:
                showPerson(&abs);
                break;
            case 3:
                DalatePerson(&abs);
                break;
            case 4:
                findPerson(&abs);
                break;
            case 5:
                modifyPerson(&abs);
                break;
            case 6:
                cleanPerson(&abs);
                break;
            case 0:
                cout <<"欢迎下次使用系统" <

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


推荐阅读
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
  • 本文介绍了为什么要使用多进程处理TCP服务端,多进程的好处包括可靠性高和处理大量数据时速度快。然而,多进程不能共享进程空间,因此有一些变量不能共享。文章还提供了使用多进程实现TCP服务端的代码,并对代码进行了详细注释。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
author-avatar
xiaohigh
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有