转载

[写代码]wordList——百词斩CLI版

原文链接:http://www.cnblogs.com/vencentX/p/4550603.html
无聊写的,结果越写越大。。。词典是网上找的,跟我的设想有点不一样所以修改了一下它的格式用的下面的代码。
 1 #include <iostream>
 2 #include <fstream>
 3 #include <vector>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     ifstream fileRead("temp.dat");
 9     vector<int> num;
10     vector<string> en;
11     vector<string> cn;
12     int numbuffer;
13     string enbuffer, cnbuffer;
14     while(fileRead >> numbuffer >> enbuffer >> cnbuffer)
15     {
16         num.push_back(numbuffer);
17         en.push_back(enbuffer);
18         cn.push_back(cnbuffer);
19     }
20     fileRead.close();
21     ofstream fileWrite("data.dat", ios::out);
22     for(int i = 0; i < cn.size(); i++)
23     {
24         fileWrite << en[i] << " " << cn[i] << " " << 0 << endl;    //初始化词典
25     }
26 }
格式化词典
  接下来是程序部分。  
 1 #pragma once
 2 
 3 #include <iostream>
 4 #include <string>
 5 #include <cstring>
 6 
 7 using namespace std;
 8 
 9 typedef class __WORDLIST
10 {
11 public:                            /*构造析构函数*/
12     __WORDLIST();                //默认必须是空,否则在getWord函数返回的就不是NULL指针了
13     __WORDLIST(string, string, int);    //用于初始化新增单词的构造函数
14     __WORDLIST(string, string);    //用于修改单词的构造函数
15     ~__WORDLIST();
16 public:    
17     const string &getEnglish() const;        //获取单词信息,为了dataBase中的排序闭包,因此返回const
18     const string &getChinese() const;
19     const int &getWrongTimes() const;
20     void changeEnglish(string);    //修改单词成员
21     void changeChinese(string);
22     void changeWrongTimes(int);
23     void addWrongTimes();
24 protected:                        //单词双意
25     string English;
26     string Chinese;
27     int WrongTimes;    //单词错的次数
28 }wordList;
wordList.h
 1 #include "wordList.h"
 2 
 3 __WORDLIST::__WORDLIST() {}
 4 
 5 __WORDLIST::__WORDLIST(string en, string cn, int tm = 0) : English(en), Chinese(cn), WrongTimes(tm){}
 6 
 7 __WORDLIST::__WORDLIST(string en, string cn) : English(en), Chinese(cn){}
 8 
 9 __WORDLIST::~__WORDLIST() {}
10 
11 const string &wordList::getEnglish() const
12 {
13     return English;
14 }
15 
16 const string &wordList::getChinese() const
17 {
18     return Chinese;
19 
20 }
21 const int &wordList::getWrongTimes() const
22 {
23     return WrongTimes;
24 }
25 
26 void wordList::changeEnglish(string curEnglish)
27 {
28     English = curEnglish;
29 }
30 void wordList::changeChinese(string curChinese)
31 {
32     Chinese = curChinese;
33 }
34 
35 void wordList::changeWrongTimes(int curWrongTime)
36 {
37     WrongTimes = curWrongTime;
38 }
39 
40 void wordList::addWrongTimes()
41 {
42     WrongTimes++;
43 }
wordList.cpp
 1 /*直接对文件操作的类*/
 2 
 3 #pragma once
 4 
 5 #include <iostream> 
 6 #include <vector>
 7 #include "wordList.h"
 8 
 9 using namespace std;
10 
11 typedef class __DATABASE
12 {
13 public:    
14     __DATABASE();    //读取文件
15     ~__DATABASE();    //保存文件
16 public:
17     int wordSize();                        //统计单词数,返回值为单词数
18     bool wordIsEmpty();                    //判断词典是否为空,返回值为判断是否为空
19     void sortWord();                    //按字典序对词典进行排序
20     void addWord(__WORDLIST);            //添加新单词
21     bool removeWord(int);                //根据英文序号查找并删除单词
22     __WORDLIST getWord(int);            //根据英文序号对应单词,返回值为单词类
23     int getWordWrongTime(int);            //根据英文序号获取对应单词错的次数
24     int searchWord(string);                //根据英文查找对应单词,返回值为单词序号(二分)
25     bool changeWordNum(int, __WORDLIST);//按序号对应单词并修改,返回是否成功
26     string getChinese(int);                //获取对应单词的中文信息
27     void addWrongTimes(int);            //增加错误次数
28     vector<__WORDLIST> getWrongWords();    //获取错词的信息(只要错了就获取)
29     int getWordNum(string);                //获取单词序号,用于统计错词
30     void rmFromWrong(string);            //从错词库中删除
31 protected:
32     vector<__WORDLIST> word;
33     __WORDLIST wordlist;
34 }DATABASE;
dataBase.h
  1 #include <iostream>
  2 #include <algorithm>
  3 #include <string>
  4 #include <fstream>
  5 #include "dataBase.h"
  6 
  7 #define NOTFOUND_INT -1
  8 #define NOTFOUND_BOOL false
  9 #define CHANGESUCCESS true
 10 
 11 using namespace std;
 12 
 13 __DATABASE::__DATABASE()    /*初始化操作*/
 14 {
 15     string enBuffer;
 16     string cnBuffer;
 17     int tmBuffer;
 18 
 19     ifstream fileRead("Data/dictionary.dat");    //打开词典
 20     if (!fileRead)
 21     {
 22         /*提示错误信息*/
 23         cerr << "找不到词典文件!请将词典文件放入Data文件夹内!" << endl;
 24         system("pause");
 25         exit(EXIT_FAILURE);
 26     }
 27     sortWord();
 28     while (fileRead >> enBuffer >> cnBuffer >> tmBuffer)    //硬盘文件转入内存
 29     {
 30         wordlist.changeChinese(cnBuffer);
 31         wordlist.changeEnglish(enBuffer);
 32         wordlist.changeWrongTimes(tmBuffer);
 33 
 34         word.push_back(wordlist);                //扔入容器中以备操作
 35     }
 36     fileRead.close();
 37 }
 38 
 39 __DATABASE::~__DATABASE()                        //保存词典
 40 {
 41     ofstream fileWrite("Data/dictionary.dat", ios::out);
 42     for (int i = 0; i < wordSize(); i++)
 43     {
 44         fileWrite << word[i].getEnglish() << " " 
 45                   << word[i].getChinese() << " " 
 46                   << word[i].getWrongTimes() << endl;
 47     }
 48     fileWrite.close();
 49 }
 50 
 51 int DATABASE::wordSize()        //统计单词数,返回值为单词数
 52 {
 53     return word.size();
 54 }
 55 
 56 bool DATABASE::wordIsEmpty()    //判断词典是否为空,返回值为判断是否为空
 57 {
 58     return wordSize() == 0 ? true : false;
 59 }
 60 
 61 void DATABASE::sortWord()        //按字典序对词典进行排序
 62 {
 63     sort(begin(word), end(word), [](const wordList &a, const wordList &b) //闭包解决sort传值问题
 64     {
 65         return a.getEnglish() < b.getEnglish();
 66     });
 67 }
 68 
 69 void DATABASE::addWord(wordList curwordlist)    //添加新单词
 70 {
 71     word.push_back(curwordlist);
 72     sortWord();
 73 }
 74 
 75 wordList DATABASE::getWord(int num)                //根据英文序号对应单词,返回值为单词节点
 76 {
 77     if (num < 0 || num > wordSize() - 1)
 78     {
 79         wordList *null = new wordList();
 80         return *null;                            //下表不合法,返回一个空节点
 81     }
 82     return word[num];
 83 }
 84 
 85 bool DATABASE::removeWord(int num)                //删除单词
 86 {
 87     if(num < 0 || num > wordSize())
 88     {
 89         return NOTFOUND_BOOL;
 90     }
 91     else
 92     {
 93         word.erase(begin(word) + num - 1);
 94         return CHANGESUCCESS;
 95     }
 96 }
 97 
 98 int DATABASE::searchWord(string curEnglish)        //根据英文查找对应单词,返回值为单词序号(二分)
 99 {
100     sortWord();                                                //想二分,先排序
101     int left = 0;
102     int right = wordSize() - 1;
103     int middle;
104     while (left <= right)
105     {
106         middle = (left + right) / 2;
107         if (word[middle].getEnglish() == curEnglish)
108         {
109             return middle;
110         }
111         else if (word[middle].getEnglish() > curEnglish)    //在左
112         {
113             right = middle - 1;
114         }
115         else                                                //在右
116         {
117             left = middle + 1;
118         }
119     }
120     return NOTFOUND_INT;
121 }
122 
123 bool DATABASE::changeWordNum(int num, wordList curwordlist)                //按序号对应单词并修改,返回是否成功
124 {
125     if (num < 0 || num > wordSize() - 1)
126     {
127         return NOTFOUND_BOOL;
128     }
129     word[num] = curwordlist;
130     sortWord();                //排序
131     return CHANGESUCCESS;
132 }
133 
134 int DATABASE::getWordWrongTime(int num)    //获取该词错次数
135 {
136     return word[num].getWrongTimes();
137 }
138 
139 string DATABASE::getChinese(int num)    //获取中文翻译
140 {
141     return word[num].getChinese();
142 }
143 
144 
145 void DATABASE::addWrongTimes(int num)
146 {
147     word[num].addWrongTimes();
148 }
149 
150 vector<__WORDLIST> DATABASE::getWrongWords()    //获取错词信息
151 {
152     vector<__WORDLIST> wrongWords;
153     int LEN = wordSize();
154     for (int i = 0; i < LEN; i++)
155     {
156         if (word[i].getWrongTimes() != 0)
157         {
158             wrongWords.push_back(word[i]);
159         }
160     }
161     sort(begin(wrongWords), end(wrongWords), [](const wordList &a, const wordList &b)
162     {//sort闭包,按照单词的错误次数从小到大排出来
163         return a.getWrongTimes() < b.getWrongTimes();
164     });
165     return wrongWords;
166 }
167 
168 int DATABASE::getWordNum(string curEnglish)                //获取单词序号,用于统计错词
169 {
170     return searchWord(curEnglish);
171 }
172 
173 void DATABASE::rmFromWrong(string curEnglish)            //从错词库中删除
174 {
175     int temp = searchWord(curEnglish);
176     word[temp].changeWrongTimes(0);
177 }
178 
179 //bool DATABASE::changeWordWod(wordList tarwordlist, wordList curwordlist)//按单词对应单词并修改,返回是否成功
180 //{
181 //    int LEN = wordSize() - 1;
182 //    bool FOUND = false;
183 //    for (int i = 0; i < LEN; i++)
184 //    {
185 //        if ()
186 //    }
187 //    if (FOUND)
188 //    {
189 //        return FOUND;
190 //    }
191 //    else
192 //    {
193 //        return NOTFOUND_BOOL;
194 //    }
195 //}
dataBase.cpp
 1 #pragma once
 2 
 3 #include "dataBase.h"
 4 
 5 typedef class __KILLEDLIST : public __DATABASE
 6 {
 7 public:
 8     __KILLEDLIST();
 9     ~__KILLEDLIST();
10 }killedList;
killedList.h
 1 #include "killedList.h"
 2 #include <fstream>
 3 
 4 using namespace std;
 5 
 6 
 7 __KILLEDLIST::__KILLEDLIST() : __DATABASE()
 8 {
 9     string enBuffer;
10     string cnBuffer;
11     int tmBuffer;
12     ifstream fileRead("Data/killed.dat");    //打开已斩词典
13     if (!fileRead)
14     {
15         /*提示错误信息*/
16         cerr << "找不到斩词文件!" << endl;
17         system("pause");
18         exit(EXIT_FAILURE);
19     }
20     vector<wordList>().swap(word);//由于是继承来的,所以在调用子类构造函数时一定会调用父类的。
21                                   //这时候vector内非空,用这个方法清空vector。
22 //    word.clear();                  //不可行,得到的值不一定是0(word不一定是空)
23 //    cout << word.capacity() << endl;
24     sortWord();
25     while (fileRead >> enBuffer >> cnBuffer >> tmBuffer)    //硬盘文件转入内存
26     {
27         wordlist.changeChinese(cnBuffer);
28         wordlist.changeEnglish(enBuffer);
29         wordlist.changeWrongTimes(tmBuffer);
30 
31         word.push_back(wordlist);                //扔入容器中以备操作
32     }
33     fileRead.close();
34 }
35 
36 __KILLEDLIST::~__KILLEDLIST()
37 {
38     ofstream fileWrite("Data/killed.dat", ios::out);
39     for (int i = 0; i < wordSize(); i++)
40     {
41         fileWrite << word[i].getEnglish() << " " 
42                   << word[i].getChinese() << " " 
43                   << word[i].getWrongTimes() << endl;
44     }
45     fileWrite.close();
46 }
killedList.cpp
 1 #pragma once
 2 
 3 #include <vector>
 4 #include <string>
 5 #include <fstream>
 6 #include <iostream>
 7 #include <cstdlib>
 8 #include <iomanip>
 9 #include "dataBase.h"
10 #include "killedList.h"
11 
12 using namespace std;
13 
14 typedef class __MAINFRAME
15 {
16 public:                    /*构造、析构函数*/
17         __MAINFRAME();
18         ~__MAINFRAME();
19 public:                    /*功能*/
20     int CLIwordInit();    //初始化界面
21     void wordInput();    //录入新单词
22     void wordShow();    //显示词典
23     void killShow();    //显示已斩单词
24     void sortWord();    //单词排序
25     void wordChange();    //修改单词
26     void wordDelete();    //删除单词
27     void wordLooking();//查询单词
28     void wordKiller(int);//斩词
29     void killedRescue();//恢复已斩单词
30     void wordExercise();//背单词(可斩词)
31     void wordExam();    //呵呵哒模式
32     void wordReview();    //复习单词功能
33     void aboutMe();        //关于作者        
34     void famousMotto();    //打印名言        **
35     void wordExit();    //退出本软件
36 //public:                            //test
37 //    __DATABASE getDatabase();    //test
38 protected:
39     __DATABASE dataBase;    //单词数据库
40     __KILLEDLIST killedBase;//已斩单词数据库
41 }mainFrame;
mainframe.h
  1 #include "mainframe.h"
  2 #include <random>
  3 #include <algorithm>
  4 #include <iomanip>
  5 
  6 __MAINFRAME::__MAINFRAME() {}
  7 
  8 __MAINFRAME::~__MAINFRAME() {}
  9 
 10 void outputBlank(int n)                    //输出回车,规划界面。
 11 {
 12     for (int i = 0; i < n; i++)
 13     {
 14         cout << endl;
 15     }
 16 }
 17 
 18 void mainFrame::famousMotto()    //打印名言
 19 {
 20     ifstream fileOpen("Data\motto.dat");
 21     string temp;
 22     vector<string> motto;
 23     while (fileOpen >> temp)
 24     {
 25         motto.push_back(temp);
 26     }
 27     random_device rd;    //种子
 28     uniform_int_distribution<int> dicSeed(0, 10);    //生成从词典取单词的随机数的种子
 29     int mtrdm = dicSeed(rd);
 30     cout << "*********今日名言: " << motto[mtrdm] << "*********" << endl;
 31     fileOpen.close();
 32 }
 33 
 34 void mainFrame::aboutMe()        //关于作者
 35 {
 36     system("cls");
 37     outputBlank(10);
 38     cout << "                  HitomiSAMA发现了彩蛋,Young man!" << endl;
 39     outputBlank(10);
 40     system("pause");
 41 }
 42 
 43 int mainFrame::CLIwordInit()        //命令行版初始化界面
 44 {
 45     int choice;
 46     bool initFlag = true;
 47     bool exitflag = false;
 48     //    system("cls");
 49     while (1)
 50     {
 51         if (exitflag == true)
 52         {
 53             outputBlank(12);
 54             cout << setw(50) << "谢谢HitomiSAMA的使用!" << setw(20);
 55             outputBlank(12);
 56             return EXIT_SUCCESS;
 57         }
 58         //        famousMotto();
 59         cout << "*******************************欢迎进入wordKiller*******************************" << endl;
 60         cout << "****                                                                       ****" << endl;
 61         cout << "****                           0.单词查询                                  ****" << endl;
 62         cout << "****                           1.录入新单词                                ****" << endl;
 63         cout << "****                           2.显示词典                                  ****" << endl;
 64         cout << "****                           3.显示已斩单词                              ****" << endl;
 65         cout << "****                           4.恢复已斩单词                              ****" << endl;
 66         cout << "****                           5.背单词                                    ****" << endl;
 67         cout << "****                           6.呵呵哒模式                                ****" << endl;
 68         cout << "****                           7.修改单词                                  ****" << endl;
 69         cout << "****                           8.删除单词                                  ****" << endl;
 70         cout << "****                           9.复习错词                                  ****" << endl;
 71         cout << "****                           10.退出软件                                 ****" << endl;
 72         outputBlank(1);
 73         if (initFlag == true)
 74         {
 75             cout << "请选择HitomiSAMA想要使用的功能:     ";
 76         }
 77         else
 78         {
 79             cout << "HitomiSAMA的输入有误,请重试!" << endl;
 80         }
 81         cin >> choice;
 82         if (choice == 12345 || (choice >= 0 && choice <= 10))
 83         {
 84             initFlag = true;
 85         }
 86         else
 87         {
 88             initFlag = false;
 89             system("cls");
 90             continue;
 91         }
 92         switch (choice)
 93         {
 94         case 1:    wordInput();     break;
 95         case 2: wordShow();         break;
 96         case 3: killShow();         break;
 97         case 4: killedRescue();     break;
 98         case 5: wordExercise();  break;
 99         case 6: wordExam();         break;
100         case 7: wordChange();      break;
101         case 8: wordDelete();     break;
102         case 9: wordReview();     break;
103         case 0: wordLooking();     break;
104         case 10: exitflag = true; break;
105         case 12345: aboutMe();     break;
106         }
107         system("cls");
108     }
109 }
110 void mainFrame::wordLooking()//查询单词
111 {
112     system("cls");
113     string curEnglish = "!";
114     cout << "****                           0.单词查询                                  ****" << endl;
115     outputBlank(2);
116     while (curEnglish != "#")
117     {
118         cout << "请输入HitomiSAMA想要查询的单词的拼写,输入"#"退出查询功能:    ";
119         cin >> curEnglish;
120         fflush(stdin);
121         int wd = dataBase.searchWord(curEnglish);
122         if (wd == -1)
123         {
124             cout << "并没有找到该单词!" << endl << endl;
125         }
126         else
127         {
128             cout << "单词 " << curEnglish << " 的中文解释为: " << dataBase.getChinese(wd) << endl << endl;
129         }
130     }
131 }
132 void mainFrame::wordInput()    //录入新单词
133 {
134     string curEnglish = "!";
135     string curChinese;
136 
137     system("cls");
138     cout << "****                           1.录入新单词                                ****" << endl;
139     outputBlank(2);
140     while (curEnglish != "#")
141     {
142         cout << "请输入HitomiSAMA想要录入的英文单词,按#退出:      ";
143         cin >> curEnglish;
144         if (curEnglish == "#")
145         {
146             break;
147         }
148         if (dataBase.searchWord(curEnglish) >= 0)    //存在
149         {
150             /*提示单词已存在,不需要添加,返回*/
151             cout << "单词已存在,并不需要再次添加。" << endl;
152         }
153         else
154         {
155             /*输出提示信息,并且输入 中文单词*/
156             cout << "请输入汉语释意:      ";
157             cin >> curChinese;
158             int flag = 0;
159             cout << "HitomiSAMA要录入的单词为: " << curEnglish << ", 它的解释为: " << curChinese << "确认录入本单词吗?(1确认0再想想)" << endl;
160             cin >> flag;
161             if (flag == 1)
162             {
163                 wordList BUFFER(curEnglish, curChinese, 0);
164                 dataBase.addWord(BUFFER);
165                 cout << "录入完毕,HitomiSAMA录入的单词为: " << curEnglish << ", 它的解释为: " << curChinese << endl;
166             }
167             else if (flag == 0)
168             {
169                 cout << "撤销成功!" << endl << endl;
170             }
171             else
172             {
173                 cout << "HitomiSAMA输入的信息有误!" << endl;
174             }
175         }
176     }
177 }
178 
179 void mainFrame::wordShow()    //显示词典信息
180 {
181     int LEN = dataBase.wordSize();
182     /*输出提示信息:查看完单词表后请关闭*/
183     system("cls");
184     cout << "****                           2.显示词典                                  ****" << endl;
185     outputBlank(2);
186     cout << "HitomiSAMA的词典里一共有 " << dataBase.wordSize() << "个单词。" << endl;
187     for (int i = 0; i < LEN; i++)
188     {
189         wordList BUFFER;
190         BUFFER = dataBase.getWord(i);
191         cout << BUFFER.getEnglish() << " " << BUFFER.getChinese() << endl;
192     }
193     //    system("notepad Data\dictionary.dat");    //读取文件
194     outputBlank(2);
195     cout << "按任意键返回。 " << endl;
196     fflush(stdin);
197     getchar();
198 }
199 
200 void mainFrame::sortWord()    //单词排序
201 {
202     dataBase.sortWord();
203 }
204 
205 void mainFrame::wordChange()    //修改单词
206 {
207     int Num;
208     int flag = 1;
209     string curEnglish = "!";
210     string curChinese;
211     system("cls");
212     cout << "****                           7.修改单词                                  ****" << endl;
213     outputBlank(2);
214     while (curEnglish != "#")
215     {
216         if (dataBase.wordIsEmpty())
217         {
218             bool ADD;
219             cout << endl << "HitomiSAMA还没有添加任何单词,是否要添加单词(1添加/0不添加)?" << endl;
220             cin >> ADD;
221             fflush(stdin);
222             if (ADD)
223             {
224                 wordInput();
225                 break;
226             }
227             else
228             {
229                 return;
230             }
231         }
232         while (flag == 1 || curEnglish != "#")
233         {
234             cout << "请输入HitomiSAMA想要修改的单词的拼写,输入#退出:      ";        //词库太大,不提供序号修改服务
235             cin >> curEnglish;
236             fflush(stdin);    //清空缓冲区
237             if (dataBase.searchWord(curEnglish) < 0)
238             {
239                 /*提示单词不存在,输入错误,返回*/
240                 cout << "此单词并不能存在,请重试。" << endl;
241             }
242             else
243             {
244                 Num = dataBase.searchWord(curEnglish);
245                 cout << "此单词的中文解释为: " << dataBase.getChinese(Num) << endl;
246                 cout << "请输入HitomiSAMA想要修改单词对应的中文解释:      ";
247                 cin >> curChinese;
248                 fflush(stdin);
249                 wordList BUFFER(curEnglish, curChinese, dataBase.getWordWrongTime(Num));    /*写*/
250                 dataBase.changeWordNum(Num, BUFFER);
251                 cout << "修改成功! 是否继续修改(1是/0否)?    ";
252                 cin >> flag;
253             }
254         }
255         getchar();
256         return;
257         /*提示修改成功*/
258     }
259 }
260 
261 void mainFrame::wordDelete()    //删除单词
262 {
263     system("cls");
264     string curEnglish = "!";
265     string curChinese;
266     int Num;
267     cout << "****                           8.删除单词                                  ****" << endl;
268     outputBlank(2);
269     while (curEnglish != "#")
270     {
271         cout << "请输入HitomiSAMA想删除的单词的英文,输入#退出:      ";
272         cin >> curEnglish;
273         if (curEnglish == "#")
274         {
275             break;
276         }
277         if (dataBase.searchWord(curEnglish) < 0)    //不存在
278         {
279             cout << "HitomiSAMA选的单词并不存在,请重新选择! " << endl;
280         }
281         else
282         {
283             int flag;
284             cout << "确认要删除它吗?(1是/0否)    ";
285             cin >> flag;
286             fflush(stdin);
287             if (flag == 1)
288             {
289                 Num = dataBase.searchWord(curEnglish) + 1;
290                 dataBase.removeWord(Num);
291                 cout << "删除成功!HitomiSAMA再也见不到它了" << endl;
292             }
293             else
294             {
295                 cout << "撤销成功!" << endl;
296             }
297         }
298     }
299 }
300 
301 void mainFrame::wordExercise()    //背单词
302 {
303     system("cls");
304     cout << "****                           5.背单词                                    ****" << endl;
305     random_device rd;
306     uniform_int_distribution<int> dicSeed(0, dataBase.wordSize() - 1);    //生成从词典取单词的随机数的种子
307     dicSeed(rd);
308     vector<wordList> answers;
309     int flag = 1;
310     while (flag == 1)
311     {
312         if (flag != 1)
313         {
314             return;
315         }
316         int TIME;
317         cout << "HitomiSAMA的词典里有" << dataBase.wordSize() << "个单词,HitomiSAMA想背几个单词?      ";
318         cin >> TIME;
319         fflush(stdin);
320         for (int i = 0; i < TIME; i++)
321         {
322             int chosen = dicSeed(rd);
323             wordList word = dataBase.getWord(chosen);
324             answers.push_back(word);
325             cout << "Round " << i + 1 << ":  " << answers[i].getEnglish() << setw(10) << answers[i].getChinese() << endl;
326             wordKiller(chosen);    //斩词功能
327         }
328         cout << endl << "不尽兴?还要再来一发吗?(1来一发/0不用了)      ";
329         cin >> flag;
330     }
331 }
332 
333 void mainFrame::wordExam()    //呵呵哒模式
334 {
335     system("cls");
336     cout << "****                           6.呵呵哒模式                                ****" << endl;
337     random_device rd;    //种子
338     uniform_int_distribution<int> dicSeed(0, dataBase.wordSize() - 1);    //生成从词典取单词的随机数的种子
339     uniform_int_distribution<int> ansSeed(0, 3);                        //生成四个数中的一个作为答案的种子
340     uniform_int_distribution<int> exaSeed(0, 1);                        //生成题目是汉译英还是英译汉的种子
341     dicSeed(rd);
342     wordList optAns[4];    //存储四个备选答案
343     wordList temp;        //用于存储错的单词
344     string answer;    //用来存放答案
345     int ansNum, chsNum;
346     int score = 0, count = 1;
347     int range;    //单词数目
348     int exam;
349     double ratio;
350     cout << "欢迎进入"呵呵哒"模式,HitomiSAMA希望考几个单词呢?      ";
351     cin >> range;
352     //range = 5;    //test
353     cout << "Link start!" << endl << endl;
354     for (int i = 0; i < range; i++)
355     {
356         exam = exaSeed(rd);
357         if (exam == 0)    /*题干中文选项英语*/
358         {
359             for (int i = 0; i < 4; i++)    //给四个答案赋值
360             {
361                 optAns[i] = dataBase.getWord(dicSeed(rd));
362             }
363             ansNum = ansSeed(rd);    //生成随机答案
364             for (int i = 0; i < 4; i++)
365             {
366                 cout << i + 1 << ": " << left << setw(10) << optAns[i].getEnglish();
367                 if ((i + 1) % 2 == 0)
368                 {
369                     cout << endl;
370                 }
371             }
372             cout << "Round " << count++ << ": 请选择英文为"" << optAns[ansNum].getChinese() << ""的单词。    ";
373 
374             cin >> chsNum;
375             chsNum--;    //匹配存放数字习惯
376             if (chsNum == ansNum)
377             {
378                 score++;
379                 cout << "HitomiSAMA答对了" << endl;
380             }
381             else
382             {
383                 int wr = dataBase.searchWord(optAns[ansNum].getEnglish());    //记下错词在词典vector中的位置
384                 cout << "对不起,HitomiSAMA答错了。" << endl;
385                 dataBase.addWrongTimes(wr);
386                 //cout << "+1" << endl;
387             }
388         }
389         else if (exam == 1)    /*题干英语选项中文*/
390         {
391             for (int i = 0; i < 4; i++)    //给四个答案赋值
392             {
393                 optAns[i] = dataBase.getWord(dicSeed(rd));
394             }
395             ansNum = ansSeed(rd);    //生成随机答案
396             for (int i = 0; i < 4; i++)
397             {
398                 cout << i + 1 << ": " << left << setw(10) << optAns[i].getChinese();
399                 if ((i + 1) % 2 == 0)
400                 {
401                     cout << endl;
402                 }
403             }
404             cout << "Round " << count++ << ": 请选择中文为"" << optAns[ansNum].getEnglish() << ""的汉语。    ";
405 
406             cin >> chsNum;
407             chsNum--;    //匹配存放数字习惯
408             if (chsNum == ansNum)
409             {
410                 score++;
411                 cout << "HitomiSAMA答对了" << endl;
412             }
413             else
414             {
415                 int wr = dataBase.searchWord(optAns[ansNum].getEnglish());    //记下错词在词典vector中的位置
416                 cout << "对不起,HitomiSAMA答错了。" << endl;
417                 dataBase.addWrongTimes(wr);
418                 //cout << "+1" << endl;
419             }
420         }
421     }
422     ratio = double(score) / double(range);
423     cout << "Stop,HitomiSAMA一共得了 " << score << "分" << "正确率为 " << ratio * 100 << "%,请再接再厉!" << endl;
424     cout << endl << "按任意键退出。" << endl;
425     fflush(stdin);
426     getchar();
427 }
428 
429 void mainFrame::killShow()    //显示已斩单词
430 {
431     system("cls");
432     cout << "****                           3.显示已斩单词                              ****" << endl;
433     if (killedBase.wordSize() == 0)
434     {
435         int flag;
436         cout << endl << "HitomiSAMA还没有斩任何单词!HitomiSAMA想斩个痛快吗?(1是/0否)      ";
437         cin >> flag;
438         if (flag)
439         {
440             wordExercise();
441             return;
442         }
443         else
444         {
445             return;
446         }
447     }
448     cout << "HitomiSAMA一共斩了: " << killedBase.wordSize() << " 个单词,请务必再接再厉!" << endl;
449     //    system("notepad Data\killed.dat");    //读取文件
450     for (int i = 0; i < killedBase.wordSize(); i++)
451     {
452         wordList BUFFER;
453         BUFFER = killedBase.getWord(i);
454         cout << BUFFER.getEnglish() << " " << BUFFER.getChinese() << endl;
455     }
456     outputBlank(2);
457     cout << "按任意键返回。 " << endl;
458     fflush(stdin);
459     getchar();
460 }
461 
462 void mainFrame::wordKiller(int Num)        //斩词
463 {
464     int judge;
465     cout << "输入1斩掉它,输入0饶了它!      ";
466     cin >> judge;
467     if (judge == 1)
468     {
469         killedBase.addWord(dataBase.getWord(Num));
470         dataBase.removeWord(Num + 1);
471     }
472 }
473 
474 void mainFrame::killedRescue()    //恢复已斩单词
475 {
476     system("cls");
477     bool FLAG = true;
478     string temp = "!";
479     cout << "****                           4.恢复已斩单词                              ****" << endl;
480     outputBlank(2);
481     while (temp != "#")
482     {
483         if (killedBase.wordIsEmpty())
484         {
485             int goKill;
486             cout << "HitomiSAMA的斩杀名单是空的!想斩个痛快吗?(1去/0不去)    ";
487             cin >> goKill;
488             fflush(stdin);
489             if (goKill)
490             {
491                 wordExercise();
492                 return;
493             }
494             else
495             {
496                 return;
497             }
498         }
499         if (FLAG)
500         {
501             cout << "HitomiSAMA一共斩了: " << killedBase.wordSize() << " 个单词。" << endl;
502             for (int i = 0; i < killedBase.wordSize(); i++)
503             {
504                 wordList BUFFER;
505                 BUFFER = killedBase.getWord(i);
506                 cout << BUFFER.getEnglish() << " " << BUFFER.getChinese() << endl;
507             }
508             FLAG = false;
509         }
510         else
511         {
512             cout << "还剩下 " << killedBase.wordSize() << " 个单词。" << endl;
513             for (int i = 0; i < killedBase.wordSize(); i++)
514             {
515                 wordList BUFFER;
516                 BUFFER = killedBase.getWord(i);
517                 cout << BUFFER.getEnglish() << " " << BUFFER.getChinese() << endl;
518             }
519         }
520         outputBlank(2);
521         cout << "请输入HitomiSAMA想恢复的单词的英文拼写,输入#退出恢复功能:" << endl;
522         cin >> temp;
523         if (temp == "#")
524         {
525             return;
526         }
527         int Num = killedBase.searchWord(temp);
528         if (Num == -1)
529         {
530             cerr << "没有找到该单词!" << endl << endl;
531         }
532         else
533         {
534             wordList wtmp = killedBase.getWord(Num);
535             killedBase.removeWord(Num + 1);    //删掉已斩词中的单词
536             dataBase.addWord(wtmp);        //放回词典中
537         }
538     }
539     fflush(stdin);
540     getchar();
541 }
542 
543 void mainFrame::wordReview()    //复习单词功能
544 {
545     int fuck = 1;
546     bool flag = true;
547     string curEnglish = "!";
548     system("cls");
549     cout << "****                           9.复习错词                                  ****" << endl;
550     outputBlank(2);
551     vector<__WORDLIST> temp = dataBase.getWrongWords();    //获取错词的容器
552     int LEN = temp.size();
553     if (LEN == 0)
554     {
555         cout << "HitomiSAMA一个错词都没有!你一定是没有好好背单词!快去背单词!" << endl;
556         system("pause");
557         wordExam();
558         return;
559     }
560     cout << "在过去的日子里,HitomiSAMA一共错了 " << temp.size() << "个单词,它们分别是:   " << endl;
561     for (int i = LEN - 1; i >= 0; i--)
562     {
563         cout << temp[i].getEnglish() << "  ""
564             << temp[i].getChinese() << ""  "
565             << "错了 " << temp[i].getWrongTimes() << "次。" << endl;
566     }
567     outputBlank(5);
568     while (fuck == 1)
569     {
570         if (flag)
571         {
572             cout << "现在HitomiSAMA有一次挑战他们的机会,是否迎战?(提示:此类挑战非同一般)(1是/0否)   ";
573             flag = false;
574         }
575         else if (!flag && curEnglish != "#")
576         {
577             cout << "HitomiSAMA爽哉?是否再来一次?(1是/0否)" << endl;
578         }
579         else
580         {
581             outputBlank(5);
582             cout << "*******************HitomiSAMA真怂!*******************" << endl;
583             outputBlank(5);
584             fflush(stdin);
585             system("pause");
586             return;
587         }
588         cin >> fuck;
589         if (fuck == 1)
590         {
591             system("cls");
592             random_device rd;    //种子
593             uniform_int_distribution<int> dicSeed(0, LEN - 1);    //生成从词典取单词的随机数的种子
594             dicSeed(rd);
595             int rdm;
596             cout << "HitomiSAMA好爽快!来战20个回合!想撤退的话可以使用"#"" << endl;
597             for (int i = 0; i < 20; i++)
598             {
599                 if (curEnglish == "#")
600                 {
601                     break;
602                 }
603                 rdm = dicSeed(rd);
604                 cout << "Round " << i + 1 << ": 请写出意思为 "" << temp[rdm].getChinese() << "" 的单词的拼写:    ";
605                 cin >> curEnglish;
606                 fflush(stdin);
607                 if (curEnglish != temp[rdm].getEnglish())
608                 {
609                     cout << "HitomiSAMA回答错了,正确答案应该是: " << temp[rdm].getEnglish() << endl;
610                 }
611                 else if (curEnglish == temp[rdm].getEnglish())
612                 {
613                     int choice;
614                     cout << "HitomiSAMA回答正确,是否把它放回(放回就不会出现在这里了!)?(1放了吧/0留着)    ";
615                     cin >> choice;
616                     if (choice == 1)
617                     {
618                         dataBase.rmFromWrong(curEnglish);
619                         LEN--;
620                     }
621                     if (LEN == 0)
622                     {
623                         cout << "HitomiSAMA没有任何错词了唷~" << endl;
624                         system("pause");
625                         return ;
626                     }
627                 }
628             }
629         }
630         else
631         {
632             return;
633         }
634     }
635     fflush(stdin);
636     getchar();
637 }
mainframe.cpp
 1 /*Unit Testing in CLI*/
 2 
 3 //*
 4 #include "mainframe.h"
 5 
 6 int main()
 7 {
 8     mainFrame testmode;
 9     testmode.CLIwordInit();
10     //DATABASE test = testmode.dataBase;
11     //__WORDLIST temp = test.getWord(0);
12 
13     return EXIT_FAILURE;    //未正常从mainframe中退出
14 }
15 //*/
unitTest.cpp
转载请声明本站地址,谢谢。
原文链接:http://www.cnblogs.com/vencentX/p/4550603.html
正文到此结束
Loading...