当前位置: 首页 > news >正文

学生信息管理系统简易版(文件读写操作)

功能模块

在这里插入图片描述
具体功能如下:

  1. 添加学生信息
  2. 修改学生信息(按学号)
  3. 排序(分别按总分升序、降序、以及按姓名升序)
  4. 查找学生(按学号)
  5. 删除学生
  6. 查看所有学生信息

 

数据结构体设计

本表设计一个学生信息的结构体就行:

//学生信息结构体
typedef struct student 
{char ID[10];//学号char name[20]; //姓名char sex; //性别float   score[5]; //成绩float total; //总成绩float avg; //平均成绩
}STU;

这样就定义了学生信息的结构体STU,STU student[N]定义多个学生

 

总体设计流程图

在主函数中首先调用load函数,把文件中的学生信息全部读取到结构数组中,然后调用display函数显示主菜单,接着输入选择项,然后根据选择项调用不同的函数执行相应功能。

在这里插入图片描述

这样就得到了系统的整体流程

 


主要功能模块

下面是功能模块函数的声明:

//函数声明
void display(void);//显示菜单
void load(STU stu[],int *nPtr);//输入学生信息
void save(STU stu[],int n);//保存学生信息
void sort(STU stu[],int n);//排序
void InputRecord(STU stu[],int i);//输入一条记录
void  find(STU stu[],int n);//查找
void del(STU stu[],int *nPtr);//删除
void add(STU stu[],int *nPtr);//增加
void edit(STU stu[],int n);//修改
void DeleteAll(STU stu[],int *nPtr);//删除所有记录
void DeleteRecord(STU stu[],int *nPtr);//删除一条记录
int FindByNum(STU stu[],int n,char *str);//按学号查找
void output(STU stu[],int n);//输出学生信息
void PrintRecord(STU *sPtr);//输出一条记录

主函数代码编写

定义结构体数组,然后使用Switch来设置进入界面菜单

int main()
{STU stu[100];//学生信息结构体数组int n;int select;load(stu,&n);//读取文件信息while (1){display();//显示菜单scanf("%d",&select);switch (select){case 1:add(stu,&n);//增加break;case 2:edit(stu,n);//修改break;case 3:sort(stu,n);//排序break;case 4:find(stu,n);//查找break;case 5:del(stu,&n);//删除break;case 6:output(stu,n);//输出学生信息break;case 7:return 0;default:printf("输入错误,请重新输入!\n");break;}}return 0;
}

显示主菜单display

void display(void)
{system("cls");//清屏printf("欢迎使用学生信息管理系统!\n");printf("说明:在本系统输入功能对应数字即可!\n");printf("1.增加学生信息\n");printf("2.修改学生信息\n");printf("3.排序\n");printf("4.查找\n");printf("5.删除\n");printf("6.输出学生信息\n");printf("7.退出\n");
}

学生信息加载到数组stu的函数load

运用文件读写fread将文件中的学生信息读取到stu数组中去,记录下当前学生数量

//输入学生信息
void load(STU stu[],int *nPtr)
{FILE *fp;int i;if((fp=fopen("stu.dat","r"))==NULL){*nPtr=0;printf("文件打开失败!\n");return;}//把文件中的信息读取到结构体数组中for ( i = 0;fread(&stu[i],sizeof(STU),1,fp)!=0 ; i++);*nPtr=i;//记录文件中当前学生数量fclose(fp);
}

保存数据save

//保存数据
void save(STU stu[],int n)
{   FILE *fp;if((fp=fopen("stu.dat","w"))==NULL){printf("文件打开失败!\n");return;}//把n个记录写入文件fwrite(stu,n*sizeof(stu[0]),1,fp);fclose(fp);
}

输入记录InputRecord

//输入一条记录InputRecord
void InputRecord(STU stu[],int i)//输入一条记录
{       int j;//输入学号,并验证其合法性printf("请输入第%d个学生的学生信息:",i+1);printf("请输入学号(学号小于9位数字组成)\n");scanf("%s",&stu[i].ID);//输入姓名printf("请输入姓名(姓名小于20位字符组成)\n");scanf("%s",&stu[i].name);//输入性别 printf("请输入性别(男性用m或女性用f)\n");scanf(" %c",&stu[i].sex);//输入成绩总和printf("请输入5门课的成绩(成绩为0-100之间的整数)\n");stu[i].total=0;for ( j = 0; j < 5; j++){scanf("%f",&stu[i].score[j]);stu[i].total+=stu[i].score[j];}//计算平均成绩stu[i].avg=stu[i].total/5;
}

添加记录add

/*调用InputRecord函数添加若干学生信息,并把新添加的学生信息依次保存到文件中 */

//添加记录add
void add(STU stu[],int *nPtr)
{int i=0;char sel='y';while (sel=='y'){InputRecord(stu,(*nPtr)++);//添加第n+1个学生信息(*nPtr)++;printf("是否继续添加(y/n)?\n");scanf(" %c",&sel);}save(stu,*nPtr);//保存学生信息
}

输出指针sPtr所指记录的内容PrintRecord

//输出指针sPtr所指记录的内容PrintRecord
void PrintRecord(STU *sPtr)
{int i;printf("%8s%8s%4c",sPtr->ID,sPtr->name,sPtr->sex);for ( i = 0; i < 5; i++){printf("%8.2f",sPtr->score[i]);}printf("%8.2f%8.2f",sPtr->total,sPtr->avg);
printf("\n");
}

输出学生信息output()

首先输出表头,然后在循环中调用PrintRecord来显示每一个记录的内容

//输出学生信息output
void output(STU stu[],int n)
{int i;printf("学号\t姓名\t性别\t课程1\t课程2\t课程3\t课程4\t课程5\t总成绩\t平均成绩\n");for ( i = 0; i < n; i++){PrintRecord(&stu[i]);}system("pause");
}

按学号查找学生信息FindByNum

按学号查询信息,返回学生下标

//按学号查找学生信息FindByNum
int FindByNum(STU stu[],int n,char *str)
{for ( int i = 0; i < n; i++)if(strcmp(stu[i].ID,str)==0)return i;return -1;
}

修改学生信息函数edit()

该函数首先按用户输入的学号,调用函数FindByName找到要修改的记录,然后调用PrintRecord显示该记录的内容,再逐项询问是否需要修改,最后调用save更新文件。

//edit修改学生信息
void edit(STU stu[],int n)
{int i,index;char sel;char str[20];printf("请输入学号:\n");scanf("%s",str);index=FindByNum(stu,n,str);//查找学号为str的学生信息if(index<0){printf("没有找到学号为%s的学生信息!\n",str);return;}else{printf("找到学号为%s的学生信息!\n",str);PrintRecord(&stu[index]);}//修改姓名printf("是否修改姓名(y/n)?\n");scanf(" %c",&sel);if(sel=='y'){printf("请输入新的姓名:\n");scanf("%s",stu[index].name);}//修改性别printf("是否修改性别(y/n)?\n");scanf(" %c",&sel);if(sel=='y'){printf("请输入f or m:\n");scanf("%s",stu[index].sex);}//修改成绩printf("是否修改成绩(y/n)?\n");scanf(" %c",&sel);if(sel=='y'){stu[index].total=0;for ( i = 0; i < 5; i++){printf("请输入第%d门课的成绩:\n",i+1);scanf("%f",&stu[index].score[i]);stu[index].total+=stu[index].score[i];}stu[index].avg=stu[index].total/5;}save(stu,n);//保存修改后的学生信息}

排序sort的功能流程图

在这里插入图片描述

排序代码编写

//排序sort 
//菜单编写
void sort(STU stu[],int n)
{int select,i,j;int (*cmp)(STU a,STU b);//函数指针 int ScoreAsc(STU a,STU b);//成绩升序int ScoreDesc(STU a,STU b);//成绩降序int NameAsc(STU a,STU b);//姓名升序printf("请选择排序方式(1.成绩升序 2.成绩降序 3.姓名升序):\n");scanf("%d",&select);switch (select){case 1:cmp=ScoreAsc;break;case 2:cmp=ScoreDesc;break;case 3:cmp=NameAsc;break;default:return;
}//比较函数编写
//按照指定规则,进行比较交换排序
for ( i = 0; i < n-1; i++)for ( j = i+1;j<n;j++)if((*cmp)(stu[i],stu[j])>0)//若逆序,cmp返回正数{STU temp=stu[i];stu[i]=stu[j];stu[j]=temp;}output(stu,n);//输出排序后的学生信息
}//成绩升序
int ScoreAsc(STU a,STU b)
{return a.total>b.total?1:-1;//如果a>b,返回1,否则返回-1
}//成绩降序
int ScoreDesc(STU a,STU b)
{return a.total<b.total?1:-1;//如果a<b,返回1,否则返回-1
}//姓名升序
int NameAsc(STU a,STU b)
{return strcmp(a.name,b.name);//按照姓名升序排列/*若 a 和 b 相等,则返回值为 0;
若 a 按字典序小于 b,则返回值为负整数;
若 a 按字典序大于 b,则返回值为正整数。*/}

查询信息find

//查询find
//在数组stu的前n个元素中,查找学号为str的学生信息
void  find(STU stu[],int n)
{int index;char str[20];printf("请输入学号:\n");scanf("%s",str);index=FindByNum(stu,n,str);//查找学号为str的学生信息if(index<0){printf("没有找到学号为%s的学生信息!\n",str);return;}else{printf("找到学号为%s的学生信息!\n",str);PrintRecord(&stu[index]);}system("pause");
}

删除del

调用FindByName得到对应下标,然后删除记录,save更新文件

//删除指定记录del
void del(STU stu[],int *nPtr)
{int i,index;char str[20];printf("请输入学号:\n");scanf("%s",str);index=FindByNum(stu,*nPtr,str);//查找学号为str的学生信息if(index<0){printf("没有找到学号为%s的学生信息!\n",str);return;}for ( i = index; i < *nPtr-1; i++){stu[i]=stu[i+1];}(*nPtr)--;printf("删除成功\n");save(stu,*nPtr);//保存修改后的学生信息system("pause");
}

删除全部

//删除全部delALL
void DeleteAll(STU stu[],int *nPtr)
{char str[20];*nPtr=0;save(stu,*nPtr);//保存修改后的学生信息system("pause");
}

 

 

整体代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>//学生信息结构体
typedef struct student 
{char ID[10];//学号char name[20]; //姓名char sex; //性别float   score[5]; //成绩float total; //总成绩float avg; //平均成绩
}STU;//函数声明
void display(void);//显示菜单
void load(STU stu[],int *nPtr);//输入学生信息
void save(STU stu[],int n);//保存学生信息
void sort(STU stu[],int n);//排序
void InputRecord(STU stu[],int i);//输入一条记录
void  find(STU stu[],int n);//查找
void del(STU stu[],int *nPtr);//删除
void add(STU stu[],int *nPtr);//增加
void edit(STU stu[],int n);//修改
void DeleteAll(STU stu[],int *nPtr);//删除所有记录
void DeleteRecord(STU stu[],int *nPtr);//删除一条记录
int FindByNum(STU stu[],int n,char *str);//按学号查找
void output(STU stu[],int n);//输出学生信息
void PrintRecord(STU *sPtr);//输出一条记录int main()
{STU stu[100];//学生信息结构体数组int n;int select;load(stu,&n);//读取文件信息while (1){display();//显示菜单scanf("%d",&select);switch (select){case 1:add(stu,&n);//增加break;case 2:edit(stu,n);//修改break;case 3:sort(stu,n);//排序break;case 4:find(stu,n);//查找break;case 5:del(stu,&n);//删除break;case 6:output(stu,n);//输出学生信息break;case 7:return 0;default:printf("输入错误,请重新输入!\n");break;}}return 0;
}//显示菜单
void display(void)
{system("cls");//清屏printf("欢迎使用学生信息管理系统!\n");printf("说明:在本系统输入功能对应数字即可!\n");printf("1.增加学生信息\n");printf("2.修改学生信息\n");printf("3.排序\n");printf("4.查找\n");printf("5.删除\n");printf("6.输出学生信息\n");printf("7.退出\n");
}//输入学生信息
void load(STU stu[],int *nPtr)
{FILE *fp;int i;if((fp=fopen("stu.dat","rb"))==NULL){*nPtr=0;printf("文件打开失败!\n");return;}//把文件中的信息读取到结构体数组中for ( i = 0;fread(&stu[i],sizeof(STU),1,fp)!=0 ; i++);*nPtr=i;//记录文件中当前学生数量fclose(fp);
}//保存数据
void save(STU stu[],int n)
{   FILE *fp;if((fp=fopen("stu.dat","wb"))==NULL){printf("文件打开失败!\n");return;}//把n个记录写入文件fwrite(stu,n*sizeof(stu[0]),1,fp);fclose(fp);
}//输入一条记录InputRecord
void InputRecord(STU stu[],int i)//输入一条记录
{       int j;//输入学号,并验证其合法性printf("请输入第%d个学生的学生信息:",i+1);printf("请输入学号(学号小于9位数字组成)\n");scanf("%s",&stu[i].ID);//输入姓名printf("请输入姓名(姓名小于20位字符组成)\n");scanf("%s",&stu[i].name);//输入性别 printf("请输入性别(男性用m或女性用f)\n");scanf(" %c",&stu[i].sex);//输入成绩总和printf("请输入5门课的成绩(成绩为0-100之间的整数)\n");stu[i].total=0;for ( j = 0; j < 5; j++){scanf("%f",&stu[i].score[j]);stu[i].total+=stu[i].score[j];}//计算平均成绩stu[i].avg=stu[i].total/5;
}//添加记录add
void add(STU stu[],int *nPtr)
{int i=0;char sel='y';while (sel=='y'){InputRecord(stu,(*nPtr)++);//添加第n+1个学生信息(*nPtr)++;printf("是否继续添加(y/n)?\n");scanf(" %c",&sel);}save(stu,*nPtr);//保存学生信息
}//输出指针sPtr所指记录的内容PrintRecord
void PrintRecord(STU *sPtr)
{int i;printf("%8s%8s%4c",sPtr->ID,sPtr->name,sPtr->sex);for ( i = 0; i < 5; i++){printf("%8.2f",sPtr->score[i]);}printf("%8.2f%8.2f",sPtr->total,sPtr->avg);
printf("\n");
}//输出学生信息output
void output(STU stu[],int n)
{int i;printf("学号\t姓名\t性别\t课程1\t课程2\t课程3\t课程4\t课程5\t总成绩\t平均成绩\n");for ( i = 0; i < n; i++){PrintRecord(&stu[i]);}system("pause");
}//按学号查找学生信息FindByNum
int FindByNum(STU stu[],int n,char *str)
{for ( int i = 0; i < n; i++)if(strcmp(stu[i].ID,str)==0)return i;return -1;}//edit修改学生信息
void edit(STU stu[],int n)
{int i,index;char sel;char str[20];printf("请输入学号:\n");scanf("%s",str);index=FindByNum(stu,n,str);//查找学号为str的学生信息if(index<0){printf("没有找到学号为%s的学生信息!\n",str);return;}else{printf("找到学号为%s的学生信息!\n",str);PrintRecord(&stu[index]);}//修改姓名printf("是否修改姓名(y/n)?\n");scanf(" %c",&sel);if(sel=='y'){printf("请输入新的姓名:\n");scanf("%s",stu[index].name);}//修改性别printf("是否修改性别(y/n)?\n");scanf(" %c",&sel);if(sel=='y'){printf("请输入f or m:\n");scanf("%s",stu[index].sex);}//修改成绩printf("是否修改成绩(y/n)?\n");scanf(" %c",&sel);if(sel=='y'){stu[index].total=0;for ( i = 0; i < 5; i++){printf("请输入第%d门课的成绩:\n",i+1);scanf("%f",&stu[index].score[i]);stu[index].total+=stu[index].score[i];}stu[index].avg=stu[index].total/5;}save(stu,n);//保存修改后的学生信息}//排序sort
void sort(STU stu[],int n)
{int select,i,j;int (*cmp)(STU a,STU b);//函数指针 int ScoreAsc(STU a,STU b);//成绩升序int ScoreDesc(STU a,STU b);//成绩降序int NameAsc(STU a,STU b);//姓名升序printf("请选择排序方式(1.成绩升序 2.成绩降序 3.姓名升序):\n");scanf("%d",&select);switch (select){case 1:cmp=ScoreAsc;break;case 2:cmp=ScoreDesc;break;case 3:cmp=NameAsc;break;default:return;
}//按照指定规则,进行比较交换排序
for ( i = 0; i < n-1; i++)for ( j = i+1;j<n;j++)if((*cmp)(stu[i],stu[j])>0)//若逆序,cmp返回正数{STU temp=stu[i];stu[i]=stu[j];stu[j]=temp;}output(stu,n);//输出排序后的学生信息
}//成绩升序
int ScoreAsc(STU a,STU b)
{return a.total>b.total?1:-1;//如果a>b,返回1,否则返回-1
}//成绩降序
int ScoreDesc(STU a,STU b)
{return a.total<b.total?1:-1;//如果a<b,返回1,否则返回-1
}//姓名升序
int NameAsc(STU a,STU b)
{return strcmp(a.name,b.name);//按照姓名升序排列/*若 a 和 b 相等,则返回值为 0;
若 a 按字典序小于 b,则返回值为负整数;
若 a 按字典序大于 b,则返回值为正整数。*/}//查询find
//在数组stu的前n个元素中,查找学号为str的学生信息
void  find(STU stu[],int n)
{int index;char str[20];printf("请输入学号:\n");scanf("%s",str);index=FindByNum(stu,n,str);//查找学号为str的学生信息if(index<0){printf("没有找到学号为%s的学生信息!\n",str);return;}else{printf("找到学号为%s的学生信息!\n",str);PrintRecord(&stu[index]);}system("pause");
}//删除指定记录del
void del(STU stu[],int *nPtr)
{int i,index;char str[20];printf("请输入学号:\n");scanf("%s",str);index=FindByNum(stu,*nPtr,str);//查找学号为str的学生信息if(index<0){printf("没有找到学号为%s的学生信息!\n",str);return;}for ( i = index; i < *nPtr-1; i++){stu[i]=stu[i+1];}(*nPtr)--;printf("删除成功\n");save(stu,*nPtr);//保存修改后的学生信息system("pause");
}//删除全部delALL
void DeleteAll(STU stu[],int *nPtr)
{char str[20];*nPtr=0;save(stu,*nPtr);//保存修改后的学生信息system("pause");
}

运行截图:

在这里插入图片描述

在这里插入图片描述代码还是有点小问题,

后续希望完善。

相关文章:

学生信息管理系统简易版(文件读写操作)

功能模块 具体功能如下&#xff1a; 添加学生信息修改学生信息&#xff08;按学号&#xff09;排序&#xff08;分别按总分升序、降序、以及按姓名升序&#xff09;查找学生&#xff08;按学号&#xff09;删除学生查看所有学生信息 数据结构体设计 本表设计一个学生信息的结…...

C/C++每日一练(20230426)

目录 1. 不喜欢带钱的小C &#x1f31f;&#x1f31f; 2. 数组排序 ※ 3. 超级素数 ※ &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 不喜欢带钱的小C 小C不喜欢带钱&#xff0c…...

halcon灰度积分投影/垂直积分投影

简介:关于灰度投影积分可以用到的场合很多,例如分割字符,分割尺子上的刻度等,适用于有规律的变化这些内容的检测。本文复现了论文《基于深度学习和灰度纹理特征的铁路接触网绝缘子状态检测》中灰度积分投影实现了对绝缘子缺陷位置的检测。见(图1)灰度积分垂直方向投影获得…...

Unity打包的apk在安卓4.4.2盒子上碰到的问题

项目场景&#xff1a; Unity开发的项目需要在安卓4.4.2盒子上运行。 问题描述 1、会出"从顶部向下滑动即可退出全屏模式。"的弹框&#xff0c;这是android4.4的一个特性&#xff0c;叫做沉浸模式&#xff08;Full-screen Immersive Mode)&#xff0c;当app启用该模…...

docker的简单使用(centos7中为例)

安装&#xff1a; yum -y install docker 启动&#xff1a; service start docker 搜索镜像&#xff1a; docker search centos:7.9 下载镜像&#xff1a; docker pull docker.io/18703283952/mycentos 查看所有镜像&#xff1a; docker images 启动并进入镜像&#xff1a…...

Stable Diffusion人工智能图像合成

AI 图像生成大有来头。新发布的开源图像合成模型称为Stable Diffusion&#xff0c;它允许任何拥有 PC 和像样的 GPU 的人想象出他们能想象到的几乎任何视觉现实。它几乎可以模仿任何视觉风格&#xff0c;如果你给它输入一个描述性的短语&#xff0c;结果就会像魔术一样出现在你…...

【Java EE】-CSS详解

作者&#xff1a;学Java的冬瓜 博客主页&#xff1a;☀冬瓜的主页&#x1f319; 专栏&#xff1a;【JavaEE】 分享: 且视他人如盏盏鬼火&#xff0c;大胆地去走你的道路。——史铁生《病隙碎笔》 主要内容&#xff1a;CSS引入html的三种方式&#xff0c;CSS八大选择器&#xff…...

C#_语言简介

目录 1. C# 简介 2. Visual Studio 窗口界面显示 1. C# 简介 什么是程序&#xff1f; 程序&#xff08;Program&#xff09;简单来说就是&#xff1a; 计算机是无法听懂我们人类的语言的&#xff0c;也可以说我们通过我们日常交流的语言是无法控制计算机的&#xff0c;计算机…...

【Python_Opencv图像处理框架】直方图与傅里叶变换

写在前面 本篇文章是opencv学习的第五篇文章&#xff0c;主要讲解了直方图与傅里叶变换的有关操作&#xff0c;作为初学者&#xff0c;我尽己所能&#xff0c;但仍会存在疏漏的地方&#xff0c;希望各位看官不吝指正&#x1f970; 写在中间 一、直方图 &#xff08; 1 &…...

Know-Evolve: Deep Temporal Reasoning for Dynamic Knowledge Graphs

Know-Evolve: Deep Temporal Reasoning for Dynamic Knowledge Graphs Rakshit Trivedi 1 Hanjun Dai 1 Yichen Wang 1 Le Song 1 知识背景 Temporal Knowledge Graph : facts occur,recur or evolve over time in these graphs,and each edge in the graphs have temporal …...

电脑高效率工作、学习工具软件推荐

本文介绍在学习、工作时&#xff0c;实测很好用、明显提高工作效率的几个免费电脑软件与小工具。 1 Microsoft To Do 官方网站&#xff1a;https://todo.microsoft.com/tasks/ Microsoft To Do是一款由Microsoft公司开发的待办事项管理应用程序。它提供了一个简单易用的界面&a…...

Java8新特性函数式编程 - Lambda、Stream流、Optional

1.Lambda表达式 1.1 概述 ​ Lambda是JDK8中一个语法糖。他可以对某些匿名内部类的写法进行简化。它是函数式编程思想的一个重要体现。让我们不用关注是什么对象。而是更关注我们对数据进行了什么操作。 1.2 核心原则 可推导可省略 1.3 基本格式 (参数列表)->{代码}例一…...

AutoGPT安装教程

最近安装AutoGPT时遇到了一些问题&#xff0c;写下这篇文章记录一下 1 下载AutoGPT AutoGPT链接&#xff1a;https://github.com/Significant-Gravitas/Auto-GPT/tree/v0.2.2 下载AutoGPT 推荐下载stable 版本 2 申请openai 的api key 获取api的key&#xff0c;这里就不介…...

轻量级服务器nginx:负载均衡

负载均衡就是让每个设备&#xff0c;以同样的概率&#xff0c;处理用户对于服务器的任务请求&#xff0c;默认采用的负载调度策略就是轮流询问&#xff0c;Nginx作为反向代理服务器安装在服务端&#xff0c;Nginx的功能就是把请求转发给后面的应用服务器. 这里写目录标题 一 负…...

陶渊明最有名的10首诗,闲适美好

他是中国第一位田园诗人&#xff0c;被誉为“古今隐逸诗人之宗”、“田园诗派之鼻祖”。 他是诗人、辞赋家、散文家。 他是陶渊明。 欧阳修&#xff1a;晋无文章&#xff0c;唯陶渊明《归去来兮辞》。 陶渊明不为五斗米折腰&#xff0c;挂冠而去&#xff0c;给后世留下一段…...

最好用的六款虚拟机软件,赶紧收藏

在日常工作和学习中,我们常常需要在一台电脑上运行多个操作系统,以便进行软件测试、开发、学习以及实验等任务。虚拟机软件就是一种崭新的技术,它可以在一台电脑上运行多个操作系统,为用户提供了更高效、安全、稳定和智能化的工作和学习环境。今天我为大家介绍6款优秀的虚拟…...

LSSANet:一种用于肺结节检测的长、短切片感知网络

文章目录 LSSANet: A Long Short Slice-Aware Network for Pulmonary Nodule Detection摘要方法Long Short Slice GroupingLong Short Slice-Aware Network 实验结果 LSSANet: A Long Short Slice-Aware Network for Pulmonary Nodule Detection 摘要 提出了一个长短片感知网…...

LVS负载均衡群集部署—NAT

目录 一、群集的概述1、群集的含义2、出现高并发的解决方法3、群集的三种分类3.1负载均衡群集3.2高可用群集3.3高性能运算群集 4、负载均衡的结构 三、LVS调度器用的调度方法四、LVS的工作模式及其工作过程1.NAT模式&#xff08;VS-NAT&#xff09;2.直接路由模式&#xff08;V…...

【Access】win 10 / win 11:Access 下载、安装、使用教程(「管理信息系统」实践专用软件)

目录 一、前言 二、卸载 Office 三、下载 Office Tool Plus 四、安装 Office&#xff08;内含 Access&#xff09; &#xff08;1&#xff09;启动 Office Tool Plus &#xff08;2&#xff09;部署 &#xff08;3&#xff09;安装 Office&#xff08;内含 Access&#…...

波奇学Linux:Linux的认识和云服务器使用

认识Linux 在讲Linux前&#xff0c;我们先来理解计算机&#xff1a; 计算机&#xff1a;输入->算法->输出 举个栗子&#xff1a; pritnf :输出到屏幕&#xff08;硬件&#xff09;上 我们在计算机所有的行为都会转为硬件行为。 再进一步理解,我们打开visual studio后&a…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...