D单项选择题标准化考试系统设计_第1页
D单项选择题标准化考试系统设计_第2页
D单项选择题标准化考试系统设计_第3页
D单项选择题标准化考试系统设计_第4页
D单项选择题标准化考试系统设计_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、石家庄铁道大学课程设计单项选择题 标准化考试系统单 位 电气与电子工程学院 分院(系)专 业 电气信息类 学 号 学生姓名 指导教师 石玉晶 完成日期: 2012 年 9 月 14日摘 要单项选择题标准化考试系统是一款比较实用的小型软件,其原理及相关软件在现在生活中有着广泛的应用。本设计主要应用语言进行编程,利用c语言中的结构体、文件、数组、函数等知识实现系统的试题库维护、答题、判卷各个功能,并用文件对修改后的试题库进行保存。应用本设计思路可以进行同类及相关软件的开发报告首先介绍了选题的意义及功能要求,其次介绍了程序的设计思路并包括基本算法和流程图,接着介绍了源程序代码和相关函数功能,最后是系

2、统的实现并对系统做了调试。本程序应用c语言运行环境实现了全部功能。报告还附录了参考用书,并提交了实验总结及实验感想。关键词:单项选择题标准化考试系统、结构体、数组、文件、c语言程序设计。目录第1章 选题意义 41.1 考试系统的意义 41.2 程序设计的意义 4第2章 系统功能需求分析 52.1 系统的基本要求 52.2 功能实现 5第3章 系统设计 63.1 设计思路 63.2 基本算法及流程图 73.3 各自定义函数及其功能 83.4 源程序代码 9第4章 系统实现 24第5章 总结 29参考文献第1章 选题的意义1.1 单项选择题标准化考试系统的意义在计算机技术和互联网飞速发展的今天,生

3、活中自主学习、自主考察测试日益增多,各种学科上机考试已成为一种趋势,因此,单项选择题标准化考试系统及其相关软件在生活中的应用日益增多。本系统可以实现从题库随机抽题,并自动判卷,将大大方便考生进行练习、自测和考试,同时减轻相关工作人员的负担,提高工作效率,计算机运行的准确性还能降低出错率,提高公平度。所以,设计并编写单项选择题标准化考试系统及其相关软件是极为有必要的。1.2 程序设计的意义本课题的实现主要应用了c语言中的结构体的使用、数组应用和文件应用等内容,还涉及到循环语句、分支选择结构等内容并且用c语言编程。通过设计本课题可以较全面的复习巩固已学过的c语言知识并学习更多相关知识,加深对c语言

4、程序设计的理解。通过课程设计可以全面的梳理已学过的编程知识,加深理解,还可以培养对程序设计的兴趣,增加学习趣味。第2章 系统功能分析2.1 系统的基本要求1、本系统要求实现以下功能:(1)、试题库的维护。单选题及其答案的增加、删除、修改和存储。最终用文件保存试题库。(2)、试题的抽取。每次从试题中抽取n道题。(3)学生答题。根据当前题目和4个选项,用户输入自己的答案。(4)自动判卷。系统根据用户答案与标准答案,实现判卷。2、要求利用文件存储数据,采用文本菜单界面、2.2 功能实现1、利用文件打开、关闭、输入、输出相关知识使存储数据和读题功能实现。2、利用结构体定义题目和答案。3、用结构体数组存

5、储读出的数据并进行各项运行后存进文件4、利用循环和字符数组处理函数进行题目的增加、删除、修改。5、利用随机数函数得到随机数并进行随机抽题。6、利用循环和数学计算进行判卷并评分。7、在对界面的美化方面利用简单的字符画做了一个简单动画,并利用头文件windows添加了界面颜色。第3章 系统设计3.1 设计思路删除试题修改试题增加试题答题判卷开始教师系统进行试题库维护学生系统进行答题、判卷1、基本任务2、程序中涉及到的全局变量(1)int m,用来存储题目和答案的数目;(2)file *fp1,*fp2,是文件指针,用于对文件进行操作。3、程序中涉及到的自定义函数void jindutiao(voi

6、d),void logo_interface(void),void readq(),void reada(),void writeq(),void writea(),int shumu(),void shanchu(void),void zengjia(void),void xiugai(void)void teacher(void),void student(void),int menu_select()利用这些自定义函数和基本的循环、运行程序进行操作。3.2 基本算法及流程图1、菜单在主函数中输出菜单,并选择教师系统或学生系统,定义函数void teacher()、void student

7、(),以实现选择系统。teachern开始输出菜单char= =tychar= =systudent2、教师系统教师系统共有三个功能,即试题的删除、增加、修改,定义函数void teacher()、void shanchu()、void zengjia()、void xiugai(),在teacher()函数中分别调用这三个函数以实现各自功能。shanchuzengjiaxiugaiyt= =2t= =3nnyt= =1y输出菜单输入选项输入选项输入选项输入选项输出菜单输出菜单3、学生系统学生系统共有两个功能,答题和判卷。开始char= =yy抽题答题判卷结束n回主菜单char= =y3.3

8、各自定义函数及其功能1、void logo_interface(void)和void jindutiao(void)利用简单的字符画,用于使界面友好。2、void readq()和void reada()分别用于读题和读答案。利用fopen函数打开文件,用fscanf函数格式化读出并将读出数据存入结构体数组中。3、void writeq()和void writea()分别用于写入题目和答案。利用fopen函数打开文件,用fprintf函数将结构体中的数据格式化写入文件。4、int shumu(),用于测文件中的题目数,并将数目返回到全局变量m中。5、void shanchu(void),用于删

9、除某一题目。利用数组从后往前一次覆盖得到删除后的结果。6、void zengjia(void),用于增加一道题目。将题目写入结构体中,用“追加”的方式打开文件并用fprintf函数格式化写入。7、void xiugai(void),用于修改某一题目。用void readq()和void reada()将题目和答案读入结构体中,将要修改的题目进行重新输入再将新的结构体数组利用void writeq()和void writea()函数写入文件。8、void teacher(void),用于出现菜单并选择功能,用switch实现调用不同函数。9、void student(void),用于实现从题库中

10、自动抽题和判卷。当输入y选择开始做题后,利用rand函数产生随机数并将这些随机数存入一个数组中,实现随机抽题,将这些题目从文件中读出并存储在结构体中,用printf函数输出;当输入答案后利用循环对各个题答案与标准答案进行对比,得到正确的题数和错误的题数,并计算出正确率,输出。10、int menu_select(),用于输出提示信息,并对教师系统选择和学生系统进行选择。利用switch实现对不同函数的调用。3.4 源程序代码#include#include#include#include #include #include struct question_typeint t;char timu

11、1000;char a100;char b100;char c100;char d100;question100;struct answer_typeint t;char a;answer100;file *fp1,*fp2;int m;void jindutiao(void) int i; for(i=0;i78;i+) putchar(.); printf(ra); for(i=0;i); void logo_interface(void) /*logo界面*/ char *tu9,*tu29; char *wenzi = t love c language ! ! ! . . .; ch

12、ar *wenzi1 = 欢迎使用 单项选择题标准化考试系统; char *wenzi2 = 制作: d*j*s 研发小组 ; char *p; int k = 0; int i = 0; int j = 0; int m = 10; tu0 = _._ b_; tu1 = , ? b| ; tu2 = / ? b| _|_; tu3 = -/,- _. /_ b| |:; tu4 = o- / _/ b| |_|; tu5 = | o b_|_|; tu6 = | )- # b_/_|_; tu7 = _/-b| _ | _|_; tu23 = -/,- _ ._/_ | |:; tu24

13、= o- / _. | |_|; tu25 = | o _|_|; tu26 = | )- # _/_|_; tu27 = _/-| _ :|; tu28 = /_| |_o_o|; for (k=0; km; k+) /*显示第一副图*/ printf(nnnnn tt); for (i=0; i9; i+) p = tui; while (*p != 0) if (*p = b) for (j = 0; j(m-k); j+) printf( ); else printf(%c,*p); p+; printf(n tt); sleep(100); if (k != m-1) system(

14、cls); sleep(100); system(cls); printf(nnnnn tt); for (i=0; i9; i+) /*显示第二副图*/ p = tu2i; while (*p != 0) printf(%c,*p); p+; printf(n tt); sleep(400); system(cls); printf(nnnnn tt); for (i=0; i9; i+) /*显示第一副图*/ p = tui; while (*p != 0) if (*p != b) printf(%c,*p); p+; printf(n tt); sleep(400); system(c

15、ls); printf(nnnnn tt); for (i=0; i9; i+) /*显示第二副图*/ p = tu2i; while (*p != 0) printf(%c,*p); p+; printf(n tt); printf(ntt ); while (*wenzi != 0) /*显示第一行文字*/ printf(%c,*wenzi); wenzi+; sleep(100); printf(nntt ); while (*wenzi1 != 0) /*显示第二行文字*/ printf(%c,*wenzi1); wenzi1+; sleep(100); printf(nnnttt )

16、; while (*wenzi2 != 0) /*显示第三行文字*/ printf(%c,*wenzi2); wenzi2+; sleep(100); sleep(400); /*400毫秒输出一个空格 为了屏蔽光标闪烁 */ printf( ); sleep(400); printf( ); sleep(400); printf( ); system(cls);void readq()int i=0;if(fp1=fopen(16.txt,r)=null) printf(出错!不能打开文件!); exit(0); while(!feof(fp1)fscanf(fp1,%d.%sn%sn%sn

17、%sn%sn,&questioni.t,questioni.timu,questioni.a,questioni.b,questioni.c,questioni.d);i+;fclose(fp1);void reada()int i=0;if(fp2=fopen(16_answer.txt,r)=null) printf(出错!不能打开文件!); exit(0); while(!feof(fp2)fscanf(fp2,%d.%cn,&answeri.t,&answeri.a);i+;fclose(fp2);void writeq()int i=0;if(fp1=fopen(16.txt,w)=

18、null)printf(出错!不能打开文件!);exit(0); elsefor(i=0;im;i+)fprintf(fp1,%d.%sn%sn%sn%sn%sn,questioni.t,questioni.timu,questioni.a,questioni.b,questioni.c,questioni.d); fclose(fp1);void writea()int i=0;if(fp2=fopen(16_answer.txt,w)=null)printf(出错!不能打开文件!);exit(0);elsefor(i=0;im;i+)fprintf(fp2,%d.%cn,answeri.t

19、,answeri.a);fclose(fp2);int shumu()int i=0;if(fp1=fopen(16.txt,r)=null) printf(出错!不能打开文件!); exit(0); while(!feof(fp1)fscanf(fp1,%d.%sn%sn%sn%sn%sn,&questioni.t,questioni.timu,questioni.a,questioni.b,questioni.c,questioni.d);i+;m=i;fclose(fp1);return m;void shanchu(void)int a,i;m=shumu();printf(共有%d道

20、题n,m);printf(请输入要删除的题号:);scanf(%d,&a);readq();reada();for(i=a-1;im;i+)strcpy(questioni.timu,questioni+1.timu);strcpy(questioni.a,questioni+1.a);strcpy(questioni.b,questioni+1.b);strcpy(questioni.c,questioni+1.c);strcpy(questioni.d,questioni+1.d); answeri.a=answeri+1.a;m=m-1;writeq();writea();void ze

21、ngjia(void)int i;m=shumu();i=m;printf(共有%d道题n,m);readq();reada();printf(输入您要增加的题目:n);printf(请输入题号:);scanf(%d,&questioni.t);answeri.t=questioni.t;printf(请输入题干:);scanf(%s,questioni.timu); printf(请输入选项a:); scanf(%s,questioni.a);printf(请输入选项b:);scanf(%s,questioni.b);printf(请输入选项c:);scanf(%s,questioni.c)

22、;printf(请输入选项d:);scanf(%s,questioni.d); printf(请输入答案:);getchar();scanf(%c,&answeri.a);if(fp1=fopen(16.txt,a)=null) printf(出错!不能打开文件!); exit(0);if(fp2=fopen(16_answer.txt,a)=null) printf(出错!不能打开文件!); exit(0);fprintf(fp1,%d.%sna.%snb.%snc.%snd.%sn,questioni.t,questioni.timu,questioni.a,questioni.b,que

23、stioni.c,questioni.d);fprintf(fp2,%d.%cn,answeri.t,answeri.a);fclose(fp1);fclose(fp2);void xiugai(void)int n;m=shumu();printf(共有%d道题n,m);readq();reada(); printf(请输入您要修改的题号:);scanf(%d,&n);n=n-1;questionn.t=n+1;answern.t=n+1; printf(请输入题干:);scanf(%s,questionn.timu); printf(请输入选项a(请以a.开头):);scanf(%s,qu

24、estionn.a); printf(请输入选项b(请以b.开头):);scanf(%s,questionn.b); printf(请输入选项c(请以c.开头):);scanf(%s,questionn.c); printf(请输入选项d(请以d.开头):);scanf(%s,questionn.d); printf(请输入答案:);getchar();scanf(%c,&answern.a);writeq();writea();void teacher(void)int b;char c;int menu_select();m=shumu();printf(共有%d道题n,m); print

25、f(您可以对试题库进行以下维护操作:n); printf(1、删除n2、增加n3、修改n请选择:);scanf(%d,&b);switch(b)case 1: shanchu();break;case 2: zengjia();break;case 3: xiugai();break;printf(是否继续?(y/是,n/否);getchar();scanf(%c,&c);getchar();if(c=y) teacher();else if(c=n)menu_select();void student(void)int menu_select();int a,i,j,n;int as100,

26、bb100;char b,c,d;char ans100;printf(开始做题?(y/是,n/否);getchar();scanf(%c,&b);getchar();if(b=y)m=shumu();printf(共有%d道题n,m);printf(请输入答题数:);scanf(%d,&a);srand(time(null);for(i=0;ia;i+)asi=rand()%(m-0+1)+0;readq();for(i=0;ia;i+) printf(%d.%sn%sn%sn%sn%sn,(i+1),questionasi.timu,questionasi.a,questionasi.b,

27、questionasi.c,questionasi.d); printf(请作答:);getchar(); scanf(%c,&ansi);getchar();printf(答题结束。开始判卷?(y/是,n/否); scanf(%c,&c); getchar();reada(); if(c=y)for(i=0,j=0,n=0;ia;i+) printf(%c,ansi);printf(%c,answerasi.a); if(ansi=answerasi.a) j+; else bbn=i+1; n+; printf(您共答对%d道题!n,j);printf(正确率为:%fn,(float)j/

28、(float)a); printf(错误题目为:); for(i=0;in;i+)printf(%d、,bbi);else if(c=n)student(); elsemenu_select();printf(n是否继续?(y/是,n/否);scanf(%c,&d);getchar();if(d=y) student();elseif(d=n)menu_select();int menu_select() char a;system(cls);system(color 1f);printf(t*单项选择题考试标准化系统*n); printf(ttt 请选择您需要的系统:n); printf(t:教师系统(可以进行试题库维护。对单选题及其答案进行增加、删除、修改和存储等操作,最终用文件保存试题库。)n); printf(s:学生系统(可以进行试题抽取及答题并进行自动判卷和评分。)n);printf(q:退出n); printf(您的选择(t/s/q?):); doa=getchar();while(a!=t&a!=s&a!=q);printf(t*单项选择题考试标准化系统*n);switch(a) c

温馨提示

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

评论

0/150

提交评论