沈阳航空工业学院课程设计学号200504061287班级5406108姓名唐涛指导教师尹航2007年7月16日沈阳航院设计用纸I沈阳航空工业学院课程设计任务书机械与汽车学院机械设计及其自动化专业5406108班学号200504061287一、课程设计题目:设计一个小学生实用的CAI教学软件二、课程设计工作自2007年7月9日起至2007年7月14日止三、课程设计内容:运用所学的C语言知识,编制和调试程序,具有如下功能:(1)具有试题库,可以实现随机抽题(2)题库中具有加、减、乘、除四种运算(3)具有自学和测试功能(4)自己再加一项功能四、课程设计要求:程序质量:贯彻结构化程序设计思想。用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。用户界面中的菜单至少应包括“自学”、“测试”、“退出”3项。代码应适当缩进,并给出必要的注释,以增强程序的可读性。课程设计说明书:课程结束后,上交课程设计说明书(打印稿和电子稿),其内容如下:封面课程设计任务书目录需求分析(分析题目的要求)程序流程图(总体流程图和主要功能模块流程图)核心技术的实现说明及相应程序段个人总结参考资料源程序及适当的注释指导教师:____________________学生签名:____________________沈阳航院设计用纸II目录一、需求分析............................................................3二、程序流程图........................................................3三、核心技术的实现说明及相应程序段...............7四、个人总结...........................................................12五、参考文献...........................................................12六、源程序...............................................................12沈阳航院设计用纸3一、需求分析经过对程序设计题目的分析可知,整个程序的设计实现大致分为三个模块,其中每一个模块对应一个函数,他们的功能分别是:自学函数(study),测试函数(test),随机出题函数(suiji),其中自学函数和测试函数函数严格按照题目的要求,随机出题函数则可被自学函数和测试函数所调用。1、自学函数主要实现程序运行时学生可以无限制的作题,每做完一题时系统提示是否继续,学生可自己选择。2、测试函数主要实现程序运行时学生可以自己设定想要作题的个数,程序并进行自动打分。3、随机出题函数运行该函数时由电脑随机出题,可被自学函数和测试函数所调用。二、程序流程图1.程序整体结构图沈阳航院设计用纸4图(1)程序整体结构图2.随机出题函数suiji当(1)真输入n=1?假真n=2?假n=3?自学函数测试函数真假study()test()退出输入错误exit()沈阳航院设计用纸5图(2)随机出题函数suiji图3.自学函数studyintc;inta;inb;inttfuhao=random(4)+1当(fuhao)真case1假真case2假真if(ab)假真case3假c=a;真case4假a=b;真if(ab)假b=c;c=a;a=bb=c;while(b==0)while((a%b))=0)T=a+b;T=a-b;T=a*b;T=a/b;当(fuhao)真case1假真case2假真case3假真case4假a+b=a-b=a*b=a\b=沈阳航院设计用纸6图(3)自学函数study图4.测试函数testinttimu=1;intxuanze;intUserda;randomize();clrscr();clrscr();当(1)suiji();电脑随机题;用户输入答案;当(Userda!=T)输入scanf(%d,&Userda);答案正确;timu++;构造Loop2循环;(xuanze=='y'||xuanze=='Y')真假(xuanze=='n'||xuanze=='N')真假continue;main();incorrectcode!继续作题返回主函数gotoLoop2沈阳航院设计用纸7图(4)测试函数test图三、核心技术的实现说明及相应程序段本程序有三个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他的函数来实现要求的所有功能,三个函数都是较为核心的部分,下面分别进行说inttimu=1;intUserda;randomize();clrscr();clrscr();清除屏幕上原有的内容;输入“测试开始”scanf(%d,&h);请输入想要答题的个数;当(timu=h)printf(\nQuestion:%d,timu);输出题号suiji();调用随机出题函数;scanf(%d,&Userda);用户输入答案当(Userda!=T)真(d=10)假真(du)假return;答案错误;d=d-10;scanf(%d,&Userda);请重新输入答案;d=d+10;答案正确,timu++;考试结束输出最后得分!回到主函数,main();沈阳航院设计用纸8明。1.随机抽题函数由电脑随机产生两个数,并随机产生一个运算符号,组成一个运算,由程序计算出真实的答案,放在变量T中,供自学函数和测试函数调用,具体程序段如下:voidsuiji(){intc;inta;intb;fuhao=random(4)+1;/*在1到4之间产生一个随机数,用来表示+,—,*,/等运算符号,放在fuhao这个变量当中*/switch(fuhao)/*由fuhao判断运算是什么*/{case1:{a=random(10);b=random(10);T=a+b;break;}case2:{a=random(10);b=random(10);if(ab){c=a;a=b;b=c;}T=a-b;break;}case3:{a=random(10);b=random(10);T=a*b;break;}case4:{do{do{a=random(10);b=random(10);if(ab)沈阳航院设计用纸9{c=a;a=b;b=c;}}while(b==0);/若b等于0/}while((a%b)!=0);/*当a能被b整除时*/T=a/b;break;}}switch(fuhao)/*由fuhao决定输出的情况*/{case1:{printf(\n%d+%d=,a,b);break;}case2:{printf(\n%d-%d=,a,b);break;}case3:{printf(\n%dX%d=,a,b);break;}case4:{printf(\n%d/%d=,a,b);}}}2.自学函数先调用随机函数,产生一个运算,用户给出答案,如果答案错误,系统提示:答案错误,请重新输入答案,直到答案正确为止,当答案正确,系统提示是否继续做题,输入(N/Y)确认,如果输入除N,Y以外的其他代码,系统提示:代码错误,请重新输入,其具体程序段如下:voidstudy(){inttimu=1;intxuanze;intUserda;randomize();/*保证每次运行程序时产生的随机数序列不同*/clrscr();clrscr();/*每次程序运行时清除以前内容的语句*/printf(\n-------------------------------------);printf(\n-------------------------------------);printf(\nstudystart:);printf(\n-------------------------------------);while(1){printf(\nQuestion:%d,timu);/*输出题号*/printf(\n-------------------------------------);suiji();/*调用随机抽题函数*/scanf(%d,&Userda);/*用户输入答案*/while(Userda!=T){printf(\n-------------------------------------);printf(\n-------------------------------------);沈阳航院设计用纸10printf(\nyouareWrong!);printf(\n-------------------------------------);printf(\nInputTheAnswerAgain:);scanf(%d,&Userda);}printf(\n-------------------------------------);printf(\n-------------------------------------);printf(\nRight!);printf(\n-------------------------------------);printf(\n-------------------------------------);timu++;Loop2:printf(\nDoyouwanttocontinue?(Y/N));/*构造Loop循环*/scanf(%s,&xuanze);/*输入要操作的代码*/if(xuanze=='y'||xuanze=='Y')continue;/*继续做题*/elseif(xuanze=='n'||xuanze=='N')main();/*停止做题,返回主函数*/else{printf(\n-------------------------------------);printf(\nWrong!Pleaseenterthecorrectcode!\n);gotoLoop2;}/*输入代码错误,回到Loop循环*/}}3.测试函数程序开始后,先由用户输入想要答题的个数,然后调用随机抽题函数,产生一个运算,用户给出答案,如果答案错误,系统提示:答案错误,请重新输入,直到答案正确为止,当得分大于或等于10时,每答对一题时,得分加10分,答错一题时,减10分,当得分小于10分时,不减分,当答题的个数等于设定的个数时,程序运行结束,在用户界面输出:测试结束,并给出最后得分,具体程序段如下:沈阳航院设计用纸11.voidtest(){inttimu=1;intUserda;randomize();/*保证每次运行程序时产生的随机数序列不同*/clrscr();clrscr();/*每次程序运行时清除以前内容的语句*/printf(\n-------------------------------------);printf(\n-------------------------------------);printf(\nteststart:);printf(\n-------------------------------------);printf(\nPleaseInputQuestionCount:);printf(\n-------------------------------------);scanf(%d,&h);/*输入想要答题的个数*/printf(\n-------------------------------------);while(timu=h)/*当答题个数小于或等于设定的个数时*/{printf(\nQuestion:%d,timu);printf(\n-------------------------------------);suiji();/*调用随机抽题函数*