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

上传人:b****3 文档编号:4068818 上传时间:2023-05-06 格式:DOCX 页数:16 大小:111.98KB
下载 相关 举报
小学数学测试系统C课程设计报告及源程序代码.docx_第1页
第1页 / 共16页
小学数学测试系统C课程设计报告及源程序代码.docx_第2页
第2页 / 共16页
小学数学测试系统C课程设计报告及源程序代码.docx_第3页
第3页 / 共16页
小学数学测试系统C课程设计报告及源程序代码.docx_第4页
第4页 / 共16页
小学数学测试系统C课程设计报告及源程序代码.docx_第5页
第5页 / 共16页
小学数学测试系统C课程设计报告及源程序代码.docx_第6页
第6页 / 共16页
小学数学测试系统C课程设计报告及源程序代码.docx_第7页
第7页 / 共16页
小学数学测试系统C课程设计报告及源程序代码.docx_第8页
第8页 / 共16页
小学数学测试系统C课程设计报告及源程序代码.docx_第9页
第9页 / 共16页
小学数学测试系统C课程设计报告及源程序代码.docx_第10页
第10页 / 共16页
小学数学测试系统C课程设计报告及源程序代码.docx_第11页
第11页 / 共16页
小学数学测试系统C课程设计报告及源程序代码.docx_第12页
第12页 / 共16页
小学数学测试系统C课程设计报告及源程序代码.docx_第13页
第13页 / 共16页
小学数学测试系统C课程设计报告及源程序代码.docx_第14页
第14页 / 共16页
小学数学测试系统C课程设计报告及源程序代码.docx_第15页
第15页 / 共16页
小学数学测试系统C课程设计报告及源程序代码.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

《小学数学测试系统C课程设计报告及源程序代码.docx》由会员分享,可在线阅读,更多相关《小学数学测试系统C课程设计报告及源程序代码.docx(16页珍藏版)》请在冰点文库上搜索。

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

小学数学测试系统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:

00

18:

00-21:

00

18:

00-21:

00

18:

00-21:

00

交报告

上课时间另外安排。

附录:

设计课题九:

小学数学测试系统

一、问题描述:

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

二、功能描述:

1、本系统采用结构体数组,每个数据的结构应当包括:

用户名、用户密码、共测试题目数、答对题目数。

2、系统功能:

a.用户注册:

即添加新的用户名、用户密码。

b.用户登录:

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

c.题目测试:

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

d.信息保存:

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

e.退出系统。

3、系统使用说明:

执行一个具体的功能之后,程序将重新显示功能菜单。

系统的功能并不限于上述,可以对其进行扩充完善,如题目的自动生成,可以只是简单的加减乘除运算,也可以生成复杂的四则混合运算。

同时,用户界面友好也很重要,当输入错误答案,需给出提示信息。

三、测试数据:

用户>=3,题目数>=5

1系统需求分析6

2概要设计6

3详细设计10

4系统测试15

5课程设计总结18

1系统需求分析

小学生数学测试系统具有随机出题,自动评分,查看答案,错题重做等功能的系统;其属性有:

1.主界面设计,选择各种功能。

2.系统随机出题,显示算式,含加,减,乘,除四则运算。

3.练习时,系统随机出题,键入答案,可显示对错。

4.测试时,系统自动出题,每题得分,再统计得分。

5.题的对错信息,错误的给出答案。

2概要设计

系统功能模块图:

注册登录模块

提示用户输入姓名和学号,如果已经有记录则将本次登录用户信息追加储存在文件中,如果没有记录,则创建一个新文件储存:

其模块图如下图所示:

测试模块

进入开始测试菜单后,开始计时,选择加减乘除四种运算类型,总体来说测试模块可以分为:

加法运算、减法运算、乘法运算、除法运算四部分

四部分功能相似选择类型后,在选择题数目为(5,10,20,50,100),然后再选择难度,这时开始做题(题目利用随机函数随机出题),然后判断正误并给出正确率,错误的结果存入一个文件中以备错题重做,将所有做题的结果存入另个文件中以便查看结果;

学生成绩管理模块

本模块首先将每次测试同学姓名,学号,成绩存入一个文件中,每次测试同学的信息不覆盖之前同学的信息,然后将文件中的信息读取到结构体中进行排序,最后利用结构体将排好序的成绩显示到屏幕上,其模块如下所示图:

查看结果模块

利用测试模块存储的结果信息文件进行直接读取,期间用到fgetc函数将文件的信息读取出来,其图如下图所示:

错题重做模块

测试模块过程的已将错题和错题的答案分别出入到文件中,直接进行打开存储错题的文件逐个读取错题,这时利用scanf函数输入答题者的答案,最后再打开储存错题答案的文件进行核对正确答案,其模块如下图所示:

系统流程图:

3详细设计

登录功能得具体实现:

用到两个函数Savemessage()和Judge()两个函数,其中Savemessage()函数用来,保存学生输入信息,将输入学生信息保存到"和文件中,保存过程中,先输入到结构体中,再利用fwrite(&s[0],sizeof(structStudent),1,fp);语句向文件中写入一条记录,即刚刚输入的学生姓名和学号;

利用fprintf(fp1,"姓名:

%s\n",s[0].name);fprintf(fp1,"学号:

%s\n",s[0].num);向文件中写入刚刚输入的学生信息

登录完后进入测试界面此时开始计时

有语句{printf("请计时输入开始时间(点,分):

");scanf("%d,%d",&hourA,&minA);}进行输入计时。

然后进入测试界面的菜单:

测试功能得实现

①选测试类型:

测试功能菜单分为5个,其中1~4为选择类型,5返回主菜单;具体实现选择功能有

while(choose<1||choose>5){printf("超出功能范围,请重新选择(1---5):

");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

{if(m==1){num1=rand()%n;num2=rand()%n;}③选难度的实现:

利用随机函数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");vscore=A/nu;

fp5=fopen("","a+");

fprintf(fp5,"%s%s%f\n",s[0].name,s[0].num,s[0].avscore);ame,s[i].num,&s[i].avscore);}fclose(fp5);m=i;

structStudenttemp;

for(i=0;i

{for(j=0;j

if(s[j].avscore

{strcpy,s[j].name);

strcpy,s[j].num);

=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,;

s[j+1].avscore=;}}

4.2fame,s[i].num,s[i].avscore);}}

错题重做

测试过程中的已将错题和错题的答案分别存入到和文件中,直接进行打开存储错题的文件逐个读取错题,这时利用scanf函数输入答题者的答案,最后再打开储存错题答案的文件进行核对正确答案具体程序为:

voidrework()体实现过程如下;

voidFileCopy()um,".txt");xt"连接到字符串student[0].num后,即以学号为文件名,后缀为.txt的文件中,保存在工程目录下

if((in=fopen("","r"))==NULL)

{in=fopen("","w+");

printf("无文件记录,已新建.\n");}

if((out=fopen(s[0].num,"w"))==NULL)xt文件(如),"w"方式为只写方式

{printf("打开文件失败\n");

exit(0);}

while(!

feof(in))um);问题三:

错题重做有一定的困难,怎样将错题一个个及记录下来,并且能读出来重新做,产生了一定的困难。

解决方法:

采用了文件记录错题和错题的答案,用fgetc函数实现了读出记录的错题,从而实现了错题重做功能。

此外在调试过程中也遇到了相当多的其他问题,从整体结构的设计,到各个功能的实现.

5课程设计总结

这次的课程设计实验是对我们进入大学以来学习C语言结果的是一次大考验。

自己动手,发现问题和解决问题。

并发现了许多自己的不足,平时没掌握的知识在实践中暴漏,经过不断的思考,查阅书籍和上网查资料及上机运行,解决了大部分问题,还稍微有些小问题。

但是,我相信在今的学习中,一定能把它解决好。

当今计算机应用在生活中可以说得是无处不在。

因此作为二十一世纪的大学来说掌握程序开发技术是十分重要的,而C语言又是最常见,功能最强大的一种高级语言,因此做好C语言课程设计是十分必要的。

我不仅巩固《C语言程序设计》课程学习的内容,掌握设计的基本方法,强化上机动手能力。

本次课程设计编写的小学数学测试系统,它具有随机出题、自动评分、自动排名,查看正确答案、错题重做等功能,本系统功能强大,程序大,编写难度相当大,在编程中,很多知识,几乎是一片空白。

不过后来通过书本和网络慢慢知道了一点。

通过这次课程设计,使我更加深刻地体会到c语言程序编写过程的严谨与细致,还有无论做任何事都要有耐心。

也懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力在课程设计过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。

因此在以后的生活和学习的过程中,我一定会把课程设计的精神带到生活中,是生活也更加好。

谢谢田老师这几天时间对我们指导

计算机科学与技术系课程设计评分表

课程名称:

C语言程序设计

项目

评价

设计方案的合理性与创造性

设计与调试结果

设计说明书的质量

答辩陈述与回答问题情况

课程设计周表现情况

综合成绩

教师签名:

日期:

附录:

源程序

#include<>ame);

printf("输入学号:

");

scanf("%s",&s[0].num);

fwrite(&s[0],sizeof(structStudent),1,fp);ame);um);

fclose(fp);n");}

while(!

feof(fp))n");

fclose(fp);

exit(0);}}}

/*--------------------------------------------------------------------------------------------------------------------------------*/

voidAddition(intnumber)单-------------------------*\n");

printf("*-------------------------2.一般-------------------------*\n");

printf("*-------------------------3.困难-------------------------*\n");

printf("*-------------------------------------------------------------*\n\n\n");

printf("请选择难度:

");scanf("%d",&m);system("cls");单-------------------------*\n");

printf("*-------------------------2.一般-------------------------*\n");

printf("*-------------------------3.困难-------------------------*\n");

printf("*-------------------------------------------------------------*\n\n\n");

printf("请选择:

");scanf("%d",&m);system("cls");单-------------------------*\n");

printf("*-------------------------2.一般-------------------------*\n");

printf("*-------------------------3.困难-------------------------*\n");

printf("*-------------------------------------------------------------*\n\n\n");

printf("请选择:

");}

scanf("%d",&m);

system("cls");单-------------------------*\n");

printf("*-------------------------2.一般-------------------------*\n");

printf("*-------------------------3.困难-------------------------*\n");

printf("*-------------------------------------------------------------*\n\n\n");

printf("请选择:

");

scanf("%d",&m);system("cls");.1f.1f.1f.1f.1fvscore=A/nu;

fp5=fopen("","a+");

fprintf(fp5,"%s%s%f\n",s[0].name,s[0].num,s[0].avscore);ame,s[i].num,&s[i].avscore);}vscore

{

strcpy,s[j].name);um);

=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,;

s[j+1].avscore=;

}

4.2fame,s[i].num,s[i].avscore);}}

/*--------------------------------------------------------------------------------------------------------------------------------*/

voidTestOver()um);um,".txt");xt"连接到字符串student[0].num后,即以学号为文件名,后缀为.txt的文件中,保存在工程目录下

if((in=fopen("","r"))==NULL)

{in=fopen("","w+");

printf("无文件记录,已新建.\n");

}

if((out=fopen(s[0].num,"w"))==NULL)xt文件(如),"w"方式为只写方式

{printf("打开文件失败\n");

exit(0);

}

while(!

feof(in))法测试-----------------------*\n");

printf("*--------------------------2.减法测试-----------------------*\n");

printf("*--------------------------3.乘法测试-----------------------*\n");

printf("*--------------------------4.除法测试-----------------------*\n");

printf("*--------------------------5.返回主菜单----------------------*\n");

printf("*------------------------------------------------------------*\n\n\n");

intchoose,thnum;5/10/205/10/205/10/205/10/205/10/205/10/205/10/205/10/20始测试-----------------------*\n");

printf("*--------------------------2.查看结果-----------------------*\n");

printf("*--------------------------3.查看排名-----------------------*\n");

printf("*--------------------------4.错题重做-----------------------*\n");

printf("*--------------------------5.结束测试----------------------*\n");

printf("*-----------------------------------------------------------*\n\n\n");

intchoose,time;

printf("选择功能:

");

scanf("%d",&choose);

while(choose<1||choose>5)//不在以上所列的功能以内时循环

{

printf("超出功能范围,请重新选择(1---5):

");

scanf("%d",&choose);

}

switch(choose)//switch语句选择执行功能

{

case1:

//功能1

system("cls");

printf("*************************************************************\n");

{printf("请计时输入开始时间(点,分):

");//开始时间

scanf("%d,%d",&hourA,&minA);

system("cls");}

//显示时间

/*gettime(&tim);printf("\n开始时间为:

%02d:

%02d:

%02d\n",,,;*/

begain();

break;

case2:

//功能2

system("cls");

printf("\n\n");

ShowResult();//调用此函数,即输出测试结果

ChooseFunc();

break;

case3:

//功能2

system("cls");

printf("\n\n");

sort();//调用此函数,即输出测试结果

ChooseFunc();

break;

case4:

//功能4

system("cls");//清屏

printf("\n\n");

rework();//调用此函数,即输出测试结果

ChooseFunc();

break;

case5:

//功能5

system("cls");//清屏

printf("\n\n");

{printf("请输入结束时间:

点,分");//结束时间

scanf("%d,%d",&hourB,&minB);

time=(hourB-hourA)*60+(minB-minA);

printf("*-----------------------------------------------------------------*\n");

printf("*------------------小朋友你答题用时为:

---------------------------*\n");

printf("*-----------------%d分钟--------------------------------*\n",time);}

FileCopy();//调用此函数,即复制测试结果

TestOver();

break;}}

/*----------------------------------------------------------*/

/***********************************************************************************************************************************/

voidmain()

{

FILE*fp,*fp2,*fp3;

fp=fopen("","w");//以只写方式打开文件,如果文件存在,则清空,这就是为什么结束程序时要复制测试结果了

fp2=fopen("","w");//清空之前数据

f

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2