【湖南大学结对编程总结】带UI的小初高数学学习软件

链接:完整代码及说明
提取码:87mx

复制这段内容后打开百度网盘手机App,操作更方便哦
一、功能需求

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

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

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

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

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

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

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

二、功能测试

  1. 注册功能:利用手机号进行注册,手机收到验证码,将验证码输入进行确认,然后进行密码设置,密码设置必须满足6-10位,含大小写字母和数字,且两次密码必须相同,匹配成功,用户才注册成功。
    在这里插入图片描述
    在这里插入图片描述

  2. 登录功能:注册完成之后可以通过手机号和设置的密码进行登录出题,如果密码输入不相同则会进行错误提示,且无法登录系统;
    在这里插入图片描述

  3. 出题功能:进入出题系统之后,用户可以根据自身需要选择相应的年级进行出题,然后进入相应出题数量的选择,输入所需要的题目数量点击出题,则会进入出题界面,并在下面出现四个选项,且只有一个正确答案,最后将会根据答对的题目数量进行统计分数。

在这里插入图片描述

  1. 重设密码功能:用户可以通过重设密码按键进入重设密码的功能界面,输入旧密码,再输入新密码,确认新密码,当新密码两次相同且满足密码要求的情况下,则会重设密码。

在这里插入图片描述

三、实现要点

  1. 程序实现的总体架构:我们在src中放入我们程序实现的代码部分,在images中放入我们使用的图片元素,以及后面用于数据库连接使用的jar包。
    在这里插入图片描述

  2. 图形界面的实现:刚开始本着要用html来实现图形界面的实现,但是队友有javaui的使用经验,在他的推荐之下,我们使用eclipse的可视化插件WindowBuilder进行辅助设计,通过插件可以对界面实行简单的实现,再通过我们修改代码进行不断完善,极大加快了我们的图形界面的开发效率。

在这里插入图片描述

  1. 出题功能的重用:在之前的个人项目之中我们实现的出题代码,我们通过类进行封装,我们可以通过类进行调用返回实现我们的题目字符串,但是这次完成的功能必须实现题目结果的计算,所以我们在返回值改成了字符串数组,一个用于返回我们的题目字符串,另一个字符串返回的是我们对其中的特殊字符计算后的题目字符串,可用于在后面我们可以通过直接调用逆波兰表达式对结果进行计算。
    在这里插入图片描述

  2. 题目的生成和结果的计算:在进行出题时,因为我们必须保证题目的不可重复性,我们必须一次性将所有题目放入hashset进行校验,所以我们选择在开始时直接生成所有的题目和结果,分别放入problem字符串数组和result数组,我们就可以通过直接将这些题目和结果作为参数进行传参,保证题目的唯一性,为了节省空间,我们对选项的随机生成并没有放入数组进行传参,而是通过在接下来的递归调用中进行生成。

在这里插入图片描述

  1. 题目的跳转与计分:我们对题目的跳转是通过不断的递归调用来实现的,当我们选择了一个选项并进行确认时,我们就会重新生成一个窗口对象,传入我们之前生成的题目和结果和当前的是第几个题目,再通过随机化的方法,我们就可以生成四个选项,生成了我们的题目。至于计分困扰了我们很久,后来我们选择通过类的静态变量来进行实现,因为当我们递归调用生成类的时候,我们对对象的类的静态变量的更改会影响到这个类的所有对象,由此我们可以进行计分,当再次重新开始出题时我们只需将计分个数初始化为0即可。
    在这里插入图片描述

  1. 数据库的实现:用于对用户信息的保存,刚开始的个人项目中我使用的是文件的保存,当时面对现在要实现的功能,用文本实现复杂化,所以我们用数据库mysql对用户信息进行管理,同时使用mysql专用的数据库管理软件对管理更加有效,安全性更高。
 1 package testPaperUI;
 2 import java.sql.Connection;
 3 import java.sql.DriverManager;
 4 public class dbhelp {//数据库连接
 5     private static final String driver = "com.mysql.cj.jdbc.Driver";
 6        private static final String url = "jdbc:mysql://localhost:3306/test?userUnicode=true&characterEnconding=UTF-8&serverTimezone=UTC";//test为数据库
 7        private static final String username = "user";//账号
 8        private static final String password = "123456";//密码
 9        private static Connection conn = null;
10
11        static {
12            try {
13             Class.forName(driver);
14         } catch (Exception e) {
15             e.printStackTrace();
16         }
17        }
18
19        public static Connection getConnection() throws Exception{
20            if(conn == null) {
21                conn = DriverManager.getConnection(url,username,password);//获得连接
22                return conn;
23            }
24            return conn;
25        }
26
27        public static void main(String[] args) {//测试主函数
28            try{
29                Connection conn = dbhelp.getConnection();
30                if(conn != null) {//获得连接输出正常
31                    System.out.println("数据库连接正常");
32                }else {//连接失败输出异常
33                    System.out.println("数据库连接异常");
34                }
35            }catch(Exception e) {
36                e.printStackTrace();
37            }
38        }
39
40
41 }

四、结对编程总结

这是我的第一次结对编程体验,给我带来一种新的编码方式,通过两个结对编写代码,我们互相发现对方编码中的小错误,互相提醒,提高了我们编码的正确性,减少了我们后期的调整调试的时间,很大提到了我们的编码效率。同时,我们又在不同的方面了解更多一些,我更熟悉后台编码的实现,而我的队友更熟悉前端界面的实现,我们各有所长,在相应的部分我们可以发挥各自的长处,大大提高了我们整个项目的实现效率。在这次结对编程中,通过和队友的对比也发现了自己还有很多不足,在接下来的学习中,我将会更加努力提升自己的能力。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值