学生成绩管理系统纯C(仿木鱼不会水)

本文介绍了一款使用C语言编写的学生成绩管理系统,该系统能够录入、保存并分析班级学生多门课程的成绩。功能包括按课程成绩排序、计算平均成绩、统计成绩分布等。博主分享了在开发过程中遇到的问题,以及被队友优化代码的经历,强调了代码规范的重要性。
摘要由CSDN通过智能技术生成

学生成绩管理软件
需求:
录入、保存一个班级学生多门课程的成绩,并对成绩进行分析。基本要求:(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
  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值