当前位置: 代码网 > it编程>编程语言>C/C++ > 背单词工具(C++)

背单词工具(C++)

2024年08月03日 C/C++ 我要评论
【代码】背单词工具(C++)

功能分析

  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;
}

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com