结对编程1

结对队友学号:201421123036 201421123048

项目代码:

https://git.coding.net/YJh_/Cal.git


 

题目描述:

我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序。进一步,本次要求把这个程序做成GUI(可以是Windows PC 上的,也可以是Mac、Linux,web,手机上的),成为一个有基本功能、一定价值的程序。在下面的功能需求中实现两个:

  1. 记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算。
  2. 有计时功能,能显示用户开始答题后的消耗时间。
  3. 界面支持中文简体/中文繁体/英语,用户可以选择一种;

 

需求分析:

  1. 在作业一中已经完成了四则运算的分数算法。
  2. 在控制台的输入操作不够人性化,使用GUI界面让用户使用更加方便。
  3. 在用户使用程序做题时需要记录用户做题的对错题数。
  4. 针对不同的用户,需要用到不同的语言,繁体字,简体字,英文版。
  5. 对于能力不同的用户,需要有难易不同程度的题目。
  6. 如果需要测试完成题目所用的时候,需要有记录做题的消耗时间。

 

功能分析:

  • 基本功能
    • GUI界面显示程序
    • 记录做题时间
    • 记录用户做题总数和正确题数
    • 收集用户的错题集并显示给用户
    • 提供简体繁体英文界面
  • 拓展功能
    • 题目难度分为初级中级高级可供用户选择
    • 在各个难度中还有整数和整数型,整数和分数型,分数和分数型

 

程序设计:

用户操作运行流程:

 

主要分类:

Calculator类


 

程序测试

测试截图:

 

部分代码展示:

public class LoginMiddle {
    float sum;
    int dadui=0;
    int dacuo=0;
    int tishu;
    int noanswer=0;
    int summary=0;
    String parten = "0.00";
    DecimalFormat decimal = new DecimalFormat(parten);
    String str;
    static Timer timer = null; 
    static SimpleDateFormat df=new SimpleDateFormat("mm:ss");     
    long starttime;
    long finishtime;
    long duration;
    long allduration;
    private JFrame frame;
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    LoginMiddle window = new LoginMiddle();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
    public LoginMiddle() {
        initialize();
    }
    private void initialize() {
        frame = new JFrame();
        frame.setTitle("实战界面中级版两个整数与一个分数型");
        frame.setSize(750,230);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Label L1=new Label("总题数:",Label.RIGHT);
        Label L2=new Label("题目:",Label.RIGHT);
        Label L3=new Label("请输入答案:",Label.RIGHT);
        Label L4=new Label("答题情况:",Label.RIGHT);
        Label L5=new Label("答对题数:",Label.RIGHT);
        Label L6=new Label("答错题数:",Label.RIGHT);
        Label L7=new Label("答题时间:",Label.RIGHT);
        final JButton B1=new JButton("开始");
        final JButton B2=new JButton("下一题");
        final JButton B3=new JButton("退出");
        final JTextField T1=new JTextField(5);
        final JTextField T2=new JTextField(10);
        final JTextField T3=new JTextField(5);
        final JTextField T4=new JTextField(20);
        final JTextField T5=new JTextField(10);
        final JTextField T6=new JTextField(10);
        final JTextField T7=new JTextField(10);
        JPanel panel=new JPanel();
        JPanel panel0=new JPanel();
        JPanel panel1=new JPanel();
        JPanel panel2=new JPanel();
        JPanel panel3=new JPanel();
        panel.add(panel0);
        panel.add(panel1);
        panel0.add(panel2);
        panel0.add(panel3);
        frame.getContentPane().add(panel,"Center");
        L1.setFont(new java.awt.Font("宋体", 1, 14));
        L2.setFont(new java.awt.Font("宋体", 1, 14));
        L3.setFont(new java.awt.Font("宋体", 1, 14));
        L4.setFont(new java.awt.Font("宋体", 1, 14));
        L5.setFont(new java.awt.Font("宋体", 1, 14));
        L6.setFont(new java.awt.Font("宋体", 1, 14));
        L7.setFont(new java.awt.Font("宋体", 1, 14));
        panel.setLayout(new FlowLayout());
        panel0.setLayout(new GridLayout(1,2));
        panel2.setLayout(new GridLayout(4,2,5,10));
        panel3.setLayout(new GridLayout(4,2,10,10));
        panel2.add(L1);
        panel2.add(T1);
        panel2.add(L2);
        panel2.add(T2);
        panel2.add(L3);
        panel2.add(T3);
        panel2.add(L4);
        panel2.add(T4);
        panel3.add(L5);
        panel3.add(T5);
        panel3.add(L6);
        panel3.add(T6);
        panel3.add(L7);
        panel3.add(T7);
        panel1.add(B1);
        panel1.add(B2);
        panel1.add(B3);
        B3.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent arg0) {        
                JOptionPane.showMessageDialog(null, "答题总题数为"+tishu+",答对题数为"+dadui+",答错题数为"+dacuo+",未答题题数为"+noanswer+"。");
                frame.setVisible(false);
                new Middle();
            }            
        });
        B1.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                tishu=Integer.parseInt(T1.getText());
                noanswer=tishu-dadui-dacuo;
                summary++;
                timer = new Timer(); 
                finishtime=System.currentTimeMillis();
                starttime=finishtime;
                timer.schedule(new TimerTask() 
                {
                    public void run() {    
                        finishtime=System.currentTimeMillis();
                        duration=finishtime-starttime;
                        if(duration/1000==27&&summary<tishu)
                        {
                            JOptionPane.showMessageDialog(null, "答题时间已到。答题总题数为"+(dadui+dacuo)+",答对题数为"+dadui+",答错题数为"+dacuo+",未答题题数为"+(tishu-dacuo-dadui)+",答题使用时间:"+(allduration+duration)/1000+"秒。");
                            frame.setVisible(false);
                            new Middle();
                        }
                        String str=df.format(new Date(duration)); 
                        T7.setText(str);
                        }  
                    }, 1000, 1000);
                allduration=allduration+duration;
                char a[]={'+','-','×','÷'};
                char b[]={'+','-','×','÷'};
                int c=(int)(Math.random()*4);
                int d=(int)(Math.random()*4);
                int f=(int)(Math.random()*100);
                int g=(int)(Math.random()*99+1);
                int h=(int)(Math.random()*99+1);
                int l=(int)(Math.random()*99+1);
              
        T3.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                str= decimal.format(sum);
                if(Float.parseFloat(str)==Float.parseFloat(T3.getText()))
                {
                    T4.setText("恭喜你!答对了!");
                    dadui++;
                    T5.setText(String.valueOf(dadui));
                }
                else
                {
                    T4.setText("真遗憾!答错了!正确答案是"+Float.parseFloat(str));
                    dacuo++;
                    T6.setText(String.valueOf(dacuo));
                }
                noanswer=tishu-dadui-dacuo;
            }
        });
        B2.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                if(summary==tishu)
                {
                    JOptionPane.showMessageDialog(null, "答题已完成。答题总题数为"+tishu+",答对题数为"+dadui+",答错题数为"+dacuo+",未答题题数为"+noanswer+",答题使用时间:"+allduration/1000+"秒。");
                    frame.setVisible(false);
                    new Middle();
                }
                else
                {
                    T2.setText(null);
                    T3.setText(null);
                    T4.setText(null);
                }
            }
        });
        Toolkit kit = Toolkit.getDefaultToolkit();        
        Dimension screenSize = kit.getScreenSize();        
        int w1 = screenSize.width;        
        int h = screenSize.height;        
        int x1 = w1/3;        
        int y1 = h/5;    
        frame.setLocation(x1,y1);
        frame.setVisible(true);
        frame.setResizable(false);
    }

 PSP:

PSP2.1 Personal Software Process Stages Time (%) Senior Student(/day) Time (%)(/day)
Planning 计划 8 15
· Estimate 估计这个任务需要多少时间 8 7
Development 开发 6 7
· Analysis 需求分析 (包括学习新技术) 1 1
· Design Spec 生成设计文档 1 1
· Design Review 设计复审 0 0
· Coding Standard 代码规范 1 1
· Design 具体设计 5 4
· Coding 具体编码 2 2
· Code Review 代码复审 1 1
· Test 测试(自我测试,修改代码,提交修改) 3 3
Reporting 报告 1 1
·Test Report 测试报告 1 1
· Size Measurement 计算工作量 2 2
·Postmortem & Process Improvement Plan 并提出过程改进计划 0 0
 

小结感受:

  • 结队编程真的能够带来1+1>2的效果,编写和实现这个程序过程很漫长,两个人的征讨也挺多的,一开始觉得两个人合作好像很麻烦,进度很很慢,可是到了过了几天,两个人的磨合期过后,真的带来了1+1>2的效果。
  • 在结对编程一开始我是扮演领航员的角色的,在一边审查队友的代码和提供一些界面上的设计建议。
  • 在编写代码里面我是负责中级难度的编写的,主要是模仿队友初级难度来编写的,因为基础相对比较差。在我自己编写代码的时候,队友会时常提醒我变量名称的命名,在Eclipse编写中,经常出现常规的错误,还有一些函数的使用,比如标签按钮设置位置大小背景灯。有点拖累了队友,有点不好意思哦。
  • 首先一开始结对一起编程程序,对于我来说编程十分困难,基本功太差了,但是在中间要是有什么好的建议和想法,都有会利用给人提意见的方式:给人一个汉堡包,给队友一些意见,换个好的角度来给队友评价
  • 最后总结一点,在这段漫长又痛苦的一周里,学到了很多,特别是两个人合作的重要性,还有对GUI的学习认识,虽然可能以后不从事编程方面,学到了这些也觉得很有意义。

 

合作照片:

 

posted @ 2017-03-14 23:41  叶华琴  阅读(163)  评论(1编辑  收藏  举报