单项选择题标准化考试系统设计.doc
《单项选择题标准化考试系统设计.doc》由会员分享,可在线阅读,更多相关《单项选择题标准化考试系统设计.doc(27页珍藏版)》请在咨信网上搜索。
沈阳航空航天大学 课 程 设 计 报 告 课程设计名称:C语言课程设计 课程设计题目:单项选择题标准化考试系统设计 院(系): 计算机学院 专 业: 计算机科学与技术 班 级: 34010104 学 号: 2013040101164 姓 名: 指导教师: 孙伟东 完成日期: 2014年03月1日 沈阳航空航天大学课程设计报告 目 录 第1章 概要设计 - 1 - 1.1题目的内容与要求 - 1 - 内容:设计并实现一个单项选择题标准化考试系统。该系统可以完成试题录入、试题抽取、自动判卷等功能。 - 1 - 1.2总体结构 - 1 - 第2章 详细设计 - 2 - 2.1菜单操作模块 - 2 - 2.2将题目装入内存模块 - 4- 2.3开始答题模块 - 5 - 2.4添加试题模块 - 9 - 第3章 调试分析 - 13 - 第4章 使用说明 - 14 - 附 录(程序清单) - 17 - 沈阳航空航天大学课程设计报告 第1章 概要设计 第1章 概要设计 1.1题目的内容与要求 内容:设计并实现一个单项选择题标准化考试系统。该系统可以完成试题录入、试题抽取、自动判卷等功能。 要求: (1) 用文件保存试题库。(每个试题包括题干、4个备选答案、标准答案) (2) 试题录入:可随时增加试题到试题库中 (3) 试题抽取:每次从试题库中可以随机抽出N道题(N由键盘输入) (4) 答题:用户可实现输入自己的答案 (5) 自动判卷:系统可根据用户答案与标准答案的对比实现判卷并给出成绩。 1.2总体结构 本程序主要分为四个模块(功能模块图见下图):(1)模块一:菜单操作模块 该模块实现程序的菜单操作。2)模块二:将题目装入内存模块函数开辟内存空间将试题文件中题目装入内存中。(3)模块三:开始答题模块函数会让用户输入要答的题目数,在屏幕上输出题干和选项并让用户输入答案。判断用户输入答案是否正确。4)模块四:添加试题模块 菜单操作模块 将题目装入内存模块 开始答题模块 添加试题模块 单项选择题标准化考试系统 打开储存试题的文件进行试题信息输入。 图1.1 功能模块图 - 24 - 沈阳航空航天大学课程设计报告 第2章 详细设计 第2章 详细设计 2.1菜单操作模块: 控制整个程序的运行,控制菜单操作,通过主函数模块分别调用各个模块,实现各项功能,流程如图2.1所示。 开 始 Systcm(“cls”); n=1 exe1( );break; 9 n=2 n=3 exe2( );break; printf(“goodbycl\n”); 1 N N Y Y N Y 1 n!=3 结 束 Y N 输入错误,请重新输:入: 图2.1 该模块实现程序的菜单操作。 实现算法如下: 在屏幕上输出菜单选项。 接受用户输入。 2.2.将题目装入内存模块: 将题目装入内存模块函数开辟内存空间将试题文件中题目装入内存中 Side By Side Fclose(fp); 结 束 !feof(fp) (fp=fopen(“test.txt,,,,,, Printf(“文件打开失败...... FILE”fp”; N Y Y N 开始 流程如图2.2所示 图2.2 函数开辟内存空间将试题文件中题目装入内存中。 实现算法如下: 遍历文件判断回车符个数(计算题目数)。 根据提供参数判断是否将当前题目装入内存。 开辟内存空间,将题目信息装入内存。 关闭文件返回题目总数。 2.3开始答题模块: 开始答题模块函数会让用户输入要答的题目数,在屏幕上输出题干和选项并让用户输入答案。判断用户输入答案是否正确。 流程图如图2.3 Vold main( ) 0>n||n>tm Printf(“答题数应小于总数. i=0 2 N Y 开始 ets( m ) M=rand( ); I<n 2 Touppor(ans[0])== Printf(“恭喜你答对了...... I++ P1=head; Head=p1->next; P1=NULL 3 Y N N Y Y N !(0<m&&m<=tm)m Touppor(ans[0])==p1->t.... Printf(“恭喜你答错了...... 3 Printf(“******************************”); i==1 exe1( ); i==2 exe2( ); main( ); 4 N Y N Y 图2.3 函数会让用户输入要答的题目数,在屏幕上输出题干和选项并让用户输入答案。判断用户输 入答案是否正确。 实现算法如下: 接受用户输入题目数,判断是否合法(大于0、小于总题数)。 置随机数并判断随机数是否合法。 调用将题目装入内存模块题目装入内存。 在屏幕上输出题目,接受用户输入答案。 判断用户输入的答案是否正确,输出答题结果统计。 2.4添加试题模块: 流程图如图2.4 4 Viod main( ); fp=fopen(“test.txt........ Printf(“文件打开失败请检查........ Struct test “p1=NULL; Printf(“请输入题目:”); P->que[0]==“\0” 5 N Y Y N 5 Printf(“请输入选项A:”); P1-〉answer1==’\0’ Y N Printf(“请输入选项B:”); P1-〉answer2==’\0’ Y N Printf(“请输入选项C:”); P1-〉answer3==“\0” 6 Scanf(“%c”,&p1->ture); p1->ture&&p1..>ture Printf(“请输入答案:”); Y N Printf(“请输入选项D:”); P1-〉answer4==’\0’ 6 Printf(“\n请输入题目:”); 7 N Y main( ); 7 n= =1 Fputc(“\n”,fp); n= =1 exe2( ); Free(fp1); 0) 结 束 N Y N Y 打开储存试题的文件进行试题信息输入。 实现算法如下: 打开文件。 开辟内存空间,接受用户输入题目信息。 判断用户输入是否合法。 写到文件并保存。 沈阳航空航天大学课程设计报告 第3章 调试分析 第3章 调试分析 问题1:文本文件无法删除指定的一行 方法:所以要用类似于进栈出栈的方法,把要删的信息过滤出去 问题2:程序不能运行 方法:解决办法就是不断的按F10进行调试,最终找到错误的地方。 问题3:打开的文件没有关闭,最终导致一部分源代码被无意休改 方法:问了成绩好的同学,最后加了个关闭文件的函数。 沈阳航空航天大学课程设计报告 第4章 使用说明 第4章 使用说明 运行操作及结果:该程序可以进行单项选择题标准化考试的系统,实现输入不同的指令数字实现不同的功能;实现选择答题增加题目以及直接退出系统。 单项选择题标准化考试系统 。 请输入你要的操作:1 请输入你要的操作:2 图为进行单项选择题标准化考试系统设计的情形 使用时根据提示选择想要的查找方式。 沈阳航空航天大学课程设计报告 参考文献 参考文献: [1] 张长海.C语言程设计[M].北京:高等教育出版社,2006 [2] 谭浩强 C程序设计解题与上机指导(第三版) 北京 清华大学出版社 2009 [3] 范辉 等编著《Visual C++6.0程序设计简明教程》 高等教育出版社 [4] 严蔚敏等 《数据结构(c语言版)》 北京:清华大学出版社,1997年4月第1版。 [5] 胡学钢等《数据结构算法设计指导》北京:清华大学出版社,1999年 第1版。 沈阳航空航天大学课程设计报告 课程设计总结 附 录(程序清单) #include <stdio.h> #include <stdlib.h> #define LEN sizeof(struct test) struct test { char que[81]; char answer1[81]; char answer2[81]; char answer3[81]; char answer4[81]; char ture; struct test *next; }; struct test *head;//全局变量储存第一个结构体的指针 int zts(int m)//将第m道题装入内存,输入-1时将返回总题数 { FILE *fp; struct test *p1=NULL; char ch,ch1[5]; int i,n=0,wz,py; if((fp=fopen("c:\\test.txt","r"))==NULL)//只读方式打开文件 { printf("文件打开失败请检查C盘下的test.txt文件。\n"); exit(0); } do { py=1; ch=fgetc(fp); for(i=0;ch!='\n'&&ch!=-1;i++)//循环判断回车符个数 { py++; ch=fgetc(fp); } n++; //储存行数的变量 if(n==m)//如果当前行数与传入参数相等 { if(p1==NULL)//判断是否是第一次开辟内存空间 { p1=(struct test *)malloc(LEN); head=p1; p1->next=NULL; } else { p1->next=p1; p1=(struct test *)malloc(LEN); p1->next=NULL; } wz=ftell(fp);//记录指针当前位置 fseek(fp,(wz-py-1),0);//调整指针位置到行首 fscanf(fp,"%s%s%s%s%s%s",&p1->que,&p1->answer1,&p1->answer2,&p1->answer3,&p1->answer4,&ch1); fseek(fp,wz+1,0);//调整指针位置到行末 p1->ture=ch1[0]; break;//将数据装入内存后跳出循环 } }while(!feof(fp));//文件结束跳出循环 fclose(fp); return n;//返回题目总数n } void exe1() { void main(); void exe2(); int n,m=0,tm,i,t=0,f=0; char ans[2]; struct test *p1; system("cls"); printf("请输入要答题数:"); scanf("%d",&n); tm=zts(-1); if(0>n||n>tm) { printf("答题数应小于总数!"); exe1(); } for(i=0;i<n;i++)//n为用户要答题数 { do { m=rand();//置随机数 }while(!(0<m&&m<=tm));//判断产生的随机数是否符合要求 zts(m); p1=head;//将zts开辟的结构体首地址赋给p1 printf("\n第%d题:\n",i+1); printf("%s\n%s\n%s\n%s\n%s\n请输入答案:",p1->que,p1->answer1,p1->answer2,p1->answer3,p1->answer4); scanf("%s",&ans); if(toupper(ans[0])==p1->ture)//判断用户输入答案是否正确 { printf("恭喜你答对了!\n\n"); t++;//回答正确统计 } else { printf("对不起,你答错了。。。\n正确答案是:%c\n\n",p1->ture); f++;//回答错误统计 } } p1=head; do { head=p1->next; free(p1); p1=head; }while(p1!=NULL);//释放结构体占用内存 printf("*******************************\n"); printf("\n已完成测试!\n共做%d道题:%d错误,%d正确。\n正确率:%5.2f%%\n\n",n,f,t,(float)t/n*100); printf("*******************************\n"); printf("\n\n1.继续答题;2.添加题目;3.返回主菜单;\n请选择:"); i=0; scanf("%d",&i); if(i==1) exe1();//继续答题 else if(i==2) exe2();//添加题目 else main();//返回主菜单 } void exe2()//实现用户自主输入题目 { void main(); system("cls"); int n; FILE *fp; if((fp=fopen("c:\\test.txt","a"))==NULL) { printf("文件打开失败请检查C盘下的test.txt文件。\n"); exit(0); } struct test *p1=NULL; p1=(struct test *)malloc(LEN);//开辟内存空间 do { printf("请输入题目:"); scanf("%s",&p1->que); }while(p1->que[0]=='\0'); do { printf("请输入选项A:"); scanf("%s",&p1->answer1); }while(p1->answer1=='\0'); do { printf("请输入选项B:"); scanf("%s",&p1->answer2); }while(p1->answer2=='\0'); do { printf("请输入选项C:"); scanf("%s",&p1->answer3); }while(p1->answer3=='\0'); do { printf("请输入选项D:"); scanf("%s",&p1->answer4); }while(p1->answer4=='\0'); printf("请输入答案:"); do { scanf("%c",&p1->ture); p1->ture=toupper(p1->ture); }while(p1->ture!='A'&&p1->ture!='B'&&p1->ture!='C'&&p1->ture!='D'); printf("\n确认输入题目?\n1.是。 2.否。\n"); scanf("%d",&n); if(n==1) { fputc('\n',fp); fputs(p1->que,fp); fputc(' ',fp); fputs("A.",fp); fputs(p1->answer1,fp); fputc(' ',fp); fputs("B.",fp); fputs(p1->answer2,fp); fputc(' ',fp); fputs("C.",fp); fputs(p1->answer3,fp); fputc(' ',fp); fputs("D.",fp); fputs(p1->answer4,fp); fputc(' ',fp); fputc(p1->ture,fp); fclose(fp); printf("保存成功!"); system("cls"); free(p1); printf("是否继续添加?\n1.继续添加 2.返回主菜单\n"); scanf("%d",&n); if(n==1) exe2(); else main(); } else { free(p1); exe2(); } } void main() { int n,temp=1; while(1) { system("cls"); printf("********************************\n"); printf("欢迎使用单项选择题标准化考试系统\n"); printf("********************************\n"); printf("\t1.开始答题。\n"); printf("\t2.添加试题。\n"); printf("\t3.退出系统。\n"); printf("\n请选择:"); scanf("%d",&n); switch(n) { case 1:exe1();temp=0;break; case 2:exe2();temp=0;break; case 3:printf("\n^-^,goodbye!\n"); default:printf("输入错误,请重新输入:");scanf("%d",&n);break; } } } 课程设计总结: 经过这整整5天的C课程设计的训练,我学到了很多,最主要的一点是怎样去运用自己学过的知识,怎样去找到你所需要的资料,并在短时间把它运用到具体的实践中,运用到你所需要的方面。这个过程是很艰难的,要花费很多的时间和精力,但是,在事情过后,自己就会发现自己已经在这个过程中学到了自己想要的东西,这种获得是更深刻的。 在做这个C课程设计的时候,我原先也是学的不怎么好,什么是结构体数据,什么是定义类型,怎样在一个main函数中调用别的定义函数,等等,可以说是忘得差不多了。然而,在这门课程设计中,这些方面却是特别重要的,可以说,掌握了这个,你就完全可以完成自己的任务。这就要求我们要自己去学,自己去探索。当然,看书、问同学是必不可少的,还有,身边有非常丰富的网络资源给我们好好利用,百度就是个很不错的地方。这样就从另一方面锻炼了我们检索知识获取信息的能力,在这个过程中,可以学到的是一种提升自我的能力。 指导教师评语: 指导教师(签字): 年 月 日 课程设计成绩- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单项 选择题 标准化 考试 系统 设计
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【快乐****生活】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【快乐****生活】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【快乐****生活】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【快乐****生活】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文