基于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日

相关文章

  • 神奇的c/c++小游戏((提高你的编程兴趣)

    神奇的C/C++小游戏 介绍 这是一个神奇的C/C++小游戏,它可以帮助你提高你的编程兴趣。这个游戏包含了一个简单的文本界面,并且涉及到了C/C++中的一些基础知识,如输入/输出、条件语句和循环等。 游戏说明 这个游戏的玩法很简单,它会随机选择一个整数,你需要根据提示猜测这个整数的值。每次猜测后,游戏会给出一些提示,告诉你你的猜测值比答案大还是小,直到你猜中…

    C 2023年5月24日
    00
  • 使用C语言打印月历

    使用C语言打印月历需要进行如下步骤: 第一步:确定需求 我们需要编写一个程序,根据用户输入的年份和月份,输出该月份的日历。用户输入的年份和月份需要通过命令行参数传递。 第二步:分析问题 要输出一个月份的日历,我们需要知道这个月有多少天,以及从哪一天开始。根据该月第一天是星期几,我们可以推算出每天在日历中的位置。因此,我们需要解决以下问题: 根据年份和月份计算…

    C 2023年5月23日
    00
  • json格式解析和libjson的用法介绍(关于cjson的使用方法)

    一、JSON格式解析简介 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。与XML类似,JSON也是一种无须定义复杂DTD(Data Type Definition,数据类型定义),就可直接使用的格式。由于其简明的格式、易于阅读等特性,得到了广泛的应用。 二、libjson的用法介绍 简介 libjson是一个C…

    C 2023年5月23日
    00
  • C++11 std::function和std::bind 的使用示例详解

    针对你提到的主题,我会给出相应的markdown格式文本,包含标题、代码块和示例说明,内容完整细致。以下是详细讲解: C++11 std::function和std::bind 的使用示例详解 在C++11标准中,引入了std::function和std::bind两个函数模板,用于支持更灵活的函数对象(函数指针、成员函数指针、函数对象和lambda表达式)…

    C 2023年5月22日
    00
  • 战舰世界各类型战舰 异常状况紧急处置手册分享

    战舰世界各类型战舰 异常状况紧急处置手册分享 作为一款大型多人在线游戏,战舰世界中各类型战舰的惯性和特殊性质使得船只在不同情况下会出现各种异常状况。为使玩家更好地应对各种危机情况,在此分享一份战舰世界各类型战舰的异常状况紧急处置手册。 1. 舰桥受损紧急处理 舰桥是掌控战舰命运的重要部位,一旦舰桥受损,可能会影响到战舰的行驶、防御和火力等能力。针对舰桥受损的…

    C 2023年5月22日
    00
  • C++简单实现shared_ptr的代码

    实现一个简单的shared_ptr需要考虑以下几个方面: 1.计数器实现:将指针的计数器放在一个自定义类中,当有多个shared_ptr指向同一个对象时,计数器加1;当一个指针被销毁时,计数器减1;当计数器为0时,释放对象所占用的内存。 2.拷贝构造函数和赋值运算符实现:在拷贝构造函数和赋值运算符中,需要将新对象的计数器指向原对象的计数器,使得两个对象指向同…

    C 2023年5月23日
    00
  • 戴尔XPS 13 2in1值得买吗 戴尔XPS13 2in1二合一变形本深度评测

    戴尔XPS 13 2in1值得买吗 戴尔XPS13 2in1二合一变形本深度评测 背景说明 戴尔XPS 13 2in1是一款二合一变形本,它的设计十分精致,配置也相当不错,是不是值得购买呢?本篇文章将根据使用体验、性能、外观等多方面来进行深度评测。 使用体验 戴尔XPS 13 2in1 采用的是英特尔酷睿i7-7Y75处理器,配合16GB内存和512GB固态…

    C 2023年5月23日
    00
  • 关于define与C 的内存

    关于define与C 的内存 在 C 语言中,宏定义(define)是一种预处理指令,它用于在程序编译之前将文本替换为程序中的一些值或表达式。define 实际上并不是 C 的内存中的一个变量,它只是预处理器通过文本替换来将程序中所有引用该宏定义的地方,都替换为宏定义在预处理器中所定义的值。 宏定义在展开时发生在编译前,因此无法在程序执行时获得它的值。这也是…

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