小学四则运算结对项目报告(GUI)
小学四则运算结对项目报告(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)的更多相关文章
- 小学四则运算结对项目报告【GUI】
写在前面 这次的结对项目我做了很长时间,感触也很多.在这次项目中我使用了Java GUI作为和用户的交互方式,但是在上Java课的时候我对GUI和事件驱动这里并没有学的多好,可能是当时对编程还没有什么 ...
- 四则运算结对项目之GUI
本次结对编程让我学到了许多许多知识,受益匪浅!在此之前,我没想过我能做出一个双击运行的小程序. 感谢我的队友与我同心协力,感谢室友宇欣告诉我操作符为“最多多少”而不是“多少”并教我使用效能分析工具,感 ...
- 结对项目作业GUI
一.Coding.Net项目地址:https://git.coding.net/zhengsh589/CoupleProject.git 二.PSP表格(完成前): PSP 任务内容 计划共完成需要的 ...
- 四则运算结对编程(GUI)
四则运算GUI coding地址:https://git.dev.tencent.com/qyj814/GUI.git 结对伙伴:李梦宇 一.题目要求 定制出题要求.每次出题时用户都可以在界面上定制如 ...
- 201871030108-冯永萍 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
实验三 软件工程结对项目 项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs ...
- 201871030125-王芬 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
实验三 软件工程结对项目 项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs ...
- 201871030117-李亚楠 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 课程班级 这个作业要求链接 作业要求 我的课程学习目标 1.体验软件项目开发中的两个人合作.练习结对编程:2.掌握Github协作开发程序的操作方法:3.熟悉编程语言的综 ...
- 201871010203-陈鹏昱 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 学习软件工程的理论和知识,掌握软件开发流程,增强实践能力 这个作业在哪些方面帮助我实现学习目标 体验软件项目开发中 ...
- 201873030133-杨子豪 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 班级博客链接 这个作业要求链接 作业要求链接 我的课程学习目标 了解软件工程的作用与意义,将软件工程与过去所学相结合 这个作业在哪些方面帮助我实现学习目标 体验了结对式的 ...
随机推荐
- Python中sys模块sys.argv取值并判断
#!usr/bin/env python # -*- coding: utf-8 -*- # Author:Sun Xiaolin import sys judgement = sys.argv[1] ...
- FPGA-Xilinx原语调用之ODDR
记录背景:最近由于想实现GMIItoRGMII的功能,因此需要调用ODDR原语. ODDR:Dedicated Dual Data Rate (DDR) Output Register 通过ODDR把 ...
- 20155238 2016-2017-2 《Java程序设计》第六周学习总结
教材学习内容总结 第十章 串流设计 输入串流:将数据从来源取出. 输出串流:将数据写入目的地. 输入串流代表对象为java.io.InputStream实例 输出串流代表对象为java.io.Outp ...
- 北京Uber优步司机奖励政策(4月25日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- CF908G New Year and Original Order
题面 题意翻译 给定$n<=10^{700}$,问$1$到$n$中每个数在各数位排序后得到的数的和.答案$mod\;10^9+7$. 题解 考虑设$f[i][j][k][0/1]$表示前$i$位 ...
- lambda取两字符串的交集
取两个有规律字符串的交集,字符串的格式如下: “[3095139,9080109]” jar支持: fastjson 程序demo: import com.alibaba.fastjson.JSON; ...
- Python 字符串 整数 浮点数
• 几个函数: str() : 将一个整数或者浮点数变成字符串 int() : 将一个浮点数或一个字符串变成整数 float : 将一个整数或者字符串变成一个浮点型数据 • 整数的运算永远是精确的,而 ...
- SpringCloud 学习(二) :服务注册与发现Eureka
Spring Cloud应用中可以支持多种的服务治理框架,比如Eureka.Consul.Zookeeper等,现在我们用的是consul,本文以SpringCloud Dalston.SR5版本介绍 ...
- 2.5 Oracle之存储过程和MERGE INTO语句
一.MERGE INTO语句 1.merge into语句的功能:我们操作数据库的时候,有时候会遇到insert或者Update这种需求.我们操纵代码时至少需要写一个插入语句和更新语句并且还得单独写方 ...
- Flink架构分析之HA
抽象 LeaderElectionService 这个接口用于从一组竞选者中选出一个leader,其start方法需要传递一个LeaderContender竞选者作为参数,如果有多个竞选者,则每一个竞 ...