学生成绩管理系统(C语言课设 )

这个学生成绩管理系统使用C语言编写,具有多项功能以方便管理学生信息和成绩。首先从文件中读取数据到系统中,并提供了多种功能(增删改查等)选项以满足不同的需求。

学生成绩管理系统功能:

  1. 显示学生信息
  2. 增加学生信息
  3. 删除学生信息
  4. 修改学生信息
  5. 查询学生信息
  6. 总分降序排序学生成绩
  7. 统计学生平均成绩
  8. 统计每科平均成绩
  9. 统计信息录入系统中人数
  10. 输出总成绩最高的学生信息
  11. 退出

运行示例:
请添加图片描述运行之后要自己先往系统里面增加学生数据哦

请添加图片描述

注意:因为设涉及到文件操作,需要把下面文件读取和保存函数中的文件位置修改为自己所要保存的文件位置或者按照如下操作建立文件:

  1. 打开D盘新建一个文件夹名字叫 学生成绩管理系统 (名字要一模一样哦)
    请添加图片描述

  2. 在该文件夹中新建文本文档命名为 xscjglxt (如下图:)
    在这里插入图片描述

目录

  • 1.函数声明
  • 2.结构体和全局变量定义
  • 3.主函数和主菜单函数
  • 4.显示学生信息
  • 5.增加学生信息
  • 6.删除学生信息
  • 7.修改学生信息
  • 8.查询学生信息
  • 9.总分降序排序学生成绩
  • 10.统计学生平均成绩
  • 11.统计每科平均成绩
  • 12.统计信息录入系统中人数
  • 13.输出总成绩最高的学生信息
  • 14.从文件中读取数据(*==注意这里的文件位置要改为自己的==)
  • 15.将数据保存至文件(*==注意这里的文件位置要改为自己的==)
  • 16.源代码

1.函数声明

void regist();//登录界面
void findid();//按照学号索引查询
void show();//查看所有的学生成绩信息
void del();//删除学生信息
void edit();//修改学生信息
void add();//添加学生信息
void mysort();//总分降序排序
void avegxs();//查询学生成绩平均值大于90的学生成绩
void avegkm();//查询学生成绩平均值小于60的学生成绩
void save();//保存学生信息到文件
void load();//从文件读取学生信息到内存
void menu();//菜单总录入人数
void maxn();//输出系统中总成绩最大的学生信息

2.结构体和全局变量定义

typedef struct student
{
    char id[15];//学生学号
    char name[50];//学生姓名
    char sex[10];//学生性别
    char great[50];//学生班级
    int E,M,Y;//学生的英语、数学、语文成绩
    float ave;//学生的平均成绩
    int all;//学生的总成绩
}student;

student students[100];
static int length;//保存当前系统中的人数

3.主函数和主菜单函数

主函数运行之后首先从文件中读取学生信息到系统当中,然后显示系统菜单提供多种功能让用户选择。

//主函数
int main()
{
    printf("登陆成功!");
    load();//从文件中读取信息到内测
    menu();//菜单
}
void menu()//菜单
{
	while(1)
	{
	    regist();
	    int n;
        scanf("%d",&n);
        switch(n)
        {
            case 1:
                show();
                break;
            case 2:
                add();
                break;
            case 3:
                del();
                break;
            case 4:
                edit();
                break;
            case 5:
                findid();
                break;
            case 6:
                mysort();
                break;
            case 7:
                avegxs();
                break;
            case 8:
                avegkm();
                break;
            case 9:
                cens();
                break;
            case 10:
                maxn();
                break;
            case 11:
                exit(0);

        }
        save();
        printf("按任意键继续\n");
        getchar();
        getchar();
        system("cls");
	}

}

void regist()//登录界面
{
    printf("\n\n\t*****************************学生信息管理系统******************************\n");
	printf("\t*                              1.显示学生信息                             *|\n");
	printf("\t*                              2.增加学生信息                             *|\n");
	printf("\t*                              3.删除学生信息                             *|\n");
	printf("\t*                              4.修改学生信息                             *|\n");
	printf("\t*                              5.查询学生信息                             *|\n");
	printf("\t*                              6.总分降序排序学生成绩                     *|\n");
	printf("\t*                              7.统计学生平均成绩                         *|\n");
	printf("\t*                              8.统计每科平均成绩                         *|\n");
    printf("\t*                              9.统计信息录入系统中人数                   *|\n");
    printf("\t*                              10.输出总成绩最高的学生信息                *|\n");
	printf("\t*                              11.退出                                    *|\n");
	printf("\t***************************************************************************\n");
	printf("请输入你要进行的操作:\n");
}

4.显示学生信息

这里会将系统中所有的学生信息显示到屏幕上

void show()//查看所有的学生成绩信息
{
    printf("------------------------------------------------------------------------------------------------------------------------\n");
        printf("学生姓名|\t学号\t|\t班级\t| 性别 | 语文成绩 | 数学成绩 | 英语成绩 | 总成绩 \n");
        printf("------------------------------------------------------------------------------------------------------------------------\n");
    for(int i =0;i<length;i++)
    {


        printf("\n%s\t|  %s\t|  %s\t|  %s  |    %d    |    %d    |    %d    |    %d    \n",students[i].name,students[i].id,students[i].great,students[i].sex,students[i].Y,students[i].M,students[i].E,students[i].all);
        printf("------------------------------------------------------------------------------------------------------------------------\n");

    }
}

5.增加学生信息

增加学生信息时会进行判定是否系统当中内存已满或者该学号已存在则不可以添加该学生信息(学号唯一)。

void add()//添加学生信息
{
    int flag=0;
    if(length>=100)
    {
        printf("该班级人数已满!!!");
    }
    else{
    printf("请输入学生信息:\n");
    printf("学生姓名:");
    char op[50];
    scanf("%s",op);
    printf("学生学号:");
    char opp[50];
    scanf("%s",opp);
    for(int i=0;i<length;i++)
    {
        if(strcmp(opp,students[i].id)==0)flag=1;
    }
    if(flag==1)
    {
        printf("警告!!!该学号已存在!!!请返回修改!!!");
        return;
    }
    strcpy(students[length].name,op);
    strcpy(students[length].id,opp);
    printf("学生班级:");
    scanf("%s",students[length].great);
    printf("请输入学生性别:");
    scanf("%s",students[length].sex);
    printf("语文成绩:");
    scanf("%d",&students[length].Y);
    printf("数学成绩:");
    scanf("%d",&students[length].M);
    printf("英语成绩:");
    scanf("%d",&students[length].E);
    students[length].all=students[length].Y+students[length].M+students[length].E;
    students[length].ave=((float)(students[length].Y+students[length].M+students[length].E)/3);
    length++;
    }
}

6.删除学生信息

根据学生学号对学生信息进行删除

void del()//删除学生信息
{
    printf("请输入该学生的学号:\n");
    char op[50];
    int flag=0;
    scanf("%s",op);
    for(int i=0;i<length;i++)
    {
        if(strcmp(students[i].id,op)==0)
        {
            for(int j=i;j<length-1;j++)
                students[j]=students[j+1];
            flag=1;
            length--;
            break;
        }
    }
    if(!flag)printf("不存在该学号学生!!!请重新输入!!!\n");
}

7.修改学生信息

void edit()//修改学生信息
{
    printf("请输入该学生学号:\n");
    char op[50];
    char opp[50];
    int flag=0;
    scanf("%s",op);
    for(int i=0;i<length;i++)
    {
        if(strcmp(students[i].id,op)==0)
        {
            printf("请输入该学生新的信息:\n");

            strcpy(students[i].id,opp);
            printf("班级:");
            scanf("%s",students[i].great);
            printf("性别:");
            scanf("%s",students[i].sex);
            printf("语文成绩:");
            scanf("%d",&students[i].Y);
            printf("数学成绩:");
            scanf("%d",&students[i].M);
            printf("英语成绩:");
            scanf("%d",&students[i].E);
            students[i].ave=(students[i].Y+students[i].E+students[i].M)/3;
            students[i].all=students[i].Y+students[i].E+students[i].M;
            flag=1;
            break;
        }
    }
    if(flag==0)printf("该学生不存在\n");
}

8.查询学生信息

根据学号对学生信息进行查询

void findid()//按照学号索引查询
{
    printf("请输入学生学号:\n");
    char op[15];
    int flag=0;
    scanf("%s",op);
    for(int i=0;i<length;i++)
    {
        if(strcmp(students[i].id,op)==0)
        {
            printf("------------------------------------------------------------------------------------------------------------------------\n");
            printf("学生姓名|\t学号\t|\t班级\t| 性别 | 语文成绩 | 数学成绩 | 英语成绩 | 总成绩 \n");
            printf("\n%s\t|  %s\t|  %s\t|  %s  |    %d    |    %d    |    %d    |    %d\n",students[i].name,students[i].id,students[i].great,students[i].sex,students[i].Y,students[i].M,students[i].E,students[i].all);
            printf("------------------------------------------------------------------------------------------------------------------------\n");
            flag=1;
        }
    }
    if(!flag)
    {
        printf("不存在该学号的学生\n");
    }
}

9.总分降序排序学生成绩

通过冒泡排序对学生信息按照学生总成绩从高到低进行排序

void mysort()//总分降序排序
{
    student vis;
    for(int i=0;i<length;i++)
        for(int j=0;j<length-i-1;j++)
    {
        if(students[j].all<students[j+1].all)
        {
            vis=students[j];
            students[j]=students[j+1];
            students[j+1]=vis;
        }
    }
    show();
}

10.统计学生平均成绩

void avegxs()//查询学生成绩平均值
{
    printf("------------------------------------------------------------------------------------------------------------------------\n");
        printf("学生姓名|\t学号\t|\t班级\t| 性别 | 语文成绩 | 数学成绩 | 英语成绩 | 平均成绩 \n");
        printf("------------------------------------------------------------------------------------------------------------------------\n");
    for(int i=0;i<length;i++)
    {
        //if(students[i].ave>90)
        //{

            printf("\n%s\t|  %s\t|  %s\t|  %s  |    %d    |    %d    |    %d    |    %.2lf    \n",students[i].name,students[i].id,students[i].great,students[i].sex,students[i].Y,students[i].M,students[i].E,students[i].all*1.0/length);
            printf("------------------------------------------------------------------------------------------------------------------------\n");

        //}
    }
}

11.统计每科平均成绩

void avegkm()//查询各门平均值
{
    printf("------------------------------------------------------------------------------------------------------------------------\n");
        printf("语文成绩 | 数学成绩 | 英语成绩 \n");
        printf("------------------------------------------------------------------------------------------------------------------------\n");
    double ans1=0,ans2=0,ans3=0;
    for(int i=0;i<length;i++)
    {
        ans1+=students[i].Y;
        ans2+=students[i].M;
        ans3+=students[i].E;
    }
    ans1=ans1*1.0/length;
    ans2=ans2*1.0/length;
    ans3=ans3*1.0/length;
    printf("\n%.2lf    |    %.2lf    |    %.2lf    \n",ans1,ans2,ans3);
    printf("------------------------------------------------------------------------------------------------------------------------\n");

}

12.统计信息录入系统中人数

void cens()
{
    printf("系统中共有%d个人的信息\n",length);
}

13.输出总成绩最高的学生信息

void maxn()//查询学生成绩最高的学生信息
{
    int vis=students[0].all;
    for(int i=1;i<length;i++)
    {
        if(students[i].all>vis)vis=students[i].all;
    }
    for(int i=0;i<length;i++)
    {
        if(students[i].all==vis)
        {
        printf("------------------------------------------------------------------------------------------------------------------------\n");
        printf("学生姓名|\t学号\t|\t班级\t| 性别 | 语文成绩 | 数学成绩 | 英语成绩 | 总成绩 \n");
        printf("------------------------------------------------------------------------------------------------------------------------\n");
        printf("\n%s\t|  %s\t|  %s\t|  %s  |    %d    |    %d    |    %d    |    %d    \n",students[i].name,students[i].id,students[i].great,students[i].sex,students[i].Y,students[i].M,students[i].E,students[i].all);
        printf("------------------------------------------------------------------------------------------------------------------------\n");

        }
    }
}

14.从文件中读取数据(*注意这里的文件位置要改为自己的)

void load()//从文件读取学生信息到内存
{
    FILE *fp=fopen("D:\\学生成绩管理系统\\xscjglxt.txt","r");
    if(fp==NULL)
    {
        printf("文件打开失败\n");

    }
    int i=0;
    while(fscanf(fp,"%s %s %s %s %d %d %d %f %d\n",
               students[i].id,
               students[i].name,
               students[i].great,
               students[i].sex,
               &students[i].Y,
               &students[i].M,
               &students[i].E,
               &students[i].ave,
               &students[i].all)==9)
    {
        i++;

    }
    length=i;
    fclose(fp);
}

15.将数据保存至文件(*注意这里的文件位置要改为自己的)

void save()//保存学生信息到文件
{
    FILE *fp=fopen("D:\\学生成绩管理系统\\xscjglxt.txt","w");
    for(int i=0;i<length;i++)
    {
        fprintf(fp,"%s %s %s %s %d %d %d %f %d\n",
               students[i].id,
               students[i].name,
               students[i].great,
               students[i].sex,
               students[i].Y,
               students[i].M,
               students[i].E,
               students[i].ave,
               students[i].all);
    }
    fclose(fp);
}

16.源代码

这是博主在两年前大一时写的内容,代码中还有许多不足的地方可以优化,请大佬们谅解。
有问题欢迎联系博主QQ:1187574742

#include<stdio.h>
#include<string.h>
void regist();//登录界面
void findid();//按照学号索引查询
void show();//查看所有的学生成绩信息
void del();//删除学生信息
void edit();//修改学生信息
void add();//添加学生信息
void mysort();//总分降序排序
void avegxs();//查询学生成绩平均值大于90的学生成绩
void avegkm();//查询学生成绩平均值小于60的学生成绩
void save();//保存学生信息到文件
void load();//从文件读取学生信息到内存
void menu();//菜单总录入人数
void maxn();//输出系统中总成绩最大的学生信息
typedef struct student
{
    char id[15];
    char name[50];
    char sex[10];
    char great[50];
    int E,M,Y;
    float ave;
    int all;
}student;

student students[100];
static int length;

int main()
{

    printf("登陆成功!");
    load();//从文件中读取信息到内侧
    menu();//菜单
}

void regist()//登录界面
{
    printf("\n\n\t*****************************学生信息管理系统******************************\n");
	printf("\t*                              1.显示学生信息                             *|\n");
	printf("\t*                              2.增加学生信息                             *|\n");
	printf("\t*                              3.删除学生信息                             *|\n");
	printf("\t*                              4.修改学生信息                             *|\n");
	printf("\t*                              5.查询学生信息                             *|\n");
	printf("\t*                              6.总分降序排序学生成绩                     *|\n");
	printf("\t*                              7.统计学生平均成绩                         *|\n");
	printf("\t*                              8.统计每科平均成绩                         *|\n");
    printf("\t*                              9.统计信息录入系统中人数                   *|\n");
    printf("\t*                              10.输出总成绩最高的学生信息                *|\n");
	printf("\t*                              11.退出                                    *|\n");
	printf("\t***************************************************************************\n");
	printf("请输入你要进行的操作:\n");
}
void findid()//按照学号索引查询
{
    printf("请输入学生学号:\n");
    char op[15];
    int flag=0;
    scanf("%s",op);
    for(int i=0;i<length;i++)
    {
        if(strcmp(students[i].id,op)==0)
        {
            printf("------------------------------------------------------------------------------------------------------------------------\n");
            printf("学生姓名|\t学号\t|\t班级\t| 性别 | 语文成绩 | 数学成绩 | 英语成绩 | 总成绩 \n");
            printf("\n%s\t|  %s\t|  %s\t|  %s  |    %d    |    %d    |    %d    |    %d\n",students[i].name,students[i].id,students[i].great,students[i].sex,students[i].Y,students[i].M,students[i].E,students[i].all);
            printf("------------------------------------------------------------------------------------------------------------------------\n");
            flag=1;
        }
    }
    if(!flag)
    {
        printf("不存在该学号的学生\n");
    }
}
void show()//查看所有的学生成绩信息
{
    printf("------------------------------------------------------------------------------------------------------------------------\n");
        printf("学生姓名|\t学号\t|\t班级\t| 性别 | 语文成绩 | 数学成绩 | 英语成绩 | 总成绩 \n");
        printf("------------------------------------------------------------------------------------------------------------------------\n");
    for(int i =0;i<length;i++)
    {


        printf("\n%s\t|  %s\t|  %s\t|  %s  |    %d    |    %d    |    %d    |    %d    \n",students[i].name,students[i].id,students[i].great,students[i].sex,students[i].Y,students[i].M,students[i].E,students[i].all);
        printf("------------------------------------------------------------------------------------------------------------------------\n");

    }
}
void del()//删除学生信息
{
    printf("请输入该学生的学号:\n");
    char op[50];
    int flag=0;
    scanf("%s",op);
    for(int i=0;i<length;i++)
    {
        if(strcmp(students[i].id,op)==0)
        {
            for(int j=i;j<length-1;j++)
                students[j]=students[j+1];
            flag=1;
            length--;
            break;
        }
    }
    if(!flag)printf("不存在该学号学生!!!请重新输入!!!\n");
}
void edit()//修改学生信息
{
    printf("请输入该学生学号:\n");
    char op[50];
    char opp[50];
    int flag=0;
    scanf("%s",op);
    for(int i=0;i<length;i++)
    {
        if(strcmp(students[i].id,op)==0)
        {
            printf("请输入该学生新的信息:\n");

            strcpy(students[i].id,opp);
            printf("班级:");
            scanf("%s",students[i].great);
            printf("性别:");
            scanf("%s",students[i].sex);
            printf("语文成绩:");
            scanf("%d",&students[i].Y);
            printf("数学成绩:");
            scanf("%d",&students[i].M);
            printf("英语成绩:");
            scanf("%d",&students[i].E);
            students[i].ave=(students[i].Y+students[i].E+students[i].M)/3;
            students[i].all=students[i].Y+students[i].E+students[i].M;
            flag=1;
            break;
        }
    }
    if(flag==0)printf("该学生不存在\n");
}
void add()//添加学生信息
{
    int flag=0;
    if(length>=100)
    {
        printf("该班级人数已满!!!");
    }
    else{
    printf("请输入学生信息:\n");
    printf("学生姓名:");
    char op[50];
    scanf("%s",op);
    printf("学生学号:");
    char opp[50];
    scanf("%s",opp);
    for(int i=0;i<length;i++)
    {
        if(strcmp(opp,students[i].id)==0)flag=1;
    }
    if(flag==1)
    {
        printf("警告!!!该学号已存在!!!请返回修改!!!");
        return;
    }
    strcpy(students[length].name,op);
    strcpy(students[length].id,opp);
    printf("学生班级:");
    scanf("%s",students[length].great);
    printf("请输入学生性别:");
    scanf("%s",students[length].sex);
    printf("语文成绩:");
    scanf("%d",&students[length].Y);
    printf("数学成绩:");
    scanf("%d",&students[length].M);
    printf("英语成绩:");
    scanf("%d",&students[length].E);
    students[length].all=students[length].Y+students[length].M+students[length].E;
    students[length].ave=((float)(students[length].Y+students[length].M+students[length].E)/3);
    length++;
    }
}
void mysort()//总分降序排序
{
    student vis;
    for(int i=0;i<length;i++)
        for(int j=0;j<length-i-1;j++)
    {
        if(students[j].all<students[j+1].all)
        {
            vis=students[j];
            students[j]=students[j+1];
            students[j+1]=vis;
        }
    }
    show();
}
void maxn()//查询学生成绩最高的学生信息
{
    int vis=students[0].all;
    for(int i=1;i<length;i++)
    {
        if(students[i].all>vis)vis=students[i].all;
    }
    for(int i=0;i<length;i++)
    {
        if(students[i].all==vis)
        {
        printf("------------------------------------------------------------------------------------------------------------------------\n");
        printf("学生姓名|\t学号\t|\t班级\t| 性别 | 语文成绩 | 数学成绩 | 英语成绩 | 总成绩 \n");
        printf("------------------------------------------------------------------------------------------------------------------------\n");
        printf("\n%s\t|  %s\t|  %s\t|  %s  |    %d    |    %d    |    %d    |    %d    \n",students[i].name,students[i].id,students[i].great,students[i].sex,students[i].Y,students[i].M,students[i].E,students[i].all);
        printf("------------------------------------------------------------------------------------------------------------------------\n");

        }
    }
}
void avegxs()//查询学生成绩平均值
{
    printf("------------------------------------------------------------------------------------------------------------------------\n");
        printf("学生姓名|\t学号\t|\t班级\t| 性别 | 语文成绩 | 数学成绩 | 英语成绩 | 平均成绩 \n");
        printf("------------------------------------------------------------------------------------------------------------------------\n");
    for(int i=0;i<length;i++)
    {
        //if(students[i].ave>90)
        //{

            printf("\n%s\t|  %s\t|  %s\t|  %s  |    %d    |    %d    |    %d    |    %.2lf    \n",students[i].name,students[i].id,students[i].great,students[i].sex,students[i].Y,students[i].M,students[i].E,students[i].all*1.0/length);
            printf("------------------------------------------------------------------------------------------------------------------------\n");

        //}
    }
}
void avegkm()//查询各门平均值
{
    printf("------------------------------------------------------------------------------------------------------------------------\n");
        printf("语文成绩 | 数学成绩 | 英语成绩 \n");
        printf("------------------------------------------------------------------------------------------------------------------------\n");
    double ans1=0,ans2=0,ans3=0;
    for(int i=0;i<length;i++)
    {
        ans1+=students[i].Y;
        ans2+=students[i].M;
        ans3+=students[i].E;
    }
    ans1=ans1*1.0/length;
    ans2=ans2*1.0/length;
    ans3=ans3*1.0/length;
    printf("\n%.2lf    |    %.2lf    |    %.2lf    \n",ans1,ans2,ans3);
    printf("------------------------------------------------------------------------------------------------------------------------\n");

}
void save()//保存学生信息到文件
{
    FILE *fp=fopen("D:\\学生成绩管理系统\\xscjglxt.txt","w");
    for(int i=0;i<length;i++)
    {
        fprintf(fp,"%s %s %s %s %d %d %d %f %d\n",
               students[i].id,
               students[i].name,
               students[i].great,
               students[i].sex,
               students[i].Y,
               students[i].M,
               students[i].E,
               students[i].ave,
               students[i].all);
    }
    fclose(fp);
}
void load()//从文件读取学生信息到内存
{
    FILE *fp=fopen("D:\\学生成绩管理系统\\xscjglxt.txt","r");
    if(fp==NULL)
    {
        printf("文件打开失败\n");

    }
    int i=0;
    while(fscanf(fp,"%s %s %s %s %d %d %d %f %d\n",
               students[i].id,
               students[i].name,
               students[i].great,
               students[i].sex,
               &students[i].Y,
               &students[i].M,
               &students[i].E,
               &students[i].ave,
               &students[i].all)==9)
    {
        i++;

    }
    length=i;
    fclose(fp);
}
void cens()
{
    printf("系统中共有%d个人的信息\n",length);
}
void menu()//菜单
{
	while(1)
	{
	    regist();
	    int n;
        scanf("%d",&n);
        switch(n)
        {
            case 1:
                show();
                break;
            case 2:
                add();
                break;
            case 3:
                del();
                break;
            case 4:
                edit();
                break;
            case 5:
                findid();
                break;
            case 6:
                mysort();
                break;
            case 7:
                avegxs();
                break;
            case 8:
                avegkm();
                break;
            case 9:
                cens();
                break;
            case 10:
                maxn();
                break;
            case 11:
                exit(0);

        }
        save();
        printf("按任意键继续\n");
        getchar();
        getchar();
        system("cls");
	}

}




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

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

相关文章

Spring Security 重点解析

Spring Security 重点解析 文章目录 Spring Security 重点解析1. 简介2. 依赖3. 登录认证3.1 登录校验流程3.2 Spring Security 默认登录的原理3.2.1 Spring Security 完整流程3.2.2 登录逻辑探究 3.3 自定义改动3.3.1 自定义用户密码校验3.3.2 自定义 UserDetails 获取方式 F1…

C++多线程同步(上)

多线程同步 引言总述详情互斥锁示例运行结果分析条件变量示例一实现分析优化运行结果示例二实现代码运行结果示例三实现代码运行结果读写锁示例实现代码注意分析运行结果附言实现运行结果运行结果个人心得引言 项目中使用多线程,会遇到两种问题,一种是对共享资源的访问时需要…

kafka和ZK的关系

zk相当于是kafka的一个基础设施 Kafka是一种高吞吐量、可扩展的分布式发布订阅消息系统&#xff0c;ZooKeeper是一个分布式协调服务&#xff0c;用于管理和协调分布式系统中的各种资源 Zookeeper&#xff1a;管理broker&#xff0c;consumer 创建broker后&#xff0c;向zk注册…

Redis和Mysql如何保证数据一致性

一般情况下&#xff0c;Redis用来实现应用和数据库之间读操作的缓存层&#xff0c;主要目的是减少数据 库IO&#xff0c;还可以提升数据的IO性能。 这是它的整体架构。 当应用程序需要去读取某个数据的时候&#xff0c;首先会先尝试去Redis里面加载&#xff0c;如果命中就 直…

基于Python3的数据结构与算法 - 04 快速排序

一、快速排序思路 快速排序特点&#xff1a;快 步骤&#xff1a; 取一个元素p&#xff08;第一个元素&#xff09;&#xff0c;使元素p归为&#xff1b;列表被p分成两部分&#xff0c;左边都比p小&#xff0c;右边都比p大&#xff1b;递归完成排序。 因此我们可以得到快速排…

kali xrdp

Kali Linux 使用远程桌面连接——xrdp&xfce_kali xfce桌面-CSDN博客 Ubuntu/Debian/Kali xrdp远程桌面黑屏/空屏/无画面解决办法 - 知乎 (zhihu.com) sudo apt-get install xrdp -y sudo apt-get install xfce4 -ysudo systemctl enable xrdp --now systemctl status xrd…

自动化行业文件数据\资料防泄密软件——天锐绿盾|@德人合科技

天锐绿盾是一款自动化行业文件数据防泄密软件&#xff0c;由德人合科技提供。该软件采用动态加解密技术&#xff0c;能够有效防止公司内部数据泄密&#xff0c;同时支持各种文件格式加密&#xff0c;如CAD、OFFICE、PDF、图纸等。 PC端&#xff1a;https://isite.baidu.com/sit…

C语言-数组指针与指针数组

一、简介 对于使用C语言开发的人来说&#xff0c;指针&#xff0c;大家都是非常熟悉的。数组&#xff0c;大家也同样熟悉。但是这两个组合到一起的话&#xff0c;很多人就开始蒙圈了。这篇文章&#xff0c;就详细的介绍一下这两个概念。 指针数组和数组指针&#xff0c;听起来非…

为什么0.1+0.2不等于0.3

一、JS内部的计算是以二进制形式进行的 js里整数和小数转为二进制形式的方法是不一样的&#xff1a; 二、Number类型使用IEEE754标准64位存储 双精度浮点数&#xff08;double类型&#xff09;为每个数分配64位空间&#xff0c;并以科学计数法的方式存储&#xff1a; 那么对于…

如何使用Inno Setup制作Unity构建程序的Windows安装程序

1. 准备 &#xff08;1&#xff09;准备好Unity构建的程序集合 必须包括&#xff1a; Data文件夹&#xff08;xxx_Data&#xff09; Mono文件夹&#xff08;MonoBleedingEdge&#xff09; 打包的应用程序文件&#xff08;xxx.exe&#xff09; Unity播放器dll文件&#xff…

centos7部署nfs+keepalived+drbd

一、项目需求描述 现在使用的架构是nfskeepalivedrsyncsersync&#xff0c;目前这套架构存在主从nfs节点数据同步不一致问题&#xff0c;大概会有 120s左右的数据延长同步时间&#xff0c;需要提供优化的自动化方案。 二、现有方案缺点 1、切换不能保证主从节点数据一致。 2、…

每日面经02

1.用过哪些集合&#xff1f;hashmap扩容&#xff1f;如果<string>如何查找&#xff1f;散列函数用什么散列为什么大小是2的幂次&#xff1f;如果是key 为abc怎么散列&#xff1f;如何知道key不存在&#xff1f;默认大小是否可以修改 &#xff0c;改为30 、32 可以不&…

【MySQL初阶】索引与事务

1. 索引 1.1 索引基本概念 1.1.1 索引介绍 索引(index)&#xff1a;是一种特殊的文件&#xff0c;包含着对数据表里所有记录的引用指针。可以对表中的一列或者多列创建索引&#xff0c;并指定索引的类型&#xff0c;各类索引有各自的数据结构实现。&#xff08;具体细节在My…

蓝桥杯DP算法——区间DP(C++)

根据题意要求的是将石子合并的最小权值&#xff0c;我们可以根据DP思想使用二维数组f[i,j]来存放所有从第i堆石子到第j堆石子合并成一堆石子的合并方式。 然后由第二个图所示&#xff0c;我们可以将i到j区间分成两个区间&#xff0c;因为将i到j合并成一个区间的前一步一定是合…

DecBBox(Decode Bounding Box)的软件实现

在深度学习中&#xff0c;"decbbox" 通常指的是 "Decode Bounding Box"&#xff0c;即解码边界框。这是在目标检测任务中常见的一个步骤&#xff0c;用于将网络输出的边界框参数&#xff08;通常是相对于某种参考框的偏移量或者缩放参数&#xff09;转换为…

ico图标是什么意思?ico图标怎么生成?如何在线制作ico图标?

我们在浏览器浏览网页时或收藏某网页时&#xff0c;经常看到有些网页标题前面有一个图标&#xff0c;有些是logo&#xff0c;有些是其他图标&#xff0c;其实这种图标就是网站的favicon.ico图标&#xff0c;也就是我们平时大家所说ico图标。 什么是favicon.ico图标&#xff1f…

贪心/树形dp

思路&#xff1a; 因为如果红色节点的子树中如果有红色节点的话&#xff0c;那么该子树对其不会造成影响&#xff0c;不用考虑&#xff0c;因此我们在考虑每个红色节点时&#xff0c;不考虑其红色子树。那么如图&#xff0c;对每个红色节点答案有贡献的就是其所有非红色子节点…

一个project作为另一个project的Module

android如何引入另一个工程,Android studio 一个项目引入另一个项目作为Libary-CSDN博客 1.file-new-import module 2.

mysql 分表实战

本文主要介绍基于range分区的相关 1、业务需求&#xff0c;每日160w数据&#xff0c;每月2000w;解决大表数据读写性能问题。 2、数据库mysql 8.0.34&#xff0c;默认innerDB;mysql自带的逻辑分表 3、分表的目的:解决大表性能差&#xff0c;小表缩小查询单位的特点(其实优化的精…

不做内容引流,你凭什么在互联网上赚钱?

孩子们放寒假了&#xff0c;待在家里不是看电视&#xff0c;就是拿着手机刷视频&#xff0c;脸上是各种欢快和满足。只是一切换到写作业模式&#xff0c;孩子是各种痛苦表情包&#xff0c;家长则是使出浑身解数&#xff0c;上演亲子大战。可见娱乐常常让人愉悦&#xff0c;而学…