小学生四则运算练习软件

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

结对伙伴博客地址:http://www.cnblogs.com/zhangcunhui/

Github仓库主页链接地址:https://github.com/huicunzhang/Sizeyunsuan2

  • 需求分析

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

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

小学生四则运算练习软件

 

 

 

 

 

 

 

 

 

 

 

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

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

小学生四则运算练习软件

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

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

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

  • 设计类图:

小学生四则运算练习软件

 

Start类:用来创建进入系统的界面;

SimpleFrame类:做题界面、随机出题、调用shishi3类中的计时功能;

Sort类:成绩汇总界面,以柱状图的形式展现,用数组记录每次测试的结果。

  • 程序流程图:

小学生四则运算练习软件

  • 核心代码:

 判断结果对错的代码:

小学生四则运算练习软件小学生四则运算练习软件
 1 if( Expressions.get(0).equals(answers.get(0)) )
 2                     {answer1.setText("正确 "); sum++;}
 3                 else
 4                     answer1.setText("错误");
 5                 
 6                 if( Expressions.get(1).equals(answers.get(1)) )
 7                     {answer2.setText("正确 "); sum++;}
 8                 else
 9                     answer2.setText("错误");
10                 
11                 if( Expressions.get(2).equals(answers.get(2)) )
12                     {answer3.setText("正确 "); sum++;}
13                 else
14                     answer3.setText("错误");
15                 
16                 if( Expressions.get(3).equals(answers.get(3)) )
17                     {answer4.setText("正确 "); sum++;}
18                 else
19                     answer4.setText("错误"); 
20 
21 
22 
23                                 num.add(sum*5+"");
24                 //num.add(sum+"");
25                                 //将判断结果存入文件
26                 try {
27                        File f = new File("result.txt"); 
28                     FileWriter fw = new FileWriter(f,true);
29                     PrintWriter pw = new PrintWriter(fw);
30                     for(String con:num)
31                      {
32                           pw.println(con);               
33                      }
34                             
35                     fw.close();
36                             
37                     } catch (IOException e) {
38                     // TODO Auto-generated catch block
39                         e.printStackTrace();
40                     }
View Code

计时器代码:

小学生四则运算练习软件小学生四则运算练习软件
 1 class shishi3 extends Thread {
 2             private long noww = 0l;
 3             private long start = System.currentTimeMillis();// 程序启动时间的毫秒值
 4             private long time;
 5             public void run() {
 6                 int i=0;
 7                 while (true) {
 8 
 9                     noww = System.currentTimeMillis();// 获取一秒之后的毫秒值
10                     time = noww - start;// 两个时间相减的到毫秒差
11                     timetime=time;
12                     String ssss=String.format("%02d:%02d:%02d\n",
13                             time / (1000 * 60 * 60) % 60/**/, 
14                             time / (1000 * 60)% 60/**/, 
15                             (time / 1000 % 60)/**/);// 格式化字符串输出
16                
17                         l1.setText(ssss);
18                         i++;
19                         try {
20                             Thread.sleep(1000);
21                         } catch (InterruptedException e) {
22                             e.printStackTrace();
23                         }
24                     
25                 }
26             }
27         }
View Code

柱状图代码: 

小学生四则运算练习软件小学生四则运算练习软件
int Width = 400;
        int Height = 450; 
        Random ran = new Random();
        int leftMargin = 15;//柱形图左边界  
        int topMargin = 50;//柱形图上边界  
        Graphics2D g2 = (Graphics2D) g;
        g2.translate(50, 100);
        int ruler = Height-topMargin-5;  
        int rulerStep = ruler/10;//将当前的高度评分为10个单位  
        g2.setColor(Color.gray);//绘制白色背景  
        g2.fillRect(0, 0, Width, Height);//绘制矩形图  
        g2.setColor(Color.LIGHT_GRAY);  
        for(int i=0;i<=10;i++)
     {//绘制灰色横线和百分比  
            g2.drawString((100-10*i)+"", 10, topMargin+rulerStep*i);//写下百分比  
            g2.drawLine(10, topMargin+rulerStep*i, Width, topMargin+rulerStep*i);//绘制灰色横线  
        }  
        g2.setColor(Color.PINK);  
        for(int i=0;i<4;i++)
     {//绘制柱形图  
            int value =save[i]*4;// ran.nextInt(Height-topMargin-10)+10;//随机产生柱形的百分比  
            int step = (i+1)*35;//设置每隔柱形图的水平间隔为40  
            //绘制矩形  
            g2.fillRoundRect(leftMargin+step*2, Height-value-10, 40, value, 40, 10); 
            //g2.fillRoundRect(leftMargin+step*2, Height-value, 40, value, 40, 10);  
            //列出产品的编号  
            g2.drawString("测试"+(i+1), leftMargin+step*2, Height-value-15); 
            
        }
View Code
  • 运行结果:

 小学生四则运算练习软件小学生四则运算练习软件

小学生四则运算练习软件

 

  • 结对过程:

小学生四则运算练习软件

  • 总结与评价:

   在本次结对过程中,我和我的小伙伴先通过查阅资料对软件系统进行了详细的设计,并作了合理的分工,但理想很丰满,现实过于骨感呐,由于双方编程基础都比较弱,开始去编程的时候出现了很多的困难,没办法,只好再次进行设计,去了很多复杂的东西,从简单的功能入手,等到程序能运行之后再慢慢进行补充。由于双方都不是很要强的那种,加之关系也好,在合作过程中能比较愉快地交流。

  对于结对编程真的能够带来1+1>2的效果的说法,我自己是很赞同的,以前一个人编程完成实验项目,就算完成了也仍然会存在很多的问题,发现问题不及时,后知后觉的,但在此次结对过程中,我深切体会到了合作的力量,结对完成项目,无论在设计还是编程实现过程中,都能让该过程实现得堪称完美,存在的问题能得到及时的反馈、纠正,但前提是沟通要到位。结对完成还能收获其他的很多东西,比方说合作能力,通过结对,合作能力能得到不断提升。

  • PSP:

 

PSP2.1

任务内容

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

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

Planning

计划

10

10

·       Estimate

·  估计这个任务需要多少时间,并规划大致工作步骤

10

10

Development

开发

1302

1065

··       Analysis

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

10

20

·       Design Spec

·  生成设计文档

5

5

·       Design Review

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

2

5

·       Coding Standard

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

5

5

·       Design

  具体设计

30

25

·       Coding

  具体编码

1200

960

·       Code Review

·  代码复审

30

20

·       Test

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

20

25

Reporting

报告

25

28

··       Test Report

·  测试报告

10

5

·       Size Measurement

  计算工作量

5

3

·       Postmortem & Process Improvement Plan

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

10

20