结对编程作业——四则运算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 赵冰雨(是控制键盘 ...
随机推荐
- MFC 中线程传递CString 是不安全的 转
MFC 中线程传递CString 是不安全的 在MFC中,向线程传递CString变量参数时,很容易犯一个错误,就是使用一个超出生存期的变量,在主函数中定义的CString变量是局部变量 ...
- ViewGroup事件分发机制解析
最近在看View的事件分发机制,感觉比复杂的地方就是ViewGrop的dispatchTouchEvent函数,便对照着源码研究了一下.故名思意这个函数起到的作用就是分发事件,在具体分析之前还要说明几 ...
- ssm框架之将数据库的数据导入导出为excel文件
在这里首先我要将自己遇到的各种问题,以及需求记录下来,做一个备忘,便于以后查看: 需求:主要实现两个功能,将oracle数据库里的数据导出为excel,同时需要将excel表格的数据导入到数据库 环境 ...
- 【BZOJ3529】数表(莫比乌斯反演,树状数组)
[BZOJ3529]数表(莫比乌斯反演,树状数组) 题解 首先不管\(A\)的范围的限制 要求的东西是 \[\sum_{i=1}^n\sum_{j=1}^m\sigma(gcd(i,j))\] 其中\ ...
- 【CJOJ1090】【洛谷1967】【NOIP2013】货车运输
题面 Description A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆 ...
- [BZOJ3275] Number (网络流)
Description 有N个正整数,需要从中选出一些数,使这些数的和最大. 若两个数a,b同时满足以下条件,则a,b不能同时被选 1:存在正整数C,使a*a+b*b=c*c 2:gcd(a,b)=1 ...
- eclipse 启动报内存溢出的问题out of memory!
这个问题困扰了我一个月,今天终于解决了,在网上尝试了好多方法都不行.启动的时候就报错,这里可能是jdk的内存太小了,需要加大jdk的内存. 加上这个就好了 -server -Xms512m -Xmx5 ...
- 3分钟anaconda安装Python框架Tensorflow,1行语句测试是否成功?
Anaconda是一个用于科学计算的ython发行版,支持 Linux, Mac, Windows系统,提供了包管理与环境管理的功能,可以很方便地解决多版本python并存.切换以及各种第三方包安装问 ...
- 号称了解mesos双层调度的你,先来回答下面这五个问题!
一提mesos,很多人知道双层调度,但是大多数理解都在表面,不然试一下下面五个问题. 问题一:如果有两个framework,一万个节点,按说应该平均分配给两个framework,怎么个分法?一人一台这 ...
- linux 添加ftp用户与登录配置详解
不同类Unix有一定区别 版本不同也有些区别 在linux主机上如何添加ftp用户 (一)修改配置文件 vi /etc/vsftpd/vsftpd.conf 在96行,97,98行 96 chroot ...