结对编程作业——四则运算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 赵冰雨(是控制键盘 ...
随机推荐
- 什么是PostBack(译)
什么是PostBack(译) What is a postback? 下面的内容是针对ASP.NET新手的 PostBack什么时候被引发? PostBack由客户端浏览器引发.通常是用户操作(点击按 ...
- java 的几种引用
从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期.这四种级别由高到低依次为:强引用.软引用.弱引用和虚引用. 1.强引用 本章前文介绍的引用实际上都是强引用, ...
- Python机器学习 (Python Machine Learning 中文版 PDF)
Python机器学习介绍(Python Machine Learning 中文版) 机器学习,如今最令人振奋的计算机领域之一.看看那些大公司,Google.Facebook.Apple.Amazon早 ...
- Keras官方中文文档:常见问题与解答
所属分类:Keras Keras FAQ:常见问题 如何引用Keras? 如何使Keras调用GPU? 如何在多张GPU卡上使用Keras "batch", "epoch ...
- Luogu1121:环状最大两段子段和
题面 传送门 Sol 两种情况 第一种就是类似\(***000***000***(0表示选)\),这个可以DP 设\(h[0/1/2/3][i]\)表示到第\(i\)位的状态: \(0\):表示还没选 ...
- Xampp相关命令
http://www.upwqy.com/details/5.html 1 启动关闭 需要切换目录: # cd /opt/lampp/ 启动 XAMPP # ./lampp start 停止 XAMP ...
- checkBox半选中状态
checkbox 可以半选中,这个特性,很多浏览器都支持 // 用 input.indeterminate 这个属性来获取或者设置半选中状态,必须要用 js 添加属性,才有效果. input.inde ...
- 'net’ 不是内部命令或外部命令,也不是可运行的程序或批处理文件
我的电脑-->属性-->高级-->环境变量 path的变量值新加: %SystemRoot%\system32 修改完成后,需要重新打开cmd命令行,否则不会生效的.
- OOP面向对象程序设计
1.对象:程序中描述现实中一个物体的属性和功能的结构 面向对象的程序设计,即为定义相应对象的属性,实现相应的功能.一个对象专门代表现实中的一个物体. *封装事物的属性和功能的结构. 例如 我们的手机: ...
- Python使用Scrapy框架爬取数据存入CSV文件(Python爬虫实战4)
1. Scrapy框架 Scrapy是python下实现爬虫功能的框架,能够将数据解析.数据处理.数据存储合为一体功能的爬虫框架. 2. Scrapy安装 1. 安装依赖包 yum install g ...