结对编程作业——四则运算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 赵冰雨(是控制键盘 ...
随机推荐
- python爬取youtube视频 多线程 非中文自动翻译
声明:我写的所有文章都是发在博客园的,我看到其他复制粘贴过去的 连个出处也不写,直接打上自己的水印...真是没的说了. 前言:前段时间搞了一些爬视频的项目,代码都写好了,这里写文章那就在来重新分析一遍 ...
- json 的循环输出
json不能用for-of循环,会报错 可以用for-in循环: var json = {'a':'apple','b':'banana','c':'orange','d':'pear'}; for( ...
- 【CJOJ1372】【洛谷2730】【USACO 3.2.5】魔板
题面 Description 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 我们知道魔板的每一个方格都有一种颜色 ...
- [SCOI2007]降雨量
ST表,再大力讨论一下(因为lower_bound和upper_bound,WA了一次) # include <bits/stdc++.h> # define RG register # ...
- PowerShell 发布farm solution
SharePoint PowerShell在SharePoint Product列表里边,然后以管理员权限启动. 1. 添加Solution 到 SharePoint Farm. Add-SPSolu ...
- NancyFX 第十章 身份验证
如果你在采用某个Web框架来构建一个公共使用的Web服务,你可能需要对谁能访问上述的服务进行某种方式的控制. 它可能很简单,只需要在调用API时在HTTP头信息中加入一个验证字段,或者需要构建一个完善 ...
- (python走过的坑)OpenCV中错误opencv-3.3.1\modules\highgui\src\window.cpp:339: error: (-215) size.width>0 && size.height>0 in function cv::imshow
第一次在python中使用OpenCV(cv2),运行时报错opencv-3.3.1\modules\highgui\src\window.cpp:339: error: (-215) size.wi ...
- Python解析Yahoo的XML格式的天气预报数据
以下是Yahoo天气预报接口xml格式数据: <rss xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" xm ...
- eclipse热部署web项目
一.选中JavaEE视图 因为在普通的Java视图下,窗口下方没有server选项卡 二.双击Tomcat 注意:可能很多人当然包括我一开始的时候,都是喜欢右键Tomcat然后Add and remo ...
- MSIL实用指南-创建字段
本篇讲解怎么创建字段,主要是在修饰符的创建上. 创建字段的方法是TypeBuilder.DefineField,传入字段名称.字段类型.字段修饰符等参数,返回一个FieldBuilder对象.先看这一 ...