201571030128/201571030118《小学生四则运算练习软件》项目结对报告

时间:2023-02-13 14:16:33

源码地址链接:  https://github.com/devilwjy/Second

需求分析:

(1)由计算机从题库文件中随机选择20道加减乘除混合算式,用户输入算式答案,程序检查答案是否正确,每道题正确计5分,错误不计分,20道题测试结束后给出测试总分;

(2)题库文件可采用实验二的方式自动生成,也可以手工编辑生成,文本格式如下:

201571030128/201571030118《小学生四则运算练习软件》项目结对报告

(3)程序为用户提供三种进阶四则运算练习功能选择:百以内整数算式(必做)、带括号算式、真分数算式练习;

(4)程序允许用户进行多轮测试,提供用户多轮测试分数柱状图,示例如下:

201571030128/201571030118《小学生四则运算练习软件》项目结对报告 

(5)程序记录用户答题结果,当程序退出再启动的时候,可为用户显示最后一次测试的结果,并询问用户可否进行新一轮的测试;

(6)测试有计时功能,测试时动态显示用户开始答题后的消耗时间。

(7)程序人机交互界面是GUI界面(WEB页面、APP页面都可),界面支持中文简体(必做)/中文繁体/英语,用户可以进行语种选择。

软件设计:

类图:

201571030128/201571030118《小学生四则运算练习软件》项目结对报告

 

流程图:

201571030128/201571030118《小学生四则运算练习软件》项目结对报告

各个模块的功能:

(1)calculate()类:随机生成整数或者分数四则运算题目。

(2)Main()类:调用calculate类随机生成四则运算表达式,调用选择模块,即Select()类。

(3)Select()类:让用户登录,并选择练习的题目类型,整数题或者分数题。

(4)Test()类:生成UI界面,方便用户进行练习。

(5)Summary()类:显示本轮的所得分数并打印出错误题目及其答案,让用户选择是否进行下一轮练习,或者选择进行“总结”,即查看分数柱状图。

(6)Histogram()类:画出每一轮得分的分数柱状图。

(7)TimerThread()类:产生计时功能,帮助用户计时。

核心代码:

计时功能:新建一个JFrame显示计时,同时将其位置设置在最上面放置,这样在做题的过程中可以实时查看。

 1 public class TimerThread extends JFrame implements Runnable
 2 {
 3      private JFrame frame;
 4      private JPanel timePanel;
 5      private JLabel timeLabel;
 6      private JLabel displayArea;
 7      private String DEFAULT_TIME_FORMAT = "HH:mm:ss";
 8      private int ONE_SECOND = 1000;
 9      int time = 1;    
10      boolean isRun = true; 
11      public TimerThread()
12      {
13          timePanel = new JPanel();
14          timeLabel = new JLabel("您本次用时:");
15          displayArea = new JLabel();
16          timePanel.add(timeLabel);
17          timePanel.add(displayArea);
18          this.add(timePanel);
19          this.setDefaultCloseOperation(EXIT_ON_CLOSE);
20          this.setBounds(800, 100, 200, 80);
21      }
22      public void run()
23      {
24          while(isRun)
25          {    
26              try {
27                  displayArea.setText(+time+"s");
28                  time++;
29                  Thread.sleep(1000);
30              } catch (InterruptedException e) {
31                  e.printStackTrace();
32              }
33          }
34      }
35 }

分数柱状图:在JFrame中加一个JPanel,然后在JPanel中加入矩形框和Label。

 1 public class Histogram extends JPanel 
 2 {
 3     private int x;
 4     private static int length ; 
 5     int i=0;
 6     public int[] count;
 7     ArrayList<JLabel> label = new ArrayList<JLabel>();
 8     public Histogram(final ArrayList<String> summer) 
 9     {
10         length = summer.size();
11         count = new int[length];
12         System.out.print(length);
13         this.setLayout(null);
14         for(int i=0;i<summer.size();i++)
15         {
16             count[i] = Integer.parseInt(summer.get(i));//将每轮练习所得分数传进count[i]
17         }
18         for(int i=1;i<summer.size();i=i+2)
19         {
20             JLabel Label = new JLabel("第"+((i+1)/2)+"轮",JLabel.LEFT);//显示第几轮
21             Label.setFont(new Font("SansSerif", Font.BOLD + Font.ITALIC, 18));
22             Label.setBounds(30+(i-1)*30, 610, 60,50);//给Label1设置位置
23             JLabel Label2 = new JLabel(count[i]+"",JLabel.CENTER);//显示分数
24             Label2.setFont(new Font("SansSerif", Font.BOLD + Font.ITALIC, 18));
25             Label2.setBounds(25+(i-1)*30, 555-6*count[i], 60,50);//给Label2设置位置
26             label.add(Label);
27             label.add(Label2);
28             this.add(label.get(i-1));
29             this.add(label.get(i));  
30         }
31     } 
32      protected void paintComponent(Graphics g) 
33      {
34          int x=10;
35          g.setColor(Color.red);
36          for (int i = 0; i < count.length; i++) 
37          {   
38              g.fillRect(x, 600-6*count[i], 30,6*count[i] );
39              x += 30; 
40          }
41      }
42 }

测试运行:

登录界面:输入学号和姓名,并选择做整数练习还是分数练习。

201571030128/201571030118《小学生四则运算练习软件》项目结对报告

选择整数练习:开始答题并且计时。

201571030128/201571030118《小学生四则运算练习软件》项目结对报告

答题完毕后:显示所得分数以及错误的题目和答案,同时计时停止,选择再来一轮或者是查看分数柱状图。

201571030128/201571030118《小学生四则运算练习软件》项目结对报告

选择分数练习:开始答题并且计时。

201571030128/201571030118《小学生四则运算练习软件》项目结对报告

答题完毕后:显示所得分数以及错误的题目和答案,同时计时停止,选择再来一轮或者是查看分数柱状图。

201571030128/201571030118《小学生四则运算练习软件》项目结对报告

答题结束后,根据几轮练习的得分画出分数柱状图。

201571030128/201571030118《小学生四则运算练习软件》项目结对报告

结对过程:

我们是一起设计的UI界面,因为没有什么分歧,所以初步设计定下来的很快。在代码实现部分因为会有很多大大小小的问题,所以两个人很是苦恼,除了有重要的事离开一段时间之外,整个周末的时间从早到晚都用来做这个项目,最后的结果还是不错的,差不多的功能都实现了,初次结对编程也进行的很愉快。

201571030128/201571030118《小学生四则运算练习软件》项目结对报告

 

结对作业的PSP:

PSP

任务内容

计划完成需要的时间(min)

实际完成需要的时间(min)

Planning

计划

60

100 

Estimite

估计任务所需时间,并规划大致工作步骤

60 

100 

Development

开发

890 

1256 

Analysis

需求分析 (包括学习新技术)

10 

Design Spec 

生成设计文档 

30

20 

Design Review 

设计复审(和同事审核设计文档) 

4

Coding Standard 

代码规范(为目前的开发指定合适的规范)

30 

20 

Design 

具体设计 

100

150 

Coding 

具体编码 

600 

700 

Code Review 

代码复审 

120

200 

Test 

测试(自我测试,修改代码,提交修改) 

100 

150 

Reporting 

报告 

38 

32 

Test Report 

测试报告 

Size Measurement

计算工作量

5

10 

Postmortem & Process Improvement Plan 

事后总结,并提出过程改进计划 

30 

20

汉堡评价法点评小伙伴:
我的小伙伴能力很强,跟她结对编程很轻松。因为她的逻辑思维能力很好,可以将全部代码串联起来,在代码出现错误时,排除一些不可能的原因,快速准确的找到症结所在;她的编程能力很强,在她的主导下,我们从开始的程序总体设计到后来的设计实现进行的都比较顺利;她的思维也很快,有时候我还没有反应过来她的代码已经敲好了,只等运行验证了;她的耐力很强,可以一直坐在电脑前面改很久的程序,不会不耐烦。测试程序的过程中,哪里有不足,我们两个人可以商量着进行修改。总体来说,跟她的合作很顺利,很开心。

感受和体会:

两个人结对编程确实比一个人单独写要高效,所以说1+1有时候真的是大于2的。两个人在初开始的设计上观点都差不多,所以没有异议的按照设计开始实现,我的编程能力比较差,但是她的编程能力很强,她在一些细节处理上可能会注意不到,而我在旁边可以提醒她,这正好可以互补,把各自擅长的发挥出来,比一个人写要快得多,往往我不会的地方,她可能会,或者她忽视的小问题,我会多加注意。两个人在一起发挥出来的能量有时候是超出预期的,而且两个人一起编程,可以互相鼓励,互相监督,共同进步。