C++职工管理系统(类继承、文件、指针操作、中文乱码解决)

news2024/10/7 10:19:45

 文件目录及界面

 

 CMakeLists.txt避免中文乱码配置

# C的解决办法
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -fexec-charset=GBK")
# C++ 的解决办法
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fexec-charset=GBK")

一、退出管理程序

退出当前管理系统;

二、增加职工信息

实现批量添加职工功能,将信息录入到文件中,职工信息为:职工编号、姓名、部门编号。

三、显示职工信息

显示公司内部所有职工的信息;

 四、删除离职职工

按照编号删除指定的职工;

 五、修改职工信息

按照编号修改职工个人信息;

 六、查找职工信息

按照职工的编号或者职工的姓名进行查找相关的人员信息

七、按照编号排序

按照职工编号,进行排序,排序规则由用户指定;

  八、清空所有文档

清空文件中记录的所有职工信息(清空前需要再次确认,防止勿删)

 

九、代码

main.cpp

#include <iostream>
#include "workerManager.h"
#include "worker.h"
#include "employee.h"
#include "manager.h"
#include "boss.h"

using namespace std;

void test() {
    Worker *worker = NULL;
    worker = new Employee(1, "zhangsan", 1);
    worker->ShowInfo();
    delete worker;

    worker = new Manager(2, "lisi", 2);
    worker->ShowInfo();
    delete worker;

    worker = new Boss(3, "wangwu", 2);
    worker->ShowInfo();
    delete worker;
};

int main() {
//    test();
//    实例化管理者对象
    WorkerManager wm;

    int choice;
    while (true) {
        //    调用展示菜单成员函数
        wm.Show_Menu();
        cout << "请输入您的选择:" << endl;
        cin >> choice;
        switch (choice) {
            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.ModEmp();
                break;
            case 5://查找职工
                wm.Find_Emp();
                break;
            case 6://排序职工
                wm.Sort_Emp();
                break;
            case 7://清空文件
                wm.Clean_File();
                break;
            default:
                system("cls");
                break;

        }
    }
    system("pause");
    return 0;
}

 workerManager.h

#pragma once //防止头文件重复包含

#include <iostream>
#include "worker.h"
#include <fstream>

#define FILENAME "empFile.txt"
using namespace std;

class WorkerManager {
public:
    //构造函数
    WorkerManager();

    //展示菜单
    void Show_Menu();

    //添加职工
    void Add_Emp();

    //保存文件
    void save();

    //删除职工
    void Del_Emp();

    //修改职工
    void ModEmp();

    //查找职工
    void Find_Emp();

    //排序职工
    void Sort_Emp();

    //清空文件
    void Clean_File();

    //按照职工编号判断职工是否存在,若存在返回职工在数组中位置,不存在返回-1
    int IsExist(int id);

    //退出程序
    void ExitSystem();

    //析构函数
    ~WorkerManager();

    //初始化员工
    void init_Emp();

    //显示职工
    void Show_Emp();

    //标志文件是否为控
    bool m_FileIsEmpty;

    //统计人数
    int get_EmpNum();

    //记录文件中人数个数
    int m_EmpNum;
    //员工数组的指针
    Worker **m_EmpArray;
};

workerManager.cpp

#include "workerManager.h"
#include "employee.h"
#include "manager.h"
#include "boss.h"


WorkerManager::WorkerManager() {
    ifstream ifs;
    ifs.open(FILENAME, ios::in);
    //1、文件不存在
    if (!ifs.is_open()) {
//        cout << "文件不存在" << endl;
        //    初始化人数
        this->m_EmpNum = 0;
        //初始化数组指针
        this->m_EmpArray = NULL;
        //初始化文件空标志
        this->m_FileIsEmpty = true;
        ifs.close();
        return;
    }
    //2、文件存在,并且没有记录
    char ch;
    ifs >> ch;
    if (ifs.eof()) {
//        cout << "文件为空!" << endl;
        //    初始化人数
        this->m_EmpNum = 0;
        //初始化数组指针
        this->m_EmpArray = NULL;
        //初始化文件空标志
        this->m_FileIsEmpty = true;
        ifs.close();
        return;
    }
    //3、文件存在,并且记录数据
    int num = this->get_EmpNum();
//    cout << "职工人数为:" << num << endl;
    this->m_EmpNum = num;
    //开辟空间
    this->m_EmpArray = new Worker *[this->m_EmpNum];
    //读取数据
    this->init_Emp();
    this->m_FileIsEmpty = false;
//    for (int i = 0; i < this->m_EmpNum; ++i) {
//        cout << this->m_EmpArray[i]->m_Name << endl;
//    }
}

//删除职工
void WorkerManager::Del_Emp() {
    if (this->m_FileIsEmpty) {
        cout << "文件不存在或记录为空!" << endl;
    } else {
        //按照职工编号删除
        cout << "请输入想要删除职工编号:" << endl;
        int id = 0;
        cin >> id;
        int index = this->IsExist(id);
        if (index == -1) {
            cout << "删除失败,未找到职工:" << endl;
        } else {
            for (int i = index; i < this->m_EmpNum - 1; ++i) {
                //数据前移
                this->m_EmpArray[i] = this->m_EmpArray[i + 1];
            }
            //更新数组中记录人员个数
            this->m_EmpNum--;
            //数据同步更新到文件中
            this->save();
            cout << "删除成功!" << endl;
        }
    }
    system("pause");
    system("cls");
};

//修改职工
void WorkerManager::ModEmp() {
    if (this->m_FileIsEmpty) {
        cout << "文件不存在或记录为空!" << endl;
    } else {
        //按照职工编号删除
        cout << "请输入想要修改职工编号:" << endl;
        int id = 0;
        cin >> id;
        int index = this->IsExist(id);
        if (index == -1) {
            cout << "修改失败,未找到职工:" << endl;
        } else {
            //查找到编号的职工
            delete this->m_EmpArray[index];

            int newId = 0;
            string newName = "";
            int dSelect = 0;

            cout << "查到:" << id << "号职工,请输入新职工号:" << endl;
            cin >> newId;
            cout << "请输入姓名:" << endl;
            cin >> newName;
            cout << "请选择该职工的岗位:" << endl;
            cout << "1、普通职工" << endl;
            cout << "2、经理" << endl;
            cout << "3、老板" << endl;
            cin >> dSelect;

            Worker *worker = NULL;
            switch (dSelect) {
                case 1://普通员工
                    worker = new Employee(newId, newName, 1);
                    break;
                case 2://普通员工
                    worker = new Manager(newId, newName, 2);
                    break;
                case 3://普通员工
                    worker = new Boss(newId, newName, 3);
                    break;
                default:
                    break;
            }
            //更改数据到数组中
            this->m_EmpArray[index] = worker;
            cout << "修改成功" << this->m_EmpArray[index]->m_DeptId << endl;
            this->save();
        }
    }
    system("pause");
    system("cls");

};

//查找职工
void WorkerManager::Find_Emp() {
    if (this->m_FileIsEmpty) {
        cout << "文件不存在或记录为空!" << endl;
        return;
    }
    cout << "请输入查找的方式:" << endl;
    cout << "1、按照职工编号查找" << endl;
    cout << "2、按姓名查找" << endl;
    int findType = 0;
    cin >> findType;
    if (findType == 1) {
        cout << "请输入查找编号:" << endl;
        int id = 0;
        cin >> id;
        int index = this->IsExist(id);
        if (index != -1) {
            this->m_EmpArray[index]->ShowInfo();
        } else {
            cout << "查无此人" << endl;
        }
    } else if (findType == 2) {
        bool flag = false;
        string name;
        cout << "请输入姓名:" << endl;
        cin >> name;
        for (int i = 0; i < this->m_EmpNum; ++i) {
            if (this->m_EmpArray[i]->m_Name == name) {
                this->m_EmpArray[i]->ShowInfo();
                flag = true;
            }
        }
        if (!flag) {
            cout << "查无此人" << endl;
        }
    } else {
        cout << "输入有误" << endl;
    }
    system("pause");
    system("cls");
};

//排序职工
void WorkerManager::Sort_Emp() {
    if (this->m_FileIsEmpty) {
        cout << "文件不存在或记录为空" << endl;
    } 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 < m_EmpNum; ++j) {

                if (select == 1) { //升序
                    if (m_EmpArray[minOrMax]->m_Id > m_EmpArray[j]->m_Id) {
                        minOrMax = j;
                    }
                } else { //降序
                    if (m_EmpArray[minOrMax]->m_Id < m_EmpArray[j]->m_Id) {
                        minOrMax = j;
                    }
                }
            }
            if (minOrMax != i) {
                //交换对象
                Worker *tem = m_EmpArray[i];
                m_EmpArray[i] = m_EmpArray[minOrMax];
                m_EmpArray[minOrMax] = tem;
            }
        }
        cout << "排序成功,排序后的接口为:" << endl;
        this->save();
        this->Show_Emp();
    }
    system("pause");
    system("cls");
};

//按照职工编号判断职工是否存在,若存在返回职工在数组中位置,不存在返回-1
int WorkerManager::IsExist(int id) {
    for (int i = 0; i < this->m_EmpNum; ++i) {
        if (this->m_EmpArray[i]->m_Id == id) {
            return i;
        }
    }
    return -1;
};

//显示职工
void WorkerManager::Show_Emp() {
    if (this->m_FileIsEmpty) {
        cout << "文件不存在或记录为空!" << endl;
    } else {
        for (int i = 0; i < this->m_EmpNum; ++i) {
            this->m_EmpArray[i]->ShowInfo();
        }
    }
    system("pause");
    system("cls");
}

//清空文件
void WorkerManager::Clean_File() {
    cout << "确认清空?" << endl;
    cout << "1、确认" << endl;
    cout << "2、返回" << endl;

    int select = 0;
    cin >> select;
    if (select == 1) {
        // ios::trunc 如果存在,删除文件并重新创建
        ofstream ofs(FILENAME, ios::trunc);
        ofs.close();
        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];
                }
            }
        }
        this->m_EmpNum = 0;
        delete[] this->m_EmpArray;
        this->m_EmpArray = NULL;
        this->m_FileIsEmpty = true;
        cout << "清空成功" << endl;
    }
    system("pause");
    system("cls");
};

void WorkerManager::init_Emp() {
    ifstream ifs;
    ifs.open(FILENAME, ios::in);

    int id;
    string name;
    int dId;

    int index = 0;
    while (ifs >> id && ifs >> name && ifs >> dId) {
        Worker *worker = NULL;
        //根据不同的部门ID创建不同对象
        switch (dId) {
            case 1://普通员工
                worker = new Employee(id, name, 1);
                break;
            case 2://普通员工
                worker = new Manager(id, name, 2);
                break;
            case 3://普通员工
                worker = new Boss(id, name, 3);
                break;
            default:
                break;
        }
        this->m_EmpArray[index] = worker;
        index++;
    }
    ifs.close();

}

void WorkerManager::Show_Menu() {
    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;
}

//添加职工
void WorkerManager::Add_Emp() {
    cout << "请输入添加职工数量:" << endl;
    int addNum = 0;//保存用户的输入数量
    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 dSelect;
            cout << "请输入第" << i + 1 << "个新职工编号:" << endl;
            cin >> id;
            cout << "请输入第" << i + 1 << "个新职工姓名:" << endl;
            cin >> name;
            cout << "请选择该职工的岗位:" << endl;
            cout << "1、普通职工" << endl;
            cout << "2、经理" << endl;
            cout << "3、老板" << endl;
            cin >> dSelect;

            Worker *worker = NULL;
            switch (dSelect) {
                case 1://普通员工
                    worker = new Employee(id, name, 1);
                    break;
                case 2://普通员工
                    worker = new Manager(id, name, 2);
                    break;
                case 3://普通员工
                    worker = new Boss(id, name, 3);
                    break;
                default:
                    break;
            }
            newSpace[this->m_EmpNum + i] = worker;
        }
//        释放原有空间
        delete[] this->m_EmpArray;
//        更新新空间指向
        this->m_EmpArray = newSpace;
//更新个数
        this->m_EmpNum = newSize;
//提示信息
        cout << "成功添加" << addNum << "名新员工!" << endl;
//        更新职工不为空标志
        this->m_FileIsEmpty = false;
//        保存
        this->save();
    } else {
        cout << "输入数据有误" << endl;
    }
    system("pause");
    system("cls");
}

//统计人数
int WorkerManager::get_EmpNum() {
    ifstream ifs;
    ifs.open(FILENAME, ios::in);
    int id;
    string name;
    int dId;

    int num = 0;
    while (ifs >> id && ifs >> name && ifs >> dId) {
        //记录人数
        num++;
    }
    ifs.close();
    return num;
}

//保存文件
void WorkerManager::save() {
    ofstream ofs;
    ofs.open(FILENAME, ios::out);
    for (int i = 0; i < this->m_EmpNum; ++i) {
        ofs << this->m_EmpArray[i]->m_Id << " "
            << this->m_EmpArray[i]->m_Name << " "
            << this->m_EmpArray[i]->m_DeptId << endl;
    }
    ofs.close();
}

void WorkerManager::ExitSystem() {
    cout << "欢迎下次使用" << endl;
    system("pause");
    exit(0);
}

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

worker.h

#pragma once

#include <iostream>
#include <string>

using namespace std;

//职工抽象类
class Worker {
public:
//    显示个人信息
    virtual void ShowInfo() = 0;

// 获取岗位名称
    virtual string getDeptName() = 0;

    int m_Id;//职工编号
    string m_Name;//职工姓名
    int m_DeptId;//职工所在部门名称编号
};

employee.h

#pragma once

#include <iostream>

using namespace std;

#include "worker.h"

//员工类
class Employee : public Worker {
public:
//    构造函数
    Employee(int id, string name, int dId);

//    显示个人信息
    virtual void ShowInfo();

// 获取岗位名称
    virtual string getDeptName();
};

employee.cpp

#include "employee.h"

Employee::Employee(int id, std::string name, int dId) {
    this->m_Id = id;
    this->m_Name = name;
    this->m_DeptId = dId;
}

void Employee::ShowInfo() {
    cout << "职工编号:" << this->m_Id
         << "\t职工姓名:" << this->m_Name
         << "\t岗位:" << this->getDeptName()
         << "\t岗位职责:完成经理交给的任务" << endl;
}

string Employee::getDeptName() {
    return string("员工");
}

manager.h

#pragma once

#include <iostream>

using namespace std;

#include "worker.h"

//经理类
class Manager : public Worker {
public:
//    构造函数
    Manager(int id, string name, int dId);

//    显示个人信息
    virtual void ShowInfo();

// 获取岗位名称
    virtual string getDeptName();
};

manager.cpp

#include "Manager.h"

Manager::Manager(int id, std::string name, int dId) {
    this->m_Id = id;
    this->m_Name = name;
    this->m_DeptId = dId;
}

void Manager::ShowInfo() {
    cout << "职工编号:" << this->m_Id
         << "\t职工姓名:" << this->m_Name
         << "\t岗位:" << this->getDeptName()
         << "\t岗位职责:完成老板交给的任务,并下发给员工" << endl;
}

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

boss.h

#pragma once

#include <iostream>

using namespace std;

#include "worker.h"

//老板类
class Boss : public Worker {
public:
//    构造函数
    Boss(int id, string name, int dId);

//    显示个人信息
    virtual void ShowInfo();

// 获取岗位名称
    virtual string getDeptName();
};

boss.cpp

#include "boss.h"

Boss::Boss(int id, std::string name, int dId) {
    this->m_Id = id;
    this->m_Name = name;
    this->m_DeptId = dId;
}

void Boss::ShowInfo() {
    cout << "职工编号:" << this->m_Id
         << "\t职工姓名:" << this->m_Name
         << "\t岗位:" << this->getDeptName()
         << "\t岗位职责:管理公司所有事务" << endl;
}

string Boss::getDeptName() {
    return string("总裁");
}

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

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

相关文章

不需要#魔#法就能直接访问chatgpt

你还在付费使用chatgpt吗&#xff1f;你还在使用魔法访问chatgpt吗&#xff1f;你还在忍受每分钟刷新一下页面才能继续与gpt聊天吗&#xff1f; 今天给大家分享2种方法&#xff0c;可以使用国内网络在本地就能直接访问chatgpt。 这两种方法都是基于GitHub上的开源项目chatbot-u…

基于SSM的网上宠物店

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

低代码赋能生物药企数字化

一、关于复宏汉霖 汉霖是复星在2010年投资孵化的一家生物医药公司&#xff0c;经过这十几年的发展&#xff0c;2019年在港股上市&#xff0c;是生物药企18A企业之一。 经过这些年的发展&#xff0c;我们在管线方面布局了肿瘤、肢体、免疫、眼科类&#xff0c;从早研阶段到临床…

Midjourney|文心一格prompt教程[Text Prompt(下篇)]:游戏、实物、人物、风景、动漫、邮票、海报等生成,终极模板教学

Midjourney|文心一格prompt教程[Text Prompt&#xff08;下篇&#xff09;]&#xff1a;游戏、实物、人物、风景、动漫、邮票、海报等生成&#xff0c;终极模板教学 场景6&#xff1a;游戏 Prompt 真的越长越好吗&#xff1f; 按照 Midjourney 的官方文档里的说法&#xff0…

基于html+css的图展示76

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

人类禁止进入的“微博”,我的AI机器人在那里吹牛,“勾搭”AI小姑娘

最近球友推荐了一个非常有趣的网站&#xff0c;叫“奇鸟”&#xff08;https://chirper.ai/zh&#xff09;。 简单来说&#xff0c;这是一个AI专属的微博&#xff0c;人类禁止发言&#xff0c;但是你可以创建一个叫“奇鸟”的机器人代理&#xff0c;让它在里边发帖&#xff0c;…

扫眼球换“世界币” ChatGPT之父“剥削穷人”?

ChatGPT火爆全球后&#xff0c; 山姆奥特曼&#xff08;Sam Altman&#xff09;创立的加密项目Worldcoin&#xff08;世界币&#xff09;重回大众视野。这个项目诞生于2年前。那时&#xff0c;埋头迭代GPT模型的OpenAI还未如此知名&#xff0c;该公司的CEO 山姆奥特曼也位列科技…

【计算机视觉】CLIP实战:Zero-Shot Prediction(含源代码)

一、代码实战 下面的代码使用 CLIP 执行零样本预测。 此示例从 CIFAR-100 数据集中获取图像&#xff0c;并预测数据集中 100 个文本标签中最可能的标签。 import os import clip import torch from torchvision.datasets import CIFAR100# Load the model device "cuda…

Android Parceable 使用和原理

简介 在 Android 开发中&#xff0c;我们经常需要在不同的组件之间传递数据&#xff0c;比如在 Activity 之间传递数据、在 Service 和 Activity 之间传递数据等。为了实现数据的传递&#xff0c;Android 提供了两种常用的方式&#xff0c;一种是使用 Intent&#xff0c;另一种…

opencv_c++学习(十)

一、图像尺寸变化 图像插值原理 在图像变换的过程中往往需要对像素进行相关的操作。如上图&#xff08;左&#xff09;所示&#xff0c;我们会遇到两个相邻的像素块需要映射到同样的位置中&#xff0c;或者两个相邻的位置的像素中间需要映射出一个位置的像素块。这时候我们就需…

JavaEE(系列7) -- 多线程(wait 和 notify 的使用)

首先对上一章节的指令重排序,在进行解释一下; 假设现在有连个线程 t1 和 t2 t1频繁(速度特别快)读取主内存&#xff0c;效率比较低&#xff0c;就被优化成直接读自己的工作内存。 t2修改了主内存的结果&#xff0c;由于t1没有读主内存&#xff0c;导致修改不能被识别到。 1.什么…

全网最全最细的【设计模式】总目录,收藏起来慢慢啃,看完不懂砍我

文章目录 一、设计模式七大原则1、单一职责原则2、接口隔离原则3、依赖倒置原则4、里氏替换原则5、开闭原则6、迪米特法则7、合成复用原则 二、UML类图三、设计模式1、创建型模式&#xff08;1&#xff09;单例模式&#xff08;常用&#xff09;&#xff08;2&#xff09;原型模…

mybatis-config.xml文件中的mappers标签

前言 在MyBatis中&#xff0c;< mapper >标签非常重要&#xff0c;因为它对应着我们存放sql语句的xml文件&#xff0c;在之前的使用中我们都是使用resource来指定路径&#xff0c;但其实除了resource可以指定路径的还有url和class但路径形式有所不同&#xff0c;下面来讨…

用「明道云+ChatGPT+Weaviate」挑战零代码1小时实现ChatPDF

ChatGPT流行起来之后&#xff0c;快速的出现了一批基于ChatGPT的工具应用&#xff0c;ChatPDF就是其中比较受欢迎的一款。它是一个可以让你与PDF文件进行对话的工具&#xff0c;既可以帮助你快速提取PDF文件中的信息&#xff0c;例如手册、论文、合同、书籍等&#xff1b;也可以…

【计算机视觉】最后显示的CIFAR-100数据集照片很模糊怎么解决?

文章目录 一、前言二、如何解决2.1 使用图像增强技术2.2 使用插值方法2.3 使用更高分辨率的图像数据集2.4 手动调整图像尺寸 三、总结 一、前言 如果从CIFAR-100数据集加载的图像显示模糊&#xff0c;可能有几个可能的原因&#xff1a; 分辨率较低&#xff1a;CIFAR-100数据集…

全力押注预制菜,叮咚买菜或错失即时零售红利

实际上&#xff0c;叮咚买菜相比于美团、京东更适合抢分即时零售的市场红利。 目前美团进入即时零售的逻辑是&#xff0c;拥有几百万骑手的履约软硬件可以复用&#xff0c;同时从外卖场景延伸到其他消费场景比较丝滑&#xff0c;从平台几千万用户的温饱满足&#xff0c;延展到多…

计算机网络实验(ensp)-实验10:三层交换机实现VLAN间路由

目录 实验报告&#xff1a; 实验操作 1.建立网络拓扑图并开启设备 2.配置主机 1.打开PC机 配置IP地址和子网掩码 2.配置完成后点击“应用”退出 3.重复步骤1和2配置每台PC 3.配置交换机VLAN 1.点开交换机 2.输入命名&#xff1a;sys 从用户视图切换到系统视图…

网络工程师精选习题详解(一)

请点击↑关注、收藏&#xff0c;本博客免费为你获取精彩知识分享&#xff01;有惊喜哟&#xff01;&#xff01; 1.在IPv4地址192.168.2.0/24中&#xff0c;表示主机的二进制位数是&#xff08; &#xff09;位。 A.8 B.16 C.24 D.32 答案&#xff1a;A /24示网络…

面对职业焦虑,我们能做些什么?

目录 大环境分析&#xff1a;AI 发展汹涌而上温水煮青蛙&#xff1a;那些“被替代”的“我们”码农分类&#xff1a;程序员都在做些什么码农黑暗季&#xff1a;失业潮原因分析程序员短期真的可替代吗&#xff1f;AI 发展来势汹汹&#xff0c;如何顺势而为最后&#xff1a;纵观全…

SpringBoot整合Swagger2,让接口文档管理变得更简单

在软件开发的过程中&#xff0c;接口文档的编写往往是一个非常重要的环节&#xff0c;因为它是前端和后端沟通的桥梁&#xff0c;帮助团队更好地协作。然而&#xff0c;手动编写接口文档不仅耗费时间&#xff0c;还容易出错&#xff0c;因此我们需要一种简单的方法来管理接口文…