C语言学生成绩管理系统

学生信息包括学号、姓名、3门考试成绩。试设计一学生成绩管理系统,使之能提供以下功能:
1、学生成绩录入功能
2、统计 :
1)所有学生的总分及平均分;
2)所有课程的平均分。
3、排序:按平均分
4、查找 :输入一个学生学号,输出其各科成绩及平均成绩
5、修改、删除学生信息 (任选一项)

# include<stdio.h>
# include<malloc.h>
#include<stdio.h>
#include<string.h>
static int g;
struct Student
{
int num;
char name[100];
int age;
char faculty[100];
float math;
float physics;
float english;

float ts;//total score,总分
float average;//pingjunfen;

};
void xianshi()

{

printf("\n\n*****************学生档案管理系统*************\n\n");
printf(">1显示每个学生信息\n");
printf(">2根据学生的总分进行排序输出\n");
printf(">3根据学生的数学分数进行排序输出\n");
printf(">4根据学生的物理分数进行排序输出\n");
printf(">5根据学生的英语分数进行排序输出\n");
printf(">6输出各科成绩的平均值\n");
printf(">7查找学生信息\n");
printf(">8增加学生信息\n");
printf(">9删除学生信息\n");
printf(">10修改学生信息\n");
printf(">11退出管理系统\n");
printf("请从1-11中选择您的操作:\n");

}
void InputStudent(struct Student * p, int i)
{
int t ;
for (t=0;t<i;++t)
{
printf("请输入第%d个同学的档案信息:\n",t+1);
printf("学号:");
scanf("%d",&p[t].num);
printf("姓名:");

scanf("%s",p[t].name);
printf("年龄:");
scanf("%d",&p[t].age);
printf("院系:");

scanf("%s",p[t].faculty);

printf("数学:");
scanf("%f",&p[t].math);
printf("物理:");
scanf("%f",&p[t].physics);
printf("英语:");
scanf("%f",&p[t].english);

}
}

void OutputStudent(struct Student * p, int i)
{
int t ;
//float ts;//total score,总分
// float average;//pingjunfen;
for (t=0;t<i;++t)
{
p[t].ts = p[t].math+p[t].physics+p[t].english;
p[t].average = p[t].ts /3;
printf("\n\n\n第%d个同学的档案信息:\n",t+1);
printf("学号:");
printf("%d ",p[t].num);
printf("姓名:");
printf("%s ",p[t].name);
printf("院系:");
printf("%s ",p[t].faculty);
printf(" 数学:");
printf("%f ",p[t].math);
printf("物理: ");
printf("%f ",p[t].physics);
printf("英语: ");
printf("%f ",p[t].english);

printf("平均成绩: %f",p[t].average);
printf("总成绩:\n%f",p[t].ts);
}
printf("\n");
}
void OutputStudent1(struct Student * p, int t)
{
// int t ;
p[t].ts = p[t].math+p[t].physics+p[t].english;
p[t].average = p[t].ts /3;
printf("\n\n\n第%d个同学的档案信息:\n",t+1);
printf("学号:");
printf("%d\n",p[t].num);
printf("姓名:");
printf("%s\n",p[t].name);
printf("院系:");
printf("%s",p[t].faculty);
printf("数学:");
printf("%f",p[t].math);
printf("物理:");
printf("%f",p[t].physics);
printf("英语:");
printf("%f",p[t].english);
printf("平均成绩:%f",p[t].average);
printf("总成绩:\n%f",p[t].ts);
printf("\n");
}

void TsSort(struct Student * p, int len)
{
int i,j;
struct Student t;
for(i=0;i<len;++i)
{ p[i].ts = p[i].math+p[i].physics+p[i].english;
p[i].average = p[i].ts /3;
}
for (j=len-1;j>0;j--)
for (i=0;i<j;i++)
{
if(p[i].ts<p[i+1].ts)
{
t=p[i];
p[i]=p[i+1];
p[i+1]=t;
}
}
}
void MathSort(struct Student * p, int len)
{
int i,j;
struct Student t;
for(i=0;i<len;++i)
{ p[i].ts = p[i].math+p[i].physics+p[i].english;
p[i].average = p[i].ts /3;
}
for (j=len-1;j>0;j--)
for (i=0;i<j;i++)
{
if(p[i].math<p[i+1].math)
{
t=p[i];
p[i]=p[i+1];
p[i+1]=t;
}
}
}
void PhysicsSort(struct Student * p, int len)
{
int i,j;
struct Student t;
for(i=0;i<len;++i)
{ p[i].ts = p[i].math+p[i].physics+p[i].english;
p[i].average = p[i].ts /3;
}
for (j=len-1;j>0;j--)
for (i=0;i<j;i++)
{
if(p[i].physics<p[i+1].physics)
{
t=p[i];
p[i]=p[i+1];
p[i+1]=t;
}
}
}
void EnglishSort(struct Student * p, int len)
{
int i,j;
struct Student t;
for(i=0;i<len;++i)
{ p[i].ts = p[i].math+p[i].physics+p[i].english;
p[i].average = p[i].ts /3;
}
for (j=len-1;j>0;j--)
for (i=0;i<j;i++)
{
if(p[i].english<p[i+1].english)
{
t=p[i];
p[i]=p[i+1];
p[i+1]=t;
}
}
}

void Average (struct Student * p, int len)
{
int i ;
float ma=0.0;
float pa=0.0;
float ea=0.0;
for(i=0;i<len;++i)
{
ma+= p[i].math;
pa+= p[i].physics;
ea+=p[i].english;
}
ma=ma/len;
pa=pa/len;
ea=ea/len;
printf("数学的平均成绩是%f\n",ma);
printf("物理的平均成绩是%f\n",pa);
printf("英语的平均成绩是%f\n",ea);

}
void Query(struct Student * p, int len)
{

int i,j;
char c;
int marker=0;

//int num;
char na[100];

while(1){

printf("按什么查询?\n");
printf(">1根据学号查询\n");
printf(">2根据姓名查询\n");
printf(">3根据所在系查询\n");
scanf("%d",&i);
while ((c = getchar()) != '\n')
i=10;
switch (i)
{
case 1:
printf(">根据学号查询\n");
scanf("%d",&i);
while ((c = getchar()) != '\n')
continue;
for(j=0;j<len;j++)
{
if(i==p[j].num)
{
OutputStudent1(p,j);
return;
}

}
printf("没有此学号的学生\n");

return;
case 2:
printf(">根据姓名查询\n");
scanf("%s",na);
while ((c = getchar()) != '\n')
continue;
for(j=0;j<len;j++)
{
if(0==strcmp(na,p[j].name))
{
OutputStudent1(p,j);

marker=1;
}

}
if(0==marker)
{
printf("没有此姓名的学生\n");

}

return;
case 3:
printf(">根据所在系查询\n");
scanf("%s",na);
while ((c = getchar()) != '\n')
continue;
for(j=0;j<len;j++)
{
if(0==strcmp(na,p[j].faculty))
{
OutputStudent1(p,j);

marker=1;
}

}
if(0==marker)
{
printf("没有此姓名的学生\n");

}
return;

//break;
default:
printf("输入有误,请重新输入\n");
//goto A;
break;
}
}
}

struct Student AddMessage(struct Student * p, int len)
{

struct Student psa;

printf(">增加一个学生信息\n");

g=g+1;

printf("学号:");
scanf("%d",&psa.num);
printf("姓名:");

scanf("%s",psa.name);
printf("年龄:");
scanf("%d",&psa.age);
printf("院系:");

scanf("%s",psa.faculty);

printf("数学:");
scanf("%f",&psa.math);
printf("物理:");
scanf("%f",&psa.physics);
printf("英语:");
scanf("%f",&psa.english);
//free(p);

// OutputStudent(psa,g);
return psa;

}
void DeleteMessage(struct Student * p, int len)
{

int num;
char c;
int i;

struct Student psa;

while (1)
{
printf(">删除一个学生信息\n");

printf("请输入此学生的学号:");
scanf("%d",&num);
while ((c = getchar()) != '\n')
continue;
for(i=0;i<g;i++)
{
if(num==p[i].num)
{
psa = p[i];
p[i]=p[g-1];
p[g-1]=psa;
return ;
}

}

printf("没有此学号的学生,请重新输入");
}
}
void ModifyMessage(struct Student * p, int len)
{

int num;
char c;
int i;

struct Student psa;

while (1)
{
printf(">修改一个学生信息\n");
printf("请输入此学生的学号:");
scanf("%d",&num);
while ((c = getchar()) != '\n')
continue;
for(i=0;i<g;i++)
{
if(num==p[i].num)
{
printf("新的学生信息修改为:");
printf("学号:");
scanf("%d",&p[i].num);
printf("姓名:");

scanf("%s",p[i].name);
printf("年龄:");
scanf("%d",&p[i].age);
printf("院系:");

scanf("%s",p[i].faculty);

printf("数学:");
scanf("%f",&p[i].math);
printf("物理:");
scanf("%f",&p[i].physics);
printf("英语:");
scanf("%f",&p[i].english);
return ;

}

}

printf("没有此学号的学生,请重新输入");
}
}

int main(void)
{
int s;
char c;
int jj;

struct Student st;

printf("\n\n*******************************学生档案管理系统****************************\n\n");
printf("*******************************先输入初始学生信息*******************************\n");
printf("*****************************需要输入多少个学生信息?*************************\n");
scanf("%d",&g);
struct Student * pn=(struct Student *)malloc(g*sizeof(struct Student));
struct Student * pn1;
InputStudent(pn, g);

xianshi();

while(1)
{
scanf("%d",&s);
while ((c = getchar()) != '\n')
s=111;

switch (s)
{
case 1:
OutputStudent(pn,g);
xianshi();

break;
case 2 :
TsSort(pn,g);
OutputStudent(pn,g);
xianshi();
break;
case 3 :
MathSort(pn,g);
OutputStudent(pn,g);
xianshi();
break;
case 4 :
PhysicsSort(pn,g);
OutputStudent(pn,g);
xianshi();
break;
case 5 :
EnglishSort(pn,g);
OutputStudent(pn,g);

xianshi();
break;
case 6:
Average(pn,g);
xianshi();

break;
case 7:
Query(pn,g);
xianshi();
break;
case 8:
st=AddMessage(pn,g);
pn1 =(struct Student *)malloc(g*sizeof(struct Student));
for(jj=0;jj<g-1;jj++)
{
pn1[jj]=pn[jj];
}
pn1[g-1]=st;
free(pn);
pn=(struct Student *)malloc(g*sizeof(struct Student));
for(jj=0;jj<g;jj++)
{
pn[jj]=pn1[jj];
}

free(pn1);
printf("增加一个信息后的数据为\n");

OutputStudent(pn,g);

xianshi();
break;
case 9:
DeleteMessage(pn,g);
g=g-1;
pn1 =(struct Student *)malloc(g*sizeof(struct Student));
for(jj=0;jj<g;jj++)
{
pn1[jj]=pn[jj];
}
free(pn);
pn=(struct Student *)malloc(g*sizeof(struct Student));
for(jj=0;jj<g;jj++)
{
pn[jj]=pn1[jj];
}

free(pn1);

printf("删除一个信息后的数据为\n");
OutputStudent(pn,g);

xianshi();

break;
case 10:
ModifyMessage(pn,g);
printf("修改一个信息后的数据为\n");
OutputStudent(pn,g);
xianshi();
break;
case 11:

return ;
default:

printf("输入有误,请重新输入\n");
xianshi();
break;
}

}
}
你可修改一下
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-26
创建一个结构体,包含每个学生的所有信息,成绩可以用个特殊值表示无效,比如-1,或999。
创建一个十个元素数组,元素的类型 为上面创建的结构体
所有功能,在这组数据的基础上开发。追问

麻烦你发个编好的程序

追答

我们上班的,真没时间帮你们做课程设计的

本回答被网友采纳
第2个回答  2013-06-26
用链表就可以了追问

不懂啊。我们是让编一个程序

相似回答