HNU结对编程队友代码评析

前言

我的结对编程队友是胡延霁,经过对他的代码的研读和学习,现在对他的个人项目进行分析、总结和评价。

项目简介

项目名称:中小学数学卷子自动生成程序

编程语言:Java

项目完成者:胡延霁

评价人:周润荣

题目需求

本题目要求实现的是一个中小学数学卷子自动生成程序

具体需求可以概括:具有登录和切换出题年级的功能,限制为10-30道题,可以重新登陆,对于输出的题目不能有重复,且以“年-月-日-时-分-秒.txt”的形式保存,每个账号一个文件夹。小学、初中、高中分别有相应运算符号。

整体分析

 

 该项目采用面向对象的设计思想,将不同功能模块抽象为类,主要包括登录模块、题目生成模块和文件操作模块等。这种模块化设计有利于代码的复用和维护。

设计共有一个包,personproject;12个类,其中一个抽象类

 

实现了题目的所有要求,能正常的运行和实现所有的功能。

 以下为UML类图:

 

具体分析

Main类:此类中只进行了登陆函数的调用;

Login类:在此类中进行了登陆操作,对于输入的用户名密码进行匹配登录,匹配登录具体由SuccessOrNot类的函数进行实现,登陆后对ReadyTo类进行调用;

SuccessOrNot类:在此类中的函数,先用一个字符串数组存储了所有的用户,再通过对indexOf函数和字符串分割函数调用,对其登录进行判断。

ReadyTo类:本类表示已经登陆,在进行输出题目数量、切换出题类型和重新登录的菜单。本类中在切换出题类型时存在漏洞,根据所提供的判断比较,只对输入字符串的第一个字进行判定是否与“切”相同,此处存在判断漏洞。接下来就是对数量进行判定,符合要求则进行对应类型题目的paperMake调用。

 

ChangeTypeFatherChangeType两个类是继承关系,前者为抽象类,定义了recepetionchangeType函数,在子类中分别进行了实现,其中changeType函数的实现为重新定义一个ReadyTo对象,嵌套运行,如果多次切换可能造成程序嵌套繁琐的问题。

 

PaperMake为主要的题目生成类:在此类中先声明了三个数组,分别是小学,初中,高中的运算符。

primaryMake函数:先生成随机的操作数个数,再随机生成括号插入位置,在每次循环中,先对式子的字符串进行判断是否到了括号插入位置,再加上随机数,再加上随机运算符号,同时判断是否到了添加右括号的时候,最后再加上一个操作数,再对括号进行判定,在最后补上未加的右括号。最后通过checkAndIN函数调用进行查重

juniorMake函数和seniorMake函数:基本步骤同上,只是添加了平方平方根和三角函数。

CheckCheckAndIn是用来查重,其中Check类中check函数将对应用户文件夹下所有题目读入List并且调用contains函数进行查重。再调用fileMake创建对应用户的文件,再用WriteIn写入文件中去。

优点分析:

1)各个类分工不同,将各个功能分装给不同的类,结构清晰。

2)建立了抽象类,并且进行继承便于功能扩展和修改。

3)遵守GoogleJava代码规范,缩进和格式都符合标准。

4)代码包含异常处理操作,处理IO时可能遇到的问题。

5)在一些变量的旁边加有解释说明的注释,可读性很高。

优化建议:

1)程序嵌套太多层,方法层层调用,过于繁琐。可以再主类中体现一下整体运行流程。

2)对于括号的放置并未能实现完全随机。

3)本设计中的抽象类的使用意义不大,需要提取出需要抽象的公共逻辑。

4)要手动创建文件夹,可以改进为自动检测生成文件夹。

总结:

总的来说,该项目基本实现了项目需求中的所有要求,方法简洁,层层递进。很多函数的实现方法值得我去学习。后续可以优化测试用例,重构部分类的设计,以提升代码质量和扩展性。该项目提供了一个很好的学习参考案例。

posted @ 2023-09-20 01:10  6了个6  阅读(218)  评论(0)    收藏  举报