单项选择考试系统C 课程设计.doc_第1页
单项选择考试系统C 课程设计.doc_第2页
单项选择考试系统C 课程设计.doc_第3页
单项选择考试系统C 课程设计.doc_第4页
单项选择考试系统C 课程设计.doc_第5页
免费预览已结束,剩余23页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单项选择题考试系统目录 第一章 课程设计的目的和要求11.1开发背景11.2开发目标11.3目的和任务2第二章 需求分析32.1功能列表32.2功能描述32.3运行环境4第三章 系统分析53.1接口函数53.2模块描述5第四章 详细设计7第五章 系统测试10第六章 设计心得与体会14附录一 参考文献16附录二 程序源代码17程序设计综合课程设计第一章 课程设计的目的和要求1.1开发背景 随着计算机在学生中的普遍应用,以及学校中专业数量的急剧增加,能够更方便的测验同学们对知识的掌握,同时,也减少老师出题、考试的工作量,设计一个小型的单选考试系统显得尤其重要。是同学和老师都能更方便,同学们可以随时随地的进行测试,老师也可以随心所欲的扩充和删减试题,单选考试系统在督促同学们更好的掌握只是方面具有较大的实用意义。它提高了老师出题测试的效率,并且,能快速指出学生们在学习中的不足,极其有利于教学事业。同时,它也增加平时成绩的透明度,逐步实现教学高科技化。这个课题的假设适合学校进行实施和推广,具有操作简单,容易维护的优良特点,同时,还有良好的人机互动。 对学生的平时成绩进行判定,对课堂的知识进行出题,以及统一考试时间和地点,一直是老师头疼的事情。对于学生而言,又要抽出大量的时间对自己所掌握的只是进行检测。所以说,这样会造成大量的时间和精力。但是。利用计算机来完成这些工作,就游刃有余了。例如,老师可以随时加入题目,而不用考虑修改试卷的问题;同学们可以选择自己的时间进行答题,也可以随心所欲的选择做题的数目,并且可以快速知道成绩从而进行对知识的完善。可以说,这样的一个单选考试系统具有许多的优点,是很有实用价值的。1.2开发目标整个系统主要用于学校老师进行扩充题库;在校学生进行测设。总体任务是实现:用文件保存试题库,试题录入,试题抽取,答题,以及自动判卷等功能。使考试更人性化,让老师和同学们都可以感受到这个系统的简单与快捷,使同学们喜欢上随时测试,让这个考试系统成为老师和同学们学习上的好帮手。1.3目的和任务通过这次的程序编写,不但可以对之前学过的C+语言进行复习和更深层次的掌握,还是一个锻炼自己的好机会。在编写程序的过程中发现问题,解决问题,提高自己的动手能力,要让课本上学到的知识变成真正有用的东西。在程序调试和解决实际问题的过程中,更好的锻炼自己的动手能力。相信,经过这段时间的努力,自己的编程和程序调试的基本功一定会扎实很多。同时,在解决问题的过程中,发现自己的不足之处并即使改正,提高自己各方面的能力。 第二章 需求分析 应老师和学生的学习要求,尽可能减少师生的工作量,提高老师的办公效率,提高学生的学习效率,如今编写这个单选考试系统,从而达到方便,快捷,简单的目的。2.1功能列表单选考试系统(学生用)包括:用户登录,选择答题,随机抽题,显示成绩等信息。现要求编写程序来完成如下功能:(1) 用户登录(2) 系统可以随机抽取题目(数目可选择)(3) 用户可以选择答题(数目可选择)(4) 用户可以输入自己的答案(5) 系统可以实现自动判卷,并显示成绩2.2功能描述(1) 用户登录:用户名为:admin 密码为:092001 这个系统是为计算机092001班的学生用的,所以密码为班级名。(2) 随机抽题: 用户登录后,可以选择随机抽题这一选项来进行随机 抽题,用户可根据自己的时间来选择做题的数目。(3) 选择答题: 用户登录后,也可以选择选择答题这一选项来进行选择答题,输入想做的题目的题号来回答相应的题。答完一道后,可选择继续或者查看成绩。(4) 答案录入:用户在看完题目后,可以用键盘录入自己的答案。如:A等。(5) 自动判卷:系统可实现自动判卷,对用户输入的答案与正确答案进行比对,给出成绩。2.3运行环境硬件环境:内存256MB以上;硬盘60G以上其他组件:光驱 (CDROM);显卡(SVGA)适配器;集线器;交换机。系统平台: Windows2003操作系统, Office 2000办公软件设计语言:C+语言服务器:Tomact5.0运行软件:Microsoft Visual C+6.0界面显示:命令行界面 第三章 系统分析3.1接口函数int userlogin(); 用户登录int menu(); 菜单函数void doselect(int choice); 选择处理void checkresult(int optionque,char optionans); 判断答案void calculate(); 计算成绩void randdo(); 随机出题void select(); 出题int checkAll(); 扫描题库 3.2模块描述用户登录模块主要功能:实现用户登录。只有输入正确的用户名和密码才可以登录,否则就一直显示用户登录的界面。选择处理模块主要功能: 当用户登录后,进行选择,可以是随机出题,也可以是选择出题,当用户输入的信息与提示吻合时,则可进入下一个步骤;当用户输入的信息与提示不吻合时,就返回“程序异常”的字样。随机出题模块主要功能:当用户选择了随机出题以后,输入合法的做题数目,则此模块可进行随机出题。它可以在题库中任意抽取题目。它可以产生随机的题号,然后在题库中进行抽取题目。 选择出题模块主要功能:当用户选择了选择出题以后,输入想做的题目的合法题号,之后此模块可在题库中将这道题目找出。在用户做完此题后,可以选择继续做题,或者选择查看成绩。 自动判卷模块主要功能:当用户用键盘输入自己的成绩后,此模块可以将用户的答案和正确答案进行比对。然后,计算用户的得分。在此模块中,所使用的分数是百分制,用户在选择查看成绩以后,就可以看到自己的分数。 第四章 详细设计总流程图: maxnum=checkAll( ); userlogin( )=1 Y N doselect(menu( ) ; return 0; 图4-1 程序流程图 详细设计说明(1)用户登录模块主要功能: 实现用户登录。用户名:admin;密码:092001。主要技术:利用if和else语句,对用户输入的字符进行判断。如果输入的用户名和密码与已经设置的相同,则用户可以进入系统答题。当用户名不正确时,输出用户名不正确,要求继续输入用户名;当密码不对时,输出密码不正确,要求继续输入密码。当用户名和密码都正确时,用户进入答题系统。程序流程图: Charusername20; 输入正确的用户名 Y N Cout密码: ; cout用户名错误; Multiplex returne 0 ; 图4-2 程序流程图 (2)选择处理模块主要功能:对用户输入的信息进行判断。主要技术:用if和else语句对用户输入的信息进行判断。其中,有一个指令让程序的页面停止下来,同时进行判断。用switch语句,当用户输入1时,进入选择测试;当用户输入2时,进入随机测试;当用户输入3时,推出程序。(3)选择测试模块主要功能:用户可以进行选择测试主要技术: 用户可以输入自己想做的题的号码,将用户所输入的题号存放起来;打开存放题目的文件,这里要判断文件是否能正确打开;判断用户输入的题号是否为1,当是1是单独处理,当不是1时,将用户所选择的题目输出,并关闭文件流;调用checkresult函数,来看用户是否继续做题;核对答案,并调用calculate函数,计算用户的成绩。(4)随机测试模块主要功能:用户可以进行随机测试主要技术:用open函数来打开题库;判断文件是否能正确打开;程序开始随机挑选题目并且输出;调用checkresult函数,来看用户是否继续做题;核对答案,并调用calculate函数,计算用户的成绩。 (5)自动判卷模块主要功能:实现系统自动判卷主要技术:将用户的答案与正确答案进行比对,并计数,记下正确的题目的个数;将正确的个数与做题的总数目进行除法运算,并计算出成绩的总分。这里所采用的是百分制。 第五章 系统测试1. 开始界面测试内容:程序主界面是否正常操作步骤:打开程序期望结果:页面正常显示正常 图5-1 程序欢迎界面2. 用户登录测试内容:用户登录是否成功操作步骤:输入默认的用户名和密码期望结果:用户可以成功登录 图5-2 用户输入用户名和密码画面 图5-3 用户成功进入系统画面3. 选择测试测试内容:查看选择测试是否能正确运行操作步骤:输入1后弹出提示界面期望结果:程序可以成功运行 图5-4 系统成功运行画面 4. 随机测试测试内容:查看随机测试是否能够成功运行操作步骤:输入2 并按提示修改信息期望结果:程序可以成功运行 图 5-5 系统成功运行画面 5. 输入非法字符测试内容:查看程序是否能够处理非法输入操作步骤:输入4或者其它非法字符期望结果:当输入与提示不符合时,程序直接退出 图5-6 输入非法字符画面 6. 退出系统测试内容:退出主界面是否正常操作步骤:输入3 界面关闭期望结果:页面正常关闭 图5-7 输入3后的画面 第六章 设计心得与体会 在这次的设计过程中,我学到的不仅是知识,我还认识到许多事情。通过编写程序,我认识到合作团结的重要性,与此同时,我的变成水平也提高了非常多。由于这次设计涉及到数据库,我自学到了不少编程工具与数据库连接的知识,对数据库的操作有了进一步的了解。同时,我也认识到自己的不足,意识到今天应该更家努力。在这里我要衷心的感谢我们的指导老师刘静老师,谢谢她的悉心指导和热心帮助。由于我水平有限,加之时间短暂,所以在此单选考试系统中还有许多不足之处,请老师批评指正,我会在以后的学习中不断改进,不断完善。两周的课程设计结束了,在这次的课程设计中在检验了我所学习的知识的同时,更加培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。其中,我遇到了很多困难。在许多问题一头雾水的时候,我承认,我是很沮丧的,同时,也非常着急。是我周围的同学热心帮助我,给了我很多建议和意见。在老师辅导的过程中,我更是清楚的知道了自己想要的是什么。由于我做的这个课程设计是两个人一组的,我和我的搭档之间需要的默契程度也非常高。在这两个星期的相处了,我发现了别人身上的优点,也明白了自己的缺点是什么。这是锻炼合作精神的一个非常重要的实践。我也意识到,在今后的生活中,无论是学习还是工作,无论是娱乐还是比赛,只要在一个小组内,那么团队精神就是最重要的。课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。回顾起此次课程设计,至今我仍感慨颇多,的确,从从拿到题目到完成整个编程,从理论到实践,在整整两周的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,一定把以前所学过的知识重新温故。这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在刘静老师的辛勤指导下,终于游逆而解。在刘静老师的身上我学得到很多实用的知识,我对她再次表示衷心的感谢!同时也要谢谢曾经给我帮助的各位同学,谢谢你们! 附录一 参考文献【1】谭浩强著 C+程序设计.北京:清华大学出版社;1999【2】 谭浩强著 C+程序设计题解与上机指导.北京:清华大学出版社;1999【3】(美)Richard Johnsonbangh Martin Kalin 著 面向对象程序设计C+语言描述 ,机械工业出版社;2006附录二 程序源代码/*程序简介:单选考试系统帐号:admin密码:092001*/#include #include #include #include #include using namespace std;/*全局变量定义*int maxnum; /maxnum(题库中已有的题目总数)float final_mark,rightnum,alldone ; /rightnum代表做对的题目数,final_mark(最后成绩),alldone(所做的题目总数)/*/*函数声明*int userlogin();/用户登录int menu();/菜单函数void doselect(int choice);/选择处理void checkresult(int optionque,char optionans);/判断答案void calculate();/计算成绩void randdo();/随机出题void select();/出题int checkAll();/扫描题库/*/*主函数*int main() maxnum=checkAll();cout*endl; cout*endl; cout*endl; cout*endl; cout*endl; cout*欢迎使用单选考试系统*endl; cout*endl; cout*endl; cout*endl; cout*endl; system(pause);/调用DOS命令暂停 system(cls);/调用DOS命令清屏 srand(time(0);/随机种子设置 if(userlogin()=1) doselect(menu(); /处理选择return 0; /*用户登录int userlogin()char username20;/用户名char userpsw20;/密码cout*endl; cout*endl;cout*endl; cout*用户登录*endl; cout*endl; cout*endl; cout*endl; coutusername; if(strcmp(username,admin) cout用户名错误!endl; system(pause); system(cls); userlogin(); else coutuserpsw; if(strcmp(userpsw,092001) cout密码错误!endl; system(pause); system(cls); userlogin(); else system(pause); system(cls); return 1; return 0;/*菜单int menu() system(cls);char choice;cout*endl; cout*endl;cout*endl; cout*endl; cout*单选考试系统*endl; cout*endl; cout*endl; cout*endl;cout*endl; cout1.选择测试endl; cout2.随机测试endl; cout3.退出程序endl choice;/选择处理 if(choice=1&choice=4) return atoi(&choice); /非法输入处理else cout请输入正确的选择.endl; system(pause); system(cls); menu();return 0;/*选择处理void doselect(int choice) system(pause);system(cls); /程序异常处理if(choice=0) cout程序异常endl;exit(0);/* rightnum=0; alldone=0;final_mark=0;switch(choice) case 1 :select();break;case 2 :randdo();break; case 3 :cout退出中endl; system(pause); break; /*随机测试void randdo()cout*endl; cout*endl;cout*endl; cout*随机测试*endl; cout*endl; cout*endl; cout*endl;int optionque; /用于存放用户所选题号char optionans; /用于存放用户选择的答案 char check; /用于存放从文件中读取到的字符int count; /计数变量 ,用于控制题号ifstream in_stream; /定义文件流变量int num; /题目数量int i; /循环变量int dist;dodocout请输入测试题目数量(不超过:maxnum个)num;while(nummaxnum);for(i=0;inum;i+) in_stream.open(tiku.txt); /用open函数打开tiku.txt文本 if (in_stream.fail() /判断打开是否成功 coutInput file opening failed.n; exit(1); count=0; /计数清零 optionque=rand()%maxnum+1; /随机产生题号if(optionque=1) /如果用户选择做第一题,单独执行 in_stream.get(check); while(check!=) coutcheck; in_stream.get(check); else /如果选择第一题以后的题 while(count!=optionque-1) in_stream.get(check); if(check=)count+; while(count!=optionque) in_stream.get(check); if(check!=)coutcheck; if(check=) count+; do coutendl请选择答案: (大写字母A/B/C/D)optionans; while(optionans!=A&optionans!=B&optionans!=C&optionans!=D); in_stream.close(); /关闭文件流 checkresult(optionque,optionans); /调用checkresult函数 calculate(); /调用计算成绩函数 cout继续回答问题吗? 选择 1 继续,选择2 回到主菜单。dist;while(dist=1);doselect(menu(); /*判断答案是否正确void checkresult(int optionque,char optionans) char ans; ifstream in_stream;in_stream.open(answer.txt); /用open函数打开tiku.txt文本 if (in_stream.fail() /判断打开是否成功 coutInput file opening failed.n; exit(1);int count=0;while(count!=optionque) in_stream.get(ans); count+; if (optionans=ans) /将用户输入的答案与ans数组中的答案进行比对 rightnum+; / 如果一致将 rightnum加1 alldone+; else alldone+; /如果不一致 只将所做的题目总数加1 /*计算成绩void calculate() float mid; mid=rightnum/alldone; /将做对的题目总数除以所做题目总数求出正确率 final_mark=mid*100; /将正确率乘以100,得到最后成绩 coutRight issue: rightnumendlAlldone issue: alldoneendl; coutYour mark is: final_markendl; coutNotice:满分为 100分!endlendl; system(pause); system(cls); /*选择测试题部分void select() cout*endl; cout*endl;cout*endl; cout*选择测试*endl; cout*endl; cout*endl; cout*endl;int optionque; /用于存放用户所选题号char optionans; /用于存放用户选择的答案 char check; /用于存放从文件中读取到的字符int count; /计数变量 ,用于控制题号int next; /判断是否继续做题ifstream in_stream; /定义文件流变量do in_stream.open(tiku.txt);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论