小学四则运算结对项目报告(GUI)
小学四则运算结对项目报告(GUI)
一.Coding.Net项目地址:
https://git.coding.net/wsshr/Calculation.git
二.PSP表格(完成前):
PSP |
任务内容 |
计划共完成需要的时间 |
Planning |
计划 |
一周 |
Estimate |
估计这个任务需要多少时间,并规划大致工作步骤 |
一周 |
Development |
开发 |
4天 |
Analysis |
需求分析 (包括学习新技术) |
3.5(h) |
Design Spec |
生成设计文档 |
2(h) |
Design Review |
设计复审 (和同事审核设计文档) |
1(h) |
Coding Standard |
代码规范 (为目前的开发制定合适的规范) |
1(h) |
Design |
具体设计 |
1h |
Coding |
具体编码 |
2天 |
Code Review |
代码复审 |
1(h) |
Test |
测试(自我测试,修改代码,提交修改) |
2(h) |
Reporting |
报告 |
2h |
Test Report |
测试报告 |
1.5h |
Size Measurement |
计算工作量 |
30min |
Postmortem & Process Improvement Plan |
事后总结, 并提出过程改进计划 |
30min |
三.结对编程对接口的设计:
Information Hiding:信息隐藏指在设计和确定模块时,使得一个模块内包含的特定信息(过程或数据),对于不需要这些信息的其他模块来说,是不可访问的。我们通过对函数封装,不可以改变函数内部封装。
Interface Design:接口设计原则,可以令面向对象的程序设计封装起来更加精简。模块化的程序中,每个模块(即每个类)只完成一个功能,然而有些时候我们需要许多“小”功能共同作用,完成一个大“功能”。这时候我们需要将所需的所有模块实例化,再取其中的方法,连续调用,过于冗杂。这个时候我们定义一个接口,将所需的方法封在里面,当需要完成“大功能”的时候,我们只需调用这个接口就可以了。当然,应该尽量减少通用接口,具体问题具体分析,多提供特定的接口给用户才更加人性化。我们项目没有用到。
loose coupling:松耦合高内聚。即模块之间尽可能独立,模块内部数据联系紧密。我们的设计:在开始写程序之前,将功能模块化,把要求实现的功能分析清楚,尽可能独立出各种功能。使可以完成这些功能的模块,并且不依赖于其它模块。
对于模块化设计,我们在关于界面生成,输入输出,生成题目,计算结果,优先级顺序和互换等方面也都是分开的,互相独立的。
四.模块接口的设计与实现过程:
我们的代码有以下类:
Calculate类:计算算式的结果。
Command类:生成gui界面,获取算式和得数,输出到界面。
Create类:通过随机的方法获取随机数和随机运算符。
mainExp类:创造算式。
Fileoutprint类:command类可调用它将内容输入到txt文件中。
Fileread类:读取文件内容,并且如果文件不存在就可以创建新文件。
以下是我做的一部分代码:
1. 检查用户的答案并计算正确题数:

1 public void checkAnswer() {
2 double result = 0;
3 double userInput = 0;
4 for (int i = 0; i < answer.size(); i++) {
5 if (tfUserAns.get(i).getText().trim().equals("")) {
6 userInput = 1;
7 result = 0;
8 } else {
9 userInput = Double.parseDouble(tfUserAns.get(i).getText().trim());
10 result = Double.parseDouble(answer.get(i).trim());
11 }
12 hint.get(i).setVisible(true);
13 // 回答正确的话:
14 if (result - userInput == 0) {
15 hint.get(i).setText("√");
16 rightNumber++;
17 } else {
18 // 回答错误的话:
19 wrongNumber++;
20 }
21 }
22 }

2. 出题的题条件判断,限制输入的条件:

1 private void addContToMenu(JPanel menuPanel, final JScrollPane scrollPane, final JPanel resultPanel) {
2 JButton but1 = new JButton("提交");
3 JPanel tfPanel1 = new JPanel();
4 final JTextField tf1 = new JTextField(" ");
5 tfPanel1.setLayout(new BorderLayout(5, 0));
6 tfPanel1.add(new JLabel("请输入题目数量:"), BorderLayout.WEST);
7 tfPanel1.add(tf1, BorderLayout.CENTER);
8
9 JPanel tfPanel2 = new JPanel();
10 final JTextField tf2 = new JTextField(" ");
11 tfPanel2.setLayout(new BorderLayout(5, 0));
12 tfPanel2.add(new JLabel("请输入操作数的最大值:"), BorderLayout.WEST);
13 tfPanel2.add(tf2, BorderLayout.CENTER);
14
15 JPanel tfPanel3 = new JPanel();
16 final JTextField tf3 = new JTextField(" ");
17 tfPanel3.setLayout(new BorderLayout(5, 0));
18 tfPanel3.add(new JLabel("是否有乘除(1为是,0为否):"), BorderLayout.WEST);
19 tfPanel3.add(tf3, BorderLayout.CENTER);

五.模块接口部分的性能改进:
我们用JProfiler做的效能分析:
匆匆忙忙地完成作业,未能有充裕时间优化性能,深表遗憾~~
六.模块部分单元测试展示:
将程序运行后得到下面的代码覆盖率图
代码的指令覆盖率达到了97%,但是因为我用了很多if语句,所以分支覆盖率降到了81%。
七.界面模块的详细设计过程:
// 设置布局管理器
setLayout(new BorderLayout(15, 15)); JPanel menuPanel = new JPanel();
JScrollPane scrollPane = new JScrollPane();
JPanel resultPanel = new JPanel(); jlTime.setForeground(Color.blue); timer = new Timer(1000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
Date now2 = new Date(now.getTime() + 1000);
now = now2;
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
jlTime.setText("耗时:" + formatter.format(now));
}
}); resultPanel.setVisible(false);
addContToMenu(menuPanel, scrollPane, resultPanel);
addContToResult(resultPanel); this.add(menuPanel, BorderLayout.NORTH);
this.add(scrollPane, BorderLayout.CENTER);
this.add(resultPanel, BorderLayout.SOUTH); }
将题目数量和其他判断条件加入菜单面板。
// 将控件加入菜单面板
private void addContToMenu(JPanel menuPanel, final JScrollPane scrollPane, final JPanel resultPanel) {
JButton but1 = new JButton("提交");
JPanel tfPanel1 = new JPanel();
final JTextField tf1 = new JTextField(" ");
tfPanel1.setLayout(new BorderLayout(5, 0));
tfPanel1.add(new JLabel("请输入题目数量:"), BorderLayout.WEST);
tfPanel1.add(tf1, BorderLayout.CENTER); JPanel tfPanel2 = new JPanel();
final JTextField tf2 = new JTextField(" ");
tfPanel2.setLayout(new BorderLayout(5, 0));
tfPanel2.add(new JLabel("请输入操作数的最大值:"), BorderLayout.WEST);
tfPanel2.add(tf2, BorderLayout.CENTER); JPanel tfPanel3 = new JPanel();
final JTextField tf3 = new JTextField(" ");
tfPanel3.setLayout(new BorderLayout(5, 0));
tfPanel3.add(new JLabel("是否有乘除(1为是,0为否):"), BorderLayout.WEST);
tfPanel3.add(tf3, BorderLayout.CENTER);
设置监听按钮,在按提交键之后将题目输入到界面并开始计时。
// 设置按钮监听,按钮主要做这几件事:1.开始计时 2.调用mainExp类生成题目,3.结果面板设为可见,4.数据初始化
but1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
clearAll();
now.setHours(0);
now.setMinutes(0);
now.setSeconds(0);
timer.start();
// 获得生成的题目list,赋给question的list中
mainExp createExercise = new mainExp();
createExercise.createEquation(Integer.parseInt(tf1.getText().trim()),
Integer.parseInt(tf2.getText().trim()),Integer.parseInt(tf3.getText().trim()));
Command.this.setQuestion(createExercise.getQuestion());
Command.this.setAnswer(createExercise.getAnswer());
Command.this.addContToMain(scrollPane);
resultPanel.setVisible(true);
resultPanel.validate(); }
});
menuPanel.add(tfPanel1);
menuPanel.add(tfPanel2);
menuPanel.add(tfPanel3);
menuPanel.add(but1);
menuPanel.add(jlTime); }
八.界面模块与计算模块的对接:
通过生成gui界面,用户可以根据自己的要求输入想要的条件,然后后台接受到数据,生成算式并传送到界面,以下是图片展示:
九.描述结对的过程及其图片展示:
1.结对过程
我们的结对主要分为两个阶段,前一阶段主要是对主要框架的构思和对模块,界面等等的思考与设计阶段,并且参考与学习必要运用的那些知识,以及对项目作业要求的仔细阅读与审查,讨论哪些方面可以被实现,哪些方面可以实现的更好。第二阶段主要是分工负责各个部分的代码主要实现,对于命名规则等等,一开始没有统一,造成了麻烦,后来在沟通之下才最终意见一致,由于做的比较晚,比较匆忙,有一些本来设计中的没有实现,有些遗憾,细节处理的并不是很细致,但对我们来说已经殊为不易了。
2.结对照片展示
十.说明结对编程的优点和缺点:
1.结对编程的优缺点
优点:是一次很好的团队合作的过程,从各个方面锻炼了两个人的合作以及两人的沟通交流能力。两个人之间可以相互交流学习,并且互相启发灵感,从而互相取长补短。在后期阶段共同完成项目时,充分地体现了1+1大于2的作用,顺利的完成任务。
缺点:前期磕磕绊绊,互相不熟悉,因此犯错频繁,极大地拖延了项目完成的时间。两个人初时沟通可能存在一些问题,对对方的想法理解的不好,导致了自己代码方面的一些错误,之后花了不少时间去纠正。
2.个人优点
郑书鸿 优点:(1)耐心,对于问题出现是先去解决,而不是拖延。
(2)比较专注,能够静下心来解决一些使人烦躁的问题。
(3)做自己力所能及的事情,比较有责任心。
缺点:编程能力不高,对模块化和界面设计等内容不怎么了解,往往花费大量时间在查看代码错误上。
师浩然 优点:(1)对java学习能力强,对于不会的内容看过几遍就掌握了。
(2)编程熟练度较高,对java知识理解深,能够实现项目主要要求。
(3)看问题比较透彻,能抓住项目要求中的一些关键要点并且对其有较强的执行力。
缺点:代码规范方面还存在一些问题,不够规范。
十一.PSP图(完成后):
PSP |
任务内容 |
计划共完成需要的时间 |
实际完成需要的时间 |
Planning |
计划 |
一周 |
一周 |
Estimate |
估计这个任务需要多少时间,并规划大致工作步骤 |
一周 |
一周 |
Development |
开发 |
4天 |
4天 |
Analysis |
需求分析 (包括学习新技术) |
3.5(h) |
3(h) |
Design Spec |
生成设计文档 |
2(h) |
2(h) |
Design Review |
设计复审 (和同事审核设计文档) |
1(h) |
1(h) |
Coding Standard |
代码规范 (为目前的开发制定合适的规范) |
1(h) |
40min |
Design |
具体设计 |
1h |
35min |
Coding |
具体编码 |
2天 |
2天 |
Code Review |
代码复审 |
1(h) |
1(h) |
Test |
测试(自我测试,修改代码,提交修改) |
2(h) |
2(h) |
Reporting |
报告 |
2h |
1.5h |
Test Report |
测试报告 |
1.5h |
1h |
Size Measurement |
计算工作量 |
30min |
30min |
Postmortem & Process Improvement Plan |
事后总结, 并提出过程改进计划 |
30min |
20min |
小学四则运算结对项目报告(GUI)的更多相关文章
- 小学四则运算结对项目报告【GUI】
写在前面 这次的结对项目我做了很长时间,感触也很多.在这次项目中我使用了Java GUI作为和用户的交互方式,但是在上Java课的时候我对GUI和事件驱动这里并没有学的多好,可能是当时对编程还没有什么 ...
- 四则运算结对项目之GUI
本次结对编程让我学到了许多许多知识,受益匪浅!在此之前,我没想过我能做出一个双击运行的小程序. 感谢我的队友与我同心协力,感谢室友宇欣告诉我操作符为“最多多少”而不是“多少”并教我使用效能分析工具,感 ...
- 结对项目作业GUI
一.Coding.Net项目地址:https://git.coding.net/zhengsh589/CoupleProject.git 二.PSP表格(完成前): PSP 任务内容 计划共完成需要的 ...
- 四则运算结对编程(GUI)
四则运算GUI coding地址:https://git.dev.tencent.com/qyj814/GUI.git 结对伙伴:李梦宇 一.题目要求 定制出题要求.每次出题时用户都可以在界面上定制如 ...
- 201871030108-冯永萍 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
实验三 软件工程结对项目 项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs ...
- 201871030125-王芬 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
实验三 软件工程结对项目 项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs ...
- 201871030117-李亚楠 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 课程班级 这个作业要求链接 作业要求 我的课程学习目标 1.体验软件项目开发中的两个人合作.练习结对编程:2.掌握Github协作开发程序的操作方法:3.熟悉编程语言的综 ...
- 201871010203-陈鹏昱 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 学习软件工程的理论和知识,掌握软件开发流程,增强实践能力 这个作业在哪些方面帮助我实现学习目标 体验软件项目开发中 ...
- 201873030133-杨子豪 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 班级博客链接 这个作业要求链接 作业要求链接 我的课程学习目标 了解软件工程的作用与意义,将软件工程与过去所学相结合 这个作业在哪些方面帮助我实现学习目标 体验了结对式的 ...
随机推荐
- 五、Delphi10.3通过REST单元使类和JSON数据互相转换
一.我们定义一个简单的类 TPeople = class private FName: string; FScore: Integer; FAge: TDateTime; public propert ...
- redis缓存数据库入门教程
入门redis教程 前言: 应公司需求,最近学习了一下redis数据库的一些简单入门的教程,整理出来分享给大家,喜欢的可以关注和点赞哦~ 如文章中有不足之处求指正,谢谢 目录 ·什么是redis?为什 ...
- 快速安装Docker
Docker需要操作系统的内核3.0以上,如低于3.0,需先升级内核,才能安装docker: 1.查看内核版本号 [root@daojia ~]# uname -r 3.10.0-693.el7.x8 ...
- 20155238 2016-2017-2 《JAVA程序设计》第七周学习总结
教材学习内容总结 第十二章 认识Lambda语法 在只有Lambda表达式的情况下,参数的类型必须写出来. 匿名类有相应的应用场合.Lambda表达式只关心方法命名上的参数与返回定义,忽略方法名称. ...
- PosgreSQL 9.0 High Performance中文版瑕疵
磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面: PostgreSQL杂记页 回到顶级页面:PostgreSQL索引页 发表此文不是为了吐槽,而是为了防止更多的受害者出现啊,拿到书后 ...
- 【CQOI2014】数三角形
题面 题解 考虑使用总数减去不合法的数量 首先将\(n, m\)都加上\(1\),将网格变成坐标系 总数即为\(\large\binom{n\times m}{3}\) 不合法的有三种情况: 三个点在 ...
- idea web项目debug模式实时更新按钮不生效原因
必须两个都开启才能生效,单按按钮不能生效,但是有时候自动更新不生效的时候按按钮后可以生效, 如果前端目录或后端内容实在不更新,就删掉out目录和target目录,重新启动服务器即可
- [CF1027F]Session in BSU[最小基环树森林]
题意 有 \(n\) 门课程,每门课程可以选择在 \(a_i\) 或者 \(b_i\) 天参加考试,每天最多考一门,问最早什么时候考完所有课程. \(n\leq 10^6\). 分析 类似 [BZOJ ...
- Maven+spring+springMVC+mybatis+Junit+Log4j配置个人总结
首先粘贴上项目引用地址:http://doc.okbase.net/fengshizty/archive/126397.html 这里对创建步骤不做过多解释,只是针对案例创建demo的一些 ...
- vs2012 与 win7 不兼容的问题
Visual Studio 2012 与此版本的 Windows 不兼容 突然出现的,如下图: 这个是网上找的图,我的没来得及截图就修复了,基本一致,只是我的是win7 64位系统,所以安装位置那里是 ...