结对项目-四则运算出题程序(GUI版)

目录:

一.致搭档(含项目地址)

二.PSP(planning)

三.结对编程中对接口的设计

四.计算模块接口的设计与实现过程

五.计算模块接口部分的性能改进

六.计算模块部分单元测试展示

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

八.界面模块的详细设计过程

九.界面模块与计算模块的对接

十.结对过程的描述

十一.结对编程的优缺点

十二.PSP(actual)


一、致搭档:

      队友:李庭娟(我很喜欢把这位队友叫娟子,感觉很亲切)

首先非常非常感谢这位结对搭档——娟子,从最初组队到如今合作,始终非常信任我,鼓励我。性格洒脱,热情亲切。跟她合作过程中,真的没有一丝分歧。这些天和我一起讨论,分工,合作这个作业。都说“男女搭配,干活不累”,我是真的体会到了。完成项目的整个过程中,她始终积极主动的分担任务。我倒是很惭愧,由于个人能力的原因,不能承担着一个男生应该承担的任务。临近截止日期,我还催着她和我一起熬夜赶项目,非常非常不好意思。在此,衷心地向我的搭档说句感谢,很开心能有一次结对项目的作业,非常开心能有一次这样的机会去深入认识了解身边的同学,最最开心的是两个人在这个过程中的彼此信任与支持。不管结果怎么样,这是一次不同寻常的学习经历,不仅限于知识的学习和项目的制作,还有的是同伴的合作。

我的Coding.net源码仓库地址:https://git.coding.net/Vsmile1997/homework.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

对应部分代码展示:

 1 JButton b_log=new JButton("登录");
 2         b_log.addActionListener(new ActionListener() {
 3             public void actionPerformed(ActionEvent e) {
 4                 // TODO Auto-generated method stub
 5                 //获取用户名和密码,进行校验
 6                 String myUsername=tf_name.getText();
 7                 String myPassword=password.getText();
 8                 if(myUsername.equals("1")&&              myPassword.equals("1")){
 9                     JOptionPane.showMessageDialog(null, "登陆成功!");
10                     f.dispose();
11                     //new MyExGUI();
12                     new ShowGridLayout();
13
14                 }
15                 else{
16                     JOptionPane.showMessageDialog(null, "账号或密码错误!");
17                     tf_name.setText( "");
18                     password.setText( "");
19                 }
20
21             }
22         });  

2.定制面板:

通过输入合理有效的数值,定制不同需求的题目

对应部分代码展示:

 1 JButton b_enter=new JButton("进入");
 2         b_enter.addActionListener(new ActionListener() {
 3             public void actionPerformed(ActionEvent e) {
 4
 5                 String myNum=tf_num.getText();
 6                 int n = Integer.parseInt(myNum);
 7
 8                 String myLow=tf_low.getText();
 9                 int ml = Integer.parseInt(myLow);
10
11                 String myUp=tf_up.getText();
12                 int mu = Integer.parseInt(myUp);
13
14                 String myOp=tf_op.getText();
15                 int o = Integer.parseInt(myOp);
16
17                 String myMul=tf_mul.getText();
18
19                 String myBak=tf_bak.getText();
20
21                 if((n>0&& n<10001) && (ml>0&& ml<101) && (mu>=50&&mu<1001) && (o>0&&o<11) &&
22                         ( myMul.equals("0")|| myMul.equals("1") )&&
23                         ( myBak.equals("0")|| myBak.equals("1") )
24                   ){
25                     JOptionPane.showMessageDialog(null, "欢迎使用!");
26                         f.dispose();
27                         new MyExGUI(n,ml,mu,o,myMul,myBak);
28
29                 }
30                 else{
31                     JOptionPane.showMessageDialog(null, "你输入的数据有错!");
32                     tf_num.setText( "");
33                     tf_low.setText( "");
34                     tf_up.setText( "");
35                     tf_op.setText( "");
36                     tf_mul.setText( "");
37                     tf_bak.setText( "");
38                 }
39
40             }
41         }); 

九、界面模块与计算模块的对接

UI的整体设计思路:

我们想设计登陆,定制,菜单,统计4个面板:

(1)登陆页面包含用户的名称和密码以及多种语言的选择;

(2)定制页面包含具体不同需求的题目定制以及输入异常数据的提示处理;

(3)菜单页面包含启动开始答题项,文件的保存,本地文件的上传的功能;

(4)统计页面包含对答题结果的统计和分析,给出分数柱状图。

部分图片展示如下:

文件的上传

保存文件:

题目解答:每题5分。给出对应得分并绘制柱形图

十、描述结对的过程,提供非摆拍的两人在讨论的结对照片。

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

2.结对照片展示

十一、结对编程的优缺点

1.结对编程的优缺点

优点:充分锻炼了两个人的合作,沟通能力。两个人之间可以相互学习交流,从而取长补短。后期两人共同对接模块时,充分结合了两人的优点,使对接较为顺利的完成。

缺点:需要一段磨合时间,刚开始时效率不高,需要相互熟悉了解代码风格之后渐入佳境。

2.结对个人优缺点

我的优点:      (1)擅长算法,编码效率高。对项目进度的把握很有规划

(2)编程思路清晰,能够尽最大的能力做到最好

        (3)既细心又耐心。在结对编程中能很快地处理bug

缺点:           (1)缺乏主见,在选择上摇摆不定

搭档优点:(1)编程思路清晰,能够尽自己最大的能力实现自己能做到的最好

(2)耐心,不惧怕问题的出现,出现问题时不骄不躁,能静下心来处理解决问题

缺点:      (1)我认为娟子最大的缺点就是没有缺点,哈哈哈哈哈!

十二、在你实现完程序之后,在附录提供的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

原文地址:https://www.cnblogs.com/symx/p/8767778.html

时间: 2024-10-14 04:20:33

结对项目-四则运算出题程序(GUI版)的相关文章

结对项目--四则运算图形化最终版

四则运算器图形化最终版 (然而被我做成了奇怪的东西 组员:13070030张博文 13070033刘云峰 一.概念阶段 最初是想试试用android做个计算器app,无奈从零学起着实太赶,而且这个计划在试用了无比卡顿占内存的android studio后就彻底搁浅了. 然后就被路人谣传说MFC好用,无奈从零学起着实太赶,而且这个计划在无人指导的摸黑下也顺手搁浅了. 最终便沦为了EasyX旧传统,好歹有点基础,但果然还是不太甘心. 以及因为当初想做app,所以抠了iphone计算器的图想当UI,结

结对项目--四则运算生成器(Java) 刘彦享+龙俊健

结对项目--四则运算生成器(Java) GitHub地址 合作者 刘彦享(3118005010) 龙俊健(3118005011) https://github.com/LYX708194/calculate 一.项目简介 说明 自然数:0, 1, 2, -. 真分数:1/2, 1/3, 2/3, 1/4, 1'1/2, -. 运算符:+, ?, ×, ÷. 括号:(, ). 等号:=. 分隔符:空格(用于四则运算符和等号前后). 算术表达式: e = n | e1 + e2 | e1 ? e2

结对项目——四则运算(GUI)

目录 1.仓库地址 2.开始前PSP展示 3.接口的设计 4.计算模块接口的设计与实现过程 5.计算模块接口部分的性能改进 6.计算模块部分单元测试展示 7.计算模块部分异常处理说明 8.界面模块的详细设计过程 9.界面模块与计算模块的对接 10.结对过程 11.结对编程优缺点 12.实际的PSP 1. 仓库地址:https://git.coding.net/jiapwy/newfouroperation.git 队友:胡雅馨 队友的博客地址:http://www.cnblogs.com/huy

结对项目——四则运算题目生成器

一.GitHub项目地址 : https://github.com/OurPrograming/Exercises 结对项目成员:软三 陈纪禧(3118005043).软三 程伟杰(3118005045) 二.PSP预计时间: PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划  60 · Estimate · 估计这个任务需要多少时间 60 Development 开发 1680 · Analysis ·

小学生四则运算出题程序 无操作界面java版 简单的运用java中一些基本操作

这是本学期java课中实验大纲里的第一个实验,这里简单做了一个无用户界面版本. import java.util.Random; import java.util.Scanner; public class MathTest { public static void main(String[] args) { // TODO Auto-generated method stub double right = 0; double wrong = 0; /*Scanner sc2 = new Sca

结对项目-四则运算

项目:四则运算 结对伙伴:杜桥 功能:四则运算随机出题,并判断答案是否正确(只实现了正整数运算): 实现:用c#实现,用random.Next()完成随机部分,然后通过判断来检查答案是否正确: Https:https://git.coding.net/li_yuhuan/CalculateTest.git SSH:[email protected]:li_yuhuan/CalculateTest.git 代码: int v1; int v2; int a; char op; char[] ops

结对项目-四则运算 “软件”之升级版

随笔缘由:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2213 githup缘由:https://github.com/tianshizhao/tianshizhao 一.基本要求 从个人项目出发,将程序改造成一个单机带用户界面(不是控制台)的程序,这个程序最基本要达到: 自动生成题目,单个题目最多不能超过4个运算符,操作数小于100. 用户可以输入答案 若用户输入答案正确,则提示正确:若答案错误,则提示错误,并要提示正确答案是

双人结对项目-闹钟小程序

github代码地址: https://github.com/y654063871/Clock-/blob/master/Clock%20-java.txt 一.题目简介: ˇ这个小java程序是制作一个闹钟程序 ˇ设定闹钟会根据系统的时间而当作时钟来显示 ˇ用户可以根据自己的需要来设定闹钟时间,当到达用户设定的时间后 闹钟就会响起提示音,提示时间为一分钟 ˇ设定了两个类:Clock和SetTime, 分别用来设定闹钟和设定时间 二.结对分工 ˇ结对: 杨洪宇,颉凌杰 ˇ我(杨洪宇)负责程序代码

结对项目 四则运算 更新版

功能:由随机数决定出题为10个以内的数字,并确定是否出现括号(仅限一对),顺序输出表达式,并用栈的方式进行计算,判断正误.其他功能有待进一步实现. 头文件 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <math.h> 栈的结构体 typedef struct stack { double * e; int zd; }bd