文章目录
1.引言
一、软件开发目的
上了大学以后,许多学生失去自制力,变得怠于学习。不少同学是在考试临近的一星期内甚至两三天、一天的时间内才开始复习(预习),与中学时期勤勤恳恳、用工刻苦的学习态度大相径庭。
为了对自制力较差的同学起到警示作用,本小组制作了复习提醒系统(RevReminder System)。用户在系统里输入课程名称、上课时间,软件就会自动根据拟合方程生成艾宾浩斯遗忘曲线(The Ebbinghaus Forgetting Curve),使用户了解自己处于遗忘曲线的哪个阶段,从而在心理上起到警醒效果,督促用户及时复习。
由于技术、时间等因素,软件的功能与最初的设计有出入,小组对一些难以实现或不必要的功能进行了删减,对保留的功能进行了完善。
2.项目概述
2.1项目需求:
(1)录入课程信息
(2)读取课程信息
(3)根据课程信息绘制曲线
(4)能删除课程信息
(5)提供日历
(6)提供适当的教程
(7)老师收到软件提供学生遗忘情况
2.2.性能需求:
(1)绘制曲线的速度不能慢于2秒
(2)添加或删除课程信息时不能有可见的延迟
(3)弹出任何子窗口时不能有可见的延迟
(4)至少能正确拟合一星期内的遗忘曲线
2.3.对外接口
(1)第三方库接口
(2)数据交换接口
2.4.约束
(1)只能在Windows系统运行
(2)不需要联网
(3)项目要在2020年6月5日晚上之前完成
3.功能列表
3.1.弹出教程
用户第一次运行该软件时,会弹出对话框询问是否显示教程。如果点击“Yes”,则会显示一个有6页的教程窗口;如果点击“No”,则教程窗口不会弹出……
3.2.输入课程
用户在主界面点击“添加课程”,就会弹出输入课程的对话框。
该对话框包含两个输入栏:课程名称和上课时间。课程名称是软件引用课程信息的唯一标识,而上课时间则是软件对该课程遗忘曲线进行拟合计算的依据……
3.3.删除课程
用户在主界面点击“删除课程”,就会弹出删除课程的对话框。
该对话框包含一个输入栏,内容是课程名称。该输入栏既可以进行文本编辑,也可以点击下拉箭头在已有的课程中选择……
3.4.“绯红之王”加速功能
该功能是一个Debug功能,即检查软件开发过程中检验软件是否正确执行指令的功能。用户使用软件时不需要使用此功能……
3.5.显示和隐藏日历
用户可以在菜单栏的“帮助”一栏下找到“显示日历”和“隐藏日历”的选项卡,点击就可以在主界面右上角显示或隐藏日历……
3.6.绘制艾宾浩斯遗忘曲线
绘制遗忘曲线是软件的核心功能。用户在主界面的下拉栏选择课程后,软件就会绘制相应的艾宾浩斯遗忘曲线……
3.7.异常状况处理
软件运行中,由于用户操作不当,会出现一些错误输入。本软件的异常状态处理机制可以一定程度上增强软件的健壮性。
打开软件时,若软件根目录下的配置文件没有被正常读取,则会弹框显示“配置文件错误”……
4.代码实现
4.1.编程语言
本软件在最初的设计中用Java作为编程语言,但是综合考虑运行效率、第三方库的易用程度、需要的插件、对编程语言的熟悉程度、常用IDE的功能多寡等因素,最终小组决定用C++作为编程语言。
4.2.第三方库
本软件采用Qt作为第三方库。Qt是一个重量级的C++图形库,功能强大,接口完备,封装程度高,调用简便。若使用Qt的官方IDE:Qt Creator或者在Visual Studio中安装Qt Tools插件,可以直接在Qt Designer中用鼠标拖拽的方式构建前端界面,所见即所得,将前端和后端逻辑分开处理,易于开发。
本软件还采用一个基于Qt的第三方库:QCustomplot。这是一个基于Qt的基本库开发的图形绘制第三方库,本软件的遗忘曲线绘制就是用该库实现的。
4.3.前端与后端的逻辑连接
软件的前端使用Qt Designer的图形界面方法开发,后端则在各窗口对应的.h和.cpp文件中实现。
前端控件和后端方法的连接是通过Qt的信号-槽机制(Signal-slot)实现的,这是Qt封装的一种安全且逻辑清晰的前后端连接机制,是Qt的主要特色之一。
4.4.数据交换
本软件的数据交换通过JSON文件实现。该文件在上面的描述中称为“配置文件”,命名为“config.json”。该文件里储存有用户输入的课程名称和上课时间。
在config.json文件中,课程名称是键(key),是一个课程对象的唯一标识符。上课时间则是该课程对象的键值(value)。
用户输入课程时,其相应信息被写入config.json文件中,若用户删除课程,则其相应信息也在config.json中被移除。
对config.json文件的读写是在软件打开、用户修改课程列表和关闭软件时进行的。每次写入config.json时都是采用QFile::Truncate模式进行覆盖写入,这是为了确保写入的文件格式正确。
4.5.代码总量
根据统计,本项目的代码文件共包含6个.h文件,6个.cpp文件,具体来说:
(1)6个.h文件中,4个为窗口的头文件,1个为QCustomplot库的头文件,1个为预编译头文件,用来加快编译速度。
(2)6个.cpp文件中,4个为窗口对应头文件的实现,1个为main.cpp主函数入口文件,1个为QCustomplot库对应头文件的实现。
(3)还有图片等资源文件若干。
本项目的总共有效代码(去除第三方库和自动生成的代码)行数为572行。
5.软件展示
代码展示:
6.小组贡献
组员 | 贡献 |
---|---|
吴浩天 | 完成了用户输入与配置文件的数据交换功能 |
曾亦诺 | 完成了主界面的前端和后端开发,完成了教程窗口的前端和后端开发,完成了代码的整合工作,对小组其他成员的代码进行整合和格式调整。 |
吕浩程 | 完成了添加课程界面的前端和后端开发 |
张梦沛 | 完成了删除课程界面的前端和后端开发 |
郝佳博 | 完成了计时器和绘制曲线的算法 |
全组 | 在博客撰写、ppt和视频制作、项目报告方面,小组成员轮流负责。 |
7.附件
感谢老师及学长的帮助,感谢组内大家(大佬们)的辛苦工作。完结撒花!