首页 > 编程语言 >C++笔记打卡第六天(通讯录管理系统)

C++笔记打卡第六天(通讯录管理系统)

时间:2024-04-07 21:58:33浏览次数:19  
标签:cout gender C++ ret abs 通讯录 personArray 打卡 name

1.结构体案例1

每名老师带领5个学生,总共有3个老师。设计学生和老师的结构体,其中在老师的结构体中,有老师姓名和一个存放5名学生的数组作为成员。学生的成员有姓名、考试分数,创建数组存放3名老师,通过函数给每个老师及所带的学生赋值。最终打印出老师数据以及老师所带学生数据。

#include <iostream>
#include <string>
#include <ctime>
using namespace std;
struct Student
{
    string sname;
    int score;
};
struct Teacher
{
    string tname;
    struct Student sArray[5]; // 学生数组
};
void allocateSpace(struct Teacher tArray[], int len)
{
    string nameSeed = "ABCDE";
    for (int i = 0; i < len; i++)
    {
        tArray[i].tname = "Teacher_";
        tArray[i].tname += nameSeed[i];

        for (int j = 0; j < 5; j++)
        {
            tArray[i].sArray[j].sname = "Student_";
            tArray[i].sArray[j].sname += nameSeed[j];

            int random = rand() % 61 + 40; // 40-100
            tArray[i].sArray[j].score = random;
        }
    }
}
void printArray(struct Teacher tArray[], int len)
{
    for (int k = 0; k < len; k++)
    {
        cout << "老师姓名:" << tArray[k].tname << endl;
        for (int m = 0; m < 5; m++)
        {
            cout << "学生姓名:" << tArray[k].sArray[m].sname << "score:" 
            << tArray[k].sArray[m].score << endl;
        }
    }
}
int main()
{
    // 随机数种子
    srand((unsigned int)time(NULL));
    struct Teacher tArray[3];
    int len = sizeof(tArray) / sizeof(tArray[0]);
    allocateSpace(tArray, len);
    
    printArray(tArray, len);
    system("pause");
    return 0;
}

2.结构体案例2

设计一个英雄的结构体,包括成员姓名,年龄,性别创建结构体数组,数组中存放5名英雄,通过冒泡排序的算法,将数组中的英雄按照年龄进行升序排序,最终打印排序后的结果。

#include <iostream>
#include <string>
using namespace std;
struct hero
{
    string name;
    int age;
    string gender;
};
void Sort(struct hero hArray[], int len)
{
    for (int i=0;i<len-1;i++)
    {
        for (int j=0;j<len-1-i;j++)
        {
            if (hArray[j].age > hArray[j+1].age)
            {
                struct hero temp = hArray[j];
                hArray[j] = hArray[j+1];
                hArray[j + 1] = temp;
            }
        }
    }
}
int main()
{
    struct hero hArray[5] =
    {
            {"刘备", 23, "男"},
            {"关羽", 22, "男"},
            {"张飞", 20, "男"},
            {"赵云", 21, "男"},
            {"貂蝉", 19, "女"}
    };
    int len = sizeof(hArray) / sizeof(hArray[0]);
    Sort(hArray, len);
    for (int k=0;k<len;k++)
    {
        cout << "name: " << hArray[k].name
        << "age: " << hArray[k].age 
        <<"gender: " << hArray[k].gender  
        << endl;
    }
    system("pause");
    return 0;
}

3.通讯录管理系统

用C++实现一个通讯录管理系统

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

①菜单功能

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;
}

②退出

case 0:
    cout << "欢迎下次使用" << endl;
    system("pause");
    return 0;
    break;

③添加

// 联系人结构体
struct person
{
    string name;
    int gender; // 1-男 2-女
    int age;
    string phone;
    string address;
};

// 通讯录结构体
struct Addressbook
{
    struct person personArray[MAX];
    // 记录当前联系人个数
    int size;
};

void addPerson(struct Addressbook* abs)
{
    // 判断通讯录是否满员
    if(abs->size == MAX)
    {
        cout << "通讯录已满,无法添加!" << endl;
    }
    else
    {
        string name;
        cout << "请输入姓名: "<< endl;
        cin >> name;
        abs->personArray[abs->size].name = name;

        int gender = 0;
        cout << "请输入性别(1-男,2-女): "<< endl;
        while(true)
        {
            cin >> gender;
            if (gender == 1 || gender == 2)
            {
                abs->personArray[abs->size].gender = gender;
                break; // 输入合法可以退出循环
            }
            cout << "输入有误,请重新输入"  << endl;
        }

        int age;
        cout << "请输入年龄: "<< endl;
        cin >> age;
        abs->personArray[abs->size].age = age;

        string number;
        cout << "请输入电话: "<< endl;
        cin >> number;
        abs->personArray[abs->size].phone = number;

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

        abs->size++;
        cout << "添加成功" << endl;

        system("pause"); // 按任意键继续
        system("cls");  // 清屏
    }
}

④显示联系人

void showPerson(struct Addressbook* abs)
{
    if (abs->size == 0)
    {
        cout << "当前通讯录为空" << endl;
    }
    else
    {
        for (int i=0;i<abs->size;i++)
        {
            cout << " 姓名:"<< abs->personArray[i].name
            << " 性别:" << (abs->personArray[i].gender == 1 ? "男" : "女")
            << " 年龄:" << abs->personArray[i].age
            << " 电话:" << abs->personArray[i].phone
            << " 地址:" << abs->personArray[i].address << endl;
        }
    }
    system("pause"); // 按任意键继续
    system("cls");  // 清屏
}

⑤删除联系人

int existPerson(struct Addressbook* abs, string target_name)
{
    for (int i=0; i<abs->size;i++)
    {
        if (abs->personArray[i].name == target_name)
        {
            return i;
        }
    }
    return -1; // 没找到这个人
}

void deletePerson(struct Addressbook* abs)
{
    string target_name;
    cout << "请您输入要删除的联系人: " << endl;
    cin >> target_name;
    
    int ret = existPerson(abs, target_name);  // 为什么是abs 不是*abs
    if (ret != -1)
    {
        for (int i =ret;i<abs->size;i++)
        {
            abs->personArray[i] = abs->personArray[i+1];
        }
        abs->size--;
        cout << "删除成功" << endl;
    }
    else
    {
        cout << "查无此人" << endl;
    }
    system("pause"); // 按任意键继续
    system("cls");  // 清屏
}

⑥查找联系人

void findPerson(struct Addressbook* abs)
{
    string target_name;
    cout << "请您输入要查找的联系人: " << endl;
    cin >> target_name;

    int ret = existPerson(abs, target_name);  // 为什么是abs 不是*abs
    if (ret != -1)
    {
        cout << " 姓名:"<< abs->personArray[ret].name
            << " 性别:" << (abs->personArray[ret].gender == 1 ? "男" : "女")
            << " 年龄:" << abs->personArray[ret].age
            << " 电话:" << abs->personArray[ret].phone
            << " 地址:" << abs->personArray[ret].address << endl;
    }
    else
    {
        cout << "查无此人" << endl;
    }
    system("pause"); // 按任意键继续
    system("cls");  // 清屏
}

⑦修改联系人

void changePerson(struct Addressbook* abs)
{
    string target_name;
    cout << "请您输入要修改的联系人: " << endl;
    cin >> target_name;

    int ret = existPerson(abs, target_name);  // 为什么是abs 不是*abs
    if (ret != -1)
    {
        string name;
        cout << "请输入姓名: "<< endl;
        cin >> name;
        abs->personArray[ret].name = name;

        int gender = 0;
        cout << "请输入性别(1-男,2-女): "<< endl;
        while(true)
        {
            cin >> gender;
            if (gender == 1 || gender == 2)
            {
                abs->personArray[ret].gender = gender;
                break; // 输入合法可以退出循环
            }
            cout << "输入有误,请重新输入"  << endl;
        }

        int age;
        cout << "请输入年龄: "<< endl;
        cin >> age;
        abs->personArray[ret].age = age;

        string number;
        cout << "请输入电话: "<< endl;
        cin >> number;
        abs->personArray[ret].phone = number;

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

        cout << "修改成功!" << endl;
    }
    else
    {
        cout << "查无此人" << endl;
    }
    system("pause"); // 按任意键继续
    system("cls");  // 清屏
}

⑧清空联系人

void clearPerson(struct Addressbook* abs)
{
    abs->size = 0; // 将当前记录的联系人置为0,做一个逻辑上的清空
    cout << "通讯录已清空" << endl;
    system("pause"); // 按任意键继续
    system("cls");  // 清屏
}

完整代码:

#include <iostream>
#include <string>
using namespace std;
#define MAX 1000

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;
}

// 联系人结构体
struct person
{
    string name;
    int gender; // 1-男 2-女
    int age;
    string phone;
    string address;
};

// 通讯录结构体
struct Addressbook
{
    struct person personArray[MAX];
    // 记录当前联系人个数
    int size;
};

void addPerson(struct Addressbook* abs)
{
    // 判断通讯录是否满员
    if(abs->size == MAX)
    {
        cout << "通讯录已满,无法添加!" << endl;
    }
    else
    {
        string name;
        cout << "请输入姓名: "<< endl;
        cin >> name;
        abs->personArray[abs->size].name = name;

        int gender = 0;
        cout << "请输入性别(1-男,2-女): "<< endl;
        while(true)
        {
            cin >> gender;
            if (gender == 1 || gender == 2)
            {
                abs->personArray[abs->size].gender = gender;
                break; // 输入合法可以退出循环
            }
            cout << "输入有误,请重新输入"  << endl;
        }

        int age;
        cout << "请输入年龄: "<< endl;
        cin >> age;
        abs->personArray[abs->size].age = age;

        string number;
        cout << "请输入电话: "<< endl;
        cin >> number;
        abs->personArray[abs->size].phone = number;

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

        abs->size++;
        cout << "添加成功" << endl;

        system("pause"); // 按任意键继续
        system("cls");  // 清屏
    }
}

void showPerson(struct Addressbook* abs)
{
    if (abs->size == NULL)
    {
        cout << "当前通讯录为空" << endl;
    }
    else
    {
        for (int i=0;i<abs->size;i++)
        {
            cout << " 姓名:"<< abs->personArray[i].name
            << " 性别:" << (abs->personArray[i].gender == 1 ? "男" : "女")
            << " 年龄:" << abs->personArray[i].age
            << " 电话:" << abs->personArray[i].phone
            << " 地址:" << abs->personArray[i].address << endl;
        }
    }
    system("pause"); // 按任意键继续
    system("cls");  // 清屏
}

int existPerson(struct Addressbook* abs, string target_name)
{
    for (int i=0; i<abs->size;i++)
    {
        if (abs->personArray[i].name == target_name)
        {
            return i;
        }
    }
    return -1; // 没找到这个人
}

void deletePerson(struct Addressbook* abs)
{
    string target_name;
    cout << "请您输入要删除的联系人: " << endl;
    cin >> target_name;
    
    int ret = existPerson(abs, target_name);  // 为什么是abs 不是*abs
    if (ret != -1)
    {
        for (int i =ret;i<abs->size;i++)
        {
            abs->personArray[i] = abs->personArray[i+1];  // 数据前移
        }
        abs->size--;
        cout << "删除成功" << endl;
    }
    else
    {
        cout << "查无此人" << endl;
    }
    system("pause"); // 按任意键继续
    system("cls");  // 清屏
}


void findPerson(struct Addressbook* abs)
{
    string target_name;
    cout << "请您输入要查找的联系人: " << endl;
    cin >> target_name;

    int ret = existPerson(abs, target_name);  // abs(指针本身) 不是abs*(指针指向的值)
    if (ret != -1)
    {
        cout << " 姓名:"<< abs->personArray[ret].name
            << " 性别:" << (abs->personArray[ret].gender == 1 ? "男" : "女")
            << " 年龄:" << abs->personArray[ret].age
            << " 电话:" << abs->personArray[ret].phone
            << " 地址:" << abs->personArray[ret].address << endl;
    }
    else
    {
        cout << "查无此人" << endl;
    }
    system("pause"); // 按任意键继续
    system("cls");  // 清屏
}

void changePerson(struct Addressbook* abs)
{
    string target_name;
    cout << "请您输入要修改的联系人: " << endl;
    cin >> target_name;

    int ret = existPerson(abs, target_name);  // 为什么是abs 不是*abs
    if (ret != -1)
    {
        string name;
        cout << "请输入姓名: "<< endl;
        cin >> name;
        abs->personArray[ret].name = name;

        int gender = 0;
        cout << "请输入性别(1-男,2-女): "<< endl;
        while(true)
        {
            cin >> gender;
            if (gender == 1 || gender == 2)
            {
                abs->personArray[ret].gender = gender;
                break; // 输入合法可以退出循环
            }
            cout << "输入有误,请重新输入"  << endl;
        }

        int age;
        cout << "请输入年龄: "<< endl;
        cin >> age;
        abs->personArray[ret].age = age;

        string number;
        cout << "请输入电话: "<< endl;
        cin >> number;
        abs->personArray[ret].phone = number;

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

        cout << "修改成功!" << endl;
    }
    else
    {
        cout << "查无此人" << endl;
    }
    system("pause"); // 按任意键继续
    system("cls");  // 清屏
}

void clearPerson(struct Addressbook* abs)
{
    abs->size = 0; // 将当前记录的联系人置为0,做一个逻辑上的清空
    cout << "通讯录已清空" << endl;
    system("pause"); // 按任意键继续
    system("cls");  // 清屏
}

int main()
{   
    Addressbook abs;
    abs.size = 0;

    int select = 0;
    while(true)
    {
        showMenu();

        cin >> select;
        switch(select)
        {
        case 1: 
            addPerson(&abs);  // 地址传递才能改变实参
            break;
        case 2: 
            showPerson(&abs);
            break;
        case 3: 
            deletePerson(&abs);
            break;
        case 4: 
            findPerson(&abs);
            break;
        case 5: 
            changePerson(&abs);
            break;
        case 6: 
            clearPerson(&abs);
            break;
        default: 
            break;
        case 0:
            cout << "欢迎下次使用" << endl;
            system("pause");
            return 0;
            break;
        }
    }
    
    system("pause");
    return 0;
}

 

标签:cout,gender,C++,ret,abs,通讯录,personArray,打卡,name
From: https://blog.csdn.net/weixin_57139639/article/details/137479595

相关文章

  • C++ Break、Continue 和 数组操作详解
    C++Break和Continuebreak语句还可以用来跳出循环。在以下示例中,当i等于4时跳出循环:for(inti=0;i<10;i++){if(i==4){break;}cout<<i<<"\n";}C++Continue以下示例跳过了值为4的情况:for(inti=0;i<10;i++){if(i==4)......
  • C++中的类与对象丶this指针和构造函数与析构函数 (一)
    C++中的类与对象和this指针(一)一丶类与对象1.类的引入2.类的实例化3.类的类型的大小I.计算类或对象的大小II.规定空类占一个字节大小4.类中的访问权限5.类中的构造函数和析构函数I.构造函数II.析构函数二丶this指针1.this指针的引出2.this指针的特性3.th......
  • 上海计算机学会2020年5月月赛C++丙组T2计算GPA
    题目背景GPA是GradePointAverage的简写,是高校采用的一种评估学生成绩的制度。题目描述要计算一个学生的GPA,先将每门学科的等第换算成为一个绩点,规则为:等第 A 为 44 分;等第 B 为 33 分;等第 C 为 22 分;等第 D 为 11 分;如果有 + 号后缀,则加 0.30.3 ......
  • 【每周例题】蓝桥杯 C++ 鸡哥的蛋糕大作战
    鸡哥的蛋糕大作战题目鸡哥的蛋糕大作战 题目分析1.使用一个for循环遍历全数,寻找最大洞的数2.使用一个while进行数位拆分,寻找洞的数量3.使用if从两个条件寻找最大洞的最小数符合最大洞的数洞数相同中的最小数代码#include<iostream>#include<bits/stdc++.h>using......
  • 通讯录----顺序表版本
    1.通讯录的实现逻辑对于通讯录,我们做的无非就是初始化,销毁。添加联系人数据,修改联系人数据,删除联系人数据,查找联系人数据,展示联系人数据;这个不就和我们的顺序表的逻辑如出一辙吗,顺序表实现的功能不就是数据的初始化,修改,删除(头删和尾删),添加(头插和尾插),顺序表的打印,这些我们是可......
  • 【每周例题】蓝桥杯 C++ 鸡哥的奇特密码
    鸡哥的奇特密码题目鸡哥的奇特密码 题目分析 1.首先,我们需要想到用一个for循环去遍历整个数组,用if寻找出需要我们处理的部分2.如何处理:将重复的L丢出数组,可以运用pop_back()函数3.为了避免越界,我们可以从后往前遍历代码#include<iostream>#include<bits/stdc++.h>u......
  • C++:类的继承
    基类的构造函数和析构函数不会被继承,但是当子类对象初始化时则会自动调用基类的构造函数和析构函数(默认)如果想要调用基类的重载构造函数,需要在构造函数后加上“:<重载的构造函数>{};”,如下classFATHER{public:FATHER();~FATHER();FATHER(inta)//重载......
  • C++核心编程:多继承
    #include<iostream>usingnamespacestd;//多继承语法继承方式父类1,继承方式父类2//实际开发过程中,一般不建议使用多继承classBase1{public: Base1() { m_A=100; } intm_A;};classBase2{public: Base2() { m_A=200; } intm_A;};cl......
  • 2024 4 7 c++ 作业多态性
    1.多态性:抽象类和派生类(1)定义一个抽象类CShape(至少有一个函数被声明为纯虚函数);(2)再利用CShape分别定义两个派生类CRectangle(矩形)和CCircle(圆),三个类都有计算面积的成员函数GetArea()和计算对象周长的成员函数GetPerimeter();(3)在主函数中声明基类指针和派生类对......
  • 2024.1.27c++测试订正代码
    测试订正生成括号题目描述王五是一名数学专业的同学,在课余选修了C++C++C++编程课,现在他能够自己写程序判断......