成绩管理系统,c语言,可用文件保存。

#include<stdio.h>
#define N 5
#define M 50
void cover()
{
 printf("--------------------------------\n");
 printf("  班级成绩管理系统  \n");
 printf("|     版本号V1.0  |\n");
 printf("|     开发日前:2014年  |\n");
 printf("--------------------------------\n");
}
void input(float a[][N+4],int m,int n)
{
 int i,j;
 printf("成绩输入开开始....\n");
 printf("请依次输入对应学生%d门课程的成绩\n",n);
 printf("学号\t各科成绩\n");
 for(i=0;i<m;i++)
 {
  printf("%d",i+1);
  a[i][0]=i+1;
  for(j=1;j<=n;j++)
  {
   printf("\t课程%d:",j);
   scanf("%f",&a[i][j]);
  }
  a[i][n+1]=0;a[i][n+2]=0;a[i][n+3]=0;
 }
 printf("成绩录入结束,单击任意键结束.....\n");
 getch();
}
int select()
{
 int x;
 printf("你好,本系统主要有如下功能\n");
 printf("\t\t0:计算每个学生的总分和平均分\n");
 printf("\t\t1:按学号显示班级学生的各科成绩\n");
 printf("\t\t2:计算每门课程的平均分,最高分和最低分\n");
 printf("\t\t3:按照总分从高分到低分显示学生成绩——排出名次\n");
 printf("\t\t4:统计课程的及格率和优秀率\n");
 printf("\t\t5:统计课程不及格人数,并打印不及格学生名单\n");
 printf("\t\t6:退出\n");
 do
 {
  printf("请选择:");
  scanf("%d",&x);
  if(x<0||x>6)
   printf("对不起,你的输入有误,请从新输入:");
  else return x;
 }while(1);
}
void show(float a[][N+4],int m,int n)
{
 int i,j;
 printf("\t\t班级学生所有课程成绩表\n");
 printf("\t学号\t");
 for(i=1;i<=n;i++)
  printf("课程%d\t",i);
 printf("总分\t平均分\n");
 for(i=0;i<m;i++)
 {
  printf("\t%.0f\t",a[i][0]);
  for(j=1;j<=n;j++)
   printf("%.1f\t",a[i][j]);
  printf("%.1f\t%.1f\t",a[i][n+1],a[i][n+2]);
  printf("\n");
 }
}
void compute(float a[][N+4],int m,int n)
{
 int i,j;
 printf("正在计算每个学生的总分和平均分,请稍等....\n");
 for(i=0;i<m;i++)
 {
  for(j=1;j<=n;j++)
   a[i][n+1]+=a[i][j];
  a[i][n+2]=a[i][n+1]/n;
 }
}
void ave(float a[][N+4],int m,int n)
{
 int i,j;
 printf("正在计算每门课程的平均分、最高分和最低分,请稍等....\n");
 for(i=1;i<=n+2;i++)
 {
  a[m][i]=0;
  a[m+1][i]=a[m+2][i]=a[0][i];
  for(j=0;j<m;j++)
  {
   a[m][i]+=a[j][i];
   if(a[j][i]>a[m+1][i])
    a[m+1][i]=a[j][i];
   if(a[j][i]<a[m+2][i])
    a[m+2][i]=a[j][i];
  }
  a[m][i]/=m;
 }
 printf("下面显示各科的及格率和优秀率...\n");
 printf("\t\t");
 for(i=1;i<=n;i++)
 {
  printf("课程%d\t",i);
 }
 printf("\n\t平均分\t");
 for(j=1;j<=n;j++)
  printf("%.1f\t",a[m+1][j]);
 printf("\n");
 printf("\t最高分\t");
 for(j=1;j<=n;j++)
  printf("%.1f\t",a[m+1][j]);
 printf("\n");
 printf("\t最低分\t");
 for(j=1;j<=n;j++)
  printf("%.1f\t",a[m+2][j]);
 printf("\n");
}
void sort(float a[][N+4],int m,int n)
{
 int i,j,k;
 float t,b[M+3][N+4];
 for(i=0;i<m;i++)
  for(j=0;j<n+4;j++)
   b[i][j]=a[i][j];
 for(i=0;i<m-1;i++)
 {
  k=i;
  if(b[i][n+1]==0)
  {
   printf("对不起,总分还没有计算,请先计算总分在排序.....\n");
   return;
  }
  for(j=i+1;j<m;j++)
   if(b[j][n+1]>b[k][n+1])
    k=j;
  if(k!=i)
   {
    for(j=0;j<=n+2;j++)
    {
     t=b[k][j];b[k][j]=b[i][j];b[i][j]=t;
    }
   }
   b[i][n+3]=i+1;
 }
 b[i][n+3]=i+1;
 printf("排序后-----------------------\n");
 printf("\t学号\t");
 for(i=1;i<=n;i++)
  printf("课程%d\t",i);
 printf("总分\t平均分\t名次\n");
 for(i=0;i<m;i++)
 {
  printf("\t%.0f\t",b[i][0]);
  for(j=1;j<=n;j++)
         printf("%.1f\t",b[i][j]);
  printf("%.1f\t%.1f\t",b[i][n+1],b[i][n+2]);
  printf("%.0f\n",b[i][n+3]);
 }
 
}
void pass(float a[][N+4],int m,int n)
{
 int i,j,jg=0,yx=0;
 printf("正在计算每门课程的及格率和优秀率,请稍等....\n");
 printf("下面显示各科的及格率和优秀率.....\n");
 printf("\t\t");
 for(i=1;i<=n;i++)
 {
  printf("课程%d\t",i);
 }
 for(i=1;i<=n+2;i++)
 {
  a[m+3][i]=a[m+4][i]=0;jg=yx=0;
  for(j=0;j<m;j++)
  {
   if(a[j][i]>=60)
    jg++;
   if(a[j][i]>=85)
    yx++;
  }
  a[m+3][i]=jg*1.0/m;
  a[m+4][i]=yx*1.0/m;
 }
 printf("\n\t及格率\t");
 for(i=1;i<=n;i++)
  printf("%.1f%%\t",a[m+3][i]*100);
 printf("\n\t优秀率\t");
 for(i=1;i<=n;i++)
  printf("%.1f%%\t",a[m+4][i]*100);
 printf("\n");
}
void fail(float a[][N+4],int m,int n)
{
 int i,j,bjg[N];
 for(j=1;j<=n;j++)
 {
  bjg[j]=0;
  printf("课程%d不及格学生的学号为:",j);
  for(i=0;i<m;i++)
   if(a[i][j]<60)
   {
    printf("%.0f\t",a[i][0]);
    bjg[j]++;
   }
  printf("\n\t\t\t该课程共有%d个学生不及格\n",bjg[j]);
 }
}
void main()
{
 float stu[M+3][N+4];
 int i,kc,rs;
 cover();
 printf("老师,你好!欢迎使用本系统\n");
 printf("请问本学期一共进行了几门考试:");
 scanf("%d",&kc);
 printf("请输入该班级的学生人数:");
 scanf("%d",&rs);
 input(stu,rs,kc);
 while(1)
 {
  i=select();
  switch(i)
  {
  case 0:compute(stu,rs,kc);break;
  case 1:show(stu,rs,kc);break;
  case 2:ave(stu,rs,kc);break;
  case 3:sort(stu,rs,kc);break;
  case 4:pass(stu,rs,kc);break;
  case 5:fail(stu,rs,kc);break;
  case 6:printf("谢谢使用,再见.....\n");exit(0);
  }
  printf("本操作完成,单击任意键继续....\n");
  getch();
 }
}

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值