• 《小学四则运算练习软件》GUI


    GitHub地址:https://github.com/TUOZF/sizeyunsuan.git

    • 需求分析

       在《实验二 软件工程个人项目》中,同学们实现了一个命令行四则运算出题小程序,本次实验采用结对编程方式,设计开发一个小学生四则运算练习软件,使之具有以下功能:

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

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

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

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

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

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

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

    • 软件设计

    程序流程图

    程序类图

    • 核心功能代码展示

      四则运算结果的判断:

    if( Expressions.get(0).equals(answers.get(0)) )
                        {answer1.setText("正确 "); sum++;}
                    else
                        answer1.setText("错误");
                    
                    if( Expressions.get(1).equals(answers.get(1)) )
                        {answer2.setText("正确 "); sum++;}
                    else
                        answer2.setText("错误");
                    
                    if( Expressions.get(2).equals(answers.get(2)) )
                        {answer3.setText("正确 "); sum++;}
                    else
                        answer3.setText("错误");
                    
                    if( Expressions.get(3).equals(answers.get(3)) )
                        {answer4.setText("正确 "); sum++;}
                    else
                        answer4.setText("错误"); 
    
    
    
                                    num.add(sum*5+"");
                    //num.add(sum+"");
                                    //将判断结果存入文件
                    try {
                           File f = new File("result.txt"); 
                        FileWriter fw = new FileWriter(f,true);
                        PrintWriter pw = new PrintWriter(fw);
                        //pw.println(" 201571030126");
                        //pw.println();
                        for(String con:num)
                         {
                              pw.println(con);               
                         }
                                
                        fw.close();
                                
                        } catch (IOException e) {
                        // TODO Auto-generated catch block
                            e.printStackTrace();
                        }    

      计时:

    class shishi3 extends Thread {
                private long noww = 0l;
                private long start = System.currentTimeMillis();// 程序启动时间的毫秒值
                private long time;
                public void run() {
                    int i=0;
                    while (true) {
    
                        noww = System.currentTimeMillis();// 获取一秒之后的毫秒值
                        time = noww - start;// 两个时间相减的到毫秒差
                        timetime=time;
                        String ssss=String.format("%02d:%02d:%02d
    ",
                                time / (1000 * 60 * 60) % 60/**/, 
                                time / (1000 * 60)% 60/**/, 
                                (time / 1000 % 60)/**/);// 格式化字符串输出
                   
                            l1.setText(ssss);
                            i++;
                            try {
                                Thread.sleep(1000);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        
                    }
                }
            }

      统计结果并绘制柱状图:

    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); 
                
            }
    • 程序运行

    • 结对过程

    • PSP

    PSP2.1

    任务内容

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

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

    Planning

    计划

    20

    30

           Estimate

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

    40

    40

    Development

    开发

    360

    480

    Analysis

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

    10

    10

     Design Spec

     设计

    20

    30

                  Design Review

    设计复审

    10

    10

                 Coding Standard

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

    5

    10

                    Design

      具体设计

    20

    20

                     Coding

      具体编码

    240

    320

                  Code Review

    代码复审

    20

    30

                       Test

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

    20

    40

         Reporting

    报告

    15

    20

           Test Report

    测试报告

    5

    10

          Size Measurement

      计算工作量

    3

    5

            Postmortem & Process     Improvement Plan

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

    5

    5

    • 请使用汉堡评价法给你的小伙伴一些点评

        结对编程以前也进行过,总的感觉来说,比一个人的效果要好,两个人一起合作编程,交流的时间多,思路开阔,容易发现一个人发现不了的错误,也可以及时改正错误,还可以增加团队合作意识,相信这对以后的训练很有帮助。

    • 结对编程真的能够带来1+1>2的效果吗?通过这次结对编程,请谈谈你的感受和体会。

        结对编程能带来1+1>2的这种效果,而且感觉很明显,如果一个人编程,在设计功能时有可能会忘记某些功能,或者说功能不完善,结对编程可以避免这种情况,而且两个人一起编程思路清晰,效率也就更高,总之,结对编程对我们的帮助是很大的。

  • 相关阅读:
    WHENEVER SQLERROR EXIT AND DDL
    WHENEVER SQLERROR EXIT AND DML
    我的友情链接
    我的友情链接
    我的友情链接
    我的友情链接
    我的友情链接
    我的友情链接
    我的友情链接
    我的友情链接
  • 原文地址:https://www.cnblogs.com/TUOZF/p/8697164.html
Copyright © 2020-2023  润新知