C语言课程设计(单项选择题标准化考试系统)报告_第1页
C语言课程设计(单项选择题标准化考试系统)报告_第2页
C语言课程设计(单项选择题标准化考试系统)报告_第3页
C语言课程设计(单项选择题标准化考试系统)报告_第4页
C语言课程设计(单项选择题标准化考试系统)报告_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、重 庆 理 工 大 学课程设计课程程序设计基础 C题目C语言综合程序设计院系名称班级学生姓名学号指导教师评阅教师时间2011.61 问题描述题目十四:单项选择题标准化考试系统设计功能要求:( 1)、用文件保存试题库。 (每个试题包括题干、 4 个备选答案、标准答案)( 2)、试题录入:可随时增加试题到试题库中( 3)、试题抽取:每次从试题库中可以随机抽出N道题( N 由键盘输入)( 4)、答题:用户可实现输入自己的答案( 5)、自动判卷:系统可根据用户答案与标准答案进行评分。2 系统分析2.1题目要求程序分 4 个函数来实现菜单操作、将题目装入内存、开始答题、题目的录入。1. 菜单操作:Mai

2、n 函数,实现程序的菜单操作。根据用户选择的菜单的不同选项调用不同的函数,实现“开始答题” 、“添加试题” 、“退出系统”等功能。2. 将试题装入内存:此函数由“开始答题”函数调用。调用此函数时传递一个整型参数m,函数开辟内存空间将试题文件( “ C:test.txt”)中第 m道题装入内存中,并返回总题数。如果传递参数m为-1 ,函数将直接返回试题文件中所储存的总题数,不将任何试题装入内存中。3. 开始答题:函数会让用户输入要答的题目数并进行判断,若用户要求的答题数大于总题数程序会要求用户重新输入。程序生成随机数并判断是否合法,如果合法就调用“将试题装入内存”函数,参数为随机数。 在屏幕上输

3、出题干和选项并让用户输入答案。判断用户输入答案是否正确。4. 添加试题:打开储存试题的文件(“ C:test.txt”),开辟内存空间。进行试题信息输入。自动保存文件。2.2 算法设计(1) 模块一:菜单操作模块该模块实现程序的菜单操作。实现算法如下 :1在屏幕上输出菜单选项。2接受用户输入。3判断用户输入,跳转到对应函数入口。(2) 模块二:将题目装入内存模块函数开辟内存空间将试题文件中题目装入内存中。实现算法如下:1遍历文件判断回车符个数(计算题目数) 。2根据提供参数判断是否将当前题目装入内存。3开辟内存空间,将题目信息装入内存。4关闭文件返回题目总数。(3) 模块三:开始答题模块函数会

4、让用户输入要答的题目数, 在屏幕上输出题干和选项并让用户输入答案。 判断用户输入答案是否正确。实现算法如下:1接受用户输入题目数,判断是否合法(大于0、小于总题数) 。2置随机数并判断随机数是否合法。3调用将题目装入内存模块题目装入内存。4在屏幕上输出题目,接受用户输入答案。5判断用户输入的答案是否正确,输出答题结果统计。(4) 模块四:添加试题模块打开储存试题的文件进行试题信息输入。实现算法如下:1打开文件。2开辟内存空间,接受用户输入题目信息。3判断用户输入是否合法。4写到文件并保存。2.3 流程图1. 菜单操作模块:2. 将题目装入内存模块:3. 开始答题模块:4. 添加试题模块:2.4

5、 关键问题文件读写时文件指针的移位:当用fgetc()函数遍历文件时文件指针是顺序移动的,当遇到回车符时才会判断出文件在第几行。而当读取文件信息的时候文件指针的位置应该在行首,这是就要用到fseek()函数将文件指针移位。而且还要恢复文件指针的位置,用于继续判断当前是文件的第几行。3 系统实现3.1源代码#include #include #define LEN sizeof(struct test)struct testchar que81;char answer181;char answer281;char answer381;char answer481;char ture;struct

6、 test *next;struct test *head;/全局变量储存第一个结构体的指针int zts(int m)/将第 m道题装入内存,输入-1 时将返回总题数FILE *fp;struct test *p1=NULL;char ch,ch15;int i,n=0,wz,py;if(fp=fopen(c:test.txt,r)=NULL)/只读方式打开文件printf(文件打开失败请检查C盘下的test.txt文件。n);exit(0);dopy=1;ch=fgetc(fp);for(i=0;ch!=n&ch!=-1;i+)/循环判断回车符个数py+;ch=fgetc(fp);n+;/

7、储存行数的变量if(n=m)/如果当前行数与传入参数相等if(p1=NULL)/判断是否是第一次开辟内存空间p1=(struct test *)malloc(LEN);head=p1;p1-next=NULL;elsep1-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,&p 1-answer4,&ch

8、1);fseek(fp,wz+1,0);/调整指针位置到行末p1-ture=ch10;break;/将数据装入内存后跳出循环while(!feof(fp);/文件结束跳出循环fclose(fp);return n;/返回题目总数nvoid exe1()void main();void exe2();int n,m=0,tm,i,t=0,f=0;char ans2;struct test *p1;system(cls);printf(请输入要答题数:);scanf(%d,&n);tm=zts(-1);if(0n|ntm)printf(答题数应小于总数!);exe1();for(i=0;in;i+

9、)/n为用户要答题数dom=rand();/置随机数while(!(0m&mque,p1-answer1,p1-answer2,p1-answer3,p1-answer4);scanf(%s,&ans);if(toupper(ans0)=p1-ture)/判断用户输入答案是否正确:printf(恭喜你答对了!nn);t+;/回答正确统计elseprintf(对不起,你答错了。 。 n 正确答案是:%cnn,p1-ture);f+;/回答错误统计p1=head;dohead=p1-next;free(p1);p1=head;while(p1!=NULL);/释放结构体占用内存printf(*n)

10、;printf(n已 完 成 测 试 !n共 做 %d 道 题 : %d 错 误 , %d 正 确 。 n正 确率: %5.2f%nn,n,f,t,(float)t/n*100);printf(*n);printf(nn1.继续答题; 2. 添加题目; 3. 返回主菜单; n 请选择: );i=0;scanf(%d,&i);if(i=1)exe1();/继续答题elseif(i=2)exe2();/添加题目elsemain();/返回主菜单void exe2()/实现用户自主输入题目void main();system(cls);int n;FILE *fp;if(fp=fopen(c:tes

11、t.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-que0=0);doprintf(请输入选项A: );scanf(%s,&p1-answer1);while(p1-answer1=0);doprintf(请输入选项B: );scanf(%s,&p1-answer2);while(p1-answer2=0);doprintf(请输入

12、选项C: );scanf(%s,&p1-answer3);while(p1-answer3=0);doprintf(请输入选项D: );scanf(%s,&p1-answer4);while(p1-answer4=0);printf(请输入答案:);doscanf(%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);f

13、putc( ,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();elsemain();elsefree(p1);exe2();void main()system(cls);int n;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();break;case 2:exe2();break;case 3:printf(n-,goodbye!n);while(n!=

温馨提示

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

评论

0/150

提交评论