计算机辅助教学(CAI)软件开发:教学生学英语
我是一名普普通通的大四待实习生,这里是我的知识总结笔记,其中存在我自己的理解,也有部分内容来自网络,可能存在错误,请勿轻易引用,仅供参考。如果存在版权问题,实在抱歉。请后台私信我,我立马修改、删除。
一、课程设计目的
1.1 前言
计算机辅助教学(Computer Assisted Instruction)简称CAI,是将计算机作为数字媒体,为学生提供一个良好的学习环境,使学生通过与计算机的对话来进行学习的一种新型教学形式。
作为教学媒体,计算机能帮助教师改善教学效果,扩大教学范围,延伸教师的教育功能,而且,计算机具有交互性,具有快速存取和自动处理等功能,它不仅能够呈现教学信息,还能接收学生回答问题并进行判断,对学生进行指导。
总之,计算机具有许多其他教学媒体所不具备的功能。一方面是计算机设备本身具有的能力,另一方面就是计算机只是当作工具来执行教师事先编制好的具有各种功能的CAI课件。
当今时代,计算机辅助教学已经成为教育改革的重要切入点,这种教学方式给现代教育思想的实现提供更加有力的支持。计算机辅助教学这个理念正开启了教育的新篇章。
1.2 需求分析
现在中国英语学习者的数量每年都在不断增加,英语在各种场合的重要性也与日俱增,出现了很多英语学习软件。
一个基本的英语学习软件要求能够方便学习者学习,测试来考查自己当前的水平,同时还应该根据特定的需求对英语词汇进行增删改查,界面也应当足够简洁友好。
因此我尝试设计了一个简单的教小学生背英语的程序,基本可以实现词汇的增删改查,以及使用者英语水平的测试。
可以有效地将学习英语碎片化,有效地缩短学习时间,提高教学质量和教学效率,实现最优化的教学目标。
二、课程设计题目描述和要求
2.1 概要设计
题目:
计算机辅助教学(CAI)软件开发:教学生学英语。
功能:
屏幕上随机出现一个汉语单词,英语单词,汉语词组,英语词组或一短句提示学生给出相应答案,答错了要提示要求重新输入,直到答对为止。
要统计给分,且累计,够一定分数后可进级,即从单词到词组,从词组到短句。同样,也可降级。
起步阶段可各选30个,软件可扩充,即扩大词库的容量。
步骤:
1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
2、完成最低要求:能教单词,并有统计功能,一次答对的成功率为90%以上 后可晋级;
3、进一步要求:完成词组和短语的问答,也有晋级功能。
要求:
1、用C++语言实现程序设计;
2、利用结构体数组实现信息的数据结构设计;
3、系统的各个功能模块要求用函数的形式实现;
4、界面友好(良好的人机交互),程序加必要的注释。
课程设计实验报告要求:
1、预习报告:题目、课程设计任务、数据结构、程序的总体设计(算法)、模块划分 。
2、实验总结报告:流程图、主要源程序代码、测试情况及调试中问题与解决方案、小结等。
开发设计思路:
首先应当弄清楚程序所要实现的基本功能,也就是上面列出来的随机出现一个单词或词组,提示学生给出相应的答案,答错后提示要求重新作答,直到答对为止,并且要统计给分,且累计,够一定分数后可进级,即从单词到词组,从词组到短句。同样,也可降级。起步阶段可各选30个,软件可扩充,即扩大词库的容量。
其次要设计针对特定功能的数据结构,算法设计,模块划分。在这次设计中,单词采用了双指针word** CE_Words;//存储所有单词、短语,整个词库则运用了C++对数据文件的操作。程序的算法包括线性查找单词,srand(time(NULL));设置时间种子生成随机数取出相应单词呈现给用户。
2.2 程序设计组成框图
2.3 流程图
图2.2主要操作界面流程图
图2.3开始学习功能操作流程
图2.4继续学习功能操作流程
三、课程设计报告内容
3.1 详细设计
针对本设计的特点,可以用两个界面来实现,分别为词汇操作与英语测试,下面分别说明这两个界面介绍的具体功能:
词汇操作界面:该界面总共实现六个功能,添加词汇,修改词汇,查找词汇,删除词汇,显示词汇,以及返回上一级功能。
word类用来表示一条单词记录。对于词典中的每条单词记录,有英语单词,中文解释和词汇类型三种数据,因此可用三个私有数据成员来进行表示:
string Word;//单词
string Meaning;//词义
string Type;//1 代表单词 2 代表词组
针对词汇操作提供了下列一系列的相关功能,列表如下:
void Add_Words();//添加
void Del_Words();//删除
void Mod_Words();//修改
void Que_Words();//查找
void Ope_Words();//操作设置
void Save_Words();//保存
void Show_Words();//显示
针对学习操作提供了下列一系列的相关功能,列表如下:
void Start_Game();//开始学习
void Continue_Game();//继续学习
void Save_Game();//保存学习进度
void Ope_Game();//学习系统操作界面
void Continue_Init();//获取等级
void random(int a[]);//随机函数
void Show_Game();//显示
增、删、改功能的实现:
一般说来使用者并不经常需要对词典本身进行修改,但在个别情况下用户可能需要把自己平时碰到的词典中又没有的生词加进去,或者删去一些已经熟练掌握的单词,这种情况下增、删、改的功能就很有用处。
增加单词节点对应于词汇操作中的Add_Words()函数,是通过对文件操作实现的;
删除节点首先需要根据给出的单词进行线性查找,然后通过词汇操作中的Que_Words()函数实现,线性查找的基本原理是利用序列的有序性,逐一进行匹配,直到确定找到目标或者目标不存在。
线性查找的实现如下:
void word::Que_Words()//查找
{
while (1)
{
cout << "1、按单词查找...." << endl;
cout << "2、按词意查找...." << endl;
cout << "0、返回...." << endl;
int number;
string wm;
cin >> number;
if (number == 0)
{
return;
}
if (number == 1)
{
cout << "输入你想查找的单词..." << endl;
cin.get();
getline(cin, wm);
wm += ".";
int j = -1;
for (int i = 0; i < Num; i++)
{
if (CE_Words[i]->Word == wm)
{
j = i;
}
}
if (j == -1) {
cout << "无此词汇..." << endl;
system("pause");
system("cls");
cout << endl << endl;
cout << "是否继续查找(y/n)..." << endl;
char ch;
cin >> ch;
if (ch == 'n')
break;
else
{
//system("cls");
}
}
else
{
cout << "单词为:" << CE_Words[j]->Word << endl;
cout << "词意为:" << CE_Words[j]->Meaning << endl;
system("pause");
cout << "是否继续查找(y/n)..." << endl;
char ch;
cin >> ch;
if (ch == 'n')
break;
else
{
system("cls");
}
}
}
else
if (number == 2)
{
cout << "输入你想查找的单词词意..." << endl;
cin.get();
getline(cin, wm);
wm += ";";
int j = -1;
int k = 0;
int a[1024] = {
0 };
for (int i = 0; i < Num; i++)
{
j = CE_Words[i]->Meaning.find(wm);
if (j != -1 && wm != ";;")
{
a[k++] = i;
}
}
if (k == 0) {
cout << "无此词汇..." << endl;
system("pause");
cout << endl << endl;
cout << "是否继续查找(y/n)..." << endl;
char ch;
cin >> ch;
if (ch == 'n')
break;
else
{
system("cls");
}
}
else
{
for (int i = 0; i < k; i++)
{
cout << "单词为:" << CE_Words[a[i]]->Word << endl;
cout << "词意为:" << CE_Words[a[i]]->Meaning << endl;
}
system("pause");
cout << "是否继续查找(y/n)..." << endl;
char ch;
cin >> ch;
if (ch == 'n')
break;
}
}
else
{
cout << "输入错误 ..." << endl;
system("pause");
system("cls");
}
}
修改单词的功能只需要找到对应的节点,然后修改解释部分的内容即可,由于单词内容并没有发生变化,因此也不需要重新排序。
学习功能的实现:
学习功能是最为常见的使用方式,练习的目标在于通过浏览单词来进行记忆;本设计中学习的功能是通过随机从数据库中选择1个单词来测试,考试结束之后会给出一个简单的反馈,帮助使用者的学习。
在模拟练习的功能中,通过srand(time(NULL));设置时间种子,然后生成随机数取出相应单词呈现给用户。
void word::random(int a[])
{
int k = rand() % Grade_Num;
a[0] = k;
for (int i = 1; i < object1; )
{
int flag = 0;
int k = rand() % Grade_Num;
//去掉重复的数
for (int j = 0; j < i; j++)
{
flag = 1;
if (a[j] == k) {
flag = 0;
i--;
break;
}
}
if (flag) {
a[i] = k;
}
i++;
}
}
同时为了方便用户进行随时学习,即为该程序设计提供了存储功能。通过对文件的操作对学生的学习进度进行保存。
void word::Save_Game()
{
fstream f;
f.open(FILENAME2, ios::in | ios::out);
if (!f.is_open())
{
cout << "文件打开失败..." << endl;
return;}
f << grade;
f.close()
}
3.2 源代码程序清单
#include<iostream>
#include<fstream>
#include<string>
#include<ctime>
#include<conio.h>
#include<Windows.h>
#define FILENAME1 "words.txt"//存储词汇
#define FILENAME2 "grade.txt"//存储等级
#define object1 30//每一关的单词数量
#define object2 0.9//过关率 升级
#define object3 0.5//降级
using namespace std;
class word
{
public:
//显示单词
word(string a, string b, string c) {
//单词 词意 类别
Word = a;
Meaning = b;
Type = c;
}
word();
word** CE_Words;//存储所有单词、短语
int Num;//词汇数量(包括 单词 短语)
~word();
public:
void Init_Word();//初始化
void Init_Num();//词汇的数量
private:
string Word;//单词
string Meaning;//词义
string Type;//1 代表单词 2 代表词组
public:
//词汇设置
void Add_Words();//添加
void Del_Words();//删除
void Mod_Words();//修改
void Que_Words();//查找
void Ope_Words();//操作设置
void Save_Words();//保存
void Show_Words();//显示
public:
//学习操作
word** Grade_Words;//按等级存储词汇
int Grade_Num;//等级词汇数量
int grade;//等级
bool judge = false;//判断是否是开始之后的继续学习
void Start_Game();//开始学习
void Continue_Game();//继续学习
void Save_Game();//保存学习进度
void Ope_Game();//学习系统操作界面
void Continue_Init();//获取等级
void random(int a[]);//随机函数
void Init_Grade_Num();//数量
void Init_Game(int);//初始化
void Show_Game();//显示
void Start_Game_Words(int a[]);//单词
void Start_Game_Mean(int a[]);//意思
public:
void Acc_Game();//主菜单界面
void Exp_Game();//使用说明
};
//初始化总单词
word::word()
{
Init_Word();
}
word::~word() {
}//构造函数
//主菜单界面
void word::Acc_Game()
{
cout << "\t\t------------------" << endl;
cout << "\t\t| 教学生学英语 |" << endl;
cout << "\t\t------------------" << endl;
cout << "\t\t| 1、词汇操作 |" << endl;
cout << "\t\t------------------" << endl;
cout << "\t\t| 2、英语学习 |" << endl;
cout << "\t\t------------------" << endl;
cout << "\t\t| 3、使用说明 |" << endl;
cout << "\t\t------------------" << endl;
cout << "\t\t| 0、退出系统 |" << endl;
cout << "\t\t------------------" << endl;
cout << "\n\t\t输入你的选择:" << endl << "\t\t";
int t;
int flag = 0;
cin >> t;
if (t == 0)
{
cout << "\n\n\t\t谢谢使用" << endl << "\t\t";
_getch();
exit(0);
}
else if (t == 1)
{
system("cls");
Ope_Words();
_getch();
system("cls");
}
else if (t == 2)
{
cout << "\n\n\t\t进入学习" << endl << "\t\t";
_getch();
system("cls");
Ope_Game();
_getch();
system("cls");
}
if (t == 3)
{
system("cls");
Exp_Game();
_getch();
system("cls");
}
}
//使用说明
void word::Exp_Game()
{
cout << "\t\t 欢迎进入使用说明界面" << endl << endl;
cout << "\t\t 词汇操作说明 " << endl;
cout << "\t\t1、添加词汇时,应注意输入词汇的正确。" << endl;
cout << "\t\t2、添加单个单词时,词汇意思由中文分号隔开末尾不能有其他字符 如:老板;雇主" << endl;
cout << "\t\t3、添加短语时,注意中间空格只能有一个末尾不能有其他字符 如: ask to do" << endl << endl;
cout << "\t\t 答题操作说明 " << endl;
cout << "\t\t1、回答中文时只允许输入一个中文意思且末尾不允许有任何字符 如: word:单词" << endl;
cout << "\t\t2、回答单词时只允许输入一个单词且末尾不允许有任何字符 如: 单词:word" << endl;
cout << "\t\t3、回答短语时注意中间空格且末尾不允许有任何字符 如: 要求做某事:ask to do sth" << endl;
}
//初始化单词
void word::Init_Word()
{
fstream f;
f.open(FILENAME1, ios::in | ios::out);
if (!f.is_open())
{
cout << "文件打开失败..." << endl;
return;
}
Init_Num();
CE_Words