学生成绩分析及排名系统C语言程序设计课程设计实习报告.docx

上传人:b****6 文档编号:5574287 上传时间:2022-12-27 格式:DOCX 页数:16 大小:510.52KB
下载 相关 举报
学生成绩分析及排名系统C语言程序设计课程设计实习报告.docx_第1页
第1页 / 共16页
学生成绩分析及排名系统C语言程序设计课程设计实习报告.docx_第2页
第2页 / 共16页
学生成绩分析及排名系统C语言程序设计课程设计实习报告.docx_第3页
第3页 / 共16页
学生成绩分析及排名系统C语言程序设计课程设计实习报告.docx_第4页
第4页 / 共16页
学生成绩分析及排名系统C语言程序设计课程设计实习报告.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

学生成绩分析及排名系统C语言程序设计课程设计实习报告.docx

《学生成绩分析及排名系统C语言程序设计课程设计实习报告.docx》由会员分享,可在线阅读,更多相关《学生成绩分析及排名系统C语言程序设计课程设计实习报告.docx(16页珍藏版)》请在冰豆网上搜索。

学生成绩分析及排名系统C语言程序设计课程设计实习报告.docx

学生成绩分析及排名系统C语言程序设计课程设计实习报告

计算机上机实习报告

题目:

学生成绩分析及排名系统

姓名:

学院:

__

专业:

班级:

学号:

指导教师:

 

2012-02-22

 

一设计目的…………………………………………………………1

二课程设计摘要…………………………………………………2

三课程设计的任务与数据…………………………………………3

四系统功能模块…………………………………………………4

五详细设计(各功能模块的具体实现算法——流程图)………5

六调试分析(包含各模块的测试用例及测试结果)……………6

七总结及学习感受………………………………………………7

 

一、设计目的

1.进一步熟悉VC2008及VC2010的开发环境,掌握基本的编程方法,熟悉用C语言完成一个应用程序的设计过程、掌握有关编辑和调试程序的方法和技巧;

2.主要掌握C语言中的三循环语句、函数、指针、结构体及文件操作等内容;

3.了解开发简单应用程序的全过程,包括:

分析、设计、编程、调试和编写报告。

二、课程设计摘要

第一步原始数据(建立两个数据文件)

1.文件1用来存放学生成绩

2.文件2用来存放课程学分

第二步程序设计思想

1.定义两个结构体数组用来存放文件1和文件2的内容。

2.编写各个函数对应各个应实现的功能。

3.编写第一个函数Readwt0107()读取文件1(wt01071.txt)读取学生成绩

4.编写第二个函数Readwt0107XF()读取文件2(wt0107XF.txt)读取课程学分

5.编写第三个函数Calcjqpj()计算各个同学的加权平均值和名次,同时创建txt文本文件wt0107MC.txt写入数据,包括各个学生的学号、名次、姓名、各科成绩、加权平均值。

6.

编写第四个函数CalcAvgCalcbzcj()统计全班每门课程的平均分和标准差,并计算各分数段(60分以下;60~69;70~79;80~89;90分以上的学生人数)。

课程设计的计算公式为:

式中:

y为课程标准差,xi为第i个学生成绩,为本门课程的算术平均成绩,N为学生数。

创建txt文本文件wt0107.txt写入数据,包括课程编号、课程名称、标准差、分数段人数统计。

7.编写第五个函数TZD()打印每名学生的成绩条,同时创建txt文本文件wt0107CJD.txt写入成绩条内容。

8.编写第六个函数BJG()屏幕显示所有存在不及格课程的学生名单(含学号、不及格课程名称、课程的学分及成绩)。

9.编写第七个函数YDS()屏幕显示优等生名单(含学号、N门课程成绩、平均分、名次)。

三、程序设计的任务与数据

1.原始文件

①用记事本新建一文本文件,文件名为:

“班名+序号”,将本班的M名学生在本学期的N门考试课的成绩(要求用真实的课程名、假想的分数,并要求将自己的学号假定为1,将自己的每门课的分数都定在90分以上,而将别人的每门课的分数都定在95分以下。

)输入到这个文件中,建议按如下形式存放(注:

20≤M≤50、5≤N≤8,下文以M=4,N=3为例):

学号姓名英语C语言数学

1我自己969399

2张某768989

3李某919667

4王某755856

…………

Wt0107.txt

②用记事本新建另一文本文件,文件名为:

“班名+KC”,将本班本学期的N门真实的课程名及其学分输入到这个数据文件中,建议按如下列形式存放:

编号课程名称课程学分

1英语6.0

2C语言4.5

3数学5.5

wt0107XF.txt

2.课设任务

在主函数中读入两个原始数据文件的内容,保存在对应的结构体数组中,并根据以上内容计算每个学生N门课的加权平均分(保留1位小数,4舍5入),并按平均分排列名次,平均分相同则名次并列。

然后显示菜单,利用菜单调用各个函数,分别完成如下功能:

1)用C语言创建一个数据文件,文件名为:

“班号+序号+MC”,如物探11001班的12号同学所建的文件名应为:

“wt0107MC.txt”。

用来存放班级排名后的成绩表,要求按以下形式存放。

名次学号姓名英语C语言数学……平均成绩

11我自己969399……95.5

32张某768989……80.5

43李某919667……78.2

24王某755856……88.8

55赵某586777……68.5

2)

分别统计全班每门课的平均分和标准差,并计算各分数段(60分以下;60~69;70~79;80~89;90分以上)的学生人数。

课程标准差的计算公式为:

式中:

y为课程标准差,xi为第i个学生成绩,为本门课程的算术平均成绩,N为学生数。

3)用C语言创建一个数据文件,文件名为:

“KC+班号+序号”,hx1090121.txt

编号课程名称课程学分标准差优秀良好中等及格不及格

1英语6.016.831018153

2C语言4.511.71520138

3数学5.518.59121981

4)打印每名学生成绩条,结果存放到用C语言创建的一个数据文件中,文件名为:

“班号+序号+CJD”,wt0107CJD.txt。

成绩条的格式自定。

5)屏幕显示所有存在不及格课程的学生的名单(含学号、不及格课程名称、课程的学分及成绩)。

6)屏幕显示优等生名单(含学号、N门课成绩、平均分、名次)

优等生条件(只要满足三个条件中的任意一个条件即可):

a)平均分92分

b)名次在本班位于前五名

c)平均分88分,并且至少有一门课的成绩99分

四、系统功能模块

 

五、详细设计(各功能模块的具体实现算法——流程图)

1.流程图

2.源程序清单

1.头文件:

#include"stdafx.h"

structXS//学生结构体

{

intxh;

charxm[10];

intcj[6];

floatpjcj;

floatjqcj;

};

structKC//课程结构体

{

intkh;

charkm[20];

floatxf;

};

structtongji//统计优良差结构体

{

floatKCave,bzcj;

intY,L,Z,J,BJ;

};

 

voidReadCJ();//读成绩

voidReadXF();//读学分

voidCalcAvg();//求平均成绩

voidCaljqcj();//求加权成绩

voidCalbzcj();//读求标准成绩

voidExportFileMC();//排名

voidExportFileFX();//分析各科

voidExportFileTZD();//成绩条

voidPrintBJG();//输出不及格学生

voidPrintYDS();//输出优等生

 

2.源文件:

#include"stdafx.h"

#include"Grade.h"

#include

#include"math.h"

 

#defineM22

#defineN6

#defineA6

XSxss[M];

KCkcs[N];

tongjiTJ[A];

voidReadCJ()

{

FILE*fin;

fin=fopen("wt0107.txt","r");

if(fin==NULL)

{

printf("文件不存在!

");

system("pause");

return;

}

charstr[81];

//读标题行

fgets(str,80,fin);

intn=0;

//读第行数据

fgets(str,80,fin);

while(!

feof(fin))

{

char*ps=strtok(str,"\t,");

//更改各个字段的值,考虑了部分字段缺失

xss[n].xh=atoi(ps);

ps=strtok(NULL,"\t,");

strcpy(xss[n].xm,ps);

for(inti=0;i<6;i++)

{

ps=strtok(NULL,"\t,");

xss[n].cj[i]=atoi(ps);

}

n++;

fgets(str,80,fin);

}

fclose(fin);

}

voidReadXF()

{

FILE*fin;

fin=fopen("wt0107XF.txt","r");

if(fin==NULL)

{

printf("文件不存在!

");

system("pause");

return;

}

charstr[81];

//读标题行

fgets(str,80,fin);

intn=0;

//读第行数据

fgets(str,80,fin);

while(!

feof(fin))

{

char*ps=strtok(str,"\t,");

//更改各个字段的值,考虑了部分字段缺失

kcs[n].kh=atoi(ps);

ps=strtok(NULL,"\t,");

strcpy(kcs[n].km,ps);

ps=strtok(NULL,"\t,");

kcs[n].xf=atof(ps);

n++;

fgets(str,80,fin);

}

fclose(fin);

}

 

voidCalcAvg()

{

//求平均成绩

for(inti=0;i

{

floatsum=0.0;

for(intj=0;j

sum+=xss[i].cj[j];

xss[i].pjcj=sum/6;

}

}

voidCaljqcj()

{

//求加权平均

floatZXF=0.0;

for(intj=0;j

ZXF+=kcs[j].xf;

for(inti=0;i

{

floatsum1=0.0;

for(intj=0;j

sum1+=xss[i].cj[j]*kcs[j].xf;

xss[i].jqcj=sum1/ZXF;

}

}

voidCalbzcj()

{

//求各门课程的平均成绩及标准差

for(inti=0;i

{

floatsum2=0.0,sum3=0.0;

for(intj=0;j

sum2+=xss[j].cj[i];

TJ[i].KCave=sum2/M;

for(intj=0;j

sum3+=(xss[j].cj[i]-TJ[i].KCave)*(xss[j].cj[i]-TJ[i].KCave);

TJ[i].bzcj=sqrt(sum3/N);

}

}

voidExportFileMC()

{

//调用函数

CalcAvg();

Caljqcj();

//创建文件并打开

FILE*fin1;

fin1=fopen("wt0107MC.txt","w");

if(fin1==NULL)

{

printf("打开文件wt0107MC.txt失败!

");

system("pause");

return;

}

//按平均成绩交换学生

for(inti=0;i

for(intj=i;j

if(xss[j].pjcj>xss[i].pjcj)

{

XSt=xss[j];

xss[j]=xss[i];

xss[i]=t;

}

//文件输出学生信息

fprintf(fin1,"名次\t学号\t姓名\t英语\tC语言\t高数\t大物\t地概\t线代\t平均成绩\t加权平均\n");

for(inti=0;i

{

fprintf(fin1,"%3d\t%3d\t%6s\t",i+1,xss[i].xh,xss[i].xm);

for(intj=0;j

fprintf(fin1,"%4d\t",xss[i].cj[j]);

fprintf(fin1,"%8.1f\t%8.2f\n",xss[i].pjcj,xss[i].jqcj);

}

fclose(fin1);

}

voidExportFileFX()

{

//调用函数

Calbzcj();

//创建文件

FILE*fin2;

fin2=fopen("wt0107FX.txt","w");

if(fin2==NULL)

{

printf("打开文件wt0107FX.txt失败!

");

system("pause");

return;

}

//统计学社优良差情况

for(inti=0;i

{

TJ[i].Y=0,TJ[i].L=0,TJ[i].Z=0,TJ[i].J=0,TJ[i].BJ=0;

for(intj=0;j

if(xss[j].cj[i]>=90)

TJ[i].Y++;

elseif(xss[j].cj[i]>=80)

TJ[i].L++;

elseif(xss[j].cj[i]>=70)

TJ[i].Z++;

elseif(xss[j].cj[i]>=60)

TJ[i].J++;

elseif(xss[j].cj[i]<60)

TJ[i].BJ++;

}

//文件输出

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

for(inti=0;i

fprintf(fin2,"%d\t%3s\t%.1f\t%.1f\t%.1f\t%d\t%d\t%d\t%d\t%d\t\n",i+1,kcs[i].km,kcs[i].xf,TJ[i].KCave,TJ[i].bzcj,

TJ[i].Y,TJ[i].L,TJ[i].Z,TJ[i].J,TJ[i].BJ);

fclose(fin2);

printf("输出成绩分析表\n");

}

voidExportFileTZD()//打印通知单

{

CalcAvg();

FILE*fin3;

fin3=fopen("wt0107CJD.txt","w");

if(fin3==NULL)

{

printf("打开文件wt0107CJD.txt失败!

");

system("pause");

return;

}

fprintf(fin3,"名次\t学号\t姓名\t英语\tC语言\t高数\t大物\t地概\t线代\t平均成绩\n");

for(inti=0;i

{

fprintf(fin3,"%3d\t%3d\t%6s\t",i+1,xss[i].xh,xss[i].xm);

for(intj=0;j

fprintf(fin3,"%4d\t",xss[i].cj[j]);

fprintf(fin3,"%8.1f\n",xss[i].pjcj);

}

fclose(fin3);

printf("输出成绩通知单\n");

}

voidPrintBJG()//统计不及格

{

printf("屏显不及格名单\n");

printf("学号\t姓名\t课程名称\t成绩\n");

for(inti=0;i

{

for(intj=0;j

{

if(xss[j].cj[i]<60)

{

printf("%d\t%s\t%s\t%10d\n",xss[j].xh,xss[j].xm,kcs[i].km,xss[j].cj[i]);

}

}

}

}

voidPrintYDS()//统计优生

{

CalcAvg();

printf("屏显优等生名单\n");

printf("学号\t姓名\t英语\tC语言\t高数\t大物\t地概\t线代\t平均成绩\n");

inti,j,k;

for(i=0;i

{

for(j=0;j

if(xss[i].pjcj>=86||(xss[i].pjcj>=88&&xss[i].cj[j]>=99))

{

printf("%d\t%s\t",xss[i].xh,xss[i].xm);

for(k=0;k

printf("%d\t",xss[i].cj[k]);

printf("%.1f\n",xss[i].pjcj);break;

}

}

}

六、调试结果

1学生成绩排名

2.成绩分析

3.成绩通知单

4.不及格学生

5.优等生

七、总结

编程题目要求简单易懂,但实际操作却很难,知识贯通整个课本,三种循环语句.函数.结构体以及指针文件,通过课设全面的综合让我感觉到C语言功能的强大,经过这一阶段的初级学习,我们对C语言的一些概念认识还是比较模糊

或者说很多东西太抽象,不过我们都有了一个明确的学习方法就是编程,亲自动手实机操作,让机器指导我们学习,让机器告诉我们对错。

这为我们的第二阶段的实例化学习做了很好的准备,然后亲自动手做一些程序,并学会调试程序.检验.分析逐步学习。

常看一些程序,并能在别人的基础上创新改进。

学习精髓,逐步积累。

这对以后学习C语言会有很大的帮助。

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

当前位置:首页 > 自然科学 > 物理

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

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