




免费预览已结束,剩余18页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
三峡大学理学院2010级光信专业高级语言程序设计课程设计说明书设计题目:小学数学出题系统班 级:2班学 号:2010146101姓 名:张锐完成日期:2011/11/26目录一 设计任务-3二 正文-3(1) 需求分析-3(2) 使用说明-4(3) 模块划分和其功能-4 (4) 流程图-5三 源程序-7四 设计小结-21五 参考文献-22一 设计任务小学数学出题系统概述:为小学生教学服务,能够根据小学生的需要随机抽出两位数的数学运算题,可根据需要进行加减乘除运算。由学生在电脑上答题,并对其判断正误和记分。另外可以根据需要随机抽出四则运算的混合运算题同样应对其判断正误和记分。基本要求: 抽题选择功能 两位数四则与算的出题功能 四则混合运算的抽题功能 答案判断正误功能 分数累积功能 出题存储功能等二正文 (1)需求分析1.主界面设计,选择各种功能,按5键退出进行其他功能。2. 系统随机出题,显示算式,含加,减,乘,除四则运算。3. 练习时,系统随机出题,键入答案,可显示对错。4. 测试时,系统自动出10道题,每题10分,统计得分。显示各题的对错信息,错误的给出答案。(2)使用说明该程序可以实现练习和测试基本功能,在初始画面中可以进行任意选择。在练习结束后,该系统可以给出总答题数和总得分。在测试中,系统任意出10道试题进行测试,最后系统给出每道题的应答情况和相应的得分。该系统从main()开始运行,用ChooseFunc1()函数先调用主菜单,然后根据菜单的提示调用函数ChooseFunc2(),再根据菜单分别选择加、减、乘、除函数,进入选题数阶段,利用while循环选择要做的题目.(3)模块划分及功能 1选择界面:在进入该系统后,须选择练习或者测试。 2练习界面:在选择了练习后,系统自动进入练习界面,使用者开始做练习。(1).注册模块。(2).开始测试模块。 注册后,显示主菜单ChooseFunc1(),如图:选择1进入开始测试模块,此时引入时间,定义全局变量hour1和min1,scanf(%d,%d,&hour1,&min1);手动输入这两个数。如图:之后出现ChooseFunc2()菜单功能选择函数,如图: (4)流程图开始输入学号输入姓名主菜单开始测试查看排名错题重做查看结果结束测试子菜单加法减法乘法除法选择题数选择难度测试保存退出三源程序#include /C语言标准输入输出头文件#include /字符串操作需要用到的头文件#include /文件操作需要用到的头文件#include /产生随机数需要用到的头文件int hour1=0,min1=0,hour2=0,min2=0,c=0;float A=0;struct Student char name21; /姓名 char num10; /学号 float avscore;student30000;/结构体数组,存储学生的信息,在此初定为30000,可改/*/void Savemessage() /保存学生输入信息的函数 FILE *fp,*fp1,*fp2; /定义文件指针,/以下判断文件打开与否 ,a方式打开则可向文件尾写数据 if(fp=fopen(studentmessage.txt,a)=NULL)/打开文件studentmessage.txt printf(打开文件失败n); exit(0); if(fp1=fopen(TestResult.txt,a)=NULL) /打开文件TestResult.txt printf(打开文件失败n); exit(0); if(fp2=fopen(failedResult.txt,a)=NULL)/打开文件failedResult.txt printf(打开文件失败n); exit(0); fclose(fp2); printf(输入姓名:); /以下要学生输入个人信息 scanf(%s,); printf(输入学号:); scanf(%s,&student0.num); fwrite(&student0,sizeof(struct Student),1,fp); /向文件studentmessage.txt中写入一条记录,即刚刚输入的学生信息 fprintf(fp,n);/向文件studentmessage.txt中写入换行符号,换行符不可见 fprintf(fp1,姓名:%sn,); fclose(fp); /关闭文件studentmessage.txt/以下为向文件TestResult.txt中写入刚刚输入的学生信息 fprintf(fp1,学号:%sn,student0.num); fclose(fp1); /关闭文件TestResult.txt system(cls); /清屏/*/void sortbychengji() FILE *fp5; int i,j,m,n,N=1; student0.avscore=A/c; fp5=fopen(nrecord.txt,a+); fprintf(fp5,%s %s %fn,,student0.num,student0.avscore);/将数据写入文件nrecord.txt中 fclose(fp5); fp5=fopen(nrecord.txt,rb);for(i=0;!feof(fp5);i+) fscanf(fp5,%s %s %fn,,studenti.num,&studenti.avscore); fclose(fp5); m=i;struct Student temp; for(i=0;im;i+)n=0;for(j=0;jm-1;j+)if(studentj.avscorestudentj+1.avscore)n=1;strcpy(,); /利用结构变量temp实现数组元素的交换 strcpy(temp.num,studentj.num); temp.avscore=studentj.avscore; strcpy(,studentj+1.name); strcpy(studentj.num,studentj+1.num);studentj.avscore=studentj+1.avscore; strcpy(studentj+1.name,); strcpy(studentj+1.num,temp.num);studentj+1.avscore=temp.avscore;if(n=0) break; /若n=0,意味着没有交换了,排序已经完成printf(排序结果由高到低:n);printf( sort name number avscoren);for(i=0;im;i+)printf(第%d名:%s %s %.1fn,N+,,studenti.num,studenti.avscore); /*/void Judge() /判断函数 FILE *fp;/文件指针/以下判断文件打开与否 ,r为只读打开方式 if(fp=fopen(studentmessage.txt,r)=NULL) /以下判断文件打开与否 /打开文件studentmessage.txt fp=fopen(studentmessage.txt,w+); /如果没有studentmessage.txt文件,则新建此文件,w+打开方式为新建一个文件 printf(无文件记录,已新建.n); int i=0; char num10; /变量,注册的学号 while(!feof(fp) /判断是否到了文件尾 fread(&studenti,sizeof(struct Student),1,fp); /一行一行从文件中读出学生信息,保存在结构体数组student中 fscanf(fp,n); /读取换行符 i+; /i变量保存学生记录个数 system(cls); /清屏 fclose(fp);/*/void Addition(int number) /加法运算函数,number为题目数形参 FILE *fp,*fp2,*fp3; if(fp=fopen(TestResult.txt,a)=NULL) printf(打开文件失败n); exit(0); if(fp2=fopen(failedResult.txt,a)=NULL) printf(打开文件失败n); exit(0); if(fp3=fopen(rightResult.txt,a)=NULL) printf(打开文件失败n); exit(0); int num1,num2,num3,num4,m,n,count1=0,count2=0; float average; /正确率变量,注意是float类型 srand(time(0); /初始化随机数,如果没有此语句,则每次运行程序时的随机数是一样的 fprintf(fp,加法测试:n); /向文件写入 fprintf(fp,被加数 + 加数 = 你的结果 是否正确n);/向文件写入 printf(-n); printf(- 选择难度-n); printf(- 1.简单-n); printf(- 2一般-n); printf(- 3.困难-n); printf(-n); printf(请选择难度(1/2/3): ); scanf(%d,&m); while(m3) /不在以上所列的功能以内时循环 printf(超出功能范围,请重新选择(1/2/3):); scanf(%d,&m); system(cls); /清屏 if(m=1) n=10; /将m的值转化为对应的n值,从而使随机函数出现1位,2位,3位。 if(m=2) n=100 ; else if(m=3) n=1000 ; for(int i=0;inumber;i+) /小于测试题目数时,循环 if(m=1) num1=rand()%n; /产生随机数,赋值给num1,作为被加数 num2=rand()%n; /产生随机数,赋值给num2,作为加数 if(m=2) num1=10+rand()%(n-10); num2=10+rand()%(n-10); if(m=3) num1=100+rand()%(n-100); num2=100+rand()%(n-100); num3=num1+num2; /num3保存正确结果 printf(%d +|%d = ,num1,num2);/在终端屏幕上输出题目 scanf(%d,&num4); /你要输入的计算结果 if(num3=num4) /正确结果与你计算的结果比较,正确的话 fprintf(fp,%d + %d = %d n,num1,num2,num4); /向文件中写入 count1+; /变量count1记录正确题目的个数 else /错误的话,即num1!=num2时 fprintf(fp,%d + %d = %d n,num1,num2,num4); count2+; /变量count2记录错误题目的个数 fprintf(fp3, %d + %d = %dn,num1,num2,num3); fprintf(fp2,%d + %d =n,num1,num2); fclose(fp2); fclose(fp3); average=float(count1)/float(number); /计算正确率,注意int整型要转换为float类型 fprintf(fp,正确 %d 道,错误 %d 道,正确率为:%fnn,count1,count2,average); A=A+average*100; c=c+1; fclose(fp);/*/void Subtracter(int number) /减法运算函数,注释与加法一样 FILE *fp,*fp2,*fp3; if(fp=fopen(TestResult.txt,a)=NULL) printf(打开文件失败n); exit(0); if(fp2=fopen(failedResult.txt,a)=NULL) printf(打开文件失败n); exit(0); if(fp3=fopen(rightResult.txt,a)=NULL) printf(打开文件失败n); exit(0); int num1,num2,num3,num4,count1=0,n,m,count2=0; float average; srand(time(0); fprintf(fp,减法测试:n); fprintf(fp,被减数 - 减数 = 你的结果 是否正确n); printf(-n); printf(- 选择难度-n); printf(- 1.简单-n); printf(- 2.一般-n); printf(- 3.困难-n); printf(-n); printf(请选择难度(1/2/3): ); scanf(%d,&m); while(m3)/不在以上所列的功能以内时循环 printf(超出功能范围,请重新选择(1/2/3):); scanf(%d,&m); system(cls); /清屏 if(m=1) n=10 ; if(m=2) n=100 ; else if(m=3) n=1000 ; for(int i=0;inumber;i+) if(m=1) num1=rand()%n; num2=rand()%n; if(m=2) num1=10+rand()%(n-10); num2=10+rand()%(n-10); if(m=3) num1=100+rand()%(n-100); num2=100+rand()%(n-100); num3=num1-num2; printf(%d - %d = ,num1,num2); scanf(%d,&num4); if(num3=num4) fprintf(fp,%d - %d = %d n,num1,num2,num4); count1+; else fprintf(fp,%d - %d = %d n,num1,num2,num4); count2+; fprintf(fp3, %d - %d = %dn,num1,num2,num3); fprintf(fp2,%d - %d =n,num1,num2); fclose(fp2); fclose(fp3); average=float(count1)/float(number); fprintf(fp,正确 %d 道,错误 %d 道,正确率为:%fnn,count1,count2,average); A=A+average*100;c=c+1; fclose(fp); void Multiplication(int number) /乘法运算函数,注释与加法一样 FILE *fp,*fp2,*fp3; if(fp=fopen(TestResult.txt,a)=NULL) printf(打开文件失败n); exit(0); if(fp2=fopen(failedResult.txt,a)=NULL) printf(打开文件失败n); exit(0); if(fp3=fopen(rightResult.txt,a)=NULL) printf(打开文件失败n); exit(0); int num1,num2,num3,num4,m,n,count1=0,count2=0; float average; srand(time(0); fprintf(fp,乘法测试:n); fprintf(fp,被乘数 * 乘数 = 你的结果 是否正确n); printf(-n); printf(- 选择难度-n); printf(- 1.简单-n); printf(- 2.一般-n); printf(- 3.困难-n); printf(-n); printf(请选择难度(1/2/3): ); scanf(%d,&m); while(m3)/不在以上所列的功能以内时循环 printf(超出功能范围,请重新选择(1/2/3):); scanf(%d,&m); system(cls); /清屏 if(m=1) n=10 ; if(m=2) n=100 ; else if(m=3) n=1000 ; for(int i=0;inumber;i+) if(m=1) num1=rand()%n; num2=rand()%n; if(m=2) num1=10+rand()%(n-10); num2=10+rand()%(n-10); if(m=3) num1=100+rand()%(n-100); num2=100+rand()%(n-100); num3=num1*num2; printf(%d * %d = ,num1,num2); scanf(%d,&num4); if(num3=num4) fprintf(fp,%d * %d = %d n,num1,num2,num4); count1+; else fprintf(fp,%d * %d = %d n,num1,num2,num4); count2+; fprintf(fp3, %d * %d = %dn,num1,num2,num3); fprintf(fp2,%d * %d =n,num1,num2); fclose(fp2); fclose(fp3); average=float(count1)/float(number); fprintf(fp,正确 %d 道,错误 %d 道,正确率为:%fnn,count1,count2,average); A=A+average*100; c=c+1; fclose(fp); /*/void Division(int number) /和加法运算函数注释一样 FILE *fp,*fp2,*fp3; if(fp=fopen(TestResult.txt,a)=NULL) printf(打开文件失败n); exit(0); if(fp2=fopen(failedResult.txt,a)=NULL) printf(打开文件失败n); exit(0); if(fp3=fopen(rightResult.txt,a)=NULL) printf(打开文件失败n); exit(0); int num1,num2,m,n,count1=0,count2=0; float num3,num4,average; /正确率变量,注意是float类型 srand(time(0); /初始化随机数,如果没有此语句,则每次运行程序时的随机数是一样的 fprintf(fp,除法测试:n); fprintf(fp,被除数 + 除数 = 你的结果 是否正确n); printf(-n); printf(- 选择难度-n); printf(- 1.简单-n); printf(- 2.一般-n); printf(- 3.困难-n); printf(-n); printf(请选择难度(1/2/3): ); scanf(%d,&m); while(m3) /不在以上所列的功能以内时循环 printf(超出功能范围,请重新选择(1/2/3):); scanf(%d,&m); system(cls); /清屏 if(m=1) n=10 ; if(m=2) n=100 ; else if(m=3) n=1000 ; printf(保留小数点一位n); for(int i=0;inumber;i+) /小于测试题目数时,循环 if(m=1) num1=rand()%n;/产生随机数,赋值给num1,作为被除数 num2=rand()%n; /产生随机数,赋值给num2,作为除数 for(;num2=0;) num2=rand()%n; /使分母不出现零 if(m=2) num1=10+rand()%(n-10); num2=10+rand()%(n-10); if(m=3) num1=100+rand()%(n-100); num2=100+rand()%(n-100); num3=(float)(num1)/(float)(num2); /num3保存正确结果 printf(%d / %d = ,num1,num2); /在终端屏幕上输出题目 scanf(%f,&num4); /你要输入的计算结果 num3=(int)(num3*10)/10.0; /实现保留小数点一位 if(num3=num4) /正确结果与你计算的结果比较,正确的话 fprintf(fp,%d / % = %.1f n,num1,num2,num4); count1+; /变量count1记录正确题目的个数 else /错误的话,即num1!=num2时 fprintf(fp,%d / %d = %.1f n,num1,num2,num4); count2+; /变量count2记录错误题目的个数 fprintf(fp3, %d / %d = %.1fn,num1,num2,num3); fprintf(fp2,%d / %d =n,num1,num2); fclose(fp2); fclose(fp3); average=float(count1)/float(number); /计算正确率,注意int整型要转换为float类型 fprintf(fp,正确 %d 道,错误 %d 道,正确率为:%fnn,count1,count2,average); A=A+average*100; c=c+1; fclose(fp);/*/void rework() / 错题重做 int a; char ch; FILE *fp2,*fp3; if(fp2=fopen(failedResult.txt,a+)=NULL) printf(打开文件失败n); exit(0); while(!feof(fp2) ch=fgetc(fp2);printf(%c,ch); if(ch=) scanf(%d,&a); fclose(fp2); printf(请核对一下正确答案n); if(fp3=fopen(rightResult.txt,r)=NULL) printf(打开文件失败n); exit(0); while(!feof(fp3) ch=fgetc(fp3);printf(%c,ch); fclose(fp3); /*/void TestOver()/程序测试完毕函数 printf(nn-测试完毕你的测试结果保存在 %s 中-nn,student0.num);/输出测试结果记录提示/*/void ShowResult()/显示测试结果函数 FILE *fp; if(fp=fopen(TestResult.txt,r)=NULL) printf(打开
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 部队培训安全保密协议课件
- 社区服务边缘智能应用-洞察及研究
- 湖北省黄石市大冶市2024-2025学年七年级下学期期末考试数学试卷(含答案)
- 安徽省黄山市2024-2025学年高二上学期期末质量检测物理试卷(含答案)
- 部门安全培训需求课件
- 遨游汉字王国课件
- 基于循环经济理念的分条带钢边角料高值化再利用工艺创新图谱
- 基于代谢组学的前列康片多靶点作用机制网络图谱构建
- 培养基配方迭代与专利壁垒下的中小企业研发困境
- 国际标准体系下高强浇注料出口认证壁垒突破与质量追溯体系重构
- 卡西欧PROTREKPRW-6000使用手册
- 物流网络规划与设计课件
- JB∕T 5245.4-2017 台式钻床 第4部分:技术条件
- 鞘膜积液的护理查房
- 《水工监测工》习题集最新测试题含答案
- 大金D型水冷螺杆机说明书
- 部编版三年级上册道德与法治第一单元第1课《学习伴我成长》课件
- ASCO双电源自动转换开关操作手册
- 组合式塔吊基础施工专项方案(117页)
- 1、《国际贸易实务》课程标准解析
- 现场临电方案改
评论
0/150
提交评论