当前位置: 首页 > news >正文

背单词工具(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;elsebreak;}}}}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];   //记录需要背诵单词的次数,一开始都是1for (int k = 0; k < 100; k++)num_of_recite[k] = 1;int sucessful = 0;            //判断单词是否背完了,背完了就是1,没有背完就是0if (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;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • stm32番外-----0.96寸OLED播放电影《你的名字》
  • vue、react前端框架实现TodoList页面案例
  • HTTP模块(二)
  • “论大数据处理架构及其应用”写作框架,软考高级论文,系统架构设计师论文
  • HTML常见标签——超链接a标签
  • 10 VUE Element
  • 【概率论】-2-概率论公理(Axioms of Probability)
  • pyqt designer使用spliter
  • NumpyPandas:Pandas库(50%-100%)
  • 微信小程序配置访问服务器失败所发现的问题及解决方案
  • 接入百度文心一言API教程
  • Godot入门 05收集物品
  • Windows 端口占用 Port 端口占用 如何发现端口占用并且强杀?
  • 【七】Hadoop3.3.4基于ubuntu24的分布式集群安装
  • 在生信分析中大家需要特别注意的事情​
  • 《剑指offer》分解让复杂问题更简单
  • css布局,左右固定中间自适应实现
  • Iterator 和 for...of 循环
  • JavaScript 基本功--面试宝典
  • nfs客户端进程变D,延伸linux的lock
  • pdf文件如何在线转换为jpg图片
  • spark本地环境的搭建到运行第一个spark程序
  • tensorflow学习笔记3——MNIST应用篇
  • 产品三维模型在线预览
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 和 || 运算
  • 前端知识点整理(待续)
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 日剧·日综资源集合(建议收藏)
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 推荐一个React的管理后台框架
  • 微信小程序:实现悬浮返回和分享按钮
  • 一道面试题引发的“血案”
  • 智能合约Solidity教程-事件和日志(一)
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​浅谈 Linux 中的 core dump 分析方法
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #nginx配置案例
  • (6)设计一个TimeMap
  • (十) 初识 Docker file
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (四)JPA - JQPL 实现增删改查
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (转)大型网站架构演变和知识体系
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • .FileZilla的使用和主动模式被动模式介绍
  • .htaccess配置常用技巧
  • .net web项目 调用webService
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NET 服务 ServiceController
  • .NET 项目中发送电子邮件异步处理和错误机制的解决方案
  • .NET+WPF 桌面快速启动工具 GeekDesk
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)