学生成绩管理软件
需求:
录入、保存一个班级学生多门课程的成绩,并对成绩进行分析。基本要求:(1)通过键盘输入各学生的多门课程的成绩,建立相应的文件input.dat;(2)对文件input.dat中的数据进行处理,要求具有如下功能:
1.按各门课程成绩排序,并生成相应的文件输出;
2 .计算每人的平均成绩,按平均成绩排序,并生成文件;
3.求出各门课程的平均成绩、最高分、最低分、不及格人数、6069分人数、7079分人数、80~89分人数、90分以上人数;
4.可根据姓名或学号查询某人的各门课成绩,重名情况也能处理。
我是转专业的,之前对C没有接触,碰上疫情,数据结构也学得很不顺利,刚好看到木鱼不会水的学生成绩管理系统基本上没有用到数据结构的知识所以就打算仿一个。(我们组是我和两个女生,所以她们要我负责写代码)
他的博客链接:添加链接描述
在这里插入代码片
```#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include<conio.h >
#define MAX 3
struct score{
char id[10];//学号
char name[10];
int chinese;
int math;
int english;
int sum;
int rank;//排名
double aver;
};
struct score stu[MAX];//总人数
int copy_file (char *oldname,char *newname);//函数声明
void QuickSort(int *arr, int low, int high);
void A(int n);
void B(int count);
void C(int count);
void D(int count);
void E(int count);
void F(int count);
void G(int count);
void showmenu();
int main(){
int n,count=0;
char k;
printf("**********************************************************************\n");
printf("* *\n");
printf("* *\n");
printf("* 欢迎使用学生成绩管理系统 ! *\n");
printf("* *\n");
printf("* *\n");
printf("**********************************************************************\n");
printf("\n");
do{
showmenu();
scanf("%d",&k);
switch(k){
case 1:printf("请输入您要录入的人数:");
scanf("%d",&n);
A(n);count+=n;break;
case 2:B(count); break;
case 3:C(count);break;
case 4:D(count);break;
case 5:E(count);break;
case 6:F(count);break;
case 7:G(count);break;
case 8:printf("谢谢使用!\n");break;
}
}while(k!=8);
return 0;
}
void showmenu(){
system("cls");//清屏
printf("1.成绩输入请按“1”;\n");
printf("2.计算每个人平均成绩并排序请按“2”键;\n");
printf("3.计算各科目平均成绩请按“3”键;\n");
printf("4.计算最低最高分请按“4”键;\n");
printf("5.输出各科不及格人数,60~69分人数、70~79分人数、80~89分人数、90分以上人数请按”5“;\n");
printf("6.根据姓名或学号查询各门课成绩请按”6”;\n");
printf("7.各科成绩排序请按“7”键;\n");
printf("8.退出系统请按“8”键;\n");
printf("请选择: \n");
return;
}
void A(int n){
int i=0,j,temp;
FILE *fp;
fp=fopen("input.dat","a+");
printf("请输入n个学生的学号,姓名,语文成绩,数学成绩,英语成绩;\n");
for(;i<n;i++){
printf("----第%d个学生-----\n", i+1);
printf("学号:");
scanf("%s",&stu[i].id);
printf("姓名:");
scanf("%s",&stu[i].name);
printf("语文成绩:");
scanf("%d",&stu[i].chinese);
printf("数学成绩:");
scanf("%d",&stu[i].math);
printf("英语成绩:");
scanf("%d",&stu[i].english);
stu[i].sum= stu[i].chinese + stu[i].math + stu[i].english;
stu[i].aver=(double)stu[i].sum/3;
temp=1;
for(j=0;j<n;j++){
if(stu[j].sum > stu[j+1].sum){
temp++;
}
stu[j].rank=temp;}
fprintf(fp,"%s %s %d %d %d %d %d %lf\n",stu[i].id,stu[i].name,stu[i].chinese,
stu[i].math,stu[i].english,stu[i].sum,stu[i].rank,stu[i].aver);
}
fclose(fp);
}
```c
在这里插入代码片
printf("学号\t姓名\t语文\t数学\t英语\t总分\t名次\t平均分\n");
c=0;
while(!feof(fp)){
fscanf(fp,"%s %s %d %d %d %d %d %lf\n",
&stu[c].id,&stu[c].name,&stu[c].chinese,&stu[c].math,&stu[c].english,&stu[c].sum,&stu[c].rank,&stu[c].aver);
printf("%s\t%s\t%d\t%d\t%d\t%d\t%d\t%lf\n",stu[c].id,stu[c].name,stu[c].chinese,stu[c].math,stu[c].english,stu[c].sum,stu[c].rank,stu[c].aver);
c++;
}
fclose(fp);
}
void C(int count){
FILE *fp;
fp=fopen("input.dat","r");
int i=0,sum[3]={
0};
while(!feof(fp)){
//文件结束返回1,没结束返回零
fscanf(fp,"%s %s %d %d %d %d %d %lf\n",&stu[i].id,&stu[i].name,&stu[i].chinese,&stu[i].math,&stu[i].english,&stu[i].sum,&stu[i].rank,&stu[i].aver);
sum[0]+=stu[i].math;
sum[1]+=stu[i].chinese;
sum[2]+=stu[i].english;
i++;
}
printf("数学的平均成绩%d\n",sum[0]/MAX);
printf("语文的平均成绩%d\n",sum[1]/MAX);
printf("英语的平均成绩%d\n",sum[2]/MAX);
fclose(fp);
}
void D(int count){
FILE *fp;
fp=fopen("input.dat","r");
int min[3]={
0},max[3]={
0},i;
min[0]=stu[0].math,min[1]=stu[0].chinese,min[2]=stu[0].english;
while(!feof(fp)){
//文件结束返回1,没结束返回零
fscanf(fp,"%s %s %d %d %d %d %d %lf\n",&stu[i].id,&stu[i].name,&stu[i].chinese,&stu[i].math,&stu[i].english,&stu[i].sum,&stu