小学四则运算结对项目报告(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 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 班级博客链接 这个作业要求链接 作业要求链接 我的课程学习目标 了解软件工程的作用与意义,将软件工程与过去所学相结合 这个作业在哪些方面帮助我实现学习目标 体验了结对式的 ...
随机推荐
- Delphi的idhttp报IOHandler value is not valid错误的原因
出现这种问题的原因是由于访问的 URL地址为https或存在其跳转地址为https. 首先单纯使用idhttp是只能访问http,而https则需要搭配IdSSLIOHandlerSocketOpen ...
- MacOS(10.11.6)+Qt(5.5.1)+Xcode(8.2) C++开发环境配置
VMware虚拟机安装MacOS(这里安装的是MacOS X 10.11.6), 百度很多, 不再详述. 安装Xcode(这里安装的是Xcode8.2) 下载(https://developer.ap ...
- python3通过纯真IP数据库查询IP归属地信息
在网上看到的别人写的python2的代码,修改成了python3. 把纯真IP数据库文件qqwry.dat放到czip.py同一目录下. #! /usr/bin/env python # -*- co ...
- 关于Matlab在绘图时中文字体显示不一致的问题
我的运行环境: OS: Win10 教育版 64-bit Matlab版本:Matlab 2017a 64-bit 在使用Matlab绘图时,而横坐标轴.纵坐标轴.标题有汉字时,会发现在GUI的显示 ...
- 大数据入门第八天——MapReduce详解(四)本地模式运行与join实例
一.本地模式调试MR程序 1.准备 参考之前随笔的windows开发说明处:http://www.cnblogs.com/jiangbei/p/8366238.html 2.流程 最重要的是设置Loc ...
- 大数据入门第七天——MapReduce详解(一)入门与简单示例
一.概述 1.map-reduce是什么 Hadoop MapReduce is a software framework for easily writing applications which ...
- VB6 写文件
Private Sub Form_Load() Dim nHandle As Integer Dim FilePath As String FilePath = "c:\wgscd\17.t ...
- 20155327李百乾《网络对抗》逆向及Bof基础
20155327李百乾<网络对抗>逆向及Bof基础 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任 ...
- 20155338《网络对抗技术》 Exp1 PC平台逆向破解
20155338<网络对抗技术> Exp1 PC平台逆向破解 实践目标 1.实践的对象是一个名为pwn1的linux可执行文件. 2.该程序正常执行流程是:main调用foo函数,foo函 ...
- 20145209刘一阳《JAVA程序设计》第五周课堂测试
第五周课堂测试 1.下列关于内部类的说法,正确的是(ABD) A .其他类不可以用某个类的内部类声明对象. B .内部类字节码文件的名字格式是"外嵌类名$内部类名". C .内部类 ...