小学数学测试系统C课程设计报告与源程序代码

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

课程设计报告课程名称C语言课程设计课题名称小学数学测试系统专业班级学号姓名指导教师2016年01月06日湖南工程学院课程设计任务书课程名称C语言课程设计课题小学数学测试系统专业班级学生姓名学号指导老师审批任务书下达日期2015年12月26日任务完成日期2016年01月06日一、设计内容与设计课题九:小学数学测试系统。具体内容见附录。2.设计要求:1)设计正确,方案合理。2)界面友好,使用方便。3)程序精炼,结构清晰。4)上机演示。3.设计报告要求:课程设计报告格式如下:1)正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体,行距为22。2)正文的内容:课题的主要功能、课题的功能模块的划分、主要功能的实现、程序调试、总结、附件(所有程序的源代码,要求对程序写出必要的注释),课程设计报告需5000字左右(不含附件)。3)课程设计报告装订顺序:封面、任务书、目录、正文、评分、程序清单附件。二、进度安排星期日(17周)星期一(18周)星期四(18周)星期五(18周)星期日(18周)14:00-17:0018:00-21:0018:00-21:0018:00-21:00交报告上课时间另外安排。附录:设计课题九:小学数学测试系统一、问题描述:本系统可以用来进行简单的数学测试,并累计成绩,包括用户注册、用户登录、用户删除、题目测试、信息保存等功能。二、功能描述:1、本系统采用结构体数组,每个数据的结构应当包括:用户名、用户密码、共测试题目数、答对题目数。2、系统功能:a.用户注册:即添加新的用户名、用户密码。b.用户登录:在进行数学测试之前,需进行登录,若没有该用户,需进行注册。c.题目测试:系统自动生成题目(注意题目的合理性,题目结果不能是负数,除数不能是0等),用户给出答案,系统可以自动测试其正确性,同时统计成绩。d.信息保存:当注册成功、题目测试完毕后将用户信息及成绩保存到文件。e.退出系统。3、系统使用说明:执行一个具体的功能之后,程序将重新显示功能菜单。系统的功能并不限于上述,可以对其进行扩充完善,如题目的自动生成,可以只是简单的加减乘除运算,也可以生成复杂的四则混合运算。同时,用户界面友好也很重要,当输入错误答案,需给出提示信息。三、测试数据:用户=3,题目数=5目录1系统需求分析.........................................................................62概要设计...............................................................................63详细设计.............................................................................104系统测试.............................................................................155课程设计总结.......................................................................181系统需求分析小学生数学测试系统具有随机出题,自动评分,查看答案,错题重做等功能的系统;其属性有:1.主界面设计,选择各种功能。2.系统随机出题,显示算式,含加,减,乘,除四则运算。3.练习时,系统随机出题,键入答案,可显示对错。4.测试时,系统自动出题,每题得分,再统计得分。5.题的对错信息,错误的给出答案。2概要设计系统功能模块图:2.1注册登录模块提示用户输入姓名和学号,如果已经有记录则将本次登录用户信息追加储存在文件中,如果没有记录,则创建一个新文件储存:其模块图如下图所示:2.2测试模块进入开始测试菜单后,开始计时,选择加减乘除四种运算类型,总体来说测试模块可以分为:加法运算、减法运算、乘法运算、除法运算四部分四部分功能相似选择类型后,在选择题数目为(5,10,20,50,100),然后再选择难度,这时开始做题(题目利用随机函数随机出题),然后判断正误并给出正确率,错误的结果存入一个文件中以备错题重做,将所有做题的结果存入另个文件中以便查看结果;注册登录模块提示输入姓名学号创建文件记录学生信息判断是否有记录小学数学测试系统学生成绩管理模块测试模块注册登录模块查看结果模块错题重做模块2.3学生成绩管理模块本模块首先将每次测试同学姓名,学号,成绩存入一个文件中,每次测试同学的信息不覆盖之前同学的信息,然后将文件中的信息读取到结构体中进行排序,最后利用结构体将排好序的成绩显示到屏幕上,其模块如下所示图:2.4查看结果模块利用测试模块存储的结果信息文件进行直接读取,期间用到fgetc函数将文件的信息读取出来,其图如下图所示:查看结果模块打开存储结果的文件读取文件测试模块加法运算减法运算乘法运算除法运算学生成绩管理模块存入测试学生成绩信息查看排名榜创建学生成绩信息文件排列顺序2.5错题重做模块测试模块过程的已将错题和错题的答案分别出入到文件中,直接进行打开存储错题的文件逐个读取错题,这时利用scanf函数输入答题者的答案,最后再打开储存错题答案的文件进行核对正确答案,其模块如下图所示:系统流程图:错题重做模块读取错题进行重做核对答案打开错题存储文件开始输入姓名输入学号主菜单开始测试查看排名错题重做查看结果结束测试加法减法乘法除法退出返回保存3详细设计3.1登录功能得具体实现:用到两个函数Savemessage()和Judge()两个函数,其中Savemessage()函数用来,保存学生输入信息,将输入学生信息保存到studentmessage.txt和TestResult.txt文件中,保存过程中,先输入到结构体中,再利用fwrite(&s[0],sizeof(structStudent),1,fp);语句向文件studentmessage.txt中写入一条记录,即刚刚输入的学生姓名和学号;利用fprintf(fp1,姓名:%s\n,s[0].name);fprintf(fp1,学号:%s\n,s[0].num);向文件TestResult.txt中写入刚刚输入的学生信息登录完后进入测试界面此时开始计时有语句{printf(请计时输入开始时间(点,分):);scanf(%d,%d,&hourA,&minA);}进行输入计时。然后进入测试界面的菜单:3.2测试功能得实现①选测试类型:测试功能菜单分为5个,其中1~4为选择类型,5返回主菜单;具体实现选择功能有while(choose1||choose5){printf(超出功能范围,请重新选择(1---5):);scanf(%d,&choose);}输入1~5之间的一个数,再用switch(choose){}进行选择对应的功能如上图选择1后进入②选题数目:进行选择题目的数目,输入要测试的题目数被限制(5/10/20/50/100)五个数用句while(thnum5||thnum5&&thnum10||thnum10&&thnum||thnum20&&thnum50||thnum50&&thnum100||thnum100){printf(超出功能范围,请重新选择(5/10/20/50/100):);scanf(%d,&thnum);}由此语句实现对题目数的限制,但超出范围后则提示重新输入。在begain()中调用Addition(intnumber)控制循环语句for(inti=0;inumber;i++){if(m==1){num1=rand()%n;num2=rand()%n;}//产生一位随机数,num1,num2if(m==2){num1=10+rand()%(n-10);//产生两位随机数num1,num2num2=10+rand()%(n-10);}if(m==3){num1=100+rand()%(n-100);//产生三位随机数num1,num2num2=100+rand()%(n-100);}printf(%d+%d=,num1,num2);scanf(%d,&num4);通过控制循环的次数来控制产生题的数目.③选难度的实现:利用随机函数rand()%n;中n的不同值产生不同的位数的随机书实现难度的控制,n=10时用语句num1=rand()%n产生一位数;n=100时用语句num1=10+rand()%(n-10)产生二位数;n=1000时用num1=100+rand()%(n-100)产生三位数;具体有语句printf(请选择难度:);scanf(%d,&m);system(cls);//清屏{if(m==1)n=10;if(m==2)n=100;elseif(m==3)n=1000;}for(inti=0;inumber;i++){if(m==1){num1=rand()%n;num2=rand()%n;}if(m==2){num1=10+rand()%(n-10);num2=10+rand()%(n-10);}if(m==3){num1=100+rand()%(n-100);num2=100+rand()%(n-100);}}实现控制难度,并有rand()%n产生随机数实现随机出题功能。④自动评分的实现和数据的储存系统会将输入的答案与正确答案进行逐一比较,如果正确则将结果只记录到TestResult.txt中,以便查看结果;如果错误,则将错误题正确结果记录到failedResult.txt中,以便错题重做,将错误题正确结果记录到rightResult.txt中,TestResult.txt中,以便核对错题答案,在此过程中系统会自动统计正确结果个数和错误个数,从而利用average=float(count1)/float(number);自动得到分数。具体程序如下:if(num3==num4){fprintf(fp,%d+%d=%d%d\n,num1,num2,num4,num3);count1++;}else{fprintf(fp,%d+%d=%d%d×\n,num1,num2,num4,num3);fprintf(fp2,%d+%d=\n,num1,num2,num4,num3);//将错误题记录到failedResult.txt中fprintf(fp3,%d+%d=%d\n,num1,num2,num3);}}}average=float(count1)/float(number);fprintf(fp,正确%d道,错误%d道,正确率为:%f\n\n,count1,count2,average);A=A+average*100;//总分nu++;//记录做不同类型题的次数以便算平均分⑤减乘除的过程和原理和加法一样其工作界面分别为减法;乘法;除法;除法其它功能得实现与加法一样只有分母不为零,用num2=n/10+rand()%(n-n/10)语句进行实现,其中rand()%(n-n/10)产生0到n-n/10-1的数;n/10+rand()%(n-n/10)产生n/10到n-1的数;例如n=100时产生10到99的两位数;从而实现了分母不为零,同时也实现了难度的控制。3.3查看结果的实现:测试过程中已经将结果记录存到TestResult.txt中,只需打开文件读取出记录即可voidShowResult()//显示测试结果函数{FILE*fp;if((fp=fopen(TestResult.txt,r))==NULL);exit(0);}charch;ch=fgetc(fp);//文件开头字符while(ch!=EOF)//当文件没有到尾时,一直循环{putchar(ch);//输出字符ch=fgetc(fp);}fclose(fp);}有此函数就可直接读取查看结果。3.4排名的实现此过程中将将每次做题情况及学

1 / 51
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功