C语言课程设计报告.docx
- 文档编号:6080281
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:13
- 大小:35.05KB
C语言课程设计报告.docx
《C语言课程设计报告.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告.docx(13页珍藏版)》请在冰豆网上搜索。
C语言课程设计报告
石家庄铁道学院课程设计
单项选择题标准化考试系统设计
单位:
计算机与信息工程分院
专业:
电气信息类—计
完成日期:
2009年7月2日
摘要
小学期的C语言课程设计选择了单项选择题标准化考试系统设计,在课程设计报告中描述了选题意义、系统功能需求分析、系统设计、系统实现等内容。
本系统主要应用C语言文件、数组、函数调用等知识,在设计报告中有关于系统设计的实现步骤和其他相关说明。
单项选择题标准化考试系统有着十分广泛的应用,在现代计算机系统较发达的时代,各学科上机考试已经成为一中趋势,其中就会应用到此项系统。
本系统可以实现从题库中随机抽题,并自动判卷。
将大大方便考生练习和考试,同时减轻相关工作人员的工作负担。
本系统可移植性好,能够在不同领域推广应用。
在系统设计当中难免存在纰漏之处,尽请谅解!
关键词:
C语言课程设计、单项选择题标准化考试系统、数组、文件、函数。
目录
1.选题的意义3
2.系统功能需求分析4
2.1系统功能4
2.2设计思想4
3.3系统设计说明5
3.系统设计6
3.1流程图6
3.2设计步骤6
4.系统实现17
4.1系统运行环境17
4.2系统功能实现17
5.总结18
5.1总结19
5.2存在的主要问题20
参考文献20
1.选题的意义
自我介绍:
姓名:
王亚平
班级:
计0805-2班
学号:
20082457
专业:
电气信息类-计
选择题目名称:
《单项选择题标准化考试系统》
选择本题目的原因:
1.通过该题目的设计,可以使我掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。
2.可以让我掌握指针或数组、结构体、文件的操作方法。
完成本题所运用知识点:
指针或数组、结构体等。
课程时间安排:
第一天:
选题、查阅资料
第二天:
确定设计方案
第三天~第八天:
方案的实现、调试
第九天~第十天:
撰写课程设计报告初稿并修改
参考书籍:
1.《C语言程序设计实例精粹》.谭明金.电子工业出版社
2.《C语言编程技巧及实用程序荟萃》.鲁沐浴.电子工业出版社
3.《C语言解惑》.AlanR.Feuer.人民邮电出版社
4.《C语言实例解析精粹》.曹衍龙.人民邮电出版社
5.《C语言实战105例》.王为青.人民邮电出版社
2.系统功能需求分析
2.1系统功能
单项选择题标准化考试系统可以实现以下功能:
(1).试题库维护。
单选题及其答案的增加、删除、修改和存储。
最终用文件保存试题库。
(2).试题的抽取。
每次从试题库中可以随机抽出N道题(N由键盘输入)。
(3).学生答题。
根据当前题目和4个选项,用户输入自己的答案。
(4).自动判卷。
系统根据用户答案与标准答案,实现判卷并给出成绩。
2.2设计思想
在进行单项选择题标准化考试系统设计之前,做了相关的准备和查阅,对此有了一定的了解。
本系统是在各学科上机练习和考试时应用十分广泛的系统。
由于单选题具有答案的唯一性和客观性,因此能够通过C语言进行设计并运行此系统。
设计时用到了C语言函数、数组、文件等知识,对自己的C语言编程水平有一定的巩固和提高。
在课程设计当中遇到了一些问题,通过老师和同学的帮助,问题得到了解决,自己也从中学到了许多知识。
本系统与文件练习十分紧密,首先建立一个单项选择题的题库,其中包括200道单选试题。
没道题目包含题号、题干、备选答案和正确答案,其中备选答案为四项,分别用A、B、C、D标记。
正确答案在备选答案后给出,但在学生考试或练习时并不显示。
学生进行考试或练习时先输入要做的题目数N,系统通过随机函数产生N道试题。
学生做题时只需将答案选中即可,在完成N道题目后,系统会在动利用函数完成对本次考试的判卷,并将结果显示在屏幕上。
在进行试题库的维护时可以通过修改文件中试题的题干、备选答案和标准答案来完成。
至此,本系统的全部功能得以实现。
2.3系统设计说明
本系统是用C语言编写,并在VC++6.0或WTC环境下运行。
学生使用时操作简单,并易于维护,适合不同学科领域的练习和考试之用。
关于系统功能的具体设计步骤和功能实现的说明将在后面章节中详细给出。
3.系统设计
3.1流程图
Y
N
N
3.1设计步骤
程序代码为:
#include"stdio.h"
#include"stdlib.h"
charch;
voidmain()
{
intxuan;
printf("\n****************单项选择题标准化考试系统****************\n\n");
printf("1.开始做题");
printf("2.题库维护\n");
printf("请输入1或2.\n");
printf("\n**********************************************************\n");
scanf("%d",&xuan);
if(xuan==1)
{
FILE*fp;
charch,i,ia,daan[20],_daan[20],cankao[20];
unsignedintx,j,k,temp;
unsignedlongran,fp1[5500];
floaty;
if((fp=fopen("op.txt","r"))==NULL)/*题库名为“op.txt"*/
{
printf("在该目录找不到文件,程序结束");
scanf("%c",&ch);
return;
}
for(ran=0;ch!
=EOF;ch=fgetc(fp))/*efo为检测文件结束函数*/
if(ch=='*')
fp1[++ran]=ftell(fp);/*返回当前文件指针,读取文件的长度*/
printf("试题库有%ld个考题\n",ran);
for(;;)
{
printf("\n输入一个<20的出题数");
scanf("%d",&temp);
if(temp==0)
{
fclose(fp);
return;
}
for(j=i=0;i { x=(int)((double)rand()/((double)RAND_MAX+1)*ran);/*rand为随机数发生器*/ x=rand()/(RAND_MAX/ran+1); fseek(fp,fp1[x],0);/*重定位流上的文件指针*/ printf("\n%d: ",i+1); for(ch=fgetc(fp);;) { printf("%c",ch); ch=fgetc(fp); if(ch=='$') { daan[j++]=fgetc(fp); break; } } } daan[j]='\0'; printf("\n输入你的答案串"); scanf("%s",_daan); for(ia=k=i=0;i ='\0';i++) if(_daan[i]==daan[i]||_daan[i]-32==daan[i]) k++; elsecankao[ia++]=i+1; for(;i! =j;i++) { cankao[ia++]=i+1; _daan[i]=''; } y=j;if(k==j)printf("*****满分! 恭喜。 ******\n"); elseif(k==0)printf("*****零分! 加油! *****\n你做错了所有"); elseif(k>=(int)(y/100*75))printf("*****优秀! *****\n但你还是做错了"); elseif(k>=(int)(y/100*60))printf("*****及格! *****\n你总共做错了"); elseprintf("*****不及格! 继续努力! *****\n你做错了"); if(k! =j) { if(k! =0) for(i=0;i printf("%d,",cankao[i]); printf("题\n参考答案: \n"); for(i=0;i printf("%d题正确答案是%c;你的答案是%c\n",cankao[i],daan[cankao[i]-1],_daan[cankao[i]-1]); } } } if(xuan==2) { printf("请在题库中进行试题的添加、删除和修改等操作! \n"); printf("试题库文件为“op.txt”"); } else printf("输入错误! "); } 由于单项选择题标准化考试系统功能比较简单,所以在程序中只用到了“stdio.h”和“stdlib.h”两个头文件。 程序开始用了一个简单的菜单,用来让用户选择做题或维护试题库,用if语句来实现。 在程序的主函数中定义了文件指针FILE*fp;用来指向试题库文件。 同时定义了三个字符型数组,分别为daan[20],_daan[20]和cankao[20]。 分别用来存放标准答案和考生给出的答案。 在数组中只定义了20个元素,因为在各学科的考试中单项选择题的数目都在20以内,当然这个数字也可以根据不同需要进行修改。 本系统与题库的联系非常紧密,在程序中奖题库文件命名为op.txt。 运行程序时需将文件放在同一个目录中,默认的为C: \Win-TC\projects。 可直接在文件中进行试题的修改、增加或删除等操作。 若题库不存在或未放在同一个目录中,则在屏幕上显示"在该目录找不到文件,程序结束"。 代码如下: if((fp=fopen("op.txt","r"))==NULL)//题库名为“op.txt" { printf("在该目录找不到文件,程序结束"); scanf("%c",&ch); return; } 程序中用以下代码来实现检测题库中共有多少到题目的功能: for(ran=0;ch! =EOF;ch=fgetc(fp))//efo为检测文件结束函数 if(ch=='*') fp1[++ran]=ftell(fp); printf("试题库有%ld个考题\n",ran); 其中题库中每道题的题干用“*”放在头部来标示。 接下来在屏幕上显示“输入一个<20的出题数”,代码为: printf("\n输入一个<20的出题数"); scanf("%d",&temp); 这是一个for循环语句,将在考生答完题后再次显示“输入一个<20的出题数”,以方便考生平时进行练习使用。 如果考生输入的数字为0,则关闭文件。 代码为: if(temp==0) { fclose(fp); return; } 接下来的一个for循环代码为: for(j=i=0;i { x=(int)((double)rand()/((double)RAND_MAX+1)*ran);//rand为随机数发生器 x=rand()/(RAND_MAX/ran+1); fseek(fp,fp1[x],0);//重定位流上的文件指针 printf("\n%d: ",i+1); for(ch=fgetc(fp);;) { printf("%c",ch); ch=fgetc(fp); if(ch=='$') { daan[j++]=fgetc(fp); break; } } } 这段代码用来随机产生题库中的N道试题,其中N由考生来输入。 在考生输入完答案串后,系统会自动判断正误,并给出正确答案。 算法分别为: x=(int)((double)rand()/((double)RAND_MAX+1)*ran) x=rand()/(RAND_MAX/ran+1); fseek(fp,fp1[x],0);//重定位流上的文件指针 printf("\n%d: ",i+1 在题库中每道题的最后会给出正确答案,有: “$”来标示。 指针指向次标示,当考生的答案不正确时,会显示“$”后的正确答案。 代码为以下的for循环: for(ch=fgetc(fp);;) { printf("%c",ch); ch=fgetc(fp); if(ch=='$') { daan[j++]=fgetc(fp); break; } } 后面的代码为显示在屏幕上的结果: daan[j]='\0'; printf("\n输入你的答案串"); scanf("%s",_daan); for(ia=k=i=0;i ='\0';i++) if(_daan[i]==daan[i]||_daan[i]-32==daan[i]) k++; elsecankao[ia++]=i+1; for(;i! =j;i++) { cankao[ia++]=i+1; _daan[i]=''; } y=j;if(k==j)printf("*****满分! 恭喜。 ******\n"); elseif(k==0)printf("*****零分! 加油! *****\n你做错了所有"); elseif(k>=(int)(y/100*75))printf("*****优秀! *****\n但你还是做错了"); elseif(k>=(int)(y/100*60))printf("*****及格! *****\n你总共做错了"); elseprintf("*****不及格! 继续努力! *****\n你做错了"); if(k! =j) { if(k! =0) for(i=0;i printf("%d,",cankao[i]); printf("题\n参考答案: \n"); for(i=0;i printf("%d题正确答案是%c;你的答案是%c\n",cankao[i],daan[cankao[i]-1],_daan[cankao[i]-1]); } } 考生输入答案: printf("\n输入你的答案串"); scanf("%s",_daan); 判断考生答案正误的算法为: for(ia=k=i=0;i ='\0';i++) if(_daan[i]==daan[i]||_daan[i]-32==daan[i]) k++; elsecankao[ia++]=i+1; 接下来根据考生回答问题的正确率分别给出不同的结果: for(;i! =j;i++) { cankao[ia++]=i+1; _daan[i]=''; } y=j;if(k==j)printf("*****满分! 恭喜。 ******\n"); elseif(k==0)printf("*****零分! 加油! *****\n你做错了所有"); elseif(k>=(int)(y/100*75))printf("*****优秀! *****\n但你还是做错了"); elseif(k>=(int)(y/100*60))printf("*****及格! *****\n你总共做错了"); elseprintf("*****不及格! 继续努力! *****\n你做错了"); 如果考生有做错的题目,系统可以给出正确答案,并记录考生的答案,代码为: if(k! =j) { if(k! =0) for(i=0;i printf("%d,",cankao[i]); printf("题\n参考答案: \n"); for(i=0;i printf("%d题正确答案是%c;你的答案是%c\n",cankao[i],daan[cankao[i]-1],_daan[cankao[i]-1]); } 至此,单项选择题标准化考试系统设计已经全部完成了。 4.系统实现 4.1系统运行环境 本套单项选择题标准化考试系统使用C语言编写的,可以在任何C语言可运行的环境下进行操作,如VC++6.0或Win-TC环境下都可运行。 值得注意的是,如果在Win-TC环境下运行,则需要把注释部分的//格式修改为/**/。 4.2系统功能实现 (1).试题库维护。 单选题及其答案的增加、删除、修改和存储。 最终用文件保存试题库。 (2).试题的抽取。 每次从试题库中可以随机抽出N道题(N由键盘输入)。 (3).学生答题。 根据当前题目和4个选项,用户输入自己的答案。 (4).自动判卷。 系统根据用户答案与标准答案,实现判卷并给出成绩。 经过几天的设计和编程,单项选择题标准化考试系统已经完成了。 大部分功能也实现了。 只是在试题库的维护时,要从文件中直接操作。 在Win-TC环境下运行时不能分屏,建议考生每次出题数目不要超过5道。 5.总结 5.1课后总结 学习C语言已经一个学期了。 对C语言有了一定的了解。 经过小学期的C语言课程设计,完成了单项选择题标准化考试系统的设计,对C语言又有了进一步的认识。 C语言是我们以后学习的基础,所以这门课程的学习十分重要的。 虽然以后没有C语言的课程了,但我们还要通过自身的努力,把这门课程学好,学精。 算法是C语言的灵魂,刚刚学习时还不懂这句话的含义,只想快一点编出程序和写代码。 现在才明白一个好的算法能让我们节省许多时间和精力。 我认为这是一门综合性很强的学科,有语言类的语法规则和各种要记住的词汇,也有数学上的逻辑应用和算法设计。 但是自己很喜欢这门课程,虽然我的成绩不很好。 在小学期当中,在网上看到了许多精美的程序,更激发了我学习C语言的热情。 我想在日后的学习中,兴趣会成为最好的老师。 虽然现在还不能编写出那么复杂的程序,但我想通过自身的努力,这个目标会实现的。 经过小学期的这几天学习和设计,完成了这个系统。 有点高兴,又有点紧张。 高兴的是自己完成了一个作品,紧张的是自己感觉到了C语言这门课程的难度。 在用到指针、文件等操作时还得现翻书,或查资料。 还有好多事不能自己独立完成。 最后想说的是,虽然C语言这门课程结束了,但对它的学习并没有结束。 5.2存在的主要问题 经过几天的学习,虽然完成了课程设计,但还是存在一些问题。 首先,在设计的单项选择题标准化考试系统中试题的增删、修改等操作要在文件中进行。 如果系统在Win-TC环境下运行,则输入试题数目过多时,无法看到前面的试题。 在这里建议应用此系统时每次出题的数目小于5。 其次,在C语言的学习过程中也存在许多问题。 自己对C语言的各知识点掌握的不够系统。 对数组、指针、文件、链表等难点应用起来还有些力不从心。 许多算法复杂的程序还读不懂。 在以后学习当中还要不断努力,学习C语言这门课程,也为学习其它高级语言打下良好的基础。 参考文献: : 1.《C语言程序设计实例精粹》.谭明金.电子工业出版社 2.《C语言编程技巧及实用程序荟萃》.鲁沐浴.电子工业出版社 3.《C语言解惑》.AlanR.Feuer.人民邮电出版社 4.《C语言实例解析精粹》.曹衍龙.人民邮电出版社 5.《C语言实战105例》.王为青.人民邮电出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 报告