📄 班级成绩管理系统.txt
字号:
}
}
sort(StudentList h)/*对学生成绩进行排序*/
{int count;int k=0;
student *p,*p1,*p2;
int i,j,x;
float f;
char a[10];
if(h==NULL)
printf("\n没有任何学生资料!\n");
p=p2=p1=h;
count=amount(h);/*统计下学生个数*/
printf("<1>按学生学号排序\n<2>按语文成绩排序\n");
printf("<3>按英语成绩排序\n<4>按数学成绩排序\n<5>按总分排序\n");
scanf("%d",&x);
getchar();
if(x==1)
{ for(i=1;i<=count;i++)
{
for(j=i+1;j<=count;j++)
{
p2=p1;
p1=p1->next;
if(p2->studentnumber>p1->studentnumber)
{
k=p2->studentnumber;
p2->studentnumber=p1->studentnumber;
p1->studentnumber=k;
/*交换前后结点中的学号值*/
strcpy(a,p2->name);
strcpy(p2->name,p1->name);
strcpy(p1->name,a);
/*交换前后结点中的姓名*/
f=p2->chinese;
p2->chinese=p1->chinese;
p1->chinese=f;
/*交换前后结点中的语文成绩*/
f=p2->English;
p2->English=p1->English;
p1->English=f;
/*交换前后结点中的英语成绩*/
f=p2->math;
p2->math=p1->math;
p1->math=f;
/*交换前后结点中的数学成绩*/
}
}
p2=h;p1=h;/*重新使max,p指向链表头*/
}
printf("\n\n学号\t姓名\t语文\t英语\t数学\t平均分\t总分\n");
while (p!=NULL)
{printf("%d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\t\n",p->studentnumber,p->name,p->chinese,p->English,p->math,p->average,p->sum);
p=p->next;
}
printf("\n\n\n");
}
if(x==2)
{for(i=1;i<count;i++)
{for(j=i+1;j<=count;j++)
{p2=p1;
p1=p1->next;
if(p2->chinese<p1->chinese)
{
f=p2->chinese;
p2->chinese=p1->chinese;
p1->chinese=f;
/*交换前后结点中的语文成绩,使得语文成绩高者移到后面的结点中*/
k=p2->studentnumber;
p2->studentnumber=p1->studentnumber;
p1->studentnumber=k;
/*交换前后结点中的学号,使之与语文成绩相匹配*/
strcpy(a,p2->name);
strcpy(p2->name,p1->name);
strcpy(p1->name,a);
/*交换前后结点中的姓名,使之与语文成绩相匹配*/
f=p2->English;
p2->English=p1->English;
p1->English=f;
/*交换前后结点中的英语成绩,使之与语文成绩相匹配*/
f=p2->math;
p2->math=p1->math;
p1->math=f;
/*交换前后结点中的数学成绩,使之与语文成绩相匹配*/
}
}
p1=h;
p2=h;
}
printf("\n\n学号\t姓名\t语文\t英语\t数学\t平均分\t总分\n");
p=h;
while (p!=NULL)
{printf("%d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\t\n",p->studentnumber,p->name,p->chinese,p->English,p->math,p->average,p->sum);
p=p->next;
}
printf("\n\n\n");
}
if(x==3)
{ for(i=1;i<count;i++)
{for(j=i+1;j<=count;j++)
{p2=p1;
p1=p1->next;
if(p2->English<p1->English)
{
f=p2->English;
p2->English=p1->English;
p1->English=f;
/*交换前后结点中的英语成绩,使得英语成绩高者移到后面的结点中*/
k=p2->studentnumber;
p2->studentnumber=p1->studentnumber;
p1->studentnumber=k;
/*交换前后结点中的学号,使之与英语成绩相匹配*/
strcpy(a,p2->name);
strcpy(p2->name,p1->name);
strcpy(p1->name,a);
/*交换前后结点中的姓名,使之与英语成绩相匹配*/
f=p2->chinese;
p2->chinese=p1->chinese;
p1->chinese=f;
/*交换前后结点中的语文成绩,使之与英语成绩相匹配*/
f=p2->math;
p2->math=p1->math;
p1->math=f;
/*交换前后结点中的数学成绩,使之与英语成绩相匹配*/
}
}
p1=h;
p2=h;
}
printf("\n\n学号\t姓名\t语文\t英语\t数学\t平均分\t总分\n");
p=h;
while (p!=NULL)
{printf("%d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\t\n",p->studentnumber,p->name,p->chinese,p->English,p->math,p->average,p->sum);
p=p->next;
}
printf("\n\n\n");
}
if(x==4)
{ for(i=1;i<count;i++)
{for(j=i+1;j<=count;j++)
{p2=p1;
p1=p1->next;
if(p2->math<p1->math)
{
f=p2->math;
p2->math=p1->math;
p1->math=f;
/*交换前后结点中的数学成绩,使得数学成绩高者移到后面的结点中*/
k=p2->studentnumber;
p2->studentnumber=p1->studentnumber;
p1->studentnumber=k;
/*交换前后结点中的学号,使之与数学成绩相匹配*/
strcpy(a,p2->name);
strcpy(p2->name,p1->name);
strcpy(p1->name,a);
/*交换前后结点中的姓名,使之与数学成绩相匹配*/
f=p2->chinese;
p2->chinese=p1->chinese;
p1->chinese=f;
/*交换前后结点中的语文成绩,使之与数学成绩相匹配*/
f=p2->English;
p2->English=p1->English;
p1->English=f;
/*交换前后结点中的英语成绩,使之与数学成绩相匹配*/
}
}
p1=h;
p2=h;
}
printf("\n\n学号\t姓名\t语文\t英语\t数学\t平均分\t总分\n");
p=h;
while (p!=NULL)
{printf("%d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\t\n",p->studentnumber,p->name,p->chinese,p->English,p->math,p->average,p->sum);
p=p->next;
}
printf("\n\n\n");
}
if(x==5)
{ for(i=1;i<count;i++)
{for(j=i+1;j<=count;j++)
{p2=p1;
p1=p1->next;
if(p2->sum<p1->sum)
{
f=p2->math;
p2->math=p1->math;
p1->math=f;
/*交换前后结点中的数学成绩,使得数学成绩高者移到后面的结点中*/
k=p2->studentnumber;
p2->studentnumber=p1->studentnumber;
p1->studentnumber=k;
/*交换前后结点中的学号,使之与数学成绩相匹配*/
strcpy(a,p2->name);
strcpy(p2->name,p1->name);
strcpy(p1->name,a);
/*交换前后结点中的姓名,使之与数学成绩相匹配*/
f=p2->chinese;
p2->chinese=p1->chinese;
p1->chinese=f;
/*交换前后结点中的语文成绩,使之与数学成绩相匹配*/
f=p2->English;
p2->English=p1->English;
p1->English=f;
/*交换前后结点中的英语成绩,使之与数学成绩相匹配*/
}
}
p1=h;
p2=h;
}
printf("\n\n学号\t姓名\t语文\t英语\t数学\t平均分\t总分\n");
p=h;
while (p!=NULL)
{printf("%d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\t\n",p->studentnumber,p->name,p->chinese,p->English,p->math,p->average,p->sum);
p=p->next;
}
printf("\n\n\n");
}
}
StudentList alter(StudentList h)/*修改学生数据*/
{ int num,i,n;student *p;
float m; char a[10];
p=h;
printf("请输入要修改的学生学号:");
printf("返回功能菜单请按0:");
scanf("%d",&num);
while(num!=0)
{
while(p->studentnumber!=num&&p!=NULL)
p=p->next;
if(p->studentnumber==num)
{printf("《1》修改语文成绩\n《2》修改英语成绩\n《3》修改数学成绩\n《4》修改学号\n《5》修改姓名\n");
scanf("%d",&i);
if(i==1) {printf("请输入修改后的成绩:");scanf("%f",&m); p->chinese=m;}
if(i==2) {printf("请输入修改后的成绩:");scanf("%f",&m); p->English=m;}
if(i==3) {printf("请输入修改后的成绩:");scanf("%f",&m); p->math=m;}
if(i==4) {printf("请输入修改后的学号:");scanf("%d",&n); p->studentnumber=n;}
if(i==5) {printf("请输入修改后的姓名:");scanf("%s",a); strcpy(p->name,a);}
}
printf("请输入要修改的学生学号:");
printf("返回功能菜单请按0:");
scanf("%d",&num);
}
return h;
}
student *load(StudentList head)
/*函数load,功能:从文件读入学生记录*/
{ int count;
student *p1,*p2;
int m=0;
char filepn[10]; FILE *fp;
count=0;
printf("请输入文件路径及文件名:");
scanf("%s",filepn);/*输入文件路径及名称*/
if((fp=fopen(filepn,"r+"))==NULL)
{
printf("不能打开文件!\n");
return 0;
}
fscanf(fp,"学号\t姓名\t语文\t英语\t数学\t平均分\t总分\t\n");
printf("学号\t姓名\t语文\t英语\t数学\t平均分\t总分\t\n");
m=m+1;
if(m==1)
{
p1=(student *)malloc(sizeof(struct studentnode)) ; /*开辟一个新单元*/
fscanf(fp,"%d%s%f%f%f%f%f\n",&p1->studentnumber,p1->name,&p1->chinese,&p1->English,&p1->math,&p1->average,&p1->sum);
printf("%d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\t\n",p1->studentnumber,p1->name,p1->chinese,p1->English,p1->math,p1->average,p1->sum);
/*文件读入与显示*/
head=NULL;
do
{
count=count+1;
if(count==1) head=p1;
else p2->next=p1;
p2=p1;
p1=(student *)malloc(sizeof(struct studentnode)) ; /*开辟一个新单元*/
fscanf(fp,"%d%s%f%f%f%f%f\n",&p1->studentnumber,p1->name,&p1->chinese,&p1->English,&p1->math,&p1->average,&p1->sum);
printf("%d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\t\n",p1->studentnumber,p1->name,p1->chinese,p1->English,p1->math,p1->average,p1->sum);
/*文件读入与显示*/
}while(!feof(fp));
p2->next=p1;
p1->next=NULL;
count=count+1;
}
fclose(fp);/*结束读入,关闭文件*/
return (head);
}
save(StudentList p)
/*功能:保存学生的资料*/
{
FILE *fp;
char filepn[20];/*用来存放文件保存路径以及文件名*/
printf("请输入文件路径及文件名:");
scanf("%s",filepn);
if((fp=fopen(filepn,"w+"))==NULL)
{
printf("不能打开文件!\n");
return 0;
}
fprintf(fp,"学号\t姓名\t语文\t英语\t数学\t平均分\t总分\t\n");
while(p!=NULL)
{
fprintf(fp,"%d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\t\n",p->studentnumber,p->name,p->chinese,p->English,p->math,p->average,p->sum);
p=p->next;/*下移一个结点*/
}
fclose(fp);
printf("文件已经保存!\n");
return 0;
}
main()
{ StudentList p=NULL;
int k;
while(1)
{k=function_choose();
switch(k)
{case 1: p=data_creat(p);break;/*输入数据*/
case 2:sort(p);break;/*排序*/
case 3: query(p);break;/*查询*/
case 4: p=delet_data(p);amount(p);break;/*删除*/
case 5: p=add_data(p);amount(p);break;/*增加数据*/
case 6: show(p);amount(p);break;/*显示*/
case 7:statis_data(p);break;/*统计分数*/
case 8: save(p); break;/*保存资料*/
case 9:show1(p);break;/*分段显示*/
case 10:p=load(p);break;/*调入资料*/
case 11:amount(p);break;/*统计人数*/
case 12:p=alter(p);break;/*修改数据*/
case 0: exit(0);break;/*退出系统*/
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -