C语言课程设计成绩管理系统报告+源码.docx

上传人:b****6 文档编号:4322798 上传时间:2022-11-29 格式:DOCX 页数:23 大小:835.14KB
下载 相关 举报
C语言课程设计成绩管理系统报告+源码.docx_第1页
第1页 / 共23页
C语言课程设计成绩管理系统报告+源码.docx_第2页
第2页 / 共23页
C语言课程设计成绩管理系统报告+源码.docx_第3页
第3页 / 共23页
C语言课程设计成绩管理系统报告+源码.docx_第4页
第4页 / 共23页
C语言课程设计成绩管理系统报告+源码.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

C语言课程设计成绩管理系统报告+源码.docx

《C语言课程设计成绩管理系统报告+源码.docx》由会员分享,可在线阅读,更多相关《C语言课程设计成绩管理系统报告+源码.docx(23页珍藏版)》请在冰豆网上搜索。

C语言课程设计成绩管理系统报告+源码.docx

C语言课程设计成绩管理系统报告+源码

简易教学管理系统的设计与实现

【摘要】:

本系统可以实现简易的学生成绩管理,功能有限,主要功能包括读取文件中存放的学生成绩单,并对其求每个人的平均分,然后按照平均分对其排名;另外还可以计算每门课程的平均分和标准差,并按照成绩对学生划分区段,将处理后的结果可以保存在新建的一个文件中,方便查看;通过此系统还可以将每个同学的成绩单单独的输出到文件中,保存在一个指定的文件夹中;值得一提的是次系统还可以按照特定的要求进行数据筛选,比如屏幕显示有不及格科目的同学的信息,屏幕显示符合设定的优等生的条件的学生;最后本系统还实现了显示每门课程的成绩分布图(横向的)。

流程图

二、主要函数及其功能

1、voidRank_List(intnum[],structStu_Data_1stu[MAX][KCS+2],doubleaverage[],intn),按平均分给每个同学进行排序,然后保存到另一个文件中;

2、voidAve_Sta_dev(structStu_Data_1stu[MAX][KCS+2],intn),求各科的总体均分和标准差,结果存放在新建的一个文件中;

3、voidScore_List(structStu_Data_1stu[MAX][KCS+2],intn,doubleaverage[],intnum[]),保存所有学生的成绩单,将所有的成绩单存放在一个指定的文件夹中;

4、voidUnpass_List(structStu_Data_1stu[MAX][KCS+2],structStu_Creditxuefen[],intn),屏幕显示所有不及格的人的不及格科目;

5、voidExcellence_List(structStu_Data_1stu[MAX][KCS+2],intnum[],doubleaverage[],intn),找出优等生,并将他们保存到新建的文件中;

6、voidDistribution(structStu_Data_1stu[MAX][KCS+2],intn),绘制学生成绩柱状分布图

7、voidMenu(),主菜单函数,主要用于调出主菜单;

三、系统详细设计及实现过程

程序采用模块化设计,主函数是程序的入口,个模块独

立,可分块调试。

While()循环保证程序的循环运

行;通过函数switch()使得到得返回值调用相应的各功能函数

,程序的主菜单如下:

总体来说,这个系统可以分为七个功能模块,其分别是:

计算每个学生的加权平均分并进行排名,计算每门课程的总体均分,标准差以及分组情况,打印出每个学生的成绩单,显示有不及格科目的学生,显示符合优等生条件的学生和绘制每门课程的分布图。

1、主函数功能实现

主函数首先是要求输入存放学生成绩的文件,然后在读取每门课程所对应的学分,其界面如下:

如果输入的文件名不正确,则会提示重新输入文件名,知道输入正确的文件名,即读取文件中的数据成功,读取到数据后在主函数中会对其进行处理,分别计算出其平均分和排名。

2、计算加权平均分模块

此模块的功能主要是通过函数voidRank_List(intnum[],structStu_Data_1stu[MAX][KCS+2],doubleaverage[],intn),来实现的,其基本实现思路是:

直接将在主函数中计算好的排名,在加上一些信息保存到新建的一个文件中,其执行完后如下:

如果在这个界面选择y,则会通过系统调用打开对应的文件。

关闭文件后可以进行下一步操作。

3、计算各科均分及标准差和分组情况模块

这个模块要实现的功能很多,主要是通过voidAve_Sta_dev(structStu_Data_1stu[MAX][KCS+2],intn),函数来实现的。

其处理完后保存到文件中,其格式如下:

4、打印出每个学生的成绩单

这个模块相对比较难一点,主要是要建立一个文件夹,在本系统中通过:

system("mdscore"),来建立一个文件夹,建立好文件夹后然后按照一定得规则保存到这个新建的文件夹中,文件的前面的名字是自己输入的,其界面如下:

5、显示不及格学生的信息

这个功能很简单,主要是通过函数intcheck(intk,structStu_Data_1stu[MAX][KCS+2])函数判断给定的数据是否存在不及格科目;然后通过voidUnpass_List(structStu_Data_1stu[MAX][KCS+2],structStu_Creditxuefen[],intn)函数显示在屏幕上面;方便查看,这个部分不保存到文件中,显示界面如下:

6、显示优等生学生的信息

这个模块和上面的基本上一样,首先通过:

intyds(intk,structStu_Data_1stu[MAX][KCS+2],intnum[],doubleaverage[])来判断给定的学生是否满足优等生的条件。

然后通过voidExcellence_List(structStu_Data_1stu[MAX][KCS+2],intnum[],doubleaverage[],intn)来显示在屏幕上,其见面如下:

7、绘制各科成绩的分布图

这个模块主要是通过一个简单的算法实现的,具体算法可以查看源代码,其基本实现思想是:

先确定不同分数段的人数,然后按照人数的多少来打印特定的一个符号,其符号是:

printf("█");其分布图如下:

四、数据测试

数据测试基本上在上面的实现中都已经说明的很清楚了,下面附上处理后的各个数据文件的截图:

按照加权平均分排名的结果:

各科目的总体分布情况:

各个学生的成绩单如下:

 

Stu_Date.h

#defineMAX100

#defineKCS5//实际课程数

intk;

structStu_Data_1

{

charElem[15];

};

 

structStu_Credit

{

charNO[10];

charcourse[10];

charcerdit[10];

};

structStu_Data_2

{

charcou[10];

doubleave;

doublebzc;

intbest;

intbetter;

intgood;

intpass;

intfail;

};

voidRank_List(intnum[],structStu_Data_1stu[MAX][KCS+2],doubleaverage[],intn)//按平均分排名

{

FILE*fp;

intj;

if((fp=fopen("Data1.txt","wb"))==NULL)

{

printf("……………此文件不可以打开,保存失败…………\n");

exit

(1);

}

fprintf(fp,"名次");

for(j=0;j

fprintf(fp,"平均分");

fprintf(fp,"\r\n");

for(k=1;k

{

fprintf(fp,"%-6d",num[k]);

for(j=0;j

fprintf(fp,"%-6.1f",average[k]);

fprintf(fp,"\r\n");

}

fclose(fp);

printf("…………保存成功………………\n");

}

//--------------------------------------------------------------------------

voidAve_Sta_dev(structStu_Data_1stu[MAX][KCS+2],intn)//求各科平均分、标准差

{

doubless,m;

structStu_Data_2da[KCS+2];

FILE*fp;

if((fp=fopen("Data2.txt","wb"))==NULL)

{

printf("……………此文件不可以打开,保存失败…………\n");

exit

(1);

}

inta;

for(a=1;a

//------------------------------------------------------------------------------

for(a=2;a

{

for(k=1,m=0;k

da[a-1].ave=m/(n-1);

}//计算各科平均分

//-------------------------------------------------------------------------------------

for(k=1;k

{

da[k].best=0;

da[k].better=0;

da[k].good=0;

da[k].fail=0;

da[k].pass=0;

}

for(a=2;a

for(k=1;k

{

if(atoi(stu[k][a].Elem)>=90)da[a-1].best++;//优秀

if(atoi(stu[k][a].Elem)<90&&atoi(stu[k][a].Elem)>=80)da[a-1].better++;//良好

if(atoi(stu[k][a].Elem)<80&&atoi(stu[k][a].Elem)>=70)da[a-1].good++;//中等

if(atoi(stu[k][a].Elem)<70&&atoi(stu[k][a].Elem)>=60)da[a-1].pass++;//及格

if(atoi(stu[k][a].Elem)<60)da[a-1].fail++;//不及格

}//科目分等级

//----------------------------------------------------------------------------------------------

for(a=2;a

{

for(k=1,ss=0;k

{

ss+=(atof(stu[k][a].Elem)-da[a-1].ave)*(atof(stu[k][a].Elem)-da[a-1].ave);

}

da[a-1].bzc=sqrt(ss/(n-1));

}//求出各科标准差

//---------------------------------------------------------------------------------------

fprintf(fp,"编号课程名称平均分标准差优秀良好中等及格不及格\n");

fprintf(fp,"\r\n");

for(k=1;k

{

fprintf(fp,"%-6d%-10s%-8.1f%-10.2f%-5d%-5d%-6d%-6d%-6d\n",k,da[k].cou,da[k].ave,da[k].bzc,da[k].best,da[k].better,da[k].good,da[k].pass,da[k].fail);

fprintf(fp,"\r\n");

}

fclose(fp);

printf("……………保存成功…………\n");

}

//--------------------------------------------------------------------------------------

intcheck(intk,structStu_Data_1stu[MAX][KCS+2])

{

inta;

for(a=2;a

if(atof(stu[k][a].Elem)<60)return1;

return0;

}

//----------------------------------------------------------------------------------------

intyds(intk,structStu_Data_1stu[MAX][KCS+2],intnum[],doubleaverage[])

{

inta;

if(average[k]>92)return1;

if(num[k]<6)return1;

if(average[k]>88)

{

for(a=2;a

if(atof(stu[k][a].Elem)>=99)return1;

}

return0;

}

//-------------------------------------------------------------------------------------------------

voidScore_List(structStu_Data_1stu[MAX][KCS+2],intn,doubleaverage[],intnum[])

{

inta;

charno[5];

charclas[10]={""};

printf("请输入班级名:

");

scanf("%s",clas);

system("mdscore");

for(k=1;k

{

itoa(k,no,10);

charfilename[20]={""};

charadd[20]={"score\\"};

strcpy(add+strlen(add),clas);

strcpy(filename+strlen(filename),add);

strcpy(filename+strlen(filename),no);

strcpy(filename+strlen(filename),".txt");

FILE*fp;

if((fp=fopen(filename,"wb"))==NULL)

{

printf("……………此文件不可以打开,保存失败…………\n");

exit

(1);

}

for(intj=0;j

fprintf(fp,"平均分名次");

fprintf(fp,"\r\n");

for(a=0;a

fprintf(fp,"%-9s",stu[k][a].Elem);

fprintf(fp,"%-8.2f",average[k]);

fprintf(fp,"%-6d",num[k]);

fprintf(fp,"\r\n");

fclose(fp);

}

printf("文件已保存到程序跟目录下SCORE文件夹里.\n");

}//打印每个学生的成绩单

//-------------------------------------------------------------------------------------------------

voidUnpass_List(structStu_Data_1stu[MAX][KCS+2],structStu_Creditxuefen[],intn)

{

inta,p;

intcheck(intk,structStu_Data_1stu[MAX][KCS+2]);

printf("学号姓名课程名称(学分):

成绩课程名称(学分):

成绩课程名称(学分):

成绩\n");

for(k=1;k

{

if(check(k,stu))

{

printf("%-6s%-8s",stu[k][0].Elem,stu[k][1].Elem);

for(a=2,p=0;a

if(atof(stu[k][a].Elem)<60){

p++;

if(p>3){

printf("\n");

printf("%-9s(%s):

%-5s",stu[0][a].Elem,xuefen[a-1].cerdit,stu[k][a].Elem);

p=p%3;

}

printf("%-9s(%s):

%-5s",stu[0][a].Elem,xuefen[a-1].cerdit,stu[k][a].Elem);

}

printf("\n");

}

}

}//显示不及格的同学

//------------------------------------------------------------------------------------------------------

voidExcellence_List(structStu_Data_1stu[MAX][KCS+2],intnum[],doubleaverage[],intn)

{

inta;

intyds(intk,structStu_Data_1stu[MAX][KCS+2],intnum[],doubleaverage[]);

//----------------------------------------------------------------------------------------------

if(KCS>5)

{

FILE*fp;

if((fp=fopen("Data3.txt","wb"))==NULL)

{

printf("……………此文件不可以打开,保存失败…………\n");

exit

(1);

}

fprintf(fp,"名次");

for(intj=0;j

fprintf(fp,"平均分");

fprintf(fp,"\r\n");

for(k=1;k

{

if(yds(k,stu,num,average))

{

fprintf(fp,"%-6d",num[k]);

for(a=0;a

fprintf(fp,"%-6.1f",average[k]);

fprintf(fp,"\r\n");

}

}

fclose(fp);

printf("\n由于科目过多屏幕无法正常显示,数据以保存到文件Data3.txt中,是否现在打开(y/n)");

charz;

scanf("%c",&z);

if(z=='y')

{

printf("\n请关闭文件,使程序继续执行。

\n");

system("Data3.txt");

}

return;

}//当科目大于5时执行该IF

//-------------------------------------------------------------------------------------------------

printf("名次");

for(intj=0;j

printf("平均分");

printf("\n");

for(k=1;k

{

if(yds(k,stu,num,average))

{

printf("%-6d",num[k]);

for(a=0;a

printf("%-6.2f",average[k]);

printf("\n");

}

}

}//显示优等生

//-------------------------------------------------------------------------------------------------------

voidMenu()

{

system("cls");

printf("\n-------------------------------\n");

printf("|1-保存学生排名后成绩单|\n");

printf("|2-保存学生成绩分布情况|\n");

printf("|3-打印每位同学的成绩|\n");

printf("|4-显示存在不及格科目同学|\n");

printf("|5-显示优等生名单|\n");

printf("|6-显示分布图|\n");

printf("|Q-quit|\n");

printf("-------------------------------\n");

printf("PleaseinputKey\n");

}

voidDistribution(structStu_Data_1stu[MAX][KCS+2],intn)

{

intc,j,figure[11]={0};

for(c=2;c

{

printf("===%s成绩分布图===\n",stu[0][c].Elem);

for(k=1;k<11;k++)figure[k]=0;

for(k=1;k

{

figure[atoi(stu[k][c].Elem)/10]++;

}

for(inta=10;a>-1;a--)

{

if(a==10)

printf("100:

");

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 党团建设

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1