c语言学生成绩管理系统含源代码.docx
《c语言学生成绩管理系统含源代码.docx》由会员分享,可在线阅读,更多相关《c语言学生成绩管理系统含源代码.docx(15页珍藏版)》请在冰豆网上搜索。
c语言学生成绩管理系统含源代码
C语言程序设计作业
一设计项目:
学生成绩管理系统
二总体设计:
1程序设计组成框图:
学生成绩管理系统
输入学生成绩
查看学生成绩及成绩排序
通过学号查询学生成绩
统计成绩信息
通过学号修改学生成绩
添加学生成绩
通过学号删除学生成绩
保存学生成绩
退出程序
2:
模块功能说明:
1输入功能:
输入学生学号及成绩。
2查看功能:
输出学号及各科成绩。
3查询功能:
通过学号查询学生及各科成绩。
4统计功能:
统计班级学生及格率,优秀率,各个学生成绩方差等。
5修改功能:
通过输入学号修改指定学生的错误信息。
6添加功能:
添加学生信息。
7删除功能:
通过输入学号输入指定学生信息。
8保存功能:
将学生信息保存。
9退出系统。
3:
主要函数之间的调用关系及各自功能:
主要函数的函数原型
voidinputscore(void);
voidsavescore(void);
voidavergescore(void);
voidmodifyscore(void);
voidlookscore(void);
voidsearchscore(void);
voidstatistic(void);
voidadd(void);
voidmodify(void);
voiddelscore(void);
voidmenu(void);
i.在菜单界面输入1,调用函数inputscore()实现输入学生成绩信息功能。
ii.在菜单界面2,调用函数lookscore()实现学生成绩按平均分高低排序输。
出,同时lookscore()函数调用avergescore()函数实现各个学生平均分的计算。
iii.在菜单界面输入3,调用searchscore()函数实现通过学号查找学生成绩信息功能。
iv.在菜单界面输入4,调用statistic()函数输出班级及格率,优秀率,学生成绩方差,不及格学生。
v.在菜单界面输入5,调用modify()函数实现通过学号修改学生成绩的功能
vi.在菜单界面输入6,调用add()函数实现添加学生成绩。
vii.在菜单界面输入7,调用delscore()函数实现删除指定学生成绩。
viii.在菜单界面输入8,调用savescore()函数将学生成绩信息保存。
ix.在菜单界面输入9,退出成绩管理系统。
开始
输入指令1~9
输入成绩
查询成绩
成绩统计
修改成绩
添加成绩
删除成绩
保存成绩
显示成绩
1
2
3
4
5
6
7
8
9
退出
三程序运行效果截图
1主菜单
2输入成绩
3查看成绩
4查询成绩
5统计成绩
6修改成绩
7添加成绩
8删除成绩
9保存成绩
四个人总结
整个程序主要运用了课本上的基础知识,并未有太大创新,通过for循环,循环输入学生成绩。
在学生成绩排序中运用选择法,同时实现学生名次的确定。
在删除指定学生成绩时,先确定信息存储位置即其在结构体数组中的序号,通过结构体变量的整体赋值将从指定位置以后的学生信息赋给前一个结构体变量,并将学生总数n减1,实现删除学生成绩信息。
源代码
#include
#include
#include
#include
#include
#defineN30
#defineM3
typedefstructstudent
{charnumber[10];
charname[20];
floatscore[M];
floataver;
floattotal;
}STU;
STUstu[N];
intn;
voidinputscore(void);
voidsavescore(void);
voidavergescore(void);
voidtotal(void);
voidmodifyscore(void);
voidlookscore(void);
voidsearchscore(void);
voidstatistic(void);
voidadd(void);
voidmodify(void);
voiddelscore(void);
voidmenu(void);
voidmain()
{shortintflag=0;
menu();
do
{flag=1;
switch(getch())
{case'1':
inputscore();break;/*输入成绩*/
case'2':
lookscore();break;/*查看成绩*/
case'3':
searchscore();break;/*查找成绩*/
case'4':
statistic();break;/*成绩统计*/
case'5':
modify();break;/*修改成绩*/
case'6':
add();break;/*添加成绩*/
case'7':
delscore();break;/*删除成绩*/
case'8':
savescore();break;/*保存成绩*/
case'9':
exit(0);/*退出程序*/
default:
printf("输入有误\n");
}
printf("按任意键继续\n");
getch();
menu();
}while(flag==1);
}
voidmenu(void)
{
system("cls");
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("删除成绩-------------------------------------7\n");
printf("保存成绩-------------------------------------8\n");
printf("退出系统-------------------------------------9\n");
printf("**********************************************\n");
printf("请输入您的选择\n");
}
/***************输入各个同学的学生信息(王超)******************************/
voidinputscore(void)
{inti,j;
system("cls");
printf("请输入学生总数:
\n");
scanf("%d",&n);
printf("提示:
*输入学号时请输入由1位大写字母和8位数字组成的学号,如P01214000*\n");/*因二维表上下需对正故有此要求*/
for(i=0;i{printf("请输入学生%d的学号:
\n",i+1);
scanf("%s%s",stu[i].number,stu[i].name);
printf("请输入学生成绩:
\n");
printf("高数\t物理\tC语言\n");
for(j=0;jscanf("%f",&stu[i].score[j]);
}
printf("成功输入\n");
}
/*****************计算各个同学的总分(友)*****************************/
voidtotal(void)
{inti,j;
for(i=0;i{stu[i].total=0;
for(j=0;j{
stu[i].total+=stu[i].score[j];
}
}
}
/*****************计算各个同学的平均分*****************************/
voidavergescore(void)
{inti,j;
for(i=0;i{stu[i].aver=0;
for(j=0;j{
stu[i].aver+=stu[i].score[j];
}
stu[i].aver=stu[i].aver/M;
}
}
/************查看学生成绩及根据平均分对学生进行排序*********************/
voidlookscore(void)
{inti,j,k;
STUt;
total();
avergescore();
system("cls");
for(i=0;i{for(k=i,j=i+1;jif(stu[j].aver>stu[k].aver)
k=j;
if(k!
=j)
{t=stu[k];
stu[k]=stu[i];
stu[i]=t;
}
}
printf("名次\t学号\t\t\t高数\t物理\tC语言\t总分\t平均分\n");
for(i=0;i{printf("%d\t%s\t%s\t",i+1,stu[i].number,stu[i].name);
for(j=0;jprintf("%4.2f\t",stu[i].score[j]);
printf("%4.2f\t",stu[i].total);
printf("%4.2f",stu[i].aver);
printf("\n");
}
}
/*****************通过输入学号查找学生成绩***************************/
voidsearchscore(void)
{chara[10];
inti,j;
system("cls");
printf("请输入需查询的学生学号\n");
scanf("%s",a);
for(i=0;i{if(strcmp(a,stu[i].number)==0)
{printf("名次\t学号\t\t\t高数\t物理\tC语言\t总分\t平均分\n");
printf("%d\t%s\t%s\t",i+1,stu[i].number,stu[i].name);
for(j=0;jprintf("%4.2f\t",stu[i].score[j]);
printf("%4.2f\t",stu[i].total);
printf("%4.2f",stu[i].aver);
printf("\n");
break;/*找到该学生成绩信息后跳出for循环*/
}
else
printf("未找到该学生信息\n");
}
}
/*******统计学生成绩信息,平均分及格率,优秀率****************/
voidstatistic(void)
{STU*p=stu;
inti,j;
floatcount=0.0,sum=0.0;
system("cls");
for(i=0;i{sum+=(p+i)->aver;}
printf("该班级平均分为%4.2f\n",sum/n);/*平均分计算*/
for(i=0;i{if((p+i)->aver>=60)
count++;
}
printf("该班级及格率为%4.2f%%\n",count/n*100);/*及格率计算*/
count=0.0;
for(i=0;i{if((p+i)->aver>=90)
count++;
}
printf("该班级优秀率为%4.2f%%\n",count/n*100);/*优秀率计算*/
printf("平均分低于60的学生\n");
for(i=0;i{
if(stu[i].aver<60)
printf("%s\n",stu[i].name);
}/*统计不及格学生*/
}
/***************修改学生成绩*****************/
voidmodify(void)
{chara[10];
inti,j;
system("cls");
printf("请输入需要修改成绩的学生学号\n");
scanf("%s",a);
for(i=0;i{if(strcmp(a,stu[i].number)==0)
{printf("名次\t学号\t\t\t高数\t物理\tC语言\t总分\t平均分\n");
printf("%d\t%s\t%s\t",i+1,stu[i].number,stu[i].name);
for(j=0;jprintf("%4.2f\t",stu[i].score[j]);
printf("%4.2f",stu[i].total);
printf("%4.2f",stu[i].aver);
printf("\n");
printf("请重新输入该学生的学号:
\n");
scanf("%s%s",stu[i].number,stu[i].name);
printf("请重新输入学生成绩:
\n");
printf("高数\t物理\tC语言\n");
for(j=0;jscanf("%f",&stu[i].score[j]);/*找到该学生成绩后进行修改,跳出for循环*/
printf("修改成功\n");
break;
}
else
printf("请确认该学生是否为本班学生!
\n");
}
}
/*****************添加学生成绩********************/
voidadd(void)
{inta,i,j;
system("cls");
printf("请输入新增加的学生人数:
\n");
scanf("%d",&a);
n=n+a;
for(i=n-a;i{printf("请输入学生%d的学号:
\n",i+1);
scanf("%s%s",stu[i].number,stu[i].name);
printf("请输入学生成绩:
\n");
printf("高数\t物理\tC语言\n");
for(j=0;jscanf("%f",&stu[i].score[j]);
printf("添加成功\n");
}
}
/*******************删除学生成绩*************************/
voiddelscore(void)
{inti,j,c;
charm,a[10];
system("cls");
printf("请输入学生学号\n");
scanf("%s",a);
for(i=0;i{if(strcmp(a,stu[i].number)==0)
{printf("名次\t学号\t\t\t高数\t物理\tC语言\t总分\t平均分\n");
printf("%d\t%s\t%s\t",i+1,stu[i].number,stu[i].name);
for(j=0;jprintf("%4.2f\t",stu[i].score[j]);
printf("%4.2f\t",stu[i].total);
printf("%4.2f",stu[i].aver);
printf("\n");
c=i;
break;
}
else
printf("未找到该学生信息\n");
}
printf("是否删除该学生成绩(y/n)\n");
scanf("%s",&m);
if(m=='y')
{
for(i=c;istu[i]=stu[i+1];/*结构体整体赋值将后一位学生成绩信息拷贝进入前一位学生信息的存储位置*/
n=n-1;/*删除该学生信息后学生总数减一*/
printf("删除成绩成功\n");
}
else
printf("删除成绩失败\n");
}
/******************保存学生成绩************************/
voidsavescore(void)
{FILE*fp;
inti,flag=1;
charm;
system("cls");
puts("是否保存学生成绩(y/n)");
scanf("%s",&m);
if(m=='y')
{if((fp=fopen("score.dat","wb"))==NULL)
{printf("文件打开失败\n");
return;
}
for(i=0;iif(fwrite(&stu[i],sizeof(structstudent),1,fp)!
=1)
{printf("保存失败\n");
flag=0;
}
if(flag==1)
printf("保存成功!
\n");
fclose(fp);
}
else
return;
}