zoukankan      html  css  js  c++  java
  • 《小学四则运算练习软件》

    源码在Github的仓库主页链接地址:https://github.com/cy0325/Problem-software.git

    小伙伴的博客链接地址:http://www.cnblogs.com/rucr/p/8710014.html

    我的学号:201571030101

    小伙伴的学号:201571030125

    1. 需求分析:

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

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

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

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

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

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

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

    2. 软件设计:使用类图。

                  MyDBConnection用于连接数据库,连接数据可成功之后,用login类调用DBOperation类,对数据库中的user表进行操作,增加用户信息。TestMysql用于连接数据库,

          并对数据数据库进行操作,Myframe中,调用数据库中questionbank表,用于随机出题,之后取出数据库中答案,和用户的答案进行比较,然后给出用户的得分情况,将

          每一轮的得分放入柱状图中,其中Chart用户绘柱状图,在Myframe中进行调用。

     

    3. 核心功能代码展示:展示核心功能代码。

    (1)数据库test连接代码,用于存放questinbank表和user表。

     1 public class TestMysql {
     2     
     3 
     4     //登陆本地数据库
     5     private static final String url = "jdbc:mysql://123.206.7.198:3307/test";   
     6     private  static final String user = "qinxh";  
     7     private  static final String password = "031578";
     8     
     9     private static ResultSet ret = null;
    10     private  static final String name = "com.mysql.jdbc.Driver";
    11     public Connection conn = null;  
    12     public PreparedStatement pst = null; 
    13     public  TestMysql() {  
    14         try {  
    15             Class.forName(name);//指定连接类型  
    16             conn = DriverManager.getConnection(url, user, password);//获取连接             
    17             
    18         } catch (Exception e) {  
    19             e.printStackTrace();  
    20         }  
    21     }  
    View Code

    (2)test中表questionbank的操作代码,用于存放四则运算题,在题库中,已经放好10000道题。

     1 //查询及其他
     2     public void changeMySqlDate(String sql) {
     3         try {
     4             System.out.println("接收到的参数为:"+sql);
     5             pst=conn.prepareStatement(sql);
     6             pst.executeUpdate();
     7 //            pst.close();
     8         } catch (SQLException e) {
     9             // TODO Auto-generated catch block 
    10             e.printStackTrace();
    11         }
    12     }
    13     
    14     
    15     //插入删除操作
    16     public ResultSet selectSqlDate(String sql) {
    17         try {
    18             System.out.println("接收到的插入删除参数为:"+sql);
    19             pst=conn.prepareStatement(sql);
    20             ret = pst.executeQuery();
    21             return ret;
    22         } catch (SQLException e) {
    23             // TODO Auto-generated catch block
    24             e.printStackTrace();
    25             return null;
    26         } 
    27     }
    28     
    29     //关闭mysql
    30     public void closeMySql() {
    31         try {  
    32             this.conn.close();   
    33         } catch (SQLException e) {  
    34             e.printStackTrace();  
    35         }
    36     }
    37     
    38     
    39     //关闭数据表
    40     @SuppressWarnings("static-access")
    41     public void closeChart() {  
    42         try {    
    43             this.pst.close();
    44             this.ret.close();
    45         } catch (SQLException e) {  
    46             e.printStackTrace();  
    47         }  
    48     } 
    49 }
    View Code

    (3)test中表user的操作代码,用于存放用户信息。

     1 public void insertData(String name,String password,int scores){  
     2         try{  
     3             String newType1=new String(name.getBytes(),"GBK");//字节转码  
     4             String newType2=new String(password.getBytes(),"GBK");  
     5             String sql="INSERT INTO user(scores,name,password)VALUES("+scores+",'"+newType1+"','"+newType2+"')";  
     6             stmt.executeUpdate(sql);//更新语句  
     7         }catch(Exception e1){  
     8             e1.printStackTrace();  
     9         }  
    10     }  
    11     public void deleteData(int scores){  
    12         String sql="DELETE FROM user WHERE scores="+scores+"";  
    13         System.out.print(sql);  
    14         try{  
    15             stmt.executeUpdate(sql);  
    16             //System.out.println("一条记录被删除");  
    17         }catch(SQLException e){  
    18             e.printStackTrace();  
    19         }  
    20     }  
    21     public void updateData(int mscores,int scores,String name,String password){//修改  
    22         String sql="UPDATE user SET scores="+scores+",name='"+name+"',password='"+password+"'where scores="+mscores+"&&name='"+name+"'&&password='"+password+"'";  
    23         try{  
    24             stmt.executeUpdate(sql);  
    25         }catch(SQLException e){  
    26             e.printStackTrace();  
    27         }  
    28     }  
    29     public boolean  selectPassword(String mpassword){//查询密码  
    30         String sql="SELECT scores,name,password FROM user";  
    31         try{  
    32             ResultSet rs=stmt.executeQuery(sql);//返回结果集  
    33             while(rs.next()){//指针向后移动  
    34                 password=rs.getString("password");  
    35                 number2++;  
    36                 //System.out.print(rs.getString("password")+"  ");  
    37                 if(password.equals(mpassword)&&(number2==number1)){  
    38                     //System.out.print("number2:"+number2);  
    39                     return true;  
    40                 }  
    41             }  
    42               
    43         }catch(Exception e){  
    44             e.printStackTrace();  
    45         }  
    46         return false;  
    47     }  
    48     public boolean selectName(String mname){//查询id  
    49         String sql="SELECT scores,name,password FROM user";  
    50         try{  
    51             ResultSet rs=stmt.executeQuery(sql);//返回结果集  
    52             while(rs.next()){//指针向后移动  
    53                 name=rs.getString("name");  
    54                 number1++;  
    55                 if(name.equals(mname)){  
    56                     //System.out.print("number1:"+number1);  
    57                     return true;  
    58                 }  
    59             }  
    60               
    61               
    62         }catch(Exception e){  
    63             e.printStackTrace();  
    64         }  
    65         return false;  
    66     }  
    67     public int getScores(){  
    68         return scores;  
    69     }  
    70     public String getName(){  
    71         return name;  
    72     }  
    73     public String getPassword(){  
    74         return password;  
    75     }  
    76       
    77     public void setNumber1(){  
    78         number1=0;  
    79     }  
    80     public void setNumber2(){  
    81         number2=0;  
    82     }  
    View Code

    (4)登录界面和注册界面代码,注册后将用户的信息加入数据库test中表user中。

      1 public void show(){  
      2         frame.setLayout(null);//定义空布局  
      3         frame.setSize(470,300);  
      4         frame.setLocation(400, 200);  
      5           
      6         Font font=new Font("华文行楷",Font.BOLD,20);  
      7         label1.setFont(font);  
      8         label1.setForeground(Color.gray);//设置字体颜色  
      9         label2.setFont(font);  
     10           
     11         label2.setForeground(Color.gray);  
     12         txt1.setOpaque(false);//设置文本框透明  
     13         txt2.setOpaque(false);  
     14           
     15         btn1.setContentAreaFilled(false);//设置button组件透明  
     16         btn1.setFont(font);  
     17         btn1.setForeground(Color.gray);  
     18         btn1.setBorder(BorderFactory.createRaisedBevelBorder());//设置突出button组件  
     19         btn1.addActionListener(new ActionListener()
     20         {
     21                 //单击按钮执行的方法
     22             public void actionPerformed(ActionEvent e) 
     23             {
     24                 closeThis();
     25                 //创建新的窗口
     26                 Myframe frame = new Myframe();
     27                 //设置在屏幕的位置
     28                 frame.setTitle("小学四则运算");
     29                 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     30                 frame.setVisible(true);
     31                 frame.setVisible(true);
     32                 }
     33 
     34          });
     35         btn2.setContentAreaFilled(false);  
     36         btn2.setFont(font);  
     37         btn2.setBorder(BorderFactory.createRaisedBevelBorder());  
     38         btn2.setForeground(Color.gray);  
     39         btn3.setContentAreaFilled(false);  
     40         btn3.setFont(font);  
     41         btn3.setBorder(BorderFactory.createRaisedBevelBorder());  
     42         btn3.setForeground(Color.gray);  
     43         JPanel bj = new JPanel() {//设置背景  
     44             protected void paintComponent(Graphics g) {  
     45                 Image bg;  
     46                 try {  
     47                     bg = ImageIO.read(new File("src/image/1.jpg"));  
     48                     g.drawImage(bg, 0, 0, getWidth(), getHeight(), null);  
     49                 } catch (IOException e) {  
     50                     e.printStackTrace();  
     51                 }  
     52             }  
     53         }; 
     54         
     55       
     56         label1.setBounds(100,50,100,100);  
     57         txt1.setBounds(180,90, 150, 20);  
     58         label2.setBounds(100,80,100,100);  
     59         txt2.setBounds(180,120, 150, 20);  
     60         btn1.setBounds(100,200,80,20);  
     61         btn2.setBounds(190,200,80,20);  
     62         btn3.setBounds(280,200,80,20);  
     63         frame.setContentPane(bj);  
     64         frame.setLayout(null);  
     65         frame.add(label1);  
     66         frame.add(txt1);  
     67         frame.add(label2);  
     68         frame.add(txt2);  
     69         frame.add(btn1);  
     70         frame.add(btn2);  
     71         frame.add(btn3);  
     72         btn1.addMouseListener(this);//添加鼠标监听  
     73         btn2.addMouseListener(this);  
     74         btn3.addMouseListener(this);  
     75         frame.setVisible(true);   
     76      
     77     
     78  }
     79     public void mouseClicked(MouseEvent arg0) {  
     80        text1=txt1.getText();//获取用户输入数据  
     81        text2=txt2.getText();  
     82        if(distinguish==1){  
     83        if(myOpr.selectName(text1)){//登录判断  
     84            if(myOpr.selectPassword(text2)){  
     85                JOptionPane.showMessageDialog(null, "登陆成功","提示",2);  
     86                 txt1.setText("");  
     87                 txt2.setText("");  
     88                 distinguish=4;  
     89                 frame.setVisible(false);//登录成功则关闭界面  
     90            }else{  
     91                 JOptionPane.showMessageDialog(null, "密码错误","提示",2);  
     92                 txt2.setText("");  
     93                 myOpr.setNumber1();//密码错误将number置0  
     94                 myOpr.setNumber2();  
     95            }  
     96        }else{  
     97            JOptionPane.showMessageDialog(null, "此id不存在,请注册","提示",2);  
     98             txt1.setText("");  
     99             txt2.setText("");  
    100        }  
    101        }  
    102        if(distinguish==2){  
    103              
    104            String logi=(String) JOptionPane.showInputDialog(null,"请输入你的id:
    ","注册",JOptionPane.PLAIN_MESSAGE,null,null,"在这输入");   
    105            String pas=(String) JOptionPane.showInputDialog(null,"请输入你的密码:
    ","注册",JOptionPane.PLAIN_MESSAGE,null,null,"在这输入");  
    106             myOpr.insertData(logi,pas,0);  
    107             JOptionPane.showMessageDialog(null, "注册成功","提示",2);  
    108        }  
    109        if(distinguish==3){  
    110            int n = JOptionPane.showConfirmDialog(null, "是否退出?", "byebye",JOptionPane.YES_NO_OPTION);  
    111            myDB.closeMyConnection();  
    112             if(n==JOptionPane.YES_OPTION){  
    113             System.exit(1);  
    114             }  
    115        }  
    116          
    117     }  
    118   
    119     public void mouseEntered(MouseEvent arg0) {  
    120         if (arg0.getSource() == btn1) {  
    121             distinguish=1;//鼠标悬停在btn1处则把distinguish置1  
    122             btn1.setForeground(Color.red);//改变颜色  
    123             btn1.setBorder(BorderFactory.createLoweredBevelBorder());//组件凹陷  
    124             btn2.setForeground(Color.gray);  
    125             btn2.setBorder(BorderFactory.createRaisedBevelBorder());  
    126             btn3.setForeground(Color.gray);  
    127             btn3.setBorder(BorderFactory.createRaisedBevelBorder());  
    128         }  
    129         if (arg0.getSource() == btn2) {  
    130             distinguish=2;  
    131             btn1.setForeground(Color.gray);  
    132             btn1.setBorder(BorderFactory.createRaisedBevelBorder());  
    133             btn2.setForeground(Color.red);  
    134             btn2.setBorder(BorderFactory.createLoweredBevelBorder());  
    135             btn3.setForeground(Color.gray);  
    136             btn3.setBorder(BorderFactory.createRaisedBevelBorder());  
    137         }  
    138         if (arg0.getSource() == btn3) {  
    139             distinguish=3;  
    140             btn1.setForeground(Color.gray);  
    141             btn1.setBorder(BorderFactory.createRaisedBevelBorder());  
    142             btn2.setForeground(Color.gray);  
    143             btn2.setBorder(BorderFactory.createRaisedBevelBorder());  
    144             btn3.setForeground(Color.red);  
    145             btn3.setBorder(BorderFactory.createLoweredBevelBorder());  
    146             }  
    147   
    148     }  
    149     public void mouseExited(MouseEvent arg0) {//鼠标退出三个button组件后恢复  
    150         distinguish=0;  
    151         label1.setForeground(Color.gray);  
    152         label2.setForeground(Color.gray);  
    153         txt1.setOpaque(false);  
    154         txt2.setOpaque(false);  
    155         btn1.setContentAreaFilled(false);  
    156         btn1.setForeground(Color.gray);  
    157         btn1.setBorder(BorderFactory.createRaisedBevelBorder());  
    158         btn2.setContentAreaFilled(false);  
    159         btn2.setBorder(BorderFactory.createRaisedBevelBorder());  
    160         btn2.setForeground(Color.gray);  
    161         btn3.setContentAreaFilled(false);  
    162         btn3.setBorder(BorderFactory.createRaisedBevelBorder());  
    163         btn3.setForeground(Color.gray);  
    164     } 
    165 
    166     
    167    
    168     
    169     public static void closeThis(){
    170         frame.dispose();
    171         }
    172         
    173       
    174     public void mousePressed(MouseEvent arg0) {  
    175               
    176     }  
    177     public void mouseReleased(MouseEvent arg0) {  
    178           
    179           
    180     }  
    181     public String getText1(){  
    182         return text1;  
    183     }  
    184     public String getText2(){  
    185         return text2;  
    186     }  
    187     public int getDistinguish(){  
    188         return distinguish;  
    189     }  
    190       
    191 } 
    View Code

    (5)做题界面    

      1 public static void main(String[] args) {
      2         EventQueue.invokeLater(new Runnable() {
      3             public void run() {
      4                 try {
      5                     login window=new login();
      6                     window.show();            
      7                 } catch (Exception e) {
      8                     e.printStackTrace();
      9                 }
     10             }
     11         });    
     12     }
     13 
     14     /**
     15      * Create the frame.
     16      */
     17     public Myframe() {    
     18         startTime = new Date().getTime();    
     19         setBounds(100, 100, 821, 643);
     20         //设置面板
     21         panel.setBackground(Color.WHITE);    
     22         panel.setBorder(new EmptyBorder(5, 5, 5, 5));
     23         setContentPane(panel);
     24         panel.setLayout(null);
     25         //设置第几轮
     26         lun.setForeground(Color.BLUE);
     27         lun.setHorizontalAlignment(SwingConstants.CENTER);
     28         lun.setFont(new Font("华文行楷", Font.BOLD, 42));
     29         lun.setBackground(Color.BLUE);
     30         lun.setBounds(339, 80, 139, 71);
     31         panel.add(lun);
     32         //设置题号
     33         num.setToolTipText("");
     34         num.setHorizontalAlignment(SwingConstants.CENTER);
     35         num.setBorder(new LineBorder(new Color(0, 204, 51), 3, true));
     36         num.setFont(new Font("宋体", Font.BOLD, 17));
     37         num.setBackground(new Color(0, 255, 255));
     38         num.setBounds(234, 209, 45, 34);
     39         panel.add(num);
     40         //设置运算题
     41         question.setForeground(new Color(51, 204, 255));
     42         question.setFont(new Font("华文楷体", Font.BOLD, 32));
     43         question.setBounds(298, 205, 276, 53);
     44         panel.add(question);
     45         //设置答案
     46         answer = new JTextField();
     47         answer.setFont(new Font("华文楷体", Font.BOLD, 32));
     48         answer.setBounds(588, 205, 128, 53);
     49         panel.add(answer);
     50         answer.setColumns(10);
     51         //设置得分
     52         scorelb.setFont(new Font("微软雅黑", Font.BOLD, 21));
     53         scorelb.setBounds(252, 339, 72, 46);
     54         panel.add(scorelb);
     55         score.setForeground(Color.RED);
     56         score.setFont(new Font("宋体", Font.BOLD, 22));
     57         score.setHorizontalAlignment(SwingConstants.CENTER);
     58         score.setBounds(298, 346, 56, 34);
     59         panel.add(score);
     60         //设置计时器
     61         time.setFont(new Font("微软雅黑", Font.BOLD, 21));
     62         time.setBounds(255, 429, 186, 46);
     63         panel.add(time);
     64         //设置语言
     65         languae.setEditable(true);
     66         languae.setBounds(582, 68, 72, 24);
     67         languae.addItem("中文");
     68         languae.addItem("英文");
     69         panel.add(languae);
     70         //设置"下一题"按钮
     71         nextbtn.setBackground(new Color(204, 204, 255));
     72         nextbtn.setFont(new Font("宋体", Font.BOLD, 17));
     73         nextbtn.setBounds(479, 334, 113, 46);
     74         panel.add(nextbtn);
     75         //下一题事件监听
     76         nextbtn.addActionListener(new ActionListener() {
     77             public void actionPerformed(ActionEvent e) {
     78                 boolean isend;
     79                 isend=nextbtn.getText().equals("答题结束");
     80                 if(! isend)
     81                 {
     82                     count = count+1;
     83                     num.setText(""+count);
     84                     if(count==21)
     85                     {
     86                         startTime = new Date().getTime();
     87                         count =1;
     88                         num.setText(""+count);
     89                         clun=clun+1;
     90                         lun.setText("第 "+clun+" 轮");
     91                         scorelist.add(sum);    
     92                         nextbtn.setText("提交");
     93                         int value=JOptionPane.showConfirmDialog(null, "当前得分:"+sum+",是否进入下一轮?", "提示信息", JOptionPane.YES_NO_OPTION);
     94                         if (value==JOptionPane.YES_OPTION) {
     95                             System.out.println("你选择了是");
     96                             nextbtn.setText("下一题");}
     97                             else if (value==JOptionPane.NO_OPTION) {
     98                             nextbtn.setText("答题结束");
     99                             }
    100                         sum=0;
    101                     }
    102                     test();
    103                     answer.setText("");
    104                 }
    105                 else{
    106                     
    107                 }
    108             }
    109         });
    110         
    111         //设置"成绩图表"按钮
    112         drawlb.setBackground(new Color(204, 204, 255));
    113         drawlb.setFont(new Font("宋体", Font.BOLD, 17));
    114         drawlb.setBounds(479, 432, 113, 46);
    115         panel.add(drawlb);
    116         //成绩图表事件监听
    117         drawlb.addActionListener(new ActionListener() {
    118             public void actionPerformed(ActionEvent e) {
    119                 Chart demo = new Chart(scorelist);  
    120                 demo.setVisible(true);
    121             }
    122         });
    123         //设置"开始测试"按钮
    124         startbtn.setForeground(new Color(255, 0, 51));
    125         startbtn.setBackground(new Color(255, 204, 204));
    126         startbtn.setFont(new Font("楷体", Font.BOLD, 20));
    127         startbtn.setBounds(164, 58, 128, 41);
    128         panel.add(startbtn);
    129         
    130         //开始测试事件监听
    131         startbtn.addActionListener(new ActionListener() {
    132             public void actionPerformed(ActionEvent e) {                        
    133                 startTime = new Date().getTime();
    134                 this.timer();
    135                 test();
    136             }
    137             //计时器    
    138             public void timer() {
    139                 new Thread() {
    140                     public void run() {
    141                         while (true) {
    142                             try {
    143                                 Thread.sleep(1000);
    144                                 long seconds = (new Date().getTime() - startTime) / 1000;
    145                                 long mm = seconds / 60;
    146                                 long ss = seconds % 60;
    147     
    148                                 time.setText("计时: " + (mm < 10 ? "0" + mm : "" + mm) + ":" + (ss < 10 ? "0" + ss : "" + ss));
    149                             } catch (InterruptedException e) {
    150                                 e.printStackTrace();
    151                             }
    152                         }
    153                     }
    154                 }.start();
    155             }
    156         });    
    157     }    
    158     
    159     //获取题和答案
    160     public void test()
    161     {
    162         String str = answer.getText();
    163         if(str.equals("")) str = ""+0;
    164         ans=Integer.parseInt(str.trim());
    165         //判断答案是否正确
    166         if(tans==ans&&ans!=0)
    167         {
    168             flag=true;
    169         }
    170         else 
    171             flag=false;
    172         //如果答案正确,则加5分
    173         if(flag)
    174         {
    175              sum = sum+5;
    176              score.setText(String.valueOf(sum));
    177         }
    178         else 
    179             score.setText(String.valueOf(sum));
    180         
    181         //从数据库题目表中获取问题
    182         s=r.nextInt(10000)+1;
    183         ls=new TestMysql();
    184         rs=ls.selectSqlDate("select content from questionbank where id="+s);
    185         try {
    186             while(rs.next())
    187             {
    188                 System.out.println(rs.getString("content"));
    189                 qus=rs.getString("content");    
    190                 question.setText(qus);
    191             }
    192         } catch (SQLException e1) {
    193             // TODO Auto-generated catch block
    194             e1.printStackTrace();
    195         }
    196         
    197         //从数据库题目表中获取正确答案,用于判断答案是否正确
    198         as=ls.selectSqlDate("select result from questionbank where id="+s);    
    199         try {
    200             while(as.next())
    201             {
    202                 System.out.println(as.getString("result"));
    203                 sans=as.getString("result");
    204                 tans = Integer.parseInt(sans);
    205                 //System.out.println(tans);
    206             }
    207         } catch (NumberFormatException e1) {
    208             // TODO Auto-generated catch block
    209             e1.printStackTrace();
    210         } catch (SQLException e1) {
    211             // TODO Auto-generated catch block
    212             e1.printStackTrace();
    213         }        
    214     }
    215  }
    View Code

    (6)柱状图界面

     1 public class Chart extends JFrame{  
     2   
     3     //绘制柱形统计图  
     4     ArrayList<Integer> ran=new  ArrayList<Integer>();
     5     public Chart(ArrayList<Integer> scores)
     6     {  
     7         super();  
     8         getContentPane().setForeground(Color.CYAN);
     9         setForeground(Color.CYAN);
    10         setBackground(Color.CYAN);
    11         for(int i=0;i<scores.size();i++)
    12         {
    13             ran.add(scores.get(i));
    14             System.out.println(scores.get(i));
    15         }
    16           
    17         setTitle("绘制柱形图");  
    18         setSize(600, 400);
    19         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
    20     }  
    21     @Override  
    22     public void paint(Graphics g){
    23         int Width = getWidth();
    24         int Height = getHeight();
    25         int leftMargin = 20;//柱形图左边界
    26         int topMargin = 50;//柱形图上边界
    27         Graphics2D g2 = (Graphics2D) g;
    28         g2.setColor(Color.WHITE);//绘制白色背景
    29         g2.fillRect(0, 0, Width, Height-100);//绘制矩形图
    30         g2.setColor(Color.black);
    31          for(int i=0;i<=10;i++)
    32          {
    33              //绘制灰色横线和百分比
    34              g2.drawString((100-10*i)+"", 15, topMargin+30*i);
    35              g2.drawLine(5, topMargin+30*i, Width, topMargin+30*i);//绘制灰色横线
    36          }
    37          g2.setColor(Color.BLUE);
    38          for(int i=0;i<=ran.size();i++)
    39          {
    40              //绘制柱形图
    41              int step = (i+1)*40;//设置每个柱形图的水平间隔为40
    42              //绘制矩形
    43              g2.fillRoundRect(leftMargin+step*2-5,(100-ran.get(i))*3+50, 40, 300-(100-ran.get(i))*3, 40, 10);
    44              //列出测试轮数
    45              g2.drawString("第"+(i+1)+"轮", leftMargin+step*2, 380);
    46          }    
    47      }  
    48 }
    View Code

    4. 程序运行:程序运行时每个功能界面截图。

    (1)在登录界面中,先注册用户名和密码,注册成功。

       

                                     

    (2)注册成功后,可在数据库中查看用户名和密码已经存入(当然,只有我能看到)。

    (3)题库中的题,一共存入10000道题,用于测试。

    (4)用已经注册过的用户名登录。

    (5)开始做题,点击开始测试,程序运行,开始出第一道题,在步骤2的框中输入答案,之后按下一题按钮,每20道题为一轮。

     

    (6)当做到第20题时,按下下一题按钮,弹出对话框,显示当前得分为:20,是否进入下一轮?选是,第二轮答题开始,否,结束答题。

    (7)点击成绩图表,显示成绩柱状图。

    5.提供此次结对作业的PSP。

    PSP2.1

    任务内容

    计划共完成需要的时间(天)

    实际完成需要的时间(天)

    Planning

    计划

    10

    14

    Estimate

    估计这个任务需要多少时间,并规划大致工作步骤

    0.5

    1

    Development

    开发

    2

    2.5

    Analysis

     需求分析 (包括学习新技术)

    1

    2

     Design Spec

    生成设计文档

    0.25

    0.25

    Design Review

    设计复审 (和同事审核设计文档)

    0.2

    0.5

    Coding Standard

     代码规范 (为目前的开发制定合适的规范)

    1

    0.5

     Design

      具体设计

    1

    2

    Coding

    具体编码

    5

    7

    Code Review

    代码复审

    1

    2

     Test

    测试(自我测试,修改代码,提交修改)

    0.5

    1

    Reporting

    报告

    0.5

    0.5

    Test Report

    ·  测试报告

    0.5

    0.5

    Size Measurement

      计算工作量

    0.5

    0.25

    Postmortem & Process Improvement Plan

    ·  事后总结 ,并提出过程改进计划

    1

    1

     

    6. 请使用汉堡评价法给你的小伙伴一些点评。

                    我的小伙伴是和我关系比较好的,在做这个结对编程的时候也是比较好相处的,在这个实验中,我做了数据库的部分,她做了框架的部分,在整个过程中,遇到了很多大大小小

         的困难,但这对我们来说都不算什么,我们查阅书籍,网页,请教同学,在很多地方都打成了共识,有共同的语言。在我们的努力下,终于完成了这次作业,呈献给大家,虽然这次

         作业完成的不是很好,但是我们都尽力了。下面附上我和小伙伴结对编程时的丑照。

     

       

    7. 结对编程真的能够带来1+1>2的效果吗?通过这次结对编程,请谈谈你的感受和体会。

                对于本次结对编程,我认为这是可以带来1+1>2的效果的。在这次结对编程中,我们齐心协力,本来自己不太会的知识点,但是经过小伙伴的讲解就会了,不用花费太多的

         时间去学习。当局者迷,旁观者清,自己写错的地方,小伙伴可以很明显的指出我的错误,并且教我如何去改正,这在时间上来说,效率确实是1+1>2的。而澡编程的效果方面,

        绝不是1+1>2这么简单了,更不能用1+1>2这个不等式来衡量。

  • 相关阅读:
    Dubbo与Zookeeper、SpringMVC整合和利用(负载均衡、容错)
    英语每日阅读---2、越来越多人反对人工智能参战
    新东方雅思词汇---6.3、brilli
    智课雅思词汇---二十五、形容词后缀-ate-fic-ose-ulent-olent-ous-ulous-y
    英语每日写作---1、但是,人们在吹口哨时做得更好
    英语每日阅读---1、科学美国人60秒:如果觉得唱歌很难 那就吹口哨吧
    线段覆盖长度
    智课雅思词汇---二十四、形容词后缀-al-ial-ar-ary-ic-id-ish-ile-ine-oid-ory
    智课雅思词汇---二十三、动词性后缀-ate-fy-ish-ize
    iscroll.js的简单使用方法(总结)
  • 原文地址:https://www.cnblogs.com/mmzq/p/8687494.html
Copyright © 2011-2022 走看看