?作为一个非科班的码农,大学期间一直没有机会像科班生一样,无论是出于个人练手还是交作业的原因而写一个xx管理系统,工作后写管理系统也是和工作不搭边的事情!不过本人还是一个比较喜欢动手和立flag的程序员。于是,在日常的生活中,就逐渐的产生了一种需要。 ?第一阶段,作为一个比较喜欢买书的程序员,本人希望将这些书籍管理起来,譬如买了多少本了,花了多少钱了,啥时候买的,在哪里买的,二手还是新书,读了多少页等。于是本人就想着写一个图书管理系统呗,就是设计一张表,配套增删查改的接口即可。于是我的图书管理系统在2020年,经过几天的时间,每天下班后coding一会儿,就诞生了。 功能演示如下: 这就是一个终端下的书籍管理系统,包含增,删,查,改,导入记录,导出记录的功能,使用sqlite3数据库和c语言实现,这里也可以看到,一切操作都是在终端下执行,视觉效果还是差一些。 ?第二阶段,也即是最近一年,由于自己一直有做一些计划的习惯,做好一个计划,需要包含学习动机,学习步骤,学习周期,以及记录周期内的每一天的学习情况,这样将自己的计划执行过程给可视化以后,就能清楚自己到底有没有用心做一件事。此时我使用LibreOffice电子表格设计了一个计划表,来完成所有的规划。 如下为我学习微积分的计划表以及执行情况:
?可以看到,我认为表格做的很好,非常好地呈现了学习动机,起始日期,学习计划,学习行为,学习反馈,以及学习周期内的打卡表等。但是缺陷也很明显,比如我今天学习了2个小时的微积分,那么我要打卡,就需要打开表格,从打卡日记处选择打卡日期,然后为该日期所在的cell设置表示时间的背景色。这样是很麻烦的,我作为一个程序员,怎么可能有耐心去做如此机械重复的工作。我就想能不能通过LibreOffice提供的自定义脚本功能来完成这个功能,但是网上查了一圈,貌似是没有找到能够如此custom的功能。遂放弃此方向。 ?再结合我的许多计划,都包含读书,读我买的书,也即是,如果我有需要买一本书,我就应该为其规划出一个阅读计划。那么,我想着如果能把我的图书管理和计划执行两个需求结合,做一个GUI的软件来呈现,那么就是真的可以省去我的很多时间,当然我明白,为了达到这个目的,我必将花掉很多时间,不过一旦做好,我以后将节省很多的时间,我为这种巨大的诱惑所驱动,以及想到自己可以自定义一切所需要的功能而感到高兴。可是无论我在大学期间,还是工作后,几乎没有接触过GUI开发, 我唯一的GUI学习经历,就是大三时买过一本<<C++ GUI Qt 4编程>>,当时对c++的理解太浅,不了解封装、继承,多态,也不会用指针,所以看完第一部分后感觉没多大收获,就不再看了。现在我也转到c++开发上来了,系统地学习了c++开发,以及这几年也在持之以恒地curd,想着应该可以上手Qt,于是就在的我ubuntu上就安装了Qt creator等套件,并通过网上翻一下别人写的小demo,就开始我的程序的构建了。coding之前只有个大体的概念,就是两个QWidget,一个呈现书籍,另一个呈现计划。想到要实现的功能就google一下看看可以用Qt的什么组件来实现,再使用Qt assistant查一下该组件的细节就可以了。 于是每天下班后就coding,一直coding,终于完成了。功能演示如下: (1) 启动程序,数据导入。
(2) 计划查看和创建
(3) 计划打查看和打卡。
(4) 记录导出。 ?整个过程,没有提前设计,都是按照心里想的功能来写,所以比较耗时间。对于计划栏,设计了一个json格式,来给GUI提供展示的数据以及数据保存时的保存格式。一开始用的是nlohmann的model c++json库,这个库是以几乎等同c++的语法来操作json,非常好用,但是由于Qt的数据一般是Unicode,这个json库只支持utf-8,我之前没有处理好编码格式的转换,导致json中包含非utf-8的数据后,只要对json执行dump()就会导致程序core dump,而我自己的json文件其实只有一种格式而且结构简单,所以我就自己写了针对该json格式的解析和保存接口而不再使用nlohmann json。 ?整个项目每天下班后coding一会儿,20+天的时间,每天coding两三个小时,就完成了。我做一个自己要真正使用的东西,就不能将它只做成一个demo,功能必须非常实用,能被触发的bug或者使用缺陷,都必须解决,并在日后使用的过程中,遇到需要优化的地方就进行优化,这样就逐渐地成为一个健壮且实用的程序。以下是git的commit history
|