小学四则运算结对项目报告(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)的更多相关文章

  1. 小学四则运算结对项目报告【GUI】

    写在前面 这次的结对项目我做了很长时间,感触也很多.在这次项目中我使用了Java GUI作为和用户的交互方式,但是在上Java课的时候我对GUI和事件驱动这里并没有学的多好,可能是当时对编程还没有什么 ...

  2. 四则运算结对项目之GUI

    本次结对编程让我学到了许多许多知识,受益匪浅!在此之前,我没想过我能做出一个双击运行的小程序. 感谢我的队友与我同心协力,感谢室友宇欣告诉我操作符为“最多多少”而不是“多少”并教我使用效能分析工具,感 ...

  3. 结对项目作业GUI

    一.Coding.Net项目地址:https://git.coding.net/zhengsh589/CoupleProject.git 二.PSP表格(完成前): PSP 任务内容 计划共完成需要的 ...

  4. 四则运算结对编程(GUI)

    四则运算GUI coding地址:https://git.dev.tencent.com/qyj814/GUI.git 结对伙伴:李梦宇 一.题目要求 定制出题要求.每次出题时用户都可以在界面上定制如 ...

  5. 201871030108-冯永萍 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    实验三 软件工程结对项目 项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs ...

  6. 201871030125-王芬 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    实验三 软件工程结对项目 项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs ...

  7. 201871030117-李亚楠 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 课程班级 这个作业要求链接 作业要求 我的课程学习目标 1.体验软件项目开发中的两个人合作.练习结对编程:2.掌握Github协作开发程序的操作方法:3.熟悉编程语言的综 ...

  8. 201871010203-陈鹏昱 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 学习软件工程的理论和知识,掌握软件开发流程,增强实践能力 这个作业在哪些方面帮助我实现学习目标 体验软件项目开发中 ...

  9. 201873030133-杨子豪 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 班级博客链接 这个作业要求链接 作业要求链接 我的课程学习目标 了解软件工程的作用与意义,将软件工程与过去所学相结合 这个作业在哪些方面帮助我实现学习目标 体验了结对式的 ...

随机推荐

  1. 五、Delphi10.3通过REST单元使类和JSON数据互相转换

    一.我们定义一个简单的类 TPeople = class private FName: string; FScore: Integer; FAge: TDateTime; public propert ...

  2. redis缓存数据库入门教程

    入门redis教程 前言: 应公司需求,最近学习了一下redis数据库的一些简单入门的教程,整理出来分享给大家,喜欢的可以关注和点赞哦~ 如文章中有不足之处求指正,谢谢 目录 ·什么是redis?为什 ...

  3. 快速安装Docker

    Docker需要操作系统的内核3.0以上,如低于3.0,需先升级内核,才能安装docker: 1.查看内核版本号 [root@daojia ~]# uname -r 3.10.0-693.el7.x8 ...

  4. 20155238 2016-2017-2 《JAVA程序设计》第七周学习总结

    教材学习内容总结 第十二章 认识Lambda语法 在只有Lambda表达式的情况下,参数的类型必须写出来. 匿名类有相应的应用场合.Lambda表达式只关心方法命名上的参数与返回定义,忽略方法名称. ...

  5. PosgreSQL 9.0 High Performance中文版瑕疵

    磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面: PostgreSQL杂记页     回到顶级页面:PostgreSQL索引页 发表此文不是为了吐槽,而是为了防止更多的受害者出现啊,拿到书后 ...

  6. 【CQOI2014】数三角形

    题面 题解 考虑使用总数减去不合法的数量 首先将\(n, m\)都加上\(1\),将网格变成坐标系 总数即为\(\large\binom{n\times m}{3}\) 不合法的有三种情况: 三个点在 ...

  7. idea web项目debug模式实时更新按钮不生效原因

    必须两个都开启才能生效,单按按钮不能生效,但是有时候自动更新不生效的时候按按钮后可以生效, 如果前端目录或后端内容实在不更新,就删掉out目录和target目录,重新启动服务器即可

  8. [CF1027F]Session in BSU[最小基环树森林]

    题意 有 \(n\) 门课程,每门课程可以选择在 \(a_i\) 或者 \(b_i\) 天参加考试,每天最多考一门,问最早什么时候考完所有课程. \(n\leq 10^6\). 分析 类似 [BZOJ ...

  9. Maven+spring+springMVC+mybatis+Junit+Log4j配置个人总结

          首先粘贴上项目引用地址:http://doc.okbase.net/fengshizty/archive/126397.html 这里对创建步骤不做过多解释,只是针对案例创建demo的一些 ...

  10. vs2012 与 win7 不兼容的问题

    Visual Studio 2012 与此版本的 Windows 不兼容 突然出现的,如下图: 这个是网上找的图,我的没来得及截图就修复了,基本一致,只是我的是win7 64位系统,所以安装位置那里是 ...