首页 > 代码库 > 结对作业

结对作业

结对分工:

何琴琴---093  1、答题计时功能 2、语言切换功能
翁彬妹---094  1、对错总数功能 2、代码规范

需求分析:

本次编程要求实现计时功能,能够记录用户答题的消耗时间,可以在用户开始答题时开始计时,然后提交答案时结束计时,这样两次的差值就是答题所用的时间。界面支持中文简体/中文繁体,其实就是在实现简体的基础上将显示界面和结束时答题错对数加入繁体版格式显示,而内部使用的函数等是没有变化的。

功能分析:

  • 基本功能:
    • 实现简体版的具有gui界面,同时支持整数与真分数,能控制生成题目的个数,统计对错数的随机四则运算
  • 扩展功能
    • 实现繁体版的随机四则运算;
    • 实现计时功能,能显示用户每次运算的时间;
    • 当答题超时或答题者自动退出时会弹出答题结束的对话框并退出
  • 高级功能(暂时还没有)

程序设计:

技术分享

代码展示:

根据文本框输入的数值判断答案的对错(简体版),而繁体版的只是将显示界面的简体中文切换为繁体字,判断对错的函数并没有任何改变。

 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;
        }
});

在点击开始按钮后,开始随机生成题目并且开始计时,每答完一道题目,会使用currentTimeMillis()函数记录下当前答题的时间,然后全部题目答题完毕后,将几次答题时间相加,显示出答题总时间。当答题超时或自动退出时会弹出答题结束的对话框并退出到前一个界面。

  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==60&&summary<tishu)
                    {
                        JOptionPane.showMessageDialog(null, "答题时间已到。答题总题数为"+(dadui+dacuo)+",答对题数为"+dadui+",答错题数为"+dacuo+",未答题题数为"+(tishu-dacuo-dadui)+",答题使用时间:"+(allduration+duration)/1000+"秒。");
                        frame.setVisible(false);
                        new 初级版题型选择();
                    }
                    String str=df.format(new Date(duration)); 
                    T7.setText(str);
                    }  
                }, 1000, 1000);
            allduration=allduration+duration;
            char a[]={‘+‘,‘-‘,‘ב,‘÷‘};
            int b=(int)(Math.random()*4);
            int c=(int)(Math.random()*100);
            int d=(int)(Math.random()*99+1);
            int g=(int)(Math.random()*100);
            int f=(int)(Math.random()*99+1);
            if(a[b]==a[0])
            {
                T2.setText(d+"/"+c+String.valueOf(a[b])+g+"/"+f);
                sum=(float)d/c+(float)g/f;
            }
            else if(a[b]==a[1])
            {
                T2.setText(d+"/"+c+String.valueOf(a[b])+g+"/"+f);
                sum=(float)d/c-(float)g/f;
            }
            else if(a[b]==a[2])
            {
                T2.setText(+d+"/"+c+String.valueOf(a[b])+"("+g+"/"+f+")");
                sum=((float)d/c)*((float)g/f);
            }
            else if(a[b]==a[3])
            {
                T2.setText(d+"/"+c+String.valueOf(a[b])+"("+g+"/"+f+")");
                sum=((float)d/c)/((float)g/f);
            }
        }
    });

当按初级版按钮时,进入初级版的选题界面,其他界面的按钮代码与此类似。

      button.addActionListener(new ActionListener(){
          public void actionPerformed(ActionEvent arg0) {
              getFrame().setVisible(false);
              new 初级版题型选择();
          }
      });

当按繁体版按钮时,进入繁体版的界面1。

      button_2.addActionListener(new ActionListener(){
          public void actionPerformed(ActionEvent arg0) {
              getFrame().setVisible(false);
              new 界面1();
          }
      });

点击帮助按钮,会出现帮助的显示框,简单介绍整个程序的用途。

    JTextPane textPane = new JTextPane();
    textPane.setFont(new Font("宋体", Font.PLAIN, 23));
    textPane.setText(" 这是一个小学生四则运算生成器!");
    panel.add(textPane);
    frame.getContentPane().setLayout(groupLayout);
    //设置窗口的位置
    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(true);//设置窗口大小的可变性

程序运行:

技术分享
技术分享
技术分享
技术分享
技术分享
技术分享
技术分享
技术分享
技术分享
技术分享

小结感受:

小结:本次作业代码大部分功能由何琴琴同学完成,因为我的是用c语言编写,介于c语言界面设计不会顾我们选择好java来编写图形界面。首先我们确定用java来编写然后确定界面和要实现的功能进行分析。分析好之后我们先对界面进行排版,排版之后对功能进行实现。从中我们有很多不同的想法,经过讨论我们选择简单的毕竟时间有限。我作为本次编程的领航员,琴琴为导航员。我们发现在计算式在按钮的实现上有瑕疵不够直观容易让人产生误解。我们在编程过程中互相吸取好的编程习惯。合作让我们对很多细节的考虑更加清晰。
先来一片面包:基于我们上次用的是c语言来实现控制台的功能而windows api 薄弱才开始学所以放弃第一次的作业,采用java编写。毕竟所有的都是相通的,java容易实现界面。
再把肉放上:在c语言吸取基本功能的实现+-*/分数等
再来一片面包:对界面和函数工功能的整合

PSP展示:

技术分享

码市链接:https://coding.net/u/wengbm/p/calculater/git

结对作业