这次软件设计对我来说最大的难点就在于GUI,当然啦,之前的黑窗口缺乏直观的图形化交互界面,在我心中确实也不像是软件该有的形式。然而随着ddl日益临近,担心功能强大却复杂的GUI设计工具令我一再翻车,于是一番搜索之后选择了EasyX作为初次尝试GUI实现的辅助。在选定EasyX之前我甚至考虑了是否要用Python,乃至VB来完成这次的大作业,不过考虑到还是C+使用的时间最长也最为熟练,还是用C++结合EasyX的方法进行制作。
在正式编写代码前,我对照系统应有的功能构思了整体结构,并通过数版用例图、类图与顺序图细化了软件设计,最后确定了三个主要页面:首页、管理员界面、普通用户界面。三个页面对应使用者的身份,实现相应的功能:首页针对尚未登录的用户,可以进行新用户注册、管理员登录、普通用户登录、退出系统功能;管理员界面顾名思义适用于管理员,可以实现审批用户注册申请、显示物品类型列表、增删类型与返回首页的功能;普通用户界面适用于普通用户,可以进行物品列表显示、增删查找物品与返回首页的功能。三个页面之间以“登录”“返回”按钮为接口实现切换。具体的用例图、类图、顺序图如下:
1.用例图:
2. 类图
3. 顺序图
(1)新用户注册
(2)普通用户
(3)管理员
上述图片其实相较初次绘制的版本有所改动,包括整体代码的编写也并没能完全按照最初的设计进行,说明软件设计的过程仍然有所疏漏,包括对功能实现细节的理解不到位、该以什么样的形式存储用户信息、如何处理类型与物品的关系等等,这些问题其实在代码编写过程中都有所改动,而理想的状态则是在软件实现前设计完成。
因此,在这次软件实现中,我深深地体会到一个软件的细节之多、各部分的牵绊之深。小到文字在按钮中的显示位置,因为没有提前设计一个可重用的函数使文字居中显示,就导致代码大量重复而变得更为冗长;再到各个“返回”按钮对应的页面跳转不能出错,一段过程中对数据的处理不能影响另一段过程的操作......尽管具体实现时有许多功能类似的代码近乎重复,然而其中又有许多细节是需要修改的,思维稍一混乱就会出现差错。任何一个小细节都有可能导致令人焦头烂额的调试、修改,而这样的小细节在具体编写的过程中层出不穷,令人时刻不能放松警惕。写完这个软件,深感码农之不易orz
为了测试软件的功能,我编写了一套测试用例,逐个检验软件的功能,对错误之处进行修改,不完善之处进行改进,直到能够正确完成每一项功能(起码在我能想到的路径中都正确实现了[笑])。
当然,在测试时我也发现不少虽然不影响主体功能但仍不完备之处。比如,新用户注册时,对输入的手机号、密码等信息没有进行格式判断以确保输入的信息有效;用户查找物品时,只有物品名称或类型名称完全匹配成功查找,而无法实现模糊搜索;管理员修改类型时,需要先删除待修改的信息,再重新添加新的类型,步骤繁琐;各类信息只能打印在一页上而无法实现翻页功能;等等。此外,就具体代码而言,还是存在不少可以精简、重用的部分;信息的增删查只采用了最朴素的顺序实现,时间复杂度较高,无法应对较大的数据量;信息的存储以文本文件的形式完成,没有实现与数据库的连接。这些不完善之处有些是由于我的能力所致而暂时无法完成,或是实现这些功能的代码过于繁琐,来不及进行进一步优化,或是这些调整牵一发而动全身,需要对代码进行大量的修改,我出于时间考虑,在这一次作业中还是没有进行更细致地刻画。若是对我所想到的每一项不足都进行完善,想必代码量会更大,结构也更复杂。
这一次“你帮我助”管理系统软件的制作对我来说极具挑战,但也极有趣味,终于(部分)解答了高中时对于“如何实现从黑窗口到软件的跨越”的困惑。在此过程中,我深刻体会到正确进行软件分析与设计的重要性(一次次改代码的血泪教训TAT),也感受到我在这方面的不足与一个完善的软件最终呈现于世人面前的不易。
最后附上Github仓库链接:https://github.com/Aliar-11/HeapEachOtherFinal.git