结对编程作业——四则运算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 赵冰雨(是控制键盘 ...
随机推荐
- PC软件与PLC串口通信 奇偶检验问题
PC软件与PLC进行串口通信 波特率:19200 校验位:偶检验 数据位:8 停止位:1 现象 一,PC软件向PLC可以发送1,2,4,5,7,8,但是3,6,9发送出去后,PLC无法收到 二,使 ...
- java——基础语法
java基础语法 1.关键字:java赋予特殊含义的单词. 2.标识符:程序中开发人员自定义的名词,例如:类名,函数名,变量名(注意事项:①不能以阿拉伯数字开头②不能采用关键字). 3.常量:固定的数 ...
- 2.3.2 InnoDB内存
前面介绍了一些InnoDB的体系架构(http://www.cnblogs.com/tanwt/p/8530987.html) 接下来介绍一下InnoDB 的内存 1.缓冲池 首先我们需要了解的是In ...
- 【BZOJ3675】序列分割(斜率优化,动态规划)
[BZOJ3675]序列分割(斜率优化,动态规划) 题面 Description 小H最近迷上了一个分隔序列的游戏.在这个游戏里,小H需要将一个长度为n的非负整数序列分割成k+1个非空的子序列.为了得 ...
- 论文笔记(4):Fully Convolutional Networks for Semantic Segmentation
一.FCN中的CNN 首先回顾CNN测试图片类别的过程,如下图: 主要由卷积,pool与全连接构成,这里把卷积与pool都看作图中绿色的convolution,全连接为图中蓝色的fully conne ...
- eclipse 精确查询
---恢复内容开始--- ctrl+H(一般都是这个,如果无效看你的自定义快捷键) 输入\b 查询的字符串 \b 后面的正则表达式选框必须选
- iframe结构的项目,登录页面嵌套
参考:http://www.cnblogs.com/qixin622/p/6548076.html 在网页编程时,我们经常需要处理,当session过期时,我们要跳到登陆页面让用户登陆,由于我们可能用 ...
- 微信小程序腾讯云php后台解决方案
微信小程序腾讯云php后台解决方案 微信小程序前段需要添加必要的文件以配合后端 (1)wafer2-client-sdk sdk提供了几种接口包括登陆,获取用户openid,图片上传等 (2)conf ...
- 一次SSLPeerUnverifiedException,SSLHandshakeException问题的分析
一次SSLPeerUnverifiedException,SSLHandshakeException的问题分析 最近工作遇到一个https链接,通过pc(浏览器,curl)能正常访问,ios能正常 ...
- 如何写出如散文般的代码――《代码整洁之道》读书笔记(Ch1-Ch3)
不知道有多少人像我一样,程序出现问题时添加函数添加变量解决,变量名用a,b,c等"简单"的字母来表示.不知道有多少人像我一样,看完自己的代码,心里暗骂"什么玩意儿!&qu ...