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

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

一、需求分析

通讯录是日常生活中广泛使用的一种记录联系人信息的工具。本次需求是实现一个简单的通讯录管理系统,主要包含如下功能:

  • 添加联系人
  • 显示所有联系人
  • 查找联系人
  • 删除联系人
  • 修改联系人

根据以上需求,我们可以设计通讯录管理系统的主要数据结构是一个联系人类 Contact 类,包含姓名、手机、性别、等私有成员,以及相应的公有成员函数。

二、代码实现

1. Contact类

#include <iostream>
#include <cstring>

using namespace std;

class Contact{
public:
    char name[20];
    char mobile[12];
    char gender;
    char hobby[50];

    Contact(){}
    Contact(char na[],char mob[],char gen,char hob[]){
        strcpy(name,na);
        strcpy(mobile,mob);
        gender=gen;
        strcpy(hobby,hob);
    }

    void show(){
        cout << "姓名: " << name << endl;
        cout << "手机: " << mobile << endl;
        cout << "性别: " << gender << endl;
        cout << "爱好: " << hobby << endl;
    }
};

2. ContactBook类

#include <iostream>
#include <cstdio>
#include <cstring>

#include "Contact.h"

using namespace std;

class ContactBook{
public:
    Contact contacts[100];
    int size = 0;

    void add(Contact contact){
        contacts[size++] = contact;
    }

    int search(char name[]){
        for (int i=0; i<size; ++i){
            if (strcmp(contacts[i].name,name) == 0){
                return i;
            }
        }
        return -1;
    }

    void erase(char name[]){
        int index = search(name);
        if (index == -1){
            cout << "通讯录中没有找到此人!" << endl;
        }
        else{
            for (int i = index; i < size-1; i++){
                contacts[i] = contacts[i+1];
            }
            size--;
            cout << "已删除" << endl;
        }
    }

    void modify(char name[]){
        int index = search(name);
        if (index == -1){
            cout << "通讯录中没有找到此人!" << endl;
        }
        else{
            char mob[12], gen, hob[50];
            cout << "请输入姓名: ";
            cin >> name;
            cout << "请输入手机号码: ";
            cin >> mob;
            cout << "请输入性别: ";
            cin >> gen;
            cout << "请输入爱好: ";
            cin >> hob;

            Contact contact(name, mob, gen, hob);
            contacts[index] = contact;
            cout << "已修改" << endl;
        }
    }

    void showAll(){
        if (size == 0){
            cout << "通讯录为空!" << endl;
        }
        else{
            for (int i=0; i<size; ++i){
                cout << "第" << i+1 << "个联系人:" << endl;
                contacts[i].show();
                cout << endl;
            }
        }
    }

    void showByName(char name[]){
        int index = search(name);
        if (index == -1){
            cout << "通讯录中没有找到此人!" << endl;
        }
        else{
            cout << "找到联系人:" << endl;
            contacts[index].show();
        }
    }

};

3. 主函数

#include <iostream>
#include "ContactBook.h"

using namespace std;

int main(){

    ContactBook contactBook;

    while (true){
        system("cls");
        cout << "通讯录管理系统" << endl;
        cout << "-----------------" << endl;
        cout << "1. 添加联系人" << endl;
        cout << "2. 显示所有联系人" << endl;
        cout << "3. 查找联系人" << endl;
        cout << "4. 删除联系人" << endl;
        cout << "5. 修改联系人" << endl;
        cout << "6. 退出程序" << endl;
        cout << "-----------------" << endl;
        cout << endl;

        int op;
        cin >> op;

        switch (op)
        {
        case 1:{
            char name[20], mob[12], gen, hob[50];
            cout << "请输入姓名: ";
            cin >> name;
            cout << "请输入手机号码: ";
            cin >> mob;
            cout << "请输入性别: ";
            cin >> gen;
            cout << "请输入爱好: ";
            cin >> hob;

            Contact contact(name, mob, gen, hob);
            contactBook.add(contact);
            cout << "已添加" << endl;
            system("pause");
            break;
        }

        case 2:{
            contactBook.showAll();
            system("pause");
            break;
        }

        case 3:{
            char name[20];
            cout << "请输入要查找的姓名:";
            cin >> name;
            contactBook.showByName(name);
            system("pause");
            break;
        }

        case 4:{
            char name[20];
            cout << "输入要删除的联系人姓名:";
            cin >> name;
            contactBook.erase(name);
            system("pause");
            break;
        }

        case 5:{
            char name[20];
            cout << "输入要修改的联系人姓名:";
            cin >> name;
            contactBook.modify(name);
            system("pause");
            break;
        }

        case 6:{
            cout << "感谢您的使用!" << endl;
            system("pause");
            return 0;
        }
        }
    }

    return 0;
}

三、示例说明

1. 添加联系人

输入3个联系人,查看上传是否成功。命令如下:

1
charles 13913254654 m music
已添加
1
rose 15545678954 f reading
已添加
1
lucy 13312345678 f travelling
已添加
2
第1个联系人:
姓名: charles
手机: 13913254654
性别: m
爱好: music

第2个联系人:
姓名: rose
手机: 15545678954
性别: f
爱好: reading

第3个联系人:
姓名: lucy
手机: 13312345678
性别: f
爱好: travelling

2. 删除联系人

输入两个联系人,删除其中一个联系人,查看是否删除成功,命令如下:

1
green 12016549843 m music
已添加
1
jack 13888999876 m dance
已添加
2
第1个联系人:
姓名: green
手机: 12016549843
性别: m
爱好: music

第2个联系人:
姓名: jack
手机: 13888999876
性别: m
爱好: dance


4
输入要删除的联系人姓名:green
已删除
2
第1个联系人:
姓名: jack
手机: 13888999876
性别: m
爱好: dance

以上是简单版通讯录管理系统的实现,可根据实际需要对代码进行完善和扩展。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现简单版通讯录管理系统 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • 使用JSONObject生成和解析json的方法

    使用JSONObject生成和解析json的方法,是在Java开发中经常需要用到的一种技术。下面是一份关于该技术的攻略: 生成Json 在Java开发中,我们可以通过使用JSONObject类来生成JSON对象。 首先需要导入以下依赖: <dependency> <groupId>org.json</groupId> &l…

    C 2023年5月23日
    00
  • golang croncli 定时器命令详解

    Golang Croncli定时器命令详解 Croncli是golang中一个用于定时执行任务的命令工具。它允许在固定的时间间隔内运行特定的命令或任务。本文将详细介绍croncli的使用方法,并提供两个示例说明。 安装 Croncli可以通过go命令来安装: $ go get github.com/robfig/cron/v3 使用 Croncli是通过go…

    C 2023年5月23日
    00
  • 最新Rust错误处理简介

    最新Rust错误处理简介 错误处理是编写健壮软件的必备技能。在Rust中,错误处理被视为一等公民,并且Rust的语言设计使错误处理更加容易和健壮。在本文中,我们将讨论Rust中最新的错误处理方法。 Unrecoverable Errors 当程序遇到不可恢复的错误时,会产生不回溯错误(unrecoverable error),系统将终止程序并打印出错误信息。…

    C 2023年5月23日
    00
  • 新手向超详细的C语言实现动态顺序表

    当初步学习C语言之后,常常将动态内存管理作为初学者的第一个难点。本文将向新手讲解实现动态顺序表的过程,以及如何使用动态内存管理API来解决动态分配和释放内存的问题。本攻略使用C语言编写,通过动态分配内存的方式来模拟实现动态顺序表。 实现步骤 1. 定义数据结构 首先,需要定义一个结构体,来表示这个动态顺序表的数据结构。结构体中至少需要包含如下信息:- 存储元…

    C 2023年5月23日
    00
  • Ruby和C语言的区别

    下面我将详细讲解一下“Ruby和C语言的区别”的完整使用攻略。 1. Ruby和C语言的简介 Ruby简介 Ruby是一种动态的、开源的面向对象的脚本语言。它的设计者是松本行弘(Matz)。Ruby语法简洁,易于学习,它可以处理文本、图形界面、网络等多个领域。 C语言简介 C语言是一种高级语言,是一种面向过程的程序设计语言,由贝尔实验室的Dennis M. …

    C 2023年5月10日
    00
  • 利用C语言实现猜数字小游戏

    下面是利用C语言实现猜数字小游戏的完整攻略: 步骤一:程序基本结构的搭建 我们可以先编写一个基本的程序框架,包含头文件、全局变量、函数声明等部分。具体代码如下: #include <stdio.h> #include <stdlib.h> #include <time.h> int secret_number; // 定义…

    C 2023年5月23日
    00
  • C语言 文件I/O

    下面是C语言文件I/O的完整使用攻略。 什么是文件I/O 文件I/O是指文件的输入/输出操作。C语言中,文件的读写操作主要通过<stdio.h>头文件中提供的函数实现。 文件的读写操作 打开文件 在进行文件读写前,首先需要打开文件: FILE *fopen(const char *filename, const char *mode); 其中,f…

    C 2023年5月9日
    00
  • C++内存四区之代码区、全局区、栈区和堆区

    C++内存四区指的是程序在运行时所使用的内存分为代码区、全局区、栈区和堆区。下面我们分别来讲解一下这四个区域。 1. 代码区 代码区是存储函数体等二进制代码的区域,它需要保护,以免被其他程序或者用户修改。代码区一般位于内存的高地址部分,从而防止由于栈溢出操作而覆盖代码区。 代码示例: #include <iostream> int main() …

    C 2023年5月24日
    00
合作推广
合作推广
分享本页
返回顶部