结对作业 -GUI四则运算
目录:
一.前言(及项目地址)
二.PSP(planning)
三.结对编程中对接口的设计
四.计算模块接口的设计与实现过程
五.计算模块接口部分的性能改进
六.计算模块部分单元测试展示
七.计算模块部分异常处理说明
八.界面模块的详细设计过程
九.界面模块与计算模块的对接
十.结对过程的描述
十一.结对编程的优缺点
十二.PSP(actual)
一、前言:
队友:吕乐乐(很幸运找到性格如此好的队友,既有耐心又细心,脾气还这么好o(* ̄︶ ̄*)o)
在清明节假日中我参加了整整两天的志愿活动,基本没有时间做项目,基于老师给的题目要求还是乐乐完成的,我原本代码有的功能花费了好几天实在没琢磨出来,因此只参与了界面的编写和对接项目。很崩溃时间飞逝到了截止日期还在熬夜撰写博客。总的来说本次作业时间范围给的太短了,十天时间给了三个作业,不过收获很大,基于GUI的代码实现还是翻阅了书籍才编写出来的,又一次意识到了自己java的薄弱o(╥﹏╥)o。
Coding.net源码仓库地址:https://git.coding.net/francesca/Gui-Arithmatic.git
二、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
信息隐藏指在设计和确定模块时,使得一个模块内包含的特定信息(过程或数据),对于不需要这些信息的其他模块来说,是不可访问的。信息隐藏是结构程序设计与面向对象设计的基础之一。在面向对象设计中,它又引出了封装和模块化的概念,并与抽象的概念紧密相关。信息隐藏是软件的首要技术使命中格外重要的一种启发式方法,因为它强调的就是隐藏复杂度。
我们的设计:进行模块化设计,通过对函数的封装。只可以调用方法,不可以改变内部变量。界面设计:只需要知道如何使用它,不需要知道界面内部是如何运行的。
2、Interface Design, 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)编程思路清晰,能够尽自己最大的能力实现自己能做到的最好.
(2)耐心,不惧怕问题的出现.
(3)出现问题时不骄不躁,能静下心来处理解决问题.
缺点:在遇到问题时会过于执着,浪费很多时间,java基础还不够扎实,看待问题不够仔细理解得也不够深入。
十二、在你实现完程序之后,在附录提供的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四则运算的更多相关文章
- 结对作业——web四则运算
目录: 一.Coding.net项目地址 二.PSP 三.接口设计 四.接口实现 五.性能分析 六.单元测试 七.异常处理 八.模块设计 九.模块对接 十.结对 十一.思考 十二.PSP 网站:htt ...
- 结对作业:四则运算(Java+JavaFX)
一.简介 此程序是一个可自动生成,计算小学四则运算题目的项目. Github地址:https://github.com/czmDeRepository/SoftwareWork/tree/master ...
- 结对作业——随机生成四则运算(Core 第7组)
结对作业 ——随机生成四则运算(core第7组) 吕佳玲 PB16060145 涂涵越 PB16060282 GITHUB地址 https://github.com/hytu99/homework_2 ...
- 结对作业——四则运算 Part2. 封装与对接相关问题
结对作业——四则运算 Part2. 封装与对接相关问题 PB15061303 刘梓轩PB16061489 艾寅中 GITHUB 地址 戳这里 目录 Part 1. Core代码编写部分Part 2. ...
- 结对作业——四则运算 Part3. 对于结对编程的总结与思考
结对作业——四则运算 Part3. 对于结对编程的总结与思考 PB15061303 刘梓轩PB16061489 艾寅中 GITHUB 地址 戳这里 目录 Part 1. Core代码编写部分 Part ...
- Core 第三组 结对作业——四则运算 Part1. Core代码编写
结对作业——四则运算 Part1. Core代码编写 PB15061303 刘梓轩PB16061489 艾寅中 GITHUB 地址 戳这里 目录 (因为内容较多,分为了三个部分,但作业系统中只能提交一 ...
- 【第二次个人作业】结对作业Core第一组:四则运算生成PB16061082+PB16120517
[整体概况] 1.描述最终的代码的实现思路以及关键代码. 2.结对作业两个人配合的过程和两个人分工. 3.API接口文档和两个组的对接. 4.效能分析,优化分析和心得体会. [代码实现] 一. 实现功 ...
- 结对作业1----基于flask框架的四则运算生成器
011.012结对作业 coding地址:https://coding.net/u/nikochan/p/2nd_SE/git 一.作业描述 由于上次作业我没有按时完成,而且庞伊凡同学编程能力超棒,所 ...
- 四则运算UI组结对作业报告
Github提交地址: 小组成员:陈兆庭,陈昶金: 一.编程阶段 清明节开始接触和调研关于UI设计的方法.由于两人的各方面知识储备均不足,在各种东西C#.MFC.Qt中进行调查和讨论,最终因为网上说Q ...
随机推荐
- JavaScript 基础(二)数组
字符串, JavaScript 字符串就是用'' 和""括起来的字符表示. 字符字面量, \n 换行, \t 制表, \b 退格, \r 回车, \f 进纸, \\ 斜杠,\' 单 ...
- BZOJ1086: [SCOI2005]王室联邦(贪心,分块?)
Time Limit: 10 Sec Memory Limit: 162 MBSec Special JudgeSubmit: 2610 Solved: 1584[Submit][Status] ...
- javascript--自定义弹出登陆窗口(弹出窗)
web开发中浏览器对象封装了诸如prompt.alert.confirm等弹出框,但是有的弹出框并不能满足开发需要,需要我们自己定义弹出框,诸如用户登陆框.消息提示框等.本文利用弹出用户登陆框示例,对 ...
- 使用jQuery实现数字逆时针旋转
要实现数字逆转,最主要是分析我们页面的元素结果,结合选择器充分利用起来! 例如:以下lable中每一个id和值的安排具有一定结构的意义需要用心分析: jQuery代码:
- vue服务端渲染浏览器端缓存(keep-alive)
在使用服务器端渲染时,除了服务端的接口缓存.页面缓存.组建缓存等,浏览器端也避免不了要使用缓存,减少页面的重绘. 这时候我们就会想到vue的keep-alive,接下来我们说一下keep-alive的 ...
- 第一次使用Git上传本地项目到github
看了好多帖子,终于在混乱中找到自己适合的方法......自我感觉这个比较简单. 先安装本地git,官方下载地址:http://git-scm.com/download/ 根据你自己的系统 下载对应版 ...
- DSP+ARM多核异构开发环境SYSLINK搭建OMAPL138
DSP+ARM多核异构开发环境搭建OMAPL138 注意: 环境为Ubuntu 12.04 只能是这个环境.我甚至在Ubuntu16.04上面安装了VMware,然后,在装了一个Ubuntu 12.0 ...
- Less Is More【少即是多】
Less Is More Adults understand what it feels like to be flooed with objects. 成年人知道被物品淹没的感觉. Why do w ...
- 利用nodejs实现商品管理系统(二)
下面实现商品管理系统 第一步:对应的ejs与数据交换的编写格式. 商品列表界面product.ejs <% for(var i=0;i<list.length;i++){%> < ...
- [答网友问]让GridLength支持动画
原文:[答网友问]让GridLength支持动画 [答网友问]WPF中让GridLength类型支持动画 ...