C语言课程设计 学生成绩管理系统.docx
《C语言课程设计 学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计 学生成绩管理系统.docx(20页珍藏版)》请在冰豆网上搜索。
C语言课程设计学生成绩管理系统
#include
#include
#include
#include
typedefstructstudent/*定义一个单链表*/
{
charsno[10];
charname[10];
intChinese;
intMath;
intEnglish;
intsum;
floatavg;
structstudent*next;
}student1,*grade;
gradeget_info(gradeL)//输入学生信息
{
student1*s,*p=NULL,*q;
intflag,n,i;
charchoice='Y';
while(choice!
='N'&&choice!
='n')
{
printf("\n请输入要录入的学生个数:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
s=(student1*)malloc(sizeof(student1));
printf("\n请输入学生的学号:
\n");
scanf("%s",&s->sno);
printf("\n请输入学生的姓名:
\n");
scanf("%s",&s->name);
printf("\n请输入学生的语文成绩:
\n");
scanf("%d",&s->Chinese);
printf("\n请输入学生的数学成绩:
\n");
scanf("%d",&s->Math);
printf("\n请输入学生的英语成绩:
\n");
scanf("%d",&s->English);
s->sum=s->Chinese+s->Math+s->English;
s->avg=(float)s->sum/3;
if(L!
=NULL)
{
q=L;
p=L;
while(q)
{
flag=strcmp(q->sno,s->sno);
if(flag==0)
{
printf("该学生已存在!
\n");
break;
}
q=q->next;
}
if(flag!
=0)
{
while(p->next)p=p->next;
p->next=s;
p=s;
s->next=NULL;/*尾结点的指针置空,下同!
*/
}
}
else
{
L=s;
s->next=NULL;
}
}
printf("\n是否继续?
(Y/N或y/n):
");
scanf("%s",&choice);
system("cls");
}
returnL;
}
sno_select(gradeL)/*按学生学号查找*/
{
student1*p=L;
charnum[10],choice='Y';
inti=1,flag;
while(choice!
='N'&&choice!
='n')
{
printf("\n请输入该学生的学号:
");
scanf("%s",&num);
while(p)
{
flag=strcmp(p->sno,num);
if(flag==0)
{
printf("\n*************************************************************\n");
printf("\t学号\t姓名\t语文\t数学\t英语\t总分\t平均分\n");
printf("\t%s\t%s\t%d\t%d\t%d\t%d\t%.2f\n",p->sno,p->name,p->Chinese,p->Math,p->English,p->sum,p->avg);
printf("***************************************************************\n");
break;
}
elsep=p->next;
}
if(flag)printf("\n不存在该学号的学生!
\n\n");
printf("继续查找?
(Y/N或y/n):
");
scanf("%s",&choice);
system("cls");
}
return0;
}
grade_select(gradeL)/*按分数段查询*/
{
intn,m,j,k=0,x=0,y=0;
charchoice='Y';
student1*p=L;
while(choice!
='N'&&choice!
='n')
{
printf("\n可查找的科目的菜单如下:
\n");
printf("\t1.语文2.数学3.英语\n");
printf("请选择(输入序号即可):
");
scanf("%d",&j);
printf("\n请输入一个分数段,即输入n,m的值(n");
scanf("%d%d",&n,&m);
printf("\n*************************************************************\n");
printf("\t学号\t姓名\t语文\t数学\t英语\t总分\t平均分\n");
while(p)
{
if(j==1)
{
x=1;
y=1;
if(p->Chinese>=n&&p->Chinese<=m)
{
printf("\t%s\t%s\t%d\t%d\t%d\t%d\t%.2f\n",p->sno,p->name,p->Chinese,p->Math,p->English,p->sum,p->avg);
k=1;
}
}
if(j==2)
{
k=1;
y=1;
if(p->Math>=n&&p->Math<=m)
{
printf("\t%s\t%s\t%d\t%d\t%d\t%d\t%.2f\n",p->sno,p->name,p->Chinese,p->Math,p->English,p->sum,p->avg);
x=1;
}
}
if(j==3)
{
k=1;
x=1;
if(p->English>=n&&p->English<=m)
{
printf("\t%s\t%s\t%d\t%d\t%d\t%d\t%.2f\n",p->sno,p->name,p->Chinese,p->Math,p->English,p->sum,p->avg);
}
}
p=p->next;
}
printf("\n*************************************************************\n");
if(L==NULL)printf("该系统还没有存放数据!
\n\n");
else
{
if(k==0)printf("没有学生的语文成绩在这个分数段上\n\n");
if(x==0)printf("没有学生的数学成绩在这个分数段上\n\n");
if(y==0)printf("没有学生的英语成绩在这个分数段上\n\n");
}
k=0;
x=0;
y=0;
printf("继续查找?
(Y/N或y/n):
");
scanf("%s",&choice);
system("cls");
}
}
statistics(gradeL)/*统计函数*/
{
student1*p=L;
inti=0;
charchoice='N';
floatall_avg=0;
while(choice!
='Y'&&choice!
='y')
{
while(p)
{
all_avg=all_avg+p->avg;
p=p->next;
i++;
}
printf("\n===================================================\n");
printf("该班级总人数为:
%d\n",i);
if(L==NULL)printf("该班级的平均分为:
0\n");
elseprintf("该班级的平均分为:
%5.2f\n",all_avg/i);
printf("===================================================\n");
printf("\n退出?
(Y或y):
");
scanf("%s",&choice);
}
system("cls");
}
gradedelete_grade(gradeL)/*删除指定学生成绩函数*/
{
student1*p=L,*q=L;
inti=1,flag;
charchoice='Y',num[10];
while(choice!
='N'&&choice!
='n')
{
printf("\n===================================================\n");
if(L==NULL)printf("该系统中不存在任何数据\n\n");
else
{
printf("\n请输入想要删除的学生学号:
");
scanf("%s",&num);
while(p)
{
flag=strcmp(p->sno,num);
if(flag==0)
{
if(q==p)
{
L=q->next;
free(q);
}
else
{
while(q->next!
=p)q=q->next;
q->next=p->next;
free(p);
}
break;
}
p=p->next;
}
if(flag)printf("\n不存在该学生");
elseprintf("\n删除成功!
");
printf("\n===================================================\n");
}
p=L;
q=L;
printf("继续删除?
(Y/N或y/n):
");
scanf("%s",&choice);
system("cls");
}
returnL;
}
asc_order_grade(gradeL)/*升序排序函数*/
{
intk,x=1,n=0,m,y;
floatz;
student1*p,*q,*s=L;
chart[10],choice;
while(s)/*计算链表数据个数n*/
{
s=s->next;
n++;
}
while(x)
{
choice='N';
printf("****************************************\n");
printf("成绩升序排序菜单如下:
\n");
printf("-----------------------------------\n");
printf("1.按语文成绩升序排序\n");
printf("2.按数学成绩升序排序\n");
printf("3.按英语成绩升序排序\n");
printf("4.按总成绩升序排序\n");
printf("5.按平均成绩升序排序\n");
printf("6.返回主菜单\n");
printf("****************************************\n");
printf("请选择(输入菜单序号即可):
");
scanf("%d",&k);
system("cls");
if(k==1)/*按语文成绩升序排序*/
{
while(choice!
='Y'&&choice!
='y')
{
for(m=0;m{
p=L;
while(p->next)
{
q=p->next;
if(p->Chinese>=q->Chinese)
{
strcpy(t,p->sno);/*学号交换*/
strcpy(p->sno,q->sno);
strcpy(q->sno,t);
strcpy(t,p->name);/*学号交换*/
strcpy(p->name,q->name);
strcpy(q->name,t);
y=p->Chinese;/*语文成绩交换*/
p->Chinese=q->Chinese;
q->Chinese=y;
y=p->Math;/*数学成绩交换*/
p->Math=q->Math;
q->Math=y;
y=p->English;/*英语成绩交换*/
p->English=q->English;
q->English=y;
y=p->sum;/*总成绩交换*/
p->sum=q->sum;
q->sum=y;
z=p->avg;/*平均成绩交换*/
p->avg=q->avg;
q->avg=z;
}
p=p->next;
}
}
p=L;
printf("\n按语文成绩升序排序的最终结果为:
\n");
printf("\n*************************************************************\n");
printf("\t学号\t姓名\t语文\t数学\t英语\t总分\t平均分\n");
while(p)
{
printf("\t%s\t%s\t%d\t%d\t%d\t%d\t%.2f\n",p->sno,p->name,p->Chinese,p->Math,p->English,p->sum,p->avg);
p=p->next;
}
printf("\n*************************************************************\n");
printf("\n\n");
printf("退出?
(Y或y)");
scanf("%s",&choice);
system("cls");
}
}
elseif(k==2)/*按数学成绩升序排序*/
{
while(choice!
='Y'&&choice!
='y')
{
for(m=0;m{
p=L;
while(p->next)
{
q=p->next;
if(p->Math>=q->Math)
{
strcpy(t,p->sno);/*学号交换*/
strcpy(p->sno,q->sno);
strcpy(q->sno,t);
strcpy(t,p->name);/*学号交换*/
strcpy(p->name,q->name);
strcpy(q->name,t);
y=p->Chinese;/*语文成绩交换*/
p->Chinese=q->Chinese;
q->Chinese=y;
y=p->Math;/*数学成绩交换*/
p->Math=q->Math;
q->Math=y;
y=p->English;/*英语成绩交换*/
p->English=q->English;
q->English=y;
y=p->sum;/*总成绩交换*/
p->sum=q->sum;
q->sum=y;
z=p->avg;/*平均成绩交换*/
p->avg=q->avg;
q->avg=z;
}
p=p->next;
}
}
p=L;
printf("\n按数学成绩升序排序的最终结果为:
\n");
printf("\n*************************************************************\n");
printf("\t学号\t姓名\t语文\t数学\t英语\t总分\t平均分\n");
while(p)
{
printf("\t%s\t%s\t%d\t%d\t%d\t%d\t%.2f\n",p->sno,p->name,p->Chinese,p->Math,p->English,p->sum,p->avg);
p=p->next;
}
printf("\n*************************************************************\n");
printf("\n\n");
printf("退出?
(Y或y)");
scanf("%s",&choice);
system("cls");
}
}
elseif(k==3)/*按英语成绩升序排序*/
{
while(choice!
='Y'&&choice!
='y')
{
for(m=0;m{
p=L;
while(p->next)
{
q=p->next;
if(p->English>=q->English)
{
strcpy(t,p->sno);/*学号交换*/
strcpy(p->sno,q->sno);
strcpy(q->sno,t);
strcpy(t,p->name);/*学号交换*/
strcpy(p->name,q->name);
strcpy(q->name,t);
y=p->Chinese;/*语文成绩交换*/
p->Chinese=q->Chinese;
q->Chinese=y;
y=p->Math;/*数学成绩交换*/
p->Math=q->Math;
q->Math=y;
y=p->English;/*英语成绩交换*/
p->English=q->English;
q->English=y;
y=p->sum;/*总成绩交换*/
p->sum=q->sum;
q->sum=y;
z=p->avg;/*平均成绩交换*/
p->avg=q->avg;
q->avg=z;
}
p=p->next;
}
}
p=L;
printf("\n按英语成绩升序排序的最终结果为:
\n");
printf("\n*************************************************************\n");
printf("\t学号\t姓名\t语文\t数学\t英语\t总分\t平均分\n");
while(p)
{
printf("\t%s\t%s\t%d\t%d\t%d\t%d\t%.2f\n",p->sno,p->name,p->Chinese,p->Math,p->English,p->sum,p->avg);
p=p->next;
}
printf("\n*************************************************************\n");
printf("\n\n");
printf("退出?
(Y或y)");
scanf("%s",&choice);
system("cls");
}
}
elseif(k==4)/*按总成绩升序排序*/
{
while(choice!
='Y'&&choice!
='y')
{
for(m=0;m{
p=L;
while(p->next)
{
q=p->next;
if(p->sum>=q->sum)
{
strcpy(t,p->sno);/*学号交换*/
strcpy(p->sno,q->sno);
strcpy(q->sno,t);
strcpy(t,p->name);/*学号交换*/
strcpy(p->name,q->name);
strcpy(q->name,t);
y=p->Chinese;/*语文成绩交换*/
p->Chinese=q->Chinese;
q->Chinese=y;
y=p->Math;/*数学成绩交换*/
p->Math=q->Math;
q->Math=y;
y=p->English;/*英语成绩交换*/
p->English=q->English;
q->English=y;
y=p->sum;/*总成绩交换*/
p->sum=q->sum;
q->sum=y;
z=p->avg;/*平均成绩交换*/
p->avg=q->avg;
q->avg=z;
}
p=p->next;
}
}
p=L;
printf("\n按总成绩升序排序的最终结果为:
\n");
printf("\n*************************************************************\n");
printf("\t学号\t姓名\t语文\t数学\t英语\t总分\t平均分\n");
while(p)
{
printf("\t%s\t%s\t%d\t%d\t%d\t%d\t%.2f\n",p->sno,p->name,p->Chinese,p->Math,p->English,p->sum,p->avg);
p=p->next;
}
printf("\n*************************************************************\n");
printf("\n\n");
printf("退出?
(Y或y)");
scanf("%s",&choice);
system("cls");
}
}
elseif(k==5)/*按平均绩升序排序*/
{
while(choice!
='Y'&&choice!
='y')
{
for(m=0;m{
p=L;
while(p->next)
{
q=p->next;
if(p->avg>=q->avg)
{
strcpy(t,p->sno);/*学号交换*/
strcpy(p->sno,q->sno);
strcpy(q->