结对组员:崔舒媛、胡香铭
结对项目之个人项目互评 - 阿小楠 - 博客园 (cnblogs.com)
中小学试卷生成个人项目结对互评 - 郑北 - 博客园 (cnblogs.com)
通过个人项目,我们各自完成了小初高数学题目生成的程序编写。在对双方的代码进行理解、评价后,进入到结对项目——实现带UI的小初高数学学习软件。由于队友使用的C++语言完成的个人项目编写,对于实现项目中有短信验证功能较难实现,因此此次的项目是延续使用了我的个人项目为主要参考进行的,采用了JAVA语言,主要使用JAVA swing来实现界面。
胡香铭:功能实现、改进及后端程序
崔舒媛:界面功能实现与交互
1、所有功能的图形化界面我们采用了JAVA GUI来实现,采用桌面应用的方式进行展示。由于之前从未接触过项目的图形界面化实现,因此我的第一步工作就是初步学习JAVA GUI,再逐渐实现部分界面。
2、用户注册功能。我们此次的注册功能实现采用了榛子云,通过注册用户,开通短信验证功能进行实现。具体代码如下:
public String VerificationCodeApply(String a) { if(a.equals(""))return "0"; int flag = 0; //输入的字符串是否已注册的标记,为0为未注册其余均已注册 try { FileReader fr = new FileReader("user.txt"); BufferedReader bf = new BufferedReader(fr); String temp; while ((temp = bf.readLine()) != null) { if (temp.equals(a)) { flag++; } if (flag == 1) { bf.close(); fr.close(); return "0"; } flag = 0; } bf.close(); fr.close(); } catch (IOException e) { e.printStackTrace(); } Random rand=new Random(); StringBuilder verificationCode= new StringBuilder(); for(int i=0;i<4;i++){ verificationCode.append(rand.nextInt(10)); } String apiUrl="https://sms_developer.zhenzikj.com"; //以下为榛子云的短信发送 String appId="110134"; String appSecret="62c856d9-5270-4b2f-8fe9-4b0a3760390c"; ZhenziSmsClient client = new ZhenziSmsClient(apiUrl, appId, appSecret); Map<String, Object> params = new HashMap<>(); params.put("number", a); params.put("templateId", "7028"); String[] templateParams = new String[2]; templateParams[0] = verificationCode.toString(); templateParams[1] = "5分钟"; params.put("templateParams", templateParams); String result = null; try { result = client.send(params); } catch (Exception e) { e.printStackTrace(); } assert result != null; if(result.charAt(8)!='0')return "0"; //检测是否成功发送验证码 else return verificationCode.toString(); }
3、在此项目中,我们采用手机号码来作为用户名进行登录,简化了再重新存储用户名的繁琐工作,使用user.txt文件对用户信息进行存储和读取。信息存储为一行用户名,一行密码,在对比两次密码输入一致后才能注册成功。最终将项目打包为exe文件。
4、每个界面之间的交互、跳转大部分采用按钮监控功能来实现。为了将项目运行结果显示在屏幕正中间,使用了屏幕长宽获取的函数:
public class ScreenUtils { /* 获取当前电脑屏幕的宽度 */ public static int getScreenWidth(){ return Toolkit.getDefaultToolkit().getScreenSize().width; } /* 获取当前电脑屏幕的高度 */ public static int getScreenHeight(){ return Toolkit.getDefaultToolkit().getScreenSize().height; } }
5、生成题目的功能在继用个人项目的基础上,添加了答案及多个选项的功能。由于通过个人项目代码互评,可发现胡香铭同学的逻辑性是优于我的,因此,极具逻辑性的该功能也由胡香铭同学实现。在完成题目正确答案的计算后,通过对正确答案的更改来产生相似的另外三个答案,并利用随机的方式将正确答案分散。
6、最后实现的是打分界面,分数根据答对的百分比计算,用户在分数界面可选择退出或继续做题;
由于第一次接触UI界面化的编程,在经过短暂的学习后,虽能实现项目所需功能,但在美化方面确实略显不足。尤其在对比了其他组别的项目成功后,深知自己的欠缺与不足。
在答题结束,进行判分的过程中,程序总有一段响应时间,使得项目看起来似乎有些卡顿。
由于该项目采用自己写的随机数来生成题目,因此在题目计算中总是会出现不可避免的无限小数,但由于用分数呈现过于复杂,还需排除与题目的重合情况,因此答案会出现多位小数。
由于这算是接触的第一个与他人一起合作完成的项目,因此在各方面的经验和能力都略显不足,在感受到其他个别组的设计成果后,才发现自己的界面实现有很多不足。也要感谢我的结对同伴,在国庆假期中与我一同在自习室完成了此次项目,且大部分棘手的问题都是由他来解决的。并且通过此次编程学习,深刻认识到了团队沟通的重要性,在对所写项目进行警告去除时,由于规范化排查是胡同学做的,于是我将他改好的程序再次进行修改,造成了时间和成果的浪费。我一定会汲取经验,努力在下一次项目中完成得更好。