目录

  • 重新对需求进行分析
  • 1、增加一个弹窗
  • 2、选择单词进入复习计划列表
    • 2.1显示未入复习计划的知识点
    • 2.2 提交已选中的知识进入复习计划
  • 3、显示当天需要复习的知识点

本打算昨天计划完成“复习页面”的程序逻辑,晚上就让孩子们完成第一天复习计划,但昨天遇到了一些困难,SO,今天继续。

重新对需求进行分析

面对“按记忆曲线复习”这个命题,我好像已经很清楚怎么做了。但真正开始时,却有点想不清楚了:

我在设计表时,“复习表” 和 “录入单词表” 是两张表,这样做的原因是,有的单词需要多次进入复习计划中,而我希望达到“一次录入多次复习”的目标。这就引发了一个问题:什么时候“单词表”中的单词 进入到“复习表”中?

梳理方案 :当打开“当天待识记内容”功能点时,昨天录入的单词自动导入到“复习表”中?这样好像并不完美,原因:
<1> 如果第二天孩子并没有打开“当天待识记内容”功能点呢?
<2> 如果昨天并没有录入单词,而前天录入的又很多呢?

如此,还不如把所有未导入复习计划的单词全展现出来,让孩子挑呢。这样让孩子更主动,更愿意接受。似乎能确定“进入复习计划”第一步的需求了。

问题又来了,“当天待识记内容” 功能点只有一个,显示让孩子挑选当天复习内容需要一个页面,而复习听写又需要一个页面。
所以,挑选动作需要增加一个弹窗,选择完以后,再进入当天的复习环节,而复习的内容除了刚挑选入复习计划的单词外,还有往日复习计划中当天需要识记的内容。
OK,思路清晰了!

接下来就是听写计划内单词,听写加上得分环节,可以激发出孩子的竞争动力。
对于那些听写不通过的单词,标识为NoPass!

1、增加一个弹窗

形如:

该窗口是一个Dialog对话框,在建这个widget时,不能选择成Main Window,否则主窗口打开这个弹窗时,就达不到预期效果。

2、选择单词进入复习计划列表

在走向目标的过程中,遇到了 两个问题 ,先记录下来:

问题1:怎么知道操作人员选择了哪些行?
【答案】self.ui.tableView.selectionModel().selectedRows(),可以得到一个index列表,这些index有一个row()属性,可以帮助我们获取选中的行号。

问题2:有了行号怎么得到word_id
【答案】self.qrModel.record(行号).value(列号)

再说这个弹窗主要功能的实现:

因为这是一个独立的弹窗,该页面上的功能可以在自己的逻辑窗口内完成,所以,可以借助 全局变量 完成写数据库的操作了。详细如下:

2.1显示未入复习计划的知识点

    stu_id =  myGlobValues.get_value('G_stu_id')self.qrModel = QSqlQueryModel(self)self.qrModel.setQuery("SELECT a.word_id as '单词ID', picture as '图片', word as '字词', means as '意思',input_day as '录入时间' "" FROM words a  "" WHERE stu_id = '" + stu_id + "'and not exists (select 1 from memory b WHERE b.word_id = a.word_id) "" ORDER BY sub_id")self.ui.tableView.setModel(self.qrModel)self.ui.tableView.setColumnHidden(0, True)

2.2 提交已选中的知识进入复习计划

代码如下:

    indexs = self.ui.tableView.selectionModel().selectedRows()for idx in indexs:word_id = self.qrModel.record(idx.row()).value(0)# 找出lastRow, 用于生成不重复的word_idqr = QSqlQuery(self.db)qr.exec("select max(rowid) as myrowid from memory")qr.last()if qr.value('myrowid') == '':  # 新数据库会是这样的情况 没有一条记录lastRow = 1else:qr.exec("select max(mem_id) as max_id  from memory")qr.last()lastRow = qr.value('max_id') + 1# 找出 total_rows 用于插入记录时的定位     qr.exec("select count(*) as total_rows  from memory")qr.last()total_rows = qr.value('total_rows')qr.finish()self.tableModelMemory.insertRow(total_rows, QModelIndex())curRec = self.tableModelMemory.record()  # 只有表头curRec.setValue('mem_id', lastRow)curRec.setValue('word_id', word_id)curRec.setValue('first_time', QDate.currentDate())self.tableModelMemory.setRecord(total_rows, curRec)  # 插入记录if self.tableModelMemory.submitAll():print('插入记录成功')

3、显示当天需要复习的知识点

在此,我又遇到一些问题:
问题1:怎样将str型的日期,转为QDate类型的日期?
. .解释:从数据库中获取的时间是str类型的,而使用QDate.currentDate() 得到时间是QDate类型的。
【答案】:
Date.fromString(self.qrModel.record(row).value(column),‘yyyy-MM-dd’)

问题2:两个日期怎么相减?
想到的第一个方法就是两个日期直接相减,结果报错了。查找了一下QDate的方法,发现有一个addDays(),于是就用了这样的方法解决:
【答案】:判断 {小日期.addDays(n) } 是否是大日期相等。

QDate.fromString(self.qrModel.record(0).value(4),'yyyy-MM-dd').addDays(2) == QDate.currentDate()

不一定是最佳解决方案,但可以往下进行了!耶!

问题3: 以上两个方法,在sql中都不能用,sql中的时间怎么对比?
【答案】用字段名=当前时间减天数的字符串形式,形如:
first_time= QDate.currentDate().addDays(-天数).toString(‘yyyy-MM-dd’)

经历过对以上问题的思考,最终使用以下查询完成了“待复习内容”的查询:

    self.qrModel = QtSql.QSqlQueryModel(self)self.qrModel.setQuery("SELECT a.word_id as '单词ID', picture as '图片', word as '字词', means as '意思',first_time as '首次复习时间' "" FROM memory a , words b "" WHERE a.word_id = b.word_id and stu_id = '" + self.stu_id + "' and sub_id ='" + kemu_id + "'  and  (""first_time= '"  + QDate.currentDate().addDays(-1).toString('yyyy-MM-dd')+ "' or first_time= '"  + QDate.currentDate().addDays(-2).toString('yyyy-MM-dd')+ "' or first_time= '"  + QDate.currentDate().addDays(-6).toString('yyyy-MM-dd')+ "' or first_time= '" + QDate.currentDate().addDays(-14).toString('yyyy-MM-dd')+ "' or first_time= '" + QDate.currentDate().addDays(-30).toString('yyyy-MM-dd')+ "' or first_time= '" + QDate.currentDate().toString('yyyy-MM-dd') +"') ORDER BY a.word_id desc ")self.ui.tableView.setModel(self.qrModel)

最后的显示结果如下:

最强大脑记忆曲线(7)——“复习页面”逻辑实现相关推荐

  1. 最强大脑记忆曲线(13)--应用程序的加密及授权码的实现

    加密和授权 一.python程序加密与授权的思考 二.python文件 加密 三.注册机代码 目前我的小项目"最强大脑记忆曲线"已经可以出1.0版了,发布之前的最后一个环节就是给应 ...

  2. 最强大脑记忆曲线(12)-- 录入数据修改

    录入数据修改 一.设计思路 二.解决过程 2.1 设计修改窗口 2.2 转成py文件 2.3 写业务逻辑 1.先显示一下基础页面 2.配合适配器,自动调整窗口大小 3.在数据录入窗口或背记窗口双击某条 ...

  3. python实现艾宾浩斯抗遗忘曲线(记忆曲线)

    用python实现艾宾浩斯抗遗忘曲线(记忆曲线)学习复习计划表,代码如下 from datetime import date, timedeltatimes = [2, 5, 8, 15, 30, 6 ...

  4. html5 最强大脑最强记忆游戏

    html5 最强大脑最强记忆游戏,这是款煅练多维记忆和测试记忆力的游戏,源自江苏卫视最强大脑最强记忆. 一.白块模式: 迅速记住白块变灰的顺序,并按变灰顺序,重复点击一遍:若点击顺序出错,则" ...

  5. 计算机修改人类记忆曲线,遗忘曲线——揭秘人类记忆存储的奥秘

    文/元小元 人类遗忘曲线 生活中,我们经常会注意到有些人记忆事物的能力和记忆的时间远超常人,他们的学习能力也非常赞,只要是学习过的东西基本上都能记忆很长的时间,可是自己明明很努力的看甚至背诵,默念,尝 ...

  6. 如何用 Python 攻克「最强大脑」

    最强大脑之[七阶立方密码] 在 2018 年<最强大脑之燃烧吧大脑>节目中,来自清华大学的杨易和来自北京大学的 刘宇进行了个人淘汰赛,两个人所要挑战的项目是"七阶立方密码&quo ...

  7. Python游戏开发:最强大脑第一关,数字华容道

    前言 freegames是Apache2许可的Python游戏集合,旨在用于教育和娱乐,完全是开源的,我们只要引用编写就好,当前在最强大脑的舞台上的第一关就是数字华容道,好多人都栽在了上面,如果你也想 ...

  8. 最强大脑王昱珩,一个近乎完美的男人

    王昱珩,这个名字,在最强大脑播出前,我想不曾有多少人认识他,然而他在擂台上展现出的气场.实力以及个人魅力却将完美二字诠释的淋漓尽致. 2015年3月13日,<最强大脑第二季>中日PK赛中, ...

  9. 计算机修改人类记忆曲线,艾宾浩斯遗忘曲线和费曼技巧

    艾宾浩斯遗忘曲线 遗忘曲线(Forgetting curve)是用于表述记忆中的中长期记忆的遗忘率的一种曲线.这一曲线最早由心理学家赫尔曼·艾宾浩斯通过自己的实验提出.在这一实验中,艾宾浩斯使用了一些 ...

  10. 致江苏卫视《最强大脑第二季》节目组的一封信

    致江苏卫视<最强大脑第二季>节目组的一封信 亲爱的节目组: 您们好! 我几乎看了您们<最强大脑>每一期节目.我对科学评判Dr.魏,有一些我自己的看法和理解,供节目组参考. Dr ...

最新文章

  1. OpenWrt启动过程分析+添加自启动脚本【转】
  2. javascript事件模型框架
  3. 射影几何3:拓广平面
  4. python 3.5opencv 环境搭建_Python3.5+openCv进行人脸识别的环境搭建(Windows下)
  5. mysql+cur+0_MySQLcurdate()函数的实例详解
  6. android长按加入购物车,《Android APP可能有的东西》之UI篇:加入购物车动画
  7. Arduino 与 SPI 结合使用 以及SPI 深层理解
  8. CEF避坑指南(一)——编译并自制浏览器
  9. QT程序启动画面问题
  10. 在Windows下使用Git+TortoiseGit+码云管理项目代码
  11. AcWing479.加分二叉树(区间DP)题解
  12. HBase因hostname可能引起的RIT问题。HBASE的ip和hostname坑
  13. 遗传算法是一种进化算法_一种算法的少量更改可以减少种族主义的借贷
  14. sqlserver企业版秘钥_SQLSERVER序列号
  15. sklearn实战之构建SVM多分类器
  16. 飞思卡尔单片机c语言编程详解,主流16位单片机学习详解:飞思卡尔MC9S12G系列...
  17. python刷抖音浏览_Python 一键批量下载抖音无水印视频
  18. BLE MESH中的Secure Network beacon包
  19. linux云服务器配置JDK教程(博主阿里云,腾讯云亲测成功案例教程)
  20. 「微信群合影2.3.0」- 新增高清头像

热门文章

  1. win7怎么修改计算机皮肤,鼠标指针怎么换?小编教你win7系统更换鼠标指针皮肤的方法...
  2. Linux系统中,让alias命令永久保存的方法!
  3. 鸿鹄818芯片:小米电视千万销量面前的“水滴”
  4. php图片编辑组件幻灯片,修改织梦图片幻灯片样式
  5. 服务器已爆满 请前往最新区服,斗破苍穹手游服务器达到上限不能创建角色怎么办_斗破苍穹手游服务器达到上限不能创建角色解决方法介绍_游戏吧...
  6. 简述计算机键盘上shift键的作用,Shift键的作用
  7. 随机过程总结(1)--一些基本概念
  8. 生鲜电商带火冷链物流,中、圆、申三通如何拼了命地排兵布阵
  9. 100 句世界哲学语录【句句珠玑细细品味】
  10. vue3关闭语法错误提示