版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计报告课程名称C语言课程设计课题名称小学数学测试系统专业班级学号姓名指导教师2021年01月06日
湖南工程学院课程设计任务书课程名称C语言课程设计课题小学数学测试系统专业班级学生姓名学号指导教师审批任务书下达日期2021年12月26日任务完成日期2021年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、系统功能:用户注册:即添加新用户名、用户密码。用户登录:在进展数学测试之前,需进展登录,假设没有该用户,需进展注册。题目测试:系统自动生成题目(注意题目合理性,题目结果不能是负数,除数不能是0等),用户给出答案,系统可以自动测试其正确性,同时统计成绩。信息保存:当注册成功、题目测试完毕后将用户信息及成绩保存到文件。e.退出系统。3、系统使用说明:执行一个具体功能之后,程序将重新显示功能菜单。系统功能并不限于上述,可以对其进展扩大完善,如题目自动生成,可以只是简单加减乘除运算,也可以生成复杂四那么混合运算。同时,用户界面友好也很重要,当输入错误答案,需给出提示信息。三、测试数据:用户>=3,题目数>=5目录TOC\o"1-1"\u1系统需求分析 62概要设计 63详细设计 104系统测试 155 课程设计总结 181系统需求分析小学生数学测试系统具有随机出题,自动评分,查看答案,错题重做等功能系统;其属性有:1.主界面设计,选择各种功能。2.系统随机出题,显示算式,含加,减,乘,除四那么运算。3.练习时,系统随机出题,键入答案,可显示对错。4.测试时,系统自动出题,每题得分,再统计得分。5.题对错信息,错误给出答案。2概要设计系统功能模块图:小学小学数学测试系统学生成绩管理模块测试模块注册登录模块查看结果模块错题重做模块2.1注册登录模块 提示用户输入姓名和学号,如果已经有记录那么将本次登录用户信息追加储存在文件中,如果没有记录,那么创立一个新文件储存:其模块图如下列图所示:注册登录模块提示输入姓名学号创立文件记录学生信息判断是否有记录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,"登录完后进入测试界面此时开场计时有语句{printf("请计时输入开场时间(点,分):");scanf("%d,%d",&hourA,&minA);}进展输入计时。然后进入测试界面菜单: 3.2测试功能得实现①选测试类型:测试功能菜单分为5个,其中1~4为选择类型,5返回主菜单;具体实现选择功能有while(choose<1||choose>5){printf("超出功能范围,请重新选择(15):");scanf("%d",&choose);}输入1~5之间一个数,再用switch(choose){}进展选择对应功能 如上图选择1后进入②选题数目:进展选择题目数目,输入要测试题目数被限制(5/10/20/50/100)五个数用句while(thnum<5||thnum>5&&thnum<10||thnum>10&&thnum<||thnum>20&&thnum<50||thnum>50&&thnum<100||thnum>100){printf("超出功能范围,请重新选择(5/10/20/50/100):");scanf("%d",&thnum);}由此语句实现对题目数限制,但超出范围后那么提示重新输入。在begain()中调用Addition(intnumber)控制循环语句for(inti=0;i<number;i++) {if(m==1){num1=rand()%n;num2=rand()%n;}//产生一位随机数,num1,num2if(m==2){num1=10+rand()%(n-10);//产生两位随机数num1,num2 num2=10+rand()%(n-10);}if(m==3){num1=100+rand()%(n-100);//产生三位随机数num1,num2 num2=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;i<number;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);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排名实现此过程中将将每次做题情况及学生信息记录到文件中,然后再将中一条条记录读取到构造体中,用冒泡法进展排序,最后直接从构造体中读取排好序成绩;其具体程序:voidsort()//实现排序{FILE*fp5;inti,j,m;s[0].avscore=A/nu;fp5=fopen("nrecord.txt","a+");fclose(fp5);fp5=fopen("nrecord.txt","rb");for(i=0;!feof(fp5);i++){fscanf(fp5,"%s %s%f\n",s[i].name,s[i].num,&s[i].avscore);}fclose(fp5);m=i;structStudenttemp;for(i=0;i<m;i++){for(j=0;j<m-1;j++) if(s[j].avscore<s[j+1].avscore) {strcpy(,s[j].name);strcpy(temp.num,s[j].num);temp.avscore=s[j].avscore;strcpy(s[j].name,s[j+1].name);strcpy(s[j].num,s[j+1].num); s[j].avscore=s[j+1].avscore;strcpy(s[j+1].name,);strcpy(s[j+1].num,temp.num); s[j+1].avscore=temp.avscore;}}//输出排名结果 printf******************************************************\n"); printf("查看你排名〔排序结果由高到低):\n"); printf("姓名 学号 分数\n");for(i=0;i<m;i++) {printf(" %s %s%4.2f\n",s[i].name,s[i].num,s[i].avscore);}}错题重做测试过程中已将错题和错题答案分别存入到failedResult.txt和文件中,直接进展翻开存储错题文件逐个读取错题,这时利用scanf函数输入答题者答案,最后再翻开储存错题答案文件进展核对正确答案具体程序为:voidrework()//错题重做{inta;charch;FILE*fp2,*fp3; if((fp2=fopen("failedResult.txt","a+"))==NULL) {printf("翻开文件失败\n");exit(0);} if((fp3=fopen("rightResult.txt","a+"))==NULL) {printf("翻开文件失败\n");exit(0);}printf("********************错题重做***************************************\n");while(!feof(fp2))if(ch=='=') scanf("%d",&a);}//输入答案 fp2=fopen("failedResult.txt","w");//清空之前数据 fclose(fp2); printf("========小朋友请查看正确答案============================\n");while(!feof(fp3)) fclose(fp3);fp3=fopen("rightResult.txt","w");//清空 fclose(fp3);}完毕测试中选择主菜单完毕功能时,系统那么提示输入完毕时间,输入后,系统将自动生成所用时间,然后系统将把学生所有信息记录到以学生,学号命名文件中.具体实现过程如下;void()//文件复制函数,用来保存测试结果,当然文件名不能重复,{FILE*in,*out;strcat(s[0].num,".txt");//将字符串".txt"连接到字符串student[0].num后,即以学号为文件名,后缀为.txt文件中,保存在工程目录下if((in=fopen("TestResult.txt","r"))==NULL) {in=fopen("TestResult.txt","w+");printf("无文件记录,已新建.\n");}if((out=fopen(s[0].num,"w"))==NULL)//翻开文件学号.txt文件〔如030.txt〕,"w"方式为只写方式 {printf("翻开文件失败\n");exit(0);}fputc(fgetc(in),out);//逐个字符写入fclose(in);fclose(out);}voidTestOver()//程序测试完毕函数{printf("\n\n测试完毕你测试结果保存在%s中\n\n",s[0].num);//输出测试结果记录提示}4系统测试登录模块测试模块①选测试类型②选题数目③选难度实现4.3查看学生成绩模块错题重做模块4.5测试时出现错误与分析总结程序设计为构造化和模块化,用函数间相互调用来实现系统功能,为调试带来了一定方便。在调试过程中,出现了很多问题,其中文件和构造体之间转换最为困难,在一段时间内,影响到了错题重做,排名等功能实现;问题一:程序中屡次用到了文件读写,用文件记录信息,屡次出现读不出来,记录不到文件中,还出现乱码。解决方法:认真学习和反复研究了,文件读写函数fprintf,fscanf,fread,fwrite,fgetc,在反复调试中终于解决了此问题。问题二:由于学生信息均记录在文件中,而文件不能直接排序需转换到构造体中进展排序,给整个排序过程带来了相当大困难,出现了转换不到构造体中,和乱码现象。 解决方法:首先检查了为文件是否将信息记录了下来,确认有数据后,用fscanf,fread,进展了反复更换,此过程中反复运行查看构造体是否有输出。最终实现了文件与构造体之间数据传递,实现了排序功能. 问题三:错题重做有一定困难,怎样将错题一个个及记录下来,并且能读出来重新做,产生了一定困难。解决方法:采用了文件记录错题和错题答案,用fgetc函数实现了读出记录错题,从而实现了错题重做功能。此外在调试过程中也遇到了相当多其他问题,从整体构造设计,到各个功能实现.课程设计总结这次课程设计实验是对我们进入大学以来学习C语言结果是一次大考验。自己动手,发现问题和解决问题。并发现了许多自己缺乏,平时没掌握知识在实践中暴漏,经过不断思考,查阅书籍和上网查资料及上机运行,解决了大局部问题,还稍微有些小问题。但是,我相信在今学习中,一定能把它解决好。当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪大学来说掌握程序开发技术是十分重要,而C语言又是最常见,功能最强大一种高级语言,因此做好C语言课程设计是十分必要。我不仅稳固?C语言程序设计?课程学习内容,掌握设计根本方法,强化上机动手能力。。本次课程设计编写小学数学测试系统,它具有随机出题、自动评分、自动排名,查看正确答案、错题重做等功能,本系统功能强大,程序大,编写难度相当大,在编程中,很多知识,几乎是一片空白。不过后来通过书本和网络慢慢知道了一点。通过这次课程设计,使我更加深刻地体会到c语言程序编写过程严谨与细致,还有无论做任何事都要有耐心。也懂得了理论与实际相结合是很重要,只有理论知识是远远不够,只有把所学理论知识与实践相结合起来,从理论中得出结论,才能真正为社会效劳,从而提高自己实际动手能力和独立思考能力在课程设计过程中,收获知识,提高能力同时,我也学到了很多人生哲理,懂得怎么样去制定方案,怎么样去实现这个方案,并掌握了在执行过程中怎么样去克制心理上不良情绪。因此在以后生活和学习过程中,我一定会把课程设计精神带到生活中,是生活也更加好。谢谢田教师这几天时间对我们指导计算机科学与技术系课程设计评分表课程名称:C语言程序设计项目评价设计方案合理性与创造性设计与调试结果设计说明书质量辩论陈述与答复下列问题情况课程设计周表现情况综合成绩教师签名:日期:2021.01.10附录:源程序#include<stdio.h>//C语言标准输入输出头文件#include<string.h>//字符串操作需要用到头文件#include<stdlib.h>//文件操作需要用到头文件#include<time.h>//产生随机数需要用到头文件floatA=0;intnu=0;inthourA,hourB,minA,minB;structStudent{charname[21];//姓名charnum[10];//学号floatavscore;}s[50];//构造体数组,存储学生信息,在此初定为50,可改/**/voidSavemessage()//保存学生输入信息函数{FILE*fp,*fp1;//定义文件指针,//以下判断文件翻开与否,"a"方式翻开那么可向文件尾写数据 {printf("翻开文件失败\n");exit(0);} {printf("翻开文件失败\n");exit(0);} printf(" 输入姓名:");//以下为要学生输入个人信息 scanf("%s",s[0].name); printf(" 输入学号:"); scanf("%s",&s[0].num);fwrite(&s[0],sizeof(structStudent),1,fp);//向文件studentmessage.txt中写入一条记录,即刚刚输入学生信息 fprintf(fp1," 学号:%s\n",s[0].num);fclose(fp1);system("cls");//清屏}voidJudge()//判断函数{inti=0;FILE*fp; //文件指针//以下判断文件翻开与否,"r"为只读翻开方式printf("\n\n\n");printf("*************************小学数学测试系统********************\n");printf("**\n");printf("**\n");printf("*************************************************************\n");printf("*注册*\n");printf("**\n");printf("*输入姓名*\n");printf("**\n");printf("*输入学号*\n");printf("**\n\n\n"); {fp=fopen("studentmessage.txt","w+"); //如果没有studentmessage.txt文件,那么新建此文件,"w+"翻开方式为新建一个文件 printf("无文件记录,已新建.\n");}while(!feof(fp))//判断是否到了文件尾 {fread(&s[i],sizeof(structStudent),1,fp);//一行一行从文件中读出学生信息,保存在构造体数组student[]中 fscanf(fp,"\n");//读取换行符i++;//i变量保存学生记录个数if(i==50)//当人数满时即50个人满时,因为数组下标从0开场,所以当i为29时 {printf("人数已满,你已无法测试.\n"); fclose(fp); exit(0);}}}/**/voidAddition(intnumber)//加法运算函数,number为题目数形参{ F
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 鞋厂员工安全生产操作与防护培训手册
- 在线教育平台教学资源建设与共享手册
- 证书考试考务人员培训工作手册
- 野生动物保护典型案例警示教育手册
- 检测中心安全生产管理工作手册(标准版)
- 2025年广东省广州市高职单招职业适应性测试考试题库【必刷】附答案详解
- 2024年广西柳州工业职业学院单招职业技能考试模拟试卷【典型题】附答案详解
- 2027年陕西凤翔职业学院单招综合素质考试题库及答案详解(名校卷)
- 2025年巴马康养职业学院单招综合素质考试题库带答案详解(轻巧夺冠)
- 2025年长白专修学院高职单招职业技能考试题库及答案详解【新】
- 毛选介绍教学课件
- 成人住院患者跌倒风险评估及预防模板
- 平房灭火救援授课课件
- 2025年高频考点国企《人力资源管理岗》专业知识考试卷(含解析)及答案
- GB/T 26952-2025焊缝无损检测磁粉检测验收等级
- 化学安全和防护知识培训课件
- 工业产品批生产记录标准模板
- 兴文县竹纤维环保餐具生产项目环评报告
- 2024年淮北市濉溪县事业单位笔试真题(附答案)
- 动物疫病检疫培训课件
- 下肢静脉血栓介入护理查房
评论
0/150
提交评论