用python自制背单词程序_c++自制背单词应用

文件结构:

背词历史.log 用来存放背过的单词,存放的格式是

年-月-日 时:分:秒

单词 词性 中文解释

生词本.txt 用来存放当下要背诵的单词列表,格式是

单词 词性 中文解释

历史记录.txt 用来当做按照时间查询生词的缓存,记录最后一个词查询的结果

其格式与 生词本.txt 一样

主要功能:

更新日志:2018-9-4 背词宝version1.0 诞生2018-9-4 背词宝version1.1 诞生新增的内容:1.新增背词功能,在背诵完生词后生词会自动从生词表删除,并且添加到背词历史中2.新增历史生词查询功能,可以根据当天的年与日查询背诵完的生词

代码:#include "stdafx.h"#include #include #include #include #include     //输出控制头文件#include #include 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<> 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 << "条记录,总共用时"<> 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] << " "<> 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 << "2018-9-4 背词宝version1.0 诞生" << endl;cout << "2018-9-4 背词宝version1.1 诞生" << endl;cout << "新增的内容:" << endl;cout << "1.新增背词功能,在背诵完生词后生词会自动从生词表删除,并且添加到背词历史中" << endl;cout << "2.新增历史生词查询功能,可以根据当天的年与日查询背诵完的生词" << endl;}void Recite::run() {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 << "请输入需要服务的序号:";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;} 主要应用界面:查词界面:

按照时间查询历史记录:

背单词算法描述:1.将所有的 生词本.txt 中的单词都存放如内存中

2.初始化一个数组记录这个单词应该被拼写多少次,初始次数都是1,也就是一开始就会的单词没有必要再重复背诵了

3.当拼写对了的时候次数减一,每次循环的时候如果拼写次数为1则跳过这个单词的拼写

4.拼写错了则拼写次数加一

5.每当拼写对一个单词,就将记录拼写正确单词数量的变量加一,如果拼写正确单词的数量和生词本中生词数量一样的话就退出循环,否则继续循环,直到所有单词都拼写对并且需要拼写的次数为0

6.所有单词背完后要清空 生词本.txt 中的内容,然后在 背词历史.log 中写入当前时间,并将内存中的生词记录全部写入 背词历史.log 中

按照时间查询历史记录算法描述:读取 背词历史.log 文件,如果查询到了时间,就开始读取后面记录的生词,知道下一次读取到时间;读取到时间之后比对是否和输入的时间相同,如果相同的话,那么就要继续读取时间后面的生词。

全部读取完之后把内存中的生词存入 历史记录.txt ,然后查询所有 历史记录.txt 中的单词

这次项目做完后的收获:1.了解了 fstream 类对文件的基本操作

2.了解到了一个很好用的类 istringstream ,可以将string中的单词一个一个提取出来,非常实用

3.了解了通过windows api 获取时间的方法

4.第一次用c++做出了稍微实用一点的应用,增加了信心

仍然存在的问题:在进行插入等有些操作的时候记录的时间往往不准,经常没有1s就出来了,但是它显示的却是远大于1s的数。

PS:查询操作显示的时间比较正常

————————————————版权声明:本文为CSDN博主「haohulala」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/haohulala/article/details/82418187

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365528.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mongodb lbs java_LBS JAVA Spring mongoDB

基本介绍位置服务(LBS)解决的主要问题是当前位置周围某个范围内的人或场所.在传统的解决方案,开发人员需要根据复杂的几何运算与大量的SQL语句进行查找,这无疑加大的开发人员的开发难度.现在我们需要更为方便的解决方案,MongoDB为我们完美解决此类LBS问题.此篇文章也主要使用Sp…

让height: 100%生效

html&#xff1a; <body><div class"box"></div> </body> css&#xff1a; .box{position: fixed;// 使用fixed定位width: 100%;height: 100%;background: orange;} 补充&#xff1a; &#xff08;父元素不设高度&#xff0c;如何让子元素高…

hash

HashSet Set接口&#xff0c;元素不能重复&#xff0c;要确保重写hashCode&#xff08;&#xff09;方法和equals&#xff08;&#xff09;方法&#xff0c;这样才能比较对象的值是否相等HashMap Map接口&#xff0c;key可为null线程安全ConcurrentHashMap&#xff08;Map接口&…

推土机:将JAXB对象映射到业务/域对象

Dozer是开放源代码&#xff08; Apache 2许可 &#xff09;“ Java Bean到Java Bean映射器&#xff0c;可将数据从一个对象递归复制到另一个对象”。 正如从其主页上的描述所描述的那样&#xff0c;它用于映射两个JavaBeans实例&#xff0c;以在实例之间进行自动数据复制。 尽管…

openssl不是内部或外部命令_OpenSSL新架构蓝图

概述日前OpenSSL官网公布了未来OpenSSL的架构蓝图。作为战略性的架构目标&#xff0c;需要大量的版本迭代本文档概述了OpenSSL战略架构。它需要多个版本的迭代从目前最新的版本1.1开始直到3.0甚至是4.0最终实现。由于版本架构变动非常大&#xff0c;涉及大量的变化和迭代&#…

eclipse安装Hadoop-0.20.2插件

因为在使用Hadoop-0.20.2这个古董&#xff0c;需要使用它自带的eclipse插件&#xff0c;而我最初安装的是现代的eclipse4.10.0。 在经历两天&#xff0c;以及以下种种尝试之后&#xff0c;均以失败告终&#xff1a; 1.网上找适合的版本&#xff0c;据说有人编译好的hadoop-0.20…

java setcontenttype_response.setContentType()在Java过滤器中重置

我试图在过滤器中将压缩文件的内容类型设置为正确的mime类型&#xff0c;而不是application / gzip。这是我的一些代码&#xff1a;public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, Serv…

休眠事实:始终检查Criteria API SQL查询

Criteria API对于动态构建查询非常有用&#xff0c;但这是我使用它的唯一用例。 每当您有一个带有N个过滤器且可以以任意M个组合到达的UI时&#xff0c;都有一个API动态构造查询是有意义的&#xff0c;因为串联字符串始终是我所不愿使用的路径。 问题是&#xff0c;您是否知道…

JS基础(一)

1、JS脚本放置位置 页面内的JS脚本中&#xff0c;各种公共函数和变量应放在head标签之间&#xff0c;而将页面加载期间执行的代码、dom对象初始化以及与dom相关的全局引用赋值操作放在body标签之间&#xff0c;如果没有特殊要求&#xff0c;不妨放在body标签之前。 2、js命名…

treegrid,可以展开的jqgrid树

效果图 html部分 <div class"padding20 bgWhite marginTop20"> <div class"cus-grid row" id"grid-wrap"> <div class"col-lg-12"> <table id"list2"></table> …

winfrom软件开发汽车测试_ETci — 全自动软件测试调度(持续集成)平台

ETci 提供了编译- 测试- 发布解决方案&#xff0c;包括&#xff1a;自动提取配置库代码进行自动构建, 自动调度静态测试工具(如QAC)进行静态测试&#xff0c;自动调度单元测试工具(如Tessy)开展动态测试&#xff0c;自动调度HIL 自动化测试系统等。使得开发、测试团队在软件开发…

LVS负载均衡群集(NAT)

----构建NAT模式的LVS群集----------client---------------LVS----------------WEB1-----------WEB2------------NFS----2.2.2.100 eth0:2.2.2.1 eth1:192.168.1.1 192.168.1.10 192.168.1.20 192.168.1.200 一、准备工作1、添加模块[rootlocalhost ~]# modprobe ip_vs[rootloc…

查询锁表并解锁

查询锁定的表:SELECT l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, l.os_user_name, s.machine, s.terminal, o.object_name, s.logon_time FROM v$locked_object l, all_objects o, v$session s WHERE l.object_id o.object_id AND l.session_id s.sid …

在POJO中使用ThreadLocal的Java嵌套事务

大多数嵌套事务是使用EJB实现的&#xff0c;现在我们尝试在POJO上实现嵌套事务。 在这里&#xff0c;我们使用了ThreadLocal的功能。 了解嵌套事务 事务可以嵌套在另一个内部。 因此&#xff0c;内部事务或外部事务可以回滚或提交&#xff0c;而不会影响其他事务。 创建新事务…

HTML存储详解

和大家一起先来了解一下H5之前的存储方式&#xff1a; cookies的诞生&#xff1a; http请求头上带着数据大小只能为4K主Domain的污染 下面是百度的一些Cookies HTTP中带√的表示&#xff0c;只能被服务器端修改的数据&#xff0c;一般用来存储身份验证等信息 cookies造成了…

java 导入excel到数据库_java导入excel到数据库

1.[文件] jxl-2.6.jar ~ 645KB 下载(124)2.[代码]将excel表格内容解析为listpackage com.utils;import java.io.File;import java.util.ArrayList;import java.util.List;import jxl.Sheet;import jxl.Workbook;import com.jiumai.shgold.model.aboutas.AboutAs;public cla…

智课雅思词汇---十六、前缀hyper和hypo是反义词

智课雅思词汇---十六、前缀hyper和hypo是反义词 一、总结 一句话总结&#xff1a; hypertension 过度紧张&#xff1b;高血压&#xff08;hypertension紧张&#xff09; hypotension 低血压 1、epi是什么意思&#xff1f; 前缀&#xff1a;ep-, epi-, eph- 【词根含义】&#x…

python神经网络库 keras_在Python和R中使用Keras和Tensorflow进行深度学习

了解TensorFlow 2.0和Keras在Python和R中的深度学习并构建神经网络深入了解人工神经网络(ANN)和深度学习了解Keras和Tensorflow库的用法了解适用人工神经网络(ANN)的业务场景使用Python和R构建人工神经网络(ANN)使用人工神经网络(ANN)进行预测完成本课程后&#xff0c;您将能够…

springboot 工程启动报错之Consider defining a bean of type ‘XXX’ in your configuration.

一、前言&#xff1a; 使用springboot自动注入的方式搭建好了工程&#xff0c;结果启动的时候报错了&#xff01;&#xff01;&#xff01;&#xff0c;错误如下图&#xff1a; Description:Field userEntityMapper in com.xxx.xxx.service.UserService required a bean of typ…

结合使用嵌入式Tomcat和Maven tomcat插件

使用Eclipse WTP开发Java Web应用程序时&#xff0c;我们需要在计算机中安装tomcat才能执行该应用程序。 如果在项目上使用Maven&#xff0c;则可以使用tomcat插件运行嵌入式tomcat安装并测试应用程序。 如下所示&#xff0c;这非常简单。 OBS&#xff1a;要执行本文中给出的…