湖南大学结对编程——分析结对编程队友的个人项目
分析对象:郭家乐同学的个人项目
分析人:凌志豪
目录
一、需求问题分析
二、简述郭家乐同学的解决方案
三、项目结构及代码分析
四、程序测试
五、总结
一、需求问题分析
此次个人项目的需求是,写一个程序,能够实现以下功能:
①用户登录
②切换用户出题年级
③根据用户身份自动出题
其中,功能③是最为核心的功能。要实现上述功能,面对的几个核心问题是:
1. 如何存储用户数据和题目数据?
2. 题目的生成方式?
3. 用户身份的切换方法?
4. 如何做到随机出题不重复?
二、简述郭家乐同学的解决方案
2.1 针对问题1,选择了用txt文本文档存储题库以及用户信息:
这样做的好处是:对题库数据的增删改查操作可以很简单,便于管理题库和用户;
坏处是:用户数据安全性不足,较高的文件流读写频率高会造成性能损失。
2.2 针对问题2,采用的是预先自拟题目的做法,相比于编程序随机出题的做法,好处是能够自定义题目的难易,但出题需要耗费部分人力。
2.3 针对问题3、4的解决方案,在第三部分代码分析讲解。
三、项目结构及代码分析
3.1 先看src目录结构:
郭同学很好的将java文件打包装好,方便开发。
但在这里存在一个规范问题,那就是类名的命名问题:
java中对于类的命名,一般都以大写字母开头,采用驼峰命名的规范。
在项目结构提出的建议是:
①将代码分类放入package,比如关于Page视图层的装在一个package里,关于数据操作层的放在一个package里。
②可以将文件资源放在单独的resource包里,便于管理。
3.2 代码分析:
3.2.1 main.java文件
可以看到,郭同学有个很棒的优点,那就是基本每一个模块、关键代码都有注释解释。
这能够大大降低阅读难度,方便读者理解代码。
3.2.2 funcPage.java 文件
这是一个功能类,郭同学将一些方法模块化,逻辑清晰。
而且对方法的调用可以体现出面向对象的编程思想。
3.2.3 loginPage.java 文件
来看一份用到文件流的代码:
优点:依旧是保持了写注释的良好习惯,强调注释的重要性,为后续开发人员的考虑,而且属性和局部变量都做到了初始化。
缺点:全部采用行尾注释的方法也会使得代码稍显繁杂,可以稍作精简。以下是一个很棒的回答:
根据情况改变变量的命名格式可以使得变量意思一目了然,减少不必要的注释量,比如上图获取的id、password用inId、inPassword替代。
3.2.3 paperMaker.java 文件
优点分析:
郭同学很机智地利用三重循环,严谨的筛选已用过的题目,契合出题需求。
且在有文件流读写的地方做到了异常处理,增强了程序的稳定性。
代码以及变量的命名均很规范。
四、程序测试
运行 main.java 文件启动程序:
用户交互界面简洁明了,在输入对应题目后在指定位置生成了试卷文件:
当输入-1时,成功退出登录:
当在登录状态下,输入“切换为XX”,成功切换用户身份且可以自动出对应的题目:
测试完成。
在用户交互的建议:增加“切换为xx”这一命令提示。增加生成试卷成功与否的反馈。
五、总结
郭家乐同学的个人项目实现完整,无论是代码规范还是程序使用体验都很不错。
让我收益匪浅的就是郭同学代码注释的重要性,以及在筛选重复题目的优秀思路。但在部分细节郭同学仍需加强注意,如类的命名格式,用户体验的优化。
相信这个学期的磨砺,郭同学的编程技术可以一飞冲天,化身大牛程序员,未来可期!!!
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/java/289269.html