《数据结构》课程的最后一个大作业,也曾一度在解体的边缘徘徊。虽然展示和Code Review已经过去两天,但还是觉得自己应该写点什么,于是就有了这样一篇文章。
这次的大作业是3人合作写一个火车票管理系统。一开始拿到这个题目是在4月,分组完成后,本着我班拖DDL的传统艺能,我终于在4月结束前1天交出了第一份文档(没错,我是队长)。

仅仅是这样简要的一篇企划,约定了不同模块的接口,随后便开始让组员开始实行。(因为组长原定负责前端所以可以继续咕咕咕)
之后在5月23日,我进行了第一次代码审查。发现了后端程序的一些Bug,并对可能存在问题的地方进行指出。随后,一个暴力数据库被merge进来,后端开始调试。

时间很快进入6月,随着DDL的逼近,之前一直摸鱼划水的队长终于开始开发前端。
开发框架自然是一如既往的Flask+Jinja2。一开始做好了前后端连接的部分设计和前端的一个界面,美化思路仍在确定中。

之后确定了多用python打表,少写html模板的邪行开发思路,于是便有了这个:

前后端连接我们采用了*nix管道的方式(这里再度体现出*nix系统的优越性,Windows爪巴)

确定连接方式后,前后端连接便十分容易实现,在此不断赘述。
与此同时,后端也在不断调试中。由于缺乏可用的B+树导致效率低下,一直无法利用大样例进行调试。
为减少B+树编码负担,我们取消了可重复Key的设定。
而写B+树的同学又因奇怪问题陷入苦战。
难道我们终究难逃解体的命运了吗?
在6月16日,本学期最后一堂《近刚》课的时间,我们开启了zoom联合调试。
解决几个内存问题后,B+树终于上线。

6月17日,本地通过所有样例。

之后,由于效率低下(其他组都加了缓存),我们组也要为B+树加入缓存系统。
于是,原定开发前端的队长开始做缓存了。
6月17日,缓存经1天时间后上线。

尽管加入了缓存,却依旧不能在OJ上通过测试。经过排查后,发现query_ticket操作效率低下。
6月19日,重构query_ticket。

6月20日,重构query_transfer,并修正一些初始化错误。

至此,终于在OJ上取得AC。

此时距离后端DDL还有不到36小时。
我们终于完成后端,没有解体。
6月21日,为了在pressure测试中多拿点分,某队长开始不顾其他未完成组的用户体验,疯狂调参卡常。

为其他组的解体贡献了一份力量

6月22日全员复习数分,6月23日数分考试完成后,再度开始前端的构建。
奇怪的changeLog:

Todolist:

众所周知,我班内卷超严重的。
大家嘴上说着不卷,其实功能加得相当勤快。
本想把86拉出来做看板娘,可是e-mote资料实在太少,实现不能。(喂,死宅真恶心啊)
6月25日晚上,我们班11个组分别进行了系统最终的展示。
在zoom会议室中,我将id改为「卷姬」,意在讽刺大家疯狂内卷的现状。
演示过程中很多小组纷纷解体,出现后端挂掉、莫名其妙报错等情况。(某小群6个人,分别属于5个组,2个组演示解体,1个组甚至前端不可用)
最终展示界面:

不得不说整体设计还是相当丑的,没有管理员终端,没有一键修改等功能。
好在没有出现崩溃解体。看来基于正则的输入合法性检查还是相当稳健的。
这端口号和图标,简直明示好吗?
到此,这项大作业彻底完成。最终评分18.24/20,合情合理,毕竟Pressure跑太慢了。
我猜不会有人看到这里,我也不知道我究竟在写什么。可能这件事本身并不值得记录,也可能长期的睡眠障碍和生活压力已经将我变成了NPC一般的存在。总之,如此平淡的文字,其存在的意义,也仅仅是存在本身。
西阳变成线从窗户射进来,那光刺激了我的视网膜······我想起了很久以前,在追忆的彼方消失的记忆。
(实说话,我还是喜欢那种机器翻译,看上去整体意境很有,仔细阅读却不读通文本的,尽管模仿真的很难这一点)
评论~ 2 条评论
啊这,死宅真恶心啊(雾
@redjgray
迫害还是免了吧