结对编程作业——四则运算GUI程序
毛忠庆 201421122088
赵嘉楠 201421122065
源代码存放位置:https://gitee.com/ouwen0819/SiZeYunSuan.git
题目描述
- 使用 -n 参数控制生成题目的个数
- 使用 -r 参数控制题目中数值(自然数、真分数和真分数分母)的范围
- 生成的题目中如果存在形如e1 ÷ e2的子表达式,那么其结果应是真分数。
- 每道题目中出现的运算符个数不超过3个。
- 程序一次运行生成的题目不能重复,即任何两道题目不能通过有限次交换+和×左右的算术表达式变换为同一道题目。例如,23 + 45 = 和45 + 23 = 是重复的题目,6 × 8 = 和8 × 6 = 也是重复的题目。3+(2+1)和1+2+3这两个题目是重复的,由于+是左结合的,1+2+3等价于(1+2)+3,也就是3+(1+2),也就是3+(2+1)。但是1+2+3和3+2+1是不重复的两道题,因为1+2+3等价于(1+2)+3,而3+2+1等价于(3+2)+1,它们之间不能通过有限次交换变成同一个题目。
- 在生成题目的同时,计算出所有题目的答案,并存入执行程序的当前目录下的Answers.txt文件。
- 程序应能支持一万道题目的生成。
- 程序支持对给定的题目文件和答案文件,判定答案中的对错并进行数量统计,并会输出所有题目中重复的题目。
- 记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算(此功能可以保留数据,便于用户对于自己上一次的计算结果进行了解)
- 有计时功能,能显示用户开始答题后的消耗时间(增加用户答题的紧张感)
分析
通过上述对题目的简要描述,可以得出此次作业要求增加了两个新的功能
l 记录用户的对错总数,程序再次启动时可以保留数据
l 计时功能通风来显示用户开始答题后消耗的时间
实现步骤
l 根据用户输入的数值,其中包括生成题目的个数n和题目数值的范围m,生成n道每个操作数都不大于m的数学题,并显示输入成功,开始答题
l 获取用户输入的答案
l 判断用户的答案是否正确,如错误则显示正确答案,如正确则记录正确数值+1
l 在用户答完n道题的时候对话框弹出,显示答对多少题并显示共答对多少题
l 答题过程中题目上方有精确到千分之秒的秒表计时
下面是针对这次作业增加的两个新功能的设计与分析,以及其相关类的思维导图
- 记录用户的对错总数,程序退出再启动的时候,能把以前的对错数据保存并在此基础上增量计算
先建一个WriteReader类用来读取和写入用户使用四则运算器的计算结果,其中包含用户计算结果正确的数量,具体过程如下:
假设用户设定的题目数量为x,则在计算过程中,用户每答对一道题,rightNum变量+ 1当用户答完全部x道题的时候,假设正确的数量为n,则rightNum=rightNum+n;在最终显示给用户的界面上,程序会调用WriteReader.reader()方法读取上一次用户的答题正确信息,并且结合本次答对题的数量,给出用户新的答题正确信息,比如其上次共答对m道题,则此次显示用户共答对m+n道题。
在用户答完题并且退出程序的时候,程序则调用Write()方法将本次答题正确信息写入,在下一次程序启动的时候调用数据
思维导图如下
- 有计时功能,能显示用户开始答题后的消耗时间
将计时器写入计算界面Answer类中,在用户已经输入题目数目和答题数值范围后,点击确认答题的同时计时器开始运行,在用户点击提交的时候计时器会显示其每道题耗时多久。
核心代码展示
- 1. WriteReader类
public class WriteReader {
public static void writer(int num) {
try {
File file = new File("rightnum.txt");
FileWriter fw = new FileWriter(file, true);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(num + "\t");
bw.write("\n");
bw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static String reader() {
File f = new File("rightnum.txt");
String line, lastsecline, lastline = null;
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(f));
line = br.readLine();
if (line == null) {
return String.valueOf(0);
}
lastsecline = "";
lastline = "";
while (line != null) {
lastsecline = lastline;
lastline = line.trim();
line = br.readLine();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return lastline;
}
}
- 2. 计时功能代码
private class CountingThread extends Thread {
public boolean stopped = true;
private CountingThread() {
setDaemon(true);
}
@Override
public void run() {
while (true) {
if (!stopped) {
long elapsed = System.currentTimeMillis() - programStart;
label.setText(format(elapsed));
}
try {
sleep(1); // 1毫秒更新一次显示
} catch (InterruptedException e) {
e.printStackTrace();
System.exit(1);
}
}
}
// 将毫秒数格式化
private String format(long elapsed) {
int hour, minute, second, milli;
milli = (int) (elapsed % 1000);
elapsed = elapsed / 1000;
second = (int) (elapsed % 60);
elapsed = elapsed / 60;
minute = (int) (elapsed % 60);
elapsed = elapsed / 60;
hour = (int) (elapsed % 60);
return String.format("%02d:%02d:%02d.%03d", hour, minute, second,
milli);
}
程序运行截图
小结感受
- 1. 结对编程真的能带来1+1>2的效果吗?
对我们来说,结对编程确实有很大的帮助,因为这样可以弥补双方的不足,同时可以增强双方拿手的环节,比如说毛忠庆在代码编程方面比我强很多,所以我们这次就以他的实验一为基础进行了修改与改良,而我作为一个女孩子,可能心思比男孩子更细腻一些,所以容易看出代码中的不足与bug,这次实验中毛忠庆做了主要的工作,我就是在一旁辅助他完成作业。
- 2. 采用汉堡包的方法指出对方的优点和不足
毛忠庆:嘉楠同学优点是比较虚心,怎么说都不生气,让干嘛干嘛,而且在文档编辑方面确实比我强很多,还有总结功能需求也很到位,缺点就是专业知识有点欠缺,很多功能有想法但是自己实践起来还不够能力,希望她以后可以更努力地学习专业知识
赵嘉楠:通过和毛忠庆同学的这次合作后,我发现他比以前有了很大的进步,他的优点就是很虚心,对于我提出的问题可以虚心解答并且很有耐心,而且他的专业知识比我强,所以我实现不了的功能他都可以实现,再有一点是他这个人不耻下问,遇到自己也不懂的问题会找别人问,在这点上我很不如他。我希望忠庆同学以后可以在和合作的时候多和自己的伙伴进行交流和沟通,这样更有进与工作双方的进展。
时间预估PSP:
PSP2.1 |
Personal Software Process Stages |
Time Senior Student(min) |
Time(min) |
Planning |
计划 |
300 |
220 |
· Estimate |
估计这个任务需要多少时间 |
3000 |
2600 |
Development |
开发 |
5500 |
6000 |
· Analysis |
需求分析 (包括学习新技术) |
110 |
100 |
· Design Spec |
生成设计文档 |
60 |
60 |
· Design Review |
设计复审 |
60 |
60 |
· Coding Standard |
代码规范 |
160 |
200 |
· Design |
具体设计 |
180 |
120 |
· Coding |
具体编码 |
240 |
180 |
· Code Review |
代码复审 |
240 |
210 |
· Test |
测试(自我测试,修改代码,提交修改) |
240 |
360 |
Reporting |
报告 |
120 |
120 |
· |
测试报告 |
180 |
120 |
· |
计算工作量 |
20 |
10 |
· |
并提出过程改进计划 |
60 |
60 |
结对编程作业——四则运算GUI程序的更多相关文章
- 结对编程1——四则运算-GUI
码市链接:https://coding.net/u/hmhhh/p/hmh-homework/git/tree/master/ 201421123003 黄建英 201421123004 黄美海 题目 ...
- 结对编程1.四则运算GUI版
201421123022 王若凡 201421123026 欧阳勇 coding详细代码 a.需求分析: 这个程序做成GUI(可以是Windows PC 上的,也可以是Mac.Linu ...
- 20175324王陈峤宇 2018-2019-2《Java程序设计》结对编程项目-四则运算 第一周 阶段性总结
20175324王陈峤宇 2018-2019-2<Java程序设计>结对编程项目-四则运算 第一周 阶段性总结 需求分析 这次的结对作业是要求我们利用栈来设计一个计算器. 自动生成四则运算 ...
- 20175311胡济栋 2018-2019-2《Java程序设计》结对编程项目-四则运算 第二周 阶段性总结
20175311胡济栋 2018-2019-2<Java程序设计>结对编程项目-四则运算 第二周 阶段性总结 需求分析 这是利用栈来设计一个计算器的第二阶段总结. 自动生成四则运算的题目( ...
- UI-12组结对编程作业总结
UI-12组结对编程作业总结 源码Github地址 https://github.com/tilmto/TILMTO/tree/master/Arithmetic 作业摘要 本次结对编程作业分为以下两 ...
- 【BUAA软工】结对编程作业
项目 内容 课程:2020春季软件工程课程博客作业(罗杰,任健) 博客园班级链接 作业:BUAA软件工程结对编程项目作业 作业要求 课程目标 学习大规模软件开发的技巧与方法,锻炼开发能力 作业目标 完 ...
- 结对编程项目——四则运算vs版
结对编程项目--四则运算vs版 1)小伙伴信息: 学号:130201238 赵莹 博客地址:点我进入 小伙伴的博客 2)实现的功能: 实现带有用户界面的四则运算:将原只能在 ...
- 11061160_11061151_Pair Project: Elevator Scheduler软件工程结对编程作业总结
软件工程结对编程作业总结 11061160 顾泽鹏 11061151 庞梦劼 一.关于结对编程 这次的软工任务既不是单打独斗的个人任务,也不是集思广益的团队项目,而是人数为两人的结对编程.两个人合 ...
- 20165223 结对编程之四则运算week2-整体总结
目录 一.结对对象 二.需求分析 三.设计思路 四.核心代码 五.功能截图 六.结对感受 一.结对对象 担任角色(本周交换角色,流动学习) 驾驶员(Driver):20165218 赵冰雨(是控制键盘 ...
随机推荐
- ajaxfileupload原理及用法,主要用于即想用ajax序列化传递参数,又必须上传文件
一,原理 AjaxFileUpload.js并不是一个很出名的插件,只是别人写好的放出来供大家用,原理都是创建隐藏的表单和iframe然后用JS去提交,获得返回值. 当初做了个异步上传的功能,选择它因 ...
- JavaScript的那些事儿
关于JavaScript的对象数据类型: Object 定义一个对象类型: 例如:var person=new Object(): 当然在建立对象以后我们可以为他添加属性, 如: <script ...
- (2)Deep Learning之线性单元和梯度下降
往期回顾 在上一篇文章中,我们已经学会了编写一个简单的感知器,并用它来实现一个线性分类器.你应该还记得用来训练感知器的『感知器规则』.然而,我们并没有关心这个规则是怎么得到的.本文通过介绍另外一种『感 ...
- 重磅消息-Service Fabric 正式开源
微软的Azure Service Fabric的官方博客在2017.3.24日发布了一篇博客 Service Fabric .NET SDK goes open source ,介绍了社区呼声最高的S ...
- Mac下redis的安装 以及配置支持PHP使用redis
1 下载最新redis https://redis.io/download 2 安装redis. 这部分在上面下载链接中 官网提供的有相关操作 如下: $ wget http://download ...
- 4.2 js没有块级作用域
JavaScript没有块级作用域.在其他语言上,比如C语言中,有花括号封闭的代码块都有自己的作用域,(如果用ECMAScript的话来讲,就是他们自己的执行环境),因而支持根据条件来定义变量.例如, ...
- css中的注意项,可能会帮助到大家哦!
CSS样式层叠表 1.link与@import的区别(5点) (1).link为XHTML的标签,可以引进CSS样式表,除了引进CSS文件还可以引进其他的文件如.js或.rss文件;@import为C ...
- LAMP基础
前言:上一篇博文,说到了URL.http的协议.事务以及私有https的实现.此次 一. 概念: LAMP: a:apache m:mariadb,mysql p:php,perl,python 二. ...
- The method queryForMap(String, Object...) from the type JdbcTemplate refers to the missing type DataAccessException
Add spring-tx jar of your spring version to your classpath.
- delphi GDI 图片压缩代码 据说是位图缩放保持原图视觉效果最好的算法
delphi 图片压缩代码 据说是位图缩放保持原图视觉效果最好的算法 若有更好的,请大神留言我也学习下,感谢! uses WinAPI.GDIPAPI, WinAPI.GDIPOBJ; var Bi ...