C++基础强化项目-职工管理系统

news2024/12/23 8:31:01

通过本项目练习c++的基础知识

    • 项目界面
    • 头文件
      • workermanager.h(管理类)
      • worker.h(职工抽象类)
      • manager.h(经理类)
      • employee.h(普通职工类)
      • boss.h(老板类)
    • 源文件
      • employee.cpp
      • boss.cpp
      • manager.cpp
      • workermanager.cpp
      • main.cpp

项目界面

在这里插入图片描述
通过界面能了解本项目的基础功能

头文件

workermanager.h(管理类)

//管理类
#pragma once
#include <iostream>
#include "worker.h"
#include "employee.h"
#include "manager.h"
#include "boss.h"
#include <fstream> //文件操作头文件
#define FILENAME "empFile.txt"


class WorkerManager
{
public:
    static int MyFlag;
    int m_EmpNum; //记录职工人数
    Worker ** m_EmpArray;//职工数组指针
    bool IsFile_Empty;//判断文件是否为空
    
    WorkerManager();
    ~WorkerManager();
    
    void ShowMenu();//显示界面
    void exitSystem();//退出系统
    void Add_Emp();//增加职工
    void Save_File();//存储文件
    int Get_EmpNum();//统计人数
    void Init_Emp(); //初始化员工操作
    void Show_Emp(); //显示职工
    int IsExist(int id);//想要删除职工得先判断职工是否存在
    void Del_Emp();  //删除职工
    void Mod_Emp(); //修改职工
    void Find_Emp();//查找函数
    void Sort_Emp();//排序职工(按照编号)
    void Clean_File(); //清空文件
};

worker.h(职工抽象类)

//抽象类
#pragma once
#include <iostream>
#include <string>

using namespace std;
class Worker
{
public:
    int m_id;
    string m_name;
    int m_deptid;
    virtual void showInfo()=0;
    virtual string getDeptName()=0;
};

manager.h(经理类)

//经理类
#pragma once
#include "worker.h"
#include <iostream>
#include <string>

class Manager:public Worker
{
private:
public:
    Manager(int id,string name,int tid);
    ~Manager();
    virtual void showInfo();
    virtual string getDeptName();
};

employee.h(普通职工类)

//普通职工
#pragma once
#include "worker.h"
#include <iostream>
#include <string>
using namespace std;

class Employee:public Worker
{
public:
    Employee(int id,string name,int did);
    virtual void showInfo();//获取个人信息
    virtual string getDeptName();//获取岗位名称

};

boss.h(老板类)

//普通职工
#pragma once
#include "worker.h"
#include <iostream>
#include <string>
using namespace std;

class Boss:public Worker
{
public:
    Boss(int id,string name,int tid);
    virtual void showInfo();//获取个人信息
    virtual string getDeptName();//获取岗位名称
};

源文件

employee.cpp

#include "employee.h"

Employee::Employee(int id,string name,int tid){
    this->m_id=id;
    this->m_name=name;
    this->m_deptid=tid;

}
void Employee::showInfo(){
    cout<<"编号"<<this->m_id
        <<"\t姓名:"<<this->m_name
        <<"\t岗位:"<<this->getDeptName()
        <<"\t职责:打工仔"<<endl;
}
string Employee::getDeptName(){
    string temp="普通员工";
    return temp;
}

boss.cpp

#include "boss.h"

Boss::Boss(int id,string name,int tid){
    this->m_id=id;
    this->m_name=name;
    this->m_deptid=tid;
}
void Boss::showInfo(){
    cout<<"编号"<<this->m_id
        <<"\t姓名:"<<this->m_name
        <<"\t岗位:"<<this->getDeptName()
        <<"\t职责:当老板"<<endl;
}
string Boss::getDeptName(){
    string temp="老板";
    return temp;
}

manager.cpp

#include "manager.h"

Manager::Manager(int id,string name,int tid)
{
    this->m_id=id;
    this->m_name=name;
    this->m_deptid=tid;
}

Manager::~Manager()
{

}

void Manager::showInfo()
{    
    cout<<"编号"<<this->m_id
        <<"\t姓名:"<<this->m_name
        <<"\t岗位:"<<this->getDeptName()
        <<"\t职责:管理普通员工"<<endl;

}
string Manager::getDeptName()
{
    string temp="经理";
    return temp;
}

workermanager.cpp

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

using namespace std;
WorkerManager::WorkerManager()
{
    //分情况讨论初始化
    ifstream ifs;
    ifs.open(FILENAME,ios::in);//读文件
    //>>1.文件不存在
    if(!ifs.is_open())
    {
        //cout<<"文件不存在"<<endl;
        this->m_EmpNum=0; //初始化人数为0
        this->m_EmpArray=NULL;//数组为空
        this->IsFile_Empty= true;
        ifs.close();
        return;
    }
    //>>2.文件空
    char ch;
    ifs>>ch;//读1个字符
    if(ifs.eof())
    {
        //cout<<"文件空"<<endl;
            this->m_EmpNum=0; //初始化人数为0
        this->m_EmpArray=NULL;//数组为空
        this->IsFile_Empty= true;
        ifs.close();
        return;
    }

    //>>3.文件存在
    this->IsFile_Empty=false;
    int num=this->Get_EmpNum();
    //cout<<"职工人数为"<<num<<"人"<<endl;
        this->m_EmpNum=num;
    //开辟空间
    this->m_EmpArray=new Worker*[this->m_EmpNum];
    // 存放到空间
    this->Init_Emp();

    /******************下面是测试代码****************************/
    //    for (int var = 0; var < this->m_EmpNum; ++var) {
    //        cout<<this->m_EmpArray[var]->m_name<<endl;
    //    }
}

WorkerManager::~WorkerManager()
{
    if(this->m_EmpArray!=NULL)
    {
        for(int i=0;i<this->m_EmpNum;i++)
        {
            if(this->m_EmpArray[i] != NULL)
            {
                delete this->m_EmpArray[i];
            }
        }
        delete [] this->m_EmpArray;
        this->m_EmpArray=NULL;
    }
}
//清空文件
void WorkerManager::Clean_File()
{
    cout<<"确定清空?"<<endl;
    cout<<"1.确定"<<endl;
    cout<<"2.不确定"<<endl;
        int select =0;
    cin>>select;
        if(select == 1)
    {
        ofstream ofs(FILENAME,ios::trunc);//删除并重新创建
        ofs.close();
        if(this->m_EmpArray!=NULL)
        {
            //删除职工对象
            for(int i=0;i<m_EmpNum;i++)
            {
                delete this->m_EmpArray[i];
                this->m_EmpArray[i]=NULL;
            }
            delete [] this->m_EmpArray;
            this->m_EmpArray=NULL;
            this->m_EmpNum=0;
            this->IsFile_Empty=true;
        }
        cout<<"清空成功"<<endl;
    }
    system("pause");
    system("cls");
}

//排序职工,选用的方法是选择排序
void WorkerManager::Sort_Emp()
{
    if(this->IsFile_Empty)
    {
        cout<<"文件是不存在的,或者记录为空"<<endl;
        system("pause");
        system("cls");

    }else
    {
        cout<<"请选择排序的方式:"<<endl;
        cout<<"1:职工号升序"<<endl;
        cout<<"2:职工号降序"<<endl;
        int select =0;
        cin>>select;
        //开始实现排序功能
        for(int i=0;i<m_EmpNum;i++)
        {
            int MinOrMax=i;//声明最小值或者最大值
            for(int j=i+1;j<this->m_EmpNum;j++)
            {
                if(select == 1)
                {
                    if(this->m_EmpArray[MinOrMax]->m_id > this->m_EmpArray[j]->m_id)
                    {
                        MinOrMax=j;
                    }
                }else { //降序
                    if(this->m_EmpArray[MinOrMax]->m_id < this->m_EmpArray[j]->m_id)
                    {
                        MinOrMax=j;
                    }

                }

            }
            if(i!=MinOrMax)
            {
               //交换元素值
                Worker*temp=this->m_EmpArray[i];
                this->m_EmpArray[i]=this->m_EmpArray[MinOrMax];
                this->m_EmpArray[MinOrMax]=temp;
            }

        }
        cout<<"排序成功!其结果为:"<<endl;
        this->Save_File();//存储结果
        this->Show_Emp();
    }
}

//查找员工函数
void WorkerManager::Find_Emp()
{
    int val=0;
    if(this->IsFile_Empty)
    {
        cout<<"文件不存在或记录为空!"<<endl;
    }else
    {
        bool flage = false;//通过姓名查找的标志位
        //用来判断员工是否存在
        cout<<"请输入查找方式:"<<endl;
        //提供两种查找方式
        cout<<"1.按照职工编号查找"<<endl;
        cout<<"2.按照职工姓名查找"<<endl;
        cin>>val;
        if(val == 1)
        {
            int id=0;
            cout<<"请输入职工编号"<<endl;
            cin>>id;
            int ret=IsExist(id);
            if(ret!= -1)
            {
                cout<<"通过编号查找到了员工"<<endl;
                this->m_EmpArray[ret]->showInfo();//忘了this,使用多态打印信息
                flage =true;
            }
        }else if(val == 2)
        {
            //按照姓名查询
            string name;
            cout<<"请输入要查找的姓名"<<endl;
            cin>>name;
            for(int i=0; i<m_EmpNum;i++ )//遍历查找员工是否存在
            {
                if(this->m_EmpArray[i]->m_name==name)
                {
                    cout<<"通过姓名查找到了员工"<<endl;
                    this->m_EmpArray[i]->showInfo();
                     flage =true;
                }
            }
        }else
        {
            cout<<"输入选项有误"<<endl;
        }
        if(flage == false)
        {
            cout<<"未查找到对应的员工"<<endl;
        }
    }
    system("pause");
    system("cls");
}

//修改职工
void WorkerManager::Mod_Emp()
{
    if(this->IsFile_Empty)
    {
        cout<<"文件不存在"<<endl;
    }else {
        cout<<"请输入修改职工编号"<<endl;
        int id;
        cin >>id;
        int ret=this->IsExist(id);
        if(ret!=-1)
        {
            //找到职工
            //将职工从数组中删掉
            delete this->m_EmpArray[ret];
            int newid=0;
            string newname="";
            int deselect=0;//新部门编号
            cout<<"查找到:"<<id<<"号职工"<<endl;
            while (1) {
                cout<<"请输入新职工号:"<<endl;
                cin>>newid;
                if(this->IsExist(newid)!=-1)
                {
                    cout<<"职工编号已存在,请重新输入"<<endl;
                }else{
                    break;
                }
            }
            cout<<"请输入新姓名"<<endl;
            cin>>newname;
            cout<<"请输入岗位"<<endl;
            cout<<"1.普通职工"<<endl;
            cout<<"2.经理"<<endl;
                        cout<<"3.老板"<<endl;
                        cin>>deselect;//输入岗位
            Worker *worker=NULL;
            switch (deselect) {
            case 1:
                worker=new Employee(newid,newname,deselect);
                break;
            case 2:
                worker=new Manager(newid,newname,deselect);
                break;
            case 3:
                worker=new Boss(newid,newname,deselect);
                break;
            default:
                break;
            }
            //更新数组
            this->m_EmpArray[ret]=worker;
            cout<<"修改成功"<<endl;
            //保存到文件中
            this->Save_File();
        }else
        {
            cout<<"修改失败,查无此人"<<endl;
        }
    }
    //按任意键清屏
    system("pause");
    system("cls");
}



//删除员工
void WorkerManager::Del_Emp()
{
    if(this->IsFile_Empty)
    {
        cout<<"公司还没招聘员工,删除失败"<<endl;
    }else {
        cout<<"输入要删除的职工编号"<<endl;
        int id=0;
        cin>>id;
        int index=this->IsExist(id);
        if(index == -1)
        {
            cout<<"未查询到员工,请确认员工编号"<<endl;
        }else {
            for (int var = index; var < this->m_EmpNum-1; ++var) {
                this->m_EmpArray[var]=this->m_EmpArray[var+1];
            }
            this->m_EmpNum--;
            //同步到文件中
            this->Save_File();
            cout<<"删除成功"<<endl;
        }

    }
    system("pause");
    system("cls");
}


//判断职工是否存在
int WorkerManager::IsExist(int id)
{
    int index =-1;
    for (int var = 0; var < this->m_EmpNum; ++var) {
        if(this->m_EmpArray[var]->m_id==id)
        {
            index = var; //返回其所在数组中位置
            break;
        }
    }
    return index;
}

//显示职工
void WorkerManager::Show_Emp()
{
    //判断人数
    if(this->IsFile_Empty)
    {
        cout<<"无员工"<<endl;
    }else
    {   //使用多态完成显示职工功能
        for (int var = 0; var < m_EmpNum; ++var) {
            this->m_EmpArray[var]->showInfo();
        }
    }
    //按下任意键清屏
    system("pause");
    system("cls");
}
//初始化员工
void WorkerManager::Init_Emp()
{
    ifstream ifs;
    ifs.open(FILENAME,ios::in);
    int id; //员工id
    string name; //员工姓名
    int Did;//部门编号

    int index =0; //标号
    while(ifs>>id &&ifs>>name&&ifs>>Did)
    {
        Worker *worker=NULL;
        if(Did == 1) //普通员工
        {
            worker=new Employee(id,name,Did);
        }
        else if(Did == 2)
        {
            worker=new Manager(id,name,Did);
        }else
        {
            worker=new Boss(id,name,Did);
        }
        //维护数组
        this->m_EmpArray[index] =worker;
        index++;
    }
    ifs.close(); //关闭文件
}
//获取员工人数
int WorkerManager::Get_EmpNum()
{
    int id; //员工id
    string name; //员工姓名
    int Did;//部门编号
    int num=0;
    ifstream ifs;
    ifs.open(FILENAME,ios::in); //打开文件 读
    while(ifs>>id &&ifs>>name&&ifs>>Did) //当三个全部成功后,让num++
    {
        num++;
    }
    return num;


}

//写文件函数
void WorkerManager::Save_File()
{
    ofstream ofs;//想要使用写文件得使用ofstream对文件进行写操作
    ofs.open(FILENAME,ios::out);//ios::下的输出方式打开 -- 写文件
    for(int i=0;i<this->m_EmpNum;i++) //m_EmpNum职工人数
    {
        ofs<<this->m_EmpArray[i]->m_id<<" "
            <<this->m_EmpArray[i]->m_name<<" "
            <<this->m_EmpArray[i]->m_deptid<<endl;//部门编号写入
    }
    ofs.close();
}
int WorkerManager::MyFlag=0;
//添加职工
void WorkerManager::Add_Emp()
{
    int addNum=0;
    cout<<"输入添加职工数:"<<endl;
    cin>>addNum;
    if (addNum>0)
    {
        //新空间大小是原本空间大小加上增加空间大小
        int newSize=this->m_EmpNum+addNum;
        //开辟新空间,存储人数
        Worker ** newSpace=new Worker*[newSize];//使用二级指针写
        //拷贝原空间到新空间
        if(this->m_EmpArray!=NULL)//说明里面有数据
        {
            for (int i = 0; i < this->m_EmpNum; i++)
            {
                newSpace[i]=this->m_EmpArray[i];
            }
        } //这里出现问题
        for (int i = 0; i < addNum; i++)
        {

            int id;//   职工编号
            string name;//  职工姓名
            int tid;
            while (1) {
               cout<<"请输入第"<<i+1<<"位员工编号"<<endl;
               cin>>id;
               //有点问题
               if( ((id == WorkerManager::MyFlag)||this->IsExist(id)+1 == id))
               {
                    cout<<"员工编号已经存在"<<endl;
               }else{
                     WorkerManager::MyFlag=id;
                    break;
               }
            }
            cout<<"请输入第"<<i+1<<"位员工姓名"<<endl;
            cin>>name;
            cout<<"请输入职工岗位:"<<endl;
            cout<<"1.普通员工"<<endl;
            cout<<"2.经理"<<endl;
            cout<<"3.老板"<<endl;
            cin>>tid;
            Worker*temp=NULL;
            switch (tid)
            {
            case 1:
                temp=new Employee(id,name,1);
                break;
            case 2:
                temp=new Manager(id,name,2);
                break;
            case 3:
                temp=new Boss(id,name,3);
                break;
            default:
                cout<<"error"<<endl;
            }
            //将员工保存到数组中
            newSpace[this->m_EmpNum+i]=temp;
        }
        //释放原有空间,并更新新空间指向
        delete [] this->m_EmpArray;//释放数组加[]
        this->m_EmpArray=newSpace;
        //更新职工人数
        this->m_EmpNum=newSize;
        cout<<"添加成功"<<addNum<<"名员工"<<endl;
        this->IsFile_Empty=false;//修改判空标志位
        //保存添加的员工
        this->Save_File();
    }else
    {
        cout<<"输入错误"<<endl;
    }
    system("pause");
    system("cls");
    
}
//退出系统
void WorkerManager::exitSystem()
{
    cout<<"已退出系统"<<endl;
    system("pause");
    exit(0);
}
//显示菜单
void WorkerManager::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;
    cout<<"请输入功能"<<endl;
}

main.cpp

#include <iostream>
#include "workermanager.h"
using namespace std;
#include "worker.h"
#include "employee.h"
#include "manager.h"
#include "boss.h"

int main()
{
    // //测试代码
    // Worker *test=NULL;
    // test=new Employee(1,"张三",1);
    // test->showInfo();
    // delete test;
    // test = new Manager(2,"李四",3);
    // test->showInfo();
    // delete test;
    // test = new Boss(3,"王五",4);
    // test->showInfo();
#if 1  
    WorkerManager wm;
    int chose;
    while (1)
    {
        wm.ShowMenu();
        cin>>chose;
        switch (chose)
        {
            case 0: //退出
            wm.exitSystem();
            break;  
            case 1: //增加职工
            wm.Add_Emp();
            break;
            case 2:
            wm.Show_Emp();//显示员工
            break;
            case 3:
            wm.Del_Emp();//删除职工
            break;
            case 4:
            wm.Mod_Emp();//修改职工
            break;
            case 5:
            wm.Find_Emp();//查找职工
            break;
            case 6:
            wm.Sort_Emp();//排序职工
            break;
            case 7:
            wm.Clean_File();//清空文件
            break;
            default:
            system("clr");
            break;
        }
        
    }
#endif
    system("pause");
    return 0;
}

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

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

相关文章

多传感器时频信号处理:多通道非平稳数据的分析工具(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

新浪微博“私信留言收费”:私域引流危险了

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 从今日起很多新浪微博用户发现&#xff1a;微博用私信要收费了&#xff0c;确切的说是对方没有回关或回复你之前&#xff0c;你只能发送一条消息。开通会员后能发送更多留言。如下图所示&#xff1…

卷积计算加速方法--slice卷积

文章目录 1、前言2、分块卷积存在的问题3、分块卷积问题的解决方案--slice卷积4、slice卷积每层所需切分尺寸计算4、结论及加速效果 1、前言 我们在上一篇卷积计算加速方法中讨论过&#xff0c;当卷积的输入太大导致内存不够用时&#xff0c;考虑将一大块卷积分成多个小块分别进…

多快好省!硫元素循环分析内容又升级啦!

元素循环是生物地球化学循环的重要环节&#xff0c;主要涉及碳、氮、磷、硫等元素的循环过程。凌恩生物强势推出基于宏基因组的硫循环研究方案&#xff0c;构建了完整的硫循环循环模式图&#xff0c;对宏基因组数据进行深入挖掘&#xff0c;各部分结果图可直接用于文章发表&…

iOS 开发 | 自定义不规则 label

把我之前发布在简书的博客搬运过来。 目录 场景思路具体实现1. 自定义一个继承自UILabel的IrregularLabel2. 在初始化方法中进行相应初始化和设置3. 在layoutSubviews方法中进行路径的设置 最终效果箭头 label 场景 最近 App 改版&#xff0c;以下是截取的部分 UI 设计图&…

报表测试如何做?软件测试实战,超详细测试点分析(全覆盖)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 报表测试是一项重…

qt学习 tcp实现 c++

这里写目录标题 qt网络编程qt下的TCP 编程设计ui界面监听关闭和发送调试 查找网络调试助手&#xff0c;用助手当客户端测试 编写的服务端newConnection()newConnection_Slot() Tcp Client界面设计代码部分1关闭客户端发送客户端整体疑惑 https://www.bilibili.com/video/BV1tp4…

Android CMake

首先了解几个名词 NDK The Android Native Development Kit The Android NDK is a toolset that lets you implement parts of your app in native code, using languages such as C and C. For certain types of apps, this can help you reuse code libraries written in t…

虚实相生的元宇宙,不仅仅是在做虚拟社交?

互联网迭代速度已经超出了人们的想象&#xff0c;从Web1.0到Web 2.0&#xff0c;以及紧随其后的 Web 3.0。 不管我们愿不愿意承认&#xff0c;元宇宙的时代已经真真切切地到来了&#xff0c;它的兴起也是社会发展到一定阶段的必然现象。随着时代的发展&#xff0c;如今创作者的…

OpenWrt uci网络配置详解

配置文件 OpenWrt所有配置保存在/etc/config目录&#xff0c;以下为主要的网络配置文件 网络接口配置 /etc/config/network网络服务配置 /etc/config/dhcp防火墙配置 /etc/config/firewall 网络接口 OpenWrt网络接口一般包含lan口和wan口&#xff0c;但如果是X86等设备&…

十五.EtherCAT开发之对象字典的映射原理

十五.EtherCAT开发之对象字典的映射原理 15.1 协议栈文件含义 仔细阅读四个代码文件 l 文件el9800appl.c&#xff1a;主函数&#xff0c;数据收发函数所在 l 文件el9800appl.h&#xff1a;对象字典定义所在&#xff0c;包含对象字典的类型、权限、长度、映射关系、链接变量…

Restful风格笔记

Restful风格知识点 RestController注解 在类上添加RestController可以默认类中的所有方法都带有ResponseBody注解&#xff0c;可以省去一个个添加的麻烦。 RestController RequestMapping("/restful") //CrossOrigin(origins {"http://localhost:8080"…

第六节 元组、字典

文章目录 掌握知识点1. 元组1.1 元组概述1.2 语法格式1.3 元组场景使用 2. 字典2.1 概述2.2 字典的语法结构与注意2.3 字典CURD2.3.1 字典获取2.3.2 字典添加和修改2.3.3 字典删除2.3.4 字典遍历 2.4 enumerate 函数2.5 扩展练习2.5.1 判断是否能全部购买2.5.2 学生信息的排序2…

图像中的脸部、四肢问题及其解决方法

在SD绘图的时候经常会出现多个头部、多个身体部位或者多个手指的问题这里介绍一些通用的简单的解决办法。 文章目录 多个人物或者部位没有全身出境使用纵向尺寸脸部乱码和眼睛问题人物手指乱问题 多个人物或者部位 绘图基本信息 正面词 <lora:DynastyWarriors_wu_cloth:1…

若依框架学习

1.若依&#xff08;前后端分离版&#xff09; 1.1什么是若依 开源项目&#xff0c;学习开源项目的目的&#xff1a; 1.用别人的&#xff0c;减少自己的工作量 2.学习他的底层编程思想&#xff0c;设计思路&#xff0c;提高自己的编程能力 官网&#xff1a;www.ruoyi.vip …

“AI+RPA+数据+机器人”:深入解析“数字员工”的内涵和价值

世界正进入数字经济快速发展的时期。 2021年12月&#xff0c;中央网络安全和信息化委员会印发《“十四五”国家信息化规划》&#xff0c;提出加快建设数字中国&#xff0c;大力发展数字经济的总体目标&#xff1b;2022年1月&#xff0c;央行印发《金融科技发展规划&#xff08…

第十章 番外篇:DDP

参考教程&#xff1a; what is DDP pytorch distributed overview 文章目录 DDP介绍什么是DDPDistributedSampler()DistributedDataParallel() 使用DDP代码示例multiprocessing.spawn()save and load checkpoints DDP介绍 什么是DDP DDP的全称是DistributedDataParallel&…

Qt控件学习

目录 QPushButton QToolButton QRadioButton QCheckBox QPushButton MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);ui->n1->setText("我的世界");ui->n1->setIcon(QIcon(":/111…

异构广告混排在美团到店业务的探索与实践

转子&#xff1a;https://tech.meituan.com/2022/03/10/exploration-and-practice-of-heterogeneous-ad-mixed-ranking-in-meituan-ads.html 1 背景与简介 1.1 背景 美团到店广告负责美团搜索流量的商业变现&#xff0c;服务于到店餐饮、休娱亲子、丽人医美、酒店旅游等众多…

文言一心,ChatGLM-6B和ChatGPT等模型概述

原文首发于博客文章大语言模型概况 定义 &#xff08;个人理解的&#xff09;大语言模型&#xff08;Large Language Model&#xff09;是一种基于深度学习技术的自然语言处理通用模型&#xff0c;它可以通过学习大规模文本数据的模式和规律&#xff0c;从而实现对自然语言的理…