结对编程1---四则运算---GUI
201421123003 黄建英 201421123004 黄美海
题目描述:
我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序。进一步,本次要求把这个程序做成GUI(可以是Windows PC 上的,也可以是Mac、Linux,web,手机上的),成为一个有基本功能、一定价值的程序。在下面的功能需求中实现两个:
1.记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算;
2.有计时功能,能显示用户开始答题后的消耗时间;
3.界面支持中文简体/中文繁体/英语,用户可以选择一种。
在软件开发中,我们需要大量使用工具来辅助设计,每个环节大家都要善于学习和使用工具。设计的时候,请使用思维导图设计你的模块之间的关系。
一、需求分析
1、用户输入数量可随机产生四则运算式
2、对用户输入的答案进行正确率分析
3、GUI界面:a、有计时功能,能显示用户开始答题后的消耗时间 b、界面支持中文简体/中文繁体/英语,用户可以选择一种;
二、思维导图

三、关键代码说明
a计时功能
private void finishActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_finishActionPerformed
// TODO add your handling code here:
rightanswer.setText("");
int correct = 0;
int fault = 0;
String[] anslist = enter2.getText().split("\n");
for (int i = 0; i < Answer.size(); i++) {
if (Answer.get(i).equals(anslist[i])) {
correct++;
rightanswer.append( "正确!答案是:"+Answer.get(i)+"\n");
} else {
rightanswer.append( " 错误!正确答案是:"+Answer.get(i)+"\n");
fault++;
}
}
String toDate = simpleFormat.format(new Date());
try {
to = simpleFormat.parse(toDate).getTime();
} catch (ParseException ex) {
Logger.getLogger(sizeyunsuan.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println((float) ((to - from) / (1000 * 60 * 60)));
if (language == 1) {
resultprintf.setText("答对" + correct + "题,正确率:" + (float) correct / (correct + fault) * 100 + "%,花费时间:" + (int) ((to - from) / (1000)) + "秒");
} else if (language == 2) {
resultprintf.setText("答對" + correct + "題,正確率:" + (float) correct / (correct + fault) * 100 + "%,花費時間:" + (int) ((to - from) / (1000)) + "秒");
} else if (language == 3) {
resultprintf.setText("Answer correct " + correct + "questions, correct rate:" + (float) correct / (correct + fault) * 100 + "%,Spend time:" + (int) ((to - from) / (1000)) + "s");
}
for (int i = 0; i < Answer.size(); i++) {
Answer.remove(i);
anslist = null;
}
}//GEN-LAST:event_finishActionPerformed
b生成题目
private void startActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_startActionPerformed
// TODO add your handling code here:
String num = enter1.getText();
int n = 0;
try {
n = Integer.parseInt(num);
} catch (NumberFormatException e) {
if (language == 1) {
resultprintf.setText("输入错误!请重新输入");
} else if (language == 2) {
resultprintf.setText("輸入錯誤!請重新輸入");
} else if (language == 3) {
resultprintf.setText("input error! please enter again");
}
}
int m = (int) (Math.random() * n);//随机整数题目和分数题目的题量
for (int i = 0; i < (n - m); i++) {//先随机出整数题型
Random random = new Random();
int n1 = random.nextInt(10);
int n2 = random.nextInt(10) + 1;
int a = (int) (Math.random() * 4 + 1);//随机决定运算类型
if (a == 1) {
Question.add(n1 + "+" + n2 + "=");
Answer.add(n1 + n2 + "");
}
if (a == 2) {
Question.add(n1 + "-" + n2 + "=");
Answer.add(n1 - n2 + "");
}
if (a == 3) {
Question.add(n1 + "×" + n2 + "=");
Answer.add(n1 * n2 + "");
}
if (a == 4) {
Question.add(n1 + "÷" + n2 + "=");
String n3 = (float) n1 / n2 + "";
if (n3.indexOf(".0") != -1) {
n3 = n3.replace(".0", "");
}
Answer.add((n3));
}
}
for (int i = 0; i < m; i++) {
int[] fn1 = createFraction();
int[] fn2 = createFraction();
int a = (int) (Math.random() * 4 + 1);
if (a == 1) {//加
Question.add("(" + Reduction(fn1[0], fn1[1]) + ")+(" + Reduction(fn2[0], fn2[1]) + ")=");
Answer.add(Reduction(((fn1[0] * fn2[1]) + (fn2[0] * fn1[1])), (fn1[1] * fn2[1])));//化简结果并存储
}
if (a == 2) {//减
Question.add("(" + Reduction(fn1[0], fn1[1]) + ")-(" + Reduction(fn2[0], fn2[1]) + ")=");
Answer.add(Reduction(((fn1[0] * fn2[1]) - (fn2[0] * fn1[1])), (fn1[1] * fn2[1])));
}
if (a == 3) {//乘
Question.add("(" + Reduction(fn1[0], fn1[1]) + ")×(" + Reduction(fn2[0], fn2[1]) + ")=");
Answer.add(Reduction(fn1[0] * fn2[0], fn1[1] * fn2[1]));//
}
if (a == 4) {//除
Question.add("(" + Reduction(fn1[0], fn1[1]) + ")÷(" + Reduction(fn2[0], fn2[1]) + ")=");
Answer.add(Reduction(fn1[0] * fn2[1], fn1[1] * fn2[0]));
}
}
int qn = 0;
question.setText("");
rightanswer.setText("");
enter2.setText("");
for (String string : Question) {
qn++;
question.append("[" + qn + "]" + string + "\n");
}
for (int i = 0; i < Question.size(); i++) {
Question.remove(i);
}
String fromDate = simpleFormat.format(new Date());
try {
from = simpleFormat.parse(fromDate).getTime();
} catch (ParseException ex) {
Logger.getLogger(sizeyunsuan.class.getName()).log(Level.SEVERE, null, ex);
}
}//GEN-LAST:event_startActionPerformed
c结果判断与输出
private void finishActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_finishActionPerformed
// TODO add your handling code here:
rightanswer.setText("");
int correct = 0;
int fault = 0;
String[] anslist = enter2.getText().split("\n");
for (int i = 0; i < Answer.size(); i++) {
if (Answer.get(i).equals(anslist[i])) {
correct++;
rightanswer.append( "正确!答案是:"+Answer.get(i)+"\n");
} else {
rightanswer.append( " 错误!正确答案是:"+Answer.get(i)+"\n");
fault++;
}
}
String toDate = simpleFormat.format(new Date());
try {
to = simpleFormat.parse(toDate).getTime();
} catch (ParseException ex) {
Logger.getLogger(sizeyunsuan.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println((float) ((to - from) / (1000 * 60 * 60)));
if (language == 1) {
resultprintf.setText("答对" + correct + "题,正确率:" + (float) correct / (correct + fault) * 100 + "%,花费时间:" + (int) ((to - from) / (1000)) + "秒");
} else if (language == 2) {
resultprintf.setText("答對" + correct + "題,正確率:" + (float) correct / (correct + fault) * 100 + "%,花費時間:" + (int) ((to - from) / (1000)) + "秒");
} else if (language == 3) {
resultprintf.setText("Answer correct " + correct + "questions, correct rate:" + (float) correct / (correct + fault) * 100 + "%,Spend time:" + (int) ((to - from) / (1000)) + "s");
}
for (int i = 0; i < Answer.size(); i++) {
Answer.remove(i);
anslist = null;
}
}//GEN-LAST:event_finishActionPerformed
d中文简体/中文繁体/英语三种语言的切换
private void language1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_language1ActionPerformed
// TODO add your handling code here:
language = 1;
title1.setText("四则运算生成器");
title2.setText("请输入产生四则算式的数量:");
title3.setText("请选择语言");
title4.setText("问题显示:");
title5.setText("输入答案:");
title6.setText("正确答案:");
start.setText("生成");
finish.setText("结束");
}//GEN-LAST:event_language1ActionPerformed
private void language2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_language2ActionPerformed
// TODO add your handling code here:
language = 2;
title1.setText("四則運算生成器");
title2.setText("請輸入產生四則算式的數量:");
title3.setText("請選擇語言");
title4.setText("問題顯示:");
title5.setText("輸入答案:");
title6.setText("正確答案:");
start.setText("生成");
finish.setText("結束");
}//GEN-LAST:event_language2ActionPerformed
private void language3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_language3ActionPerformed
// TODO add your handling code here:
language = 3;
title1.setText("Arithmetic");
title2.setText("enter number:");
title3.setText("language");
title4.setText("problem display:");
title5.setText("Enter answer:");
title6.setText("proofreader:");
start.setText("enter");
finish.setText("end");
}//GEN-LAST:event_language3ActionPerformed
e测试运行
简体中文:

繁体中文

英文

结对照片展示:

psp:
|
PSP2.1 |
Personal Software Process Stages |
Estimated time |
actual time |
|
Planning |
计划 |
15min |
20min |
|
· Estimate |
估计这个任务需要多少时间 |
10h |
12h |
|
Development |
开发 |
4h |
3h |
|
· Analysis |
需求分析 (包括学习新技术) |
5min |
3min |
|
· Design Spec |
生成设计文档 |
10min |
10min |
|
· Design5 R20eview |
设计复审 |
5min |
5min |
|
· Coding Standard |
代码规范 |
30min |
40min |
|
· Design |
具体设计 |
2h |
2h |
|
· Coding |
具体编码 |
3h |
4h |
|
· Code Review |
代码复审 |
20min |
30min |
|
· Test |
测试(自我测试,修改代码,提交修改) |
5min |
10min |
|
Reporting |
报告 |
10min |
10min |
|
· |
测试报告。 |
- |
- |
|
· |
计算工作量 |
5min |
5min |
|
· |
并提出过程改进计划 |
5min |
6min |
码市链接:https://coding.net/u/hjyaaa/p/zuoye2/git/blob/master/sizeyunsuan.java
小结:
1、这次结对编程实验是我和黄美海同学一起完成,首先我们一起讨论了总体的需求以及该如何设计实现,然后一致决定采用我上次的实验为基础来实现四则运算的GUI界面,黄美海同学负责代码的复审以及提出我的不足;
2、以前自己编程事总会有小小的不起眼的小毛病,这次结对编程是两个人一起做,在队友的提醒下,做起实验来格外顺手。但是要在上次实验的基础上增加两个功能并用图形界面实现,着实有点吃力,还好查了资料,顺利解决了。
汉堡包式评价:
- 先来一片面包:我们两人达成结对编程的共识,采用JAVA和GUI实现
- 再把肉放上:这次编程过程中,我负责主体编程,但是期间遇到了诸多问题和不足,我们经过讨论、查资料就都顺利解决。
- 然后再来一片面包: 两人编程中有领航员和驾驶员关系时确实能使工作更加顺利,这次编程让我们对对方的编程实力有了更深的了解,也发现了自己一些编程习惯不是特别好。
结对编程1---四则运算---GUI的更多相关文章
- 结对编程1——四则运算-GUI
码市链接:https://coding.net/u/hmhhh/p/hmh-homework/git/tree/master/ 201421123003 黄建英 201421123004 黄美海 题目 ...
- 结对编程作业——四则运算GUI程序
毛忠庆 201421122088 赵嘉楠 201421122065 源代码存放位置:https://gitee.com/ouwen0819/SiZeYunSuan.git 题目描述 使用 -n 参数控 ...
- 结对编程1.四则运算GUI版
201421123022 王若凡 201421123026 欧阳勇 coding详细代码 a.需求分析: 这个程序做成GUI(可以是Windows PC 上的,也可以是Mac.Linu ...
- 结对编程项目——四则运算vs版
结对编程项目--四则运算vs版 1)小伙伴信息: 学号:130201238 赵莹 博客地址:点我进入 小伙伴的博客 2)实现的功能: 实现带有用户界面的四则运算:将原只能在 ...
- 20175324王陈峤宇 2018-2019-2《Java程序设计》结对编程项目-四则运算 第一周 阶段性总结
20175324王陈峤宇 2018-2019-2<Java程序设计>结对编程项目-四则运算 第一周 阶段性总结 需求分析 这次的结对作业是要求我们利用栈来设计一个计算器. 自动生成四则运算 ...
- 20175229许钰玮 2018-2019-2《Java程序设计》结对编程项目-四则运算 第一周 阶段性总结
20175229许钰玮 2018-2019-2<Java程序设计>结对编程项目-四则运算 第一周 阶段性总结 需求分析 自动生成四则运算题目(加.减.乘.除). 既可以用前缀算法(波兰算法 ...
- 20175311胡济栋 2018-2019-2《Java程序设计》结对编程项目-四则运算 第二周 阶段性总结
20175311胡济栋 2018-2019-2<Java程序设计>结对编程项目-四则运算 第二周 阶段性总结 需求分析 这是利用栈来设计一个计算器的第二阶段总结. 自动生成四则运算的题目( ...
- 20165223 结对编程之四则运算week2-整体总结
目录 一.结对对象 二.需求分析 三.设计思路 四.核心代码 五.功能截图 六.结对感受 一.结对对象 担任角色(本周交换角色,流动学习) 驾驶员(Driver):20165218 赵冰雨(是控制键盘 ...
- 20165223 结对编程之四则运算week1-阶段性总结
目录 一.结对对象 二.需求分析 三.设计思路 四.功能截图 五.结对感受 一.结对对象 担任角色 驾驶员(Driver):20165223 蔡霓(是控制键盘输入的人) 领航员(Navigator): ...
- 2017-2018-2 1723 『Java程序设计』课程 结对编程练习-四则运算-最后阶段
2017-2018-2 1723 『Java程序设计』课程 结对编程练习-四则运算-最后阶段 最后的一周,时间越来越紧张,因为之前的拖沓和一些事情的耽误,导致了如今的紧张,这一周应该是我们小组效率最高 ...
随机推荐
- css小随笔
一.什么是CSS W3C标准中,倡导有3:其一为内容与表现分离,其二为内容与行为分离,其三为内容结构的语义化.其倡导中第一条的"表现"指的便可以说是CSS.CSS全称Cascadi ...
- mysql 报错 session halted的解决办法,实际工作中的结论。
写后台程序,发现执行到sql语句时就报错session halted,如下图: 也上网搜过蛮多方法,都不能解决我的问题.后来自己发现了症结所在,其实很简单:执行insert的语句没有包含not nul ...
- chrome地址栏命令
Chrome作为一个前端开发的标准浏览器,用来体验和测试日新月异的新特性,自然是没话说. 有些新特性是需要特意开启设置的,有很多浏览器的内置功能也是要通过命令来开启或者使用的. Chrome 有很多的 ...
- Linux的五种I/O模式
1)阻塞I/O(blocking I/O)2)非阻塞I/O (nonblocking I/O)3) I/O复用(select 和poll) (I/O multiplexing)4)信号驱动I/O (s ...
- [js高手之路]使用原型对象(prototype)需要注意的地方
我们先来一个简单的构造函数+原型对象的小程序 function CreateObj( uName, uAge ) { this.userName = uName; this.userAge = uAg ...
- 【Ubuntu 16】源码包安装Apache Httpd
源码包安装适合初学者使用. 背景信息 APR (Apache Portable Runtime) Apache可移植运行的任务(APR)项目是创建和维护软件库,为底层平台的具体实现提供了一个可预见的和 ...
- 【Centos7】5分钟理解防火墙firewalld
Centos7中默认将原来的防火墙iptables升级为了firewalld,firewalld跟iptables比起来至少有两大好处: 1.firewalld可以动态修改单条规则,而不需要像ipta ...
- Markdown简单教程
前言:大家好 我是阿飞~ 今天给大家推荐一个不错的东西 MarkDown 今后的潮流就是用它来写readme文件 具体好处多多 就把它理解为可以快速设置样式的txt文档吧~ 标题 # 每一级标题通过# ...
- 七牛云数据存储Demo
利用七牛云的Python SDK实现文件上传.下载等操作. import os import requests import qiniu from qiniu import BucketManager ...
- Servlet使用简介
Servlet的使用基本包含三个步骤: 1.继承HttpServlet 或实现Servlet 接口 (根据源码分析最终都是对servlet接口的实现) 2.配置地址: 配置web.xml 或者用注解的 ...