• 201571030334/201571030323实验三 软件工程结对项目


    实验三 软件工程结对项目

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

    结对伙伴博客地址:http://www.cnblogs.com/mumay12447/p/8715603.html

    一、需求分析

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

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

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

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

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

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

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

    二、设计类图:

     

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

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

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

    三、程序流程图:

    四、核心代码:

    搭建系统开始界面

    public Start()
        {
        
            JPanel south = new JPanel();
            
            JLabel label1 = new JLabel("欢迎同学们,是否要开始测试?",JLabel.CENTER); 
            JButton btn1 = new JButton("确定");
            JButton btn2 = new JButton("取消");
            add(label1);
            south.add(btn1);
            south.add(btn2);
            add(south,BorderLayout.SOUTH);
            Font font=new Font("华文行楷",Font.BOLD,20);
            label1.setFont(font);  
            label1.setForeground(Color.BLUE);//设置字体颜色
            //label1.setBackground(Color.GREEN);
             
             btn1.setFont(font);  
             btn1.setForeground(Color.BLUE); 
             btn1.setBackground(Color.CYAN);
             btn1.setBorder(BorderFactory.createRaisedBevelBorder());   
             btn1.addActionListener(new ActionListener()
                {
                    public void actionPerformed(ActionEvent event)
                    {
                        setVisible(false);
                        SimpleFrame0 frame = new SimpleFrame0();
                        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                        frame.setVisible(true);
                        
                    }
                });
                  
             btn2.setFont(font);  
             btn2.setBorder(BorderFactory.createRaisedBevelBorder());  
             btn2.setForeground(Color.BLUE);
             btn2.setBackground(Color.CYAN);
             btn2.addActionListener(new ActionListener()
                {
                    public void actionPerformed(ActionEvent event)
                    {
                        System.exit(0);
                    }
                });
                
            setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setTitle("四则运算系统");
            setLocation(500,200);
            
        }
        
    }
    View Code

    计时器

    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();
                            }
                        
                    }
                }
            }
    View Code

    绘制柱状图代码

    public void paint(Graphics g)
        {  
            int snum2 = Integer.parseInt(snum[0]);        
            File file = new File("result.txt");
            StringBuilder result = new StringBuilder();
            try
            {
                BufferedReader br = new BufferedReader(new FileReader(file));//构造一个BufferedReader类来读取文件
                String s = new String();
                do
                {
                    for(int i=0;i<4;i++)
                    {
                        s = br.readLine() ;//使用readLine方法,一次读一行
                        save[i] = Integer.parseInt(s);
                    }
                }
                while((s = br.readLine())!=null);
                br.close();    
            }
               catch(Exception e){
               e.printStackTrace();
            }
         
            int Width = 600;
            int Height = 450; 
            Random ran = new Random();
            int leftMargin = 10;//柱形图左边界  
            int topMargin = 50;//柱形图上边界  
            Graphics2D g2 = (Graphics2D) g;
            g2.translate(10, 100);
            int ruler = Height-topMargin-5;  
            int rulerStep = ruler/10;//将当前的高度评分为10个单位  
            g2.setColor(Color.BLACK);//绘制黑色背景  
            g2.fillRect(0, 0, Width, Height);//绘制矩形图  
            g2.setColor(Color.green);  
            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.red);  
            for(int i=0;i<4;i++){//绘制柱形图  
                int value =save[i]*4;//产生柱形的百分比  
                int step = (i+1)*50;//设置每隔柱形图的水平间隔为50   
                g2.fillRoundRect(leftMargin+step*2, Height-value-10, 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

     
  • 相关阅读:
    优质Android小部件:索尼滚动相册
    Linux常用命令:文件与目录
    Android高效计算——RenderScript(二)
    Android高效计算——RenderScript(一)
    实用控件分享:自定义逼真相机光圈View
    Binder中的asInterface解析
    Android Adapter的几个方法
    Android中各种Drawable总结
    win10配置CUDA+Tensorflow2.0的一些经验
    关于Flash Helper Service的问题
  • 原文地址:https://www.cnblogs.com/zhangcunhui/p/8719324.html
Copyright © 2020-2023  润新知