结对编程:小初高中数学试卷自动生成系统
数学试卷自动生成系统结对编程总结
功能需求
1、所有功能通过图形化界面操作,可以是桌面应用,可以是网站(编程语言和技术不限);
2、用户注册功能。用户提供手机号码,点击注册将收到一个注册码,用户可使用该注册码完成注册;
3、用户完成注册后,界面提示设置密码,用户输入两次密码匹配后设置密码成功。密码6-10位,必须含大小写字母和数字。用户在登录状态下可修改密码,输入正确的原密码,再输入两次相同的新密码后修改密码成功;
4、密码设置成功后,跳转到选择界面,界面显示小学、初中和高中三个选项,用户点击其中之一后,提示用户输入需要生成的题目数量;
5、用户输入题目数量后,生成一张试卷(同一张卷子不能有相同题目,题目全部为选择题),界面显示第一题的题干和四个选项,用户选择四个选项中的一个后提交,界面显示第二题,...,直至最后一题;
6、最后一题提交后,界面显示分数,分数根据答对的百分比计算;
7、用户在分数界面可选择退出或继续做题;
8、小初高数学题目要求见个人项目
UI界面实现
本次项目的UI界面采用了eclipse的插件WindowBuilder,使用可视化的工具设计界面十分方便,参考CSDN教程。
https://blog.csdn.net/yerenyuan_pku/article/details/82861589
- 登录界面的设计
![]()
其他的界面不再一一展示,文末会附上源码,可自行查看。
代码分析

两个包:adminZone(后端代码)以及userInterface(界面代码);
Main文件是运行程序的入口;
UserInformation.txt是存放用户名和密码的文档
-
其中,adminZone部分基本沿用个人项目的代码,详情可前往(https://www.cnblogs.com/baoweijie99/p/13789237.html)
-
GenerateCode类集合了用于生成验证码功能的函数:
public class GenerateCode {
/*
NO:0
功能:生成一个范围内的随机数
参数:m_range,范围
返回:int,该范围内的随机数
*/
public int CreateRandom(int m_range)
{
int m_max=100,m_min=1;
int m_ran2 = (int) (Math.random()*(m_max-m_min)+m_min);
return m_ran2%m_range+1;
}
/*
NO:1
功能:根据输入的一个数字字符,生成相应的数字字符,或者是大小写字符
参数:一个数字字符
返回:一个字符
*/
public char TransformNumToCode()
{
int m_tmp =0;
switch (CreateRandom(3)) //根据一个随机数,来确定要返回的字符
{
case 1: //数字字符
m_tmp=CreateRandom(10)+47;
break;
case 2: //小写字母字符
m_tmp=CreateRandom(26)+96;
break;
case 3: //大写字母字符
m_tmp=CreateRandom(26)+64;
break;
default:
}
return (char)m_tmp;
}
/*
NO:2
功能:根据输入的11位手机号生成4位验证码(包含小写字母,大写字母,数字)
参数:电话号码
返回值:生成的验证码,若手机号不是有效的,返回"invalid"
*/
public String GenerateVerificationCode()
{
String m_verifycode="";
for (int i = 0; i < 4; i++)
{
m_verifycode+=TransformNumToCode();
}
return m_verifycode;
}
}
- 每个界面类都会设置切换界面或报错弹窗的功能,基本都通过以下思路来实现
- 给按钮设置鼠标监听
- 调用切换新界面或报错弹窗的函数
比如:RegisterUI类注册界面,如果注册成功就会切换到设置密码,而如果注册失败就会弹窗报错
// 确认的按钮
JButton btnNewButton = new JButton("确认");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(!m_verificationText.getText().equals(m_verificationCode))
{
PopRegisterError();//注册失败则弹窗报错
}
else if(m_verificationText.getText().equals(m_verificationCode))
{
SwitchSetPasswd();注册成功则跳转到设置密码界面
}
}
});
/*
NO:1
功能:切换到设置密码界面
参数:无
返回:无
*/
public void SwitchSetPasswd()
{
this.dispose();
SetPasswdUI frame = new SetPasswdUI();
frame.setVisible(true);
}
/*
NO:2
功能:弹出注册报错窗口
参数:无
返回:无
*/
public void PopRegisterError()
{
RegisterErrorUI frame = new RegisterErrorUI();
frame.setVisible(true);
}
- 用户输入某些特定字段的时候需要满足特定的要求;
-
如:设置密码的时候需要满足 “密码6-10位,必须含大小写字母和数字” 的要求,以及设置密码的两次输入必须一致的要求:
/* NO:2 功能:判断输入的密码是否规范 参数:字符串 返回:布尔 */ public boolean IsNormal(String password) { boolean flag; boolean capFlag = false; boolean lowFlag = false; boolean numFlag = false; if(password.length()<6 || password.length()>10) flag = false; else { for(int i=0; i<password.length(); i++) { if(password.charAt(i) >= 'A' && password.charAt(i) <= 'Z' ) capFlag = true; if(password.charAt(i) >= 'a' && password.charAt(i) <= 'z' ) lowFlag = true; if(password.charAt(i) >= '0' && password.charAt(i) <= '9' ) numFlag = true; } if(capFlag==true && lowFlag==true && numFlag==true) flag = true; else flag = false; } return flag; } /* NO:3 功能:判断两次密码是否一致 参数:两个字符串 返回:布尔 */ public boolean IsEqual(String firstPassword, String secondPassword) { return (firstPassword.equals(secondPassword)); } -
如:用户输入手机号注册时,需判断手机号是否合法,这里采用了正则表达式的判断方法:
/* NO:2 功能:判断字符串是否是合法的手机号 参数:字符串 返回:布尔类型 */ public boolean IsPhoneNumber(String phoneNumber) { Pattern pattern = Pattern.compile("^(13|15|16|17|18|19)\\d{9}$"); Matcher matcher = pattern.matcher(phoneNumber); boolean isMatch = matcher.matches(); return isMatch; }
实现效果







项目源码
在此附上项目源码分享给大家,欢迎各位批评指正!
更多内容请移步队友博客。


浙公网安备 33010602011771号