选择题标准化考试系统.docx

上传人:b****7 文档编号:8610822 上传时间:2023-02-01 格式:DOCX 页数:15 大小:119.79KB
下载 相关 举报
选择题标准化考试系统.docx_第1页
第1页 / 共15页
选择题标准化考试系统.docx_第2页
第2页 / 共15页
选择题标准化考试系统.docx_第3页
第3页 / 共15页
选择题标准化考试系统.docx_第4页
第4页 / 共15页
选择题标准化考试系统.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

选择题标准化考试系统.docx

《选择题标准化考试系统.docx》由会员分享,可在线阅读,更多相关《选择题标准化考试系统.docx(15页珍藏版)》请在冰豆网上搜索。

选择题标准化考试系统.docx

选择题标准化考试系统

沈阳航空工业学院

课程设计

学号2008040201012

班级84020103

姓名杨俊

指导教师尹航

2009年9月11日

课程设计任务书

电子信息工程学院电子信息工程专业84020103班学号2008040201012

一、课程设计题目:

选择题标准化考试系统

二、课程设计工作自2009年9月7日起至2009年9月11日止

三、课程设计内容:

用C语言编写软件完成以下任务:

一些C语言选择题及其答案,作为考试题库保存在文件file08.txt中,数据格式为:

题号,问题,选项A,选项B,选项C,选项D,答案。

请写程序模拟试题,程序具有如下的功能:

(1)试题追加:

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

(2)试题扯取:

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

(3)判卷功能:

N道题作完后,给出总分(满分100分)。

四、课程设计要求:

程序质量:

●贯彻结构化程序设计思想。

●用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。

●用户界面中的菜单至少应包括“试题追加”、“开始考试”、“判卷”、“退出”4项。

●代码应适当缩进,并给出必要的注释,以增强程序的可读性。

课程设计说明书:

课程结束后,上交课程设计说明书(打印稿和电子稿),其内容如下:

●封面

●课程设计任务书

●目录

●需求分析(分析题目的要求)

●程序流程图(总体流程图和主要功能模块流程图)

●核心技术的实现说明及相应程序段

●个人总结

●参考资料

●源程序及适当的注释

指导教师:

___学生签名:

____

五、成绩:

六、教师评语:

目录

一、需求分析4

二、程序流程图4

三、核心技术的实现说明及相应程序段9

四.个人总结13

五、参考文献14

六.源程序代码15

一、需求分析

经过对程序设计题目的分析可知,整个程序的设计实现大致分为四个模块,其中每一个模块对应一个函数,他们的功能分别是:

主函数即菜单函数,开始考试函数,综合判卷函数,试题追加函数,

1、开始考试函数:

实现试题的随机抽取及答题功能

2、综合判卷函数:

实现判卷和计算总分功能;

3、试题追加功能:

实现对任意试题追加并写入08.txt文件中;

除上面介绍的功能之外,程序还具有退出功能,以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。

试题的录入包含序号,问题,选项,答案四部分,在程序当中,将试题定义为结构体类型,答题,判卷以及追加的试题直接写入D盘的file08.txt文件中,其他函数每次对题库的访问,其数据来源都是file08.txt文件,这样做不但可以保证试题数据的一致性,而且可以对试题数据进行永久保存,保证每次运行程序都可以采用原来数据。

二、程序流程图

1、总流程图

图1程序总体结构图

2、具体功能框图

(2)开始考试函数random_read()

(3)综合判卷judge()

 

(4)试题追加(add)

图4试题追加函数流程图

 

三、核心技术的实现说明及相应程序段

本程序主要有四个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。

在这些函数当中,main(),random_read(),judge()和add()是程序中较为复杂的程序,下面分别进行说明。

1、主函数:

主函数主要实现程序界面的设计以及各功能函数的调用,其中像键盘输入A进入开始考试,B进入综合判卷,C进入试题追加,D退出,从键盘任意输入ABCD中一个字母,用switch语句来判断这个字母,分别实现各功能函数的调用:

程序如下

voidmain()

{charenterchoice;

printf("***************欢迎进入考试程序***************\n");

printf("\n");

A:

printf(

"|A--开始考试|\n"

"|B--综合判卷|\n"

"|C--试题追加|\n"

"|D--退出|\n");

printf("请选择项目序号\n");

std:

:

cin>>enterchoice;

while(enterchoice!

='A'&&enterchoice!

='B'&&enterchoice!

='C'&&enterchoice!

='D')

{printf("输入错误请重新输入序号");

scanf("%c",&enterchoice);

}

switch(enterchoice)

{

case'A':

random_read(exam);break;

case'B':

judge();break;

case'C':

add();break;

case'D':

exit(0);

}

printf("\n\n\n请继续操作\n\n\n");

gotoA;

}

2.开始考试函数random-read(exam[20])

该函数的主要功能是:

由考生输入答题的数目,通过调用随机函数,获得在要求范围内的任意整数,然后以该整数为序号,在屏幕上输出试题,供考生回答。

具体程序如下:

voidrandom_read(Examexam[20])

{

inti=0;

FILE*fp;

intsum=0;/*记录试题数*/

printf("请输入答题数:

\n");

scanf("%d",&N);

if((fp=fopen("D:

\\file08.txt","r"))==NULL)

{

printf("cannotopenfile\n");

exit(0);

}

else

{

for(i=0;i<20;i++){

fscanf(fp,"%d%s%s%c",&exam[i].num,exam[i].question,exam[i].option,&exam[i].answer);

}

for(;sum!

=N;)

{

intt;

srand((unsigned)time(NULL));/*定义随机函数*/

loop:

i=rand()%5;/*出现0~4随机值*/

if(i==t)

gotoloop;/*如果相邻的两个题目相同则重抽*/

printf("%d%s%s\n",exam[i].num,exam[i].question,exam[i].option);

printf("请输入试题答案:

\n");

std:

:

cin>>ans[i];

if(ans[i]==exam[i].answer)

{

point[j]+=(float)(100/N);

}

else

{point[j]+=0;j++;}/*记录每一道题的得分*/

sum+=1;

t=i;

}

fclose(fp);

}

}

3.综合判卷函数judge()

主要实现对考生总得分的计算,通过答题的过程中point[j]的分值及答对试题的记录,计算出总得分并输出。

具体程序如下:

voidjudge()

{

floatall=0;

for(j=0;j

{

all+=point[j];

}

printf("\n\n您的考试成绩为%f\n\n\n",all);

}

4.试题追加函数add()

该函数的核心内容是打开file08.txt,并向题库中输入新的试题,保存在原文件的末尾,增大了题库的可再用性。

具体程序段如下:

voidadd()

{

FILE*fp;

inti=0;

if((fp=fopen("D:

\\file08.txt","a"))==NULL)

{

printf("cannotopenfile\n");

return;

}

else

printf("请输入试题:

\n");

fseek(fp,1,SEEK_END);

scanf("%d%s%s%c",&exam[i].num,exam[i].question,exam[i].option,&exam[i].answer);fprintf(fp,"\n%d\t%s\t%s\t%c",exam[i].num,exam[i].question,exam[i].option,exam[i]);

fclose(fp);

}

四.个人总结

在这次的课设中,我受益匪浅,体会到了逻辑思维的重要性,因为在C语言中,一个小小的逻辑错误会导致整个程序的运行错误。

而且细微严谨对于其也是十分重要的,程序中的任何一个微小错误乃至于与关联文档的一个空格之差都可能造成程序的完全失败。

而且我也遭到了前偶尔所未有的打击,这个程序修修改改了好多回,可是最后还是不完美。

不过,在这个过程中我对C语言的了解也更深了一层,更深一层掌握了有关其得一些知识:

数组的使用,结构体变量,函数的复合使用,文件的追加.打开.关闭.读取以及全局变量的使用(掌握的还不是很好)。

尤其在编写综合判卷函数中遇到了前所未有的大麻烦,前前后后改了10几回,这说明了对C语言的知识掌握的不牢固,对具体的一些知识只是生搬硬套不能活学活用;但同时也使我对C语言编程产生了浓厚的兴趣。

所编程序大体上满足了题目的要求

总而言之,这次课程设计的经历对我来说是一次极大的锻炼,既使我的上机实践操作能力得到很大的提高,又让我清楚的看到了自己还有非常多的毛病和不足,深刻认识到了自己的差距,为将来的学习确定了努力的方向。

我在这次课程设计活动中无论是学习还是实践方面都受益匪浅。

五、参考文献

1谭浩强.C程序设计.北京:

清华大学出版社,2005

2刘成等.C语言程序设计实验指导与习题集.北京:

中国铁道出版社,2006

 

六.源程序代码

#include

#include

#include

#include

#include

#include

structExam/*创建结构体*/

{

intnum;/*序号*/

charquestion[100];/*问题*/

charoption[200];/*选项*/

charanswer;/*答案*/

};

Examexam[20];

intj=0;

charans[20];

floatpoint[20];

intN;

voidadd();

voidrandom_read(Examexam[20]);

voidjudge();

voidmain()

{

charenterchoice;

printf("***************欢迎进入考试程序***************\n");

printf("\n");

A:

printf(

"|A--开始考试|\n"

"|B--综合判卷|\n"

"|C--试题追加|\n"

"|D--退出|\n");

printf("请选择项目序号\n");

std:

:

cin>>enterchoice;

while(enterchoice!

='A'&&enterchoice!

='B'&&enterchoice!

='C'&&enterchoice!

='D')

{printf("输入错误请重新输入序号");

scanf("%c",&enterchoice);

}

switch(enterchoice)

{

case'A':

random_read(exam);break;

case'B':

judge();break;

case'C':

add();break;

case'D':

exit(0);

default:

}

printf("\n\n\n请继续操作\n\n\n");

gotoA;

}

voidrandom_read(Examexam[20])

{

inti=0;

FILE*fp;

intsum=0;/*记录试题数*/

printf("请输入答题数:

\n");

scanf("%d",&N);

if((fp=fopen("D:

\\file08.txt","r"))==NULL)

{

printf("cannotopenfile\n");

exit(0);

}

else

{

for(i=0;i<20;i++)

{

fscanf(fp,"%d%s%s%c",&exam[i].num,exam[i].question,exam[i].option,&exam[i].answer);}

for(;sum!

=N;)

{

intt;

srand((unsigned)time(NULL));

loop:

i=rand()%5;

if(i==t)

gotoloop;

printf("%d%s%s\n",exam[i].num,exam[i].question,exam[i].option);

printf("请输入试题答案:

\n");

std:

:

cin>>ans[i];

if(ans[i]==exam[i].answer)

{

point[j]+=(float)(100/N);

}

else

{

point[j]+=0;j++;}

sum+=1;

t=i;

}

fclose(fp);

}

}

voidjudge()

{

floatall=0;

for(j=0;j

{

all+=point[j];

}

printf("\n\n您的考试成绩为%f\n\n\n",all);

}

voidadd()

{

FILE*fp;

inti=0;

if((fp=fopen("D:

\\file08.txt","a"))==NULL)

{

printf("cannotopenfile\n");

return;

}

else

printf("请输入试题:

\n");

fseek(fp,1,SEEK_END);

scanf("%d%s%s%c",&exam[i].num,exam[i].question,exam[i].option,&exam[i].answer)fprintf(fp,"\n%d\t%s\t%s\t%c",exam[i].num,exam[i].question,exam[i].option,exam[i]);

fclose(fp);

}

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

当前位置:首页 > 总结汇报 > 学习总结

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

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