小学四则运算结对项目报告(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 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 班级博客链接 这个作业要求链接 作业要求链接 我的课程学习目标 了解软件工程的作用与意义,将软件工程与过去所学相结合 这个作业在哪些方面帮助我实现学习目标 体验了结对式的 ...
随机推荐
- WPF RichTextBox自动调整高度
原文:WPF RichTextBox自动调整高度 大概两年前的这个时间段,当时做项目遇到了一个问题:环境VS2005.WinForm,需要RichTextBox根据内容自动调整高度.当时用了各种方法都 ...
- JavaEE笔记(一)
Hibernate Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自 ...
- JAVA Swing开发单机版项目
一.序 最近公司做的项目里出现了一个新的需求,项目大部分是为金融业定制开发的数据集成平台,包括数据的采集,处理,使用. 数据的采集方式不固定,有机构化数据,有非结构话数据,还有附件等其它文件形式. 对 ...
- django-groundwork
我的环境是windows7 + python34 + django1.8 下面两篇文章提到了django的scaffold,感觉是一个挺不错的功能: Django实战(3):Django也可以有sca ...
- 3832: [Poi2014]Rally
3832: [Poi2014]Rally 链接 分析: 首先可以考虑删除掉一个点后,计算最长路. 设$f[i]$表示从起点到i的最长路,$g[i]$表示从i出发到终点的最长路.那么经过一条边的最长路就 ...
- ubuntu下su: Authentication failure的解决办法(su和su - root的区别)
参考:ubuntu下su: Authentication failure的解决办法(su和su - root的区别)
- Using the Console[译]
由于最近的项目需要大量用到浏览器端的js编码和调试,所以仔细阅读了一下Chrome对于开发者工具中js部分的说明.虽然原来也用这个工具,但读后仍然觉得受益匪浅.于是抽空翻译一下,与大家分享. 本人英文 ...
- windows系统下构建Jenkins持续集成
环境准备 windows10+tomcat+python3.x(安装方法自行百度) 安装Jenkins 从https://jenkins.io/download/ 下载war包 将war包放到tomc ...
- 通过扩展方法简化UnityAPI调用
通过扩展方法简化UnityAPI调用 扩展方法unity apiapi简化 通过扩展方法简化UnityAPI调用 能省一秒是一秒,时间就是金钱,没人愿意把时间花在冗长的coding上
- 2019第十届蓝桥杯C++B组题解(赛后重写的,不确保答案正确性,仅供参考)
先说一下这次的感受吧,我们考场比较乱,开始比赛了,还有的电脑有故障,(向这些人发出同情),第一次认真参加比赛,真正比赛的时候感觉没有那么正式,很乱,各种小问题,(例如博主就没找到题目在哪里,找到后又不 ...