本篇博文基于软件工程导论创新课程设计的结对编程项目作业的要求,对我与结对搭档胡嘉宏同学共同完成的结对项目——带UI的小初高数学学习软件进行分析。
一、项目文件构成
本项目的文件结构划分为源代码(如下图所示)和资源文件(主要为images),其中包括导入的榛子云jar包(用于搭建sms短信服务),以及生成构建的本项目可运行jar包和依赖于java环境的exe可运行程序。
三、项目模块设计:
1、试题模块(出题、答题、解析);
2、短信模块(通过云服务【榛子云】);
3、数据库模块(本地MySQL)。
二、各部分逻辑
1、试题生成逻辑:
①基于个人项目中的题目生成要求,为更加符合项目的实际需求,我们在此前个人项目的代码基础上进行了修改重建,对试题的难度进行了把控,例如对于初中试题的开方、平方数量和选择,我们通过概率(基于随机数实现)来尽可能使得题目的难度符合实际(大幅度降低多个平方、开放出现的概率 );同理,在高中试题的生成逻辑中,我们控制了三角函数的出现频率,不会同时出现多个三角函数的计算;
②其实,通过上述的逻辑调整,可以使得试题的生成更加稳定,对于设计试题答案的计算解析逻辑,也能够保证其准确性。
2、试题解析逻辑:
①此前,我们了解到计算字符串的方法主要有:逆波兰、JS库函数和栈队列解析。考虑到字符串中包含三角函数、平方、开方等并不适用的情况,我们选择对字符串进行栈队列解析的方式进行分析操作;
②同时,通过前缀表达式对后缀表达式的转换,使得逻辑更加清晰。其中也包括对于运算符优先级的分析判定,总的来说,解析逻辑是相对来说比较复杂的,需要对字符串各个符号和操作数进行多情况的模拟分析。
3、出题与作答逻辑:
①对于错误选项的设计,我们同样通过随机浮点数来模拟;同时,通过概率来设定正确答案的位置;
②同时,在控制台界面我们设置了对于分数的及时监控,方便对程序的调控;
③作答结束后即生成最后分数。
4、UI逻辑:
①与项目要求一致,我们通过对各个按钮事件的监控,实现窗口的转换,基本实现了功能。
5、验证码(注册验证、短信模块):
①此前考虑到市面上主流的云服务对于个人服务的审核流程复杂,难度较大,选择了榛子云服务来提供短信服务,通过导入官方提供的jar包,查阅API文档后,搭建了短信服务模块,已试验成功,但重新开启服务需要由后台充值。
6、数据库模块:
①我们使用的数据库是搭建在本地的MySQL,如需使用数据库功能,需要重新配置文件,更改服务地址。
7、其他:
除此之外,其他部分的功能基本与个人项目一致,不再做赘述。
三、总结与心得
1、本次实验项目的完成依赖于我的搭档与我的共同努力,十分感谢我的搭档胡嘉宏同学的辛勤付出,在项目工程的设计、逻辑处理等方面与我进行了交流、分工;同时,也非常感谢对我们项目开发提供莫大帮助的同学和老师;
2、总的来说,虽然已经完成项目,本次项目还有许多可以改进的地方,相信以后的学习过程中能够披荆斩棘、一往无前。