【写在前面】这次是复用个人项目进行结对编程,其实主要复用的就是凌老板的出题部分和我的文件读写部分,其余部分都是新学的。在这次编程中也涨了很多知识,其中最最最让人哭笑不得的就是:两个人用了不一样的编辑器,凌老板用的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. (考试大整理~)Xxy 的车厢调度

    这一题我以前研究过哈哈哈~ (train.cpp/c/pas) Description 有 一 个 火 车 站 , 铁 路 如 图 所 示 ,每辆火车从 A 驶入,再从 B 方向驶出,同时它的车厢可以 ...

  2. numpy中np.max() 和 np.maximum() 的区别

    np.max(a, axis=None, out=None, keepdims=False) # 接收一个参数a # 取a 在 axis方向上的最大值 np.maximum(x, y) # 接收两个参 ...

  3. Java线程之Callable、Future

    简述 在多线程中有时候我们希望一个线程执行完毕后可以返回一些值,在java5中引入了java.util.concurrent.Callable接口,它类似于Runnable接口,但是Callable可 ...

  4. Hadoop-2.7.5完全分布式搭建

    1.在虚拟机上安装Hadoop完全分布式准备工作 1)这里使用的是VMWare软件,在VMWare上安装一个CentOS6.5,并再克隆两个机器配置相关MAC地址,以及配置机器名 2)三台虚拟机配置好 ...

  5. C++入门经典-例6.22-字符串与数组,string类型的数组

    1:数组中存储的数据也可以是string类型的.代码如下: // 6.22.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include ...

  6. LeetCode 86. 分隔链表(Partition List)

    题目描述 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前. 你应当保留两个分区中每个节点的初始相对位置. 示例: 输入: head = 1-> ...

  7. koa 路由、视图模块化(二)

    1.项目目录 2.路由 根目录/routes/index.js -- 首页 const router = require('koa-router')(); router.get('/', async ...

  8. 数据库报错:OracleDialect does not support identity key generation

    当我把数据库改为oracle时,项目报错:org.hibernate.MappingException: org.hibernate.dialect.OracleDialect does not su ...

  9. 五十六:flask文件上传之上传文件与访问上传的文件

    实现上传文件 1.在form表单中,需指定enctype="multipart/form-data",且文件上传的input标签type="file"2.在后台 ...

  10. 看日志有没有 出现错误的字段 (如 crash ) 查找app闪退

    查看monkey的错误 在log里面查找 error  /  crashed /  Exception 1. ANR问题:在日志中搜索“ANR” 2.崩溃问题:在日志中搜索“Exception”  F ...