• 结对编程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的学习认识,虽然可能以后不从事编程方面,学到了这些也觉得很有意义。

  • 相关阅读:
    书本第十三章课后习题4、5、6
    软件工程一班第五小组知识树系统-软件测试计划
    第八周作业
    第七周作业——用面向对象方法分析研究书中习题2第3题中描述的机票预订系统,试建立它的对象模型、动态模型和功能模型。
    第六周作业——建立订货系统的用例模型
    第五周作业——用状态转换图描绘复印机的行为
    第四周作业——在你的实际项目旅游网站中,网页主页面主要有哪些模块?
    第三周作业—— 在软件开发的早期阶段为什么要进行可行性研究?应该从哪些方面研究目标系统的可行性?
    第二周作业——面向过程(或者叫结构化)分析方法与面向对象分析方法到底区别在哪里?请根据自己的理解简明扼要的回答。
    有学生提到,在大学选课的时候,可以写一个“刷课机”的程序,利用学校选课系统的弱点或漏洞,帮助某些人选到某些课程。或者帮助用户刷购票网站,先买到火车票。这些软件合法么?符合道德规范么?是在“软件工程”的研究范围么? 请大家讨论。
  • 原文地址:https://www.cnblogs.com/1yhq/p/6551202.html
Copyright © 2020-2023  润新知