39学生期末成绩及平均分最高最低分计算.docx
《39学生期末成绩及平均分最高最低分计算.docx》由会员分享,可在线阅读,更多相关《39学生期末成绩及平均分最高最低分计算.docx(12页珍藏版)》请在冰豆网上搜索。
39学生期末成绩及平均分最高最低分计算
河北工业大学计算机软件技术基础(VC)
课程设计任务书(编号:
39)
附录个人参考源代码
一、题目:
学生期末成绩及平均分、最高最低分计算
二、目的与要求:
1.目的
培养学生综合利用C++语言进行程序设计的能力,通过学生独立思考,提高学生将所学知识转化为分析和设计简单实际问题的能力,建立程序文档、归纳总结的能力,从而增强创新和实践能力。
2.基本要求
要求用C++语言编程,在VisualC++环境下调试完成。
3.创新要求
进一步完善程序,按班级分类后,再分别求出平时成绩的和总成绩的最高分最低分;进一步考虑结构体数组大小设定为100或50,每次输入学生个数,再进行处理。
三、设计方法和基本原理:
1.课题功能描述
在计算机文化基础课中讲了用EXCEL处理数据表,可以对数据表进行填充数据、分类汇总等操作,要求对表1所示的数据表填充总成绩,并按班级求期末成绩、平时成绩和总成绩的平均分,各班期末成绩的最高分和最低分。
2.问题详细描述
对表1所示的数据表进行填充和分类汇总,具体操作如下:
1)填充总成绩,公式为:
总成绩=期末成绩*70%+平时成绩*30%。
2)分类汇总:
(1)按班级求期末成绩、平时成绩和总成绩的平均分
(2)各班期末成绩的最高分和最低分。
3.问题的解决方案:
1)采用结构体数组存储表1的数据表,结构体的成员中班级、学号、姓名字段为字符型(char),期末成绩、平时成绩和总成绩成员为数值型,类型为double型。
定义如下:
structstudent
{
charbj[10];;
charxh[9];
charxm[8];
doubleqmchj;
doublepshchj;
doublezchj ;
}std_s[10];//此处结构体数组元素可以先设为10个,调好后,再增加。
2)调试时,提供数据的方法可以采用初始化或输入的方法。
首先,以5-10条记录进行测试,具体记录可在表1中选择,程序调试正确后,再增加记录量。
该题综合性较强,涉及到数组可参考教材第4章,函数参考教材第5章,结构体参考第6章。
分类实际就是排序算法,讲过冒泡排序和选择排序,你自己任选一种,注意,对班级排序是字符串排序,字符串比较要用字符串比较函数。
3)输出结果要求:
(1)输出填充结果的数据表,形式如表1。
(2)输出按班级汇总后的期末成绩、平时成绩和总成绩平均分,形式如下:
班级
期末成绩平均分
平时成绩平均分
总成绩平均分
传媒1
传媒2
传媒3
(3)输出各班期末成绩的最高分和最低分,形式如下:
班级
最高分
最低分
传媒1
传媒2
传媒3
表1各班学生成绩信息表
班级
学号
姓名
期末成绩
平时成绩
总成绩
传媒1
10641301
刘晓玮
65
80
传媒2
10641302
夏海霞
74
85
传媒1
10641303
陈威
81
90
传媒2
10641304
周莉
87
90
传媒3
10641305
贾君
75
90
传媒1
10641306
韩晓萍
58
80
传媒2
10641307
奚景泊
80
90
传媒3
10641308
胡华
85
95
传媒1
10641309
李栋
93
95
传媒2
10641310
李建炎
70
80
传媒3
10641311
包黎年
69
90
传媒1
10641312
李娟
92
95
传媒2
10641313
何小卫
84
90
传媒3
10641314
王平平
67
85
传媒1
10641315
陈治同
80
90
传媒2
10641316
赵荣
84
90
传媒3
10641317
徐清泉
85
95
传媒1
10641318
邹伟斌
75
90
传媒2
10641319
李文辉
78
95
传媒3
10641320
魏楠
87
90
传媒1
10641321
朱敏敏
91
95
传媒2
10641322
丁志刚
60
90
传媒3
10641323
周开俊
70
90
传媒1
10641324
吴俊
80
80
传媒2
10641325
管峰
89
95
传媒3
10641326
蒋佳佳
83
90
传媒1
10641327
王奇安
88
80
传媒2
10641328
张赛男
88
90
传媒3
10641329
周玲玲
84
90
传媒1
10641330
毛佳禹
91
95
传媒2
10641331
赵金金
88
90
传媒3
10641332
周天炯
67
90
传媒1
10641333
卜英杰
67
85
传媒2
10641334
杜宁波
74
90
传媒3
10641336
侯蕴慧
62
80
传媒1
10641337
陆菊杰
85
90
传媒2
10641338
王贞
79
85
传媒3
10641339
颜执栋
95
95
四、课程设计的考核方式及评分方法
1.考核方式
课程设计结束时,在机房当场验收。
2.评分方法
(1)出勤率;
(2)课程设计运行结果;
(3)机房当场验收分数;
(4)课程设计报告分数。
五、书写设计报告的要求(详细内容见“设计报告模板”)
六、上交设计报告要求:
1、用A4纸打印出设计报告,在机房验收时将打印的设计报告交给验收老师评阅,如不需修改,当场交给班长;若需要修改,改后交给班长。
在指定时间内由班长收齐设计报告后交给验收老师。
2、上传设计报告的电子版,在指定的网址,指定的文件夹内找到以你名字命名的文件夹,将你的设计报告和.cpp源文件(含有.h)一并上传到该文件夹。
参考源代码:
Author:
hujianfei
Sinaweibo:
互联网的飞虫
Date:
201303011
//由于看到本报告浏览量很大但是我没有上传源代码,所以有些说不过去,故花费一个小时自己写下了源代码,希望可以帮助你的课程设计.
//以下可以直接复制到MicrosoftVisualC++6.0中运行,已经测试没有错误.
#include
#include
typedefstructtagSTUDENT
{
charbj[10];
charxh[9];
charxm[8];
doubleqmchj;
doublepshchj;
doublezchj;
}STUDENT,*PSTUDENT;
//只需要在这里增加人数算法不改变
STUDENTstd_s[10]={
{{"传媒1"},{"10641301"},{"刘晓玮"},65,80,0},
{{"传媒2"},{"10641302"},{"夏海霞"},74,85,0},
{{"传媒1"},{"10641303"},{"陈威"},81,90,0},
{{"传媒2"},{"10641304"},{"周莉"},87,90,0},
{{"传媒3"},{"10641305"},{"贾君"},75,90,0},
{{"传媒1"},{"10641306"},{"韩晓萍"},58,80,0}
};
typedefstructtagCLASSINFO
{
charbj[10];
doubleqmchj;//期末成绩
doublepshchj;//平时成绩
doublezchj;//总成绩
//平均分
doubleqmchjpjf;
doublepshchjpjf;
doublezchjpjf;
intxsrs;//学生人数
//期末成绩最低分最高分
doublemaxfen;
doubleminfen;
}CLASSINFO,*PCLASSINFO;
CLASSINFOclassinfo[3]={
{"传媒1",0,0,0,0,0,0,0,0,100},
{"传媒2",0,0,0,0,0,0,0,0,100},
{"传媒3",0,0,0,0,0,0,0,0,100}
};//共三个班级
//输出所有的学生信息
//传入学生结构体数组的指针,和学生的数量
voidShowAllStudentInfo(PSTUDENTpStudent,unsignedintiStudentNumber);
//班级汇总
//传入学生结构体数组的指针,和学生的数量
voidClassSummary(PSTUDENTpStudent,unsignedintiStudentNumber);
//输出各班的期末成绩的最高分和最低分
voidShowClassInfo(PCLASSINFOpClassInfo);
//填充学生总成绩
voidCalculateStudentTotalGrade(PSTUDENTpStudent,unsignedintiStudentNumber);
intmain()
{
printf("________显示原始数据______________________________________\n");
ShowAllStudentInfo(std_s,6);
printf("________填充总成绩_________________________________________\n");
CalculateStudentTotalGrade(std_s,6);
ShowAllStudentInfo(std_s,6);
printf("________按班级汇总__________________________________________\n");
ClassSummary(std_s,6);
ShowClassInfo(classinfo);
return0;
}
//班级汇总
//传入学生结构体数组的指针,和学生的数量
voidClassSummary(PSTUDENTpStudent,unsignedintiStudentNumber)
{
inti;
for(i=0;i{
if(strcmp(pStudent[i].bj,"传媒1")==0)
{
classinfo[0].pshchj+=pStudent[i].pshchj;
classinfo[0].qmchj+=pStudent[i].qmchj;
classinfo[0].zchj+=pStudent[i].zchj;
classinfo[0].xsrs++;
if(pStudent[i].qmchj>classinfo[0].maxfen)
{
classinfo[0].maxfen=pStudent[i].qmchj;
}
if(pStudent[i].qmchj{
classinfo[0].minfen=pStudent[i].qmchj;
}
}
elseif(strcmp(pStudent[i].bj,"传媒2")==0)
{
classinfo[1].pshchj+=pStudent[i].pshchj;
classinfo[1].qmchj+=pStudent[i].qmchj;
classinfo[1].zchj+=pStudent[i].zchj;
classinfo[1].xsrs++;
if(pStudent[i].qmchj>classinfo[1].maxfen)
{
classinfo[1].maxfen=pStudent[i].qmchj;
}
if(pStudent[i].qmchj{
classinfo[1].minfen=pStudent[i].qmchj;
}
}
elseif(strcmp(pStudent[i].bj,"传媒3")==0)
{
classinfo[2].pshchj+=pStudent[i].pshchj;
classinfo[2].qmchj+=pStudent[i].qmchj;
classinfo[2].zchj+=pStudent[i].zchj;
classinfo[2].xsrs++;
if(pStudent[i].qmchj>classinfo[2].maxfen)
{
classinfo[2].maxfen=pStudent[i].qmchj;
}
if(pStudent[i].qmchj{
classinfo[2].minfen=pStudent[i].qmchj;
}
}
}
for(i=0;i<3;++i)
{
classinfo[i].pshchjpjf=classinfo[i].pshchj/classinfo[i].xsrs;
classinfo[i].qmchjpjf=classinfo[i].qmchj/classinfo[i].xsrs;
classinfo[i].zchjpjf=classinfo[i].zchj/classinfo[i].xsrs;
}
}
//输出各班的期末成绩的最高分和最低分
voidShowClassInfo(PCLASSINFOpClassInfo)
{
inti;
printf("%7s%16s%16s%16s\n","班级","期末成绩平均分","平时成绩平均分","总成绩平均分");
for(i=0;i<3;++i)
{
printf("%7s%13.2lf%13.2lf%13.2lf\n",
pClassInfo[i].bj,
pClassInfo[i].qmchjpjf,
pClassInfo[i].pshchjpjf,
pClassInfo[i].zchjpjf);
}
printf("________________________________________________\n");
printf("%7s%8s%8s\n","班级","最高分","最低分");
//一共三个班级这里没有使用变量
for(i=0;i<3;++i)
{
printf("%7s%9.2lf%9.2lf\n",
pClassInfo[i].bj,
pClassInfo[i].maxfen,
pClassInfo[i].minfen);
}
}
//输出所有的学生信息
//传入学生结构体数组的指针,和学生的数量
voidShowAllStudentInfo(PSTUDENTpStudent,unsignedintiStudentNumber)
{
inti;
//使用c语言的格式输出比使用c++的更方便
printf("%8s%8s%7s%5s%5s%5s\n","班级","学号","姓名","期末成绩","平时成绩","总成绩");
for(i=0;i{
printf("%8s%8s%7s%7.2lf%7.2lf%7.2lf\n",
pStudent[i].bj,
pStudent[i].xh,
pStudent[i].xm,
pStudent[i].qmchj,
pStudent[i].pshchj,
pStudent[i].zchj);
}
}
//填充学生总成绩
voidCalculateStudentTotalGrade(PSTUDENTpStudent,unsignedintiStudentNumber)
{
unsignedinti;
for(i=0;i{
pStudent[i].zchj=0.7*pStudent[i].qmchj+pStudent[i].pshchj*0.3;
}
}