




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录任务书 *1总体设计*2三、模块划分*2四、算法说明*2五、函数模块功能 *2六、流程图 *3七、源程序清单 *4八、程序测试 *17九、结论 *17附:参考文献资料.任务书题目:小学生数学辅助学习系统功能:实现小学生100以内四则运算的学习和测试基本要求:1.出现欢迎界面,选择加、减、乘、除或混合运算。2.系统随机出题,运算数及结果均在100以内,以算式显示。3.正确打个对勾,播放一段音乐,如果错误,打个红 X,播放另一个音乐。4.能统计正确率及得分。相关知识:图形绘制、按键操作等.总体设计本次设计需要使用音乐函数、图形函数以及四则运算函数。首先使用图形函数,创建出一个欢迎界面。其次,在
2、100 以内,乘、除法应能整除,显示算式,再编写菜单练习,测试和计分及四则运算函数。最后是打印及退出。3 .模块划分1. 欢迎界面模块。2. 算式模块。3. 菜单模块。4. 四则运算模块。5. 计分模块。6. 音乐模块。4 . 算法说明step1: 先定义音乐函数,包括音符的音长、频率及初始化扬声器,再编 写出两段音乐。Step2: 定义菜单函数,并用 printf 输出。Step3:先定义compute。函数,在其中嵌套switch语句,做随机数的四 则运算。Step4: 定义一个 Print() 函数,当使用者答对或答错时,调用 linerel() 函 数,做出相应的图像并显示。同时放出相
3、应的乐曲,并做正确 或错误题数的累积。Step5: 在主函数中,调用图形函数,设置一个欢迎界面。Step6: 调用菜单函数。Step7:调用compute。函数,并用switch语句选择同号运算和混合运 算。Step8:用printf打印结果。5 .函数模块功能1 迎界面模块在此模块中,我首先定义了显示器及模式,然后通过setbkcolor()初始化图形显示模式函数定义了背景颜色,用 outtextxy ()和settextstyle ()函数定义了字符 用输出的位置以及大小和字体。2. 声音模块在此模块中,首先定义了音符的长短和频率。然后通过初始化扬声器,来得到每个音符。最后,根据自己的喜好
4、,编写两段音乐。3. 菜单模块在此模块中,首先用 Menu ()函数定义菜单。然后输入所需要的菜单目录,最后在主函数中调用Menu ()4. 四则运算模块在此函数中,通过调用switch语句,分成四种情况,每种运算符分别代表一种情况,而在这四种情况中,又分别调用switch语句,又分成四种情况,从而形成了三个数的四则运算。最后在主函数中调用这些情况。5. 显示对错信息模块在此函数中,通过调用相应的图像和音乐,给使用者提供对错信息,并累加错误题数和正确题数。六、流程图m=1m=2m=3m=4m=5m6直 到随机产 生 a。bo c直 到随机产 生a。bo c直 到随机产生 a。bo c直 到随机
5、产 生a。bo c随机op op2结束)二4a+b+c< 二2a+b+c< =2a+b+c< =2a+b+c< =2Op1Op2Op3Op4读入ANSWER值OP2OP2OP2=P2OP2OP2OP2OP2OP2OP2OP2OP2OP:OP:?OP:OP:result<=a+b+ cresult二a-bcresult二a*b* cresult二a/b/c产生随机a,b,c计算机应result读入answer RESULTANSWER.-N1Y回错号,奏哀乐画对号,奏欢歌*w+*r+Score<=(float)100/all)*rprintf输出对题数,错题数
6、,总题数和分数设棕色背景输出“welcome输入菜单选项读入选项mels七.源程序清单#include <stdio.h>#include <conio.h>#include <stdlib.h>#include <graphics.h>#include <dos.h>#include <bios.h>#include <time.h>#define N1 64/先义音长 全音符音长*/#define N2 32/音符白音长*/#define N4 16/*4分音符的音长*/#define N8 8/*8分音符
7、的音长*/#define N16 4/*16分音符的音长*/#define END 0/*结束标志*/enum NDTESC10=131,D10=147,E10=165,F10=175,G10=196,A10=220,B10=247,C0=262,D0=296,E0=330,F0=349,G0=392,A0=440,B0=494,C1=523,D1=587,E1=659,F1=698,G1=784,A1=880,B1=988,C2=1047,D2=1175,E2=1319,F2=1397,G2=1568,A2=1760,B2=1976。/*定义音符与频率的对应关系*/song1=C0,N8,C
8、0,N8,G0,N8,G0,N8,A0,N8,A0,N8,G0,N4,F0,N8,F0,N8,E0,N8,E0,N8,D0,N8,D0,N8,C0,N4,G0,N8,G0,N8,F0,N4,E0,N8,E0,N8,D0,N4,G0,N8,G0,N8,F0,N8,F0,N8,E0,N8,E0,N8,D0,N4,C0,N8,E0,N8,G0,N4,A0,N8,C1,N8,G0,N4,/* 形成乐谱 */F0,N8,F0,N8,E0,N8,E0,N8,D0,N8,D0,N8,C0,N4,END,END 。song2=C0,N8,D0,N8,E0,N8,F0,N8,G0,N8,A0,N8,B0,N8,
9、C1,N8,D1,N8,E1,N8,F1,N8,G1,N8,A1,N8,B1,N8,END,END 。void Menu(void)printf("1.+n") 。printf("2.-n") 。printf("3.*n") 。printf("4./n") 。printf("5.Mixedn") 。printf("6.Exitn") 。printf("Please enter your choice:"。)SONG1()int note=0,fre,dur
10、,controlclock_t goa lwhile(song1note!=0)fre=song1note。dur=song1note+1。if(kbhit()break 。if(fre)outportb(0x43,0xb6)。/*取出乐谱数组中的频率*/* 取出乐谱数组中的音长*/*如果有按键,则推出音乐播放 */*初始化扬声器端口 */fre=(unsigned)(1193180L/fre。)outportb(0x42,(char)(fre>>8)。outportb(0x42,(char)(fre>>8)。control=inportb(0x61)。outportb
11、(0x61,(control)|0x3)。goal=(clock_t)dur+clock(。)while(goal>clock()。if(fre)outportb(0x61,control)。goal=(clock_t)0。note=note+2。/*往扬声器端口送出声音频率值*/*开始发音 */*设定延迟时间 */*如果时间未到,等待;时间超出则退出 */*停止发音 */*移到下一个音符*/SONG2()int note=0,fre,dur,controlclock_t goa lwhile(song2note!=0)fre=song2note。dur=song2note+1。 if(
12、kbhit()break 。if(fre)outportb(0x43,0xb6)。fre=(unsigned)(1193180L/fre。) outportb(0x42,(char)(fre>>8)。outportb(0x42,(char)(fre>>8)。control=inportb(0x61)。outportb(0x61,(control)|0x3)。goal=(clock_t)dur+clock(。) while(goal>clock()。if(fre)outportb(0x61,control)。goal=(clock_t)0。note=note+2。i
13、nt Compute2(int a,int b,int c,int op ,int op2)/*定义一个新的运算符*/int answer,resultswitch(op)case 1:switch (op2)/*当 OP 为加号时, OP2 为四种运算符*/case 1:printf("%d+%d+%d=",a,b,c) 。result=a+b+c。break。case 2:printf("%d+%d-%d=",a,b,c) 。result=a+b-c。break。case 3:printf("%d+%d*%d=",a,b,c) 。
14、result=a+b*c。break。case 4:printf ("%d+%d/%d=",a,b,c) 。result=a+b/c。break。 break。case 2:switch (op2)/*当 OP 为减号时, OP2 为四种运算符*/case 1:printf("%d-%d+%d=",a,b,c) 。result=a-b+c。break。case 2:printf("%d-%d-%d=",a,b,c) 。result=a-b-c。break。case 3:printf("%d-%d*%d=",a,b,
15、c) 。result=a-b*c。break。case 4:printf ("%d-%d/%d=",a,b,c) 。result=a-b/c。break。break。case 3: /当* OP 为乘号时, OP2 为四种运算符*/switch (op2)case 1:printf("%d*%d+%d=",a,b,c) 。result=a*b+c。break。case 2: printf("%d*%d-%d=",a,b,c) 。result=a*b-c。break。case 3:printf("%d*%d*%d="
16、,a,b,c) 。result=a*b*c 。break。case 4:printf ("%d+%d/%d=",a,b,c) 。result=a*b/c。break。break。case 4: /*当 OP 为除号时, OP2 为四种运算符 */switch (op2)case 1:printf("%d+%d+%d=",a,b,c) 。result=a+b+c。break。case 2:printf("%d+%d-%d=",a,b,c) 。result=a+b-c。break。case 3:printf("%d+%d*%d=
17、",a,b,c) 。result=a+b*c。break。case 4: printf ("%d+%d/%d=",a,b,c)result=a+b/c。break。break。scanf("%d",&answer)if(result=answer)elsereturn 1 。/*如果正确,返回值为1*/return 0。/*如果错误,返回值为0*/void Print(int flag,int *r,int *w,int *all)if(flag)setcolor(RED)。/*定义颜色 */linerel(10,20)。/*从当前点到
18、相对增量点画一条线段*/linerel(20,-20)。+(*r) 。/*正确题数加1*/SONG1()/*放第一首歌*/elsesetcolor(RED)。linerel(30,20)。moverel(-30,0)。 /* 光标从当前位置移动到指定位置处,移动过程中不画点 */linerel(30,-20)。+(*w) 。/*错误题数加1*/SONG2()。moverel(-30,16)。+(*all) 。/*总数加 1*/main()float score。char m。int a,b,c,op,d,r=0,w=0,all=0,i。int result,answer。int gdriver
19、=VGA 。/*选择 VGA 显示器 */int gmode=VGAHI 。/*选择VGAHI 显示模式 */int height,width。int exit_flag=0。unsigned char *temp1=" WELCOME n" 。initgraph(&gdriver,&gmode,"") 。/*初始化显示适配器*/cleardevice(。)/*清屏 */setcolor(10。)setbkcolor(BROWN) 。/*设置背景颜色*/settextstyle(3,0,4。)width=textwidth(temp1)。
20、width=textwidth(temp2)。height=textheight(temp1。)height=textheight(temp2。)outtextxy(639-width)/2,150-height/2,temp1。)/*设置字符串输出的位置*/settextstyle(3,0,2。)/*设置输出字符的字型,输出方向和字符大小*/outtextxy(800-width)/2,400-height/2,temp2。)getch()。/*获得一个字符*/cleardevice(。)Menu() 。/*调用菜单函数*/m=getchar()。 /* 获得一个字符并赋值给C*/srand
21、(time(NULL) 。/*设置一个随机数*/moveto(108,112。)/*设置光标起始位置*/switch(m)case '1':for(i=0。 i<10。 i+)/*设置问题数小于等于 10*/doa=rand()%100+1 。/*随机产生一个小于 100 的数 */b=rand()%100+1 。c=rand()%100+1 。while(a+b+c>100)。/*当结果在100之外,再次进入循环*/printf("%d+%d+%d=",a,b,c) 。scanf("%d",&answer) 。res
22、ult=a+b+c。if(result=answer)d=1/*如果正确,返回值为1*/elsed=0。/*如果错误,返回值为0*/Print(d,&r,&w,&all) 。break。case '2':for(i=0。 i<10。 i+) doa=rand()%100+1 。/*系统随机产生一个小于100 的数 */b=rand()%100+1 。c=rand()%100+1 。while(a-b-c>100|a-b-c<0)。/*当结果在 100之外, 0 以下,再次进入循环*/printf("%d-%d-%d="
23、;,a,b,c) 。scanf("%d",&answer) 。result=a-b-c。if(result=answer)d=1。/*如果正确,返回值为1*/elsed=0。/*如果错误,返回值为0*/Print(d,&r,&w,&all) 。break。case '3':for(i=0。 i<10。 i+)do30 的数 */a=rand()%30+1 。/*系统随机产生一个小于b=rand()%30+1 。c=rand()%30+1 。while(a*b*c>100) 。printf("%d*%d*%
24、d=",a,b,c) 。scanf("%d",&answer) 。result=a*b*c 。if(result=answer)d=1。/*如果正确,返回值为1*/elsed=0。/*如果错误,返回值为0*/Print(d,&r,&w,&all) 。break。case '4':for(i=0。 i<10。 i+)a=rand()%100+1 。b=rand()%100+1 。c=rand()%100+1 。printf("%d/%d/%d=",a,b,c) 。scanf("%d",&answ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《结肠息肉护理与预防》课件
- 《兰州财经大学法学院》课件
- 《房地产经纪实务与应用课件》
- 谭小芳领导干部学习能力提升培训
- 2025年武汉货运从业资格证考试模拟考试题及答案大全
- 上海市松江区统考2025届高三下学期第一次统一考试语文试题试卷含解析
- 柳州铁道职业技术学院《观赏植物病理学》2023-2024学年第一学期期末试卷
- 文山壮族苗族自治州2025年数学三下期末联考模拟试题含解析
- 狮子山区2024-2025学年数学五下期末质量跟踪监视试题含答案
- 武汉海事职业学院《中国古代小说研究》2023-2024学年第二学期期末试卷
- 沪科版八年级物理全册《8 复习:大气压强、流体压强》教案
- 中医治疗盆腔炎
- DB32T 4878-2024居住区供配电设施建设标准
- BRC内部审核检查表(BRC内审检查表)
- 古建筑修缮施工质量控制方案
- DB21T 2481-2015 水利工程单元工程施工质量检验与评定标准-农村水利工程
- 专题03全等模型-手拉手模型(原卷版+解析)
- 售后文员的工作职责模版(2篇)
- 沿街商铺、合用场所消防安全培训课件
- 静脉炎的预防及处理-李媛
- 2024旋翼无人机巡检作业规范
评论
0/150
提交评论