将这个学生成绩管理系统[C语言]不用链表而用结构体数组实现

#define N 10
struct scorenode
{int number;
char name[10];
float yuwen;
float yingyu;
float shuxue;
float save;
}score[N];
int n,k;
void input(struct scorenode *p)
{
struct scorenode *p1,*p2,*p3,*max,*head;
int i,j;
float fen;
char t[10];
FILE *fp;
char filepn[20];
n=0;
head=p;
p1=p2=p3=head;
printf("学生资料,0退出!\n");
repeat1: printf("输入学生学号:");
scanf("%d",&p1->number);
if(p1->number==0)
goto end;
else
{
p3=head;
if(n>0)
{if(p1->number!=p3->number)
p3++;
else
{printf("重复,重输!\n");
goto repeat1;
}
}
}
}
printf("姓名:");
scanf("%s",&p1->name);
printf("语文成绩:");
scanf("%f",&p1->yuwen);
while(p1->yuwen<0||p1->yuwen>100)
{getchar();
printf("错误,重输入");
scanf("%f",&p1->yuwen);}
printf("英语成绩:");
scanf("%f",&p1->yingyu);
while(p1->yingyu<0||p1->yingyu>100)
{getchar();
printf("错误,重输入");
scanf("%f",&p1->yingyu);}
printf("数学成绩:");
scanf("%f",&p1->shuxue);
while(p1->shuxue<0||p1->shuxue>100)
{getchar();
printf("错误,重输入");
scanf("%f",&p1->shuxue);}
while(p1->number!=0)
{
n=n+1;
if(n==1)
head=p1;
else
p2++;
p1=p2;
printf("学生资料,0退出!\n");
repeat2:printf("学生学号:");
scanf("%d",&p1->number);
if(p1->number==0)
goto end;
printf("学生姓名:");
scanf("%s",&p1->name);
printf("语文成绩:");
scanf("%f",&p1->yuwen);
while(p1->yuwen<0||p1->yuwen>100)
{getchar();
printf("错误,重输入");
scanf("%f",&p1->yuwen);}
printf("英语成绩:");
scanf("%f",&p1->yingyu);
while(p1->yingyu<0||p1->yingyu>100)
{getchar();
printf("错误,重输入");
scanf("%f",&p1->yingyu);}
printf("数学成绩:");
scanf("%f",&p1->shuxue);
while(p1->shuxue<0||p1->shuxue>100)
{getchar();
printf("错误,重输入");
scanf("%f",&p1->shuxue);}
}
end: p1=head;
p3=p1;
p2++;
printf("输入的学生:%d个!\n",n);
printf("请输入文件文件名:");
scanf("%s",filepn);
if((fp=fopen(filepn,"w+"))==NULL)
{
printf("不能打开文件!\n");}
fprintf(fp,"考试成绩管理系统\n");
fprintf(fp,"|学号\t|姓名\t|语文\t|英语\t|数学\t|\n");
while(i<n)
{i=1; fprintf(fp,"%d\t%s\t%.1f\t%.1f\t%.1f\t\n",p1->number,p1->name,p1->yuwen,p1->yingyu,p1->shuxue);
i++;p1++;
}
fclose(fp);
printf("已经保存!\n");
}
int menu(k)
{int i;
printf("\t\t\t\t考试成绩管理系统\n");
for(i=0;i<80;i++)
printf("*");
printf("1输入学生资料\t2所有学生总分平均分\t");
printf("3所有课程平均分\t4按平均分排序\t5按学号查询学生各科成绩及平均成绩");
printf("6修改信息\t7删除信息\n");
for(i=0;i<80;i++)
printf("*");
printf("请选择操作:");
scanf("%d",&k);
getchar();
return (k);}
main(){struct scorenode *head;
head=score;
while(1)
{k=menu(k);
switch(k) {case 1: head=creat ();break;
case 2: statistics_Sall (head);break;
case 3: Caverage(head); break;
case 4: taxis (head); break;
case 5: head=search (head); break;
case 6: head=alter (head); break;
case 7: head=del(head);break;
case 0: exit(0);
default: printf("错误,请重试!\n"); }}}
请高手将它改正一下,另外可以帮我把它完成么?!如果能帮我在我的基础上完成整个程序,我会追加80分的!说到做到!

看看我变得这个,希望对你有所启发
/* Note:Your choice is C IDE */
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "ctype.h"
#include "math.h"

#define N 3 /*这是总的学生数,你可以想多少就多少*/

char name[N][20];
int i,num[N];
float yuwen[N],shuxue[N],yingyu[N];

int input()
{
for(i=0;i<N;i++)
{
printf("请输入第[%d]学生的姓名\n",i+1);
scanf("%s",name[i]);
printf("请输入第[%d]学生的学号\n",i+1);
scanf("%d",&num[i]);
printf("请输入第[%d]学生的语文成绩\n",i+1);
scanf("%f",&yuwen[i]);
printf("请输入第[%d]学生的数学成绩\n",i+1);
scanf("%f",&shuxue[i]);
printf("请输入第[%d]学生的英语成绩\n",i+1);
scanf("%f",&yingyu[i]);
}
return(i);
}

void sort1()
{
int n;
float t;
int i,j;
char a[10];
for(i=0;i<N-1;i++)
for(j=i+1;j<N;j++)
{
if(num[i]>num[j]) /*条件成立,交换前后学号*/
{ n=num[j];
num[j]=num[i];
num[i]=n;

strcpy(a,name[j]); /*交换前后姓名,使与学号相对应*/
strcpy(name[j],name[i]);
strcpy(name[i],a);

t=yuwen[j]; /*交换前后语文成绩,使与学号想对应*/
yuwen[j]=yuwen[i];
yuwen[i]=t;

t=shuxue[j]; /*交换前后数学成绩,使与学号想对应*/
shuxue[j]=shuxue[i];
shuxue[i]=t;

t=yingyu[j]; /*交换前后英语成绩,使与学号想对应*/
yingyu[j]=yingyu[i];
yingyu[i]=t;
}
}
printf("学生成绩按学号排序:\n");
printf("姓名\t学号\t语文成绩\t数学成绩\t英语成绩\n");
for(i=0;i<N;i++)
printf("%s\t%d\t%.2f\t\t%.2f\t\t%.2f\n",name[i],num[i],yuwen[i],shuxue[i],yingyu[i]);

}
void sort2()
{
int i,j;
float t;
char a[10];
int b;
for(i=0;i<N-1;i++)
for(j=i+1;j<N;j++)
{
if(yuwen[j]+shuxue[j]+yingyu[j]>yuwen[i]+shuxue[i]+yingyu[i])
{b=num[i];
num[i]=num[j];
num[j]=b;

strcpy(a,name[j]);/*交换前后姓名,使与学号相对应*/
strcpy(name[j],name[i]);
strcpy(name[i],a);

t=yuwen[i]; /*交换前后语文成绩,使与学号想对应*/
yuwen[i]=yuwen[j];
yuwen[j]=t;

t=shuxue[i]; /*交换前后数学成绩,使与学号想对应*/
shuxue[i]=shuxue[j];
shuxue[j]=t;

t=yingyu[i]; /*交换前后英语成绩,使与学号想对应*/
yingyu[i]=yingyu[j];
yingyu[j]=t;
}
}
printf("学生成绩按总分排序:\n");
printf("姓名\t学号\t总分\n");
for(i=0;i<N;i++)
{
printf("%s\t%d\t%.2f",name[i],num[i],yuwen[i]+shuxue[i]+yingyu[i]);
printf("\n");
}

}

void stat()
{
int i,j;
float max1,max2,max3,min1,min2,min3;
float sum1=0,sum2=0,sum3=0;
float aver1,aver2,aver3;
printf("姓名\t学号\t语文\t数学\t英语\t总分\t平均分\n");
for(i=0;i<N;i++)
{
printf("%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f",name[i],num[i],yuwen[i],shuxue[i],yingyu[i],
yuwen[i]+shuxue[i]+yingyu[i],(yuwen[i]+shuxue[i]+yingyu[i])/3);
printf("\n");
}

for(i=0;i<N;i++) /*求总分*/
{

sum1=sum1+yuwen[i];
sum2=sum2+shuxue[i];
sum3=sum3+yingyu[i];
}
aver1=sum1/N;/*求平均分*/
aver2=sum2/N;
aver3=sum3/N;

max1=yuwen[N-1];min1=yuwen[0];/*求语文成绩的最高分和最低分*/
for(j=0;j<N;j++)
{
if(max1<yuwen[j])
max1=yuwen[j];
if(min1>yuwen[j])
min1=yuwen[j];
}

max2=shuxue[N-1];min2=shuxue[0]; /*求数学成绩的最高分和最低分*/
for(j=0;j<N;j++)
{
if(max2<shuxue[j])
max2=shuxue[j];
if(min2>shuxue[j])
min2=shuxue[j];
}

max3=yingyu[N-1];min3=yingyu[0];/*求英语成绩的最高分和最低分*/
for(j=0;j<N;j++)
{
if(max3<yingyu[j])
max3=yingyu[j];
if(min3>yingyu[j])
min3=yingyu[j];
}

printf("语文成绩统计:\n");
printf("平均分:%.2f\t""最高分:%.2f\t""最低分:%.2f\n",aver1,max1,min1);

printf("数学成绩统计:\n");
printf("平均分:%.2f\t""最高分:%.2f\t""最低分:%.2f\n",aver2,max2,min2);

printf("英语成绩统计:\n");
printf("平均分:%.2f\t""最高分:%.2f\t""最低分:%.2f\n",aver3,max3,min3);
}

void main()
{ int k;
while(1)
{
printf("*******************学生成绩管理系统*********************\n");
printf("\t\t | 1. 输入学生资料 |\n");
printf("\t\t | 2. 学生成绩排序 |\n");
printf("\t\t | 3. 学生成绩统计 |\n");
printf("\t\t | 0. 退出 |\n");
printf("********************************************************\n");
printf("请输入(0~3)选择:");
scanf("%d",&k);
switch(k) /*用switch语句实现功能选择*/
{
case 1: input();break;/*输入学生资料函数*/
case 2: sort1();sort2();break;/*成绩排序函数*/
case 3: stat();break;/*成绩统计函数*/
case 0: exit(0);break;/*退出*/
}
}
}
温馨提示:答案为网友推荐,仅供参考
相似回答