应用技术学院
课 程 设 计 报
课程名称 课题名称 小学生心算CAI系统
专 业 班 级学 号 姓 名 吴树良 指导教师
20xx年 1 月 10 日
告
湖南工程学院
课 程 设 计 任 务 书
课程名称
课 题 小学生心算CAI系统
专业班级 学生姓名 学 号 200913170136 指导老师 王 颖
审 批
任务书下达日期 2011 年 1 月 10 日
任务完成日期 2011 年 1 月 10 日
一、设计内容与设计要求
1.设计内容:设计课题六:小学生心算CAI系统
一、问题描述:
本系统可以用来进行单独的的加、减、乘、除心算练习,也可综合心算的速度与正确率进行测试。当用户在进行简单的四则运算时运算速度和正确率都较高时,可以进入四则混合运算,借此来进一步提高自己的心算能力。
二、功能描述:
1、用户可以通过两种方法来选择功能,既可以按相应的数字键进入相应的心算练习,也可以按光标键来选择功能项。
2、计算机自动出题,用户进入每项练习时,屏幕上会显示用户所做的相应的题数,如果不想继续可以随时退出。
3、设计的系统完全适合用户,比如除法时考虑到小学生的水平问题,只允许出现整除情况。
4、用户输入的答案不对时,提示错误,用户输入的结果如果连续两次不对,计算机会自动给出正确答案,供用户参考。
5、界面设计友好。
三、算法提示:
1、用简单的程序设计方法
2、一定的窗口设计技巧
3、简单的数据类型
四、测试数据:
计算机随机产生
见附录
2.设计要求:
掌握结构化程序设计的主体思想,以自顶向下逐步求精的方法编制程序解决一些实际的问题,为将来编写软件积累一些典型的案例处理经验。
1. 设计正确,方案合理。
2. 界面友好,使用方便。
3. 程序精炼,结构清晰。
4. 设计报告5000字以上,含程序设计说明,用户使用说明,源程序清单及程序
框图。
5. 上机演示。
6. 按学号顺序选课题号,并在规定的时间内独自完成相关课题的C源程序编写、
调整和运行。源程序及编译生成各文件均保存在软盘中;
7. 按本任务书的要求,按附录的要求编写《课程设计报告》(Word文档格式)。
并用A4的复印纸打印并装订;
8. 在20xx年1月10日之前,请各班学习委员收齐课程设计报告和源程序软盘
交王颖老师 ,联系电话:130xxxxxxxx。
二、进度安排
第一周 星期四: 课题讲解,查阅资料
第二周 星期一: 总体设计,详细设计
星期二: 编程,上机调试、修改程序
星期三:上机调试、完善程序
星期四:上机调试、完善程序
星期五: 答辩
星期六-星期天:撰写课程设计报告
星期六~星期天 写课程设计报告
附:
课程设计报告装订顺序:封面、任务书、目录、正文、评分、附件(A4大小的图纸及程序清单)。 正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。
正文的内容:一、1、设计目的 2、总体设计(程序设计组成框图、流程图)3、详细设计(模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等)4、调试与测试:调试方法,测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施5、源程序清单和执行结果:清单中应有足够的注释
正文总字数要求在5000字以上(不含程序原代码)。
4
目 录
1、 设计目的 ............................................ 1
2、 总体设计 ............................................ 1
3、 详细设计 ............................................ 2
1、主要函数 ............................................ 2
2、函数的主要关系........................................... 2
4、 调试与测试 ......................................... 4
附:源程序清单
一、设计目的:
全面熟悉,掌握C语言基本知识,C语言中的顺序,分支,循环三种结构及数组,函数C语言基本图形编程等方法,把编程和实际结合起来,增强对不同的问题的运用和灵活选择合适的数据结构以及算法描述的本领,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养使用计算机解决实际问题的能力,养成提供文档资料的习惯和规范编程的思想,为以后在专业课程中应用计算机系统解决计算,分析,实验和设计等学习环节打下较扎实的基础. 通过本课程设计,培养上机动手能力,巩固《C语言程序设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手能力。
1
三、 详细设计:
1、主要函数
(1)、主控模块main.c
void DoCommand() //根据输入命令进行相应的处理
void Calculate() //执行计算功能
void ReSet() //重设系统环境
(2)、程序界面模块 IntFace.c
void InitiInterface(); //界面初始化
void GoToCmdxy(); //将光标定位到命令选项提示之后
void GoToPrompt(); //将光标定位到命令选项提示行首
void ShowMainPrompt(); //显示命令选项提示
void ClearScreen(); //以清除整个屏幕,并设置为黑底白字模式 void ClearPromptLine(); //清除提示行的显示
void ClearWorkSpace(); //清除工作区的显示
void InputNumberBox(int OneOrTwo);//指定两个输入数的输入窗口,如果超过这个范围文字将自动流动
void ResultBox(); //指定计算结果的显示窗口,如果超过这个范围文字将自动流动
(3)、长整型数输入输出模块 见二小节2分节
(4)、长整型数四则运算处理模块 见二小节2分节
(5)、长整型数存储模块—双向循环链表模块 见二小节1分节
2、函数的主要关系
2
四、 调试过程: 1、调试分析效果图
①主菜单
②加法运算
③第二关
3
④第三关
⑤退出系统
4
2、设计总结
经过一周的课程设计,我学到了很多东西:
①巩固和加深了对数据结构的理解,提高综合运用本课程所学知识的能力。
②培养了我选用参考书,查阅手册及文献资料的能力。培养独立思考,深入研究,分析问题、解决问题的能力。
③过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。 ④够按要求编写课程设计报告书,能正确阐述设计和实验结果,正确绘制系统和程序框图。
⑤通过课程设计,培养了我严肃认真的工作作风,逐步建立正确的生产观念、经济观念和全局观念。
课程设计是把我们所学的理论知识进行系统的总结并应用于实践的良好机会,有利于加强我们用知识理论来分析实际问题的能力,进而加强了我们对知识认识的实践度,巩固了我们的理论知识,深化了对知识的认识,并为走向社会打下一个良好的基础。
在这次课程设计中我遇到许多问题和麻烦,得到了老师的帮助和指导,才能够使得这次课程设计顺利的进行下去,另外,在程序调试过程中,也得到很多同学的帮助,给我及时指出错误,提出许多宝贵意见。在此对老师和同学们表示感谢!
参考资料:
[1] Brian W.Kernighan, Dennis M.Ritchie,C程序设计语言[M],北京:机械工业出版社,1998.10: 39-48
[2] Perter Van Der LinDen,C专家编程[M],北京:人民邮电出版社,1995.4: 41-44
[3] Guy L. Steele,C语言参考手册(第五版)[M],北京:人民邮电出版社,2000,5:78-90
5
[4]David Hanson,C语言接口与实现:创建可重用软件的技术[M],武汉机械工业出版
社,2001,8:87-89
[5]Brian W. Kernighan, Dennis M. Ritchie,C程序设计语言[M],
北京清华大学出版社,1997,4:128-134
[6]Brian W. Kernighan, Rob Pike,程序设计实践[M],武汉:机械工业出版社,2000,9:149-153
[7]Herbert Schildt,C语言大全[M],长沙:电子工业出版社,2001,3:163-169
附:源程序清单
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
printf("*******************************************************************
*************");
printf("^_^_^_^_^_^_^_^_^_^_^_^小朋友,欢迎你们来学习小学算术
_^_^_^_^_^_^_^_^_^_^_^_^_^_");
printf(" ");
printf(" 1.加法 ");
printf(" 2.减法 ");
printf(" 3.乘法 ");
printf(" 4.除法 6
");
printf(" 0.退出 ");
printf(" ");
printf(" 快选择你要学习的内容吧! ");
printf(" ");
printf("^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^
_^_^_^_^_^_^_");
printf("*******************************************************************
*************");
}
void plus1()
{
int count=0,m,n,s,total,k;
printf("欢迎进入第一关!\n");
printf("请设定题目数量:");
scanf("%d",&k);
while(count<k){
printf("%d",m=rand()%10);
printf("+");
printf("%d",n=rand()%10);
printf("=");
total=m+n;
loopa:scanf("%d",&s);
if(s==total)
{printf("恭喜你,答对了!\n");count++;}
else
7
{printf("回答错误,请重新回答!\n");goto loopa;} printf("恭喜你通过了第一关!\n");
}
}
void plus2()
{
int count=0,m,n,s,total,k;
printf("欢迎进入第二关!\n");
printf("请设定题目数量:");
scanf("%d",&k);
while(count<k){
do{
m=rand()%10;
n=rand()%100;
}while(n<10);
printf("%d",m);
printf("+");
printf("%d",n);
printf("=");
total=m+n;
loopa:scanf("%d",&s);
if(s==total)
{printf("恭喜你,答对了!\n");count++;} else
{printf("回答错误,请重新回答!\n");goto loopa;} printf("恭喜你通过了第二关!\n");
}
}
void plus3()
{
int count=0,m,n,s,total,k;
printf("欢迎进入第三关!\n");
8
printf("请设定题目数量:");
scanf("%d",&k);
while(count<k){
do{
m=rand()%100;
n=rand()%100;
}while(m<10&&n<10);
printf("%d",m);
printf("+");
printf("%d",n);
printf("=");
total=m+n;
loopa:scanf("%d",&s);
if(s==total)
{printf("恭喜你,答对了!\n");count++;} else
{printf("回答错误,请重新回答!\n");goto loopa;} printf("恭喜你通过了第三关!\n");
}
}
void sub1()
{
int count=0,m,n,s,total,k;
printf("欢迎进入第一关!\n");
printf("请设定题目数量:");
scanf("%d",&k);
while(count<k){
do{
m=rand()%10;
n=rand()%10;
}while(m<=n);
printf("%d",m);
9
printf("-");
printf("%d",n);
printf("=");
total=m-n;
loopa:scanf("%d",&s);
if(s==total)
{printf("恭喜你,答对了!\n");count++;} else
{printf("回答错误,请重新回答!\n");goto loopa;} printf("恭喜你通过了第一关!\n");
}
}
void sub2()
{
int count=0,m,n,s,total,k;
printf("欢迎进入第二关!\n");
printf("请设定题目数量:");
scanf("%d",&k);
while(count<k){
do{
m=rand()%100;
n=rand()%10;
}while(m<10);
printf("%d",m);
printf("-");
printf("%d",n);
printf("=");
total=m-n;
loopa:scanf("%d",&s);
if(s==total)
{printf("恭喜你,答对了!\n");count++;} else
10
{printf("回答错误,请重新回答!\n");goto loopa;} printf("恭喜你通过了第二关!\n");
}
}
void sub3()
{
int count=0,m,n,s,total,k;
printf("欢迎进入第三关!\n");
printf("请设定题目数量:");
scanf("%d",&k);
while(count<k){
do{
m=rand()%100;
n=rand()%100;
}while(m<=n||m<10||n<10);
printf("%d",m);
printf("-");
printf("%d",n);
printf("=");
total=m-n;
loopa:scanf("%d",&s);
if(s==total)
{printf("恭喜你,答对了!\n");count++;} else
{printf("回答错误,请重新回答!\n");goto loopa;} printf("恭喜你通过了第三关!\n");
}
}
void plus()
{
int i;
plus1();
11
printf("是否继续挑战?Y(1)/N(0):"); scanf("%d",&i);
if(i==1)
plus2();
else
return;
i=NULL;
printf("是否继续挑战?Y(1)/N(0):"); scanf("%d",&i);
if(i==1)
plus3();
else
return;
}
void sub()
{
int i;
sub1();
printf("是否继续挑战?Y(1)/N(0):"); scanf("%d",&i);
if(i==1)
sub2();
else
return;
i=NULL;
printf("是否继续挑战?Y(1)/N(0):"); scanf("%d",&i);
if(i==1)
sub3();
else
return;
}
12
void mul1()
{
int count=0,m,n,s,total,k;
printf("欢迎进入第一关!\n");
printf("请设定题目数量:");
scanf("%d",&k);
while(count<k){
printf("%d",m=rand()%10);
printf("*");
printf("%d",n=rand()%10);
printf("=");
total=m*n;
loopa:scanf("%d",&s);
if(s==total)
{printf("恭喜你,答对了!\n");count++;} else
{printf("回答错误,请重新回答!\n");goto loopa;} printf("恭喜你通过了第一关!\n");
}
}
void mul2()
{
int count=0,m,n,s,total,k;
printf("欢迎进入第二关!\n");
printf("请设定题目数量:");
scanf("%d",&k);
while(count<k){
do{
m=rand()%100;
n=rand()%10;
}while(m<10);
printf("%d",m);
13
printf("*");
printf("%d",n);
printf("=");
total=m*n;
loopa:scanf("%d",&s);
if(s==total)
{printf("恭喜你,答对了!\n");count++;} else
{printf("回答错误,请重新回答!\n");goto loopa;} printf("恭喜你通过了第二关!\n");
}
}
void mul()
{
int i;
mul1();
printf("是否继续挑战?Y(1)/N(0):");
scanf("%d",&i);
if(i==1)
mul2();
}
void div1()
{
int count=0,m,n,s,total,k;
printf("欢迎进入第一关!\n");
printf("请设定题目数量:");
scanf("%d",&k);
while(count<k){
do{
m=rand()%10;
n=rand()%10;
}while(n==0||m%n!=0);
14
printf("%d",m);
printf("/");
printf("%d",n);
printf("=");
total=m/n;
loopa:scanf("%d",&s);
if(s==total)
{printf("恭喜你,答对了!\n");count++;} else
{printf("回答错误,请重新回答!\n");goto loopa;} printf("恭喜你通过了第一关!\n");
}
}
void div2()
{
int count=0,m,n,s,total,k;
printf("欢迎进入第二关!\n");
printf("请设定题目数量:");
scanf("%d",&k);
while(count<k){
do{
m=rand()%100;
n=rand()%10;
}while(n==0||m<10||m%n!=0);
printf("%d",m);
printf("/");
printf("%d",n);
printf("=");
total=m/n;
loopa:scanf("%d",&s);
if(s==total)
{printf("恭喜你,答对了!\n");count++;} 15
else
{printf("回答错误,请重新回答!\n");goto loopa;} printf("恭喜你通过了第二关!\n");
}
}
void div3()
{
int count=0,m,n,s,total,k;
printf("欢迎进入第三关!\n");
printf("请设定题目数量:");
scanf("%d",&k);
while(count<k){
do{
m=rand()%100;
n=rand()%100;
}while(n==0||m<10||n<10||m%n!=0);
printf("%d",m);
printf("/");
printf("%d",n);
printf("=");
total=m/n;
loopa:scanf("%d",&s);
if(s==total)
{printf("恭喜你,答对了!\n");count++;} else
{printf("回答错误,请重新回答!\n");goto loopa;} printf("恭喜你通过了第三关!\n");
}
}
void div()
{
int i;
16
div1();
printf("是否继续挑战?Y(1)/N(0):"); scanf("%d",&i);
if(i==1)
div2();
else
return;
i=NULL;
printf("是否继续挑战?Y(1)/N(0):"); scanf("%d",&i);
if(i==1)
div3();
else
return;
}
main()
{
void menu();
int k;
do{
menu();
printf("请选择:");
scanf("%d",&k);
switch(k)
{
case 1:plus();break;
case 2:sub();break;
case 3:mul();break;
case 4:div();break;
case 0:break;
}
printf("\n");
17
}while(k!=0); printf("\n"); return 0; }
18