结对编程项目-带UI的小初高数学学习软件经历与总结
首先由于我的个人项目是用c++实现的,而搭档采用的是java实现。考虑到界面以及短信验证码的原因,于是我们结对编程决定采用java语言实现,即部分模块复用搭档的逻辑。
要实现的基本需求功能:
①所有功能通过图形化界面操作,可以是桌面应用,可以是网站(编程语言和技术不限);
②用户注册功能。用户提供手机号码,点击注册将受到一个注册码,用户可使用该注册码完成注册;
③用户完成注册后,界面提示设置密码,用户输入两次密码匹配后设置密码成功。密码6-10位,必须含大小写字母和数字。用户再登录状态下可修改密码,输入正确的原密码,在输入两次相同的新密码后修改密码成功;
④密码设置成功后,跳转到选择界面,界面显示小学、初中和高中三个选项,用户点击其中之一后,提示用户输入需要生成的题目数量;
⑤用户输入题目数量后,生成一张试卷(同一张卷子不能有相同题目,题目全部为选择题),界面显示第一题的题干和四个选项,用户选择四个选项中的一个后提交,界面显示第二题,……,直至最后一题;
⑥最后一题提交后,界面显示分数,分数根据答对的百分比计算;
⑦用户再分数界面可选择退出或继续做题;
⑧小初高数学题目要求见个人项目
我们基于基本需求增加的改进:
①我们将做完题目后的界面做了改变,分为继续答题和难度选择两个界面,而退出则被放到左上角账户菜单中,且被细分为两个类型,即退出账号或者退出软件。这样避免只有做完题目才能退出的尴尬情况。即实现随时都可以退出该账号或者退出该软件。
②注册账号和忘记密码时都会提醒该手机号是否合法是否注册过,即保证未注册的手机号无法找回密码,注册过的手机号无法再次注册。
③我们查重功能不只保证同一张试卷没有相同题目,还通过各类型文档存储该账户历史生成的题目以此来保证我们同一账号生成的试题不会有重复,即实现历史查重。
我们新增的功能:
①新增忘记密码功能,使用注册过二段手机号和短信验证码即可实现重新设置密码。
②新增题目跳转功能,输入题目题号可以直接跳到该题目。
我负责的主要部分是后台逻辑,而搭档负责的主要部分是前端与嵌入式工作。他认为javaswing做的界面不太美观,于是便采用了javaFX做界面。
①我则先解决计算模块,该模块我的思路比较简单,我先把带有根号平方或者三角函数的部分算出来,然后利用栈把中缀表达式转化为后缀表达式,然后计算后缀表达式即可,计算结果保留两位小数。然后对于随机生成题目的函数部分,我一开始准备直接复用搭档的,结果和我的计算函数一起运行测试时出大问题。后来发现问题,由于我们生成的数的范围有x>90的,这样会使得,cosx和tanx的值是负数,而这个负号在后面栈的处理时会和减号混淆从而导致栈出错。于是我加了一个逻辑,作用于cos或者tan上的随机数最后结果都要与90取余,这样可以防止出现该情况。然后我将正确结果进行一定上下浮动就生成了另外三个错误选项。
②然后查重模块,我们想要实现历史查重,就需要把生成的题目存到文档中,于是我复用搭档的写入函数以及文件命名生成的函数并略加修改,由于查重我们还需要读文件,于是我书写了一个读文件中题目的函数,并把题目存到列表中,用contains函数来实现查重。不过这部分在后来的程序测试中也出了问题。由于我使用的软件idea和搭档使用的软件eclipse都默认的格式是utf-8,所以在软件上测试的时候生成的题目文档显示没有问题,而我们把程序做成应用时,在运行,生成的题目文档格式是ansi,这样使得我们题目中的平方部分变成了问号,这样影响了我的查重功能。于是我只好修改写文件函数和读文件函数,搭档提出使用bufferedwriter函数bufferedreader函数,于是我上网搜索这两函数使用方法,并发现这两函数可以指定编码的格式,于是我重新编写这两函数并指定编码格式为utf-8,这样就解决了该问题。
③短信验证模块。我最大的收获是找一个好的网上教程比什么都强。我搜索网上教程,并在阿里云申请短信签名和模板,不过我运气比较好,大概一两个小时左右就审核通过了。然后弄accesskey的id和secret,一开始网上教程说什么要先建立用户组,然后给组添加sms权限,然后再建立一个用户,并把用户添加进组中,结果我这么弄了之后发现权限不够。我运行代码,在阿里云这里能看到该accesskey有响应但我收不到验证码。后来accesskey管理界面直接创建了一个就解决了问题。还有一个问题是导入包的方式,我一开始传统的idea导入包的方式,结果代码运行总是报错Exception in thread “main” java.lang.NoClassDefFoundError:org/apache/http……,然后我网上搜索原因是缺包了,于是我就缺什么导什么,一个错误解决又出现另一个错误。于是询问班上另一个大佬,他说把java工程改为maven工程,然后用maven导入包试试。照做了之后,又出现新问题不支持发行版本5,于是我上网搜索解决方案,将java Compiler中的Target bytecode version修改成8就解决了。
④登陆模块,由于不准使用数据库,但是我们必须实现在关闭软件重新打开后之前注册的账号能重新登录,于是我决定使用文档存储账号与密码。这个模块没有出什么问题,顺便也把修改密码部分和注册部分也解决了。
总结:
①经验:我的学习能力有了很大提高,因为其实很多东西我都没有先天就会。而是网上搜索或者同学讨论来慢慢掌握并理解。并且在实际过程中,我们对于需求的一种潜移性的改进与实现让我再一次明白项目需求与实际体验的重要性。
②教训:不要过于信任网上教程,要多查看几个并根据自己情况综合分析,在复用的时候不要盲目复用,要根据自己现在所在的项目要求与风险进行合理的修改与优化。
浙公网安备 33010602011771号