当前位置:文档之家› 课程设计-小学数学测试系统C课程设计报告及源程序代码

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

课程设计-小学数学测试系统C课程设计报告及源程序代码课程设计报告课程名称 C语言课程设计课题名称小学数学测试系统专业纺织工程班级1202学号 28 姓名金?宜指导教师7>20XX年 01 月 06 日湖南工程学院课程设计任务书课程名称C语言课程设计课题小学数学测试系统专业班级纺织工程1202 学生姓名金?宜学号28 指导老师审批任务书下达日期2013 年 12 月 26 日任务完成日期 20XX年 01 月 06 日一、设计内容与设计课题九:小学数学测试系统。

具体内容见附录。

2.设计要求:1)设计正确,方案合理。

2)界面友好,使用方便。

3)程序精炼,结构清晰。

4)上机演示。

3.设计报告要求:课程设计报告格式如下:1)正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体,行距为22。

2)正文的内容:课题的主要功能、课题的功能模块的划分、主要功能的实现、程序调试、总结、附件(所有程序的源代码,要求对程序写出必要的注释),课程设计报告需5000字左右(不含附件)。

3)课程设计报告装订顺序:封面、任务书、目录、正文、评分、程序清单附件。

二、进度安排星期日(17周) 星期一(18周) 星期四(18周) 星期五(18周) 星期日(18周)14:00-17:00 18:00-21:00 18:00-21:00 18:00-21:00 交报告上课时间另外安排。

附录:设计课题九:小学数学测试系统一、问题描述:本系统可以用来进行简单的数学测试,并累计成绩,包括用户注册、用户登录、用户删除、题目测试、信息保存等功能。

二、功能描述:1、本系统采用结构体数组,每个数据的结构应当包括:用户名、用户密码、共测试题目数、答对题目数。

2、系统功能:用户注册:即添加新的用户名、用户密码。

用户登录:在进行数学测试之前,需进行登录,若没有该用户,需进行注册。

题目测试:系统自动生成题目注意题目的合理性,题目结果不能是负数,除数不能是0等,用户给出答案,系统可以自动测试其正确性,同时统计成绩。

信息保存: 当注册成功、题目测试完毕后将用户信息及成绩保存到文件。

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],sizeofstruct Student,1,fp;语句向文件studentmessage.txt中写入一条记录,即刚刚输入的学生姓名和学号;利用fprintffp1,"姓名:%s\n",s[0].name;fprintffp1," 学号:%s\n",s[0].num; 向文件TestResult.txt中写入刚刚输入的学生信息登录完后进入测试界面此时开始计时有语句printf" 请计时输入开始时间点,分:"; scanf"%d,%d",&hourA,&minA;进行输入计时。

然后进入测试界面的菜单:3.2 测试功能得实现①选测试类型:测试功能菜单分为5个,其中1~4为选择类型,5返回主菜单;具体实现选择功能有whilechoose1||choose5 printf"超出功能范围,请重新选择1---5:";scanf"%d",&choose;输入1~5之间的一个数,再用switchchoose 进行选择对应的功能如上图选择1后进入②选题数目:进行选择题目的数目,输入要测试的题目数被限制5/10/20/50/100五个数用句whilethnum5||thnum5&&thnum10||thnum10&&thnum||thnum20&&thnum50||t hnum50&&thnum100||thnum100printf"超出功能范围,请重新选择5/10/20/50/100:";scanf"%d",&thnum; 由此语句实现对题目数的限制,但超出范围后则提示重新输入。

在begain中调用Additionint number控制循环语句forint i0;inumber;i++ifm1num1rand%n; num2rand%n; //产生一位随机数,num1,num2ifm2num110+rand%n-10; //产生两位随机数num1,num2num210+rand%n-10;ifm3num1100+rand%n-100;//产生三位随机数 num1,num2num2100+rand%n-100;printf" %d + %d ",num1,num2;scanf"%d",&num4;通过控制循环的次数来控制产生题的数目.③选难度的实现:利用随机函数rand%n;中n的不同值产生不同的位数的随机书实现难度的控制,n10时用语句num1rand%n产生一位数;n100时用语句num110+rand%n-10产生二位数;n1000时用num1100+rand%n-100产生三位数;具体有语句printf"请选择难度: "; scanf"%d",&m;system"cls"; //清屏ifm1 n10 ; ifm2 n100 ;else ifm3 n1000 ;forint i0;inumber;i++ifm1num1rand%n; num2rand%n; ifm2num110+rand%n-10;num210+rand%n-10;ifm3num1100+rand%n-100;num2100+rand%n-100; 实现控制难度,并有rand%n产生随机数实现随机出题功能。

④自动评分的实现和数据的储存系统会将输入的答案与正确答案进行逐一比较,如果正确则将结果只记录到TestResult.txt中,以便查看结果;如果错误,则将错误题正确结果记录到failedResult.txt中,以便错题重做,将错误题正确结果记录到rightResult.txt中,TestResult.txt中,以便核对错题答案,在此过程中系统会自动统计正确结果个数和错误个数,从而利用averagefloatcount1/floatnumber;自动得到分数。

具体程序如下:ifnum3num4fprintffp," %d + %d %d %d \n",num1,num2,num4,num3;count1++;else fprintffp," %d + %d %d %d×\n",num1,num2,num4,num3;fprintffp2," %d + %d \n",num1,num2,num4,num3;//将错误题记录到failedResult.txt中fprintffp3," %d + %d %d \n",num1,num2,num3;averagefloatcount1/floatnumber;fprintffp," 正确%d 道,错误%d 道,正确率为:%f\n\n",count1,count2,average;AA+average*100;//总分nu++;//记录做不同类型题的次数以便算平均分⑤减乘除的过程和原理和加法一样其工作界面分别为减法;乘法;除法;除法其它功能得实现与加法一样只有分母不为零,用num2n/10+rand%n-n/10语句进行实现,其中rand%n-n/10产生0到n-n/10-1的数;n/10+rand%n-n/10产生n/10到n-1的数;例如n100时产生10到99的两位数;从而实现了分母不为零,同时也实现了难度的控制。

3.3查看结果的实现:测试过程中已经将结果记录存到TestResult.txt中,只需打开文件读取出记录即可void ShowResult//显示测试结果函数FILE *fp;iffpfopen"TestResult.txt","r"NULL; exit0;char ch; chfgetcfp; //文件开头字符whilech!EOF //当文件没有到尾时,一直循环putcharch; //输出字符 chfgetcfp; fclosefp; 有此函数就可直接读取查看结果。

相关主题