1、用户注册功能。用户提供手机号码,点击注册将收到一个注册码,用户可使用该注册码完成注册;
2、密码设置功能,用户输入两次密码匹配后设置密码成功。密码6-10位,必须含大小写字母和数字;
3、密码修改功能,输入正确的原密码,再输入两次相同的新密码后修改密码成功;
3、难度选择功能,界面显示小学、初中和高中三个选项,用户点击其中之一后,提示用户输入需要生成的题目数量;
4、用户输入题目数量后,生成一张试卷(同一张卷子不能有相同题目,题目全部为选择题),界面显示第一题的题干和四个选项,用户选择四个选项中的一个后提交,界面显示第二题,...,直至最后一题;
5、分数显示功能,最后一题提交后,界面显示分数,分数根据答对的百分比计算;
6、用户在分数界面可选择退出或继续做题;
7、小初高题目需求见上一篇博客
1、针对用户注册的功能我们在阿里云上申请了一个短信模板,通过导入阿里云短信相关的api.jar包后,代码发送请求即可发送验证码短信;
2、密码设置功能则是一个字符串的检查,需要有大写、小写字母以及数字,并且长度为6-10位长。这就是我们以前写过的OJ题目了,设一个flag检查三种元素是否都有即可;在输入合法的情况下将用户名和密码保存到数据库中;
1 //用于注册用户
2 public boolean register(Loginer loginer){
3 Connection conn = null;
4 PreparedStatement psmt = null;
5 String sql = "insert into loginer(name,password,state) values(?,?,?)";//向数据库增加新用户信息
6 try {
7 conn = dbhelp.getConnection();
8 PreparedStatement ptmt = conn.prepareStatement(sql);
9 ptmt.setString(1, loginer.getName());
10 ptmt.setString(2, loginer.getPassword());
11 ptmt.setInt(3, loginer.getState());
12 ptmt.execute();
13 } catch (Exception e) {
14 e.printStackTrace();
15 return false;
16 }
17 return true;
18 }
3、密码修改功能,通过当前登录状态对应的用户名(name)在数据库中找到其对应的原密码与输入的原密码进行匹配,并且校验新设置的密码是否符合(密码6-10位,必须含大小写字母和数字)的要求;在符合要求的情况下,修改数据库中对应字段的值;
1 //获得对应用户名的密码
2 public String get(String name){
3 Connection conn = null;
4 PreparedStatement psmt = null;
5 ResultSet rs = null;
6 String password = new String();
7 String sql = "select * from loginer where name=?";//查找相应用户名的用户
8 try {
9 conn = dbhelp.getConnection();
10 PreparedStatement ptmt = conn.prepareStatement(sql);
11 ptmt.setString(1, name);
12 rs = ptmt.executeQuery();
13 while(rs.next()){
14 password = rs.getString("password");//获得密码
15 }
16 return password;
17 } catch (Exception e) {
18 e.printStackTrace();
19 }
20 return null;
21 }
1 //用于改变相应用户名的密码
2 public boolean change(Loginer loginer){
3 Connection conn = null;
4 PreparedStatement psmt = null;
5 String sql = "update loginer set password=? where name=?";//更新相应用户名的密码
6 try {
7 conn = dbhelp.getConnection();
8 PreparedStatement ptmt = conn.prepareStatement(sql);
9 ptmt.setString(2, loginer.getName());
10 ptmt.setString(1, loginer.getPassword());
11 ptmt.execute();
12 } catch (Exception e) {
13 e.printStackTrace();
14 return false;
15 }
16 return true;
17 }
4、在出题部分,用的是类似递归调用自身构造的方法,直到最后一题,点击按钮触发事件变为构造显示分数的窗口;
1、图形界面方面,在前期准备的时候发现了一个eclipse中用于设计UI界面的神器——Windows builder插件。利用这款插件,我们可以通过拖动的方式布局好框架以及button、text Field等元素,以及设计好他们的大小,而不需要一行行的将代码敲出来运行看到界面之后再慢慢调整各元素的大小。此处附上他人写的一篇关于Windows builder的讲解博客;配置好后界面如下所示,Swing的所有元素都可以直接进行设置;
2、在个人项目的基础上,该题还要求我们给出自己生成的题目的正确答案,可是计算机不是人呀,在我们眼里一个简单的数学式子在计算机眼中只是一串单调的字符串,没有办法在我们不写任何逻辑的情况下算出这一串字符串的结果来。通过查阅资料,发现了一个叫做逆波兰表达式的东西,它可以将一个只含有加减乘除和括号的字符串式子转化为数学表达式计算处结果来。这样一来就大大简化了我们的思考量。对于小学的题目我们只需要直接调用逆波兰表达式就可以出结果,对于初中和高中含有根号、平方、三角函数的情况下,我们需要将这三个东西先提取出来,调用相关Math函数将他们转化为数字,再插回原来的式子,即可将式子转化为小学的数学式子算出结果。
登录界面
用户注册界面,在控制台中输出随机生成的验证码以及成功发送与否的反馈信息
密码格式验证
出题界面
退出界面
整个结对编程周期长为1.5周,从开始对需求做分析,思考解决思路,到实现,中间用了很多地方法,也放弃了很多地方法。刚开始看到需要给出正确答案这个需求时,我们是想追求一个完美的结果的,即生成一个符合正常人逻辑的答案,例如对于初高中的题,√45在结果中应该为3√5而不是一个小数,但是最后由于时间的关系我们放弃了这种优化,在提交作业之后可以继续完成一下。然后就是注册方面数据库的调用,调用数据库保存注册过的用户数据,在下一次登录时查找匹配,在修改密码时匹配替换对应字段,这其实是比将用户信息保存到txt文件中思路更为清晰,查找和修改对应内容也更为方便的一种方法。最后就是,搭档syJ过分优秀,我还需多多学习。
原文:https://www.cnblogs.com/zhm0424/p/11605461.html