zoukankan      html  css  js  c++  java
  • 《小学四则运算练习软件》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的效果。一个人编程的时候遇到问题有时候会卡好长时间,有时候很简单的错误也需要好久才能找见,但是结对编程的时候这种问题出现次数比较少,遇到问题时解决问题的思路和时间会很大幅度的减少,经过两个人的讨论会对问题理解的更透彻,效率更高,所以说结对编程和团队合作还是很有必要的。

  • 相关阅读:
    oracle存储过程
    PHP文件锁 解决并发问题
    如何从svn下载以前的项目版本
    文件上传所遇到的413问题
    数据库索引优化
    mysql索引的应用场景以及如何使用
    Elasticsearch删除数据之_delete_by_query
    同时安装CUDA8.0和CUDA9.0
    Linux 中用 dd 命令来测试硬盘读写速度
    Temporarily disable Ceph scrubbing to resolve high IO load
  • 原文地址:https://www.cnblogs.com/niuruixin/p/8691528.html
Copyright © 2011-2022 走看看