失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 计算机辅助教学(CAI)软件开发:教小学生学英语

计算机辅助教学(CAI)软件开发:教小学生学英语

时间:2023-04-18 16:29:37

相关推荐

计算机辅助教学(CAI)软件开发:教小学生学英语

计算机辅助教学(CAI)软件开发:教小学生学英语。

目录

计算机辅助教学(CAI)软件开发:教小学生学英语。1 课程目的2 课题题目3 设计要求3.1 功能:3.2 要求: 4 总体设计4.1 管理员模块4.2 学生端学习模块 5 详细设计5.1 管理员模块5.1.1 密码登录5.1.2 词汇的添加5.1.3 词汇修改5.1.4 词汇查找5.1.5 词汇删除5.1.6 查看词库 5.2 学生端学习模块5.2.1 答题 5.3 附加音乐模块 6 调试分析7附录**main.cpp****word.cpp****word.h** Ps:[完整代码及资源包 `资源下载` 下载压缩包即可](/download/qq_43589790/20419895)

1 课程目的

通过本学习课程更进一步理解C++的基础知识和面向对象的思想。训练用系统的观点和软件开发一般规范进行软件开发,并在此过程中培养严谨的科学态度和良好的工作作风。初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。熟练掌握C++中类及模板在程序中的应用,并熟练了解类中函数的调用。进一步提高上机动手能力,培养使用计算机解决实际问题的能力,为后继课程和毕业设计打下扎实的基础

2 课题题目

计算机辅助教学(CAI)软件开发:教小学生学英语。

3 设计要求

3.1 功能:

屏幕上随机出现一个汉语单词,英语单词,汉语词组,英语词组或一短 句提示小学生给出相应答案,答错了要提示要求重新输入,直到答对为止。要统计给分,且累计,够一定分数后可进级,即从单词到词组,从 词组到短句。同样,也可降级。起步阶段可各选 30 个,软件可扩充,即 扩大词库的容量。 (rand(),#include 结构体、文件或数组)

3.2 要求:

1、用 C++语言实现程序设计;2、利用结构体数组实现信息的数据结构设计;3、系统的各个功能模块要求用函数的形式实现;4、界面友好(良好的人机交互),程序加必要的注释。

4 总体设计

设计分为两个主要的模块:管理员模块和学生端学习模块

4.1 管理员模块

主要负责:词汇的添加、修改、查找、删除,查看词库

4.2 学生端学习模块

主要是:答题

5 详细设计

5.1 管理员模块

5.1.1 密码登录

首次登录密码默认为空,所以直接进入管理界面。进入管理界面后通过修改密码的来设置管理员的密码,从而进行管理员权限的操作。为了能使密码下次登录有效就不可以写在磁盘中,需要写在文件或者数据库中,实现密码的读写。由于时间有限,经小组讨论,本程序采用文件存储词汇。

定义一个文件存account.txt储密码

#define FILENAME3 "account.txt"//存储密码

设置完密码,保存密码到account.txt,退出程序,再次登录则需要密码验证。

定义一个密码判断函数

string Judge_Acc();//判断密码

bool Judge_Pass=false;//判读之前是否登录成功

定义一个密码判断次数的函数

int Acc_Num=3;//次数判断

锁定判断函数

bool Acc_Flag = false;//锁定判断

当密码进行3次错误后,将直接进行账号锁定,无法再次登录

5.1.2 词汇的添加

定义一个词汇添加函数

void Add_Words();//添加

在词汇添加的操作中同密码一样需要把添加的词汇,保存到文件中。

定义一个文件存储词汇

#define FILENAME1 "words.txt"//存储词汇

确定词汇的添加方式

添加的形式以及一次添加个数

在添加时增加一个重复判断,如果单词已存在,则输出"已经存在此词汇,请重新输入…"

当添加完之前要添加的个数后,显示添加完成保存到”words.txt”,并询问是否要继续添加

5.1.3 词汇修改

定义一个词汇修改函数

void Mod_Words();//修改

选择修改词汇的方式

如果想直接根据词汇单词或者词意修改,可以选择1,再选择具体的操作选择是根据单词还是词意修改

1、修改单词 //根据单词英文查询修改2、修改词组 //根据汉语意思查询修改

如果检测到词库的没有的单词\词组,则输出查无此词汇,然后按任意键,

也可以选则2,直接打开词库,通过词汇的序号选择直接修改。

如果选择超出的序号则无法修改。再次重新选择序号,直至修改成功

5.1.4 词汇查找

定义一个词汇查找函数

void Que_Words();//查找

选择修改词汇的方式

如果检测到词库的没有的单词\词组,则输出查无此词汇,然后按任意键

5.1.5 词汇删除

定义一个词汇删除函数

void Del_Words();//删除

选择删除的方式

如果想直接根据词汇单词或者词意删除,可以选择1,再选择具体的操作选择是根据单词还是词意删除

如果检测到词库的没有的词汇,则输出查无此词汇,然后按任意键,输入y/n选择是否要重新删除

也可以选则2,直接打开词库,通过词汇的序号选择直接删除。

如果选择超出的序号则无法删除

5.1.6 查看词库

定义一个查看词库函数

void word::Show_Words()//显示

按照下表的格式显示词汇

5.2 学生端学习模块

5.2.1 答题

定义函数

void Start_Game();//开始学习

void Save_Game();//保存学习

void Ope_Game();//操作

void Menu_Game();//学习界

void Continue_Init();//获取等级

void random(int a[]);//随机函数

word **Grade_Words;//按等级存储词汇

void Init_Grade_Num();//数量

void Start_Game_Words(int a[]);//单词

void Start_Game_Mean(int a[]);//意思

int grade;//等级

创建一个保存等级的文件

#define FILENAME2 "grade.txt"//存储等级

设置答题升级过关的相关参数

#define object1 10//每一关的单词数量

#define object2 0.9//过关率 升级

#define object3 0.5//降级

开始答题

等级:1即第一关,第一关是随机单词,填写词意(每次只能填一个)

随机出题

答案提示

输入错误的答案

正确率大于90

50<=正确率<90

正确率小于50%

等级:2即第二关,第二关是随机词意,填写单词(每次只能填一个)

关卡设置

等级:3即第三关,第三关是随机单词或词意,填写单词或词意(每次只能填一个)

等级:4即第四关,第四关是随机词组,填写词意!(每次只能填一个)

等级:5即第五关,第五关是随机词组词意,填写词组!(每次只能填一个)

等级:6即第六关,第六关是随机词组或词意,填写词组或词意!(每次只能填一个)

5.3 附加音乐模块

音乐模块直接调用的第三方winmm库

//音乐的头文件

#include <mmsystem.h>

#pragma comment(lib,"winmm.lib")

在程序的一开始添加了背景BGM随机出题的时候触发题目弹出的clock音效当正确率低于90无法通关时发出call警告音效当正确率高于90,通关升级时发出cheer胜利的欢呼音效

6 调试分析

在调试时由于查看词库的代码的逻辑出现了bug,导致出现了无法查看词库内容和异常死循环,词库一直刷新的问题。

解决方案:初始化以及错误打印输出报告,查看是否成功链入文件,并是否能对其读写

f.open(FILENAME1, ios::in | ios::out);if (!f.is_open()){cout << "文件打开失败..." << endl;return;}Init_Grade_Num();if (Grade_Num == 0){cout << "文件为空..." << endl;return;}

2.一开设计在词库删除时忘记设置词汇序号的减少导致,序号出现空缺的问题。

解决方案:删除词汇后,当前词汇后的单词全部在序号上减一

//全部移动for (int i = j; i < Num; i++){CE_Words[i] = CE_Words[i + 1];}//数量减一Num--;

由于使用的codeblocks在导入第三方winmm库时出现失败,因为是是第三方库不是codeblocks内置的库,需要手动添加。

解决方案:手动添加方法。

Setting → Compiler settings → Linker settings → 在link libraries中add自己第三方库即可。

7附录

main.cpp

#include"word.h"//声音的头文件#include <mmsystem.h>#pragma comment(lib,"winmm.lib")int main(){system("color 6");system("title 英语学习");//播放mciSendString("open bgBGM.mp3", NULL, 0, 0);mciSendString("play bgBGM.mp3", NULL, 0, 0);srand(time(NULL));word CE;while (1){CE.Acc_Game();}return 0;}

word.cpp

#include"word.h"//局部颜色变化void color(unsigned short color_index){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color_index);}//初始化总单词word::word(){Init_Word();}word::~word() {}//构造函数void word::Init_Word()//初始化{fstream f;f.open(FILENAME1, ios::in | ios::out);if (!f.is_open()){cout << "文件打开失败..." << endl;return;}Init_Num();CE_Words = NULL;if (Num == 0){cout << "文件为空...." << endl;return;}CE_Words = new word*[Num];//开辟大小为Num的空间word *rd;string w;string m;string a;int k = 0;int flag = 0;while (getline(f, w) && getline(f, m)&&getline(f,a)){//分三行 一行为单词 一行为词意 一行为判断rd = new word(w, m, a);//存入rd中CE_Words[k] = rd;//把rd中的值存入CE_Words中k++;}f.close();}//初始化单词数量void word::Init_Num()//词汇的数量{fstream f;f.open(FILENAME1, ios::in | ios::out);if (!f){cout << "文件打开失败..." << endl;return;}string w;string m;string a;int k = 0;while (getline(f, w)&&getline(f, m)&&getline(f,a)){//分三行 一行为单词 一行为词意 一行为判断//if (!(f >> a[k++]))//break;k++;}Num = k;f.close();}//添加void word::Add_Words()//添加{while (1){cout << "1、添加单词" << endl;cout << "2、添加词组" << endl;cout << "0、返回" << endl;cout << "输入你的选择:" << endl;string type;cin >> type;if (type == "0"){return;}if (type == "1"){cout << "添加形式如单词:empleeyer " << endl;cout << "词意:老板;雇主 (加分号为一个意思)" << endl;}cout << "输入你想填加的数量:" << endl;int number;cin >> number;word **Add_CE_Words = new word*[Num + number];for (int i = 0; i < Num; i++){Add_CE_Words[i] = CE_Words[i];}word *rd;string w;string m;int j;for (int i = 0; i < number; i++){bool n_flag = true;cout << "输入你想添加的第" << i + 1 << "个词汇的单词" << endl;if(i==0)cin.get();getline(cin, w);w += ".";if (w == ".") {cout << "请输入单词..." << endl;_getch();i--;n_flag = false;}if (n_flag){for ( j = 0; j < Num + i; j++){if (Add_CE_Words[j]->Word == w){cout << "已经存在此词汇,请重新输入..." << endl;_getch();system("cls");//n_flag = false;break;}}if (j != Num + i) {i--;}else{cout << "输入你想添加的第" << i + 1 << "个词汇的词意" << endl;//cin.get();getline(cin, m);m += ";";rd = new word(w, m, type);Add_CE_Words[Num + i] = rd;cout << "添加成功!" << endl << endl;}}}//删掉开辟的空间delete[]CE_Words;//重新赋值CE_Words = Add_CE_Words;Num += number;cout << "是否继续添加....(y/n)" << endl;char ch;cin >> ch;if (ch == 'n'){Save_Words();break;}}}//保存void word::Save_Words(){fstream f;f.open(FILENAME1, ios::in | ios::out);if (!f.is_open()){cout << "文件打开失败..." << endl;return;}//存入for (int i = 0; i < Num; i++){f << CE_Words[i]->Word << endl;f << CE_Words[i]->Meaning << endl;f << CE_Words[i]->Type << endl;}f.close();}//删除void word::Del_Words()//删除{while (1){string w;string m;string type;int n_t;cout << "1、输入你想删除的具体词汇的单词(注意中间空格):" << endl;cout << "2、从词汇表中选择删除的词汇:" << endl;cout << "0、返回" << endl;cin >> n_t;if (n_t == 2) {while (1){system("cls");Show_Words();int t;cout << "输入你想选择删除的序号:" << endl;cin >> t;if (t > Num || t< 0) {cout << "选择超出范围!" << endl;cout << "请重新选择!" << endl;_getch();}else{cout << "原单词:" << CE_Words[t - 1]->Word << endl;cout << "原词意:" << CE_Words[t - 1]->Meaning << endl;cout << "原编号:" << CE_Words[t - 1]->Type << endl;//全部后移for (int i = t - 1; i < Num; i++){CE_Words[i] = CE_Words[i + 1];}//数量减一Num--;cout << "删除成功!" << endl;system("pause");cout << "是否继续删除....(y/n)" << endl;char ch;cin >> ch;if (ch == 'n'){Save_Words();system("cls");break;}}}}else if (n_t == 1){cout << "1、删除单词" << endl;cout << "2、删除词组" << endl;cout << "输入你的选择:" << endl;cin >> type;cout << "输入你想要删除的单词:" << endl;cin.get();getline(cin, w);w += ".";int j = -1;for (int i = 0; i < Num; i++){if (CE_Words[i]->Word == w){j = i;}}if (j == -1) {cout << "查无此词汇..." << endl;system("pause");cout << endl << endl;cout << "是否重新删除...(y/n)" << endl;char ch;cin >> ch;if (ch == 'n')break;elsesystem("cls");}else{//全部后移for (int i = j; i < Num; i++){CE_Words[i] = CE_Words[i + 1];}//数量减一Num--;cout << "删除成功!" << endl;system("pause");cout << "是否继续删除....(y/n)" << endl;char ch;cin >> ch;if (ch == 'n'){Save_Words();break;}}}elseif (n_t == 0) {system("cls");return;}else{cout << "输入有误..." << endl;cout << "请重新输入..." << endl;_getch();system("cls");}}}//修改void word::Mod_Words()//修改{while (1){string w;string m;string type;int n_t;cout << "1、输入你想修改的具体词汇的单词(注意中间空格):" << endl;cout << "2、从词汇表中选择修改的词汇:" << endl;cout << "0、返回" << endl;cin >> n_t;if (n_t == 2) {while (1){system("cls");Show_Words();int t;cout << "输入你想选择修改的序号:" << endl;cin >> t;if (t > Num||t< 0) {cout << "选择超出范围!" << endl;cout << "请重新选择!" << endl;_getch();}else{cout << "原单词:" << CE_Words[t-1]->Word << endl;cout << "原词意:" << CE_Words[t-1]->Meaning << endl;cout << "原编号:" << CE_Words[t - 1]->Type << endl;word *rd;cout << "输入修改后的词汇单词:" << endl;cin.get();getline(cin, w);w += '.';cout << "输入修改后的词汇词意:" << endl;//cin.get();getline(cin, m);m += ';';cout << "输入修改后的词汇编号:" << endl;cin >> type;rd = new word(w, m, type);CE_Words[t-1] = rd;cout << "修改成功!" << endl;system("pause");cout << "是否继续修改....(y/n)" << endl;char ch;cin >> ch;if (ch == 'n'){Save_Words();//保存system("cls");break;}}}}else if(n_t==1){cout << "1、修改单词" << endl;cout << "2、修改词组" << endl;cout << "输入你的选择:" << endl;cin >> type;if (type == "0"){return;}cout << "输入你想要修改的单词:" << endl;cin.get();getline(cin, w);w += ".";int j = -1;for (int i = 0; i < Num; i++){if (CE_Words[i]->Word == w){j = i;}}if (j == -1) {cout << "无此词汇..." << endl;system("pause");cout << endl << endl;cout << "是否重新修改....(y/n)" << endl;char ch;cin >> ch;if (ch == 'n')break;elsesystem("cls");}else{cout << "原单词:" << CE_Words[j]->Word << endl;cout << "原词意:" << CE_Words[j]->Meaning << endl;cout << "原编号:" << CE_Words[j]->Type << endl;word *rd;cout << "输入修改后的词汇单词:" << endl;//cin.get();getline(cin, w);w += '.';cout << "输入修改后的词汇词意:" << endl;//cin.get();getline(cin, m);cout << "输入修改后的词汇编号:" << endl;cin >> type;m += ';';rd = new word(w, m, type);CE_Words[j] = rd;cout << "修改成功!" << endl;system("pause");cout << "是否继续修改....(y/n)" << endl;char ch;cin >> ch;if (ch == 'n'){Save_Words();break;}}}else if (n_t == 0) {system("cls");return;}}}//查找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");//system("cls");cout << "是否继续查找(y/n)..." << endl;char ch;cin >> ch;if (ch == 'n')break;else{system("cls");}}}elseif (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");//system("cls");cout << "是否继续查找(y/n)..." << endl;char ch;cin >> ch;if (ch == 'n')break;}}else{cout << "输入错误 ..." << endl;system("pause");system("cls");}}}//显示void word::Show_Words()//显示{for (int i = 0; i < Num; i++){cout << "序号:" << i + 1 << endl;cout << "单词:" << CE_Words[i]->Word << endl;cout << "词意:" << CE_Words[i]->Meaning << endl;cout << "编号:" << CE_Words[i]->Type << endl << endl;}}//操作词汇void word::Ope_Words()//操作设置{while (1){Set_Show();int t;cin >> t;switch (t){case 1:Add_Words();system("pause");system("cls");break;case 2:Mod_Words();system("pause");system("cls");break;case 3:Que_Words();system("pause");system("cls");break;case 4:Del_Words();system("pause");system("cls");break;case 5:Show_Words();system("pause");system("cls");break;case 0:system("cls");return;default:cout << "无此选项,请重新输入..." << endl;system("pause");system("cls");break;}}}void word::Set_Show()//设置界面{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|4、删除词汇|" << endl;cout << "\t\t------------------------" << endl;cout << "\t\t|5、显示词汇|" << endl;cout << "\t\t------------------------" << endl;cout << "\t\t|0、返回|" << endl;cout << "\t\t------------------------" << endl;cout << "\t\t输入你的选择操作:" << endl << "\t\t";}//第一次继续初始化void word::Continue_Init(){fstream f;f.open(FILENAME2, ios::in | ios::out);if (!f.is_open()){cout << "文件打开失败..." << endl;return;}//judge = true;f >> grade;f.close();}//初始化数量void word::Init_Grade_Num()//数量{fstream f;f.open(FILENAME1, ios::in | ios::out);if (!f.is_open()){cout << "文件打开失败..." << endl;return;}string w;string m;string a;int k = 0;while ( getline(f, w) && getline(f, m) && getline(f, a)){int s = atoi(a.c_str());switch (grade){case 1:case 2:case 3:if (s == 1)k++;break;case 4:case 5:case 6:if (s == 2)k++;break;case 7:k++;break;}}Grade_Num = k;f.close();}//初次初始化void word::Init_Game(int index)//初始化{fstream f;f.open(FILENAME1, ios::in | ios::out);if (!f.is_open()){cout << "文件打开失败..." << endl;return;}Init_Grade_Num();if (Grade_Num == 0){cout << "文件为空..." << endl;return;}delete[] Grade_Words;Grade_Words = new word*[Grade_Num];string w;string m;string a;int k = 0;while (getline(f, w) && getline(f, m) && getline(f, a)){word *rd;//string转intint s = atoi(a.c_str());if (index==s||index==3) {rd = new word(w, m, a);Grade_Words[k] = rd;k++;}}f.close();}//随机词汇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::Show_Game()//显示{color(1);cout << "\t等级:" << grade << endl;switch (grade) {case 1:cout << "\t随机单词,填写词意(每次只能填一个)!" << endl;cout << "\t正确率达到90%或以上晋级....." << endl << endl;break;case 2:cout << "\t随机词意,填写单词(每次只能填一个)" << endl;cout << "\t正确率达到90%或以上晋级....." << endl << endl;break;case 3:cout << "\t随机单词或词意,填写单词或词意(每次只能填一个)" << endl;cout << "\t正确率达到90%或以上晋级....." << endl << endl;break;case 4:cout <<"\t随机词组,填写词意!(每次只能填一个)" << endl;cout << "\t正确率达到90%或以上晋级....." << endl << endl;break;case 5:cout << "\t随机词组词意,填写词组!(每次只能填一个)" << endl;cout << "\t正确率达到90%或以上晋级....." << endl << endl;break;case 6:cout << "\t随机词组或词意,填写词组或词意!(每次只能填一个)" << endl;cout << "\t正确率达到90%或以上晋级....." << endl << endl;break;case 7:cout << "\t所有词汇随机出现" << endl;cout << "\t进行分数记录(一次答对得一分,否则减一分)" << endl << endl;break;}color(6);}void word::Start_Game_Words(int a[])//单词{string wm;random(a);int i;int flag = 1;float corret = 0;for (i = 0; i < object1; i++){//背景音乐mciSendString("open clock.mp3", NULL, 0, 0);mciSendString("play clock.mp3", NULL, 0, 0);bool hint = true;//判断是否需要提示color(6);Show_Game();cout << "\n\n\t\t需要提示输入1(提示后视为回答错误)!" << endl;cout << "\t\t单词:" << Grade_Words[a[i]]->Word << endl << "\t\t词意:";color(7);getline(cin, wm);wm += ";";if (wm == "1;") {hint = false;cout << "\t\t词意:" << Grade_Words[a[i]]->Meaning << endl;}if (hint){if (Grade_Words[a[i]]->Meaning.find(wm) != -1 && wm != ";;"&&wm != ";"){corret += flag;flag = 1;color(2);cout << "\t\t正确!" << endl;_getch();system("cls");}else{flag = 0;i--;color(4);cout << "\n\n\t\t错误!请重新输入....\n" << endl;_getch();system("cls");}}else{flag = 0;i--;_getch();system("cls");}//关掉音乐mciSendString("close clock.mp3", NULL, 0, 0);}if (float(corret / object1) > object2) {mciSendString("open cheer.mp3", NULL, 0, 0);mciSendString("play cheer.mp3", NULL, 0, 0);grade++;color(1);float choose = (corret / object1) * 100;cout << "\n\n\t\t正确率为:" << choose << "%" << endl;cout << "\t\t等级加一..." << endl;cout << "\t\t现在等级为:" << grade << "级" << endl << "\t\t";_getch();//system("cls");mciSendString("close cheer.mp3", NULL, 0, 0);}else{mciSendString("open call.mp3", NULL, 0, 0);mciSendString("play call.mp3", NULL, 0, 0);color(3);float choose = (corret/object1);if (choose <= object3) {cout << "\n\n\t\t正确率为:" << choose * 100 << "%" << endl;cout << "\t\t等级减一:" << endl;grade--;if (grade < 1) {grade = 1;}cout << "\t\t现在等级为:" << grade << "级" << endl << "\t\t";_getch();}else{cout << "\n\n\t\t正确率为:" << choose * 100 << "%" << endl;cout << "\t\t未达到标准!(继续加油)" << endl;cout << "\t\t请再接再厉!(等级不变)" << endl << "\t\t";//system("pause>nu");_getch();}mciSendString("close call.mp3", NULL, 0, 0);}}void word::Start_Game_Mean(int a[])//意思{string wm;random(a);int i;int flag = 1;float corret = 0;for (i = 0; i < object1; i++){mciSendString("open clock.mp3", NULL, 0, 0);mciSendString("play clock.mp3", NULL, 0, 0);color(6);bool hint = true;Show_Game();cout << "\n\n\t\t需要提示输入1(提示后视为回答错误)!" << endl;cout << "\t\t词意:" << Grade_Words[a[i]]->Meaning << endl<<"\t\t单词:";color(7);getline(cin, wm);wm += ".";if (wm == "1.") {hint = false;cout << "\t\t单词:" << Grade_Words[a[i]]->Word << endl;}if (hint){if (wm == Grade_Words[a[i]]->Word) {corret += flag;flag = 1;color(2);cout << "\t\t正确!" << endl;_getch();system("cls");}else if (wm != Grade_Words[a[i]]->Word){int st = 0;for (; st < Grade_Num; st++) {if (wm == Grade_Words[st]->Word) {corret += flag;flag = 1;color(2);cout << "\t\t正确!" << endl;_getch();system("cls");break;}}if (st == Grade_Num) {flag = 0;i--;color(4);cout << "\t\t错误!请重新输入...." << endl;_getch();system("cls");}}}else{i--;flag = 0;_getch();system("cls");}mciSendString("close clock.mp3", NULL, 0, 0);}if (float(corret / object1) > object2) {mciSendString("open cheer.mp3", NULL, 0, 0);mciSendString("play cheer.mp3", NULL, 0, 0);grade++;color(1);float choose = (corret / object1) * 100;cout << "\n\n\t\t正确率为:" << choose << "%" << endl;cout << "\t\t等级加一..." << endl;cout << "\t\t现在等级为:" << grade << "级" << endl << "\t\t";_getch();mciSendString("close cheer.mp3", NULL, 0, 0);}else{color(3);float choose = (corret / object1);mciSendString("open call.mp3", NULL, 0, 0);mciSendString("play call.mp3", NULL, 0, 0);if (choose <= object3) {cout << "\n\n\t\t正确率为:" << choose * 100 << "%" << endl;cout << "\t\t等级减一:" << endl;grade--;if (grade < 1) {grade = 1;}cout << "\t\t现在等级为:" << grade << "级" << endl << "\t\t";_getch();}else{cout << "\n\n\t\t正确率为:" << choose * 100 << "%" << endl;cout << "\t\t未达到标准!(继续加油)" << endl;cout << "\t\t请再接再厉!(等级不变)" << endl << "\t\t";_getch();}mciSendString("close call.mp3", NULL, 0, 0);}}void word::Start_Game()//开始学习{color(6);judge = true;cout << "\t\t初始等级为:1" << endl;cout << "\t\t一级:随机单词,填写词意。" << endl;cout << "\t\t正确率达到90%或以上晋级....." << endl;cout << "\t\tNow,English Word Study .... " << endl << "\t\t";grade = 1;Grade_Words = new word*[2];string wm;cout << "\n\t\t现在是否开始答题...(输入n退出,其他继续)" << endl << "\t\t";cin.get();//getline(cin, wm);if (wm == "n") {system("cls");return;}else{system("cls");}int i;while (1){mciSendString("open bgBGM.mp3", NULL, 0, 0);mciSendString("play bgBGM.mp3", NULL, 0, 0);float corret = 0;//第一次正确的个数int flag = 1;if (grade == 1 ) {Init_Game(1);}elseif (grade == 4 ) {Init_Game(2);}elseif(grade==7){Init_Game(3);}int a[object1];random(a);switch (grade){case 1:case 4:Start_Game_Words(a);break;case 2:case 5:Start_Game_Mean(a);break;case 3:case 6:case 7:for ( i = 0; i < object1; i++){mciSendString("open clock.mp3", NULL, 0, 0);mciSendString("play clock.mp3", NULL, 0, 0);color(6);Show_Game();int j = rand() % 2;if (j == 1){cout << "\t\t单词:" << Grade_Words[a[i]]->Word << endl<<"\t\t词意:";color(7);getline(cin, wm);wm += ";";if (Grade_Words[a[i]]->Meaning.find(wm) != -1 && wm != ";;"&&wm != ";") {corret += flag;flag = 1;color(2);cout << "\t\t正确!" << endl;_getch();system("cls");}else{flag = 0;i--;color(4);cout << "\t\t错误!请重新输入...." << endl;_getch();system("cls");}}else{cout << "\t\t词意:" << Grade_Words[a[i]]->Meaning << endl << "\t\t单词:";color(7);getline(cin, wm);wm += ".";if (Grade_Words[a[i]]->Word==wm) {corret += flag;flag = 1;color(2);cout << "\t\t正确!" << endl;_getch();system("cls");}else if (wm != Grade_Words[a[i]]->Word){int st = 0;for (; st < Grade_Num; st++) {if (wm == Grade_Words[st]->Word) {corret += flag;flag = 1;color(2);cout << "\t\t正确!" << endl;_getch();system("cls");break;}}if (st == Grade_Num) {flag = 0;i--;color(4);cout << "\t\t错误!请重新输入...." << endl;_getch();system("cls");}}}mciSendString("close clock.mp3", NULL, 0, 0);}if (float(corret / object1) > object2 && grade<7) {mciSendString("open cheer.mp3", NULL, 0, 0);mciSendString("play cheer.mp3", NULL, 0, 0);grade++;color(1);float choose = (corret / object1) * 100;cout << "\t\t正确率为:" << choose << "%" << endl;cout << "\t\t等级加一..." << endl;cout << "\t\t现在等级为:" << grade << "级" << endl << "\t\t";_getch();system("cls");//关闭mciSendString("close cheer.mp3", NULL, 0, 0);}else if(grade<7){mciSendString("open call.mp3", NULL, 0, 0);mciSendString("play call.mp3", NULL, 0, 0);color(3);float choose = (corret / object1);if (choose <= object3) {cout << "\t\t正确率为:" << choose * 100<< "%" << endl;cout << "\t\t等级减一:" << endl;grade--;if (grade < 1) {grade = 1;}cout << "\t\t现在等级为:" << grade << "级" << endl << "\t\t";_getch();}else{cout << "\t\t正确率为:" << choose * 100<< "%" << endl;cout << "\t\t未达到标准!(继续加油)" << endl;cout << "\t\t请再接再厉!(等级不变)" << endl << "\t\t";_getch();}mciSendString("open call.mp3", NULL, 0, 0);}else{color(7);cout << "\n\n\t\t恭喜通关....." << endl << "\t\t";_getch();}break;}color(6);cout << "\n\n\t\t现在是否继续答题...(输入n退出,其他继续)" << endl << "\t\t";getline(cin, wm);if (wm == "n") {cout << "\t\t是否进行保存...(y/n)" << endl << "\t\t";getline(cin, wm);if (wm == "y"){Save_Game();cout << "\t\t保存成功!" << endl;_getch();}system("cls");return;}else{system("cls");}mciSendString("close bgBGM.mp3", NULL, 0, 0);}}void word::Continue_Game()//继续学习{color(6);if (!judge){Continue_Init();Grade_Words = new word*[2];}judge = true;string wm;cout << "\n\t\t现在等级为" << grade << "级" << endl;cout << "\n\t\t现在是否继续答题...(输入n退出,其他继续)" << endl << "\t\t";cin.get();getline(cin, wm);if (wm == "n") {system("cls");return;}else{system("cls");}int i;if (grade>=1&&grade<=3) {Init_Game(1);}elseif (grade >= 4 &&grade<=6) {Init_Game(2);}elseif (grade >= 7){Init_Game(3);}while (1){float corret = 0;//第一次正确的个数int flag = 1;if (grade == 1) {Init_Game(1);}elseif (grade == 4) {Init_Game(2);}elseif (grade == 7){Init_Game(3);}int a[object1];random(a);switch (grade){case 1:case 4:Start_Game_Words(a);break;case 2:case 5:Start_Game_Mean(a);break;case 3:case 6:case 7:for (i = 0; i < object1; i++){color(6);Show_Game();int j = rand() % 2;if (j == 1){cout << "\t\t单词:" << Grade_Words[a[i]]->Word << endl << "\t\t词意:";color(7);getline(cin, wm);wm += ";";if (Grade_Words[a[i]]->Meaning.find(wm) != -1 && wm != ";;"&&wm != ";") {corret += flag;flag = 1;color(2);cout << "\t\t正确!" << endl;_getch();system("cls");}else{flag = 0;i--;color(4);cout << "\t\t错误!请重新输入...." << endl;_getch();system("cls");}}else{cout << "\t\t词意:" << Grade_Words[a[i]]->Meaning << endl << "\t\t单词:";color(7);getline(cin, wm);wm += ".";if (Grade_Words[a[i]]->Word == wm) {corret += flag;flag = 1;color(2);cout << "\t\t正确!" << endl;_getch();system("cls");}else if (wm != Grade_Words[a[i]]->Word){int st = 0;for (; st < Grade_Num; st++) {if (wm == Grade_Words[st]->Word) {corret += flag;flag = 1;color(2);cout << "\t\t正确!" << endl;_getch();system("cls");break;}}if (st == Grade_Num) {flag = 0;i--;color(4);cout << "\t\t错误!请重新输入...." << endl << "\t\t";_getch();system("cls");}}}}if (float(corret / object1) > object2 && grade<7) {grade++;color(1);float choose = (corret / object1) * 100;cout << "\t\t正确率为:" << choose << "%" << endl;cout << "\t\t等级加一..." << endl;cout << "\t\t现在等级为:" << grade << "级" << endl << "\t\t";//system("pause");_getch();system("cls");color(6);}else if (grade<7){color(3);float choose = (corret / object1) * 100;cout << "\t\t正确率为:" << choose << "%" << endl;cout << "\t\t未达到标准!" << endl;cout << "\t\t请再接再厉!" << endl << "\t\t";//system("pause");_getch();system("cls");color(6);}else{color(7);cout << "\n\n\t\t恭喜通关....." << endl << "\t\t";//system("pause");_getch();color(6);}break;}cout << "\n\n\t\t现在是否继续答题...(输入n退出,其他继续)" << endl << "\t\t";getline(cin, wm);if (wm == "n") {cout << "\n\n\t\t是否进行保存...(y/n)" << endl;getline(cin, wm);if (wm == "y") {Save_Game();cout << "\t\t保存成功!" << endl;_getch();}system("cls");return;}else{system("cls");}}}void word::Save_Game()//保存学习{fstream f;f.open(FILENAME2, ios::in | ios::out);if (!f.is_open()){cout << "文件打开失败..." << endl;return;}f << grade;f.close();}void word::Ope_Game()//操作{Menu_Game();int t;cin >> t;switch (t){case 1:system("cls");Start_Game();break;case 2:system("cls");Continue_Game();break;case 3:system("cls");return;case 0:system("cls");cout << "\n\n\t\t欢迎下次使用..." << endl << "\t\t";system("pause");exit(0);break;}}void word::Menu_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 << "\t\t输入你的选择:" << endl << "\t\t";}void word::Acc_Game(){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";Acc_Init();int t;int flag = 0;cin >> t;if (t == 0) {cout << "\n\n\t\t谢谢使用" << endl << "\t\t";_getch();exit(0);}else if (t == 2) {cout << "\n\n\t\t进入学习" << endl << "\t\t";_getch();system("cls");Ope_Game();}elseif (t == 1){while (1){if (!Acc_Flag){if (!Judge_Pass){cout << "\t\t请输入密码:" << endl;if (Judge_Acc() != Password) {Acc_Num--;if (Acc_Num == 0) {Acc_Flag = true;}cout << "\n\n\t\t密码或账号错误,是否重新输入(y/n)...." << endl << "\t\t";char ch;cin >> ch;if (ch == 'n') {system("cls");return;}}else{cout << "\n\n\t\t登录成功!" << endl << "\t\t";Judge_Pass = true;_getch();}}else{system("cls");int t;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";cin >> t;switch (t){case 1:system("cls");Ope_Words();break;case 2:system("cls");Mod_Acc();break;case 3:system("cls");return;break;case 0:system("cls");cout << "\n\n\t\t谢谢使用" << endl << "\t\t";_getch();exit(0);return;}}}else{cout << "\n\n\t\t三次输入错误,进行账号锁定,无法再次登录...." << endl<<"\t\t";_getch();system("cls");return;}}}elseif (t == 3) {system("cls");Exp_Game();_getch();system("cls");}}void word::Acc_Save()//保存{fstream f;f.open(FILENAME3, ios::out);if (!f) {cout << "保存失败,文件不存在!" << endl;return;}f << Password;f.close();}void word::Acc_Init()//初始化{fstream f;f.open(FILENAME3, ios::in);if (!f) {cout << "初始化,文件不存在!" << endl;return;}f >> Password;f.close();}void word::Mod_Acc()//修改密码{cout << "\n\n\t\t输入新密码:" << endl << "\t\t";string str;cin >> str;Password = str;Acc_Save();cout << "\n\n\t\t修改成功!" << endl << "\t\t";_getch();system("cls");}string word::Judge_Acc(){char buf[1024];int index = 0;string str;cout << "\t\t";while (1){char ch;ch = getch();if (ch == 8) {if (index > 0){index--;cout << char(8) << " " << char(8);}}else if (ch == '\r'){buf[index] = '\0';cout << endl;break;}else{cout << "*";buf[index++] = ch;}}for (int i = 0; i < index; i++) {str += buf[i];}return str;}void word::Exp_Game()//使用说明{cout << "\t\t欢迎进入使用说明界面" << endl<<endl;cout << "\t\t 管理员操作说明 " << endl;cout << "\t\t(1)、添加词汇时,应注意输入词汇的正确。" << endl;cout << "\t\t(2)、添加单个单词时,词汇意思由中文分号隔开末尾不能有其他字符 如:老板;雇主" << endl;cout << "\t\t(3)、添加短语时,注意中间空格只能有一个末尾不能有其他字符 如: ask to do" << endl<<endl;cout << "\t\t 答题操作说明 " << endl;cout << "\t\t(1)、回答中文时只允许输入一个中文意思且末尾不允许有任何字符 如: word. 单词" << endl;cout << "\t\t(2)、回答单词时只允许输入一个单词且末尾不允许有任何字符如: 单词;word" << endl;cout << "\t\t(3)、回答短语时注意中间空格且末尾不允许有任何字符 如: 要求做某事; ask to do sth" << endl;}

word.h

#pragma once#include<iostream>#include<fstream>#include<string>#include<ctime>#include<conio.h>#include<Windows.h>#define FILENAME1 "words.txt"//存储词汇#define FILENAME2 "grade.txt"//存储等级#define FILENAME3 "account.txt"//存储密码#define object1 5//每一关的单词数量#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 Set_Show();//设置界面void Save_Words();//保存void Show_Words();//显示public://学习操作void Start_Game();//开始学习void Continue_Game();//继续学习void Save_Game();//保存学习void Ope_Game();//操作void Menu_Game();//学习界面void Continue_Init();//获取等级void random(int a[]);//随机函数word **Grade_Words;//按等级存储词汇void Init_Grade_Num();//数量int Grade_Num;//等级词汇数量void Init_Game(int);//初始化void Show_Game();//显示void Start_Game_Words(int a[]);//单词void Start_Game_Mean(int a[]);//意思int grade;//等级bool judge = false;//判断是否是开始之后的继续学习public://登录void Acc_Game();//登录界面void Acc_Save();//保存void Acc_Init();//初始化string Password;//密码void Mod_Acc();//修改密码string Judge_Acc();//判断密码bool Acc_Flag = false;//锁定判断int Acc_Num=3;//次数判断bool Judge_Pass=false;//判读之前是否登录成功void Exp_Game();//使用说明};

Ps:完整代码及资源包资源下载下载压缩包即可

免费下载地址:/download/qq_43589790/20419895

如果觉得《计算机辅助教学(CAI)软件开发:教小学生学英语》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。