本博客对在个人编程的基础上进行的结对编程进行总结,主要包括代码的复用和结对编程中学到的经验教训
结对编程分工:我负责UI界面(登陆界面,出题界面,做题界面,汇报界面,修改密码,弹窗模块),队友负责(验证码注册模块,查重模块,保存账户信息模块,计算模块)
1、所有功能通过图形化界面操作,可以是桌面应用,可以是网站(编程语言和技术不限);
2、用户注册功能。用户提供手机号码,点击注册将收到一个注册码,用户可使用该注册码完成注册;
3、用户完成注册后,界面提示设置密码,用户输入两次密码匹配后设置密码成功。密码6-10位,必须含大小写字母和数字。用户在登录状态下可修改密码,输入正确的原密码,再输入两次相同的新密码后修改密码成功;
4、密码设置成功后,跳转到选择界面,界面显示小学、初中和高中三个选项,用户点击其中之一后,提示用户输入需要生成的题目数量;
5、用户输入题目数量后,生成一张试卷(同一张卷子不能有相同题目,题目全部为选择题),界面显示第一题的题干和四个选项,用户选择四个选项中的一个后提交,界面显示第二题,…,直至最后一题;
6、最后一题提交后,界面显示分数,分数根据答对的百分比计算;
7、用户在分数界面可选择退出或继续做题;
根据用户选择的题目类型和数量生成题目(示例):
给函数增加了返回值,函数返回一个字符串数组,每一个字符串代表一个题目,传入的参数分别是题目类型,题目保存的路径和题目数量
public static String[] GenerateTest(String type, String path, int number)
代码如下(示例):
int num = (int) (0 + Math.random() * (4 - 0 + 1)); //获取0-4个 二元运算符
ArrayList<String> houzhui = new ArrayList<>();
int operands = (int) (1 + Math.random() * (100 - 1 + 1)); //操作数的取值范围是1-100
houzhui.add(Integer.toString(operands));
随机生成二元运算符和运算数,然后把他们拼接成后缀表达式。根据题目的类型,随即插入根号等一元运算符
通过栈来实现,从后缀表达式中取字符串,根据字符串的内容来决定进行入栈还是出栈的操作
//将后缀表达式翻译成中缀表达式
Stack<String> stack = new Stack<>();
int time=0;
for (String str:houzhui){
if (str.equals("sin")||str.equals("cos")||str.equals("tan")||str.equals("√")||str.equals("2")){
String popB=stack.pop();
if (str.equals("√")){
stack.push("√"+"("+popB+")");
}
if (str.equals("2")){
stack.push("("+popB+")"+"2");
}
if (str.equals("sin")){
stack.push("sin"+"("+popB+")");
}
if (str.equals("cos")){
stack.push("cos"+"("+popB+")");
}
if (str.equals("tan")){
stack.push("tan"+"("+popB+")");
}
}
else if(str.equals("+")||str.equals("-")||str.equals("*")||str.equals("/")){
String popB=stack.pop();
String popA=stack.pop();
if (str.equals("+")){
if (time==0){
temp = temp + "(" + popA + "+" + popB + ")";
time++;
}
else{
temp = "(" + temp + "+" + popB + ")";
}
stack.