c++学生管理系统

想要实现的功能

1,可以增加学生的信息,包括(姓名,学号,c++成绩,高数成绩,英语成绩)

2,可以删除学生信息

3,修改学生信息

4,显示所有学生信息

5,查询学生信息

6,把所有学生根据平均成绩进行排名

注意:以下写作流程是按照思考的顺序书写的,如果想看完整代码,看最后!!!

大致思路:

首先创建一个Student类,这类里面包含学生的姓名,学号,c++成绩,高数成绩,英语成绩。在创建一个班级类,将学生类作为成员变量,这样每一个学生就可以放到班级类这个里面。

class Student {
private:
    string _name;
    string _stuNum;
    double _gradeC;
    double _gradeM;
    double _gradeE;
public:

    Student(string name = "", string stuNum = "", double gradeC = 0, double gradeM = 0, double gradeE = 0)
        :_name(name)
        , _stuNum(stuNum)
        , _gradeC(gradeC)
        , _gradeM(gradeM)
        , _gradeE(gradeE)
    {}

}

————————————————————————————————————

class StudentClass {
private:
    Student* _arr;
    int _useSize;
    int _capacity;
public:
    StudentClass(int capacity = 4) {
        
        _arr = new Student[capacity];
        _useSize = 0;
        _capacity = capacity;   

 }

————————————————————————————————————

然后写运行的大致框架:首先,实例化一个班级。打印出一个菜单,菜单上有各种那个操作。然后写一个循环(do-while循环:最少循环一次)然后输入要进行的操作,通过(switch)语句,对应到相应操作的语句。

void menu() {
    cout << "1,学生信息录入" << endl;
    cout << "2,删除学生信息" << endl;
    cout << "3,修改学生信息" << endl;
    cout << "4,显示所有学生信息" << endl;
    cout << "5,查询学生成绩" << endl;
    cout << "6,成绩排名" << endl;
    cout << "0,退出系统" << endl;
}

int main() {

    StudentClass studentClass(1);
    do
    {
        menu();
        cout << "请输入操作选项:" << endl;
        int choice;
        cin >> choice;
        switch (choice) {
        case 1://学生信息录入
        {
            GetIn(studentClass);
            break;
        }
        case 2://删除学生信息
        {
            Delete(studentClass);
            break;
        } 
        case 3://修改学生信息
        {
            Amend(studentClass);
                break;
        }
        case 4://显示所有学生信息
        {
            Print(studentClass);
            break;
        }
        case 5://查询学生成绩
        {
            Search(studentClass);
            break;
        }

       case 6://成绩排名
        {   Order(studentClass);
            break;
        }
        case 0:
            cout << " 退出系统" << endl;
            exit(0);
        default:
            cout << "输入错误,重新输入:" << endl;
            break;
        }
    } while (1);

    return 0;
}

达到这种效果:

________________________________________________________________

第一个操作对应的功能:

分别输入姓名,学号,c++成绩,高数成绩,英语成绩,然后实例化一个学生的引用。将这些作为构造函数是参数。然后将这个“学生”放到“班级”里面。想要实现这个操作就要在班级这个类里面写一个成员函数。把这个学生对象放到班级类指定的空间里面。这时就需要考虑班级这个类在初始化的时候开辟的空间是否够用。如果不够放下这个“学生”就要考虑扩容。

void GetIn(StudentClass& studentClass) {
    cout << "请输入学生信息->" << endl;
    cout << "姓名:" << endl;
    string name;
    cin >> name;
    cout << "学号:" << endl;
    string stuNum;
    cin >> stuNum;
    cout << "C语言成绩:" << endl;
    double a;
    cin >> a;
    cout << "高数成绩:" << endl;
    double b;
    cin >> b;
    cout << "英语成绩:" << endl;
    double c;
    cin >> c;
    Student stu(name, stuNum, a, b, c);
    studentClass.putin(stu);

}

————————————————————

注意:这是在班级这个类开辟的空间上,把学生这个对象放进去,所以这个函数是班级的成员函数

void putin(Student s) {
    if (_useSize == _capacity) {

        _capacity = _capacity == 0 ? _capacity = 4 : _capacity * 2; 
        Student* temp = new Student[_capacity]; 
        for (int i = 0; i < _useSize; i++) {
            temp[i] = _arr[i]; 
        }
        delete[]_arr; 
        _arr = temp; 
    }
    _arr[_useSize] = s;
    _useSize++;
}

效果如图所示:

————————————————————————————————

第二个操作对应的功能:

删除学生信息,我们需要输入学生的姓名或者学号,如果没找到不作操作,如果找到了这位学生,按照如下图思路将其覆盖,也就是删除

void Delete(StudentClass& studentClass) {
    cout << "请输入学生的学号/姓名:" << endl;
    string stuNum;
    cin >> stuNum;
    studentClass.del(stuNum);
}

————————————————————

班级的成员函数:

void del(string num) {
    int x = getUseSize();
    int i;
    for (i = 0;i < x;i++) {
        if (_arr[i].getStuNum() == num || _arr[i].getStuName() == num) {
            break;
        }
    }
    if (i==x) {
        cout << "查无此人! 删除失败!!!" << endl;
        return;
    }else{
        for (;i < _useSize - 1;i++) {
            _arr[i] = _arr[i + 1];
        }
        _useSize--;
        cout << " 删除成功" << endl;
        return;
    }
}
int getUseSize() {
    return _useSize;
}

——————————————————————————

学生的成员函数(因为名字和学号都是私有,所以要有一个函数是的让这些数据可以得到,这样做的目的是不让成员变量随意被更改)

string getStuNum() {
    return _stuNum;
}
string getStuName() {
    return _name;
}

效果如图所示:

——————————————————————————————

第三个操作对应的功能:

修改学生信息首先输入学号或者姓名,找到这个学生。然后打印一个目录,上面为要修改的信息选项,然后选择要修改的内容做出修改

void fix(string num) {
    int x = getUseSize();
    int i = 0;
    for ( i = 0;i < x;i++) {
        if (_arr[i].getStuNum() == num || _arr[i].getStuName() == num) {
            _arr[i].print();
            do
            {
                menu();
                int choice;
                cin >> choice;
                switch (choice) {
                case 1:
                    cout << "请输入修改后的名字:" << endl;
                    _arr[i].fixname(Cin("a"));
                    _arr[i].print();
                    break;
                case 2:
                    cout << "请输入修改后的学号:" << endl;
                    _arr[i].fixnum(Cin("a"));
                    _arr[i].print();
                    break;
                case 3:
                    cout << "请输入修改后的C语言成绩:" << endl;
                    _arr[i].fixC(Cin(1.1));
                    _arr[i].print();
                    break;
                case 4:
                    cout << "请输入修改后的高数成绩:" << endl;
                    _arr[i].fixM(Cin(1.1));
                    _arr[i].print();
                    break;
                case 5:
                    cout << "请输入修改后的英语成绩:" << endl;
                    _arr[i].fixE(Cin(1.1));
                    _arr[i].print();
                    break;
                case 0:
                    cout << "完成修改" << endl;
                    _arr[i].print();
                    return;
                default:
                    cout << "输入错误,重新输入:" << endl;
                    break;
                }

            } while (1);
        }

    }
    if (i == x) {
        cout << "查无此人! 修改失败!!!" << endl;
        return;
    }
}

void menu() {
    cout << "1,修改姓名" << endl;
    cout << "2,修改学号" << endl;
    cout << "3,修改C语言成绩" << endl;
    cout << "4,修改高数成绩" << endl;
    cout << "5,修改英语成绩" << endl;
    cout << "0,完成修改" << endl;
}
string Cin(string) {
    string s;
    cin >> s;
    return s;
}
double Cin(double) {
    double s;
    cin >> s;
    return s;
}

——————————————————————————————————————

void fixname(string s) {
    _name = s;
}
void fixnum(string s) {
    _stuNum = s;
}
void fixC(double x) {
    _gradeC = x;
}
void fixM(double x) {
    _gradeM = x;
}
void fixE(double x) {
    _gradeE = x;
}

void print() {
    cout << "姓名: " << _name << "  学号:" << _stuNum << "  C语言成绩:" << _gradeC << "  高数成绩"
        << _gradeM << "  英语成绩:" << _gradeE << endl;
}

效果如下:

————————————————————————————————————

第四个操作对应的功能:

显示所以信息,只需要for循环班级指向的空间,将所有学生打印出来即可

void Print(StudentClass& studentClass) {
    studentClass.print();

}

————————————————

班级的成员函数:

void print() {
    int x = getUseSize();
    for (int i = 0;i < x;i++) {
        _arr[i].print();
    }
}

实现效果:

第五个操作对应的功能:

查询学生信息,for循化找到该学生然后打印这个学生的信息

void Search(StudentClass& studentClass) {
    cout << "请输入学生的学号/姓名:" << endl;
    string stuNum;
    cin >> stuNum;
    studentClass.grade(stuNum);

}

————————————————————————————

班级成员函数:

void grade(string num) {
    int x = getUseSize();
    int i = 0;
    for (i = 0;i < x;i++) {
        if (_arr[i].getStuNum() == num || _arr[i].getStuName() == num) {
            _arr[i].getgrade();
            return;
        }
    }
    if (i == x) {
        cout << "查无此人!" << endl;
        return;
    }
}

——————————————————————————————————

学生成员函数:

void getgrade() {
    cout << "姓名:" << _name << endl;
    cout << endl;
    cout << " C语言成绩:" << _gradeC << "  高数成绩" << _gradeM << "  英语成绩:" << _gradeE << "  平均成绩:" << everage() << endl;
}

效果如下:

第六个操作对应的功能:

排序,实例化一个临时班级对象,将原来的班级拷贝到这个临时对象上面,对临时对象进行排序(冒泡排序),然后依次打印

StudentClass(StudentClass& stuclass) {
    
        _arr = (Student*)malloc(sizeof(Student) * stuclass._capacity);
        if (NULL == _arr) {
            perror("申请空间失败");
            return;
        }
        memcpy(_arr, stuclass._arr, sizeof(Student) * stuclass._useSize);
        _useSize = stuclass._useSize;
        _capacity = stuclass._capacity;
    
}

-------------------------------------------------——————————————

void Order(StudentClass& studentClass) {
    StudentClass stuclass = studentClass;
    studentClass.order(stuclass);
    stuclass.print1();
}

————————————————————————————————

班级成员变量:

void swap(Student& p1, Student& p2) {
    Student tmp = p2;
    p2 = p1;
    p1 = tmp;
}

void order(StudentClass& stuclass) {
    int x = getUseSize();
    for (int i = 0;i < x;i++) {
        for (size_t j = 0; j < x-i-1; j++)
        {
            if (stuclass._arr[j].everage() < stuclass._arr[j+1].everage()) {
                swap(stuclass._arr[j], stuclass._arr[j + 1]);
            }
        }
        
    }

}

——————————————————————————————

学生成员变量:

void getordergrade() {
    cout << "姓名: " << _name << "  学号:" << _stuNum << "  C语言成绩:" << _gradeC << "  高数成绩"
        << _gradeM << "  英语成绩:" << _gradeE << "  平均成绩:" << everage()<< endl;
    
}

效果:

全部代码:

#include<iostream>
#include<string>
using namespace std;


class Student {
private:
    string _name;
    string _stuNum;
    double _gradeC;
    double _gradeM;
    double _gradeE;
public:

    Student(string name = "", string stuNum = "", double gradeC = 0, double gradeM = 0, double gradeE = 0)
        :_name(name)
        , _stuNum(stuNum)
        , _gradeC(gradeC)
        , _gradeM(gradeM)
        , _gradeE(gradeE)
    {}
    void print() {
        cout << "姓名: " << _name << "  学号:" << _stuNum << "  C语言成绩:" << _gradeC << "  高数成绩"
            << _gradeM << "  英语成绩:" << _gradeE << endl;
    }
    string getStuNum() {
        return _stuNum;
    }
    string getStuName() {
        return _name;
    }
    void getgrade() {
        cout << "姓名:" << _name << endl;
        cout << endl;
        cout << " C语言成绩:" << _gradeC << "  高数成绩" << _gradeM << "  英语成绩:" << _gradeE << "  平均成绩:" << everage() << endl;
    }
    void getordergrade() {
        cout << "姓名: " << _name << "  学号:" << _stuNum << "  C语言成绩:" << _gradeC << "  高数成绩"
            << _gradeM << "  英语成绩:" << _gradeE << "  平均成绩:" << everage()<< endl;
        
    }
    double everage() {
        return (_gradeC + _gradeM + _gradeE) / 3;
    }
    void fixname(string s) {
        _name = s;
    }
    void fixnum(string s) {
        _stuNum = s;
    }
    void fixC(double x) {
        _gradeC = x;
    }
    void fixM(double x) {
        _gradeM = x;
    }
    void fixE(double x) {
        _gradeE = x;
    }
};


class StudentClass {
private:
    Student* _arr;
    int _useSize;
    int _capacity;
public:
    StudentClass(StudentClass& stuclass) {
        
            _arr = (Student*)malloc(sizeof(Student) * stuclass._capacity);
            if (NULL == _arr) {
                perror("申请空间失败");
                return;
            }
            memcpy(_arr, stuclass._arr, sizeof(Student) * stuclass._useSize);
            _useSize = stuclass._useSize;
            _capacity = stuclass._capacity;
        
    }
    StudentClass(int capacity = 4) {
        
        _arr = new Student[capacity];
        _useSize = 0;
        _capacity = capacity;
        

    }
    void putin(Student s) {
        if (_useSize == _capacity) {

            _capacity = _capacity == 0 ? _capacity = 4 : _capacity * 2; 
            Student* temp = new Student[_capacity]; 
            for (int i = 0; i < _useSize; i++) {
                temp[i] = _arr[i]; 
            }
            delete[]_arr; 
            _arr = temp; 
        }
        _arr[_useSize] = s;
        _useSize++;
    }

    void del(string num) {
        int x = getUseSize();
        int i;
        for (i = 0;i < x;i++) {
            if (_arr[i].getStuNum() == num || _arr[i].getStuName() == num) {
                break;
            }
        }
        if (i==x) {
            cout << "查无此人! 删除失败!!!" << endl;
            return;
        }else{
            for (;i < _useSize - 1;i++) {
                _arr[i] = _arr[i + 1];
            }
            _useSize--;
            cout << " 删除成功" << endl;
            return;
        }
    }
    int getUseSize() {
        return _useSize;
    }

    void print() {
        int x = getUseSize();
        for (int i = 0;i < x;i++) {
            _arr[i].print();
        }
    }
    void print1() {
        int x = getUseSize();
        for (int i = 0;i < x;i++) {
            _arr[i].getordergrade();
        }
    }
    void grade(string num) {
        int x = getUseSize();
        int i = 0;
        for (i = 0;i < x;i++) {
            if (_arr[i].getStuNum() == num || _arr[i].getStuName() == num) {
                _arr[i].getgrade();
                return;
            }
        }
        if (i == x) {
            cout << "查无此人!" << endl;
            return;
        }
    }
    void menu() {
        cout << "1,修改姓名" << endl;
        cout << "2,修改学号" << endl;
        cout << "3,修改C语言成绩" << endl;
        cout << "4,修改高数成绩" << endl;
        cout << "5,修改英语成绩" << endl;
        cout << "0,完成修改" << endl;
    }
    string Cin(string) {
        string s;
        cin >> s;
        return s;
    }
    double Cin(double) {
        double s;
        cin >> s;
        return s;
    }
    void fix(string num) {
        int x = getUseSize();
        int i = 0;
        for ( i = 0;i < x;i++) {
            if (_arr[i].getStuNum() == num || _arr[i].getStuName() == num) {
                _arr[i].print();
                do
                {
                    menu();
                    int choice;
                    cin >> choice;
                    switch (choice) {
                    case 1:
                        cout << "请输入修改后的名字:" << endl;
                        _arr[i].fixname(Cin("a"));
                        _arr[i].print();
                        break;
                    case 2:
                        cout << "请输入修改后的学号:" << endl;
                        _arr[i].fixnum(Cin("a"));
                        _arr[i].print();
                        break;
                    case 3:
                        cout << "请输入修改后的C语言成绩:" << endl;
                        _arr[i].fixC(Cin(1.1));
                        _arr[i].print();
                        break;
                    case 4:
                        cout << "请输入修改后的高数成绩:" << endl;
                        _arr[i].fixM(Cin(1.1));
                        _arr[i].print();
                        break;
                    case 5:
                        cout << "请输入修改后的英语成绩:" << endl;
                        _arr[i].fixE(Cin(1.1));
                        _arr[i].print();
                        break;
                    case 0:
                        cout << "完成修改" << endl;
                        _arr[i].print();
                        return;
                    default:
                        cout << "输入错误,重新输入:" << endl;
                        break;
                    }

                } while (1);
            }

        }
        if (i == x) {
            cout << "查无此人! 修改失败!!!" << endl;
            return;
        }
    }

    void swap(Student& p1, Student& p2) {
        Student tmp = p2;
        p2 = p1;
        p1 = tmp;
    }

    void order(StudentClass& stuclass) {
        int x = getUseSize();
        for (int i = 0;i < x;i++) {
            for (size_t j = 0; j < x-i-1; j++)
            {
                if (stuclass._arr[j].everage() < stuclass._arr[j+1].everage()) {
                    swap(stuclass._arr[j], stuclass._arr[j + 1]);
                }
            }
            
        }

    }
};


void menu() {
    cout << "1,学生信息录入" << endl;
    cout << "2,删除学生信息" << endl;
    cout << "3,修改学生信息" << endl;
    cout << "4,显示所有学生信息" << endl;
    cout << "5,查询学生成绩" << endl;
    cout << "6,成绩排名" << endl;
    cout << "0,退出系统" << endl;
}

void GetIn(StudentClass& studentClass) {
    cout << "请输入学生信息->" << endl;
    cout << "姓名:" << endl;
    string name;
    cin >> name;
    cout << "学号:" << endl;
    string stuNum;
    cin >> stuNum;
    cout << "C语言成绩:" << endl;
    double a;
    cin >> a;
    cout << "高数成绩:" << endl;
    double b;
    cin >> b;
    cout << "英语成绩:" << endl;
    double c;
    cin >> c;
    Student stu(name, stuNum, a, b, c);
    studentClass.putin(stu);

}
void Delete(StudentClass& studentClass) {
    cout << "请输入学生的学号/姓名:" << endl;
    string stuNum;
    cin >> stuNum;
    studentClass.del(stuNum);
}

void Amend(StudentClass& studentClass) {
    cout << "请输入学生的学号/姓名:" << endl;
    string stuNum;
    cin >> stuNum;
    studentClass.fix(stuNum);
}

void Print(StudentClass& studentClass) {
    studentClass.print();

}

void Search(StudentClass& studentClass) {
    cout << "请输入学生的学号/姓名:" << endl;
    string stuNum;
    cin >> stuNum;
    studentClass.grade(stuNum);

}

void Order(StudentClass& studentClass) {
    StudentClass stuclass = studentClass;
    studentClass.order(stuclass);
    stuclass.print1();
}

int main() {

    StudentClass studentClass(1);
    do
    {
        menu();
        cout << "请输入操作选项:" << endl;
        int choice;
        cin >> choice;
        switch (choice) {
        case 1://学生信息录入
        {
            GetIn(studentClass);
            break;
        }
            
        case 2://删除学生信息
        {
            Delete(studentClass);
            break;
        }
            
        case 3://修改学生信息
        {
            Amend(studentClass);
                break;
        }
            
        case 4://显示所有学生信息
        {
            Print(studentClass);
            break;
        }
            
        case 5://查询学生成绩
        {
            Search(studentClass);
            break;
        }

        case 6://成绩排名
        {   Order(studentClass);
            break;
        }
        case 0:
            cout << " 退出系统" << endl;
            exit(0);
        default:
            cout << "输入错误,重新输入:" << endl;
            break;
        }
    } while (1);

    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python中利用cartopy库绘制SST图像

1. Cartopy简介 Cartopy 是一个开源的 Python 库&#xff0c;用于绘制地图和地理数据分析。它结合了 matplotlib 的绘图功能和 shapely、pyproj 等库的地理空间数据处理能力&#xff0c;为用户提供了在地图上可视化数据的强大工具。 以下是 Cartopy 的一些主要特点和功能&#…

微信公众号开发(问题1):订阅号不能定时发私信/私信

微信公众号开发时&#xff0c;因为个人使用&#xff0c;申请的是订阅号&#xff0c;本来是想出了自动回复&#xff0c;再加一个定时消息的功能&#xff0c;尝试利用flask里的scheduler添加定时任务&#xff0c;但是执行之后不能收到消息&#xff0c;通过再次查看订阅号的功能&a…

stm32mp157为什么要把相同的tf-A trust烧录emmc的boot1和boot2?

在使用该处理器时&#xff0c;为什么要将相同的Trusted Firmware-A (TF-A)烧录到eMMC的Boot1和Boot2区域呢&#xff1f; 这么做的主要原因包括&#xff1a; 冗余性和可靠性&#xff1a; 将相同的TF-A烧录到两个不同的引导区域&#xff08;Boot1和Boot2&#xff09;可以增加系…

LeetCode 算法:找到字符串中所有字母异位词c++

原题链接&#x1f517;&#xff1a;找到字符串中所有字母异位词 难度&#xff1a;中等⭐️⭐️ 题目 给定两个字符串 s 和 p&#xff0c;找到 s 中所有 p 的 异位词 的子串&#xff0c;返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符…

Jenkins流水线pipeline--基于上一章的工作流程

1流水线部署 1.流水线文本名Jenkinsfile,将流水线放入gitlab远程仓库代码里面 2pipeline脚本 Jenkinsfile文件内容 pipeline {agent anyenvironment {key"value"}stages {stage("拉取git仓库代码") {steps {deleteDir()checkout scmGit(branches: [[nam…

人工智能与【肿瘤免疫微环境】结合,探索免疫治疗的新方向|24年6月·顶刊速递·06-02

罗小罗同学说 24-06-02&#xff5c;文献速递 今天分享的文章&#xff0c;主题是——人工智能&肿瘤免疫微环境。解释一下这张图&#xff0c;左列是文献标题&#xff0c;右侧是发表的年月&#xff0c;放心&#xff0c;都是顶刊&#xff0c;不然我也不会选的。 PS&#xff1a…

大数据测试/ETL开发,如何造测试数据

相信很多的小伙伴&#xff0c;有些是大数据测试岗位&#xff0c;有些是ETL开发&#xff0c;都面临着如何要造数据的情况。 1&#xff0c;造数背景 【大数据测试岗位】&#xff0c;比较出名的就是宁波银行&#xff0c;如果你在宁波银行做大数据开发&#xff0c;对着需求开发完…

Java——常见进制

在计算机领域有四种比较常见的进制&#xff0c;分别是二进制、八进制、十进制和十六进制。 一、二进制&#xff08;Binary&#xff09; 二进制&#xff08;Binary&#xff09;是一种基数为2的数值系统&#xff0c;仅使用两个符号&#xff1a;0和1。所以它的进位规则就是逢二进…

机械革命硬盘数据恢复:深度解析与实用指南

随着科技的飞速发展&#xff0c;数据存储与备份已成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;硬盘故障、误删除或格式化等意外情况时常发生&#xff0c;导致重要数据丢失&#xff0c;给用户带来极大的困扰。本文将以“机械革命硬盘数据恢复”为主题&#xff0…

【惯性传感器imu】—— WHEELTEC的惯导模块的imu的驱动安装配置和运行

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、IMU驱动安装1. 安装依赖2. 源码的下载3. 编译源码(1) 配置固定串口设备(2) 修改luanch文件(3) 编译 二、启动IMU1. 运行imu2. 查看imu数据 总结 前言 WHEE…

随记-点选验证码(二)

之前写过一篇文章 随记-点选验证码 &#xff0c;当时借助了 ddddocr 完成了ocr 识别&#xff0c;这篇文章算是对之前的补充。 本次更换了新的方案&#xff1a; 通过 ultralytics&#xff08;YOLO8&#xff09;训练自己的模型 吐槽一句&#xff1a;标注真是一件耗时的事情啊&am…

【Matplotlib作图-2.Deviation】50 Matplotlib Visualizations, Python实现,源码可复现

目录 02 Deviation 2.0 Prerequisite 2.1 发散型条形图(Diverging Bars) 2.2 发散型文本(Diverging Texts) 2.3 Diverging Dot Plot 2.4 Diverging Lollipop Chart with Markers 2.5 面积图(Area Chart) References 02 Deviation 2.0 Prerequisite Setup.py # !pip ins…

图书推荐:ChatGPT专业知识信息课程

《ChatGPT专业知识信息课程》&#xff08;ChatGPT-Expertise Informative Course&#xff09; 是一本由Dwayne Anderson撰写的电子书&#xff0c;提供了关于ChatGPT的丰富知识。该书涵盖了与ChatGPT相关的各种主题&#xff0c;如其与OpenAI的关系、ChatGPT与GPT-3之间的混淆、C…

【LeetCode热题100总结】239. 滑动窗口最大值

题目描述 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1&#xff1a; 输入&#xff1a;nums [1,3,-1,-3,5,3,6,7]…

STM32-- GPIO->EXTI->NVIC中断

一、NVIC简介 什么是 NVIC &#xff1f; NVIC 即嵌套向量中断控制器&#xff0c;全称 Nested vectored interrupt controller 。它 是内核的器件&#xff0c;所以它的更多描述可以看内核有关的资料。M3/M4/M7 内核都是支持 256 个中断&#xff0c;其中包含了 16 个系统中…

WHAT - 容器化系列(一)

这里写目录标题 一、什么是容器与虚拟机1.1 什么是容器1.2 容器的特点1.3 容器和虚拟机的区别虚拟机&#xff08;VM&#xff09;&#xff1a;基于硬件的资源隔离技术容器&#xff1a;基于操作系统的资源隔离技术对比总结应用场景 二、容器的实现原理1. Namespace&#xff08;命…

【Java】一文看懂Thread 线程池的 7 种创建方式、任务队列及自定义线程池(代码示例)

本文摘要&#xff1a;【Java】Thread 线程池的 7 种创建方式及自定义线程池&#xff08;代码示例版&#xff09; &#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专…

1. MySQL 数据库的基本操作

文章目录 【 1. SQL 的书写规则 】大小写规则常量的表示注释 【 2. RDBMS 术语 】Table 表Filed 域/字段Column 列Record 记录NULL 空值Constraint 约束数据的完整性范式 【 3. 数据库基本操作函数 】3.1 SHOW DATABASES 显示数据库3.2 CREATE DATABASE 创建数据库3.3 ALTER DA…

传输中的串扰(八)

串扰指的是有害信号从一个线网传递到相邻线网上。通常把噪声源所在的线网称为动态线或攻击线网&#xff0c;而把有噪声形成的线网称为静态线或受害线网。 静态线上的噪声电压的表现与信号电压完全一样。一旦在静态线上产生噪声电压&#xff0c;它们就会传播并在阻抗突变处出现反…

【JS重点知识03】定时器—间歇函数

一&#xff1a;间歇函数的应用场景 网页倒计时是需要每个一段时间需自动执行一段代码&#xff0c;而不需要手动去触发&#xff1b;间歇函数刚好满足了这一要求&#xff1b; 二&#xff1a;间歇函数的使用 1 开启定时器 语法规范&#xff1a; 1 setInterval(匿名函数,时间)…