# lle **Repository Path**: whxway/lle ## Basic Information - **Project Name**: lle - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2020-12-23 - **Last Updated**: 2021-01-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Let's Learn English ## 项目说明 英语背单词程序 ## 项目功能 ### 背单词 ![image-20201223152758834](https://i.loli.net/2020/12/23/pxN2KOzIWc1arPk.png) 可以选择词库背单词、包括随机背单词和顺序背单词 #### 背单词模式 ### 查询 这一部分相当于一个词典 ![image-20201223152939562](https://i.loli.net/2020/12/23/GySi786vFaZHowB.png) ### 单词本 这一部分可以自定义添加单词,可以从前两个页面中添加单词 ![image-20201223153021686](https://i.loli.net/2020/12/23/LtHi2Skgh1A6enc.png) ### 每日推荐 ![image-20201223153038464](C:\Users\whxwa\AppData\Roaming\Typora\typora-user-images\image-20201223153038464.png) 使用网络 api 获取每日句子并显示 ## 模块设计 ### 数据库 ```sqlite CREATE TABLE IF NOT EXISTS "stardict" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, "word" VARCHAR(64) COLLATE NOCASE NOT NULL UNIQUE, "sw" VARCHAR(64) COLLATE NOCASE NOT NULL, "phonetic" VARCHAR(64), "definition" TEXT, "translation" TEXT, "pos" VARCHAR(16), "collins" INTEGER DEFAULT(0), "oxford" INTEGER DEFAULT(0), "tag" VARCHAR(64), "bnc" INTEGER DEFAULT(NULL), "frq" INTEGER DEFAULT(NULL), "exchange" TEXT, "detail" TEXT, "audio" TEXT ); ``` #### word_item ```c // 单词条目数据结构 typedef struct _word_item { QString word; // 单词 QString phonetic; // 发音 QString definition; // 英文释义 QString translation; // 中文释义 int collins; // 科林斯等级 bool oxford; // 是否牛津3000词 QString tag; // 标签 cet3,gre等等 int bnc; // bnc 排名 int frq; // 近20年词频 QString exchange; // 派生词,由 wordnet 等生成 } word_item; ``` ### 查询模式 查询模式主要在于怎么查询、怎么找到查询结果。 在这个程序中应用了模糊查找,具体是将待查询单词中所有空格去除,在数据中建立一个 sw 字段,意义是将 word 中所有空格去除并转换为小写,模糊查找用 sw 进行字典排序,并且限制查找条数。 #### QVector query_word(const QString str) const ```c++ QVector query_word(const QString str) const { QSqlQuery word_query; QVector items; QString word = str; word = word.remove(' '); word = word.toLower(); QString sql = "select word,phonetic,definition,translation from stardict where sw >= \'"; sql += word; sql += "\' order by sw collate nocase limit 15;"; qDebug() << "exec : " << sql; word_query.prepare(sql); if (!word_query.exec()) { qDebug() << "exec error : " << word_query.lastError(); return; }; while (word_query.next()) { word_item tmp; tmp.word = word_query.value(0).toString(); tmp.phonetic = word_query.value(1).toString(); tmp.definition = word_query.value(2).toString(); tmp.translation = word_query.value(3).toString(); items.append(tmp); } return items; } ``` ### 背单词模式 背单词的逻辑比较复杂,有进度显示、每日任务、记忆模式(选择题、听力题、判断题)、还需要有复习机制等等。 初步方案是实现选择题。 选择题选项来自于待背单词,有一定概率 (pna) 没有正确选项,即“以上均不正确”。 首先获取待背单词,由用户自己选择单词本(cet4,gre等等)和背单词的数目(n_goal),用 QVector 数据结构保存。 顺序模式下按照字典序排序,随机模式下随机排序 (由 sqlite 实现)。 将待背单词用队列实现,每个单词至少背正确两次,第一次正确的话将该词插入到后面15个位置,第二次正确将则不插入。第一次错误则将该次插入后面5个位置。 ### 单词本 默认有两个单词本: 1. 见过的单词 2. 错误单词 单词本的功能: 1. 添加/删除单词本 2. 添加/删除/单词本中的单词 单词本的排序: 1. 按照字典序排序 2. 按时间排序 单词本保存在本地 默认路径为 ```shell PROGRAMDIR/worddb/name.db ``` ### 每日推荐 每日推荐通过 get/post 实现,利用网络上的 api 获取每日一句,然后保存至本地并附带一个时间戳(保证多次打开软件不会重复发送 request) #### QString get_everyday_motto() ```c++ QString get_everyday_motto() { // 待补全 } ```