单项选择题标准化考试系统2.docx
《单项选择题标准化考试系统2.docx》由会员分享,可在线阅读,更多相关《单项选择题标准化考试系统2.docx(12页珍藏版)》请在冰豆网上搜索。
![单项选择题标准化考试系统2.docx](https://file1.bdocx.com/fileroot1/2023-1/24/33285422-f4ad-412b-86d5-507d240abc9a/33285422-f4ad-412b-86d5-507d240abc9a1.gif)
单项选择题标准化考试系统2
单项选择题标准化考试系统
(2)
摘要
单项选择题标准化考试系统是一个考试系统不可缺少的部分,考方可以利用这套程序进行题目管理,也方便查询修改单项选择题的各项信息,可以提高工作的效率。
本系统使用C语言作为开发工具的,开发单项选择题标准化考试系统,实现了录入题干,4个标准答案,标准答案等信息,并实现自动判卷等功能。
本文从分析课题的题目背景、题目意义、题目要求等出发,分别从需求分析、总体设计、详细设计、测试等各个方面详细介绍了系统的设计与实现过程,最后对系统的完成情况进行了总结。
关键词:
单项选择题标准化考试;自动判卷;对比;C语言
1.绪论
随着科技的发展,愈来愈多的考试系统选择了运用单项选择题标准化考试系统来管理选择题的各项信息。
单项选择题标准化考试系统是一个考试系统不可缺少的部分,系统可以利用这套程序进行考试的各种信息管理,也方便查询修改题目的各项信息,可以提高管理工作的效率和简化管理工作的程序。
有利的为系统节省了运作成本,优化资源利用率,这也正是编写本程序的目的所在。
根据课程设计任务书要求,本系统开发主要完成以下功能和性能。
用C语言编写标准化考试中的一些基本功能:
(1)用文件保存试题库。
(2)每个试题包括题干。
(3)4个备选答案。
(4)标准答案。
结合单项选择题标准化考试系统
(1),实现自动判卷功能,系统可根据用户答案与标准答案的对比实现判卷并给出成绩。
2.系统分析
2.1功能需求
本系统主要是单项选择题标准化考试的系统。
该系统需要有录入信息,删除信息,根据所给条件查询信息,修改信息,统计信息,循环显示主菜单,保存信息的功能,并且利用显示函数将职工的所有信息显示出来。
2.2数据需求
需要向系统输入工号,姓名,性别,年龄,学历,工资,联系电话等信息。
2.3性能需求
在运行本程序时只要按照正确的操作方法不会出现无法运行的情况,系统稳定性好,安全,可靠。
3.详细设计
3.1保存文件功能模块:
3.2输出文件功能模块:
3.3答题功能模块:
N
Y
YN
4.调试与测试
4.1调试
调试是软件开发过程中的一个重要环节,也是最复杂,对软件开发者者来说也是最艰巨的任务。
调试的任务是及时改正测试过程中发现的软件错误。
具体地说,调试过程由两个步骤组成,它从表示程序中存在错误的某迹象开始,首先确定错误的准确位置,也就是找出哪个模块或哪个语句引起的错误。
然后仔细研究推断代码以确定问题的原因,并设法改正。
调试过程主要是运行编制好的程序,然后遇到错误后根据系统的提示,找到相关的问题所在。
本系统调试过程中遇到问题、原因和解决方法如下面介绍。
(1)程序不能运行
定义的指针,很多次引用,过个函数里面,定义的不明确,造成错误连连发生。
(2)不能正确输出信息,有乱码现象
原因是键入信息的时候,没有一一对应,逗号的位置不正确,后来,用的是信息逐一输入,保证了信息的一一对应和高度的准确性,使程序可以正常运行。
(3)程序运行途中,出现错误,被迫中止
其中定义字符数组,却没有定义长度,导致定义类型变成了字符型,而不能接受字符串,因此出现了错误。
4.2测试
软件测试是软件生存期中的一个重要阶段,是软件质量保证的关键步骤从用户的角度来看,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,所以软件测试应该是“为了发现错误而执行程序的过程”。
或者说,软件测试应该根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误或缺陷。
过度测试则会浪费许多宝贵的资源。
到测试后期,即使找到了错误,然而付出了过高的代价。
5.结论
课程设计顺利完成,题目所要求的功能也都一一实现,可以对职工信息进行添加,修改,删除,查询,模糊查询,按条件查询,存储至文本文件等,在通常情况下,可以良好的运作。
不过这个程序还有些不够完善,例如有时候,输出的结果会因为字符的长短,与上面的提示栏对不上。
而且,由于自己英语的不够特别好,后几个功能不知道该怎么翻译,就直接写的汉字,显得程序主菜单有点乱,以后会加强英语,好好规划编程。
结束语
通过这次课程设计,我对复杂程序的开发有了一个深刻的认识,使我进一步明白了模块化思想在程序开发中的重要性。
这次C语言综合课程设计实习终于顺利完成,在这期间真正的学到了一些经验,能够熟练的掌握一些C语言的编程思路,能够熟练的运用学到的函数,意识到编程并不是一件很简单的事情,知道学习编程必须亲自动手去做,只有自己做的程序才能找出错误,这样才能真正的达到目的。
当程序编写完成而且能够正常运行心里非常高兴,虽然这对于一名程序员来说可能非常简单,但对我来说,如果要想在编程方面能够有所发展的话,我面临的困难还很多,要继续加强,努力,达到一种较高的水平。
参考文献
[1]谭浩强.C语言程序设计(第三版).北京:
清华大学出版社,2005.7
附录1-调试分析
一、操作界面
二、进行答题并判卷
三、插入试题
四、退出系统
附录2-源程序
#include
#include
#include
#defineTRUE1
#defineERROR0
#defineMAX30
typedefintStatus;
typedefstruct{
charoption1[30],option2[30],option3[30],option4[30],subject[150];
charresult;
}TestNode;
TestNodeTestquestions[MAX];
StatusSaveNode(intN)//把结构体数组保存到文件"cheng"中,如成功保存返回TRUE,否则返回ERROR
{inti;
FILE*fp;
if((fp=fopen("cheng","wb"))==NULL)returnERROR;
for(i=0;ifwrite(&Testquestions[i],sizeof(TestNode),1,fp);
fclose(fp);
returnTRUE;
}
StatusReadNode(int&N)//从文件读出结构体数组的内容,如成功读取返回TRUE,否则返回ERROR
{FILE*fp;
inti=0;
if((fp=fopen("cheng","rb"))==NULL)returnERROR;
while(!
feof(fp))//用feof检测文件是否结束,如果结束,返回正确
{fread(&Testquestions[i],sizeof(TestNode),1,fp);
i++;
}
N=i-1;
returnTRUE;
}
voidInputTitle(intN)//输入N道试题数据
{
inti;
for(i=0;i{printf("请输入第%d道题题目、题干和选项:
\n",i+1);//输入结构体元素内容
printf("请输入题目:
");
gets(Testquestions[i].subject);
printf("请输入选项A:
");
gets(Testquestions[i].option1);
printf("请输入选项B:
");
gets(Testquestions[i].option2);
printf("请输入选项C:
");
gets(Testquestions[i].option3);
printf("请输入选项D:
");
gets(Testquestions[i].option4);
printf("请输入答案:
");
scanf("%c",&Testquestions[i].result);getchar();
system("cls");//清屏
}
}
StatusInsertNode(int&N)//插入试题内容
{
if(N>MAX)returnERROR;
printf("请输入所要插入题题目、题干和选项:
\n");
printf("请输入题目:
");
gets(Testquestions[N].subject);
printf("请输入选项A:
");
gets(Testquestions[N].option1);
printf("请输入选项B:
");
gets(Testquestions[N].option2);
printf("请输入选项C:
");
gets(Testquestions[N].option3);
printf("请输入选项D:
");
gets(Testquestions[N].option4);
printf("请输入答案:
");
scanf("%c",&Testquestions[N].result);getchar();
N++;//N表示结构体数组长度,通过加&号使其值能返回
returnTRUE;
}
StatusDeleteNode(intn)//删除数组中的第n个元素
{
returnTRUE;
}
voidprintNode(TestNodep,intn)//输出第n道题题目
{
printf("(%d)",n);
printf("%s\n",p.subject);
printf("A%s",p.option1);
printf("B%s\n",p.option2);
printf("C%s",p.option3);
printf("D%s",p.option4);
}
StatusMatch(TestNodep,charm)//判断m是否为p题目的答案,若是返回TRUE,否则返回ERROR
{
if(m==p.result)returnTRUE;
elsereturnERROR;
}
voidanswer(intsum)//进行答题
{
inti,score=0,Num;
charr;
for(i=1;i<=sum;i++)
{Num=rand()%sum;//随机函数,以随机选定何题进行解答
printNode(Testquestions[Num],Num+1);
printf("\n请输入答案:
");
scanf("%c",&r);getchar();
if(Match(Testquestions[Num],r))//调用函数IsMatch判断所输入的答案与标准答案是否相同
{printf("\n答案正确!
\n");
score++;
}
elseprintf("\n答案错误!
\n");
}
printf("\n你的总成绩为:
%d\n",score);
}
voidmain()
{charflag='N';
intN=0,i,sum,score=0,chose;
/*printf("输入想建立的题目文件题目数:
");
scanf("%d",&N);getchar();
InputTitle(N);*/
ReadNode(N);
while(flag=='N'||flag=='n')
{printf("\t\t\t单项选择题标准化考试系统\n");
printf("\n");
printf("\t\t\t1进行答题并判卷\n");
printf("\t\t\t2显示整张试卷内容\n");
printf("\t\t\t3插入试题\n");
printf("\t\t\t4保存到文件\n");
printf("\t\t\t5退出系统\n");
printf("\t\t\t请选择:
");
scanf("%d",&chose);getchar();
switch(chose)
{case1:
system("cls");
printf("请输入你想要的答题数目:
");
scanf("%d",&sum);getchar();
answer(sum);
break;
case2:
system("cls");
for(i=1;i<=N;i++)
{printNode(Testquestions[i-1],i);
printf("\n");
}
break;
case3:
system("cls");InsertNode(N);break;
case4:
system("cls");
if(SaveNode(N))printf("保存成功!
\n");
elseprintf("保存失败!
\n");break;
case5:
printf("你将退出系统(YorN)?
");
scanf("%c",&flag);getchar();
if(flag=='Y'||flag=='y')exit(0);
system("cls");break;
default:
printf("请输入正确选择!
\n");
}
}
}
完成于2012年7月15日