GitHub仓库地址:
https://github.com/Sophur/Team-four-operation
一、需求分析
(1)由计算机从题库文件中随机选择20道加减乘除混合算式,用户输入算式答案,程序检查答案是否正确,每道题正确计5分,错误不计分,20道题测试结束后给出测试总分;
(2)题库文件可采用实验二的方式自动生成,也可以手工编辑生成,文本格式如下:

(3)程序为用户提供三种进阶四则运算练习功能选择:百以内整数算式(必做)、带括号算式、真分数算式练习;
(4)程序允许用户进行多轮测试,提供用户多轮测试分数柱状图,示例如下:

(5)程序记录用户答题结果,当程序退出再启动的时候,可为用户显示最后一次测试的结果,并询问用户可否进行新一轮的测试;
(6)测试有计时功能,测试时动态显示用户开始答题后的消耗时间。
(7)程序人机交互界面是GUI界面(WEB页面、APP页面都可),界面支持中文简体(必做)/中文繁体/英语,用户可以进行语种选择。
二、软件设计
程序流程图:

类图:

三、核心功能代码展示
给queding按钮添加监听器,计算本轮分数的核心代码:

1 //确定按钮的点击事件
2 queding.addActionListener(new ActionListener() {
3 public void actionPerformed(ActionEvent e) {
4
5 a1[0]=ans1.getText();
6 a1[1]=ans2.getText();
7 a1[2]=ans3.getText();
8 a1[3]=ans4.getText();
9 a1[4]=ans5.getText();
10 a1[5]=ans6.getText();
11 a1[6]=ans7.getText();
12 a1[7]=ans8.getText();
13 a1[8]=ans9.getText();
14 a1[9]=ans10.getText();
15 a1[10]=ans11.getText();
16 a1[11]=ans12.getText();
17 a1[12]=ans13.getText();
18 a1[13]=ans14.getText();
19 a1[14]=ans15.getText();
20 a1[15]=ans16.getText();
21 a1[16]=ans17.getText();
22 a1[17]=ans18.getText();
23 a1[18]=ans19.getText();
24 a1[19]=ans20.getText();
25
26 int sum=0;
27 for(int i=0;i<20;i++){
28 if(a[i].equals(a1[i])){
29 sum=sum+5;
30 }else{
31 sum=sum+0;
32 }
33 }
34 grade1.setText(String.valueOf(sum));
35 //System.out.println(sum);
36
37 }
38 });
给bu3按钮添加监听器,输出成绩柱状图:

1 bu3.addActionListener(new ActionListener() {
2 public void actionPerformed(ActionEvent e) {
3 Diagram dg = new Diagram();
4 dg.setVisible(true);
5 }
6 });
Diagram类的具体实现:

1 import java.awt.Color;
2 import java.awt.Graphics;
3 import java.awt.Graphics2D;
4 import java.util.Random;
5 import javax.swing.JFrame;
6
7 public class Diagram extends JFrame{
8
9 //绘制柱形统计图
10 private Random ran;
11 public Diagram(){
12 super();
13 ran = new Random();
14 setTitle("成绩柱状图");
15 setBounds(100, 100, 400, 271);
16 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
17 }
18 @Override
19 public void paint(Graphics g){
20 int Width = getWidth();
21 int Height = getHeight();
22 int leftMargin = 20;//柱形图左边界
23 int topMargin = 50;//柱形图上边界
24 Graphics2D g2 = (Graphics2D) g;
25 int ruler = Height-topMargin-5;
26 int rulerStep = ruler/10;//将当前的高度评分为10个单位
27 g2.setColor(Color.WHITE);//绘制白色背景
28 g2.fillRect(0, 0, Width, Height);//绘制矩形图
29 g2.setColor(Color.black);
30 g2.setColor(Color.blue);
31 int grade[]= {60,40,100};
32 for(int i=0;i<grade.length;i++){//绘制柱形图
33 int value=(grade[i]/10)*rulerStep; //矩形的高
34 int value1=grade[i];
35 int step = (i+1)*40;//设置每隔柱形图的水平间隔为40
36 //绘制圆角矩形
37 g2.fillRect(leftMargin+step*2, Height-value, 40, value*3);
38 //纵轴的编号
39 g2.drawString("第"+(i+1)+"轮"+grade[i]+"分", leftMargin+step*2, Height-value-5);
40 }
41 }
42
43 }
四、程序运行
程序运行首先出现以下界面:

计时开始,进行答题,点击确定按钮后,答案保存并输出本轮分数:

点击输出柱状图按钮后显示柱状图:

五、结队过程
此次结对过程很愉快,在小伙伴身上学到了很多东西,一起努力,一起进步的感觉很愉快!以下为结对照片:

六、本次PSP展示
|
PSP2.1 |
任务内容 |
计划共完成需要的时间(day) |
实际完成需要的时间(day) |
|
Planning |
计划 |
2 |
1.5 |
|
· Estimate |
· 估计这个任务需要多少时间,并规划大致工作步骤 |
8 |
9 |
|
Development |
开发 |
7 |
7 |
|
·· Analysis |
需求分析 (包括学习新技术) |
2 |
2 |
|
· Design Spec |
· 生成设计文档 |
1 |
0.5 |
|
· Design Review |
· 设计复审 (和同事审核设计文档) |
2 |
3 |
|
· Coding Standard |
代码规范 (为目前的开发制定合适的规范) |
1 |
0.5 |
|
· Design |
具体设计 |
6 |
7 |
|
· Coding |
具体编码 |
7 |
6 |
|
· Code Review |
· 代码复审 |
0.5 |
1 |
|
· Test |
· 测试(自我测试,修改代码,提交修改) |
1 |
2 |
|
Reporting |
报告 |
2 |
3 |
|
·· Test Report |
· 测试报告 |
0.5 |
0.3 |
|
· Size Measurement |
计算工作量 |
0.5 |
0.5 |
|
· Postmortem & Process Improvement Plan |
· 事后总结 ,并提出过程改进计划 |
0.5 |
0.5 |
七、请使用汉堡评价法给你的小伙伴一些点评。
汉堡评价法其实我没太理解它的意思。但是本次结对过程我们确实在一些问题上出现过一些分歧,而且又因为是第一次结对合作,所以对小伙伴的编码习惯认识的不是很透彻,很难从最内层(本质和基本属性)方面进行反馈。所以两人在结对过程中的交流还是很客气的。
八、结对编程真的能够带来1+1>2的效果吗?通过这次结对编程,请谈谈你的感受和体会。
能的!如果是我一个人在完成这个项目的话,很有可能我会放弃这个项目,在同伴不懈努力的影响下我坚持完成了我不擅长的代码。