结对项目-四则运算出题程序(GUI版)
目录:
一.致搭档(含项目地址)
二.PSP(planning)
三.结对编程中对接口的设计
四.计算模块接口的设计与实现过程
五.计算模块接口部分的性能改进
六.计算模块部分单元测试展示
七.计算模块部分异常处理说明
八.界面模块的详细设计过程
九.界面模块与计算模块的对接
十.结对过程的描述
十一.结对编程的优缺点
十二.PSP(actual)
一、致搭档:
队友:李庭娟(我很喜欢把这位队友叫娟子,感觉很亲切)
首先非常非常感谢这位结对搭档——娟子,从最初组队到如今合作,始终非常信任我,鼓励我。性格洒脱,热情亲切。跟她合作过程中,真的没有一丝分歧。这些天和我一起讨论,分工,合作这个作业。都说“男女搭配,干活不累”,我是真的体会到了。完成项目的整个过程中,她始终积极主动的分担任务。我倒是很惭愧,由于个人能力的原因,不能承担着一个男生应该承担的任务。临近截止日期,我还催着她和我一起熬夜赶项目,非常非常不好意思。在此,衷心地向我的搭档说句感谢,很开心能有一次结对项目的作业,非常开心能有一次这样的机会去深入认识了解身边的同学,最最开心的是两个人在这个过程中的彼此信任与支持。不管结果怎么样,这是一次不同寻常的学习经历,不仅限于知识的学习和项目的制作,还有的是同伴的合作。
我的Coding.net源码仓库地址:https://git.coding.net/Vsmile1997/pairworkend.git
搭档博客地址:http://www.cnblogs.com/tingjuanli/p/8746012.html
二、PSP(planning)
|
PSP |
任务内容 |
计划时间(min) |
|
Planning |
计划 |
30 |
|
Estimate |
估计这个任务需要多少时间,并规划大致工作步骤 |
10 |
|
Development |
开发 |
780 |
|
Analysis |
需求分析 |
23 |
|
Design Spec |
生成文档 |
0 |
|
Design Review |
设计复审 |
0 |
|
Coding Standard |
代码规范 |
7 |
|
Design |
具体设计 |
40 |
|
Coding |
具体编码 |
210 |
|
Code Review |
代码复审 |
30 |
|
Test |
测试 |
30 |
|
Reporting |
报告 |
160 |
|
Test Report |
测试报告 |
180 |
|
Size Measurement |
计算工作量 |
40 |
|
Postmortem & Process Improvement Plan |
事后总结, 并提出过程改进计划 |
60 |
三、结对编程中对接口的设计
1、Information Hiding
信息隐藏是结构化设计于面向对象设计的基础。在结构化中函数的概念和面向对象的封装思想都来源于信息隐藏。信息隐藏原则的主要应用有:
(1)多层设计中的层与层之间加入接口层;
(2)所有类与类之间都通过接口类访问;
(3)类的所有数据成员都是private,所有访问都是通过访问函数实现的。
我们的做法:信息隐藏的目的主要是隐藏复杂度,它所具有的封装思想就是体现了这个目的。我们把程序分解为各个模块(主模块,生成算式模块,计算模块等),隐藏每个模块具体算法的实现原理,而只需要知道每个模块的功能,按需调用即可。
2、Interface Design
接口设计,我理解的接口就是契约,一种职责。在我们的项目中使用接口指明了多个类需要实现的方法,不需要知道对象对应的类,就可以知道对象之间的交互界面,提高了编程效率。
3、Loose Coupling
松耦合就是降低系统部件和部件之间的耦合性,也就是降低部件的依赖性,使得部件之间相互独立,这样对于日后的系统维护以及扩展都是有好处的。因此,耦合程度,模块与模块之间的联系性就更高,系统的灵活性就越低,报错率就更高。我们的理解就是,松耦合归根结底就是一种“模块化”编程思想,将项目尽可能多的分为相互独立的几个模块,便于调用和实现优化。我们在项目中也力求实现模块化处理,做到松耦合。
四、计算模块接口的设计与实现过程
方法说明:
Command:调用其它方法,实现整个程序的功能;
arithmetic()方法:综合了不同定制要求的算式方法;
Simple()方法:产生满足定制需求的加减算式;
OnlyMD()方法:产生满足定制需求的加减乘除算式;
OnlyBra()方法:产生满足定制需求的含括号的加减算式;
BothMDBra()方法:产生满足定制需求的含括号的加减乘除算式;
Youxianji()方法:处理计算结果过程中的优先级问题;
Stack()方法:处理后缀表达式的运算顺序问题;
login.java,ShowGridLayout.java,MyExGUI.java等实现GUI面板的Java文件。

五、计算模块接口部分的性能改进
1.性能分析改进
在整体编程结束后,进行性能分析与改进是非常有必要的。因为在小规模的数据下或者是一般情况下,功能的实现是不太会涉及到优化算法的。但是,个别特例或者是大规模的数据往往会导致程序报错,这就要求我们需要对程序进行性能的优化改进。比如,我们在生成算式过程中,由于上下限和算式个数选择上偏于极端情况,算式的结果“迟迟”无法生成,CPU占有率极大。因此我们在算法中做了异常处理,并且规范输入,这样一来,软件的使用性能上就得到了优化改进。
2.性能分析截图
项目总体分析图,从内存,多线程,CPU等方面分析了计算模块的性能,截图如下:

性能分析过程截图:

六、计算模块部分单元测试展示
测试Command.java类(下图的单元测试中的Main即代码中的Command,截图时未更名):
package test; import static org.junit.Assert.*; import org.junit.Before;
import org.junit.Test; public class CommandTest { private static Command con = new Command();
@Before
public void setUp() throws Exception {
} @Test
public void testSimple() {
con.Simple(2,50,3);//产生2个50以内最多3个运算符的算式
} @Test
public void testOnlyMD() {
con.OnlyMD(1,500,2);//产生1个500以内最多2个运算符的算式
} @Test
public void testOnlyBra() {
con.OnlyBra(10,50,4,1);//故意输入参数错误,检验单元测试报错
} @Test
public void testBothMDBra() {
fail("Not yet implemented");//未编写单元测试函数,单元测试失败
} }

代码覆盖率:

七、计算模块部分异常处理说明

八、界面模块的详细设计过程
1.登陆面板:
单用户登陆:username:1 password:1


对应部分代码展示:
JButton b_log=new JButton("登录");
b_log.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
//获取用户名和密码,进行校验
String myUsername=tf_name.getText();
String myPassword=password.getText();
if(myUsername.equals("1")&& myPassword.equals("1")){
JOptionPane.showMessageDialog(null, "登陆成功!");
f.dispose();
//new MyExGUI();
new ShowGridLayout();
}
else{
JOptionPane.showMessageDialog(null, "账号或密码错误!");
tf_name.setText( "");
password.setText( "");
}
}
});
2.定制面板:
通过输入合理有效的数值,定制不同需求的题目

对应部分代码展示:
JButton b_enter=new JButton("进入");
b_enter.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String myNum=tf_num.getText();
int n = Integer.parseInt(myNum);
String myLow=tf_low.getText();
int ml = Integer.parseInt(myLow);
String myUp=tf_up.getText();
int mu = Integer.parseInt(myUp);
String myOp=tf_op.getText();
int o = Integer.parseInt(myOp);
String myMul=tf_mul.getText();
String myBak=tf_bak.getText();
if((n>0&& n<10001) && (ml>0&& ml<101) && (mu>=50&&mu<1001) && (o>0&&o<11) &&
( myMul.equals("0")|| myMul.equals("1") )&&
( myBak.equals("0")|| myBak.equals("1") )
){
JOptionPane.showMessageDialog(null, "欢迎使用!");
f.dispose();
new MyExGUI(n,ml,mu,o,myMul,myBak);
}
else{
JOptionPane.showMessageDialog(null, "你输入的数据有错!");
tf_num.setText( "");
tf_low.setText( "");
tf_up.setText( "");
tf_op.setText( "");
tf_mul.setText( "");
tf_bak.setText( "");
}
}
});
九、界面模块与计算模块的对接
UI的整体设计思路:
我们想设计登陆,定制,菜单,统计4个面板:
(1)登陆页面包含用户的名称和密码以及多种语言的选择;
(2)定制页面包含具体不同需求的题目定制以及输入异常数据的提示处理;
(3)菜单页面包含启动开始答题项,文件的保存,本地文件的上传的功能;
(4)统计页面包含对答题结果的统计和分析,给出分数柱状图。
部分图片展示如下:

文件的上传

题目解答:

十、描述结对的过程,提供非摆拍的两人在讨论的结对照片。
1.一开始本打算做网页版的,但是前端我们都不大熟悉,所以决定做GUI界面。此次结对编程中,一人负责内部功能的算法实现,一人负责界面,各自负责编写自己的那部分代码;对接过程中,我们一起合作,在这一阶段也充分感受到了结对编程的高效,也意识到好队友的挑选对项目的完成有很大的促进促进作用。
2.结对照片展示

十一、结对编程的优缺点
1.结对编程的优缺点
优点:充分锻炼了两个人的合作,沟通能力。两个人之间可以相互学习交流,从而取长补短。后期两人共同对接模块时,充分结合了两人的优点,使对接较为顺利的完成。
缺点:需要一段磨合时间,刚开始时效率不高,需要相互熟悉了解代码风格之后渐入佳境。
2.结对个人优缺点
我的优点: (1)擅长算法,编码效率高。对项目进度的把握很有规划
(2)编程思路清晰,能够尽最大的能力做到最好
(3)既细心又耐心。在结对编程中能很快地处理bug
缺点: (1)缺乏主见,在选择上摇摆不定
搭档优点:(1)编程思路清晰,能够尽自己最大的能力实现自己能做到的最好
(2)耐心,不惧怕问题的出现,出现问题时不骄不躁,能静下心来处理解决问题
缺点: (1)我认为娟子最大的缺点就是没有缺点,哈哈哈哈哈!
参考博客:http://www.cnblogs.com/xinz/archive/2011/08/07/2130332.html
十二、在你实现完程序之后,在附录提供的PSP表格记录下你在程序的各个模块上实际花费的时间。
|
PSP |
任务内容 |
计划时间(min) |
完成时间(min) |
|
Planning |
计划 |
30 |
30 |
|
Estimate |
估计这个任务需要多少时间,并规划大致工作步骤 |
10 |
10 |
|
Development |
开发 |
780 |
2700 |
|
Analysis |
需求分析 |
23 |
40 |
|
Design Spec |
生成文档 |
0 |
20 |
|
Design Review |
设计复审 |
0 |
20 |
|
Coding Standard |
代码规范 |
7 |
15 |
|
Design |
具体设计 |
40 |
60 |
|
Coding |
具体编码 |
210 |
1800 |
|
Code Review |
代码复审 |
30 |
45 |
|
Test |
测试 |
30 |
700 |
|
Reporting |
报告 |
160 |
840 |
|
Test Report |
测试报告 |
180 |
780 |
|
Size Measurement |
计算工作量 |
40 |
30 |
|
Postmortem & Process Improvement Plan |
事后总结, 并提出过程改进计划 |
60 |
30 |
结对项目-四则运算出题程序(GUI版)的更多相关文章
- 结对项目——四则运算GUI项目
一.项目地址:https://git.coding.net/lvgx/wsz.git 二.PSP: PSP2.1 任务内容 计划共完成需要的时间(min) 实际完成需要的时间(min) Plannin ...
- 结对项目-小学生四则运算系统(GUI)
Coding克隆地址:https://git.coding.net/FrrLolix/CalGUI.git 伙伴博客:http://www.cnblogs.com/wangyy39/p/8763244 ...
- 小学生四则运算出题程序 无操作界面java版 简单的运用java中一些基本操作
这是本学期java课中实验大纲里的第一个实验,这里简单做了一个无用户界面版本. import java.util.Random; import java.util.Scanner; public cl ...
- 结对项目-四则运算"软件"之升级版
本次作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2213 github地址为:https://github.com/L ...
- 结对随即四则运算(带界面Java版)
//随机四则运算类 public class 随机四则运算 { public static void main(String[] args) { new 界面();//进入随机四则运算的首界面 } } ...
- 结对项目3-功能增强型带基本函数计算java计算器
-----------------------------------------------------实验报告------------------------------------------- ...
- 结对编程项目——四则运算vs版
结对编程项目--四则运算vs版 1)小伙伴信息: 学号:130201238 赵莹 博客地址:点我进入 小伙伴的博客 2)实现的功能: 实现带有用户界面的四则运算:将原只能在 ...
- 小学四则运算结对项目报告(GUI)
小学四则运算结对项目报告(GUI) 一.Coding.Net项目地址: https://git.coding.net/wsshr/Calculation.git 二.PSP表格(完成前): PSP 任 ...
- 高级软件工程2017第3次作业——结对项目:四则运算题目生成程序(基于GUI)
Deadline:2017-10-11(周三)21:00pm (注:以下内容参考集大作业 ) 前言 想过和别人一起探索世界吗?多么希望,遇到困难时,有人能一起探讨:想要懈怠时,有人推你一把:当你专注于 ...
随机推荐
- Velocity学习4
Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象. 当Veloci ...
- 【转载】COM 组件设计与应用(七)——编译、注册、调用
原文:http://vckbase.com/index.php/wv/1218.html 一.前言 上两回中,咱们用 ATL 写了第一个 COM 组件程序,这回中,主要介绍编译.册和调用方法.示例程序 ...
- 11 [异常]-try...except
1.什么是异常 异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止),在python中,错误触发的异常如下 2.错误 错误分成 ...
- cogs1772 [国家集训队2010]小Z的袜子
沉迷于文化的我N年没更blog了...(\(N \in (0,1)\)) 然后回到机房就沉迷于 \(generals.io\) 无法自拔...QAQ 然后想打一遍splay(然后是LCT),然后放弃了 ...
- jquery 配合 jsp 实现 ajax 要注意的问题
(这一次 jq 无法执行的原因竟然是: 没导入 jq 的 js 文件!!!!!!!!!!!!!!) 今天在写一个 select change 实现来 ajax 时,发现 jq 无法执行,网上查了下,发 ...
- Java 图片处理解决方案:ImageMagick 快速入门教程
文章首发于[博客园-陈树义],点击跳转到原文Java 图片处理解决方案:ImageMagick 快速入门教程. ImageMagick介绍 ImageMagick是一个免费的创建.编辑.合成图片的软件 ...
- Zabbix实战-简易教程--订阅类
一.需求提出 最近数据中心有一个新的需求,有一批后台任务需要在每天固定时间点运行(凌晨8:00),现在希望能够把这个任务执行的结果定时上报给他. 说明:执行的任务为一个sql查询,查询出来的是每个任务 ...
- APP测试基本流程以及APP测试要点
APP测试流程梳理 APP测试要点梳理 链接:http://pan.baidu.com/s/1gfaEZ1x 密码:07yt 1 APP测试基本流程 1.1流程图 1.2测试周期 测试周期可按项目的开 ...
- Post请求和Get请求;@RequestBody和@RequestParam
1.@RequestBody用于Post请求,接收json数据,例如:@RequestBody User user 例如:@RequestBody Map map .不要用于Get请求. 2.@Req ...
- [环境配置]Ubuntu 16.04+CUDA 9.0+OpenCV 3.2.0下编译基于Caffe的MobileNet-SSD踩过的一些坑
SSD是Caffe的一个分支,源码在github上:https://github.com/weiliu89/caffe/tree/ssd $ git clone https://github.com/ ...

