目录
一,简述
学生成绩管理系统是很多C语言初学者在大一都会有机会接触到的一个大作业,其中会涉及到文件的读写和创建,作者在这里会放出本实验的相关代码,总代码量大概600多行,其题目本身不难,各个函数之中的代码重复度较高,只要熟练掌握运用“数组,排序,查找字段,文件的读写”,则本题即可轻松过关!!
二,注意
以下代码资源仅作为学习参考!!!
三,代码
1.结构体及函数声明
```c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<dos.h>
#define LEN sizeof(struct student)
#define FORMART "|%-7d|%-15s|%-10d|%-9d|%-10.1f|%-12.1f|%-12.1f|%-12.1f|%-12.1f|\n"
#define DATA stu[i].num,stu[i].name,stu[i].term,stu[i].classnum,stu[i].chinese,stu[i].math,stu[i].engnish,stu[i].sum,stu[i].average
struct student
{
int num;
char name[20];
int classnum;
int term;
float chinese;
float math;
float engnish;
float average;
float sum;
};
void in();//录入成绩信息
void show();//输出全部学生信息以及不及格学生名单
void order();//排序函数
void del();//删除学生信息
void menu();//菜单
void modify();//修改学生信息
void insert_();//插入学生信息
void search_();//查询以一位学生信息
void showclass();//按班输出学生信息
void showorder();//查看排名信息
void showflunk();//查看不及格名单
void order2();
struct student stu[1000];//定义一个容量为1000的临时存放文件内容
menu函数
void menu()
{
system("cls");
printf("\n\n\n\n");
printf("\t\t\t\t|-------------------学生成绩管理系统--------------------|\n");
printf("\t\t|\t\t| \t\t\t\t\t\t|\n");
printf("\t\t\t\t|1.录入学生信息\t\t\t\t\t\t|\n");
printf("\t\t\t\t|2.查看全部学生信息\t\t\t\t\t|\n");
printf("\t\t\t\t|3.修改学生信息\t\t\t\t\t\t|\n");
printf("\t\t\t\t|4.查询学生信息\t\t\t\t\t\t|\n");
printf("\t\t\t\t|5.删除学生信息\t\t\t\t\t\t|\n");
printf("\t\t\t\t|6.查看不及格学生信息\t\t\t\t\t|\n");
printf("\t\t\t\t|7.分班查看成绩\t\t\t\t\t\t|\n");
printf("\t\t\t\t|8.查看排名情况\t\t\t\t\t\t|\n");
printf("\t\t\t\t|0.退出系统\t\t\t\t\t\t|\n\t\t\t\t-------------------学生成绩管理系统----------------------\n\n");
printf("\t\t\t\t|请选择您需要的操作:");
}
in函数(录入)
void in()
{
int i,m=0;
char ch[2];
FILE *fp;
if((fp=fopen("data.txt","ab+"))==NULL)
{
printf("无法找到此文件\n");
return;
}
while(!feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)
{
m++;
}
}
fclose(fp);
if(m==0)
{
printf("此文件为空!\n");
}
else
{
system("cls");
show();
}
if((fp=fopen("data.txt","wb"))==NULL)
{
printf("文件不存在!\n");
return;
}
for(i=0;i<m;i++)
fwrite(&stu[i],LEN,1,fp);
printf("\n是否要录入学生信息?(y/n):");
scanf("%s",ch);
while(strcmp(ch,"Y")==0 || strcmp(ch,"y")==0)
{
printf("学号:");
scanf("%d",&stu[m].num);
for(i=0;i<m;i++)
if(stu[i].num==stu[m].num)
{
printf("此学号已存在,按任意键继续");
getch();
fclose(fp);
return;
}
printf("姓名:");
scanf("%s",stu[m].name);
printf("班级:");
scanf("%d",&stu[m].classnum);
printf("学年:");
scanf("%d",&stu[m].term);
printf("语文成绩:");
scanf("%f",&stu[m].chinese);
printf("数学成绩:");
scanf("%f",&stu[m].math);
printf("英语成绩:");
scanf("%f",&stu[m].engnish);
stu[m].sum=stu[m].chinese+stu[m].math+stu[m].engnish;
stu[m].average=(stu[m].chinese+stu[m].math+stu[m].engnish)*1.0/3;
if(fwrite(&stu[m],LEN,1,fp)!=1)
{
printf("存储失败(任意键继续)");
getch();
}
else
{
printf("保存成功!\n");
m++;
}
printf("继续录入?\n");
scanf("%s",ch);
}
fclose(fp);
printf("全部操作已完成!\n");
}
search_函数(查询)
void search_()
{
system("cls");
FILE *fp;
int snum,i,m=0;
if((fp=fopen("data.txt","rb"))==NULL)
{
printf("未找到该文件!(warning!)\n");
return;
}
while(!feof(fp))
if(fread(&stu[m],LEN,1,fp)==1)
m++;
fclose(fp);
if(m==0)
{
printf("文件为空!\n");
return;
}
printf("………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………\n请输入需要查询学生学号:");
scanf("%d",&snum);
for(i=0;i<m;i++)
{
if(stu[i].num==snum)
{
printf("\n|学号 |姓名 |学年 |班级 |语文 |数学 |英语 |总分 |平均分 |\t\n");
printf(FORMART,DATA);
break;
}
}
if(i==m)
{
printf("未查找到此学生相关信息!\n");
}
}
del函数(删除)
void del()
{
system("cls");
show();
FILE *fp;
int snum,i,j,m=0;
char ch[2];
if((fp=fopen("data.txt","r+"))==NULL)
{
printf("此文件不存在!\n");
return;
}
while(!feof(fp))
{
if(fread(&stu[m],LEN,1,fp))
m++;
}
fclose(fp);
printf("\n请输入您想要删除学生的学号:");
scanf("%d",&snum);
for(i=0;i<m;i++)
{
if(snum==stu[i].num)
{
printf("目标找到,确认删除?(y/n)");
scanf("%s",ch);
if(strcmp(ch,"Y")==0 || strcmp(ch,"y")==0)
{
for(j=i;j<m;j++)
stu[j]=stu[j+1];
m--;
if((fp=fopen("data.txt","wb"))==NULL)
{
printf("文件不存在!\n");
return;
}
for(j=0;j<m;j++)
if(fwrite(&stu[j],LEN,1,fp)!=1)
{
printf("保存失败!\n");
getch();
}
fclose(fp);
printf("删除成功!");
show();
}
else
{
printf("成功找到目标,取消删除操作!\n");
}
break;
}
}
if(i==m)
{
printf("已删除!\n");
}
getch();
}
modify函数(修改)
void modify()
{
FILE *fp;
int i=0,j=0,m=0,snum;
struct student t;
if((fp=fopen("data.txt","r+"))==NULL)
{
printf("文件不存在!\n");
return;
}
while(!feof(fp))
if(fread(&stu[m],LEN,1,fp)==1)
{
m++;
}
if(m==0)
{
printf("此文件为空!\n");
fclose(fp);
return;
}
show();
printf("请输入要修改信息学生的学号:");
scanf("%d",&snum);
for(i=0;i<m;i++)
if(snum==stu[i].num)
{
printf("目标查找成功!可以继续操作:\n");
printf("姓名:");
scanf("%s",stu[i].name);
printf("学年:");
scanf("%d",&stu[i].term);
printf("语文:");
scanf("%f",&stu[i].chinese);
printf("数学:");
scanf("%f",&stu[i].math);
printf("英语:");
scanf("%f",&stu[i].engnish);
printf("\n修改成功!\n");
if((fp=fopen("data.txt","wb"))==NULL)
{
printf("无法正确打开文件!\n");
return;
}
for(j=0;j<m;j++)
if(fwrite(&stu[j],LEN,1,fp)!=1)
{
printf("保存失败!\n");
getch();
}
fclose(fp);
break;
}
if(i==m)
{
printf("没有找到这名学生信息!\n");
}
}
insert函数(插入)
void insert_()
{
FILE *fp;
int i,j,k,m=0,snum;
show();
if((fp=fopen("data.txt","ab+"))==NULL)
{
printf("文件不存在!\n");
return;
}
while(!feof(fp))
if(fread(&stu[m],LEN,1,fp)==1)
{
m++;
}
fclose(fp);
if(m==0)
{
printf("此文件为空!\n");
fclose(fp);
return;
}
printf("\n\n\n\n请输入要插入的位置:");
scanf("%d",&snum);
for(i=0;i<m;i++)
if(snum==stu[i].num)
break;
if(i<m)
{
printf("查找到目标:可以继续!\n");
printf("姓名:");
scanf("%s",&stu[i+1].name);
printf("班级:");
scanf("%d",&stu[i+1].classnum);
printf("学年:");
scanf("%d",&stu[i+1].term);
printf("语文:");
scanf("%f",&stu[i+1].chinese);
printf("数学:");
scanf("%f",&stu[i+1].math);
printf("英语:");
scanf("%f",&stu[i+1].engnish);
}
else
{
printf("插入位置错误!\n");
getch();
return;
}
if((fp=fopen("data.txt","wb+"))==NULL);
{
printf("此文件无法打开!\n");
return;
}
for(k=0;k<m+1;k++)
if(fwrite(&stu[k],LEN,1,fp)!=1)
{
printf("保存失败!\n");
getch();
}
printf("插入成功!\n");
fclose(fp);
}
show函数(查看全部学生)
void show()
{
system("cls");
order2();
FILE *fp;
int i,m=0,c=0,m1=0,e=0;
fp=fopen("data.txt","rb");
while(!feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)
m++;
}
fclose(fp);
printf("|学号 |姓名 |学年 |班级 |语文 |数学 |英语 |总分 |平均分 |\t\n");
for(i=0;i<m;i++)
{
printf(FORMART,DATA);
}
}
order函数(排序)
void order()
{
FILE *fp;
int i=0,j=0,m=0;
struct student t;
if((fp=fopen("data.txt","r+"))==NULL)
{
printf("文件不存在!\n");
return;
}
while(!feof(fp))
if(fread(&stu[m],LEN,1,fp)==1)
{
m++;
}
if(m==0)
{
printf("此文件为空!\n");
fclose(fp);
return;
}
if((fp=fopen("data.txt","wb"))==NULL)
{
printf("此文件不存在!\n");
return;
}
for(i=0;i<m-1;i++)
for(j=i+1;j<m;j++)
if(stu[i].average<stu[j].average)
{
t=stu[i];
stu[i]=stu[j];
stu[j]=t;
}
if((fp=fopen("data.txt","wb"))==NULL)
{
printf("文件不存在!\n");
return;
}
for(i=0;i<m;i++)
{
if(fwrite(&stu[i],LEN,1,fp)!=1)
{
printf("保存失败!\n");
getch();
}
}
fclose(fp);
printf("保存成功!\n");
show();
}
showclass函数(按班级查看)
void showclass()
{
system("cls");
FILE *fp;
int i,j,m=0,c;
if((fp=fopen("data.txt","r+"))==NULL)
{
printf("此文件不存在!\n");
return;
}
while(!feof(fp))
{
if((fread(&stu[m],LEN,1,fp))==1)
m++;
}
if(m==0)
{
printf("此文件为空!\n");
fclose(fp);
return;
}
if((fp=fopen("data.txt","rb"))==NULL)
{
printf("文件不存在!\n");
return;
}
printf("请输入您需要查看成绩的班级:");
scanf("%d",&c);
printf("\n%d班成绩如下:\n",c);
printf("|学号 |姓名 |学年 |班级 |语文 |数学 |英语 |总分 |平均分 |\t\n");
for(j=0;j<m;j++)
{
if(stu[j].classnum==c)
printf(FORMART,stu[j].num,stu[j].name,stu[j].term,stu[j].classnum,stu[j].chinese,stu[j].math,stu[j].engnish,stu[j].sum,stu[j].average);
}
}
showorder函数(查看排名)
void showorder()
{
order();
system("cls");
FILE *fp;
int i,m=0,c=0,m1=0,e=0;
fp=fopen("data.txt","rb");
while(!feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)
m++;
}
fclose(fp);
printf("|排名 |学号 |姓名 |学年 |班级 |语文 |数学 |英语 |总分 |平均分 |\t\n");
for(i=0;i<m;i++)
{
printf("|%-7d|%-7d|%-15s|%-10d|%-9d|%-10.1f|%-12.1f|%-12.1f|%-12.1f|%-12.1f|\n",i+1,DATA);
}
}
showflunk函数(查看不及格)
void showflunk()
{
system("cls");
FILE *fp;
int i,m=0,c=0,m1=0,e=0;
fp=fopen("data.txt","rb");
while(!feof(fp))
{
if(fread(&stu[m],LEN,1,fp)==1)
m++;
}
fclose(fp);
printf("\n\n\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^以下为各科不及格学生名单^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n\n\n\n\n\n语文不及格学生名单:\n_____________________________________________________________________________________________________________\n");
printf("|学号 |姓名 |学年 |班级 |语文 |数学 |英语 |总分 |平均分 |\t\n");
for(i=0;i<m;i++)
{
if(stu[i].chinese<60)
{
printf(FORMART,DATA);
c++;
}
}
if(c==0)
printf("|无 | 无 |无 | 无 | 无 | 无 | 无 |无 | 无 |\n");
//shux
printf("\n数学不及格学生名单:\n\n_____________________________________________________________________________________________________________\n");
printf("|学号 |姓名 |学年 |班级 |语文 |数学 |英语 |总分 |平均分 |\t\n");
for(i=0;i<m;i++)
{
if(stu[i].math<60)
{
printf(FORMART,DATA);
m1++;
}
}
if(m1==0)
printf("|无 | 无 |无 | 无 | 无 | 无 | 无 |无 | 无 |\n");
//yiny
printf("\n英语不及格学生名单:\n\n_____________________________________________________________________________________________________________\n");
printf("|学号 |姓名 |学年 |班级 |语文 |数学 |英语 |总分 |平均分 |\t\n");
for(i=0;i<m;i++)
{
if(stu[i].engnish<60)
{
printf(FORMART,DATA);
e++;
}
}
if(e==0)
printf("|无 | 无 |无 | 无 | 无 | 无 | 无 |无 | 无 |\n");
}
order2函数(此函数是当初老师要求添加的函数,于整个程序可有可无)
void order2()
{
FILE *fp;
int i=0,j=0,m=0;
struct student t;
if((fp=fopen("data.txt","r+"))==NULL)
{
printf("文件不存在!\n");
return;
}
while(!feof(fp))
if(fread(&stu[m],LEN,1,fp)==1)
{
m++;
}
if(m==0)
{
printf("此文件为空!\n");
fclose(fp);
return;
}
if((fp=fopen("data.txt","wb"))==NULL)
{
printf("此文件不存在!\n");
return;
}
for(i=0;i<m-1;i++)
for(j=i+1;j<m;j++)
if(stu[i].num>stu[j].num)
{
t=stu[i];
stu[i]=stu[j];
stu[j]=t;
}
if((fp=fopen("data.txt","wb"))==NULL)
{
printf("文件不存在!\n");
return;
}
for(i=0;i<m;i++)
{
if(fwrite(&stu[i],LEN,1,fp)!=1)
{
printf("保存失败!\n");
getch();
}
}
fclose(fp);
printf("保存成功!\n");
}