学生成绩管理系统C语言课程设计源代码.docx
《学生成绩管理系统C语言课程设计源代码.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统C语言课程设计源代码.docx(15页珍藏版)》请在冰豆网上搜索。
![学生成绩管理系统C语言课程设计源代码.docx](https://file1.bdocx.com/fileroot1/2023-2/7/f9b8b459-9a64-4191-8e34-f9cb7050257a/f9b8b459-9a64-4191-8e34-f9cb7050257a1.gif)
学生成绩管理系统C语言课程设计源代码
#include
#include
#include
#include
#include
structchengji/*成绩结构体*/
{
intpoint;
charsubject[20];
};
structstudent/*学生结构体*/
{intw;
charname[20];
intnumber;
structchengjicheng[30];
floatsum;
floataverage;
}stu[40];
voidpjun();/*按平均分排序*/
voidpfen();/*按总分排序*/
voidaddnew();/*录入学生成绩*/
voidpall();/*显示所有成绩*/
voidcheck();/*查询菜单*/
voidpnum();/*按学号排序*/
voidpjing();/*精确查找*/
/*******************************************************************************************************/
/*主菜单*/
main()
{
charchoose;
while
(1)
{
printf("\n\t\t**************************************");
printf("\n\t\t*欢迎使用成绩管理系统*");
printf("\n\t\t**");
printf("\n\t\t*请选择*");
printf("\n\t\t*1.录入学生成绩*");
printf("\n\t\t*2.查询学生成绩*");
printf("\n\t\t*3.清屏*");
printf("\n\t\t*0.退出程序*");
printf("\n\t\t**");
printf("\n\t\t**************************************");
printf("\n\n");
printf("请选择:
");
scanf("%c",&choose);getchar();
switch(choose)
{case'1':
addnew();break;
case'2':
check();break;
case'3':
system("cls");break;
case'0':
exit(0);break;
default:
printf("输入错误,请从新输入!
\n\n");
}
}
}
/****************************************************************************************************/
/*录入学生成绩*/
voidaddnew()
{
intn,m,i,p;
floatsum;
floataverage;
FILE*file;
sum=0.00000;
average=0.00000;
if((("c:
\\student.dat","rb"))==NULL)
{
file=fopen("c:
\\student.dat","wb+");/*创建一个文件*/
}
printf("请输入需要录入的学生人数:
");
scanf("%d",&n);
for(i=0;i{
printf("输入第%d个同学信息:
\n",i+1);
printf("姓名:
");
scanf("%s",&stu[i].name);
printf("学号:
");
scanf("%d",&stu[i].number);
printf("输入科目个数:
");
scanf("%d",&m);
stu[i].w=m;
printf("按科目(回车)成绩(回车)……的顺序输入:
\n");/*录入成绩*/
for(p=0;p{
scanf("%s",&stu[i].cheng[p].subject);
scanf("%d",&stu[i].cheng[p].point);
stu[i].sum=stu[i].sum+stu[i].cheng[p].point;
stu[i].average=stu[i].sum/m;
}
/*printf("总分%f,平均分%f\n",stu[i].sum,stu[i].average);*/
fwrite(&stu[i],sizeof(stu),1,file);/*把stu写入文件*/
}
fclose(file);/*关闭文件*/
fflush(stdin);
system("cls");
}
/****************************************************************************************************/
/*查询菜单*/
voidcheck()
{
while
(1)
{charchoose;
printf("\n\t\t**************************************");
printf("\n\t\t*查询菜单*");
printf("\n\t\t**");
printf("\n\t\t*请选择*");
printf("\n\t\t*1.按学号排列*");
printf("\n\t\t*2.按总分排列*");
printf("\n\t\t*3.按平均分排列*");
printf("\n\t\t*4.精确查询*");
printf("\n\t\t*5.显示所有学生成绩*");
printf("\n\t\t*6.清屏*");
printf("\n\t\t*0.返回*");
printf("\n\t\t**************************************");
printf("\n\n");
printf("请选择:
");
scanf("%c",&choose);getchar();
switch(choose)
{case'1':
pnum();break;
case'2':
pfen();break;
case'3':
pjun();break;
case'4':
pjing();break;
case'5':
pall();break;
case'6':
system("cls");break;
case'0':
main();break;
}
}
}
/****************************************************************************************************/
/*显示所有成绩*/
voidpall()
{
inti=0,m;
FILE*file;
if((("c:
\\student.dat","rb"))==NULL)
{printf("Openerror!
!
\n");
getch();
exit(0);
}
fread(&stu[i],sizeof(stu),1,file);
while(feof()/*循环整个文件*/
{printf("姓名----学号----总分----平均分\n");
printf("%s%5d%10.1f%8.1f\n",stu[i].name,stu[i].number,stu[i].sum,stu[i].average);
printf("科目------成绩\n");
for(m=0;m{
printf("%40s%d\n",stu[i].cheng[m].subject,stu[i].cheng[m].point);
}
i++;
fread(&stu[i],sizeof(stu),1,file);
}
fclose(file);
}
/*******************************************************************************************************/
/*按学号排序*/
voidpnum()
{FILE*file;
intj;
inti=0;
intn=0;
intm=0;
structstudentbm;/*创建一个‘中间’结构体,用于交换*/
if((("c:
\\student.dat","rb"))==NULL)/*打开文件*/
{printf("Openerror");
getch();
exit(0);
}
fread(&stu[i],sizeof(stu),1,file);
while(feof()
{
i++;
fread(&stu[i],sizeof(stu),1,file);
}
n=i;
for(j=n-1;j>0;j--)
{for(i=0;i{if(stu[i].number>stu[i+1].number)/*对比学号,对换stu*/
{bm=stu[i];/*交换位置*/
stu[i]=stu[i+1];
stu[i+1]=bm;
}
}
}
for(i=0;i{printf("姓名----学号----总分----平均分\n");
printf("%s%5d%10.1f%8.1f\n",stu[i].name,stu[i].number,stu[i].sum,stu[i].average);
printf("科目------成绩\n");
for(m=0;m{
printf("%40s%d\n",stu[i].cheng[m].subject,stu[i].cheng[m].point);
}
}
fclose(file);
fflush(stdin);
}
/*******************************************************************************************************/
/*按总分排序*/
voidpfen()
{FILE*file;
intj;
inti=0;
intn=0;
intm;
structstudentbm;
if((("c:
\\student.dat","rb"))==NULL)
{printf("Openerror");
getch();
exit(0);
}
fread(&stu[i],sizeof(stu),1,file);
while(feof()
{
i++;
fread(&stu[i],sizeof(stu),1,file);
}
n=i;
for(j=n-1;j>0;j--)
{for(i=0;i{if(stu[i].sum{bm=stu[i];
stu[i]=stu[i+1];
stu[i+1]=bm;
}
}
}
for(i=0;i{printf("姓名----学号----总分----平均分\n");/*显示到屏幕*/
printf("%s%5d%10.1f%8.1f\n",stu[i].name,stu[i].number,stu[i].sum,stu[i].average);
printf("科目------成绩\n");
for(m=0;m{
printf("%40s%d\n",stu[i].cheng[m].subject,stu[i].cheng[m].point);
}
}
fclose(file);
fflush(stdin);
}
/*******************************************************************************************************/
/*按平均分排序*/
voidpjun()
{FILE*file;
intj;
structstudentbm;
inti=0;
intn=0;
intm;
if((("c:
\\student.dat","rb"))==NULL)
{printf("Openerror");
getch();
exit(0);
}
fread(&stu[i],sizeof(stu),1,file);
while(feof()
{
i++;
fread(&stu[i],sizeof(stu),1,file);
}
n=i;
for(j=n-1;j>0;j--)
{for(i=0;i{if(stu[i].average{bm=stu[i];
stu[i]=stu[i+1];
stu[i+1]=bm;
}
}
}
for(i=0;i{printf("姓名----学号----总分----平均分\n");
printf("%s%5d%10.1f%8.1f\n",stu[i].name,stu[i].number,stu[i].sum,stu[i].average);
printf("科目------成绩\n");
for(m=0;m{
printf("%40s%d\n",stu[i].cheng[m].subject,stu[i].cheng[m].point);
}
}
fclose(file);
fflush(stdin);
}
/*******************************************************************************************************/
/*精确查找*/
voidpjing()
{
intn;
inti=0;
intm;
FILE*file;
if((("c:
\\student.dat","rb"))==NULL)
{printf("Openerror");
getch();
exit(0);
}
printf("请输入要查询的学生的学号:
");
scanf("%d",&n);getchar();
fread(&stu[i],sizeof(stu),1,file);
while(feof()
{if(n==stu[i].number)/*输出对应的学号的学生成绩*/
{printf("姓名----学号----总分----平均分\n");
printf("%s%5d%10.1f%8.1f\n",stu[i].name,stu[i].number,stu[i].sum,stu[i].average);
printf("科目------成绩\n");
for(m=0;m{
printf("%40s%d\n",stu[i].cheng[m].subject,stu[i].cheng[m].point);
}
break;
}
i++;
fread(&stu[i],sizeof(stu),1,file);
}
fclose(file);
fflush(stdin);
}
/******************************************结束*******************************************************/