基于C++泛型编程职工管理系统

基于C++泛型编程的职工管理系统需要实现以下功能:

  1. 实现职工的基本信息,包括职工号、姓名、性别、部门等信息的录入、修改、删除和展示功能。
  2. 实现职工的信息的按职工号、姓名、性别、部门等关键字进行查询的功能。
  3. 实现职工信息的读取和保存功能,以便于程序下次运行时可以直接读取上次信息。
  4. 实现按职工号、姓名、性别、部门等关键字进行职工的自然排序的功能。

下面是对应的实现过程:

设计职工类

需要设计一个职工类,记录职工的相关信息。

class Worker
{
public:
    int m_Id;     // 职工号
    string m_Name;    // 姓名
    int m_Sex;    // 性别:0表示女,1表示男
    int m_DeptId;    // 部门编号

    void showInfo();   // 显示个人信息
    void showMenu();   // 显示菜单
};

设计员工数组类

员工数组类用于操作职工信息。在类中使用泛型来实现不同类型数据的数组操作。为了实现动态扩容,需要通过模板定义数组容量。

template <class T>
class WorkerArray
{
public:
    WorkerArray(int capacity); // 构造函数
    ~WorkerArray();            // 析构函数

    void add(T val);       // 添加数据
    void remove(T val);    // 删除数据
    void edit(T val);      // 修改数据
    void sort();           // 自然排序
    void print();          // 显示数据

    int m_CurLength;    // 当前长度
    int m_Capacity;     // 总容量
    T *p_DataArr;       // 指向数据的指针
};

完成职工管理系统

在main函数中调用WorkerArray类来实现完整的职工管理系统。

int main()
{
    WorkerArray<Worker> arr(100);
    int select = 0;
    while (true)
    {
        arr.showMenu();

        cin >> select;
        switch (select)
        {
        case 1:     // 添加职工
            …
            break;
        case 2:     // 删除职工
            …
            break;
        case 3:     // 修改职工信息
            …
            break;
        case 4:     // 显示职工信息
            …
            break;
        case 5:     // 搜索职工信息
            …
            break;
        case 6:     // 读取文件
            …
            break;
        case 7:     // 保存文件
            …
            break;
        case 8:     // 自然排序
            …
            break;
        case 0:     // 退出系统
            return 0;
            break;
        default:
            system("cls");
            break;
        }
    }
    return 0;
}

以下是两条在职工管理系统中的示例说明:

示例1:添加职工

在职工管理系统中选择1,进入添加职工操作。输入职工信息后,调用了WorkerArray类中的add函数,把职工信息添加到职工数组中。

case 1:     // 添加职工
    {
        cout << "请输入职工个数:" << endl;
        int num = 0;
        cin >> num;
        if (num > 0)
        {
            for (int i = 0; i < num; i++)
            {
                int id;
                string name;
                int sex = 0;
                int did = 0;

                system("cls");
                cout << "请输入第 " << i + 1 << " 个职工的信息:" << endl;
                cout << "请输入职工号:" << endl;
                cin >> id;
                cout << "请输入姓名:" << endl;
                cin >> name;
                cout << "请输入性别(0/1):" << endl;
                cin >> sex;
                cout << "请输入岗位:" << endl;
                cin >> did;

                Worker worker;
                worker.m_Id = id;
                worker.m_Name = name;
                worker.m_Sex = sex;
                worker.m_DeptId = did;

                arr.add(worker);
            }
        }
        system("cls");
        break;
    }

示例2:按职工号查询职工信息

在职工管理系统中选择5,进入查询职工信息操作。在查询职工信息操作中,输入职工号后,调用了WorkerArray类中的print函数,从职工数组中查找职工信息并展示。

case 5:     // 搜索职工信息
    {
        cout << "请输入搜索方式:" << endl;
        cout << "1 -- 按职工号搜索" << endl;
        cout << "2 -- 按姓名搜索" << endl;
        cout << "3 -- 按性别搜索" << endl;
        int select = 0;
        cin >> select;
        if (select == SEARCH_BY_ID)
        {
            int id;
            cout << "请输入职工号:" << endl;
            cin >> id;
            int index = arr.getIndexById(id);

            if (index == -1)
            {
                cout << "查无此人!" << endl;
            }
            else
            {
                arr.p_DataArr[index].showInfo();
            }
        }
        system("cls");
        break;
    }

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于C++泛型编程职工管理系统 - Python技术站

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

相关文章

  • CCleaner Pro怎么激活?CCleaner专业版注册破解激活教程(附下载)

    CCleaner Pro激活攻略 1. 下载CCleaner专业版安装文件 首先,你需要下载CCleaner专业版安装文件。你可以在官方网站上下载安装文件,也可以在其他下载站点上下载。注意,要下载专业版,而不是免费版。 下载完成后,双击安装文件并按照提示进行安装。 2. 获取CCleaner专业版注册码 在你安装CCleaner专业版后,你将需要注册码来激活…

    C 2023年5月23日
    00
  • c语言分离三位数的实现

    C语言分离三位数的实现 问题描述 需要将一个三位数拆分成它的百位、十位、个位并分别输出。 实现思路 首先我们需要得到这个三位数的百位、十位、个位,然后分别输出即可。对于一个三位数$abc$,它的百位是$a$,十位是$b$,个位是$c$。我们可以使用除法和取余两种方式来获取这三个数字。 除法:$a = abc / 100$;$b = abc / 10 \% 1…

    C 2023年5月23日
    00
  • C语言实现飞机大战程序设计

    C语言实现飞机大战程序设计攻略 本文将介绍如何使用C语言编写一个基于控制台的飞机大战游戏。该游戏将在控制台内实现,通过键盘控制飞机移动与发射子弹,实现与敌机的战斗。 准备工作:学习C语言的基础知识 在开始编写游戏前,需要掌握一些基本的C语言知识,包括语法、变量、函数等。如果你是初学者,可以先通过一些C语言的教程、书籍或视频学习基础知识。 第一步:绘制游戏画面…

    C 2023年5月23日
    00
  • Linux下动静态库的打包与使用指南(C/C++)

    Linux下动静态库的打包与使用指南(C/C++) 什么是库 在软件开发中,我们常常会将一些常用的代码封装成函数或类。如果这些函数或类需要在多个程序中使用,那么将其打包成一个库以供其他程序调用就是一个不错的选择。库分为动态库和静态库两种类型。 静态库和动态库的区别 静态库 静态库是指在程序编译时,代码就已经被编译进了可执行文件中。因此,可执行文件体积较大,但…

    C 2023年5月23日
    00
  • c++实现简单的线程池

    c++实现简单的线程池,是一种常用的并发编程技术,用于提高程序的并行度和执行效率。下面我将为您提供实现线程池的完整攻略。 什么是线程池? 线程池是一种池化技术,用于管理和复用线程资源,避免频繁的线程创建和销毁。线程池中会预先创建一定数量的线程,并维护一个任务队列,当需要执行任务时,从队列中获取一个任务分配给线程执行。任务执行完毕后,线程回收到线程池中。 实现…

    C 2023年5月22日
    00
  • 浅析C++ atomic 和 memory ordering

    浅析C++ atomic 和 memory ordering 简介 C++11 中引入了一个新的原子类型 —— std::atomic,用以在多线程环境中实现原子操作。同时,它也提供了 Memory Ordering 来确保原子操作的顺序性。本文将从理论和实践角度浅析 C++ atomic 和 memory ordering。 原子操作 原子操作是指一个操作…

    C 2023年5月23日
    00
  • C++演讲比赛管理系统实现流程实例

    C++演讲比赛管理系统实现流程实例 系统需求 演讲比赛管理系统要求具有以下功能: 实现学生信息的录入:包括学号、姓名、年龄等信息。 实现教师信息的录入:包括工号、姓名、年龄、职称等信息。 实现选手报名:包括姓名、年龄、比赛成绩等信息。 实现比赛的评分:包括裁判打分、选手得分等信息。 实现比赛成绩的排序和输出:包括选手名次、得分等信息。 类的设计 根据系统需求…

    C 2023年5月23日
    00
  • java自定义异常打印内容详解

    当我们在编写 Java 程序时,如果出现了异常,通常会打印出一些信息,以便我们快速定位问题所在。Java 还提供了自定义异常的功能,可以通过自定义异常类来打印我们想要的异常信息,从而使程序的调试和维护变得更加便捷。下面,我会为大家详细讲解如何使用 Java 自定义异常打印内容。 1. 自定义异常类 我们可以通过继承 Exception 类或其子类来创建自定义…

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