实验三 软件工程结对项目

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\n",
                            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

 
 

 

posted on 2018-04-04 21:21  青~芜  阅读(184)  评论(2编辑  收藏  举报