C语言课程设计学生成绩管理系统 完整版.docx
《C语言课程设计学生成绩管理系统 完整版.docx》由会员分享,可在线阅读,更多相关《C语言课程设计学生成绩管理系统 完整版.docx(26页珍藏版)》请在冰豆网上搜索。
C语言课程设计学生成绩管理系统完整版
#include
#include
#include
#include
/*strcmp函数原型包含*/
#defineN100
/*定义最大学生人数为100*/
structstudent/*学生结构体定义*/
{
charno[11];/*学号,10位*/
charname[10];/*姓名,3个汉字*/
chargrade[10];/*班级*/
charpro[20];/*专业*/
floatscore[5];/*储存5门功课的成绩*/
floatave;/*储存平均分*/
intyear;/*入学年*/
}stu[N];
intnum;
voidpanduani(int);/*通过i的值,判断信息要查找的信息是否存在*/
voidoutput();/*输出学生成绩函数(公共函数)*/
voidinit();/*系统初始化函数*/
voidnewfile();/*建立新的数据文件*/
voidread1();/*从数据文件中读取数据*/
voidweihu();/*维护界面函数*/
voidnew1();/*新增一个学生成绩函数*/
voidxiugai();/*修改学生成绩*/
voidxgcj(int);/*修改成绩*/
voiddelete1();/*删除学生信息函数*/
voidtongji();/*统计界面函数*/
voidtongji1();/*计算每个学生平均分*/
voidtongji2();/*计算每门课程的平均分*/
voidpaixu1();/*排序函数*/
voidpaino();/*按学号排序*/
voidpaiave();/*按平均分排序*/
voidpaidkcj();/*按单科成绩排序*/
voidchange(int,int);/*交换结构体数组中的两个记录*/
voidoutputx(int);/*选择输出单科成绩*/
voidfind1();/*查找界面函数*/
intfind(charsno[]);/*按学号查找*/
intfindname(charcname[]);/*按姓名查找*/
voidfindyear(intcyear);/*按入学年查找*/
voidsave();/*保存文件*/
voidstop();/*停顿函数*/
voidstop()/*停顿函数(公共函数)*/
{
printf("PressAnyKeyToContinue...\n");
getchar();
}
voidoutput()/*输出学生成绩函数(公共函数)*/
{
inti,j;
printf("===================================================================\n");
printf("学号姓名班级专业入学年C语言高数大物电路模电\n");
printf("===================================================================\n");
for(i=0;i{
printf("%s%s%s%s%d",stu[i].no,stu[i].name,stu[i].grade,stu[i].pro,stu[i].year);
for(j=0;j<5;j++)
printf("%.1f",stu[i].score[j]);
printf("\n");
}
stop();
}
voidinit()/*系统初始化函数*/
{
if(access("stu.dat",0))/*判断文件是否存在*/
newfile();/*若不存在,新建数据文件*/
else
read1();/*若存在,读取数据*/
}
voidnewfile()/*建立新的数据文件*/
{
inti;
FILE*fp;
if((fp=fopen("stu.dat","wb"))==NULL)/*创建二进制文件*/
{
printf("创建文件失败,请重新运行程序.\n");/*显示"创建文件失败,请重新运行程序"*/
exit(0);/*终止程序*/
}
printf("初次运行,进行数据初始化...\n");/*显示"初次运行,进行数据初始化..."*/
stop();
printf("请输入学生人数:
");/*显示"请输入学生人数:
"*/
scanf("%d",&num);
for(i=0;i{
printf("请输入第%d个学生的学号:
",i+1);/*显示"请输入第i+1个学生的学号:
"*/
getchar();/*吃回车*/
gets(stu[i].no);
printf("姓名:
");/*显示"姓名:
"*/
gets(stu[i].name);
printf("班级:
");/*显示"班级:
"*/
gets(stu[i].grade);
printf("专业:
");/*显示"专业:
"*/
gets(stu[i].pro);
printf("入学年n:
");/*显示"入学年"*/
scanf("%d",&stu[i].year);
printf("C语言成绩:
");/*显示"C语言成绩"*/
scanf("%f",&stu[i].score[0]);
printf("高数成绩:
");/*显示"高数成绩"*/
scanf("%f",&stu[i].score[1]);
printf("大物成绩:
");/*显示"大物成绩"*/
scanf("%f",&stu[i].score[2]);
printf("电路成绩:
");/*显示"电路成绩"*/
scanf("%f",&stu[i].score[3]);
printf("模电成绩:
");/*显示"模电成绩"*/
scanf("%f",&stu[i].score[4]);
fwrite(&stu[i],1,sizeof(structstudent),fp);/*把第i+1名学生成绩写入文件*/
}
fclose(fp);
printf("========================\n");
printf("刚才输入的%d个数据为:
\n",num);/*显示"刚才输入的num个数据为:
"*/
printf("========================\n\n");
output();
}
voidread1()/*从数据文件中读取数据*/
{
FILE*fp;
num=0;/*num为数据文件中实际存储的学生人数*/
fp=fopen("stu.dat","r");
if(fp==NULL)/*数据文件不存在*/
{
printf("文件打开失败!
重新运行程序\n");/*显示"文件打开失败!
重新运行程序"*/
exit(0);
}
while(!
feof(fp))/*文件结束检测"*/
{
fread(&stu[num],1,sizeof(structstudent),fp);
num++;
}
num--;
fclose(fp);
printf("\t\t\t=======================================\n");
printf("\t\t\t现有%d个学生的成绩:
\n",num);/*显示"现有NUM个学生的成绩:
"*/
printf("\t\t\t=======================================\n\n");
output();
}
voidweihu()/*维护界面函数*/
{
charc1;
while
(1)
{
printf("\n\n\n\t\t\t************************\n");
printf("\t\t\t*维护*\n");
printf("\t\t\t*1.新增*\n");/*新增*/
printf("\t\t\t*2.删除*\n");/*删除(按学号)*/
printf("\t\t\t*3.修改*\n");/*修改*/
printf("\t\t\t*9.返回*\n");/*返回*/
printf("\t\t\t************************\n");
printf("\t\t\t请选择:
\n");/*请选择:
*/
c1=getchar();
getchar();
if(c1=='9')
break;
switch(c1)
{
case'1':
new1();
break;
case'2':
delete1();
case'3':
xiugai();
break;
default:
printf("选择有误,请重选!
\n");/*"选择有误,请重选!
"*/
}
}
}
voidnew1()/*新增一个学生成绩函数*/
{
printf("请输入学号:
");/*显示"请输入学号:
"*/
gets(stu[num].no);
printf("姓名:
");/*显示"姓名:
"*/
gets(stu[num].name);
printf("班级:
");/*显示"班级:
"*/
gets(stu[num].grade);
printf("专业:
");/*显示"专业:
"*/
gets(stu[num].pro);
printf("入学年:
");/*显示"入学年"*/
scanf("%d",&stu[num].year);
printf("C语言成绩:
");/*显示"C语言成绩"*/
scanf("%f",&stu[num].score[0]);
printf("高数成绩:
");/*显示"高数成绩"*/
scanf("%f",&stu[num].score[1]);
printf("大物成绩:
");/*显示"大物成绩"*/
scanf("%f",&stu[num].score[2]);
printf("电路成绩:
");/*显示"电路成绩"*/
scanf("%f",&stu[num].score[3]);
printf("模电成绩:
");/*显示"模电成绩"*/
scanf("%f",&stu[num].score[4]);
num++;
printf("\n======================================\n");
printf("现有%d个学生的成绩:
\n",num);/*显示"现有NUM个学生的成绩:
"*/
printf("======================================\n\n");
output();
}
voidxiugai()/*修改学生成绩*/
{
charxg[11];
inti;
printf("\n请输入要修改学生的学号:
\n\n");
gets(xg);
for(i=0;iif(strcmp(stu[i].no,xg)==0)break;
if(i==num)
{
printf("\n数据文件无该生信息!
\n\n请重新输入学号.\n\n");
stop();
return;
}
xgcj(i);
}
voidxgcj(intx)/*修改成绩*/
{
charxueke[5][10]={"C语言","高数","物理","电路","模电"};
char(*p)[10],c;
intj,k;
p=xueke;
for(;;)
{
printf("\n");
printf("\t\t\t************************************\n\n");
printf("\t\t\t成绩\n");
printf("\t\t\t1.C语言\n");/*C语言*/
printf("\t\t\t2.高数\n");/*高数*/
printf("\t\t\t3.物理\n");/*大学物理*/
printf("\t\t\t4.电路\n");/*电路*/
printf("\t\t\t5.模电\n");/*模电*/
printf("\t\t\t9.返回\n\n");/*返回上级*/
printf("\t\t\t************************************\n\n");
printf("\t请选择要修改的成绩(按1.2.3.4.5.9):
\n");
c=getchar();
getchar();
if(c=='9')break;
elseif(c>='1'&&c<='5')
{
k=c-49;
printf("\n请输入%s成绩:
\n",p+k);
scanf("%f",&stu[x].score[k]);
printf("\n修息为:
\n");
printf("学号姓名班级专业入学年C语言高数大物电路模电\n");
printf("===================================================================\n");
printf("%s%s%s%s%d",stu[x].no,stu[x].name,stu[x].grade,stu[x].pro,stu[x].year);
for(j=0;j<5;j++)
printf("%.1f",stu[x].score[j]);
printf("\n");
}
elseprintf("\n选择有误,请重选!
\n\n");
stop();
}
}
intfind(charsno[])/*按学号查找*/
{
inti;
for(i=0;iif(strcmp(stu[i].no,sno)==0)/*判断两个字符串相等*/
returni;/*查找成功*/
return-1;/*查找失败*/
}
voiddelete1()/*删除学生信息函数*/
{
charcno[11];
inti,j;
printf("请输入要删除的学生学号:
");/*"请输入要删除的学生学号"*/
gets(cno);
i=find(cno);
if(i!
=-1)
{for(j=i;jstu[j]=stu[j+1];
num--;
printf("现有%d个学生的成绩:
\n",num);/*显示"现有NUM个学生的成绩:
"*/
output();}
else{printf("请输入正确的学号.\n");
stop();}
}
voidtongji()/*统计界面函数*/
{
inti;
charc2;
while
(1)
{
printf("\n\n\n\t\t\t*******************************\n");
printf("\t\t\t*统计*\n");
printf("\t\t\t*1.学生平均分*\n");/*计算学生平均分*/
printf("\t\t\t*2.课程平均分*\n");/*计算每门课程平均分*/
printf("\t\t\t*9.返回*\n");/*返回*/
printf("\t\t\t*******************************\n");
printf("\t\t\t请选择:
\n");/*请选择:
*/
c2=getchar();
getchar();
if(c2=='9')break;
switch(c2)
{
case'1':
tongji1();
printf("\n\n学生平均分为:
\n");
printf("===========================================\n");
printf("学号姓名入学年平均分\n");
printf("===========================================\n");
for(i=0;iprintf("%s%s%d%.2f\n",stu[i].no,stu[i].name,stu[i].year,stu[i].ave);
stop();
break;
case'2':
tongji2();
break;
default:
printf("选择有误,请重选\n");/*"选择有误,请重选!
"*/
}
}
}
voidtongji1()/*计算每个学生平均分*/
{
inti,j;
for(i=0;i{
stu[i].ave=0;
for(j=0;j<5;j++)
stu[i].ave+=stu[i].score[j];
stu[i].ave=stu[i].ave/5;
}
}
voidtongji2()/*计算每门课程的平均分*/
{
inti,j;
floatsum;
floatavec[5];/*储存每门课的平均分*/
for(j=0;j<5;j++)
{
sum=0;
for(i=0;isum+=stu[i].score[j];
avec[j]=sum/num;
}
printf("\n\n各科平均分:
\n");/*"各科平均分:
"*/
printf("===================================\n");
printf("C语言高数大物电路模电\n");
printf("===================================\n");
for(i=0;i<5;i++)
printf("%-7.1f",avec[i]);
printf("\n");
stop();
}
voidpaixu1()/*排序界面*/
{
charc3;
for(;;)
{
printf("\n\n\n");
printf("\t\t\t***********************************\n");
printf("\t\t\t*排序*\n");
printf("\t\t\t*1.按学号排序*\n");/*按学号排序*/
printf("\t\t\t*2.按平均分排序*\n");/*按平均分排序*/
printf("\t\t\t*3.按单科成绩排序*\n");/*按单科成绩排序*/
printf("\t\t\t*9.返回*\n");/*返回*/
printf("\t\t\t***********************************\n\n");
printf("\t请选择:
(按1.2.3.9):
\n");/*请选择:
*/
c3=getchar();
getchar();
if(c3=='9')break;
switch(c3)
{
case'1':
paino();break;
case'2':
paiave();break;
case'3':
paidkcj();break;
default:
printf("\n选择有误,请重选!
\n\n");/*选择有误,请重选!
*/
stop();
}
}
}
voidpaino()/*按学号排序*/
{/*按学号从低到高冒泡法排序*/
inti,j;
for(i=0;ifor(j=0;jif(strcmp(stu[j].no,stu[j+1].no)>0)
change(j,j+1);
printf("\n排序后为:
\n");/*"排序后为:
"*/
output();
}
voidpaiave()/*按平均分排序*/
{/*按平均分从高到低冒泡法排序*/
inti,j;
tongji1();/*计算平均成绩*/
for(i=0;ifor(j=0;jif(stu[j].avechange(j,j+1);
printf("\n\t排序后为:
\n");/*"排序后为:
"*/
printf("\t===============================================\n");
printf("\t学号姓名入学年平均分排名\n");
printf("\t===============================================\n");
for(i=0;iprintf("\t%s%s%d%.2f%4d\n",stu[i].no,
stu[i].name,stu[i].year,stu[i].ave,i+1);
stop();
}
voidpaidkcj()/*按单科成绩排序*/
{
charc;
inti,j,k;
while
(1)
{
printf("\n");
printf("\t\t\t************************************\n\n");
printf("\t\t\t单科成绩\n");
printf("\t\t\t1.C语言\n");/*C语言*/
printf("\t\t\t2.高数\n");/*高数*/
printf("\t\t\t3.物理\n");/*大学物理*/
printf("\t\t\t4.电路\n");/*电路*/
printf("\t\t\t5.模电\n");/*模电*/
printf("\t\t\t9.返回\n\n");/*返回上级*/
printf("\t\t\t*****************