这个学生成绩管理系统使用C语言编写,具有多项功能以方便管理学生信息和成绩。首先从文件中读取数据到系统中,并提供了多种功能(增删改查等)选项以满足不同的需求。
学生成绩管理系统功能:
- 显示学生信息
- 增加学生信息
- 删除学生信息
- 修改学生信息
- 查询学生信息
- 总分降序排序学生成绩
- 统计学生平均成绩
- 统计每科平均成绩
- 统计信息录入系统中人数
- 输出总成绩最高的学生信息
- 退出
运行示例:
运行之后要自己先往系统里面增加学生数据哦
注意:因为设涉及到文件操作,需要把下面文件读取和保存函数中的文件位置修改为自己所要保存的文件位置或者按照如下操作建立文件:
-
打开D盘新建一个文件夹名字叫 学生成绩管理系统 (名字要一模一样哦)
-
在该文件夹中新建文本文档命名为 xscjglxt (如下图:)
目录
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");
printf("姓名:");
scanf("%s",opp);
strcpy(students[i].name,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");
printf("姓名:");
scanf("%s",opp);
strcpy(students[i].name,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");
}
}