标准化考试测试系统 C语言程序.docx

上传人:b****5 文档编号:8272609 上传时间:2023-01-30 格式:DOCX 页数:12 大小:219.50KB
下载 相关 举报
标准化考试测试系统 C语言程序.docx_第1页
第1页 / 共12页
标准化考试测试系统 C语言程序.docx_第2页
第2页 / 共12页
标准化考试测试系统 C语言程序.docx_第3页
第3页 / 共12页
标准化考试测试系统 C语言程序.docx_第4页
第4页 / 共12页
标准化考试测试系统 C语言程序.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

标准化考试测试系统 C语言程序.docx

《标准化考试测试系统 C语言程序.docx》由会员分享,可在线阅读,更多相关《标准化考试测试系统 C语言程序.docx(12页珍藏版)》请在冰豆网上搜索。

标准化考试测试系统 C语言程序.docx

标准化考试测试系统C语言程序

标准化考试测试系统

1.题目及任务要求……………………………………………3

2.系统分析……………………………………………………3

3.模块分析……………………………………………………3

4.模块设计……………………………………………………3

5.运行结果……………………………………………………6

6.设计总结……………………………………………………8

7.心得体会……………………………………………………8

8.源程序………………………………………………………8

 

【题目及任务要求】

标准化考试测试系统(B)

1.用文件保存试题库(每个试题包括题干,4个备选答案和标准答案)

2.试题录入:

可随时增加试题到试题库中

3.试题抽取:

每次从试题库中可以随时抽出N道题(N由键盘输入)

4.答题:

用户可实现输入自己的答案

5.自动判卷:

系统可根据用户答案与标准答案对比实现判卷并给出成绩

【系统分析】

该系统由主程序和录入模块、抽取答题模块组成。

其中主程序提供用户进入该系统、选择功能和退出系统;录入模块可以让用户自行录入题目;抽取答题模块可以从试题库中抽取出用户规定的题目数并且供用户答题和自动评卷。

【模块分析】

录入模块:

用户从主界面选择“1.录入题目”后进入录入模块。

在本模块中,用户可以录入题目以及对应该题的答案。

单题录入完成后,该模块提示是否继续录入或返回主界面。

本模块使用指针开启关闭文件,使用do...while循环语句实现反复录入功能。

抽取答题模块:

用户从主界面选择“2.抽取答题”后进入该模块。

在本模块中,用户可以自行抽取题目并答题,系统自动在打完每道题后给出答案并记录分数,最后公布分数。

本模块使用随机数函数random来随机抽取试题库中的题目;使用指针开启读入试题及答案文件;使用循环结构(for,while和do...while)实现连续答题和功能循环。

【模块设计】

主程序流程图:

录入模块流程图:

 

抽取答题模块流程图:

 

完整流程图:

 

【运行结果】

开始界面:

录入功能界面:

抽取答题功能界面:

退出界面:

【设计总结】

在设计并且编程的过程中,我遇到了很多难点,有几个已经超出了我的水平范围,在周遭同学和发达的网络帮助下我得以解决它们。

以下是这个标准化考试测试系统编程过程中遇到的难题:

1,文件的读入读出

因为当时学习的过程中,文件这一块内容比较简单的带过,因此我对文件读取这一方面的掌握并不是十分好。

然而,这个考试测试系统能否顺利运行的关键就在于试题文件的录入与读出,所以这就是我遇到的最大也是最关键的难题。

为了解决这个问题,我将课本重新阅读了一遍,并且针对文件读出读入这一内容进行反复研究,再结合网上罗列的读入读出方法,终于成功实现了试题录入和试题读出这个功能。

2.随机抽取

根据任务书的要求,这个考试系统抽取题目有随机性,因此我考虑采用在题目库中随即抽取的方式来读入试题,然而这就增加了一个新难度,就是随机数的获取。

在之前的课上,我们并未接触到随机数函数。

在书后的附录中我发现了rand()函数来获取随机数,但是使用后并不能完成这个功能。

经过查找资料得知,c语言中随机数的获取并不仅仅是用一个rand()函数就能解决的,若要持续获得一定范围内的随机数,要在编译的头文件中加入,然后通过#definerandom(x)(rand()%x)定义随机数函数random,再用srand((int)time(0))定义随机数种子,这样就能用random()函数

3.判卷

判卷的过程就是讲答案文件中的答案读入为数组,再与用户输入的答案数组相对比,得出结果。

这一个项目的关键在于答案文件的读入和两个数组的对比,在这里我运用了数组函数strcmp比较两个数组是否一样来判断用户输入答案的对错。

【心得体会】

通过这次程序设计,我感觉对c语言的掌握相比于之前熟悉了不少。

自己完成了整套c语言的程序设计,从刚开始的流程图设计,到后来模块设计,总程序的设计和组合,整个过程虽然很繁琐,有些部分甚至超出了我原先的水平,但是通过不断的询问、找资料以及跟同学交流,终于将觉得不可能的任务完成之后,我感到十分愉快。

这个过程不仅仅是对自己水平的考验,也是对自己对于发现问题解决问题这一个过程的考验。

能够完成这个程序设计,我想我要感谢的人很多,首先是老师和同学帮助我找思路想方法还有查找资料;其次是网络上不知名的人士,他们通过网络解决了我难以攻克的难题。

因此,是许多人的帮助让我最终能呈现这样一份答卷,谢谢。

【源程序】

#include

#include

#include

#include

#definerandom(x)(rand()%x)

intall=21;

charm;

intmain()

{

voidentering();

voidextract();

intmenu;

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

printf("********欢迎进入标准化考试测试系统********\n");/*进入系统*/

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

do

{

printf("\t1.录入题目\n\n\t2.抽取答题\n\n\t3.退出系统\n\n\n");

/*功能选择*/

printf("请选择功能:

");

scanf("%d",&menu);

printf("\n\n");

scanf("%c",&m);

if(menu==1)/*录入功能*/

entering();

elseif(menu==2)/*抽取答题功能*/

extract();

elsebreak;

printf("退出系统?

(按“Y”退出,其他任意键继续)");

scanf("%c",&m);

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

}

while(m!

='Y');

printf("------------------------------------------\n");/*退出系统*/

printf("感谢使用标准化考试测试系统,欢迎下次使用!

\n");

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

return0;

}

 

voidentering()/*录入功能函数*/

{

FILE*q,*a;

charquestion,answer,num2[5],num[4],Q;

do

{

printf("试题库有试题数:

%d\n",all);

printf("请输入录入题目的文件名(即题号)");/*设置文件名*/

scanf("%s",num);

printf("请输入录入题目答案的文件名(即题号_)");/*设置文件名*/

scanf("%s",num2);

q=fopen(num,"w");/*打开输出问题的文件并使q指向此文件*/

printf("请输入试题内容(包括四个选项),以'#'结束\n");

/*输入录入题目的内容*/

question=getchar();

while(question!

='#')

{

fputc(question,q);

question=getchar();

}

fclose(q);

question=getchar();

a=fopen(num2,"w");/*打开输出答案的文件并使a指向此文件*/

printf("请输入该题的答案\n");

answer=getchar();

fputc(answer,a);

fclose(a);

all++;

printf("录入题目成功\n");

Q=getchar();

printf("继续录入题目?

(按‘N’退出录入,其他任意键继续)");

scanf("%c",&Q);

printf("\n\n");

m=getchar();

}

while(Q!

='N');

}

 

voidextract()/*抽取答题功能函数*/

{

intn,r,count,sum=0;

charques[70],answ[5],answ_[2],num_[5],tran[2]={'_'};

FILE*q_,*a_;

do

{

printf("试题库有试题数:

%d\n",all);

printf("请输入需要抽取的题目数(不要超过试题总数)");

/*用户输入需要抽取得题目数n*/

scanf("%d",&n);

srand((int)time(0));

for(count=1;count<=n;count++)/*抽取n道题并答题判卷*/

{

r=random(all);/*随机抽取题目*/

sprintf(num_,"%d",r);

q_=fopen(num_,"r");

if((q_=fopen(num_,"r"))==NULL)

{

printf("出错");

exit(0);

}

while(!

feof(q_))/*在屏幕上显示抽出的题目*/

{

if(fgets(ques,49,q_)!

=NULL)

{

puts(ques);

ques[50]='\0';

}

}

fclose(q_);

printf("请答题(输入大写字母):

");/*用户答题*/

scanf("%s",answ_);

strcat(num_,tran);

a_=fopen(num_,"r");/*系统判卷*/

if((a_=fopen(num_,"r"))==NULL)

{

printf("出错");

exit(0);

}

while(!

feof(a_))/*读入标准答案*/

{

if(fgets(answ,4,a_)!

=NULL)

{

answ[4]=fgetc(a_);

answ[5]='\0';

}

}

fclose(a_);

if((strcmp(answ,answ_))==0)/*比较用户输入的答案与系统答案*/

{

printf("正确\n");

sum=sum+1;

}

else

printf("错误,正确答案是:

%s\n",answ);

}

printf("\n总答题数:

%d\n得分(一题一分):

%d\n",n,sum);/*给出总分*/

printf("是否继续答题?

(按‘N’退出,其他任意键继续)");

scanf("%c",&m);

printf("\n\n");

m=getchar();

}

while(m!

='N');

}

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

当前位置:首页 > 表格模板 > 调查报告

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1