当前位置:编程学习 > C/C++ >>

学生成绩管理C语言

答案:#include<stdio.h>
#include<Windows.h>/*后面关闭程序需要调用此头文件*/
#include<string.h>
#include<stdlib.h>

#define MAX 1000/*定义学生的个数*/
typedef struct/*结构体*/
{
 char number[20];/*定义学生的学号*/
 char name[20];
 int grade[4];/*定义学生的四门成绩,这里用的整型,也可以使用浮点型*/
 float average;
 int sum;
}info;

 int Input(info student[],int);/*成绩录入函数*/
 void Count(info student[],int);/*平均分、总分计算函数*/
 void Sort(info student[],int);/*成绩按总分排序*/
 void Seek(info student[],int);/*成绩的筛选*/
 int import(info student[]);/*成绩导入*/

int main()
{
 info student[MAX];/*student[N]用于交换数据用*/
 int choice;/*程序的选项*/
 int num;
 num = import(student);
 printf("\t\t学生成绩管理系统\n");
 printf("===================================================\n");
 printf("1、学生成绩录入\n");
 printf("2、按总分排名(高->低)\n");
 printf("3、输出课程号成绩在90分以上且总分排名前五的学生情况\n");
 printf("0、退出程序\n");
 printf("===================================================\n");
 printf("\n请输入选项:");
 choice=getchar();
 while(choice!='0')
 {
  switch(choice)
  {
   case '1':
    num = Input(student,num);
    break;
   case '2':
    Sort(student,num);
    break;
   case '3':
    Seek(student,num);
    break;
   default:
    printf("请输入正确选项!");
    break;
  }
  printf("\n请输入选项:");
  fflush(stdin);/*必须清空键盘缓存区的回车,否则程序不能正常运行,后面也如此*/
  choice=getchar();
 }
 exit(0);/*当选项为0时,退出程序,这个对应windows.h这个头文件*/
 fflush(stdin);
 getchar();
 return 0;
}

int import(info student[])
{
 FILE *fp;
 int i = 0;
 if((fp = fopen("stu.dat","r")) == NULL)
 {
  printf("文件打开失败\n");
 // exit(1);
 }
 while(fscanf(fp,"%s%s%d%d%d%d",student[i].average,student[i].name,student[i].grade[0],student[i].grade[1],student[i].grade[2],student[i].grade[3]) != EOF)
  i++;
 return i;
}

int Input(info student[],int num)/*成绩录入函数*/
{
 int n = num;
 int j;
 FILE *fp;
 if((fp = fopen("stu.dat","ra+")) == NULL)
 {
  printf("打开文件失败\n");
  exit(1);
 }
   printf("请输入学生的学号,姓名和四门课程的成绩(输入学号为0结束)\n");
 while(1)
 {
  student[n].sum = 0;
  scanf("%s",&student[n].number);
  if(strcmp(student[n].number,"0") == 0)
 break;
  scanf("%s",student[n].name);
  for(j=0;j<4;j++)
  {
   scanf("%d",&student[n].grade[j]);
   student[n].sum += student[n].grade[j];
  }
  student[n].average = student[n].sum/4.0;
   fprintf(fp,"%s  %s  %5d%5d%5d%5d%5.2f%d",student[n].number,student[n].name,student[n].grade[0],student[n].grade[1],student[n].grade[2],student[n].grade[3],student[n].average,student[n].sum);
 n++;
 }
 fclose(fp);
 return n;
}

void Sort(info student[],int num)/*成绩按总分排序*/
{
 int i,j;
 info t;
 for(i=0;i<num;i++)/*冒泡法排序*/
 {
  for(j=0;j<num-i-1;j++)
  {
   if(student[j].sum<student[j+1].sum)
   {
    t = student[j];
    student[j] = student[j+1];
    student[j+1] = t;
   }
  }
 }
 printf("总分排名(高->低)结果\n");
 printf("======================================================\n");
 printf("学号\t成绩1\t成绩2\t成绩3\t成绩4\t平均分\t总分\n");
 for(i=0;i<num;i++)
 {
  printf("%s\t",student[i].number);
  printf("%s\t",student[i].name);
  for(j=0;j<4;j++)
  {
   printf("%d\t",student[i].grade[j]);
  }
  printf("%.2f\t%d",student[i].average,student[i].sum);
  printf("\n");
 }
 printf("======================================================\n");
}

void Seek(info student[],int num)/*成绩的筛选*/
{
 char n[20];
 int i,j,l,k=0;
 info t;
 for(i=0;i<num;i++)/*冒泡法排序*/
 {
  for(j=0;j<num-i-1;j++)
  {
   if(student[j].sum<student[j+1].sum)
   {
    t = student[j];
    student[j] = student[j+1];
    student[j+1] = t;
   }
  }
 }
 printf("请输入课程号(20110201,20110202,20110203,20110204):");/*课程号的选择*/
 fflush(stdin);
 gets(n);
 fflush(stdin);
 if(strcmp(n,"20110201")==0)
  l=0;
 else if(strcmp(n,"20110202")==0)
  l=1;
 else if(strcmp(n,"20110203")==0)
  l=2;
 else if(strcmp(n,"20110204")==0)
  l=3;
 printf("筛选结果\n");
 printf("======================================================\n");
 printf("学号\t成绩1\t成绩2\t成绩3\t成绩4\t平均分\t总分\n");
 for(i=0;i<num;i++)
 {
  if(student[i].grade[l]>=90)
  {
   k++;
   printf("%s\t",student[i].number);
   printf("%s\t",student[i].name);
   for(j=0;j<4;j++)
   {
    printf("%d\t",student[i].grade[j]);
   }
   printf("%.2f\t%d",student[i].average,student[i].sum);
   printf("\n");
  }
  if(k>=5)
   break;
 }
 printf("======================================================\n");
}

上一个:c语言和c++区别
下一个:计算机c语言所有命令

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,