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

背单词工具(C++)
功能分析 生词本管理: 创建生词本文件:在构造函数中创建了“生词本.txt”“背词历史.log”“历史记录.txt”三个文件。添加单词:用户可以输入单词、词性和解释,将其添加到生词本中。查询所有单词:展示生词本中所有的单…...

面试八股 | 数据库引擎 | InnoDB和myISAM的区别?
⭐️⭐️⭐️InnoDB和MyISAM的区别? InnoDB : 1、使用的是行锁,操作时候只锁一行数据,不会对其他有影响,适合高并发工作 2、支持事务 3、不仅缓存索引还要缓存真实数据,适合高并发 4、默认安装 5、支持外键 6、…...

GEE计算五种植被指数(NDVI、EVI2、RVI、MTVI2、OSAVI)
目录 计算公式源代码计算公式 源代码 // 定义感兴趣区域(这里以一个简单的矩形区域为例) var region = ee.FeatureCollection("projects/a-flyllf0313/assets/dachang"); // 定义时间范围 var startDate = 2023-04-18; var endDate &...

C/S架构和B/C架构
C/S架构(Client/Server Architecture)和B/C架构(Browser/Client Architecture)是两种不同 的软件架构模型,它们各自有不同的特点和应用场景。 一、C/S架构(Client/Server Architecture) 1. 定…...

音乐曲谱软件Guitar Pro 8.2 for Mac 中文破解版
Guitar Pro 8.2 for Mac 中文破解版是一款功能强大的音乐曲谱软件,非常适合学习如何玩,改进技巧,重现喜爱的歌曲或陪伴自己。 Guitar Pro for Mac 是一款功能强大的音乐曲谱软件,非常适合学习如何玩,改进技巧…...

浅聊Web Storage(localStorage 和 sessionStorage)、cookie的使用场合
Web Storage(localStorage 和 sessionStorage)、cookie 一、Cookie二、Web StoragelocalStoragesessionStorage与 Cookies 的比较 一、Cookie Cookies 主要用于以下几种情况: 会话管理(Session Management): 登录、购…...

C语言输入输出缓冲机制
文章目录 输入输出缓冲机制概述为什么要有缓冲区缓冲区的类型引发缓冲区的刷新 原理实现 输入输出缓冲机制 概述 缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入 或者输出的数…...

javaEE-03-cookie与session
文章目录 Cookie创建Cookie获取Cookie更新CookieCookie 生命控制Cookie 有效路径 Session 会话创建和获取sessionSession 域数据的存取Session 生命周期控制浏览器和 Session 之间关联 Cookie Cookie 是服务器通知客户端保存键值对的一种技术,客户端有了 Cookie 后,…...

EtherNet/IP转Profinet协议网关(经典配置案例)
怎么样才能把EtherNet/IP和Profinet网络连接起来呢?这几天有几个朋友问到了这个问题,作者在这里统一为大家详细说明一下。其实有一个设备可以很轻松地解决这个问题,名为JM-PN-EIP,下面是详细介绍。 一,设备主要功能 1、捷米特J…...

华为云依赖引入错误
问题:记录一次项目加在华为云依赖错误,如下: 错误信息:Could not find artifact com.huawei.storage:esdk-obs-java:pom:3.1.2.1 in bintray-qcloud-maven-repo (https://dl.bintray.com/qcloud/maven-repo/) 找到本地仓库&#…...

【Ubuntu】Ubuntu 配置镜像源(ARM)
【Ubuntu】Ubuntu 配置镜像源(ARM) 零、起因 最近在QEMU中安装了个ubuntu-24.04-live-server-arm64,默认是国外的软件源,很慢,故替换到国内。 壹、替换 源地址(清华源) https://mirror.tun…...

速腾聚创激光雷达复现FAST-LIO
目录 1.软件环境 2.测试执行 3.代码学习 3.1.找主节点代码文件 3.2.整体流程结构 3.3.具体函数理解 记录复现FAST-LIO算法的过程和,代码梳理和理解 1.软件环境 Windows 10(64bits) VMware 16 Pro Ubuntu 20.04 ROS Noetic FAST-LIO的简化版、注释版。感谢…...

k8s核心知识总结
写在前面 时间一下子到了7月份尾;整个7月份都乱糟糟的,不管怎么样,日子还是得过啊, 1、7月份核心了解个关于k8s,iceberg等相关技术,了解了相关的基础逻辑,虽然和数开主线有点偏,但是…...

语言模型及数据集
一、定义 1、语言模型的目标是估计序列的联合概率,一个理想的语言模型就能够基于模型本身生成自然文本。 2、对一个文档(词元)序列进行建模, 假设在单词级别对文本数据进行词元化。 3、计数建模 (1)其中…...

linux如何卸载python3.5
卸载: 1、卸载python3.5 sudo apt-get remove python3.5 2、卸载python3.5及其依赖 sudo apt-get remove --auto-remove python3.5 3、清除python3.5 sudo apt-get purge python3.5 或者 sudo apt-get purge --auto-remove python3.5...

【BUG】已解决:TypeError: expected string or bytes-like object
TypeError: expected string or bytes-like object 目录 TypeError: expected string or bytes-like object 【常见模块错误】 【解决方案】 常见原因及解决方法 示例代码 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰…...

在linux上面用drissionpage自动化遇到反爬?
目录 一、反爬内容1、案例12、案例2 二、后来发现的问题解决 一、反爬内容 1、案例1 反爬的响应文本返回如下:爬虫均能精准识别,测试链接:https://ziyuan.baidu.com/crawltools/index)非正常爬虫访问时:返回的压缩报文内容无法直接识别,可一定程度上保护站点信息安…...

vue3大事件管理系统 === 首页 layout 文章分类页面 -
目录 首页 layout 架子 [element-plus 菜单] 基本架子拆解 登录访问拦截 用户基本信息获取&渲染 退出功能 [element-plus 确认框] 文章分类页面 - [element-plus 表格] 基本架子 - PageContainer 文章分类渲染 封装API - 请求获取表格数据 el-table 表格动态渲染 …...

堆的基本实现
一、堆的概念 在提出堆的概念之前,首先要了解二叉树的基本概念 一颗二叉树是节点的有限集合,该集合: 1、或者为空; 2、或者由一个根节点加上两颗分别称为左子树和右子树的两颗子树构成; 堆就是一颗完全二叉树&…...

Ubuntu上编译多个版本的frida
准备工作 Ubuntu20(WSL) 略 安装依赖 sudo apt update sudo apt-get install build-essential git lib32stdc-9-dev libc6-dev-i386 -y nodejs 去官网[1]下载nodejs,版本的话我就选的20.15.1: tar -xf node-v20.15.1-linux-x64.tar.xz 下载源码 …...

概率论三大分布
目录 基本概念 卡方分布(χ分布): t分布: F分布: 延伸 卡方分布在哪些具体情况下最适合用于数据分析? t分布在大样本情况下的表现与正态分布相比如何? F分布在进行方差比较时与t分布的区…...

Spring系统学习-基于XML的声明式事务
基本概念 在Spring框架中,基于XML的事务管理是一种通过XML配置文件来管理事务的方式。Spring提供了强大的事务管理功能,可以与多种持久化技术(如JDBC、Hibernate、JPA等)结合使用。以下是如何在Spring中使用基于XML的事务管理的基…...

iOS中的MVVM设计模式
目录 前言 一、MVVM简介 二、MVVM的核心思想 三、MVVM的优势 四、MVVM在iOS中的实现 1. 创建Model 2. 创建ViewModel 3. 创建View 4. 主入口 总结 前言 随着iOS开发的发展,构建可维护和可扩展的代码架构变得至关重要。Model-View-ViewModel (MVVM) 是一种…...

ES中的数据类型学习之ARRAY
Arrays | Elasticsearch Guide [7.17] | Elastic 中文翻译 :Array Elasticsearch 5.4 中文文档 看云 Arrays In Elasticsearch, there is no dedicated array data type. Any field can contain zero or more values by default, however, all values in the a…...

vue网络请求
post网络请求 import axios from axios import {ElMessage, ElLoading} from "element-plus" import { nextTick } from "vue" import JSONbig from json-bigint import { userToken } from "/constants/Constant.js";const defaultConfig {bas…...

几何光学基本原理——费马原理和射线方程
在几何光学中,射线方程用于描述光在折射率不均匀的介质中传播的路径。折射率的变化会导致射线发生弯曲,射线方程正是用于计算这种弯曲路径的。 几何光学的基本原理 几何光学假设光在介质中沿直线传播,但在折射率变化的介质中,光的…...

OpenCV车牌识别技术详解
第一部分:图像预处理 车牌识别(License Plate Recognition,LPR)是计算机视觉领域的一个重要应用,它涉及到图像处理、模式识别等多个方面。OpenCV作为一个强大的计算机视觉库,提供了丰富的车牌识别相关功能…...

解决llama_index中使用Ollama出现timed out 问题
现象: File "~/anaconda3/envs/leo_py38/lib/python3.8/site-packages/httpx/_transports/default.py", line 86, in map_httpcore_exceptionsraise mapped_exc(message) from exc httpx.ReadTimeout: timed out代码: from llama_index.core …...

Python爬虫技术 第14节 HTML结构解析
HTML 结构解析是 Web 爬虫中的核心技能之一,它允许你从网页中提取所需的信息。Python 提供了几种流行的库来帮助进行 HTML 解析,其中最常用的是 BeautifulSoup 和 lxml。 1. 安装必要的库 首先,你需要安装 requests(用于发送 HTT…...

【vue3|第18期】Vue-Router路由的三种传参方式
日期:2024年7月17日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^ 1.01365 = 37.7834;0.99365 = 0.0255 1.02365 = 1377.408…...