《小学四则运算练习软件》

源码在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:\n","注册",JOptionPane.PLAIN_MESSAGE,null,null,"在这输入");   
105            String pas=(String) JOptionPane.showInputDialog(null,"请输入你的密码:\n","注册",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这个不等式来衡量。

posted @ 2018-04-03 12:18  -Catsayer-  阅读(1179)  评论(8编辑  收藏  举报