# 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;
}
}
}
你可修改一下
温馨提示:答案为网友推荐,仅供参考