C++ 管理系统实战

news2024/12/26 23:26:33

C++ 管理系统实战

1. 目录结构

在这里插入图片描述

2. workClass.h


/**
  ******************************************************************************
  * @file           : employee.h
  * @author         : zhong
  * @brief          : None
  * @attention      : None
  * @date           : 2023/8/10
  ******************************************************************************
  */

#include "workManager.h"

/*!
 * 普通员工类
 */
class Employee : public Work{
public:
    Employee(int id, string name, int dept){
        this->m_Id = id;
        this->m_Name = name;
        this->m_DeptId = dept;
    }
    void showWorkerInfo() override {
        cout << "职工编号: " << this->m_Id
             << "\t职工姓名: " << this->m_Name
             << "\t岗位信息: " << this->getDeptName()
             << "\t岗位职责: " << this->workInfo << endl;
    }

    string getDeptName() override {
        return "总裁";
    }
private:
    string workInfo = "管理公司所有事务";
};


/*!
 * 经理类
 */
class Manager : public Work{
public:
    Manager(int id, string name, int dept){
        this->m_Id = id;
        this->m_Name = name;
        this->m_DeptId = dept;
    }
    void showWorkerInfo() override {
        cout << "职工编号: " << this->m_Id
             << "\t职工姓名: " << this->m_Name
             << "\t岗位信息: " << this->getDeptName()
             << "\t岗位职责: " << this->workInfo << endl;
    }

    string getDeptName() override {
        return "经理";
    }
private:
    string workInfo = "管理员工";
};

/*!
 * 老板类
 */
class Boos : public Work{
public:
    Boos(int id, string name, int dept){
        this->m_Id = id;
        this->m_Name = name;
        this->m_DeptId = dept;
    }
    void showWorkerInfo() override {
        cout << "职工编号: " << this->m_Id
             << "\t职工姓名: " << this->m_Name
             << "\t岗位信息: " << this->getDeptName()
             << "\t岗位职责: " << this->workInfo << endl;
    }

    string getDeptName() override {
        return "员工";
    }
private:
    string workInfo = "工作";
};

3. workFunction.h


/**
  ******************************************************************************
  * @file           : workFunction.h
  * @author         : zhong
  * @brief          : None
  * @attention      : None
  * @date           : 2023/8/11
  ******************************************************************************
  */


#include "workManager.h"
#include "workClass.h"
#define FILEPATH "workManager/work.txt"

/*!
 * 添加用户
 */
void WorkManager::addWorkInfo() {
    cout << "请输入添加职工的数量: " << endl;
    int addMuch = 0;
    cin >> addMuch;
    if(addMuch > 0){
        // 添加 计算新空间的大小
        int newSize = this->m_EmpNum + addMuch;
        Work  **newSpace = new Work * [newSize];
        if (this->pWorkArray != NULL){
            for (int i = 0; i < this->m_EmpNum; ++i) {
                newSpace[i] = this->pWorkArray[i];
            }
        }
        // 批量添加新数据
        for (int i = 0; i < addMuch; ++i) {
            int id;         // 职工id
            string name;    // 职工姓名
            int dSelect;    // 职工部门
            cout << "请输入第" << i+1 << "个员工职工的ID: " << endl;
            cin >> id;
            cout << "请输入第" << i+1 << "职工姓名: " << endl;
            cin >> name;
            cout << "请选择岗位职位: " << endl;
            cout << "1、普通员工: " << endl;
            cout << "2、经理: " << endl;
            cout << "3、老板: " << endl;
            cin >> dSelect;

            Work *work = NULL;
            switch (dSelect) {
                case 1:
                    work = new Employee(id, name, 1);
                    break;
                case 2:
                    work = new Manager(id, name, 2);
                    break;
                case 3:
                    work = new Boos(id, name, 3);
                    break;
                default:
                    cout << "输入有误!" << endl;
                    break;
            }

            newSpace[this->m_EmpNum + i] = work;
        }
        // 释放原有堆的空间
        delete [] this->pWorkArray;

        // 更改新空间的指向
        this->pWorkArray = newSpace;

        // 更新员工人数
        this->m_EmpNum = newSize;

        // 更新职工不为空
        this->fileIsHave = false;

        // 保存员工信息
        WorkManager::saveFile();

        // 提示添加成功
        cout << "你已成功添加 " << addMuch << " 名职工!" << endl;
    }else{
        cout << "输入有误!" << endl;
    }

    // 按任意键清屏回到上级
    system("pause");
    system("cls");
}
/*!
 * 读取员工信息
 */
void WorkManager::showWorkInfo() {
    if(this->fileIsHave){
        cout << "文件没有数据!" << endl;
        return;
    }
    // 按照 ID 排序
    for (int i = 0; i < this->m_EmpNum; ++i) {
        for (int j = 0; j < i; ++j) {
            Work *work = NULL;
            // <" 升序 “>” 降序
            if (this->pWorkArray[i]->m_Id < this->pWorkArray[j]->m_Id){
                work = this->pWorkArray[i];
                this->pWorkArray[i] = this->pWorkArray[j];
                this->pWorkArray[j] = work;
            }
        }
    }
    // 输出排序后的内容
    for (int i = 0; i < this->m_EmpNum; ++i) {
        this->pWorkArray[i]->showWorkerInfo();
    }
    system("pause");
    system("cls");
}

/*!
 * 保存工信息
 */
void WorkManager::saveFile() {
    ofstream ofs;
    ofs.open(FILEPATH, ios::out);
    if(!ofs.is_open()){
        cout << "文件不存在或者文件为空!" << endl;
        return ;
    }
    for (int i = 0; i < this->m_EmpNum; ++i) {
        ofs << this->pWorkArray[i]->m_Id << " "
            << this->pWorkArray[i]->m_Name << " "
            << this->pWorkArray[i]->m_DeptId << endl;
    }
    ofs.close();
}
/*!
 * 获取文件里员工个数
 * @return 员工个数
 */
int WorkManager::getFileMenNum() {
    ifstream ifs;
    ifs.open(FILEPATH, ios::in);
    int id;
    string name;
    int dept;
    int count=0;
    while (ifs >> id && ifs >> name && ifs >> dept){
        count++;
    }
    ifs.close();
    return count;
}
/*!
 * 获取文件里的员工信息
 */
void WorkManager::getFileWork() {
    ifstream ifs;
    ifs.open(FILEPATH, ios::in);
    int id;
    string name;
    int dept;
    int count=0;
    while (ifs >> id && ifs >> name && ifs >> dept){
        Work *work = NULL;
        if (dept == 1){
            work = new Employee(id, name, dept);
        }else if (dept == 2){
            work = new Manager(id, name, dept);
        }else{
            work = new Boos(id, name, dept);
        }
        this->pWorkArray[count] = work;
        count++;
    }
    ifs.close();
}
/*!
 * 删除员工信息
 */
void WorkManager::deleteFileWork() {
    cout << "请选择删除方式: \n 1.按编号删除\n 2.按姓名删除" << endl;
    int choose;
    cin >> choose;
    bool status = true;    // 判断 ID 或者 姓名 是否存在
    if (choose == 1){
        cout << "请输入员工编号: " << endl;
        int id;
        cin >> id;
        for (int i = 0; i < this->m_EmpNum; i++) {
            if (id == this->pWorkArray[i]->m_Id){
                status = false;
            }
            if(!status){
                // 数据前移
                this->pWorkArray[i]=this->pWorkArray[i+1];
            }
        }
        if(status) {
            cout << "你输入的 ID 不存在!" << endl;
        }
    }else if (choose == 2){
        cout << "请输入员工姓名: " << endl;
        string name;
        cin >> name;

        for (int i = 0; i < this->m_EmpNum; ++i) {
            if (name == this->pWorkArray[i]->m_Name){
                status = false;
            }
            if(!status){
                // 数据前移
                this->pWorkArray[i]=this->pWorkArray[i+1];
            }
        }
        if(status) {
            cout << "你输入的姓名不存在!" << endl;
            system("cls");
            return;
        }
    }else{
        cout << "你的选择有误,请重新选择!" << endl;
        system("cls");
        return;
    }

    if (!status){
        this->pWorkArray[this->m_EmpNum-1] = NULL;
        this->m_EmpNum--;
        this->saveFile();
        cout << "删除成功!" << endl;
        system("pause");
        system("cls");
    }
}

/*!
 * 更改员工信息
 */
void WorkManager::updateWorkInfo() {

    if(this->fileIsHave) {
        cout << "文件不存在或者为空!" << endl;
        return;
    }

    int id;
    cout << "请输入需要修改信息的 ID: " << endl;
    cin >> id;

    for (int i = 0; i < this->m_EmpNum; ++i) {
        if(this->pWorkArray[i]->m_Id == id){
            cout << "请输入需要修改的内容: \n 1.姓名\n 2.职业" << endl;
            int choose;
            cin >> choose;
            switch (choose) {
                case 1: {
                    cout << "请输入修改后的姓名: " << endl;
                    string name;
                    cin >> name;
                    pWorkArray[i]->m_Name = name;
                    cout << "修改成功!" << endl;
                    system("pause");
                    system("cls");
                    break;
                }
                case 2: {
                    cout << "请输入修改后的部门 ID: " << endl;
                    cout << "1、普通员工: " << endl;
                    cout << "2、经理: " << endl;
                    cout << "3、老板: " << endl;
                    int dept;
                    cin >> dept;
                    pWorkArray[i]->m_DeptId = dept;
                    cout << "修改成功!" << endl;
                    system("pause");
                    system("cls");
                    break;
                }
                default: {
                    cout << "选择错误!" << endl;
                    return;
                }
            }
        }else{
            cout << "未找到相关 ID 的信息" << endl;
            return;
        }
    }
    this->saveFile();
}

/*!
 * 查找员工信息
 */
void WorkManager::findWorkInfo() {
    int id;
    cout << "请输入员工ID查询: " << endl;
    cin >> id;
    bool status = false;

    for (int i = 0; i < this->m_EmpNum; ++i) {
        if(this->pWorkArray[i]->m_Id == id){
            this->pWorkArray[i]->showWorkerInfo();
            status = true;
        }
    }
    if(!status){
        cout << "未查询到该 ID 信息" << endl;
        system("pause");
        system("cls");
    }

}

/*!
 * 按编号排序
 */
void WorkManager::sortWorkInfo() {
    for (int i = 0; i < this->m_EmpNum; ++i) {
        for (int j = 0; j < i; ++j) {
            Work * work = NULL;
            if(this->pWorkArray[i]->m_Id > this->pWorkArray[j]->m_Id){
                work = this->pWorkArray[i];
                this->pWorkArray[i] = this->pWorkArray[j];
                this->pWorkArray[j] = work;
            }
        }
    }
    this->saveFile();
}

/*!
 * 清空所有信息
 */
void WorkManager::deleteAllWorkInfo() {
    int enterDelete = 0;
    cout << "1.确认删除 \t其他任意键撤销"  << endl;
    cin >> enterDelete;
    if(enterDelete == 1){
        this->pWorkArray = NULL;
        this->m_EmpNum = 0;
        this->saveFile();
        cout << "清空所有信息成功!" << endl;
    }
}

4. workManager.h


/**
  ******************************************************************************
  * @file           : workManager.h
  * @author         : zhong
  * @brief          : None
  * @attention      : None
  * @date           : 2023/8/10
  ******************************************************************************
  */

#include <bits/stdc++.h>

using namespace std;

class Work;

/*!
 * 菜单实现
 */
class WorkManager {
public:
    // 构造函数
    WorkManager();

    int m_EmpNum;       // 记录职工人数

    Work ** pWorkArray;      // 职工数组指针

    bool fileIsHave = false ;        // 文件是否存在


    //添加职工
    void addWorkInfo();

    // 读取文件
    void readFile();

    // 获取文件里员工人数
    int getFileMenNum();

    // 获取文件里的员工信息
    void getFileWork();

    // 删除员工信息
    void deleteFileWork();

    // 修改员工信息
    void updateWorkInfo();

    // 查找员工信息
    void findWorkInfo();

    // 按编号排序
    void sortWorkInfo();

    // 清空所有信息
    void deleteAllWorkInfo();

    // 保存文件
    void saveFile();

    // 显示员工信息
    void showWorkInfo();

    // 菜单
    void showMenu();

    // 退出系统
    void exitSystem();

    // 析构函数
    ~WorkManager();
};

/*!
 * 员工类
 */
class Work {
public:
    int m_Id;           // 员工 ID
    string m_Name;      // 员工姓名
    int m_DeptId;       // 员工编号

    /*!
     * 显示个人信息
     */
    virtual void showWorkerInfo() = 0;

    /*!
     * 获取岗位名称
     * @return 岗位名称
     */
    virtual string getDeptName() = 0;

};

5. workManager.cpp


/**
  ******************************************************************************
  * @file           : workManager.cpp
  * @author         : zhong
  * @brief          : None
  * @attention      : None
  * @date           : 2023/8/10
  ******************************************************************************
  */

#include "workManager.h"
#include <bits/stdc++.h>
#include "workClass.h"
#include "workFunction.h"
#define FILEPATH "workManager/work.txt"

using namespace std;
/*!
 * 构造函数实现
 */
WorkManager::WorkManager() {
    // 初始化属性 文件不存在
    ifstream ifs;
    ifs.open(FILEPATH, ios::in);
    if(!ifs.is_open()){
//        cout << "文件不存在" << endl;
        this->fileIsHave = true;   // 文件初始化为不存在
        this->m_EmpNum = 0;         // 初始化职工细信息
        this->pWorkArray = NULL;    // 初始哈数组指针
        ifs.close();
        return;
    }
   // 初始化属性 文件存在但为空
    char ch;
    ifs >> ch;
    if (ifs.eof()){
//        cout << "文件为空" << endl;
        this->fileIsHave = true;   // 文件初始化为不存在
        this->m_EmpNum = 0;         // 初始化职工细信息
        this->pWorkArray = NULL;    // 初始哈数组指针
        ifs.close();
        return;
    }

    // 初始化属性 文件存在且有值
    cout << this->getFileMenNum() << endl;
    this->m_EmpNum = this->getFileMenNum();
    // 开辟空间
    this->pWorkArray = new Work *[this->m_EmpNum];
    // 初始化所有员工信息
    this->getFileWork();
}

/*!
 * 退出系统
 */
void WorkManager::exitSystem() {
    cout << "欢迎下次使用......" << endl;
    system("pause");
    exit(0);
}

/*!
 * 析构函数实现  释放堆区数据
 */
WorkManager::~WorkManager() {
    if(this->pWorkArray!=NULL){
        delete[] this->pWorkArray;
        this->pWorkArray = NULL;
    }
}



/*!
 * 显示菜单
 */
void WorkManager::showMenu() {
    cout << "******************************************" << endl;
    cout << "************欢迎使用职工管理系统**********" << endl;
    cout << "************0.退出职工系统****************" << endl;
    cout << "************1.增加职工信息****************" << endl;
    cout << "************2.显示职工信息****************" << endl;
    cout << "************3.删除职工信息****************" << endl;
    cout << "************4.修改职工信息****************" << endl;
    cout << "************5.查找职工信息****************" << endl;
    cout << "************6.按照编号排序****************" << endl;
    cout << "************7.清空所有信息****************" << endl;
    cout << "******************************************" << endl;
}

void test() {
    Work *work = NULL;
    work = new Employee(1,"张三", 1);
    work->showWorkerInfo();
    delete work;

    work = new Manager(2, "李四", 2);
    work->showWorkerInfo();
    delete work;

    work = new Boos(3, "王五", 3);
    work->showWorkerInfo();
    delete work;
}

int main() {
    WorkManager wm;
    char choose = '0';

    while (true) {
        wm.showMenu();
        cout << "请输入你的选择: " << endl;
        cin >> choose;
        switch (choose) {
            case '0':
                wm.exitSystem();
                break;
            case '1':
                wm.addWorkInfo();
                break;
            case '2':
                wm.showWorkInfo();
                break;
            case '3':
                wm.deleteFileWork();
                break;
            case '4':
                wm.updateWorkInfo();
                break;
            case '5':
                wm.findWorkInfo();
                break;
            case '6':
                wm.sortWorkInfo();
                break;
            case '7':
                wm.deleteAllWorkInfo();
                break;
            default:
                system("cls");
                break;
        }
    }


    system("pause");
    return 0;
}


              wm.addWorkInfo();
                break;
            case '2':
                wm.showWorkInfo();
                break;
            case '3':
                wm.deleteFileWork();
                break;
            case '4':
                wm.updateWorkInfo();
                break;
            case '5':
                wm.findWorkInfo();
                break;
            case '6':
                wm.sortWorkInfo();
                break;
            case '7':
                wm.deleteAllWorkInfo();
                break;
            default:
                system("cls");
                break;
        }
    }


    system("pause");
    return 0;
}
/**
  ******************************************************************************
  * @file           : workFunction.h
  * @author         : zhong
  * @brief          : None
  * @attention      : None
  * @date           : 2023/8/11
  ******************************************************************************
  */


#include "workManager.h"
#include "workClass.h"
#define FILEPATH "workManager/work.txt"

/*!
 * 添加用户
 */
void WorkManager::addWorkInfo() {
    cout << "请输入添加职工的数量: " << endl;
    int addMuch = 0;
    cin >> addMuch;
    if(addMuch > 0){
        // 添加 计算新空间的大小
        int newSize = this->m_EmpNum + addMuch;
        Work  **newSpace = new Work * [newSize];
        if (this->pWorkArray != NULL){
            for (int i = 0; i < this->m_EmpNum; ++i) {
                newSpace[i] = this->pWorkArray[i];
            }
        }
        // 批量添加新数据
        for (int i = 0; i < addMuch; ++i) {
            int id;         // 职工id
            string name;    // 职工姓名
            int dSelect;    // 职工部门
            cout << "请输入第" << i+1 << "个员工职工的ID: " << endl;
            cin >> id;
            cout << "请输入第" << i+1 << "职工姓名: " << endl;
            cin >> name;
            cout << "请选择岗位职位: " << endl;
            cout << "1、普通员工: " << endl;
            cout << "2、经理: " << endl;
            cout << "3、老板: " << endl;
            cin >> dSelect;

            Work *work = NULL;
            switch (dSelect) {
                case 1:
                    work = new Employee(id, name, 1);
                    break;
                case 2:
                    work = new Manager(id, name, 2);
                    break;
                case 3:
                    work = new Boos(id, name, 3);
                    break;
                default:
                    cout << "输入有误!" << endl;
                    break;
            }

            newSpace[this->m_EmpNum + i] = work;
        }
        // 释放原有堆的空间
        delete [] this->pWorkArray;

        // 更改新空间的指向
        this->pWorkArray = newSpace;

        // 更新员工人数
        this->m_EmpNum = newSize;

        // 更新职工不为空
        this->fileIsHave = false;

        // 保存员工信息
        WorkManager::saveFile();

        // 提示添加成功
        cout << "你已成功添加 " << addMuch << " 名职工!" << endl;
    }else{
        cout << "输入有误!" << endl;
    }

    // 按任意键清屏回到上级
    system("pause");
    system("cls");
}
/*!
 * 读取员工信息
 */
void WorkManager::showWorkInfo() {
    if(this->fileIsHave){
        cout << "文件没有数据!" << endl;
        return;
    }
    // 按照 ID 排序
    for (int i = 0; i < this->m_EmpNum; ++i) {
        for (int j = 0; j < i; ++j) {
            Work *work = NULL;
            // <" 升序 “>” 降序
            if (this->pWorkArray[i]->m_Id < this->pWorkArray[j]->m_Id){
                work = this->pWorkArray[i];
                this->pWorkArray[i] = this->pWorkArray[j];
                this->pWorkArray[j] = work;
            }
        }
    }
    // 输出排序后的内容
    for (int i = 0; i < this->m_EmpNum; ++i) {
        this->pWorkArray[i]->showWorkerInfo();
    }
    system("pause");
    system("cls");
}

/*!
 * 保存工信息
 */
void WorkManager::saveFile() {
    ofstream ofs;
    ofs.open(FILEPATH, ios::out);
    if(!ofs.is_open()){
        cout << "文件不存在或者文件为空!" << endl;
        return ;
    }
    for (int i = 0; i < this->m_EmpNum; ++i) {
        ofs << this->pWorkArray[i]->m_Id << " "
            << this->pWorkArray[i]->m_Name << " "
            << this->pWorkArray[i]->m_DeptId << endl;
    }
    ofs.close();
}
/*!
 * 获取文件里员工个数
 * @return 员工个数
 */
int WorkManager::getFileMenNum() {
    ifstream ifs;
    ifs.open(FILEPATH, ios::in);
    int id;
    string name;
    int dept;
    int count=0;
    while (ifs >> id && ifs >> name && ifs >> dept){
        count++;
    }
    ifs.close();
    return count;
}
/*!
 * 获取文件里的员工信息
 */
void WorkManager::getFileWork() {
    ifstream ifs;
    ifs.open(FILEPATH, ios::in);
    int id;
    string name;
    int dept;
    int count=0;
    while (ifs >> id && ifs >> name && ifs >> dept){
        Work *work = NULL;
        if (dept == 1){
            work = new Employee(id, name, dept);
        }else if (dept == 2){
            work = new Manager(id, name, dept);
        }else{
            work = new Boos(id, name, dept);
        }
        this->pWorkArray[count] = work;
        count++;
    }
    ifs.close();
}
/*!
 * 删除员工信息
 */
void WorkManager::deleteFileWork() {
    cout << "请选择删除方式: \n 1.按编号删除\n 2.按姓名删除" << endl;
    int choose;
    cin >> choose;
    bool status = true;    // 判断 ID 或者 姓名 是否存在
    if (choose == 1){
        cout << "请输入员工编号: " << endl;
        int id;
        cin >> id;
        for (int i = 0; i < this->m_EmpNum; i++) {
            if (id == this->pWorkArray[i]->m_Id){
                status = false;
            }
            if(!status){
                // 数据前移
                this->pWorkArray[i]=this->pWorkArray[i+1];
            }
        }
        if(status) {
            cout << "你输入的 ID 不存在!" << endl;
        }
    }else if (choose == 2){
        cout << "请输入员工姓名: " << endl;
        string name;
        cin >> name;

        for (int i = 0; i < this->m_EmpNum; ++i) {
            if (name == this->pWorkArray[i]->m_Name){
                status = false;
            }
            if(!status){
                // 数据前移
                this->pWorkArray[i]=this->pWorkArray[i+1];
            }
        }
        if(status) {
            cout << "你输入的姓名不存在!" << endl;
            system("cls");
            return;
        }
    }else{
        cout << "你的选择有误,请重新选择!" << endl;
        system("cls");
        return;
    }

    if (!status){
        this->pWorkArray[this->m_EmpNum-1] = NULL;
        this->m_EmpNum--;
        this->saveFile();
        cout << "删除成功!" << endl;
        system("pause");
        system("cls");
    }
}

/*!
 * 更改员工信息
 */
void WorkManager::updateWorkInfo() {

    if(this->fileIsHave) {
        cout << "文件不存在或者为空!" << endl;
        return;
    }

    int id;
    cout << "请输入需要修改信息的 ID: " << endl;
    cin >> id;

    for (int i = 0; i < this->m_EmpNum; ++i) {
        if(this->pWorkArray[i]->m_Id == id){
            cout << "请输入需要修改的内容: \n 1.姓名\n 2.职业" << endl;
            int choose;
            cin >> choose;
            switch (choose) {
                case 1: {
                    cout << "请输入修改后的姓名: " << endl;
                    string name;
                    cin >> name;
                    pWorkArray[i]->m_Name = name;
                    cout << "修改成功!" << endl;
                    system("pause");
                    system("cls");
                    break;
                }
                case 2: {
                    cout << "请输入修改后的部门 ID: " << endl;
                    cout << "1、普通员工: " << endl;
                    cout << "2、经理: " << endl;
                    cout << "3、老板: " << endl;
                    int dept;
                    cin >> dept;
                    pWorkArray[i]->m_DeptId = dept;
                    cout << "修改成功!" << endl;
                    system("pause");
                    system("cls");
                    break;
                }
                default: {
                    cout << "选择错误!" << endl;
                    return;
                }
            }
        }else{
            cout << "未找到相关 ID 的信息" << endl;
            return;
        }
    }
    this->saveFile();
}

/*!
 * 查找员工信息
 */
void WorkManager::findWorkInfo() {
    int id;
    cout << "请输入员工ID查询: " << endl;
    cin >> id;
    bool status = false;

    for (int i = 0; i < this->m_EmpNum; ++i) {
        if(this->pWorkArray[i]->m_Id == id){
            this->pWorkArray[i]->showWorkerInfo();
            status = true;
        }
    }
    if(!status){
        cout << "未查询到该 ID 信息" << endl;
        system("pause");
        system("cls");
    }

}

/*!
 * 按编号排序
 */
void WorkManager::sortWorkInfo() {
    for (int i = 0; i < this->m_EmpNum; ++i) {
        for (int j = 0; j < i; ++j) {
            Work * work = NULL;
            if(this->pWorkArray[i]->m_Id > this->pWorkArray[j]->m_Id){
                work = this->pWorkArray[i];
                this->pWorkArray[i] = this->pWorkArray[j];
                this->pWorkArray[j] = work;
            }
        }
    }
    this->saveFile();
}

/*!
 * 清空所有信息
 */
void WorkManager::deleteAllWorkInfo() {
    int enterDelete = 0;
    cout << "1.确认删除 \t其他任意键撤销"  << endl;
    cin >> enterDelete;
    if(enterDelete == 1){
        this->pWorkArray = NULL;
        this->m_EmpNum = 0;
        this->saveFile();
        cout << "清空所有信息成功!" << endl;
    }
}

感谢观看祝你生活愉快

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/868513.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用阿里云服务器搭建ThinkPHP框架全流程_新手入门

阿里云百科分享使用lay服务器搭建ThinkPHP全流程&#xff0c;ThinkPHP是一款免费、开源、快速、简单、面向对象的轻量级PHP开发框架&#xff0c;遵循Apache2开源协议发布&#xff0c;是为了敏捷Web应用开发和简化企业应用开发而诞生的。本篇教程介绍如何使用云市场镜像快速搭建…

学术论文GPT源码解读:从chatpaper、chatwithpaper到gpt_academic

前言 之前7月中旬&#xff0c;我曾在微博上说准备做“20个LLM大型项目的源码解读” 针对这个事&#xff0c;目前的最新情况是 已经做了的&#xff1a;LLaMA、Alpaca、ChatGLM-6B、deepspeedchat、transformer、langchain、langchain-chatglm知识库准备做的&#xff1a;chatpa…

b站如何调整视频播放倍速3倍

b站pc网页端目前最大倍速为2倍&#xff0c;可以手动调节倍速的一个办法 视频页面-按下f12-点击console-复制粘贴代码-按下enter回车键 下面是代码&#xff0c;3可以换成自己想要的倍速&#xff0c;最大可以16倍速 document. querySelector(video).playbackRate3

C++笔记之静态成员函数的使用场景

C笔记之静态成员函数的使用场景 C静态成员函数的核心特点是不与特定类实例相关&#xff0c;可通过类名直接调用&#xff0c;用于执行与类相关的操作而无需创建类对象。其主要用途是在类级别上共享功能&#xff0c;管理全局状态或提供工具函数。 code review! 文章目录 C笔记之…

移远RM500U-CN模块直连嵌入式ubuntu实现拨号上网

目录 1 平台&#xff1a; 2 需要准备的资料 3 参考文档 4 编译环境与驱动移植 4.1 内核驱动添加厂家ID和产品ID 4. 2.添加零包处理 4.3 增加复位恢复机制 4.4 增加批量输出 批量输出 URB 的数量和容量 的数量和容量 4.5 内核配置与编译 5 QM500U-CN拨号&#xff08;在开…

tensorflow / tensorflow-gpu cuda cudNN tensorRT 安装,启用显卡加速

tensorflow / tensorflow-gpu cuda cudNN tensorRT 安装,启用显卡加速 说明 Tensorflow-GPU 已被移除。请安装 tensorflow 。 tensorflow 通过 Nvidia CUDA 支持 GPU 加速操作。 自 2019 年 9月发布 的 TensorFlow2.1 以来&#xff0c;tensorFlow 和 tensorflow-GPU 一直是同…

NFT Insider#102:The Sandbox重新上线LAND桥接服务,YGG加入Base生态

引言&#xff1a;NFT Insider由NFT收藏组织WHALE Members(https://twitter.com/WHALEMembers)、BeepCrypto&#xff08;https://twitter.com/beep_crypto&#xff09;联合出品&#xff0c;浓缩每周NFT新闻&#xff0c;为大家带来关于NFT最全面、最新鲜、最有价值的讯息。每期周…

【JVM】类装载的执行过程

文章目录 类装载的执行过程1.加载2.验证3.准备4.解析5.初始化6.使用7.卸载 类装载的执行过程 类装载总共分为7个过程&#xff0c;分别是 加载&#xff0c;验证&#xff0c;准备、解析、初始化、使用、卸载 1.加载 将类的字节码文件加载到内存(元空间&#xff09;中。这一步会…

实时时钟+闹钟

在江科大实时时钟的基础上添加闹钟的配置&#xff0c;参考http://t.csdn.cn/YDlYy。 实现功能 &#xff1a;每隔time秒蜂鸣器响一次、设置闹钟的年月日时分秒&#xff0c;到时间蜂鸣器响。 前三个函数没有变&#xff0c;添加 void RTC_AlarmInit(void) 闹钟的中断配置void…

分享Python技术下AutojsPro7云控代码

引言 有图有真相&#xff0c;那短视频就更是真相了。下面是三大语言的短视频。 Java源码版云控示例&#xff1a; Java源码版云控示例在线视频 Net源码版云控示例&#xff1a; Net源码版云控示例在线视频亚丁号-知识付费平台 支付后可见 扫码付费可见 Python源码版云控示例…

STM32CubeMX之freeRTOS消息通知(有点全能)

任务通知是任务自带的程序&#xff0c;不需要单独去创建 一&#xff1a; 二&#xff1a; 进入前不清除数据&#xff0c;退出清除数据参数 0x0000000000 0xffffffff的意思 三&#xff1a; 这里就是发送过去&#xff0c;然后把其存到了num中 不要有太多疑问&#xff0c;并不是发…

【Linux】TCP协议简介

TCP协议简介 TCP协议格式面向连接1.连接管理机制2.包序管理 可靠传输1.保证数据可靠到达对端2.保证数据的传输效率 面向字节流&#xff34;&#xff23;&#xff30;粘包问题 TCP协议格式 16位源端口号和16位目的端口号&#xff1a;标识数据从哪个进程来&#xff0c;到哪个进程…

阿里云Windows服务器安装部署MySQL数据库流程

阿里云百科分享如何在Windows系统ECS实例上手动部署MySQL数据库。 目录 前提条件 操作步骤 前提条件 使用本教程进行操作前&#xff0c;请确保您已经注册了阿里云账号。如还未注册&#xff0c;请先完成账号注册。操作系统&#xff1a;Windows Server 2012准备一台ECS云服务…

JDK、JRE、JVM:揭秘Java的关键三者关系

文章目录 JDK&#xff1a;Java开发工具包JRE&#xff1a;Java运行环境JVM&#xff1a;Java虚拟机关系概述 案例示例&#xff1a;Hello World结语 在Java世界中&#xff0c;你可能经常听到JDK、JRE和JVM这几个概念&#xff0c;它们分别代表了Java开发工具包、Java运行环境和Java…

计算机丢失msvcr71.dll解决办法,总结三个常见的解决方法

修复msvcr71.dll文件的过程中&#xff0c;我对系统动态链接库文件的重要性有了更深入的了解。这个文件对于许多使用Visual C编译的软件来说是必不可少的&#xff0c;缺失或损坏可能导致软件无法正常运行。因此&#xff0c;当遇到类似问题时&#xff0c;及时解决并修复这个文件是…

页面文件太小,无法完成操作。

1、右键“我的电脑”&#xff0c;选择“属性”&#xff1b; 2、点击“高级系统设置”&#xff1b; 3、点击“高级”&#xff0c;再点击“设置”&#xff1b; 4、选择“高级”&#xff0c;选择“程序”&#xff0c;点击“更改”&#xff1b; 5、 不要勾选“自动管理所有驱动器…

Spring Boot+Mybatis实现增删改查接口开发+测试(超详细建议收藏)

前言 Java也是测试必知必会的内容&#xff0c;特别是现在类似spring boot 等Java框架更是成为主流。之前实现的图书增删改查是用Python实现的&#xff0c;没看过的请移步&#xff1a;Flaskmysql 实现增删改查接口开发测试&#xff08;图文教程附源码&#xff09;&#xff0c;本…

教你如何使用AES对接口参数进行加密

教你如何使用AES对接口参数进行加密 前言 我们作为程序猿&#xff0c;在浏览网站的时候偶尔也会打开控制台看看请求的接口&#xff0c;我们会发现有些接口的传输是 “乱码” &#xff0c;那么这个乱码究竟是什么呢&#xff1f;为什么要这么做&#xff1f; 其实这个所谓的 “…

无涯教程-Perl - qq函数

描述 可以使用此函数代替双引号。这实际上不是一个函数,更像是一个运算符,但是如果您在其他程序员的程序中看到它却不记得它是什么,那么可能会在这里看。实际上,您可以使用任何一组定界符,而不仅仅是括号。 语法 以下是此函数的简单语法- qq ( string )返回值 该函数返回双…

De Bruijin序列与魔术(三)——De Bruijin序列的拓展思考

早点关注我&#xff0c;精彩不错过&#xff01; 在前面的文章中&#xff0c;我们已经介绍完经典DeBruijin序列的原理和魔术&#xff0c;相关内容请戳&#xff1a; De Bruijin序列与魔术&#xff08;二&#xff09;——魔术《De Bruijin序列》 De Bruijin序列与魔术&#xff08;…