【写在前面】这次是复用个人项目进行结对编程,其实主要复用的就是凌老板的出题部分和我的文件读写部分,其余部分都是新学的。在这次编程中也涨了很多知识,其中最最最让人哭笑不得的就是:两个人用了不一样的编辑器,凌老板用的IDEA,我用的eclipse,虽说都是java,但是最后写出来的项目导致不能直接导入,百度了很多奈何本人太菜,所以最后只能让凌老板用eclipse编写程序。所以说,以后编写程序的时候最好要用同一个编辑器,要不然就会出现莫名其妙的报错。

还是先说一下结对编程的项目需求,这样大家好知道我们是干啥的,话不多说,正文开始:

一、项目需求

用户:

小学、初中和高中学生。

功能:

1、用户注册功能。用户提供手机号码,点击注册将收到一个注册码,用户可使用该注册码完成注册;

2、用户完成注册后,界面提示设置密码,用户输入两次密码匹配后设置密码成功。密码6-10位,必须含大小写字母和数字。用户在登录状态下可修改密码,输入正确的原密码,再输入两次相同的新密码后修改密码成功;

3、密码设置成功后,跳转到选择界面,界面显示小学、初中和高中三个选项,用户点击其中之一后,提示用户输入需要生成的题目数量;

4、用户输入题目数量后,生成一张试卷(同一张卷子不能有相同题目,题目全部为选择题),界面显示第一题的题干和四个选项,用户选择四个选项中的一个后提交,界面显示第二题,...,直至最后一题;

5、最后一题提交后,界面显示分数,分数根据答对的百分比计算;

6、用户在分数界面可选择退出或继续做题;

小初高数学题目要求见个人项目。

二、任务分工

本次任务,我们没有像许多同学分为了前端和后端,因为考虑到以后人才都是比较全方面的,所以我们是按功能点分的,这样两个人就都可以掌握前端和后端的知识。

李晓彤:功能点1、2、3

凌嘉文:功能点4、5、6

其中我认为难点就是:功能点1中手机注册码以及功能点4中要计算正确答案的算法。

三、具体结果&实现讲解

1.软件操作流程图

2.登录界面

 实现原理:可以看到在账号后面的内容框里是灰色的,这里的效果就是如果框内没有内容,那么就会显示默认的提示文字,如果框内有内容或者是鼠标点击了,那么提示文字就会消失。这里注意登录和找回密码都要判断是否存在该用户,故要有个专门的txt文件存储用户名和密码。

容易忽视的点有:1.找回密码时用户不存在:找回密码的时候容易想到直接给用户密码,但是如果用户不存在就GG了,所以一定要考虑用户不存在的情况。

3.注册界面

实现原理:这里可以看到,框内灰色的实现和登陆界面的内容框内灰色文字的实现原理相同,都是用了继承FocusListener后来修改一系列的参数。然后重点来了,这里的“请输入正确的验证码”是采用了多线程编程,这样可以实时显示用户输入的结果是否正确。这样也可以省去检测按钮和减少用户操作,提升体验感。这块背后的算法是利用了阿里云的短信验证功能。这块浪费的时间最多,各种调试和bug修改,这里需要注意的一点就是:

阿里云的这里,一定填的是你申请的模板号码,而不是具体模板内容。就因为这点,改了两天bug,后来是用阿里云在线生成代码后才发现自己这里错误的(他会提示模板不合法)。

容易忽视的点:注册过的用户不能重复注册,还有就是要注意多线程编程,以及阿里云短信验证。这个阿里云的具体操作有百度链接,我就不过多赘述。

4、设置密码:

实现原理:还是采用了多线程编程,才能让提示框中红色字内容实时显示

 容易忽视的点:多线程编程中一定要初始化框内的内容,不然回报空指针错误,而且在run中也一定要先判断框中有没有东西。

5、选择难度

实现原理:由于是用的可视化编程,所以也没什么可以注意的地方,就是背景图片一定要在最下层,别的没什么要注意的了。

容易忽视的点:无。

6.修改密码

实现原理:还是多线程编程,没的说。

 容易忽视的点:

1.这里要做一个判断,就是他输入的新密码一定只能包含大小写字母和数字。

2. 红框未消失的时候点击下一步无效。

7.选择数量

实现原理:这里没有用多线程编程,因为后续报错以及String类型转成int类型判断数量是否合法,还有输入的是否是数字。各种报错让我最后弃用了多线程编程。他刚开始框内会显示10作为默认的出题数量,但是同样的,如果红框不消失的话开始做题按钮也是无效的。

容易忽视的点:输入的不一定就只是数字,还有可能是各种字符和空格,这里就只能输入数字,多一个空格也不行。

8.出题

实现原理:这里主要就是计算问题以及随机出结果,这个随机出的结果不能和正确结果相同。上一题按到最前面时要出现“已经到第一题了”的提示。这个计算的算法是这样实现的:

把一个式子最多有五个操作数,那么先从括号算起,一遍遍遍历这个式子,先处理三角函数,然后处理根号和平方,之后是乘除,最后才是加减。也就是先算每一个项的数,再扩大这个项的范围(这里只是将项的特征做了改变,因为有五个操作数,所以操作数特征从左到右分别为1~5)。这里项的概念借助了凌老板的个人项目中有关计算的部分。

容易忽视的点(改bug的时候发现的):

1.不能记住上一题的结果

2.上一题至最前面时没有提示

3.重新出题后,会把上次做题的结果记住,而不是清空重来。

4.算式太长显示不了-----计算最长能显示的算式,然后判断如果算式长度超过了,则重新生成算式。

5.结果太长,一个项显示不了--------把4个项从占一行变成了每行一项。

9.得分

实现原理:因为有上一题的功能,所以就要记录每一个选项,最后算得分,而不是一边选一边算。最后把分数强制转化为int类型就可以了。

容易忽视的点(改bug的时候发现的):分数如果不转化为int类型,可能导致显示不完全。

四、代码可能出现的问题

1.发送短信不成功:那你可能要联系管理员:李晓彤,告诉她欠费了要交钱了。

2.存储新注册的用户信息,要根据你上次操作user.txt的光标所处位置,所以他有可能是连在上一个用户的后面,也有可能是另起一行,这就可能导致改密码的时候出现不成功的bug。

五、思考与总结

这次编程可谓是用时很长,而且克服了种种艰难。总之就是:受益匪浅,膜拜凌老板的算法,以及佩服自己能改完一个又一个的bug。从这次编码中领悟到一个道理:coding不是最重要的,thinking才是!bug复bug,bug何其多!

记java的那些编辑器的故事之凌嘉文+李晓彤-结对编程的更多相关文章

  1. 转!!Java代码规范、格式化和checkstyle检查配置文档

    为便于规范各位开发人员代码.提高代码质量,研发中心需要启动代码评审机制.为了加快代码评审的速度,减少不必要的时间,可以加入一些代码评审的静态检查工具,另外需要为研发中心配置统一的编码模板和代码格式化模 ...

  2. Java代码规范、格式化和checkstyle检查配置文档

    http://www.blogjava.net/amigoxie/archive/2014/05/31/414287.html 文件下载: http://files.cnblogs.com/files ...

  3. 20175226 2018-2019-2《java程序设计》结对编程-四则运算(第一周-阶段总结)

    结对编程-四则运算(第一周-阶段总结) 需求分析 实现一个四则运算程序,要求: 自动随机生成小学四则运算题目(加,减,乘,除) 支持整数.真分数且支持多项式 能够利用栈的思想,将中缀转换为后缀表达式 ...

  4. 20175305张天钰Java结对编程四则运算(二)

    Java结对编程四则运算(二) 一.题目描述及要求 Git提交粒度不要太粗,建议一个文件/一个类/一个函数/一个功能/一个bug修复都进行提交,不能一天提交一次,更不能一周一次,参考Commit Me ...

  5. 20175305张天钰Java结对编程四则运算

    Java结对编程四则运算 一.题目描述:如何对表达式进行求值运算呢 1.中缀表达式与后缀表达式(娄老师讲解) 中缀表达式就是运算符号在运算数中间的表达式,比如1+2,顾名思义,后缀表达式就是运算符在运 ...

  6. 20175324王陈峤宇 2018-2019-2《Java程序设计》结对编程项目-四则运算 第一周 阶段性总结

    20175324王陈峤宇 2018-2019-2<Java程序设计>结对编程项目-四则运算 第一周 阶段性总结 需求分析 这次的结对作业是要求我们利用栈来设计一个计算器. 自动生成四则运算 ...

  7. 20175229许钰玮 2018-2019-2《Java程序设计》结对编程项目-四则运算 第一周 阶段性总结

    20175229许钰玮 2018-2019-2<Java程序设计>结对编程项目-四则运算 第一周 阶段性总结 需求分析 自动生成四则运算题目(加.减.乘.除). 既可以用前缀算法(波兰算法 ...

  8. 2017-2018-2 165X 『Java程序设计』课程 结对编程练习_四则运算

    2017-2018-2 165X 『Java程序设计』课程 结对编程练习_四则运算 经过第一阶段的学习,同学们已经熟悉了这门语言基本的用法.在一次又一次对着电脑编写并提交代码,进行练习的时候,有没有觉 ...

  9. 20175312 2018-2019-2 《Java程序设计》结对编程练习_四则运算(第二周:整体性总结)

    20175312 2018-2019-2 <Java程序设计>结对编程练习_四则运算(第二周:整体性总结) 结对对象与其博客链接 20175309 刘雨恒:https://www.cnbl ...

随机推荐

  1. permutation 2(递推 + 思维)

    permutation 2 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) ...

  2. selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document

    抓取网页代码后,由于是在同一个li标签下,所以使用一次性抓取,所有的a标签,然后循环做不同的操作,但是抛出找不到元素异常. def office_page(_chrome: Chrome): sn = ...

  3. Mysql主从同步 异常Slave_SQL_Running: No

    在刚搭建好的mysql主从节点上对从节点进行操作,导致同步异常:报错如下: 从节点执行: mysql> show slave status\G;************************* ...

  4. 【java】获取项目资源路径

    目资源路径分两种,一种是普通Java项目的资源路径,另一种是JavaEE项目的资源路径. 获取Java项目的包(源码下的包 或者 jar包)的资源路径 // 方法1:通过this.getClass() ...

  5. 开源!js实现微信/QQ直接跳转到支付宝APP打开口令领红包!附:demo

    最近支付宝的领红包可真是刷爆了各个微信群啊,满群都是支付宝口令. 可是这样推广可不是办法,又要复制又要打开支付宝又要点领取,太麻烦了. 于是乎,提出了一个疑问!是否可以在微信里面点一个链接然后直接打开 ...

  6. C++入门经典-例7.3-析构函数的调用

    1:析构函数的名称标识符就是在类名标识符前面加“~”.例如: ~CPerson(); 2:实例代码: (1)title.h #include <string>//title是一个类,此为构 ...

  7. RESTful API是什么?

    1. REST 是Repersentational State Transfer的缩写 翻译为"表述性状态传递",那么什么是表述性状态传递呢?为了理解这个词语,我们从"R ...

  8. TCP主动打开 之 第一次握手-发送SYN

    tcp客户端与服务器端建立连接需要经过三次握手过程,本文主要分析客户端主动打开中的第一次握手部分,即客户端发送syn段到服务器端: tcp_v4_connect为发起连接主流程,首先对必要参数进行检查 ...

  9. layui按回车键实现表单提交

    layui中标准用法如下: <form class="layui-form"> <input type="button" id="q ...

  10. laravel 5以后数据库插入自动转化方式