学生信息管理系统(静态版)

news/2024/7/22 12:14:17/文章来源:https://blog.csdn.net/2401_83427936/article/details/139279265

系统的主界面     系统的操作指令  结构体的创建

目录

1、学生信息的输入

2、学生信息的添加

3、学生信息的删除

4、学生信息的查找,找到并显示

*判断查找函数3和4和5共用

5、学生信息的修改

6、显示学生的信息

7、学生成绩的排序,并打印(代码中有快排和冒泡都行)

综合代码


1、学生信息的输入2、学生信息的添加3、学生信息的删除 4、学生信息的查找

5、学生信息的修改6、显示学生的信息7、学生成绩的排序 0、退出系统

结构体学生的信息和信息系统结构体(1000个空间),静态内存

//结构体:学生的信息
typedef struct Student
{char name[20];//名字int num;           //学号int score[3];         //成绩//语数英
}Stu;//信息系统结构体(1000个空间),静态
typedef struct System
{Stu data[100];//一共的空间int ren;           //人数
}Sy

系统的主界面     系统的操作指令 菜单

//菜单,系统主界面
void menu()
{printf("                            \n"); printf("*********学生管理系统********\n");printf("****************************\n");printf("***1:信息输入   2:信息删除***\n");printf("***3:信息查找   4:信息修改***\n");printf("***5:显示信息   6:信息排序***\n");printf("***7:添加信息   0:退出系统***\n");printf("****************************\n");
}

main函数

int main()
{//定义管理系统Sy con;//初始化InitSy(&con);//初始化管理系统int input = 0;//do{menu();//菜单,系统主界面scanf("%d", &input);//输入switch (input){case 1://1、学生信息的输入Stuxinxi(&con);break;case 2://2、学生信息的添加AddSy(&con);break;case 3://3、学生信息的删除 DelSy(&con);break;case 4://4、学生信息的查找SeekSy(&con);break;case 5://5、学生信息的修改ModifySy(&con);break;case 6://6、显示学生的信息ShowSy(&con);break;case 7://7、学生成绩的排序SortSy(&con);break;case 0:printf("退出学生信息管理系统\n");break;default:printf("选择错误,重新选择\n");break;}} while (input);return 0;
}

初始化管理系统函数

/初始化管理系统函数
void InitSy(Sy* pc)
{pc->ren = 0;memset(pc->data, 0, sizeof(pc->data));//单位字节,因为传的地址是整个数组的地址所以可以直接用sizeof。
}

1、学生信息的输入

//1、学生信息的输入
void Stuxinxi(Sy* pc)
{int n = 0;printf("输入相输入成绩的人数->");scanf("%d", &n);for (int i = 0; i < n; i++){printf("请输入第%d名学生姓名>>", i + 1);scanf("%s", pc->data[i].name);printf("请输入第%d名学生学号>>", i + 1);scanf("%d", &pc->data[i].num);printf("请输入第%d名学生语文成绩>>", i + 1);scanf("%d", &pc->data[i].score[0]);printf("请输入第%d名学生数学成绩>>", i + 1);scanf("%d", &pc->data[i].score[1]);printf("请输入第%d名学生英语成绩>>", i + 1);scanf("%d", &pc->data[i].score[2]);printf("\n");}pc->ren = n;
}

2、学生信息的添加

//2、学生信息的添加
void AddSy(Sy*pc)
{if (pc->ren == 1000){printf("成员已满,无法录入新的信息\n");return;}printf("请输入学生姓名>>");scanf("%s", pc->data[pc->ren].name);printf("请输入学生学号>>");scanf("%d", &pc->data[pc->ren].num);printf("请输入学生语文成绩>>");scanf("%d", &pc->data[pc->ren].score[0]);printf("请输入学生数学成绩>>");scanf("%d", &pc->data[pc->ren].score[1]);printf("请输入学生英语成绩>>");scanf("%d", &pc->data[pc->ren].score[2]);printf("添加成功\n");pc->ren++;//人数加一
}

3、学生信息的删除

//查找函数通过名字,要用在删除,和修改上面
int  FindByname(Sy*pc,char*name)
{for (int i = 0; i < pc->ren; i++){if (strcmp(name, pc->data[i].name) == 0)//字符比较函数{return i;//直接返回下标为了让其后面的信息更好覆盖}}//没找到return -1;
}//3、学生信息的删除(用名字删除)
void DelSy(Sy* pc)
{//要想删除信息,必须要找到那个人的信息//找char name[20];printf("输入你想删除学生信息的姓名>>");scanf("%s", name);int n = FindByname(pc, name);//要删除人的下标if (n == -1){printf("查无此人\n");return;}//不等于-1,也就是找到了//找到后直接覆盖memmove(pc->data + n, pc->data + n + 1, sizeof(int) * (pc->ren - n));//要传指针!!!!!!!data[n]不是指针//for (int j = n; j < pc->ren - 1; j++)//人-1,为了防止空间溢出//{//	pc->data[j] = pc->data[j + 1];//}pc->ren--;//删除后人数减一printf("删除成功\n");
}

4、学生信息的查找,找到并显示

//查找函数通过名字,要用在删除,和修改上面
int  FindByname(Sy*pc,char*name)
{for (int i = 0; i < pc->ren; i++){if (strcmp(name, pc->data[i].name) == 0)//字符比较函数{return i;//直接返回下标为了让其后面的信息更好覆盖}}//没找到return -1;
}//4、学生信息的查找,找到并显示
void SeekSy(Sy* pc)
{char name[20];printf("请输入你想查找学生的姓名>>");scanf("%s", name);int i = FindByname(pc, name);//不等于-1,就是找到了if (i == -1){printf("没找到\n");return;}//找到了,打印printf("%-10s%-15s%-10s%-10s%-10s%-10s\n", "姓名", "学号", "语文成绩", "数学成绩", "英语成绩", "总成绩");int k = pc->data[i].score[0] + pc->data[i].score[1] + pc->data[i].score[2];//总成绩printf("%-10s%-15d%-10d%-10d%-10d%-10d\n", pc->data[i].name, pc->data[i].num, pc->data[i].score[0], pc->data[i].score[1], pc->data[i].score[2], k);
}

简便::4学生信息的查找和3学生信息的删除(用名字删除)共用的查找函数(判断字符串相不相等函数)

//查找函数通过名字,要用在删除,和修改上面,因为查找和修改和删除都需要先找到这个人

*判断查找函数3和4和5共用

//3和4和5共用//查找函数通过名字,要用在删除,和修改上面(判断字符串相不相等函数)
int  FindByname(Sy*pc,char*name)
{for (int i = 0; i < pc->ren; i++){if (strcmp(name, pc->data[i].name) == 0)//字符比较函数{return i;//直接返回下标为了让其后面的信息更好覆盖}}//没找到return -1;
}

5、学生信息的修改

//查找函数通过名字,要用在删除,和修改上面,因为修改和删除都需要先找到这个人(判断字符串相不相等函数)
int  FindByname(Sy*pc,char*name)
{for (int i = 0; i < pc->ren; i++){if (strcmp(name, pc->data[i].name) == 0)//字符比较函数{return i;//直接返回下标为了让其后面的信息更好覆盖}}//没找到return -1;
}void ModifySy(Sy*pc)
{char name[20];printf("输入你想修改学生信息的名字>>");scanf("%s", name);int n = FindByname(pc, name);//n为-1,就是没是找到if (n == -1){printf("没找到\n");return;}//找到了printf("请重新输入学生姓名>>");scanf("%s", pc->data[n].name);printf("请重新输入学生学号>>");scanf("%d", &pc->data[n].num);printf("请重新输入学生语文成绩>>");scanf("%d", &pc->data[n].score[0]);printf("请重新输入学生数学成绩>>");scanf("%d", &pc->data[n].score[1]);printf("请重新输入学生英语成绩>>");scanf("%d", &pc->data[n].score[2]);printf("修改成功\n");
}

6、显示学生的信息

//6、显示学生的信息
void ShowSy(Sy* pc)
{printf("%-10s%-15s%-10s%-10s%-10s%-10s\n", "姓名","学号","语文成绩","数学成绩","英语成绩","总成绩");for (int i = 0; i < pc->ren; i++){int k = pc->data[i].score[0] + pc->data[i].score[1] + pc->data[i].score[2];//总成绩printf("%-10s%-15d%-10d%-10d%-10d%-10d\n", pc->data[i].name, pc->data[i].num, pc->data[i].score[0], pc->data[i].score[1],pc->data[i].score[2], k);}
}

7、学生成绩的排序,并打印(代码中有快排和冒泡都行)

//7、学生成绩的排序,并打印
void SortSy(Sy* pc)
{printf("                               \n");printf("*********1:语文成绩排序********\n");printf("*********2:数学成绩排序********\n");printf("*********3:英语成绩排序********\n");printf("*********4:总成绩排序 ********\n");int w = 0;scanf("%d", &w);if (w == 1){qsort(pc->data, pc->ren, sizeof(pc->data[0]), paixu1);printf("语文成绩排序\n");printf("%-10s%-15s%-10s%-10s%-10s%-10s\n", "姓名", "学号", "语文成绩", "数学成绩", "英语成绩", "总成绩");for (int i = 0; i < pc->ren; i++){int k = pc->data[i].score[0] + pc->data[i].score[1] + pc->data[i].score[2];//总成绩printf("%-10s%-15d%-10d%-10d%-10d%-10d\n", pc->data[i].name, pc->data[i].num, pc->data[i].score[0], pc->data[i].score[1], pc->data[i].score[2], k);}}if (w == 2){qsort(pc->data, pc->ren, sizeof(pc->data[0]), paixu2);printf("数学成绩排序\n");printf("%-10s%-15s%-10s%-10s%-10s%-10s\n", "姓名", "学号", "语文成绩", "数学成绩", "英语成绩", "总成绩");for (int i = 0; i < pc->ren; i++){int k = pc->data[i].score[0] + pc->data[i].score[1] + pc->data[i].score[2];//总成绩printf("%-10s%-15d%-10d%-10d%-10d%-10d\n", pc->data[i].name, pc->data[i].num, pc->data[i].score[0], pc->data[i].score[1], pc->data[i].score[2], k);}}if (w == 3){qsort(pc->data, pc->ren, sizeof(pc->data[0]), paixu3);printf("英语成绩排序\n");printf("%-10s%-15s%-10s%-10s%-10s%-10s\n", "姓名", "学号", "语文成绩", "数学成绩", "英语成绩", "总成绩");for (int i = 0; i < pc->ren; i++){int k = pc->data[i].score[0] + pc->data[i].score[1] + pc->data[i].score[2];//总成绩printf("%-10s%-15d%-10d%-10d%-10d%-10d\n", pc->data[i].name, pc->data[i].num, pc->data[i].score[0], pc->data[i].score[1], pc->data[i].score[2], k);}}//冒泡if (w == 4){printf("总成绩成绩排序\n");printf("%-10s%-15s%-10s%-10s%-10s%-10s\n", "姓名", "学号", "语文成绩", "数学成绩", "英语成绩", "总成绩");for (int p = 0; p < pc->ren - 1; p++){for (int j = 0; j < pc->ren - 1 - p; j++){int t1 = pc->data[j].score[0] + pc->data[j].score[1] + pc->data[j].score[2];int t2 = pc->data[j+1].score[0] + pc->data[j+1].score[1] + pc->data[j+1].score[2];if (t1 < t2){Stu tmp = pc->data[j];pc->data[j] = pc->data[j + 1];pc->data[j + 1] = tmp;}}}//打印for (int i = 0; i < pc->ren; i++){int k = pc->data[i].score[0] + pc->data[i].score[1] + pc->data[i].score[2];//总成绩printf("%-10s%-15d%-10d%-10d%-10d%-10d\n", pc->data[i].name, pc->data[i].num, pc->data[i].score[0], pc->data[i].score[1], pc->data[i].score[2], k);}}
}

综合代码

#include<stdio.h>
#include<string.h>
#include<stdlib.h>//qsort的头文件 
/*
系统的主界面     系统的操作指令1、学生信息的录入2、学生信息的添加3、学生信息的删除 4、学生信息的查找5、学生信息的修改6、显示学生的信息7、学生成绩的排序学生成绩的排序
*///结构体:学生的信息
typedef struct Student
{char name[20];//名字int num;           //学号int score[3];         //成绩//语数英
}Stu;//信息系统结构体(1000个空间),静态
typedef struct System
{Stu data[1000];//一共的空间int ren;           //人数
}Sy;//初始化管理系统函数
void InitSy(Sy* pc)
{pc->ren = 0;memset(pc->data, 0, sizeof(pc->data));//单位字节,因为传的地址是整个数组的地址所以可以直接用sizeof。
}//菜单,系统主界面
void menu()
{printf("                                                   \n"); printf("*************学生管理系统****************\n");printf("*****************************************\n");printf("***1:学生信息的输入   2:学生信息的添加***\n");printf("***3:学生信息的删除   4:学生信息的查找***\n");printf("***5:学生信息的修改   6:显示学生的信息***\n");printf("***7:学生成绩的排序   0:退出系统      ***\n");printf("*****************************************\n");
}//2、学生信息的添加
void AddSy(Sy*pc)
{if (pc->ren == 1000){printf("成员已满,无法录入新的信息\n");return;}printf("请输入学生姓名>>");scanf("%s", pc->data[pc->ren].name);printf("请输入学生学号>>");scanf("%d", &pc->data[pc->ren].num);printf("请输入学生语文成绩>>");scanf("%d", &pc->data[pc->ren].score[0]);printf("请输入学生数学成绩>>");scanf("%d", &pc->data[pc->ren].score[1]);printf("请输入学生英语成绩>>");scanf("%d", &pc->data[pc->ren].score[2]);printf("添加成功\n");pc->ren++;//人数+1
}//6、显示学生的信息
void ShowSy(Sy* pc)
{printf("%-10s%-15s%-10s%-10s%-10s%-10s\n", "姓名","学号","语文成绩","数学成绩","英语成绩","总成绩");for (int i = 0; i < pc->ren; i++){int k = pc->data[i].score[0] + pc->data[i].score[1] + pc->data[i].score[2];//总成绩printf("%-10s%-15d%-10d%-10d%-10d%-10d\n", pc->data[i].name, pc->data[i].num, pc->data[i].score[0], pc->data[i].score[1],pc->data[i].score[2], k);}
}//查找函数通过名字,要用在删除,和修改上面,因为修改和删除都需要先找到这个人(判断字符串相不相等函数)
//3和4和5共用
int  FindByname(Sy*pc,char*name)
{for (int i = 0; i < pc->ren; i++){if (strcmp(name, pc->data[i].name) == 0)//字符比较函数{return i;//直接返回下标为了让其后面的信息更好覆盖}}//没找到return -1;
}//3、学生信息的删除(用名字删除)
void DelSy(Sy* pc)
{//要想删除信息,必须要找到那个人的信息//找char name[20];printf("输入你想删除学生信息的姓名>>");scanf("%s", name);int n = FindByname(pc, name);//要删除人的下标if (n == -1){printf("查无此人\n");return;}//不等于-1,也就是找到了//找到后直接覆盖memmove(pc->data + n, pc->data + n + 1, sizeof(int) * (pc->ren - n));//要传指针!!!!!!!data[n]不是指针//for (int j = n; j < pc->ren - 1; j++)//人-1,为了防止空间溢出//{//	pc->data[j] = pc->data[j + 1];//}pc->ren--;//删除后人数减一printf("删除成功\n");
}//4、学生信息的查找,找到并显示
void SeekSy(Sy* pc)
{char name[20];printf("请输入你想查找学生的姓名>>");scanf("%s", name);int i = FindByname(pc, name);//不等于-1,就是找到了if (i == -1){printf("没找到\n");return;}//找到了,打印printf("%-10s%-15s%-10s%-10s%-10s%-10s\n", "姓名", "学号", "语文成绩", "数学成绩", "英语成绩", "总成绩");int k = pc->data[i].score[0] + pc->data[i].score[1] + pc->data[i].score[2];//总成绩printf("%-10s%-15d%-10d%-10d%-10d%-10d\n", pc->data[i].name, pc->data[i].num, pc->data[i].score[0], pc->data[i].score[1], pc->data[i].score[2], k);
}//5、学生信息的修改
void ModifySy(Sy*pc)
{char name[20];printf("输入你想修改学生信息的名字>>");scanf("%s", name);int n = FindByname(pc, name);//n为-1,就是没是找到if (n == -1){printf("没找到\n");return;}//找到了printf("请重新输入学生姓名>>");scanf("%s", pc->data[n].name);printf("请重新输入学生学号>>");scanf("%d", &pc->data[n].num);printf("请重新输入学生语文成绩>>");scanf("%d", &pc->data[n].score[0]);printf("请重新输入学生数学成绩>>");scanf("%d", &pc->data[n].score[1]);printf("请重新输入学生英语成绩>>");scanf("%d", &pc->data[n].score[2]);printf("修改成功\n");
}//放在快排的排序函数
//语文成绩排序
int paixu1(const void* p1, const void* p2)
{return ((Sy*)p2)->data->score[0] - ((Sy*)p1)->data->score[0];//->的优先级大于*,所以要加个括号
}
//数学成绩排序
int paixu2(const void* p1, const void* p2)
{return ((Sy*)p2)->data->score[1] - ((Sy*)p1)->data->score[1];//->的优先级大于*,所以要加个括号
}
//英语成绩排序
int paixu3(const void* p1, const void* p2)
{return ((Sy*)p2)->data->score[2] - ((Sy*)p1)->data->score[2];//->的优先级大于*,所以要加个括号
}//7、学生成绩的排序,并打印
void SortSy(Sy* pc)
{printf("                                                   \n");printf("*********1:语文成绩排序********\n");printf("*********2:数学成绩排序********\n");printf("*********3:英语成绩排序********\n");printf("*********4:总成绩排序 ********\n");int w = 0;scanf("%d", &w);if (w == 1){qsort(pc->data, pc->ren, sizeof(pc->data[0]), paixu1);printf("语文成绩排序\n");printf("%-10s%-15s%-10s%-10s%-10s%-10s\n", "姓名", "学号", "语文成绩", "数学成绩", "英语成绩", "总成绩");for (int i = 0; i < pc->ren; i++){int k = pc->data[i].score[0] + pc->data[i].score[1] + pc->data[i].score[2];//总成绩printf("%-10s%-15d%-10d%-10d%-10d%-10d\n", pc->data[i].name, pc->data[i].num, pc->data[i].score[0], pc->data[i].score[1], pc->data[i].score[2], k);}}if (w == 2){qsort(pc->data, pc->ren, sizeof(pc->data[0]), paixu2);printf("数学成绩排序\n");printf("%-10s%-15s%-10s%-10s%-10s%-10s\n", "姓名", "学号", "语文成绩", "数学成绩", "英语成绩", "总成绩");for (int i = 0; i < pc->ren; i++){int k = pc->data[i].score[0] + pc->data[i].score[1] + pc->data[i].score[2];//总成绩printf("%-10s%-15d%-10d%-10d%-10d%-10d\n", pc->data[i].name, pc->data[i].num, pc->data[i].score[0], pc->data[i].score[1], pc->data[i].score[2], k);}}if (w == 3){qsort(pc->data, pc->ren, sizeof(pc->data[0]), paixu3);printf("英语成绩排序\n");printf("%-10s%-15s%-10s%-10s%-10s%-10s\n", "姓名", "学号", "语文成绩", "数学成绩", "英语成绩", "总成绩");for (int i = 0; i < pc->ren; i++){int k = pc->data[i].score[0] + pc->data[i].score[1] + pc->data[i].score[2];//总成绩printf("%-10s%-15d%-10d%-10d%-10d%-10d\n", pc->data[i].name, pc->data[i].num, pc->data[i].score[0], pc->data[i].score[1], pc->data[i].score[2], k);}}//冒泡if (w == 4){printf("总成绩成绩排序\n");printf("%-10s%-15s%-10s%-10s%-10s%-10s\n", "姓名", "学号", "语文成绩", "数学成绩", "英语成绩", "总成绩");for (int p = 0; p < pc->ren - 1; p++){for (int j = 0; j < pc->ren - 1 - p; j++){int t1 = pc->data[j].score[0] + pc->data[j].score[1] + pc->data[j].score[2];int t2 = pc->data[j+1].score[0] + pc->data[j+1].score[1] + pc->data[j+1].score[2];if (t1 < t2){Stu tmp = pc->data[j];pc->data[j] = pc->data[j + 1];pc->data[j + 1] = tmp;}}}//打印for (int i = 0; i < pc->ren; i++){int k = pc->data[i].score[0] + pc->data[i].score[1] + pc->data[i].score[2];//总成绩printf("%-10s%-15d%-10d%-10d%-10d%-10d\n", pc->data[i].name, pc->data[i].num, pc->data[i].score[0], pc->data[i].score[1], pc->data[i].score[2], k);}}
}//1、学生信息的输入
void Stuxinxi(Sy* pc)
{int n = 0;printf("输入相输入成绩的人数->");scanf("%d", &n);for (int i = 0; i < n; i++){printf("请输入第%d名学生姓名>>", i + 1);scanf("%s", pc->data[i].name);printf("请输入第%d名学生学号>>", i + 1);scanf("%d", &pc->data[i].num);printf("请输入第%d名学生语文成绩>>", i + 1);scanf("%d", &pc->data[i].score[0]);printf("请输入第%d名学生数学成绩>>", i + 1);scanf("%d", &pc->data[i].score[1]);printf("请输入第%d名学生英语成绩>>", i + 1);scanf("%d", &pc->data[i].score[2]);printf("\n");}pc->ren = n;
}int main()
{//定义管理系统Sy con;//初始化InitSy(&con);//初始化管理系统int input = 0;//do{menu();//菜单,系统主界面scanf("%d", &input);//输入switch (input){case 1://1、学生信息的输入Stuxinxi(&con);break;case 2://2、学生信息的添加AddSy(&con);break;case 3://3、学生信息的删除 DelSy(&con);break;case 4://4、学生信息的查找SeekSy(&con);break;case 5://5、学生信息的修改ModifySy(&con);break;case 6://6、显示学生的信息ShowSy(&con);break;case 7://7、学生成绩的排序SortSy(&con);break;case 0:printf("退出学生信息管理系统\n");break;default:printf("选择错误,重新选择\n");break;}} while (input);return 0;
}

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

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

相关文章

Vue进阶之Vue项目实战(四)

Vue项目实战 出码功能知识介绍渲染器性能调优使用 vue devtools 进行分析使用“渲染”进行分析判断打包构建的产物是否符合预期安装插件使用位置使用过程使用lighthouse分析页面加载情况使用performance分析页面加载情况应用自动化部署与发布CI/CD常见的CI/CD服务出码功能 出码…

科技引领未来:高速公路可视化

高速公路可视化监控系统利用实时视频、传感器数据和大数据分析&#xff0c;通过图扑 HT 可视化展示交通流量、车速、事故和路况信息。交通管理人员可以实时监控、快速响应突发事件&#xff0c;并优化交通信号和指挥方案。这一系统不仅提高了道路安全性和车辆通行效率&#xff0…

1806 jsp防疫物资销售管理系统 Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 jsp 防疫物资销售管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助采用了java设计&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统采用web模式&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.…

香橙派OrangePi AIpro,助力国产AIoT迈向新的台阶!

前言&#xff1a;很高兴受邀CSDN与OrangePi官方组织的测评活动&#xff0c;本次测评是一块基于AI边缘计算的香橙派开发板OrangePi AIpro。这是 香橙派 联合 华为昇腾 合作精心打造的新一代边缘AI计算产品&#xff0c;于2023年12月初发布&#xff0c;提供 8/20TOPS澎湃算力[1]&a…

干货 | 学习网络安全,推荐6个常用的安全知识在线手册(非常详细)零基础入门到精通,收藏这一篇就够了

排名不分先后&#xff0c;欢迎各位小伙伴下方留言评论补充 **VulDoc ** 包含&#xff1a;IOT安全&#xff0c;Web安全&#xff0c;系统安全 地址&#xff1a;http://47.112.148.3:8000/ **滴水逆向学习笔记 ** 包含 汇编 C C Win32 MFC 网络编程 数据库 数据…

Python散点图矩阵代码模版

本文分享Python seaborn实现散点图矩阵代码模版&#xff0c;节选自&#x1f449;嫌Matplotlib繁琐&#xff1f;试试Seaborn&#xff01; 散点图矩阵&#xff08;scatterplot matrix&#xff09;展示原始数据中所有变量两两之间关系&#xff0c;可以规避单一统计指标的偏差&…

被追着问UUID和自增ID做主键哪个好,为什么?

之前无意间看到群友讨论到用什么做主键比较好 其实 UUID 和自增主键 ID 是常用于数据库主键的两种方式&#xff0c;各自具有独特的优缺点。 UUID UUID 是一个由 128 位组成的唯一标识符&#xff0c;通常以字符串形式表示。它可以通过不同的算法生成&#xff0c;例如基于时间…

【启程Golang之旅】掌握Go语言数组基础概念与实际应用

欢迎来到Golang的世界&#xff01;在当今快节奏的软件开发领域&#xff0c;选择一种高效、简洁的编程语言至关重要。而在这方面&#xff0c;Golang&#xff08;又称Go&#xff09;无疑是一个备受瞩目的选择。在本文中&#xff0c;带领您探索Golang的世界&#xff0c;一步步地了…

【算法】dd爱转转

✨题目链接&#xff1a; dd爱旋转 ✨题目描述 读入一个n∗n的矩阵&#xff0c;对于一个矩阵有以下两种操作 1:顺时针旋180 2:关于行镜像 如 变成 给出q个操作&#xff0c;输出操作完的矩阵 ✨输入描述: 第一行一个数n(1≤n≤1000)&#xff0c;表示矩阵大小 接下来n行&#xff…

JavaSE:StringBuilder和StringBuffer类

1、引言 在上一篇文章中&#xff0c;我们理解了字符串的常用方法&#xff0c;细心的同学大概已经发现&#xff0c;不管是将字符串中的字符转变为大写或小写&#xff0c;或是完成字符串的替换&#xff0c;又或是去除空白字符等等&#xff0c;只要涉及到字符串的修改&#xff0c…

绝招曝光!3小时高效利用ChatGPT写出精彩论文

在这份指南中&#xff0c;我将深入解析如何利用ChatGPT 4.0的高级功能&#xff0c;指导整个学术研究和写作过程。从初步探索研究主题&#xff0c;到撰写结构严谨的学术论文&#xff0c;我将一步步展示如何在每个环节中有效运用ChatGPT。如果您还未使用PLUS版本&#xff0c;可以…

CSS学习笔记:rem实现移动端适配的原理——媒体查询

移动端适配 移动端即手机端&#xff0c;也称M端 移动端适配&#xff1a;同一套移动端页面在不同屏幕尺寸的手机上可以实现宽度和高度的自适应&#xff0c;也就是页面中元素的宽度和高度可以根据屏幕尺寸的变化等比缩放 rem配合媒体查询可实现移动端适配 rem单位 媒体查询 …

Redhat9 LAMP安全配置方案及测试

目录 数据库主机 安装Mariadb数据库服务 设置mariadb开机自动启动 Php主机 部署Apache服务器 设置apache服务开机自启 安装php 安装 phpMyAdmin 打开测试机 更新软件包列表&#xff1a; 首先&#xff0c;确保你的软件包列表是最新的。打开终端并输入以下命令&#xf…

Vue.Draggable:强大的Vue拖放组件技术探索

一、引言 随着前端技术的不断发展&#xff0c;拖放&#xff08;Drag-and-Drop&#xff09;功能已经成为许多Web应用不可或缺的一部分。Vue.js作为现代前端框架的佼佼者&#xff0c;为开发者提供了丰富的生态系统和强大的工具链。Vue.Draggable作为基于Sortable.js的Vue拖放组件…

广东海上丝绸之路文化促进会正式批复荐世界酒中国菜的指导单位

广东海上丝绸之路文化促进会正式批复成为“世界酒中国菜”系列活动指导单位 近日&#xff0c;广东海上丝绸之路文化促进会近日正式批复荐酒师国际认证&#xff08;广州&#xff09;有限公司&#xff0c;成为备受瞩目的“世界酒中国菜”系列活动的指导单位。此举旨在通过双方的…

目标检测——水下物体检测数据集

引言 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 …

嵌入式进阶——OLED显示器(SPI)

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 SPI协议原理图字库芯片中文显示屏原理API的使用 SPI协议 SPI&#xff08;Serial Peripheral Interface&#xff09;是一种同步串行…

java大学城水电管理系统源码(springboot)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的大学城水电管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 大学城水电管理系统的…

向npm发布自己写的vue组件,使用vite创建项目

向npm发布自己写的vue组件&#xff0c;使用vite创建项目 创建项目 pnpm create vite输入项目名称 由于我的组件是基于 ant-design-vue和vue的&#xff0c;需要解析.vue文件&#xff0c;我又安装了下面4个。 然后执行 pnpm i安装依赖 vite.config.ts import { defineC…

常见排序算法之插入排序

目录 一、直接插入排序 1.1 什么是插入排序 1.2 代码思路 1.3 C语言源码 二、希尔排序 2.0 插入排序的弊端 2.1 什么是希尔排序&#xff1f; 2.2 排序思路 2.3 C语言源码 一、直接插入排序 1.1 什么是插入排序 插入排序是一种简单直观的排序算法&#xff0c;它通过构…