小学四则运算结对项目报告(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%。

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

设置布局管理器,将界面的布局确定好。

 1 // 设置布局管理器
 2         setLayout(new BorderLayout(15, 15));
 3
 4         JPanel menuPanel = new JPanel();
 5         JScrollPane  scrollPane = new JScrollPane();
 6         JPanel resultPanel = new JPanel();
 7
 8         jlTime.setForeground(Color.blue);
 9
10         timer = new Timer(1000, new ActionListener() {
11             public void actionPerformed(ActionEvent e) {
12                 Date now2 = new Date(now.getTime() + 1000);
13                 now = now2;
14                 SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
15                 jlTime.setText("耗时:" + formatter.format(now));
16             }
17         });
18
19         resultPanel.setVisible(false);
20         addContToMenu(menuPanel, scrollPane, resultPanel);
21         addContToResult(resultPanel);
22
23         this.add(menuPanel, BorderLayout.NORTH);
24         this.add(scrollPane, BorderLayout.CENTER);
25         this.add(resultPanel, BorderLayout.SOUTH);
26
27     }

将题目数量和其他判断条件加入菜单面板。

 1 // 将控件加入菜单面板
 2     private void addContToMenu(JPanel menuPanel, final JScrollPane scrollPane, final JPanel resultPanel) {
 3         JButton but1 = new JButton("提交");
 4         JPanel tfPanel1 = new JPanel();
 5         final JTextField tf1 = new JTextField("     ");
 6         tfPanel1.setLayout(new BorderLayout(5, 0));
 7         tfPanel1.add(new JLabel("请输入题目数量:"), BorderLayout.WEST);
 8         tfPanel1.add(tf1, BorderLayout.CENTER);
 9
10         JPanel tfPanel2 = new JPanel();
11         final JTextField tf2 = new JTextField("     ");
12         tfPanel2.setLayout(new BorderLayout(5, 0));
13         tfPanel2.add(new JLabel("请输入操作数的最大值:"), BorderLayout.WEST);
14         tfPanel2.add(tf2, BorderLayout.CENTER);
15
16         JPanel tfPanel3 = new JPanel();
17         final JTextField tf3 = new JTextField("     ");
18         tfPanel3.setLayout(new BorderLayout(5, 0));
19         tfPanel3.add(new JLabel("是否有乘除(1为是,0为否):"), BorderLayout.WEST);
20         tfPanel3.add(tf3, BorderLayout.CENTER);

设置监听按钮,在按提交键之后将题目输入到界面并开始计时。

 1 // 设置按钮监听,按钮主要做这几件事:1.开始计时 2.调用mainExp类生成题目,3.结果面板设为可见,4.数据初始化
 2         but1.addActionListener(new ActionListener() {
 3             public void actionPerformed(ActionEvent arg0) {
 4                 clearAll();
 5                 now.setHours(0);
 6                 now.setMinutes(0);
 7                 now.setSeconds(0);
 8                 timer.start();
 9                 // 获得生成的题目list,赋给question的list中
10                 mainExp createExercise = new mainExp();
11                 createExercise.createEquation(Integer.parseInt(tf1.getText().trim()),
12                         Integer.parseInt(tf2.getText().trim()),Integer.parseInt(tf3.getText().trim()));
13                 Command.this.setQuestion(createExercise.getQuestion());
14                 Command.this.setAnswer(createExercise.getAnswer());
15                 Command.this.addContToMain(scrollPane);
16                 resultPanel.setVisible(true);
17                 resultPanel.validate();
18
19             }
20         });
21         menuPanel.add(tfPanel1);
22         menuPanel.add(tfPanel2);
23         menuPanel.add(tfPanel3);
24         menuPanel.add(but1);
25         menuPanel.add(jlTime);
26
27     }

八.界面模块与计算模块的对接:

通过生成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

 

转载于:https://www.cnblogs.com/wsshr/p/8776097.html

小学四则运算结对项目报告(GUI)相关推荐

  1. 四则运算——结对项目报告

    写在前面:这次的作业我们是用Web做的,搭服务器的部分已经完成,老师们可以通过这个链接查看我们的页面http://47.93.197.5:8080/chenf/.附加功能1我们加了英语这个语种,其他的 ...

  2. 201571030121《小学四则运算练习软件软件需求说明》结对项目报告

    201571030107/201571030121<小学四则运算练习软件软件需求说明>结对项目报告 结对小伙伴:冯晓(201571030107) 任务一 首先,我们进行了实例体验,把我们已 ...

  3. 201571030310/201571030329《小学四则运算训练软件》结对项目报告

    一.项目源码. Github地址:https://github.com/loadrove/SoftWareTest 二.项目报告. 1.需求分析: (1)由计算机从题库文件中随机选择20道加减乘除混合 ...

  4. 实验四:201571030116/201571030106《小学四则运算练习软件需求说明》结对项目报告...

    任务1:以实验二个人项目.实验三结对项目所开发的小学生四则运算练习软件作为原型,实施小学生四则运算练习软件用户调研活动. 由于上次作业小伙伴很机智的把软件的操作过程录成了gif动图,所以在做基于原型的 ...

  5. 201571030128/201571030118《小学四则运算练习软件软件需求说明》结对项目报告

    一.以实验二个人项目.实验三结对项目所开发的小学生四则运算练习软件作为原型,实施小学生四则运算练习软件用户调研活动具体过程. 1.真实的调研对象 对象 性别 年龄 身份 刘老师 女 23 小学数学实习 ...

  6. 201671030129 周婷 《英文文本统计分析》结对项目报告

    项目 内容 这个作业属于哪个课程 软件工程 这个作业的要求在哪里 软件工程结对项目 课程学习目标 熟悉软件开发整体流程及结对编程,提升自身能力 本次作业在哪个具体方面帮助我们实现目标 体验组队编程,体 ...

  7. 201671010436 王雪刚 实验四 《英文文本统计分析》结对项目报告

    一:实验名称:软件工程结对项目 二:实验目的与要求 (1)体验软件项目开发中的两人合作,练习结对编程(Pair programming). (2)掌握Github上增量发布软件的操作方法. 三:实验步 ...

  8. 201571030322/201571030319《小学生四则运算软件需求说明结对项目报告》

    1.任务一: (1).调研对象:小学生,小学数学代课老师,家长: (2).以实验二(小学四则混合运算项目),实验三(小学四则软件运算结对项目)开发的程序为软件原型: (3).采用问卷调查,访谈两种方式 ...

  9. 201671010457 朱石景 实验四《英文文本词频统计分析》 结对项目报告

    项目 内容 这个作业属于哪个课程 西北师范大学软件工程 作业要求 实验四 软件工程结对项目 本次实验我的GitHub地址 点击进入 课程学习目标 熟悉软件开发整体流程,提升自身能力 任务一 点评信息 ...

最新文章

  1. python乐观锁代码实现_Elasticsearch系列—并发控制及乐观锁实现原理
  2. permute是最好的Mac上面的格式转换器
  3. Linux快捷键及文件和目录的操作
  4. PHP中 $_SERVER的信息汇总
  5. ArcGIS Engine 刷新问题
  6. php只显示一部分文章,typecho同一个页面下调用不同分类的文章但是却只显示一个分类文章...
  7. 盖茨每一秒能赚多少钱,他现在最担心的是什么?
  8. 基于Matlab的跨孔CT胖射线追踪算法(五)
  9. (转)Linux传输大文件(分割传输)
  10. 大一上计算机期末试题,大一计算机期末考试试题及答案
  11. nginx配置多个域名转向80端口
  12. [锁 Lock] Lock lock = new ReentrantLock()之自增序列号
  13. php 分别降低图片尺寸与质量的方法
  14. snprintf() 函数
  15. android 磁力解析,关于手机端磁力下载,看这篇教程就够了
  16. 使用Enter键代替Tab键的功能
  17. matlab变量及操作
  18. 微信微网站需要服务器吗,一分钟搭建微信微网站
  19. pick定理及其证明
  20. DIAView高级视频教程

热门文章

  1. sql GROUP BY子句使用实例
  2. EXT学习经验分享:深刻理解EXT与服务器端的交互
  3. np.c_和np.r_的用法解析
  4. leetcode - 22. 括号生成
  5. 新建工程后编译运行出现,无法找到*.obj问题解决方案
  6. 计算机辅助语言和语言学关系,西方语言学与多媒体计算机辅助语言学习_王艳萍...
  7. Cocos2d-x 2 0 4 小心隐藏的retain
  8. IntelliJ IDEA常用快捷键——基于Eclipse
  9. team网卡配置_主流服务器网卡Teaming模式配置(上)
  10. wincc服务器系统,什么情况下用wincc服务器与客户端