标准化考试系统——C语言版_第1页
标准化考试系统——C语言版_第2页
标准化考试系统——C语言版_第3页
标准化考试系统——C语言版_第4页
标准化考试系统——C语言版_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

1、课 程 报 告课 程 名 称: 程序设计实践 专 业 班 级 : 计算机类1304班 学 生 姓 名 : 唐林 学 号 : 201316920403 任 课 教 师 : 唐建国 学 期 :2013-2014学年第二学期 课程报告任务书题 目标准化考试系统主要内容1.建立一个InsertNode函数来实现插入试题的功能。2.建立一个AddNode函数来实现添加试题的功能。3.建立一个Change函数来实现对试题进行修改的功能。4.新建一个DeleteNode函数来实现对试题的删除。5.建立个printNode函数实现对试题的输出功能。6.建立一个Match函数来判断答案是否正确。7.建立answ

2、er函数实现随机选题并进行答题和统计得分功能。8.在主函数main中,使用switch函数让用户进行选择。任务要求一、对该考试系统进行需求分析,找出该系统需要哪些功能来实现,在每个功能中运用学过的算法来实现,每个功能用不同的函数来实现,确定函数之间调用的关系。二、整个设计过程具体要求(1)需求分析 对案例系统进行分析,设计出需要完成的功能,完善各个模块的调用关系;(2)设计过程 进一步明确各模块调用关系,进一步完善模块函数细节(函数名、参数、返回值等)(3)实现过程 养成良好的编码习惯、完成各个模块并进行测试,最终完成系统整体测试;(4)总结阶段 按照要求完成系统设计和实现报告,并进行总结、答

3、辩。成绩评定报告撰写情况(30分)系统完成情况(30分)答辩情况(40分)总分内容20分规范程度5分程序测试5分基本功能20分扩展功能10分自述情况10分答辩情况30分成绩评定教师: 1 需求分析该系统包括以下功能:1. 进行随机答题并判卷2. 显示试题所有内容3. 插入试题4. 添加试题5. 自主选题并判卷6. 修改试题7. 删除试题8. 退出系统2 概要设计 2.1整体框架图标准化考试系统 退出系统 删 除 试 题修改试题添加试题显示试题所有内容进行随机答题并判卷自主选题并判题 图2-1-12.2 函数功能图 2.2.1 随机答题并判卷功能图进入函数answer(int sum,int N

4、) i=1,i<=sumN Y Num=rand()%sum 输 出 数 据 答案是否正确 “答案错误” “答案正确” 输出总成绩图2-2-1 2.2.2 修改试题功能图 进入Change(int &N) 输入修改的题号m i=0,i<NN i=m-1NY 进行修改 修改是否成功N修改成功 修改失败图2-2-22.2.3 删除试题功能图进入DeleteNode(int &N)输入删除题号n n>NYNTestquestionsn-1=Testquestionsn n+ N=N-1 删除成功删除失败 图2-2-32.3 自定义函数返回值函数名参数表函数功能Sta

5、tusSaveNodeint &N将试题存入文件中StatusReadNodeint &N 从文件中读取试题StatusInsertNodeint &N向试题库中插入试题StatusChangeint &N修改试题StatusDeleteNodeint &N删除试题voidprintNode(TestNode p,int n)输出试题StatusMatch(TestNode p,char m)检查答案voidanswer(int sum,int N)随机进行答题并判卷voidOtheranswer(int N,int s)自主选题作答并判卷StatusA

6、ddNodeint &N 向题库中添加试题 3 详细设计 3.1 添加试题将想要输入的是试题,从键盘输入,题库中总的题数作为结构数组的下标,存入一道题就将结构数组的下标向后移动一位,最后将存入最后一道题的下标返回,作为题库中的总题数。Status AddNode(int &N) /添加试题内容printf("如果不添加了试题了,在题目输入“*”结束!n");while(1) printf("请输入所要插入题题目、题干和选项:n");printf("请输入题目:");gets(TestquestionsN.subject

7、);if(strcmp(TestquestionsN.subject,"*")=0)break;printf("请输入选项A:");gets(TestquestionsN.option1);printf("请输入选项B:");gets(TestquestionsN.option2);printf("请输入选项C:");gets(TestquestionsN.option3);printf("请输入选项D:");gets(TestquestionsN.option4);printf("请

8、输入答案:");scanf("%c",&TestquestionsN.result);getchar();N+; /N表示结构体数组长度,通过加&号使其值能返回 return TRUE;3.2 修改试题 先从键盘中输入想要修改第几道试题,当题标输入m时,找到结构数组m-1对应的元素就是要修改的试题,再将修改的试题进行保存,从而实现对试题的修改功能。Status Change(int &N)int m,i;printf("请输入您要修改第几题?n");scanf("%d",&m);getchar

9、(); /吸收空格字符 for(i=0;i<N;i+)if(i=(m-1) printf("请输入新的题目:"); gets(Testquestionsm-1.subject); printf("请输入新的选项A:"); gets(Testquestionsm-1.option1); printf("请输入新的选项B:"); gets(Testquestionsm-1.option2); printf("请输入新的选项C:"); gets(Testquestionsm-1.option3); printf(&

10、quot;请输入新的选项D:"); gets(Testquestionsm-1.option4); printf("请输入新的答案:"); scanf("%c",&Testquestionsm-1.result); getchar();break;if(m>N)printf("修改试题失败!n");elseprintf("修改试题成功!n");return TRUE;3.3 删除试题 先从键盘中输入想要修改第几道试题,当题标输入n时,找到结构数组n-1对应的元素就是要删除的试题,在用一个fo

11、r循环,将n到N-1个元素向前移动,从而实现对试题的删除功能。 Status DeleteNode(int &N) /删除数组中的第n道题 int n;printf("输入你想是删除第几道试题:n");scanf("%d",&n);if(n>N)printf("删除不成功n");return ERROR;while(n<=N)Testquestionsn-1=Testquestionsn;n+;N=N-1;printf("删除成功n");return TRUE;3.4 随机选题并判题 学

12、生进入考试系统,输入形成试卷的题数,系统将会自动抽取试题,在进行作答之后,立刻能看到学生是否做对本道试题,如果作对,将会显示“答案正确”,否者会显示“答案错误”并且会显示正确答案。 void answer(int sum,int N) /随机进行答题 int i,score=0,Num; char r; for(i=1;i<=sum;i+)Num= rand()%N; /随机函数,以随机选定何题进行解答 printNode(TestquestionsNum,i); printf("n"); printf("n请输入第(%d)答案:",i); sca

13、nf("%c",&r);getchar();if(Match(TestquestionsNum,r) /调用函数Match判断所输入的答案与标准答案是否相同printf("n答案正确!n");score+;else printf("n答案错误!n"); printf("正确答案为:%cn",TestquestionsNum.result);printf("n你的总成绩为:%dn",score);3.5 自主选题并判题 通过函数中传递题库的总数和要形成试卷的总题数,输入将要选择的试题,将输

14、入的试题在结构数组中找到,可以进行作答,当输入的答案不与标准答案匹配时,答卷系统将会自动报错,并且输出正确的答案,如果输入正确将会显示“答案正确”,在最后答卷系统将会输出总的成绩。 void Otheranswer(int N,int s)int i,score=0,k;char m;for(i=1;i<=s;i+)printf("输入要选择第几题?n");scanf("%d",&k);while(k<=0|k>N)printf("输入的题号在题库中不存在!n");printf("n请重新输入正确的

15、题号:");scanf("%d",&k);printNode(Testquestionsk-1,i);printf("n请输入(%d)答案:",i);getchar();scanf("%c",&m);getchar();if(m=Testquestionsk-1.result)printf("答案正确!n"); score+;else printf("答案错误!n");printf("正确答案为:%cn",Testquestionsk-1.resul

16、t);printf("总分为:%dn",score);3.6 登陆考试系统函数 屏幕上会显示教师和学生两种端口,如果过选择学生端口将会进入登陆和注册两个选项,已经注册过的就可以直接登陆了,反之则进行注册。进入学生答题系统后可以选择随机答题或者自主选题进行作答两种方式。登陆教师窗口后,可以直接查看试题、删除试题、修改试题、添加试题的功能。void Denglu()FILE *fp1;int a,c,num,flag=1;int i=0;char Mima20="0",b20;printf("ttt1 进入登录n");printf(&qu

17、ot;nttt2 进入注册n");scanf("%d",&c);while(flag)if(c<1|c>2)printf("n请输入正确的选项!n");scanf("%d",&c);flag=1;elseflag=0;if(c=2)printf("请注册:n");Zhuce();else if(fp1=fopen("student.txt","rb")=NULL)printf("打开文件失败!");exit(0);pr

18、intf("请输入学号:");scanf("%d",&num);printf("请输入密码");while(c=getch()!='r')Mimai=c;i+;if(c!='b')printf("*");elseprintf("bb"); rewind(fp1); while(!feof(fp1)fscanf(fp1,"%d",&a);fscanf(fp1,"%s",&b);if(a=num&

19、&strcmp(b,Mima)=0)break; while(a!=num|strcmp(b,Mima)!=0)i=0;printf("n错误,重新输入:n");printf("请输入学号:");scanf("%d",&num);printf("请输入密码");while(c=getch()!='r')Mimai=c;i+;if(c!='b')printf("*");elseprintf("bb");rewind(fp1);wh

20、ile(!feof(fp1)fscanf(fp1,"%d",&a);fscanf(fp1,"%s",&b);if(a=num&&strcmp(b,Mima)=0)break;printf("tt欢迎登陆单选题标准化考试系统!n");system("pause");getchar();printf("n");if(fclose(fp1)printf("关闭文件失败!n");exit(0);*源代码#include <stdio.h>#

21、include <stdlib.h>#include<string.h>#include<conio.h>#define TRUE 1#define ERROR 0#define MAX 30typedef int Status;typedef structchar option130,option230,option330,option430,subject150;char result;int q;TestNode;TestNode TestquestionsMAX;Status SaveNode(int &N) /把结构体数组保存到文件&quo

22、t;cheng"中,如成功保存返回TRUE,否则返回ERRORint i;FILE *fp;if(fp=fopen("cheng","wb")=NULL) return ERROR;for(i=0;i<N;i+)fwrite(&Testquestionsi,sizeof(TestNode),1,fp);fclose(fp);return TRUE;Status ReadNode(int &N) /从文件读出结构体数组的内容,如成功读取返回TRUE,否则返回ERRORFILE *fp;int i=0;if(fp=fopen(

23、"cheng","rb")=NULL)return ERROR;while(!feof(fp) / 用feof检测文件是否结束,如果结束,返回正确fread(&Testquestionsi,sizeof(TestNode),1,fp);i+; N=i-1;return TRUE;void Zhuce()void Denglu();int i,m;i=0;char n20="0",c;FILE *fp1;if(fp1=fopen("student.txt","ab")=NULL)print

24、f("打开文件失败!n");exit(0);printf("请注册学号:");scanf("%d",&m);fprintf(fp1,"%d ",m);printf("请设置密码(20字符以内):");while(c=getch()!='r')ni=c;i+;if(c!='b')printf("*");elseprintf("bb");fprintf(fp1,"%sn",n);if(fclose(f

25、p1)printf("关闭文件失败!n");exit(0);printf("n");printf("ttt注册完成!n");Denglu();void Denglu()FILE *fp1;int a,c,num,flag=1;int i=0;char Mima20="0",b20;printf("ttt1 进入登录n");printf("nttt2 进入注册n");scanf("%d",&c);while(flag)if(c<1|c>2

26、)printf("n请输入正确的选项!n");scanf("%d",&c);flag=1;elseflag=0;if(c=2)printf("请注册:n");Zhuce();else if(fp1=fopen("student.txt","rb")=NULL)printf("打开文件失败!");exit(0);printf("请输入学号:");scanf("%d",&num);printf("请输入密码&quo

27、t;);while(c=getch()!='r')Mimai=c;i+;if(c!='b')printf("*");elseprintf("bb"); rewind(fp1); while(!feof(fp1)fscanf(fp1,"%d",&a);fscanf(fp1,"%s",&b);if(a=num&&strcmp(b,Mima)=0)break; while(a!=num|strcmp(b,Mima)!=0)i=0;printf("n

28、错误,重新输入:n");printf("请输入学号:");scanf("%d",&num);printf("请输入密码");while(c=getch()!='r')Mimai=c;i+;if(c!='b')printf("*");elseprintf("bb");rewind(fp1);while(!feof(fp1)fscanf(fp1,"%d",&a);fscanf(fp1,"%s",&

29、;b);if(a=num&&strcmp(b,Mima)=0)break;printf("tt欢迎登陆单选题标准化考试系统!n");system("pause");getchar();printf("n");if(fclose(fp1)printf("关闭文件失败!n");exit(0);Status AddNode(int &N) /添加试题内容printf("如果不添加了试题了,在题目输入“*”结束!n");while(1) printf("请输入所要插入题

30、题目、题干和选项:n");printf("请输入题目:");gets(TestquestionsN.subject);if(strcmp(TestquestionsN.subject,"*")=0)break;printf("请输入选项A:");gets(TestquestionsN.option1);printf("请输入选项B:");gets(TestquestionsN.option2);printf("请输入选项C:");gets(TestquestionsN.option3)

31、;printf("请输入选项D:");gets(TestquestionsN.option4);printf("请输入答案:");scanf("%c",&TestquestionsN.result);printf("请输入试题难度:");scanf("%d",&TestquestionsN.q);getchar();N+; /N表示结构体数组长度,通过加&号使其值能返回 return TRUE;void printNode(TestNode p,int n) /输出第n道

32、题题目printf("(%d) ",n);printf("%sn",p.subject);printf(" A %s ",p.option1);printf(" B %s n",p.option2);printf(" C %s ",p.option3);printf(" D %s ",p.option4);printf(" 试题难度为:%dn",p.q);Status Change(int &m) int i;printNode(Testquest

33、ionsm-1,m); printf("n");printf("修改题目请按 1n");printf("修改选项A请按 2n");printf("修改选项B请按 3n");printf("修改选项C请按 4n");printf("修改选项D请按 5n");printf("修改标准答案请按 6n");printf("修改试题难度请按 7n");scanf("%d",&i);getchar(); /吸收空格字符s

34、witch(i)case 1: printf("n请输入新的题目:"); gets(Testquestionsm-1.subject); break;case 2:printf("请输入新的选项A:"); gets(Testquestionsm-1.option1); break;case 3: printf("请输入新的选项B:"); gets(Testquestionsm-1.option2); break;case 4:printf("请输入新的选项C:"); gets(Testquestionsm-1.op

35、tion3); break;case 5:printf("请输入新的选项D:"); gets(Testquestionsm-1.option4); break;case 6:printf("请输入新的答案:"); scanf("%c",&Testquestionsm-1.result); break;case 7:printf("请输入新的试题难度:");scanf("%d",&Testquestionsm-1.q);break;default:printf("请输入正

36、确的修改选项n");break;return TRUE;Status InsertNode(int &N)int i,j,P;printf("输入要插入到第几题?n");scanf("%d",&i);getchar();N=N+1;for(j=N-1;j>=(i-1);j-)Testquestionsj=Testquestionsj-1;printf("请输入题目:");gets(Testquestionsi-1.subject);printf("请输入选项A:");gets(Tes

37、tquestionsi-1.option1);printf("请输入选项B:");gets(Testquestionsi-1.option2);printf("请输入选项C:");gets(Testquestionsi-1.option3);printf("请输入选项D:");gets(Testquestionsi-1.option4);printf("请输入答案:");scanf("%c",&Testquestionsi-1.result);printf("请输入试题难度:&

38、quot;);scanf("%d",&Testquestionsi-1.q);getchar();return TRUE;Status DeleteNode(int &N) /删除数组中的第n道题 int n;printf("输入你想是删除第几道试题:n");scanf("%d",&n);if(n>N)printf("删除不成功n");return ERROR;while(n<=N)Testquestionsn-1=Testquestionsn;n+;N=N-1;printf(&

39、quot;删除成功n");return TRUE;Status Match(TestNode p,char m) /判断m是否为p题目的答案,若是返回TRUE,否则返回ERRORif(m=p.result)return TRUE;else return ERROR;void answer(int sum,int N) /随机进行答题 int i,score=0,Num; char r; for(i=1;i<=sum;i+)Num= rand()%N; /随机函数,以随机选定何题进行解答 printNode(TestquestionsNum,i); printf("n&

40、quot;); printf("n请输入第(%d)答案:",i); scanf("%c",&r);getchar();if(Match(TestquestionsNum,r) /调用函数Match判断所输入的答案与标准答案是否相同printf("n答案正确!n");score+;else printf("n答案错误!n"); printf("正确答案为:%cn",TestquestionsNum.result);printf("n你的总成绩为:%dn",score);

41、void Otheranswer(int N,int s)int i,score=0,k,j,y;char m;for(i=1;i<=s;i+)printf("输入试题难度n");scanf("%d",&k);while(k<0|k>2)printf("题库中没有该难度的试题!n");printf("n请重新输入试题难度:");scanf("%d",&k);for(j=0;j<N;j+)if(y=j)continue;if(Testquestionsj.q

42、=k)printNode(Testquestionsj,i);printf("n请输入(%d)答案:",i);getchar();scanf("%c",&m);getchar();if(Match(Testquestionsj,m)printf("答案正确!n"); score+;else printf("答案错误!n");printf("正确答案为:%cn",Testquestionsj.result); break;y=j;printf("总分为:%dn",sco

43、re);void main()char flag; int N=0,i,sum,m,s,score=0,chose,Chose=3;ReadNode(N);while(Chose<1|Chose>2)printf("ttt请选择自己的类型n");printf("ttt1 学生端口n");printf("ttt2 教师端口n");scanf("%d",&Chose);system("cls");switch(Chose)case 1:Denglu(); system("

44、;cls");while(1)printf("ttt单项选择题标准化考试系统进行答题n ");printf("ttt1 进行随机答题并判卷n");printf("ttt2 自主选题并判卷n");printf("ttt3 退出系统n");scanf("%d",&chose);getchar();switch(chose) case 1:system("cls"); ReadNode(N); printf("请输入试题的总题数:"); sca

45、nf("%d",&sum);getchar(); if(N=0) printf("对不起,题库中没有试题!n"); printf("按任意键回到菜单!n"); getchar(); else answer(sum,N); getchar(); break; case 2:system("cls"); ReadNode(N); printf("请输入试卷的总题数:"); scanf("%d",&s); Otheranswer(N,s); getchar(); b

46、reak; case 3:printf("你将退出系统(Y or N)?"); scanf("%c",&flag);getchar(); if(flag='Y'|flag='y') exit(0); system("cls");break; default:printf("请输入正确选择!n");case 2:printf("ttt欢迎进入教师题库管理n");while(1) printf("ttt单项选择题标准化考试系统n "); p

47、rintf("n"); printf(" ttt1 显示所有试题内容n"); printf(" ttt2 添加试题n"); printf(" ttt3 修改试题n"); printf(" ttt4 删除试题n"); printf(" ttt5 插入试题n"); printf(" ttt6 退出系统n"); scanf("%d",&chose);getchar(); switch(chose) case 1:system(&quo

48、t;cls"); ReadNode(N); if(N=0) printf("题库中没有试题!n"); printf("按任意键回到菜单!n"); getchar();for(i=1;i<=N;i+) printNode(Testquestionsi-1,i); printf("n"); break; case 2:system("cls"); ReadNode(N); AddNode(N); if(SaveNode(N) printf("试题添加成功!n"); else prin

49、tf("试题添加失败!n"); break; case 3:system("cls"); printf("请输入您要修改第几题?n"); scanf("%d",&m); ReadNode(m); Change(m); if( SaveNode(m) printf("修改成功n"); else printf("修改失败"); break; case 4:system("cls"); ReadNode(N); DeleteNode(N); SaveNode(N);

温馨提示

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

评论

0/150

提交评论