结对编程:小初高中数学试卷自动生成系统

数学试卷自动生成系统结对编程总结

功能需求

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是存放用户名和密码的文档

  1. 其中,adminZone部分基本沿用个人项目的代码,详情可前往(https://www.cnblogs.com/baoweijie99/p/13789237.html)

  2. 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;
    }

}
  1. 每个界面类都会设置切换界面或报错弹窗的功能,基本都通过以下思路来实现
    • 给按钮设置鼠标监听
    • 调用切换新界面或报错弹窗的函数
      比如: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);
	}
  1. 用户输入某些特定字段的时候需要满足特定的要求;
  • 如:设置密码的时候需要满足 “密码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;
     }
    

实现效果








项目源码

在此附上项目源码分享给大家,欢迎各位批评指正!

更多内容请移步队友博客

posted @ 2020-10-09 23:37  Strolling707  阅读(314)  评论(0)    收藏  举报