欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

期末成绩管理系统

程序员文章站 2022-03-02 09:13:29
#include"stdio.h" #include"string.h" #include"conio.h" #include"math.h" #define SIZE 300 typedef struct student { int number; int score[3]; } STUDENT; ......

#include"stdio.h"

#include"string.h"

#include"conio.h"

#include"math.h"

#define size 300

typedef struct student

{

int number;

int score[3];

} student;

typedef enum boolen

{false,true

}flag;

int accept_data(student stu[],int grade[]);

void show_data(student stu[],int sum,int grade[]);

void draw(int grade[]);

void count(int *max,int *min,double *pass,double ave[],double f[],student stu[],int sum);

void show_data2(int max,int min,double pass,double ave[],double f[]);

int main()

{int sum,max,min;

double pass=0;

int grade[11]={0};

student stu[size];

double ave[size],f[size];

sum=accept_data(stu,grade);

show_data(stu,sum,grade);

draw(grade);

count(&max,&min,&pass,ave,f,stu,sum);

show_data2(max,min,pass,ave,f);

return 0;

}

int accept_data(student stu[],int grade[])

{int i=0,sum=0,temp,a1,a2;

flag flag;

printf("\n请输入计算总评成绩时使用平时成绩与期末成绩的比例,用整数表示");

scanf("%d%d",&a1,&a2);

while(i<size)

{printf("\n请输入学号:");

scanf("%d",&stu[i].number);

if(stu[i].number==-1)

{sum=i;

break;

}

printf("\n请输入学生的平时成绩和期末成绩:");

flag=true;

while(flag==true)

{scanf("%d%d",&stu[i].score[0],&stu[i].score[1]);

if(stu[i].score[0]<=100&&stu[i].score[0]>=0&&stu[i].score[1]<=100&&stu[i].score[1]>=0)

flag=false;

else

printf("\n\007 错误数据!请再次输入学生的平时成绩和期末成绩:"); 

}

temp=(int)(1.0*a1/100*stu[i].score[0]+1.0*a2/100*stu[i].score[1]);

stu[i].score[2]=temp;

temp=(stu[i].score[1])/10;

if(temp==10)

grade[10]++;

else grade[temp+1]++;

i++;

}

return sum;

}

void show_data(student stu[],int sum,int grade[])

{

int i,j;

for(i=0;i<sum;i++)

{printf("%4d",stu[i].number);

for(j=0;j<3;j++)

printf("%4d",stu[i].score[j]);

printf("\n");

}

for(i=1;i<=10;i++)

printf("%d",grade[i]);

}

void count(int *max,int *min,double *pass,double ave[],double f[],student stu[],int sum)

{int i,j,p_sum=0;

int total[3];

double temp;

*max=*min=stu[0].score[1];

if(stu[0].score[1]>=60)

p_sum++;

for(i=1;i<sum;i++)

{if((stu[i].score[1])>*max)

*max=stu[i].score[1];

if((stu[i].score[1])<*min)

*min=stu[i].score[1];

if(stu[i].score[1]>=60)

p_sum++;

}

*pass=(1.0*p_sum/sum)*100;

for(i=0;i<=2;i++)

total[i]=0;

for(j=0;j<3;j++)

for(i=0;i<sum;i++)

{

total[j]=total[j]+stu[i].score[j];

}

for(j=0;i<3;j++)

{ave[j]=total[j]/sum;

}

for(j=0;j<3;j++)

{

f[j]=0;

for(i=0;i<sum;i++)

{

temp=stu[i].score[j]-ave[j];

f[j]=f[j]+temp*temp;

}

f[j]=sqrt(fabs(f[j])/sum);

}

}

void show_data2(int max,int min,double pass,double ave[],double f[])

{

int j;

char str1[3][20]={"平时成绩平均分","期末成绩平均分","总评成绩平均分"};

char str2[3][20]={"平时成绩标准差","期末成绩标准差","总评成绩平标准差"};

printf("\n 及格率=%6.2f%%最高分=%d最低分=%d\n",pass,max,min);

for(j=0;j<3;j++)

printf("\n %s=%6.2f%s=%6.2f\n",str1[j],ave[j],str2[j],f[j]);

}

void draw(int grade[])

   {

   int i,j,max,k,temp,x;

char screen[22][44];

printf("\n 模拟直方图\n");

max=0;

for(i=1;i<=10;i++)

if(grade[i]>max)

max=grade[i];

for(i=1;i<=10;i++)

{grade[i]=(int)(20.0*grade[i]/max+0.5);

}

for(i=0;i<=21;i++)

for(j=0;j<=41;j++)

screen[i][j]=0;

for(i=0;i<=41;i++)

screen[21][i]='-';

screen[21][41]='x';

screen[0][0]='y';

for(i=1;i<=21;i++)

screen[i][0]='|';

k=1;

for(x=1;x<=10;x++,k=k+4)

{temp=grade[x];

if(temp!=0)

for(i=1;i<=temp;i++)

{

for(j=1;j<=4;j++)

{screen[20-i+1][j+k]='*';

}

}

}

for(i=0;i<=21;i++)

{for(j=0;j<=41;j++)

if(screen[i][j]!=0)

printf("%c",screen[i][j]);

else

printf(" ");

printf("\n");

}

printf("0  10  20  30  40  50  60  70  80  90  100\n");

getch();

   }

本程序主要通过定义含有学号和3个成绩的student结构体,来实现对录入数据的操作,主要实现功能有求最高分数和最低分数,已经求不及格人数,通过对平时成绩加期末成绩来判断,期末成绩和平时成绩所占比例用户自己输入,最后调用draw函数来显示各个分数段的比例,通过*个数显示。

这是本人第一次发帖,不足之处,还望见谅指正。