河南科技大学C语言课程设计.docx
- 文档编号:11455636
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:13
- 大小:345.14KB
河南科技大学C语言课程设计.docx
《河南科技大学C语言课程设计.docx》由会员分享,可在线阅读,更多相关《河南科技大学C语言课程设计.docx(13页珍藏版)》请在冰豆网上搜索。
河南科技大学C语言课程设计
河南科技大学
综合程序设计报告
成绩分析问题
学院:
电气工程学院
年级专业:
电子161
学号:
161404110104
学生姓名:
李恺
指导教师:
赵老师
一、题目内容和要求(重述)
C语言综合训练是为了提高学生综合使用本学期我们所学的C语言知识编写大型程序的能力,了解大型程序设计的开发步骤,以上机为主,每个学生按照要求使用C语言设计一个大型程序,并提供相关的设计文档和源程序,从网站提交。
1、C语言综合训练程序设计要求
已知在磁盘上有一个文本文件(stuin.txt),此文件存放了一组学生的成绩信息,按照如下格式存放:
1001stuname189
1002stuname278
1003stuname360
......
1100stuname10087
请按照如下要求编写程序:
a. 定义一个结构体类型数组,结构体类型含有学号、姓名和成绩三个域;
b.将文本文件的内容读入到结构体数组中;
c.显示成绩最高的人的学号、姓名和成绩(如果有相同的人要全部显示);
d.显示平均成绩高于、低于和等于平均成绩的人数;
e.显示成绩为优秀(90~100)、良好(80~89)、中等(70~79)、及格(60~69)、不及格(0~59)的人数和所占百分比;
f.将以上显示的信息存放到stuout.txt文件中;
2、C语言综合训练设计报告要求
a.结合教材第二章的内容,写出本次综合训练的分析文档;
b.文档要求以WORD排版,语言简练,条理清楚;
c.测试过程中遇到的主要问题及采取的解决措施;
e.文档以“设计报告.DOC”名字保存。
3、作业提交要求:
a.需要提交的文件:
源程序、可执行文件以及stuin.txt、stuout.txt文件和设计报告.DOC文件、设计报告txt版。
b.所有提交文件保存在一个文件夹中,文件夹名字为“专业班级姓名”,如“电气162张三”;
c.《设计报告.txt》使用《设计报告.doc》另存为TXT类型得到,《课程设计报告.txt》将用计算机做复制比检测。
特别强调所有命名文件不要加空格。
4、作业提交截止日期:
2017/5/22,以班级为单位提交。
二、总体设计(框图请用web版视图查看)
(1)功能设计
(2)数据设计
根据问题设计,进行数据设计定义一个包含学号,姓名,成绩三个成员的结构体类型,作为学生信息的储存类型;定义一个结构体的数组存放若干学生记录;
(3)函数设计
根据功能设计,为学生成绩分析软件设计如下函数来实现程序各模块的功能。
open():
函数原型voidRead(),是数据输入函数,从磁盘数据文件stuin.txt中读取学生初始信息,储存到程序中对应的结构体数组中。
deal():
函数原型voidsolve(),显示统计各分数段学生人数及所占百分比,显示高于,等于,低于平均成绩的的人数和最高成绩同学的学号,姓名,成绩(同时显示)并且将所得到信息存储到stuout.txt文件中。
main():
函数原型voidmain,是学生成绩分析系统的主函数,控制各功能函数模块的调用,实现整个程序的各项功能。
(4)函数的调用关系
以上函数的调用关系如图所示。
三、详细设计
(1)函数的设计
1.Voidmian()函数
main函数的模块流程图如图所示
2.voidopen()函数流程图模块流程图如图所示
函数内部定义n=0;
(3)voiddeal()函数模块的设计如图所示
函数内部定义;
inti;
inth=0,e=0,l=0;
intscore90_100=0,score80_89=0,score70_79=0,score60_69=0,score0_59=0;
charsss[81]="";
(2)结构体设计
根据问题分析,进行数据的设计,定义一个包含学号,姓名,成绩三个成员的结构体类型,作为学生信息记录的存储类型;定义一个符号常量作为数组的长度。
定义一个学生信息的结构体类型:
typedefstructstudent
{/*定义结构体*/
charname[50];
charnum[50];
doublescore;
}stu;
stustudent,s[1000];
四、源代码
#include"stdio.h"
#include"stdlib.h"
typedefstructstudent
{/*定义结构体*/
charname[50];
charnum[50];
doublescore;
}stu;
stustudent,s[1000];
intn;
doublemax;
doubleaverage;
charfile1[100]="stuin.txt";
charfileO[100]="stuout.txt";
voidopen()
{
n=0;
FILE*fp;
if((fp=fopen(file1,"r"))==NULL)
{/*以只读打开文件*/
printf("cannotopenfile");
getchar();
exit(0);
}
while(fscanf(fp,"%s%s%lf\n",s[n].num,s[n].name,&s[n].score)!
=EOF/*从文件读*/)
{
n++;
}
fclose(fp);
}
//函数功能将文件中的数据写入结构体中
voiddeal()
{
inti;
inth=0,e=0,l=0;
intscore90_100=0,score80_89=0,score70_79=0,score60_69=0,score0_59=0;
charsss[81]="";
FILE*fp;
if((fp=fopen(fileO,"w"))==NULL)
{/*以只读打开文件*/
printf("cannotopenfile");
getchar();
exit(0);
}
average=0;
max=0;
for(i=0;i { if(s[i].score>max)max=s[i].score; average+=s[i].score; } average/=n; puts("最高分的人: "); fputs("最高分的人: \n",fp); for(i=0;i { if(s[i].score elseif(s[i].score>average)h++; elsee++; if(s[i].score>=90)score90_100++; elseif(s[i].score>=80)score80_89++; elseif(s[i].score>=70)score70_79++; elseif(s[i].score>=60)score60_69++; elsescore0_59++; if(s[i].score printf("%s%s%.0lf\n",s[i].num,s[i].name,s[i].score); fprintf(fp,"%s%s%.0lf\n",s[i].num,s[i].name,s[i].score); } printf("\n"); fprintf(fp,"\n"); printf("平均成绩: %lf\n",average); printf("高于平均%d人\n",h); printf("等于平均%d人\n",e); printf("低于平均%d人\n",l); fprintf(fp,"平均成绩: %lf\n",average); fprintf(fp,"高于平均%d人\n",h); fprintf(fp,"等于平均%d人\n",e); fprintf(fp,"低于平均%d人\n",l); puts(""); fputs("",fp); printf("优秀(90~100)%d人数,百分比;%.1f%%\n",score90_100,100.0*score90_100/n); printf("良好(80~89)%d人数,百分比;%.1f%%\n",score80_89,100.0*score80_89/n); printf("中等(70~79)%d人数,百分比;%.1f\n",score70_79,100.0*score70_79/n); printf("及格(60~69)%d人数,百分比;%.1f%%\n",score60_69,100.0*score60_69/n); printf("不及格(00~50)%d人数,百分比;%.1f%%\n",score0_59,100.0*score0_59/n); fprintf(fp,"优秀(90~100)%d人数,百分比;%.1f%%\n",score90_100,100.0*score90_100/n); fprintf(fp,"良好(80~89)%d人数,百分比;%.1f%%\n",score80_89,100.0*score80_89/n); fprintf(fp,"中等(70~79)%d人数,百分比;%.1f%%\n",score70_79,100.0*score70_79/n); fprintf(fp,"及格(60~69)%d人数,百分比;%.1f%%\n",score60_69,100.0*score60_69/n); fprintf(fp,"不及格(00~50)%d人数,百分比;%.1f%%\n",score0_59,100.0*score0_59/n); fclose(fp); printf("\n结果已经写入文件%s\n",fileO); } //函数的功能将最高成绩的人的信息输出,输出高于,低于,等于平均成绩的人数,求出不同分数段的人所占的比例 voidmain() { inti=0; open(); deal(); getchar(); } 五、调试过程中的问题 在调试的过程中出现了不少的bug,警告和一些其他的问题。 (1)首先,为了进行百分比的显示,进行了一番的调试,首先需要进行百分号的显示,用两个百分号进行百分号的打印,然后再定义一下数字的输出格式,拿各分数段成绩除以总的人数再乘以100。 这样得到的组合就是一个百分比数。 (2)在定义数组存储数据的时候我只定义了存放50个数据的一维数组结果出现了错误,我的数据是100个不能存放完我的所有的数据,所以我根据vc提供的提示将file1和file2的长度改为了100,这样就能很好的运行。 (3)对于deal函数的设计,deal函数是我这个函数设计的关键也是最复杂的部分。 如果不定义typedefstruct类型的数组就会有后面无法输出,还有就是如何输出分数最高人的信息我运用了比较的方法,将最高人的信息赋予了max,再输出这个信息。 (4)对于一些警告和小的bug,根据vc++的反馈双击信息,然后根据提示进行逐条的修改。 比如说: 没有对定义的字符inti赋予初始值就会有一个警告等一些小的问题。 六、总结 课程设计是锻炼同学们实践能力的重要环节,是对学生实践能力的考察,应用,和锻炼。 对以后我们从事相关工作的能力的一次锻炼和提升,对我们未来的发展十分重要。 C语言课程设计不仅是一门理论课还是一门实践课,不仅需要扎实的理论基础,没有实践的动手能力和独立思考的能力是远远不够的,难免会遇到各种各样的问题,同时在设计之中发现了自己的不足之处,对以前的所学过的知识理解得不够深刻,掌握的不够牢固,不如说指针通过这次课程设计之后,在一定程度上我把以前的C语言知识重新的温故了一遍。 本次课程设计用到了指针和结构体这对于我来说是一门全新的知识,开始设计难免会遇到特别大的问题,经过了很长时间通过资料的学习,和不断地实践操作我慢慢的熟悉了基本的指针和结构体的使用,能进行简单的函数操作。 同时在本次课程实践中多谢我的计算机系的同学的帮助,我从同学那得到了许多的帮助,在此表示感谢。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 河南 科技大学 语言 课程设计