结对编程队友:软件2103黄晖凯
项目结构如下图
通过项目结构可以清晰的看出每个JAVA类的实现功能,便于查阅和修改代码,这是优点。
为了满足个人项目要求建立的抽象类,过于简单抽象,
在主方法后面加上throws IOException,确保在出现异常的情况下不会崩溃,无法处理,使得代码更加健康。
方法体中就是新建menu类对象,实现菜单的功能
对异常的处理情况就是打印“请输入数字”,这里是个瑕疵,应该打印异常的相关信息
Menu类包含了当前用户、用户水平(小学、初中、高中),以及vector容器类的用户组、题目组,并且有两个方法能进行用户的初始化和获取用户的水平。
logIn方法是实现用户的登录和登录后的提示语
changeLevel方法是实现切换功能,与个人项目的要求基本一致。
newPrimaryPaper是实现生成小学试卷功能,但在文件命名上面有小问题,calendar.get(Calendar.MONTH)返回的是对应月份的下标,要完全精准需要+1,此处是错误项。
checkPrimary是检查生成的题目是否与该用户已生成的题目相同,如果相同则不添加,不相同则添加到试卷中,并且新生成的题目之间也互相查重,相同则不添加
newMiddlePaper方法和生成小学试卷的思路相同
checkMiddle与小学的查重功能也是相同的
newHighPaper同上
checkHigh同上
Question类里实现了生成小初高三种类型题目的方法
生成小学试题的方法中,写着先用随机数固定好试题的长度,小学题目中第一个元素只能是操作数(暂时不考虑括号的问题),然后是运算符、操作数以此类推,这样只要下标是偶数就要插入操作数。确定好要插入操作数时考虑左括号,首先在最后一个操作数的前一位加左括号是无效的,且只有两个操作数时加括号无效,在这两种情况都满足时有1/2的概率加入左括号,此时同步让左括号相对数量+1,括号内长度置0,然后添加操作数,如果左括号数量等效大于0那么括号长度+1,然后调用插入右括号的方法,当不插入操作数时就是随机添加运算符,最后在末尾处添加“=”,返回题目
生成初中试题的方法中,运算符多了平方和根号,在添加操作数及之前的代码都相同,然后有1/3的概率添加^2运算符,如果添加成功square++,然后是括号长度的计算以及右括号的添加,最后是运算符的添加,此处调用了insertOperator方法,后3个参数的意思是总共6个运算符,有2个是基本运算符之外的,并且必须得运算符有2个,调用这个方法后,会先根据当前位置分类,如果是在最后一个数的前方插入运算符且必须的运算符个数为0,那么强制令要插入的运算符在必须的运算符中随机生成,否则就是随机生成运算符,且当随机的运算符是^2时,强制转为根号,在生成特殊符号之前,会强制添加普通运算符,然后再生成特殊运算符
生成高中题目的方法中,运算符又多了3个三角函数,基本思路和初中题目相同,在生成运算符时后3个参数变为9,5,3.
insertOperator方法是插入运算符的方法,具体分析在分析初中、高中试题生成的方法中,此方法是为了满足初中、高中必须生成的运算符。
insertRight是插入右括号的方法,在传好了参数之后调用该方法,会在左括号相对剩余数量>0且括号内操作数个数>1的情况下有1/2的概率下添加右括号,最后会在结尾处检查如果有多余的左括号会一直添加右括号,直至多余的左括号被补齐。
Reading类中实现了读取用户和读取试卷的方法,但是文件的路径采用了绝对路径的方法,与项目要求冲突,此处要扣分是缺点。
读取试卷的方法和读取用户相同,都采用了绝对路径的办法,扣分项
用户类继承抽象用户类,类中的用户名、密码、level都设置为private属性,符合安全性要求,对应的set和get方法可以设置并获得用户类的属性,类中还有login的静态方法,该方法是登录功能的具体实现,在Menu类的login方法里被调用
综上分析:笔者认为队友的个人项目除了细微的瑕疵和错误之外,优点很多
1.项目结构清晰易懂,便于他人查阅理解
2.方法名通俗易懂,见名知意
3.在写生成初中、高中题目方法时思路清晰,先划分好生成操作数和运算符两种情况,然后具体书写,并保证必要的运算符不会缺失
4.在许多方法的后面加入了throws抛出异常的方法,使得代码更为健康,不会因为遇到异常就崩溃
优点很多,但是缺点同样需要注意
1.文件的访问和保存均采用绝对路径,不符合要求
2.生成题目的命名错误,月份对不上
3.代码的具体注释很少,理解起来较为困难
标签:结对,编程,操作数,博客,生成,运算符,括号,添加,方法 From: https://www.cnblogs.com/patsy1/p/17718250.html