简单学生成绩管理系统

简单学生成绩管理系统
有N个结构体变量,内有学生的学号,姓名,数学,英语,C语言程序设计三门成绩,学生人数不少于30人。
一.
1. Input函数输入数据
2. Avge函数求各科学生的平均成绩。
3. Max函数求各科学生的最高成绩和不及格成绩。
4. Out函数输出各科学生的最高成绩和不及格成绩。
高手帮忙呀,我做了一晚上都做不好。

#define N 7 /*学生的人数*/
typedef struct
{
char num[5];
char name[10]; /*记录姓名和学号*/
float math,english,comput,average; /*各个科目及平均分*/
}mark; /*定义学生记录结构体类型*/
typedef struct
{
float fen[4];
int n;
}fsp;/*定义学生记录转化的中间变量*/

void count(mark *s)/*统计各科平均分 各科的最高(低)分及各分数段的人数*/
{
float ave[3]={0};/*存放各科平均分 */
float m[3][2] ;
int num[3][5]={0};/*存放各分数段的人数*/
int i;
m[0][1]=m[0][0]=s->math;
m[1][0]=m[1][1]=s->english;
m[2][0]=m[2][1]=s->comput;
for(i=0;i<N;i++)
{ ave[0]+=(s+i)->math;
ave[1]+=(s+i)->english;
ave[2]+=(s+i)->comput;
if( (s+i)->math > m[0][0] )
m[0][0]=(s+i)->math;
else if( (s+i)->math < m[0][1] )
m[0][1]=(s+i)->math;
if( (s+i)->english > m[1][0] )
m[1][0]=(s+i)->english;
else if( (s+i)->english < m[1][1] )
m[1][1]=(s+i)->english;
if( (s+i)->comput > m[2][0] )
m[2][0]=(s+i)->comput;
else if( (s+i)->comput < m[2][1] )
m[2][1]=(s+i)->comput;
/*统计各科的最高(低)分*/
if((s+i)->math<60.0)
num[0][0]++;
else if((s+i)->math<70.0)
num[0][1]++;
else if((s+i)->math<80.0)
num[0][2]++;
else if((s+i)->math<90.0)
num[0][3]++;
else num[0][4]++;
/*统计数学各分数段的人数*/
if((s+i)->english<60.0)
num[1][0]++;
else if((s+i)->english<70.0)
num[1][1]++;
else if((s+i)->english<80.0)
num[1][2]++;
else if((s+i)->english<90.0)
num[1][3]++;
else num[1][4]++;
/*统计英语各分数段的人数*/
if((s+i)->comput<60.0)
num[2][0]++;
else if((s+i)->comput<70.0)
num[2][1]++;
else if((s+i)->comput<80.0)
num[2][2]++;
else if((s+i)->comput<90.0)
num[2][3]++;
else num[2][4]++;
/*统计计算机各分数段的人数 */
}
for(i=0;i<3;i++)
ave[i]=ave[i]/N;
printf("三门科的平均分分别为:\
%.1f %.1f %.1f\
",ave[0],ave[1],ave[2]);
printf("三门科的最高分与最底分分别为:\
");
printf("%.1f %.1f\
%.1f %.1f\
%.1f %.1f\
",
m[0][0],m[0][1],m[1][0],m[1][1],m[2][0],m[2][1]);
printf("三门科不及格 60-69 70-79 80-89 90分以上的人数分别为:\
");
printf("数学: %3d%5d%6d%6d%4d\
",num[0][0],num[0][1],num[0][2],num[0][3],num[0][4]);
printf("英语: %3d%5d%6d%6d%4d\
",num[1][0],num[1][1],num[1][2],num[1][3],num[1][4]);
printf("计算机:%3d%5d%6d%6d%4d\
",num[2][0],num[2][1],num[2][2],num[2][3],num[2][4]);
}
void found(mark *s)/*输入学生的学号查询学生的成绩情况*/
{
char a[10];/*接受输入的学号*/
int flag,i;/*循环变量*/
char * b="exit";
do
{ flag=0;
printf("请输入所要查询的学生的学号或姓名\
");
getchar();
gets(a);
for(i=0;i<N;i++)

{printf("该生的学号,姓名,各门课程及平均成绩为:\<br>%s %s %.1f %.1f %.1f %.1f\<br>"<br> ,(s+i)->num,(s+i)->name,(s+i)->math,(s+i)->english,(s+i)->comput,(s+i)->average);/*成绩打印*/<br> flag=1;}
if(flag==0) printf("查无此人\
");
}while(strcmp(a,b));
printf("查询结束");
}
main()
{
mark *s,*a,*b,*c,*d;
fsp *p;
s=(mark*)malloc(N*sizeof(mark));
a=(mark*)malloc(N*sizeof(mark));
b=(mark*)malloc(N*sizeof(mark));
c=(mark*)malloc(N*sizeof(mark));
d=(mark*)malloc(N*sizeof(mark));
p=(fsp*)malloc(N*sizeof(fsp));/*各变量空间开辟 */

printf("初始化学生的记录为:\
");

printf("按数学成绩排序学生的记录为:\
");

printf("按英语成绩排序学生的记录为:\
");

printf("按计算机成绩排序学生的记录为:\
");

printf("按平均成绩排序学生的记录为:\
");

count(s);
found(s);

}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-10
//基本的都有了,c 的,文字说明自己加。有问题再找。
#include<iostream>
#include<string>
#include<fstream>
using namespace std;

struct Student
{
string num;
double gra1;
double gra2;
double gra3;
double ave;
int t;//标志是不是被删除的。
};
Student stu[100];
int n;// 表示总人数
Student temp;
//输入成绩
void Input()
{
int t,i;
t=n;
for(i=0;i<n;i )
{
if(stu[i].t==0) {t=i;break;}
}
cin>>temp.num>>temp.gra1 >>temp.gra2 >>temp.gra3 ;

stu[t]=temp;
stu[t].t=1;
if(t==n) n ;

}

void Sort()
{
int i,j;

for(i=0;i<n;i )
{
for(j=i 1;j<n;j )
{
if(stu[j].ave>stu[j-1].ave)
{
temp=stu[j];
stu[j]=stu[j-1];
stu[j-1]=temp;
}
}
}
}
void Ave()
{
int i;
for(i=0;i<n;i ) stu[i].ave=(stu[i].gra1 stu[i].gra2 stu[i].gra3 )/3;
}

void Dis ()
{
int i;
for(i=0;i<n;i )
{
if(stu[i].t==1)
{
cout<<stu[i].num<<" "<<stu[i].gra1<<" "<<stu[i].gra2
<<" "<<stu[i].gra3<<" "<<stu[i].ave<<endl;
}
}
}
void Del(int t)
{
int i;
string name;
cin>>name;
int p=-1;
for(i=0;i<n;i )
{
if(stu[i].t==1本回答被网友采纳
相似回答