搜索
您的当前位置:首页正文

单项选择题标准化考试系统

2021-08-04 来源:易榕旅网
一、 课程设计的内容

C题目二十四:单项选择题标准化考试系统

(一)功能要求:

(1) 用文件保存试题库。(每个试题包括题干、4个备选答案、标准答案) (2) 试题录入:可随时增加试题到试题库中

(3) 试题抽取:每次从试题库中可以随机抽出N道题(N由键盘输入) (4) 答题:用户可实现输入自己的答案 (5) 自动判卷:系统可根据用户答案与标准答案的对比实现判卷并给出成

绩。

(二)其它要求:

(1) 只能使用C/C++语言,源程序要有适当的注释,使程序容易阅读 (2) 至少采用文本菜单界面(如果能采用图形菜单界面更好) (3) 学生可自动增加新功能模块(视情况可另外加分) (4)写出课程设计报告,具体要求见相关说明文档

二、课程设计的要求与数据

1、进一步掌握和利用C语言进行程设计的能力; 2、进一步理解和运用结构化程序设计的思想和方法; 3、初步掌握开发一个小型实用系统的基本方法; 4、学会调试一个较长程序的基本方法; 5、学会利用流程图或N-S图表示算法; 6、掌握书写程序设计开发文档的能力。

三、课程设计应完成的工作

1、编写完成相应题目的程序;

2、编写课程设计报告,课程设计报告的内容应包括以下6个部分:

1) 需求分析:包括设计题目、设计要求以及系统功能需求分析; 2) 总体设计:包括系统总体设计框架和系统功能模块图;

3) 详细设计:包括主要功能模块的算法设计思路以及对应的工作流程图;

4) 调试分析过程描述:包括测试数据、测试输出结果,以及对程序调试过程中存在问题的思考(列出主要问题的出错现象、出错原因、解决方法及效果等,适当的包含结果截图);

5) 总结:课程设计完成了哪些功能,有没有什么扩展功能?还有哪些地方需要改进?课程设计过程中的学习体会与收获、对本次课程设计的认识以及自己的建议等内容; 6) 附录:主要源程序代码,含必要的注释。

3、答辩:在实验室建立程序运行的环境,并在指导教师的监督下,独立解 决问题、运行程序和回答教师提出的问题。

四、课程设计进程安排

1Page 1 of 18

序号 1 2 3 4 设计各阶段内容 地点 起止日期 6.18 6.19 6.20 6.21 下达任务书,说明设计要求;收集资料 实验3#517 总体方案设计、详细设计 编写程序,调试分析 撰写报告并上交,答辩 实验3#517 实验3#517 实验3#517 五、应收集的资料及主要参考文献

[1] 谭浩强.C程序设计(第三版)[M],北京:清华大学出版社,2005.9

[2] 谭浩强. C程序设计题解与上机指导(第三版)[M],北京:清华大学出版社,2005.7 [3] 刘振安等.C++程序设计课程设计[M]-北京:机械工业出版社,2004.8 [4] 张淑平.C语言程序设计学习指导,西安电子科技大学出版社,2004.6

发出任务书日期: 2007年 6 月 18 日 指导教师签名:

计划完成日期:2007年 6 月 22 日 基层教学单位责任人签章:

主管院长签章:

目 录

1 设计目的与要求………………………………………………………………5 2 总体设计………………………………………………………………………6 3 详细设计………………………………………………………………………7 3.1功能模块设计………………………………………………………………7 3.1.1保存文件功能模块………………………………………………………7 3.1.2输出文件功能模块………………………………………………………7 3.1.3 答题功能模块………………………………………………………8 3.2数据结构设计………………………………………………………………9 4调试分析 ……………………………………………………………………10 5 总结……………………………………………………………………………12 6 附录……………………………………………………………………………13 6 答辩记录(正文处请留出适当空白) ………………………………………19 7 指导教师意见(正文处请留出十行空白) …………………………………19

2Page 2 of 18

1 目的与要求

一 目的:

设计一个单项选择题标准化考试系统,方便考试时试题的录入与批改。

二 要求:

(1) 用文件保存试题库。(每个试题包括题干、4个备选答案、标准答案);

(2) 试题录入:可随时增加试题到试题库中;

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

(4) 答题:用户可实现输入自己的答案;

(5) 自动判卷:系统可根据用户答案与标准答案的对比实现判卷并给出成绩。

3Page 3 of 18

2 总体设计

一 总的概叙: 1、用来保存试题库,可以用到”Struct TestNode Testquestions”结构体数组,将试题一一对应的保留下来,放在相应的文件里;

2、试题的录入,可以定义一个” void InputTitle(int N)”和” Status InsertNode(int &N)”函数将试题录入; 3、 试题的抽取,可以定义一个” void printNode(TestNode p,int n)”的函数,用到”Rand”函数进行随机抽取;

4、答题方面,,则定义一个” void answer(int sum)”函数用于答题者的输入答案;

5、自动判卷,则可以定义一个” Status Match(TestNode p,char m)”函数,用来对比答题者答案和正确答案,给出判断正确与否; 6、用一个main函数将上述各个函数功能块连接起来,实现”单项选择题标准化考试系统”的各个方面的功能,完成设计.。 二、大概流程图

4Page 4 of 18

单项选择题标准化考试系统 进显插保行示入存答整试到题张题 文并试件 判卷卷 内

3 详细设计

3.1功能模块设计

3.1.1保存文件功能模块: 进入函数SaveNode(int N) 成功打开文件? N Y IReturn ERROR i++ 5Page 5 of 18 关闭文件 退出系统

3.1.2 输出文件功能模块:

进入函数ReadNode(int N) 成功打开文件? N Y 判断条件成立 Return

ERROR 读出数据

i++

N+1

Return ture

3.1.3 答题功能模块: 进入函数answer(int sum)

N i=1,i Y Num=rand()%sum

输出数据 6Page 6 of 18

从键盘获得数据

Y N 答案是否正确 输出”错误” 输出”正确”

输出”总成绩为” 结束

3.2数据结构设计

程序中主要用到了结构体数组,定义类型,如typedef int Status等,用结构体数组可以使得程序比较简便,易于读懂,免去频繁的赋值,而用定义类型,可以使得程序具有移植性,健壮性好。

7Page 7 of 18

4 调试分析

一、 操作界面

8Page 8 of 18

二、 进行答题并判卷

三、 插入试题

9Page 9 of 18

四、 退出系统

调试分析结论:里面用到的随机函数在随机选择试题时,有时会遇到选择出来的试题时重复的,

由于时间比较紧迫,暂时还没有找出原因,修正过来.

5 总 结

经过这整整三天的C语言课程设计的训练,我学到了很多,最主要的一点是怎样去自学一种东西,怎样去找到你所需要的资料,并在短时间把它学会,运用到你所需要的方面。这个过程是很艰难的,要花费很多的时间和精力,但是,在事情过后,自己就会发现自己已经在这个过程中学到了自己想要的东西,这种获得是更深刻的。 在做这个C语言课程设计的时候,我原先也是知之甚少,什么是结构体数据,什么是定义类型,怎样在一个main函数中调用别的定义函数,等等,可以说是一无所知。然而,在这门课程设计中,这些方面却是特别重要的,可以说,掌握了这个,你就完全可以完成自己的任务。这就要求我们要自己去学,自己去探索。当然,跑图书馆是必不可少的,还有,身边有非常丰富的网络资源给我们好好利用,百度就是个很不错的地方。这样就从另一方面锻炼了我们检索知识获取信息的能力,在这个过程中,可以学到的是一种提升自我的能力。

当然,由于个人能力所限,这份课程设计有一些别的方面还是要参考人家的的资料,在读懂别人材料的同时,自己取人所长,补己之短,经过多次的调试,总结,最后

10Page 10 of 18

交出一份自己比较满意的答卷。

通过这次的课程设计,让我进一步的了解到C语言在我们日常生活中的重要性,而且,也更进一步的激发了我学习这门语言的兴趣.经过这次的训练,我相信自己以后会用更多的时间来把这门语言学好,掌握好这门必修的基础语言。

6.附录

#include #include #include

#define TRUE 1 #define ERROR 0 #define MAX 30 typedef int Status;

typedef struct{

char option1[30],option2[30],option3[30],option4[30],subject[150]; char result;

11Page 11 of 18

}TestNode;

TestNode Testquestions[MAX];

Status SaveNode(int N) //把结构体数组保存到文件\"cheng\"中,如成功保存返回TRUE,否则返回ERROR

{ int i; }

Status ReadNode(int &N)//从文件读出结构体数组的内容,如成功读取返回TRUE,否则返回ERROR

{ FILE *fp;

int i=0;

if((fp=fopen(\"cheng\

while(!feof(fp))// 用feof检测文件是否结束,如果结束,返回正确 { }

fread(&Testquestions[i],sizeof(TestNode),1,fp); i++; FILE *fp;

if((fp=fopen(\"cheng\for(i=0;ifwrite(&Testquestions[i],sizeof(TestNode),1,fp);

fclose(fp); return TRUE;

N=i-1; }

12Page 12 of 18

return TRUE;

void InputTitle(int N)// 输入N道试题数据 { int i;

for(i=0;i{ printf(\"请输入第%d道题题目、题干和选项:\\n\输入结构体元素内

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\

system(\"cls\"); }

}

Status InsertNode(int &N) //插入试题内容 { if(N>MAX) return ERROR;

printf(\"请输入所要插入题题目、题干和选项:\\n\"); printf(\"请输入题目:\"); gets(Testquestions[N].subject); printf(\"请输入选项A:\"); gets(Testquestions[N].option1);

printf(\"请输入选项B:\");

13Page 13 of 18

//清屏

gets(Testquestions[N].option2); printf(\"请输入选项C:\"); gets(Testquestions[N].option3); printf(\"请输入选项D:\"); gets(Testquestions[N].option4); printf(\"请输入答案:\");

scanf(\"%c\

N++; //N表示结构体数组长度,

通过加&号使其值能返回

}

Status DeleteNode(int n)//删除数组中的第n个元素 { }

void printNode(TestNode p,int n)//输出第n道题题目 { }

Status Match(TestNode p,char m)//判断m是否为p题目的答案,若是返回TRUE,否则返回ERROR

{

14Page 14 of 18

return TRUE;

return TRUE;

printf(\"(%d) \printf(\"%s\\n\printf(\" A %s \printf(\" B %s \\n\printf(\" C %s \printf(\" D %s \

}

if(m==p.result) return TRUE; else return ERROR;

void answer(int sum)//进行答题 {

int i,score=0,Num; char r; 解答

printNode(Testquestions[Num],Num+1);

printf(\"\\n请输入答案:\"); scanf(\"%c\

if( Match(Testquestions[Num],r)) //调用函数IsMatch判断所输入的答案

for(i=1;i<=sum;i++) {

Num= rand()%sum; //随机函数,以随机选定何题进行

与标准答案是否相同

}

15Page 15 of 18

{ }

printf(\"\\n答案正确!\\n\"); score++;

else printf(\"\\n答案错误!\\n\"); }

printf(\"\\n你的总成绩为:%d\\n\

void main() { char flag='N';

/*printf(\"输入想建立的题目文件题目数:\"); scanf(\"%d\InputTitle(N);*/ ReadNode(N);

while(flag=='N'||flag=='n')

{ printf(\"\\\单项选择题标准化考试系统\\n \"); int N=0,i, sum,score=0,chose;

printf(\"\\n\");

printf(\" \\\1 进行答题并判卷\\n\"); printf(\" \\\2 显示整张试卷内容\\n\"); printf(\" \\\3 插入试题\\n\"); printf(\" \\\4 保存到文件\\n\"); printf(\" \\\5 退出系统\\n\"); printf(\" \\\ 请选择:\"); scanf(\"%d\ switch(chose) {case 1:system(\"cls\");

printf(\"请输入你想要的答题数目:\"); scanf(\"%d\

answer(sum);

break;

case 2:system(\"cls\");

for(i=1;i<=N;i++)

{ printNode(Testquestions[i-1],i);

printf(\"\\n\");

} break;

case 3:system(\"cls\");InsertNode(N);break;

16Page 16 of 18

}

case 4:system(\"cls\");

if(SaveNode(N)) printf(\"保存成功!\\n\"); else printf(\"保存失败!\\n\");break;

case 5:printf(\"你将退出系统(Y or N)?\");

scanf(\"%c\ if(flag=='Y'||flag=='y') exit(0); system(\"cls\");break;

default:printf(\"请输入正确选择!\\n\"); } }

7 答辩记录

序号 问 题 回 答 1 2 3 17Page 17 of 18

4 5 8 指导教师意见

指导教师签名:

18Page 18 of 18

因篇幅问题不能全部显示,请点此查看更多更全内容

Top