背单词工具(C++)

avatar
作者
筋斗云
阅读量:0

功能分析

  1. 生词本管理
    • 创建生词本文件:在构造函数中创建了“生词本.txt”“背词历史.log”“历史记录.txt”三个文件。
    • 添加单词:用户可以输入单词、词性和解释,将其添加到生词本中。
    • 查询所有单词:展示生词本中所有的单词、词性和翻译。
    • 精确查词:用户可以选择按照单词、词性或中文解释进行查词,并显示查询结果。
    • 删除单词:根据用户输入删除生词本中的特定单词。
  2. 背词功能
    • 背生词:从生词本中读取单词进行背诵,背诵完成后将生词从生词本中删除,并将相关信息添加到背词历史中。
  3. 历史记录查询
    • 根据时间查历史记录:用户输入年月日,查询该日期的背词历史记录,并将其保存到历史记录文件中。
    • 查询历史背词:展示历史记录文件中的内容。
  4. 其他功能
    • 更新日志:输出新增功能的说明。
    • 总的服务界面:提供菜单界面,用户根据序号选择相应的服务。

详细代码

#include <iostream> #include <fstream> #include <string> #include <sstream> #include <iomanip>    //输出控制头文件1 #include <time.h> #include <windows.h>  using namespace std;   class Recite {     fstream file;     fstream file1; public:     Recite();            //创建生词本文件     void insert_word();  //添加单词     void query_all();    //查询所有单词     void query_by_time();//根据时间查历史记录     void query_history();//查询历史背词     void query_exact();  //精确查词     void delete_word();  //删除单词     int get_num();       //返回生词本中单词的数量     void recite_word();  //背生词     void update_log();   //更新日志     void run();          //总的服务界面 };  Recite::Recite() {     file.open("生词本.txt");     file.close();     file.open("背词历史.log");     file.close();     file.open("历史记录.txt");     file.close(); }  void Recite::insert_word() {     clock_t startTime, endTime;     file.open("生词本.txt", ios::out | ios::app);   //在文件末尾处写入     if (file.is_open() == 1) {         //打开成功的话         startTime = clock();         char word[20], cha[5], trans[20];   //单词 词性 解释         cout << "请输入要写入错题本的单词:";         cin >> word;         cout << "请输入单词的词性:";         cin >> cha;         cout << "请输入单词的解释:";         cin >> trans;         file << word << " " << cha << " " << trans << endl;  //1就代表没有被删除的单词         file.close();         endTime = clock();         cout << "写入成功,总共用时" << (double) (endTime - startTime) / CLOCKS_PER_SEC << " s" << endl;     } else {         cout << "打开文件失败" << endl;         system("pause");     }  }  void Recite::query_all() {     clock_t startTime, endTime;     startTime = clock();     char buffer[100];     int number = 0;  //记录记录的条数     cout << " --------+----+---------" << endl;     cout << "|" << setw(8) << "单词";     cout << "|" << setw(4) << "词性";     cout << "|" << setw(8) << "翻译";     cout << "|" << endl;     cout << " --------+----+---------" << endl;     file.open("生词本.txt", ios::in | ios::app);     while (!file.eof()) {         file.getline(buffer, 100);         istringstream is(buffer);         string s1, s2, s3, s4;         is >> s1 >> s2 >> s3 >> s4;         if (s1 != "" && s2 != "" && s3 != "") {             number++;             cout << "|" << setw(8) << s1;             cout << "|" << setw(4) << s2;             cout << "|" << setw(8) << s3;             cout << "|" << endl;             cout << " --------+----+---------" << endl;         }     }     endTime = clock();     cout << "总共有" << number << "条记录,总共用时" << (double) (endTime - startTime) / CLOCKS_PER_SEC << " s" << endl;     file.close(); }  void Recite::query_by_time() {     file.open("背词历史.log", ios::in | ios::out | ios::app);     if (file.is_open()) {         string time;         cout << "请输入要查询的历史记录的年月日,格式为年-月-日:";         cin >> time;         string word[100], cha[100], trans[100];         int i = 0;         char buffer[100];         while (!file.eof()) {             file.getline(buffer, 100);             istringstream is(buffer);             string t1, t2;             is >> t1 >> t2;             if (t1 == time) {                 while (!file.eof()) {                     file.getline(buffer, 100);                     istringstream input(buffer);                     string s1, s2, s3;                     input >> s1 >> s2 >> s3;                     if (s1 != "" && s2 != "" && s3 != "") {                         word[i] = s1;                         cha[i] = s2;                         trans[i] = s3;                         i++;                     } else {                         if (s1 == time)                             continue;                         else                             break;                     }                 }             }         }         file.close();         file.open("历史记录.txt", ios::in | ios::out | ios::trunc);         for (int j = 0; j < i; j++)             file << word[j] << " " << cha[j] << " " << trans[j] << endl;         file.close();         query_history();     } else {         cout << "文件打开失败" << endl;         return;     } }  void Recite::query_history() {     clock_t startTime, endTime;     startTime = clock();     char buffer[100];     int number = 0;  //记录记录的条数     cout << " --------+----+---------" << endl;     cout << "|" << setw(8) << "单词";     cout << "|" << setw(4) << "词性";     cout << "|" << setw(8) << "翻译";     cout << "|" << endl;     cout << " --------+----+---------" << endl;     file.open("历史记录.txt", ios::in | ios::app);     while (!file.eof()) {         file.getline(buffer, 100);         istringstream is(buffer);         string s1, s2, s3, s4;         is >> s1 >> s2 >> s3 >> s4;         if (s1 != "" && s2 != "" && s3 != "") {             number++;             cout << "|" << setw(8) << s1;             cout << "|" << setw(4) << s2;             cout << "|" << setw(8) << s3;             cout << "|" << endl;             cout << " --------+----+---------" << endl;         }     }     endTime = clock();     cout << "总共有" << number << "条记录,总共用时" << (double) (endTime - startTime) / CLOCKS_PER_SEC << " s" << endl;     file.close(); }  void Recite::query_exact() {     clock_t startTime, endTime;     char buffer[100];     int i, number = 0;     cout << "1.按照单词查词" << endl;     cout << "2.按照词性查词" << endl;     cout << "3.按照中文解释查词" << endl;     cout << "请输入需要确定查词方式:";     cin >> i;     startTime = clock();     string word;     cout << "请输入要查的单词:";     cin >> word;     cout << " --------+----+---------" << endl;     cout << "|" << setw(8) << "单词";     cout << "|" << setw(4) << "词性";     cout << "|" << setw(8) << "翻译";     cout << "|" << endl;     cout << " --------+----+---------" << endl;     file.open("生词本.txt", ios::in);     switch (i) {         case 1:             while (!file.eof()) {                 file.getline(buffer, 100);                 istringstream is(buffer);                 string s1, s2, s3;                 is >> s1 >> s2 >> s3;                 if (s1 == word) {                     number++;                     cout << "|" << setw(8) << s1;                     cout << "|" << setw(4) << s2;                     cout << "|" << setw(8) << s3;                     cout << "|" << endl;                     cout << " --------+----+---------" << endl;                 }             }             endTime = clock();             cout << "查询成功,一共有" << number << "条记录,用时:" << (double) (endTime - startTime) / CLOCKS_PER_SEC                  << " s" << endl;             file.close();             break;         case 2:             while (!file.eof()) {                 file.getline(buffer, 100);                 istringstream is(buffer);                 string s1, s2, s3;                 is >> s1 >> s2 >> s3;                 if (s2 == word) {                     number++;                     cout << "|" << setw(8) << s1;                     cout << "|" << setw(4) << s2;                     cout << "|" << setw(8) << s3;                     cout << "|" << endl;                     cout << " --------+----+---------" << endl;                 }             }             endTime = clock();             cout << "查询成功,一共有" << number << "条记录,用时:" << (double) (endTime - startTime) / CLOCKS_PER_SEC                  << " s" << endl;             file.close();             break;         case 3:             while (!file.eof()) {                 file.getline(buffer, 100);                 istringstream is(buffer);                 string s1, s2, s3;                 is >> s1 >> s2 >> s3;                 if (s3 == word) {                     number++;                     cout << "|" << setw(8) << s1;                     cout << "|" << setw(4) << s2;                     cout << "|" << setw(8) << s3;                     cout << "|" << endl;                     cout << " --------+----+---------" << endl;                 }             }             endTime = clock();             cout << "查询成功,一共有" << number << "条记录,用时:" << (double) (endTime - startTime) / CLOCKS_PER_SEC                  << " s" << endl;             file.close();             break;         default:             //默认用单词查询             while (!file.eof()) {                 file.getline(buffer, 100);                 istringstream is(buffer);                 string s1, s2, s3;                 is >> s1 >> s2 >> s3;                 if (s1 == word) {                     number++;                     cout << "|" << setw(8) << s1;                     cout << "|" << setw(4) << s2;                     cout << "|" << setw(8) << s3;                     cout << "|" << endl;                     cout << " --------+----+---------" << endl;                 }             }             endTime = clock();             cout << "查询成功,一共有" << number << "条记录,用时:" << (double) (endTime - startTime) / CLOCKS_PER_SEC                  << " s" << endl;             file.close();             break;     } }  int Recite::get_num() {     file1.open("生词本.txt", ios::in);   //以只读方式打开生词本     char buffer[100];     int number = 0;     while (!file.eof()) {         file.getline(buffer, 100);         istringstream is(buffer);         string s1, s2, s3;         is >> s1 >> s2 >> s3;         if (s1 != " " && s2 != " " && s3 != " ")             number++;     }     file1.close();     return number; }  void Recite::delete_word() {     query_all();   //显示所有的记录     string str;     clock_t startTime, endTime;     cout << "请输入想要删除的单词:";     cin >> str;     startTime = clock();     file.open("生词本.txt", ios::in);     char buffer[100];     string str1[100], str2[100], str3[100];     int i = 0;     while (!file.eof()) {         file.getline(buffer, 100);         istringstream is(buffer);         string s1, s2, s3;         is >> s1 >> s2 >> s3;         if (s1 != str && s1 != "" && s2 != "" && s3 != "") {             str1[i] = s1;             str2[i] = s2;             str3[i] = s3;             i++;         }     }     file.close();     file.open("生词本.txt", ios::out | ios::trunc);  //以截断方式打开文件,清空所有内容     for (int j = 0; j < i; j++) {         file << str1[j] << " " << str2[j] << " " << str3[j] << " " << endl;     }     file.close();     endTime = clock();     cout << "删除成功,用时:" << (double) (endTime - startTime) / CLOCKS_PER_SEC << " s" << endl; }  void Recite::recite_word() {     file.open("生词本.txt", ios::in | ios::out);     if (file.is_open() == 1) {         clock_t startTime, endTime;         //遍历后将单词拷贝至内存         string word[100], cha[100], trans[100], str;          char buffer[100];         int i = 0;         while (!file.eof()) {             file.getline(buffer, 100);             istringstream is(buffer);             string s1, s2, s3;             is >> s1 >> s2 >> s3;             if (s1 != "" && s2 != "" && s3 != "") {                 word[i] = s1;                 cha[i] = s2;                 trans[i] = s3;                 i++;             }         }         int number = i;         cout << "本次需要复习的单词数量是:" << number << endl;         system("pause");         system("cls");         int num_of_recite[100];   //记录需要背诵单词的次数,一开始都是1         for (int k = 0; k < 100; k++)             num_of_recite[k] = 1;         int sucessful = 0;            //判断单词是否背完了,背完了就是1,没有背完就是0         if (number == 0)             sucessful = 1;         int num = 0;         startTime = clock();         while (sucessful == 0) {             for (int j = 0; j < i; j++) {                 if (num_of_recite[j] != 0) {                     cout << "中文意思:" << trans[j] << " " << cha[j] << endl;                     cout << "请输入单词:";                     cin >> str;                     if (str == word[j]) {                         cout << "正确!";                         num_of_recite[j]--;                         system("pause");                         system("cls");                         num++;                         if (num == number)                             sucessful = 1;                     } else {                         cout << "错误,正确答案是:" << word[j];                         num_of_recite[j]++;                         system("pause");                         system("cls");                     }                 }             }         }         endTime = clock();         cout << "恭喜你背完啦~~,用时:" << (double) (endTime - startTime) / CLOCKS_PER_SEC << " s" << endl;         //背完单词后清空单词表         file.close();         file.open("生词本.txt", ios::out | ios::trunc);         file.close();         //然后写入日志         file.open("背词历史.log", ios::out | ios::app);         SYSTEMTIME st = {0};         GetLocalTime(&st);         file << st.wYear << "-" << st.wMonth << "-" << st.wDay << " " << st.wHour << ":" << st.wMinute << ":"              << st.wSecond << endl;         for (int j = 0; j < i; j++) {             file << word[j] << " " << cha[j] << " " << trans[j] << endl;         }         file.close();     } else {         cout << "生词表为空,先加入生词再背诵吧" << endl;         return;     } }  void Recite::update_log() {      cout << "新增的内容:" << endl;     cout << "1.新增背词功能,在背诵完生词后生词会自动从生词表删除,并且添加到背词历史中" << endl;     cout << "2.新增历史生词查询功能,可以根据当天的年与日查询背诵完的生词" << endl; }  void Recite::run() {     cout << "------------------------------" << endl;     cout << "|欢迎使用大家一起背单词      |" << endl;     cout << "|1.添加生词                  |" << endl;     cout << "|2.显示所有生词              |" << endl;     cout << "|3.精确查词                  |" << endl;     cout << "|4.删除生词表中的词          |" << endl;     cout << "|5.背生词                    |" << endl;     cout << "|6.查询背诵历史              |" << endl;     cout << "|7.更新日志                  |" << endl;     cout << "|8.退出                      |" << endl;     cout << "------------------------------" << endl;     cout << "请输入需要服务的序号:";     int i;     cin >> i;     while (i != 8) {         switch (i) {             case 1:                 system("cls");                 insert_word();                 break;             case 2:                 system("cls");                 query_all();                 break;             case 3:                 system("cls");                 query_exact();                 break;             case 4:                 system("cls");                 delete_word();                 break;             case 5:                 system("cls");                 recite_word();                 break;             case 6:                 system("cls");                 query_by_time();                 break;             case 7:                 system("cls");                 update_log();                 break;             case 8:                 break;             default:                 cout << "对应数字的服务不存在,请重新输入" << endl;                 break;         }         system("pause");         system("cls");         cout << "------------------------------" << endl;         cout << "|欢迎使用背词宝version1.1    |" << endl;         cout << "|1.添加生词                  |" << endl;         cout << "|2.显示所有生词              |" << endl;         cout << "|3.精确查词                  |" << endl;         cout << "|4.删除生词表中的词          |" << endl;         cout << "|5.背生词                    |" << endl;         cout << "|6.查询背诵历史              |" << endl;         cout << "|7.更新日志                  |" << endl;         cout << "|8.退出                      |" << endl;         cout << "------------------------------" << endl;         cout << "请输入需要服务的序号:";         cin >> i;     } }  int main() {     Recite r;     r.run();      return 0; } 

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!