《小学四则运算练习软件》
源码在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 }
(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 }
(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 }
(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 }
(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 }
(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 }
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这个不等式来衡量。