当前位置: 首页 > 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…...

3分钟学会B站缓存视频转换:m4s转MP4完整指南

3分钟学会B站缓存视频转换&#xff1a;m4s转MP4完整指南 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否遇到过这样的困扰&#xff1f;在B…...

华为昇腾Atlas200边缘设备开箱即用指南:从CANN环境到YOLOv8模型部署的保姆级避坑教程

华为昇腾Atlas200边缘设备实战&#xff1a;YOLOv8模型部署全流程避坑指南 第一次拿到华为昇腾Atlas200边缘计算设备时&#xff0c;那种既兴奋又忐忑的心情记忆犹新。作为一款专为AI推理设计的边缘设备&#xff0c;Atlas200凭借其强大的算力和紧凑的体型&#xff0c;在智能安防…...

基于Atmega8的红外通信系统:从原理到自定义协议实现

1. 项目概述&#xff1a;为什么是Atmega8&#xff1f;在嵌入式开发领域&#xff0c;红外遥控是一个经典且应用广泛的课题。从家里的电视、空调遥控器&#xff0c;到一些工业设备的非接触式控制&#xff0c;红外通信无处不在。市面上有大量现成的红外编解码芯片&#xff0c;比如…...

Git提交者信息填错了?别慌,手把手教你用config命令修正(全局/本地/取消设置全攻略)

Git提交者信息填错了&#xff1f;别慌&#xff0c;手把手教你用config命令修正&#xff08;全局/本地/取消设置全攻略&#xff09; 刚提交完代码到Git仓库&#xff0c;突然发现用户名和邮箱填错了&#xff1f;别担心&#xff0c;这种情况几乎每个开发者都遇到过。提交者信息错误…...

为什么所有人都在聊RAG?看这篇,小白也能彻底搞懂

你是否有过这样的经历——你满怀期待地问 AI 一个专业问题&#xff0c;它流畅地给了你一段"答案"&#xff0c;引经据典、逻辑自洽。 结果一查&#xff0c;发现全是错的。一本正经地胡说八道。 这就是大语言模型&#xff08;LLM&#xff09;的致命短板&#xff1a;它…...

告别Rufus!在Ubuntu 22.04上用Ventoy打造你的万能Windows安装盘(附PE系统集成)

在Ubuntu 22.04上使用Ventoy打造全能Windows安装与维护工具盘 作为一名长期以Linux为主力系统的开发者&#xff0c;难免会遇到需要为朋友或备用机安装Windows的场景。传统方案往往要求我们临时切换到Windows环境使用Rufus等工具&#xff0c;既低效又违背Linux用户的习惯。本文将…...

MTK手机用上高通QC快充,背后多出的那颗‘xmusb350’芯片到底在忙啥?

MTK手机为何需要外挂xmusb350芯片实现高通QC快充&#xff1f; 当你在电商平台搜索"支持QC快充的MTK手机"时&#xff0c;可能会发现一个有趣的现象&#xff1a;采用联发科处理器的机型在充电模块描述中&#xff0c;常会特别标注"搭载独立QC协议芯片"。这背后…...

别再硬算方程了!用Zemax的‘傻瓜式’方法搞定三片摄影物镜设计

颠覆传统&#xff1a;用Zemax高效设计三片摄影物镜的实战指南 在光学设计领域&#xff0c;三片摄影物镜一直被视为经典案例&#xff0c;它既包含了基础光学原理的精髓&#xff0c;又能满足实际摄影需求。然而&#xff0c;传统设计流程中繁琐的方程求解和反复试错让许多工程师望…...

MPh 开源项目教程

MPh 开源项目教程 【免费下载链接】MPh Pythonic scripting interface for Comsol Multiphysics 项目地址: https://gitcode.com/gh_mirrors/mp/MPh 项目介绍 MPh 是一个基于 Python 的强大开源项目&#xff0c;旨在简化数学物理问题的求解过程。它结合了符号计算的灵活…...

3个关键决策:为什么顶级技术团队选择Arco Design Pro构建企业级应用

3个关键决策&#xff1a;为什么顶级技术团队选择Arco Design Pro构建企业级应用 【免费下载链接】arco-design-pro An out-of-the-box solution to quickly build enterprise-level applications based on Arco Design. 项目地址: https://gitcode.com/gh_mirrors/ar/arco-de…...