C语言课程设计 C语言课程设计学生管理系统.docx
《C语言课程设计 C语言课程设计学生管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计 C语言课程设计学生管理系统.docx(29页珍藏版)》请在冰点文库上搜索。
C语言课程设计C语言课程设计学生管理系统
#include
#include
#include
#defineLENsizeof(structscorenode)
#defineDEBUG
#include
structscorenode
{intnumber;/*学号*/
charname[10];/*姓名*/
floatyuwen;/*语文成绩*/
floatyingyu;/*英语成绩*/
floatshuxue;/*数学成绩*/
structscorenode*next;
};
typedefstructscorenodescore;
intn,k;/*n,k为全局变量,本程序中的函数均可以使用它*/
/*==============================================================================================*/
score*creat2311(void)
/*功能:
创建链表,此函数带回一个指向链表头的指针*/
{
score*head;
score*p1,*p2,*p3,*max;
inti,j;
floatfen;
chart[10];
n=0;
p1=p2=p3=(score*)malloc(LEN);head=p3;
printf("Pleaseinputresaurceprint0exit!
n");
repeat1:
printf("PleaseinputNO:
(>0)");
scanf("%d",&p1->number);
while(p1->number<0)
{getchar();
printf("error,Pleaseinputagain!
");
scanf("%d",&p1->number);}
if(p1->number==0)
gotoend;
else
{
p3=head;
if(n>0)
{for(i=0;i{if(p1->number!
=p3->number)
p3=p3->next;
else
{printf("学号重复,请重输!
n");
gotorepeat1;
}
}
}
}
printf("Pleaseinputname:
");
scanf("%s",&p1->name);
printf("Pleaseinputchinesescore(0~100):
");
scanf("%f",&p1->yuwen);
while(p1->yuwen<0||p1->yuwen>100)
{getchar();
printf("error,Pleaseinputagain!
");
scanf("%f",&p1->yuwen);}
printf("Pleaseinput英语成绩(0~100):
");
scanf("%f",&p1->yingyu);
while(p1->yingyu<0||p1->yingyu>100)
{getchar();
printf("输入错误,请重新输入英语成绩");
scanf("%f",&p1->yingyu);}
printf("Pleaseinput数学成绩(0~100):
");
scanf("%f",&p1->shuxue);
while(p1->shuxue<0||p1->shuxue>100)
{getchar();
printf("输入错误,请重新输入数学成绩");
scanf("%f",&p1->shuxue);}
head=NULL;
while(p1->number!
=0)
{
n=n+1;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(score*)malloc(LEN);
printf("Pleaseinput学生资料,输0退出!
n");
repeat2:
printf("Pleaseinput学生学号(学号应大于0):
");
scanf("%d",&p1->number);
while(p1->number<0)
{getchar();
printf("输入错误,请重新输入学生学号:
");
scanf("%d",&p1->number);}
if(p1->number==0)
gotoend;
else
{
p3=head;
if(n>0)
{for(i=0;i{if(p1->number!
=p3->number)
p3=p3->next;
else
{printf("学号重复,请重输!
n");
gotorepeat2;
}
}
}
}
printf("Pleaseinput学生姓名:
");
scanf("%s",&p1->name);
printf("Pleaseinput语文成绩(0~100):
");
scanf("%f",&p1->yuwen);
while(p1->yuwen<0||p1->yuwen>100)
{getchar();
printf("输入错误,请重新输入语文成绩");
scanf("%f",&p1->yuwen);}
p
;printf("Pleaseinput英语成绩(0~100):
");
scanf("%f",&p1->yingyu);
while(p1->yingyu<0||p1->yingyu>100)
{getchar();
printf("输入错误,请重新输入英语成绩");
scanf("%f",&p1->yingyu);}
printf("Pleaseinput数学成绩(0~100):
");
scanf("%f",&p1->shuxue);
while(p1->shuxue<0||p1->shuxue>100)
{getchar();
printf("输入错误,请重新输入数学成绩");
scanf("%f",&p1->shuxue);}
}
end:
p1=head;
p3=p1;
for(i=1;i{
for(j=i+1;j<=n;j++)
{
max=p1;
p1=p1->next;
if(max->number>p1->number)
{
k=max->number;
max->number=p1->number;
p1->number=k;
strcpy(t,max->name);
strcpy(max->name,p1->name);
strcpy(p1->name,t);
fen=max->yuwen;
max->yuwen=p1->yuwen;
p1->yuwen=fen;
fen=max->yingyu;
max->yingyu=p1->yingyu;
p1->yingyu=fen;
fen=max->shuxue;
max->shuxue=p1->shuxue;
p1->shuxue=fen;
}
}
max=head;p1=head;
}
p2->next=NULL;
printf("输入的学生数为:
%d个!
n",n);
return(head);
}
/*==============================================================================================*/
/*==============================================================================================*/
score*load2311(score*head)
/*功能:
从文件读入学生记录*/
{score*p1,*p2;
intm=0;
charfilepn[10];
FILE*fp;
printf("Pleaseinput文件路径及文件名:
");
scanf("%s",filepn);
if((fp=fopen(filepn,"r+"))==NULL)
{
printf("不能打开文件!
n");
return0;
}
fscanf(fp,"考试成绩管理系统n");
fscanf(fp,"作者:
happyyangxu班级:
010911学号:
28n");
fscanf(fp,"-----------------------------------------n");
fscanf(fp,"|学号t|姓名t|语文t|英语t|数学t|n");
fscanf(fp,"-----------------------------------------n");
printf("考试成绩管理系统n");
printf("作者:
happyyangxu班级:
010911学号:
28n");
printf("-----------------------------------------n");
printf("|学号t|姓名t|语文t|英语t|数学t|n");
printf("-----------------------------------------n");
m=m+1;
if(m==1)
{
p1=(score*)malloc(LEN);
fscanf(fp,"%d%s%f%f%f",&p1->number,p1->name,&p1->yuwen,&p1->yingyu,&p1->shuxue);
printf("|%dt|%st|%.1ft|%.1ft|%.1ft|n",p1->number,p1->name,p1->yuwen,p1->yingyu,p1->shuxue);
head=NULL;
do
{
n=n+1;
if(n==1)head=p1;
elsep2->next=p1;
p2=p1;
p1=(score*)malloc(LEN);
fscanf(fp,"%d%s%f%f%fn",&p1->number,p1->name,&p1->yuwen,&p1->yingyu,&p1->shuxue);
printf("|%dt|%st|%.1ft|%.1ft|%.1ft|n",p1->number,p1->name,p1->yuwen,p1->yingyu,p1->shuxue);
}while(!
feof(fp));
p2->next=p1;
p1->next=NULL;
n=n+1;
}printf("-----------------------------------------n");
fclose(fp);
return(head);
}
/*==============================================================================================*/
/*==============================================================================================*/
score*add2311(score*head,score*stu)
/*功能:
追加学生资料,并且将所有学生资料按学号排序*/
{
score*p0,*p1,*p2,*p3,*max;
inti,j;
floatfen;
chart[10];
p3=stu=(score*)malloc(LEN);
printf("n输入要增加的学生的资料!
");
repeat4:
printf("Pleaseinput学生学号(学号应大于0):
");
scanf("%d",&stu->number);
while(stu->number<0)
{getchar();
printf("输入错误,请重新输入学生学号:
");
scanf("%d",&stu->number);}
/******************************************************/
if(stu->number==0)
gotoend2;
else
{
p3=head;
if(n>0)
{for(i=0;i{if(stu->number!
=p3->number)
p3=p3->next;
else
{printf("学号重复,请重输!
n");
gotorepeat4;
}
}
}
}
/******************************************************/
printf("输入学生姓名:
");
scanf("%s",stu->name);
printf("Pleaseinput语文成绩(0~100):
");
scanf("%f",&stu->yuwen);
while(stu->yuwen<0||stu->yuwen>100)
{getchar();
printf("输入错误,请重新输入语文成绩");
scanf("%f",&stu->yuwen);}
printf("Pleaseinput英语成绩(0~100):
");
scanf("%f",&stu->yingyu);
while(stu->yingyu<0||stu->yingyu>100)
{getchar();
printf("输入错误,请重新输入英语成绩");
scanf("%f",&stu->yingyu);}
printf("Pleaseinput数学成绩(0~100):
");
scanf("%f",&stu->shuxue);
while(stu->shuxue<0||stu->shuxue>100)
{getchar();
printf("输入错误,请重新输入数学成绩");
scanf("%f",&stu->shuxue);}
p1=head;
p0=stu;
if(head==NULL)
{head=p0;p0->next=NULL;}
else
{
if(p1->next==NULL)
{
p1->next=p0;
p0->next=NULL;
}
else
{
while(p1->next!
=NULL)
{
p2=p1;p1=p1->next;
}
p1->next=p0;
p0->next=NULL;
}
}
n=n+1;
p1=head;
p0=stu;
for(i=1;i{
for(j=i+1;j<=n;j++)
{
max=p1;
p1=p1->next;
if(max->number>p1->number)
{
k=max->number;
max->number=p1->number;
p1->number=k;
strcpy(t,max->name);
strcpy(max->name,p1->name);
strcpy(p1->name,t);
fen=max->yuwen;
max->yuwen=p1->yuwen;
p1->yuwen=fen;
fen=max->yingyu;
max->yingyu=p1->yingyu;
p1->yingyu=fen;
fen=max->shuxue;
max->shuxue=p1->shuxue;
p1->shuxue=fen;
}
}
max=head;p1=head;
}end2:
printf("现在的学生数为:
%d个!
n",n);
return(head);
}
/*==============================================================================================*/
/*==============================================================================================*/
score*search2311(score*head)
/*功能:
查询学生成绩*/
{intnumber;
score*p1,*p2;
printf("输入要查询的学生的学号,");
scanf("%d",&number);
while(number!
=0)
{
if(head==NULL)
{printf("n没有任何学生资料!
n");return(head);}
printf("-----------------------------------------n");
printf("|学号t|姓名t|语文t|英语t|数学t|n");
printf("-----------------------------------------n");
p1=head;
while(number!
=p1->number&&p1->next!
=NULL)
{p2=p1;p1=p1->next;}
if(number==p1->number)
{printf("|%dt|%st|%.1ft|%.1ft|%.1ft|n",p1->number,p1->name,p1->yuwen,p1->yingyu,p1->shuxue);
printf("-----------------------------------------n");}
else
printf("%d不存在此学生!
n",number);
printf("输入要查询的学生的学号,");
scanf("%d",&number);
}
printf("已经退出了!
n");
return(head);}
/*==============================================================================================*/
/*==============================================================================================*/
score*del2311(score*head)
{
score*p1,*p2;
intnumber;
printf("输入要删除的学生的学号(输入0时退出):
");
scanf("%d",&number);
getchar();
while(number!
=0)/*输入学号为0时退出*/
{
if(head==NULL)
{
printf("n没有任何学生资料!
n");
return(head);
}
p1=head;
while(number!
=p1->number&&p1->next!
=NULL)
{
p2=p1;p1=p1->next;
}
if(number==p1->number)
{
if(p1==head)
head=p1->next;
else
p2->next=p1->next;
printf("删除:
%dn",number);n=n-1;
}
else
printf("%d不存在此学生!
n",number);
printf("输入要删除的学生的学号:
");
scanf("%d",&number);
getchar();
}
#ifdefDEBUG
printf("已经退出了!
n");
#endif
printf("现在的学生数为:
%d个!
n",n);
return(head);
}
/*==============================================================================================*/
/*==============================================================================================*/
voidprint2311(score*head)
/*功能:
显示学生成绩*/
{
score*p;
if(head==NULL)
{printf("n没有任何学生资料!
n");}
else
{printf("%dn",n);
printf("-----------------------------------------n");
printf("|学号t|姓名t|语文t|英语t|数学t|n");
printf("-----------------------------------------n");
p=head;
do
{printf("|%dt|%st|%.1ft|%.1ft|%.1ft|n",p->number,p->name,p->yuwen,p->yingyu,p->shuxue);
printf("-----------------------------------------n");
p=p->next;}while(p!
=NULL);
}
}
/*==============================================================================================*/
/*==============================================================================================*/
score*statistics2311(score*head)
/*功能:
统计学生成绩*/
{
floatsum1=0,sum2=0,sum3=0,ave1=0,ave2=0,ave3=0,max=0,min;
score*p;
intx,y=0,i=0;
p=head;
printf("1个人总分和平均分t2单科平均分t3总分最高分t4总分最低分n");
scanf("%d",&x);
getchar();
switch(x)
{
case1:
if(head==NULL)
{printf("n没有任何学生资料!
n");return(head);}
else
{
printf("---------------------------------------------------------n");
printf("|学号t|姓名t|语文t|英语t|数学t|总分t|平均分t|n");
printf("---------------------------------------------------------n");
while(p!
=NULL)
{
sum1=p->yuwen+p->yingyu+p->shuxue;/*计算个人总分*/
ave1=s