Java实现小学四则运算练习系统(UI)

github项目地址 :https://github.com/feser-xuan/Arithmetic_test3_UI

小伙伴的博客链接:http://www.cnblogs.com/fukang/p/8711021.html

我的学号:201571030104

小伙伴的学号:201571030109

实验要求

软件基本功能要求如下:
  •  在《实验二 软件工程个人项目》中,同学们实现了一个命令行四则运算出题小程序,本次实验采用结对编程方式,设计开发一个小学生四则运算练习软件,使之具有以下功能:

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

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

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

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

           

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

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

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

1、需求分析

  该项目要求程序有人机交互界面,且可评判成绩。可为用户提供百以内整数算式、带括号算式、真分数算式三种练习,可为进行多轮测试并记录成绩生成柱状图并且记录用户消耗的时间。

2、功能分析

  • 可实现基本要求,即可生成数字在 0 和 100 之间,运算符在3个到5个之间的计算表达式,并计算出表达式的结果
  • 随机可生成带括号的运算式,括号不会超过运算符的个数
  • 生成真分数的四则运算
  • 有用户界面,可进行多轮测试
  • 记录测试结果,并将以往成绩以柱状图展示
  • 测试时,记录用户的测试用时

3、设计实现

 

4、运行测试

  • 设计交互界面,首页登陆,登录用户名“admin”,密码123456。

  • 答题界面 

 

  • 答题完毕后,可以点击保存练习过的题目(包括自己答题的答案)

  

  • 答题结束后,可以查看自己得分情况(具体的用一个柱状统计图展示)

  

5、核心代码

  • 登录界面
 1 public class Login {
 2 
 3     public Login() 
 4     {
 5         JFrame f=new JFrame();
 6         f.setTitle("小学生四则运算答题系统");
 7         f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 8         f.setExtendedState(JFrame.MAXIMIZED_BOTH);
 9         f.setVisible(true);
10         
11         //设置窗口的大小和位置
12         f.setSize(500,500);
13         f.setLocation(200,200);
14         
15         Container con=f.getContentPane();//生成一个容器    
16         con.setLayout(new GridLayout(7,1));
17         
18         JPanel pan1 =new JPanel();
19         JLabel title=new JLabel("欢迎登陆小学生四则运算答题系统");
20         title.setFont(new Font("宋体",Font.BOLD, 20));
21         pan1.add(title);
22         con.add(pan1);
23         //生成一个新的版      
24         JPanel pan2 = new JPanel();
25         JPanel pan3 = new JPanel();
26         JPanel pan4 = new JPanel();
27         JPanel pan5 = new JPanel();
28         
29         con.add(pan2);
30         con.add(pan3);    
31         con.add(pan4);
32         con.add(pan5);
33         
34         JLabel name=new JLabel("用户名");
35         pan2.add(name);
36         TextField tf_name=new TextField(20);
37         pan2.add(tf_name);
38         
39         JLabel pass = new JLabel("密码");
40         pan3.add(pass);
41         TextField password=new TextField(20);
42         password.setEchoChar('*');
43         pan3.add(password);
44         
45         JButton b_log=new JButton("登陆");  
46         b_log.addActionListener(new ActionListener() {  
47             public void actionPerformed(ActionEvent e) {  
48                 // TODO Auto-generated method stub  
49                 //获取用户名和密码,进行校验  
50                 String myUsername=tf_name.getText(); 
51                 String myPassword=password.getText();  
52                 if(myUsername.equals("admin")&& myPassword.equals("123456")){  
53                     JOptionPane.showMessageDialog(null, "登陆成功!");  
54                     f.dispose();
55                     MyExGUI ui = new MyExGUI();
56                     
57                 }
58                 else{  
59                     JOptionPane.showMessageDialog(null, "账号或密码错误!");  
60                     name.setText( "");  
61                     password.setText( "");      
62                 }  
63                   
64             }  
65         });  
66         pan4.add(b_log); 
67         
68         JButton b_exit=new JButton("退出");       
69         b_exit.addActionListener(new ActionListener() {
70             public void actionPerformed(ActionEvent e) {
71                 // TODO Auto-generated method stub
72                  JOptionPane.showMessageDialog(null, "谢谢使用!");
73                  f.setVisible(false);//隐藏窗体
74                  System.exit(0);//退出程序
75             }        
76         });
77         pan5.add(b_exit);  
78         //登陆和退出这两个按钮放在第四个版面上
79         
80 
81     }
82 
83 }
View Code
  • 练习界面
  1 package ui_test;
  2 
  3 import java.awt.*;  
  4 import java.awt.event.ActionEvent;
  5 import java.awt.event.ActionListener;
  6 import java.io.BufferedOutputStream;
  7 import java.io.File;
  8 import java.io.FileOutputStream;
  9 import java.io.IOException;
 10 import java.util.ArrayList;
 11 
 12 import javax.swing.*;  
 13 
 14 
 15 public class MyExGUI extends JFrame{
 16     ArrayList<String> user_zongti = new ArrayList<String>();
 17     ArrayList<String> user_zonganswer = new ArrayList<String>();
 18     ArrayList<String> user_answer = new ArrayList<String>();
 19     ArrayList<String> true_answer = new ArrayList<String>();
 20     ArrayList<String> jta_timu = new ArrayList<String>();
 21     ArrayList<String> jta_zong = new ArrayList<String>();
 22     ArrayList<Integer> user_fenshu = new ArrayList<Integer>();
 23     JMenuBar jmb;   //菜单条组件  
 24     JMenu menu1, menu2, menu3, menu4, menu5;//菜单  
 25     JMenuItem item1, item2, item3, item4, item5, item6;//菜单项  
 26     JMenu build;    //二级菜单  
 27     JMenuItem file, project; 
 28     TextArea answer_all = new TextArea();
 29     TextField jta = new TextField();
 30     TextField jta_answer = new TextField(); 
 31     JLabel num_answer = new JLabel();
 32     JLabel answer1;
 33     JToolBar jtb;//工具条  
 34     JButton jb1, jb2, jb3, jb4, jb5, jb6, jb7,jb_next;  
 35     int answer_count;
 36     int answer_fenshu;
 37     public MyExGUI()
 38     {  
 39         //创建菜单  
 40         jmb = new JMenuBar();  
 41         
 42         menu1 = new JMenu("文件(F)");  
 43         menu1.setMnemonic('f'); //助记符  
 44         menu2 = new JMenu("编辑");  
 45         menu2.setMnemonic('E');  
 46         menu3 = new JMenu("格式");  
 47         menu4 = new JMenu("查看");  
 48         menu5 = new JMenu("帮助");  
 49           
 50         build = new JMenu("新建");  
 51           
 52         file = new JMenuItem("文件");  
 53         project = new JMenuItem("答题");  
 54         item1 = new JMenuItem("打开");  
 55         item2 = new JMenuItem("保存(S)");  
 56         item3 = new JMenuItem("另存为");  
 57         item4 = new JMenuItem("页面设置");  
 58         item5 = new JMenuItem("打印");  
 59         item6 = new JMenuItem("退出");  
 60         
 61         answer1 = new JLabel("第 1 题");
 62        
 63         
 64           
 65             //添加菜单项至菜单上  
 66         build.add(file);  
 67         build.add(project);  
 68           
 69         menu1.add(build);  
 70         menu1.add(item1);  
 71         menu1.add(item2);  
 72         menu1.add(item3);  
 73         menu1.addSeparator();  
 74         menu1.add(item4);  
 75         menu1.add(item5);  
 76         menu1.add(item6);  
 77             //将菜单加入至菜单栏  
 78         jmb.add(menu1);  
 79         jmb.add(menu2);  
 80         jmb.add(menu3);  
 81         jmb.add(menu4);  
 82         jmb.add(menu5);  
 83           
 84         
 85         JPanel contentPanel = new JPanel();
 86         contentPanel.setLayout(null);
 87         JLabel daan = new JLabel("答案");
 88         JLabel dengyu = new JLabel("=");
 89         num_answer=answer1;
 90         num_answer.setFont(new Font("宋体",Font.BOLD, 22));
 91         jb_next = new JButton("下一题");
 92         jta.setFont(new Font("宋体",Font.BOLD, 22));
 93         jta_answer.setFont(new Font("宋体",Font.BOLD, 22));
 94         jb_next.setFont(new Font("宋体",Font.BOLD, 22));
 95         daan.setFont(new Font("宋体",Font.BOLD, 22));
 96         dengyu.setFont(new Font("宋体",Font.BOLD, 22));
 97         
 98         contentPanel.add(num_answer);
 99         contentPanel.add(daan);
100         contentPanel.add(dengyu);
101         contentPanel.add(jta);
102 
103         contentPanel.add(jta_answer);
104         contentPanel.add(answer_all);
105         contentPanel.add(jb_next);
106         
107         num_answer.setBounds(90, 20, 130, 50);
108         daan.setBounds(250, 20, 90, 50);
109         jta.setBounds(50, 70, 150, 30);
110         dengyu.setBounds(205, 70, 20, 20);
111         jta_answer.setBounds(230, 70, 100, 30);
112         jb_next.setBounds(350, 70, 110, 30);
113         answer_all.setBounds(50, 120, 400, 300);
114         
115         this.setJMenuBar(jmb);  //添加菜单栏,不能设定位置,会自动放在最上部  
116         this.add(contentPanel);
117         
118         this.setTitle("在线答题系统");  
119         this.setSize(600, 500);  
120         this.setVisible(true);  
121         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
122         item1.addActionListener(new ActionListener() {
123             
124             @Override
125             public void actionPerformed(ActionEvent arg0) {
126                 // TODO Auto-generated method stub
127                 JFileChooser jfc=new JFileChooser();                        
128                 jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES );  
129                 jfc.showDialog(new JLabel(), "选择");  
130                 File file=jfc.getSelectedFile();  
131                 if(file.isDirectory()){  
132             //  System.out.println("文件夹:"+file.getAbsolutePath()); 
133                 }else if(file.isFile()){  
134                     String s=file.getAbsolutePath();  
135                 }    
136             }
137         });
138         item2.addActionListener(new ActionListener() {
139             
140             @Override
141             public void actionPerformed(ActionEvent arg0) {
142                 FileOutputStream outSTr = null;
143                 BufferedOutputStream Buff = null;
144                 boolean flag = true;
145                 File file;
146                 //String test ;
147                 do{
148                     //test = "test"+count;
149                 
150                     String inputValue = JOptionPane.showInputDialog("Please input file name"); 
151                     file = new File(inputValue+".txt");
152                     if (!file.exists()) {
153                         // 创建文件
154                         try {
155                             
156                             flag=file.createNewFile();
157                             
158                         } catch (IOException e) {
159                             e.printStackTrace();
160                             
161                         }
162                         flag=false;
163                     }
164                     else{
165                         
166                         JOptionPane.showMessageDialog(null, "该文件名已存在,请重新输入", "ERROR", JOptionPane.ERROR_MESSAGE);
167                         flag=true;
168                     }
169                 }while(flag);
170                 //写入文件
171                 String u_answer;
172                 try {
173                     outSTr = new FileOutputStream(file);
174                     Buff = new BufferedOutputStream(outSTr);
175                     System.out.println("选择是后执行的代码"+user_zongti.size()+user_answer.size()); 
176                         for (int i = 0; i < user_zongti.size(); i++) 
177                         {
178                             try {
179                                 Buff.write(user_zongti.get(i).getBytes());
180                                 Buff.write("    ".getBytes());
181                                 u_answer = user_answer.get(i);
182                                 if(u_answer.equals(""))
183                                     u_answer ="没有作答";
184                                 
185                                 Buff.write(u_answer.getBytes());
186                                 Buff.write("\r\n".getBytes());
187                             } catch (IOException e) {
188                                 e.printStackTrace();
189                                 i--;
190                             }
191                         }
192                     Buff.flush();
193                     Buff.close();
194                     
195                     } catch (IOException e) {
196                         e.printStackTrace();
197                     }
198                     //Buff.close();
199                     try {
200                         outSTr.close();
201                     } catch (IOException e) {
202                         e.printStackTrace();
203                     }
204                     user_zongti.clear();
205                     user_answer.clear();
206             }
207         });
208         
209         
210         project.addActionListener(new ActionListener() {
211             
212             @Override
213             public void actionPerformed(ActionEvent arg0) {
214                 arithmetic art = new arithmetic();
215                 true_answer=art.list_answer;
216                 jta_timu = art.list_timu;
217                 jta_zong = art.list;
218                 answer_count=1;
219                 answer_all.setText("");
220                 for (int i = 0; i < art.list_timu.size(); i++)
221                 {
222                     user_zongti.add(jta_zong.get(i));
223                     answer_all.append(jta_timu.get(i));
224                     answer_all.append("\r\n");
225                 }
226                 num_answer.setText("第 "+answer_count+" 题");    
227                 jta.setText(jta_timu.get(answer_count-1));
228                 answer_count++;
229                 
230                 
231             }
232         });
233         jb_next.addActionListener(new ActionListener() {
234             
235             @Override
236             public void actionPerformed(ActionEvent arg0) {
237                 String temp;
238                 temp = jta_answer.getText();
239                 
240                 if(jta.getText().equals(""))
241                 {
242                     JOptionPane.showMessageDialog(null, "错误,请导入题库", "错误", JOptionPane.ERROR_MESSAGE);
243                     return;
244                 }
245                 jta_answer.setText("");
246                 if(answer_count<=20)
247                 {
248                     if(isInteger(temp))
249                     {
250                           
251                         user_answer.add(temp);
252                         System.out.println("选择否后执行的代码"+temp+"user_size"+user_answer.size());
253                         num_answer.setText("第 "+answer_count+" 题");    
254                         jta.setText(jta_timu.get(answer_count-1));
255                         answer_count++;
256                     }
257                     else{
258                         JOptionPane.showMessageDialog(null, "错误", "请输入数字", JOptionPane.ERROR_MESSAGE);
259                     }
260                 }
261                 else{
262                     user_answer.add(temp);
263                     System.out.println("选择否后执行的代码"+temp+"user_size"+user_answer.size());
264                     answer_fenshu=0;
265                     for(int i=0;i<user_answer.size();i++)
266                     {
267                         if(user_answer.get(i).equals(true_answer.get(i)))
268                             answer_fenshu+=5;
269                     }
270                     user_fenshu.add(answer_fenshu);
271                     Object[] options = { "是", "取消" }; 
272                     int res=JOptionPane.showOptionDialog(null, "点击以继续 查看成绩", "答题完毕", 
273                     JOptionPane.DEFAULT_OPTION, JOptionPane.YES_NO_OPTION, 
274                     null, options, options[0]); 
275                     if(res==JOptionPane.YES_OPTION){
276                         chart ct =new chart(user_fenshu);
277                         ct.setVisible(true);
278                         
279                     }else{
280                         Object[] option = { "是", "取消" }; 
281                         int res1=JOptionPane.showOptionDialog(null, "继续新一轮答题", "新一轮答题", 
282                         JOptionPane.DEFAULT_OPTION, JOptionPane.YES_NO_OPTION, 
283                         null, option, option[0]); 
284                         
285                         if(res1==JOptionPane.YES_OPTION){
286                             arithmetic art = new arithmetic();
287                             true_answer=art.list_answer;
288                             
289                             jta_timu = art.list;
290                             answer_count=1;
291                             answer_all.setText("");
292                             jta_answer.setText("");
293                             for (int i = 0; i < art.list_timu.size(); i++)
294                             {
295                                 user_zongti.add(jta_timu.get(i));
296                                 answer_all.append(jta_timu.get(i));
297                                 answer_all.append("\r\n");
298                             }
299                             num_answer.setText("第 "+answer_count+" 题");    
300                             jta.setText(jta_timu.get(answer_count-1));
301                             answer_count++;
302                             
303                         }else{
304                             
305                         }
306                         
307                     } 
308                     
309                     
310                     
311                 }
312                 
313                 
314                 
315             }
316         });
317         
318         
319         
320         
321     }
322     
323     public static boolean isInteger(String str) {    
324         for (int i = str.length();--i>=0;){  
325                     if (!Character.isDigit(str.charAt(i))){
326                         return false;
327                     }
328                 }
329                 return true;
330       } 
331     
332     
333     
334     
335 }
View Code
  • 绘图界面
 1 package ui_test;
 2 
 3 import java.awt.Color;  
 4 import java.awt.Graphics;  
 5 import java.awt.Graphics2D;
 6 import java.util.ArrayList;
 7 import java.util.Random;  
 8   
 9 import javax.swing.JFrame;
10   
11 public class chart extends JFrame{
12       //绘制柱形统计图  
13         ArrayList<Integer> ran=new  ArrayList<Integer>();
14         public chart(ArrayList<Integer> scores)
15         {  
16             super();  
17             getContentPane().setForeground(Color.CYAN);
18             setForeground(Color.CYAN);
19             setBackground(Color.CYAN);
20             for(int i=0;i<scores.size();i++)
21             {
22                 ran.add(scores.get(i));
23                 System.out.println(scores.get(i));
24             }
25               
26             setTitle("绘制柱形图");  
27             setSize(600, 400);
28             setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
29         }  
30         @Override  
31         public void paint(Graphics g){
32             int Width = getWidth();
33             int Height = getHeight();
34             int leftMargin = 20;//柱形图左边界
35             int topMargin = 50;//柱形图上边界
36             Graphics2D g2 = (Graphics2D) g;
37             g2.setColor(Color.WHITE);//绘制白色背景
38             g2.fillRect(0, 0, Width, Height-100);//绘制矩形图
39             g2.setColor(Color.black);
40              for(int i=0;i<=10;i++)
41              {
42                  //绘制灰色横线和百分比
43                  g2.drawString((100-10*i)+"", 15, topMargin+30*i);
44                  g2.drawLine(5, topMargin+30*i, Width, topMargin+30*i);//绘制灰色横线
45              }
46              g2.setColor(Color.YELLOW);
47              for(int i=0;i<=ran.size();i++)
48              {
49                  //绘制柱形图
50                  int step = (i+1)*40;//设置每个柱形图的水平间隔为40
51                  //绘制矩形
52                  g2.fillRoundRect(leftMargin+step*2-5,(100-ran.get(i))*3+50, 40, 300-(100-ran.get(i))*3, 40, 10);
53                  //列出测试轮数
54                  g2.drawString("第"+(i+1)+"轮", leftMargin+step*2, 380);
55              }    
56          }  
57 
58     
59 }  
View Code
  • 随机产生四则远算式
  1 package ui_test;
  2 
  3 import java.io.BufferedOutputStream;
  4 import java.io.File;
  5 import java.io.FileOutputStream;
  6 import java.io.IOException;
  7 import java.util.ArrayList;
  8 import java.util.Random;
  9 import java.util.Scanner;
 10 
 11 public class arithmetic 
 12 {
 13     ArrayList<String> list = new ArrayList<String>();
 14     ArrayList<String> list_timu = new ArrayList<String>();
 15     ArrayList<String> list_answer = new ArrayList<String>();
 16     public  arithmetic()
 17     {
 18             FileOutputStream outSTr = null;
 19             BufferedOutputStream Buff = null;
 20             int number_n=20,count;
 21             
 22             ArrayList<String> list_temp = new ArrayList<String>();
 23             String[] operator = new String[]{"+","-","*","/"};
 24             
 25             Random rand = new Random();
 26             File file1 = new File("result.txt");
 27             if (file1.exists()) {
 28                 // 创建文件
 29                 try {
 30                     file1.createNewFile();
 31                 } catch (IOException e) {
 32                     e.printStackTrace();
 33                 }
 34             }
 35             
 36             
 37             while(number_n>0)
 38             {
 39                 int[] number_temp = new int[rand.nextInt(2)+3];
 40                 String[] str_temp = new String[number_temp.length-1];
 41                 for(int i=0;i<number_temp.length;i++)
 42                 {
 43                     if(i<number_temp.length-1)
 44                     {
 45                         number_temp[i]=rand.nextInt(100);
 46                         list_temp.add(String.valueOf(number_temp[i]));
 47                         str_temp[i]=operator[rand.nextInt(4)];
 48                         list_temp.add(str_temp[i]);
 49                         
 50                     }
 51                             
 52                     else
 53                     {
 54                         number_temp[i]=rand.nextInt(100);
 55                         list_temp.add(String.valueOf(number_temp[i]));
 56                     }
 57                 }
 58                 
 59                 count=calculate_RPN(produce_RPN(list_temp));
 60                 if(count !=-1)
 61                 {
 62                     list_timu.add(transform_string(list_temp));
 63                     list_answer.add(String.valueOf(count));
 64                     list_temp.add(" = "+count);
 65                     list.add(transform_string(list_temp));
 66                     number_n--;
 67                     list_temp.clear();
 68                 }
 69                 else
 70                     list_temp.clear();
 71                 System.out.println(number_n);
 72                 
 73             }
 74             try {
 75             outSTr = new FileOutputStream(file1);
 76             Buff = new BufferedOutputStream(outSTr);
 77                 try {
 78                     Buff.write("201571030104  丁炜轩".getBytes());
 79                     Buff.write("\r\n".getBytes());
 80                 } catch (IOException e) {
 81                     e.printStackTrace();
 82                 }
 83                 for (int i = 0; i < list.size(); i++) 
 84                 {
 85                     try {
 86                         Buff.write(list.get(i).getBytes());
 87                         Buff.write("\r\n".getBytes());
 88                     } catch (IOException e) {
 89                         e.printStackTrace();
 90                         i--;
 91                     }
 92                 }
 93             Buff.flush();
 94             Buff.close();
 95             
 96             } catch (IOException e) {
 97                 e.printStackTrace();
 98             }
 99             //Buff.close();
100             try {
101                 outSTr.close();
102             } catch (IOException e) {
103                 e.printStackTrace();
104             }
105            
106             for (int i = 0; i < list.size(); i++) 
107             {
108                 System.out.print(list.get(i));
109                 System.out.println();
110             }
111             System.out.print("计算完毕!");
112           
113         }
114         
115         public static int calculate_RPN(ArrayList<String> list_temp)
116         {
117             int i=0,t;
118             double a=0,b=0;
119             String l_temp;
120             Stack sk=new Stack(20);
121             for(t=0;t<list_temp.size();t++)
122             {
123                 l_temp = list_temp.get(i++);
124                 if(!isInteger(l_temp))
125                 {
126                     b = sk.mypop();
127                     a = sk.mypop();
128                     switch(l_temp)
129                     {
130                     case "+":sk.mypush(a+b);break;
131                     case "-":sk.mypush(a-b);break;
132                     case "*":sk.mypush(a*b);break;
133                     case "/":
134                         if(b==0)
135                             return -1;
136                         sk.mypush(a/b);break;
137                     }
138                     System.out.println("st.mytop: "+sk.mypeek());
139                 }
140                 else{
141                     sk.mypush((double)Integer.parseInt(l_temp));
142                 }
143                 
144             }
145             if(!sk.myisempty())
146             {
147                 a = sk.mypop();
148                 b = a-(int)a;
149                 System.out.println("a:  "+a);
150                 if(a>0 && b==0 )
151                 {
152                     return (int)a;
153                 }
154                 else
155                     return -1;
156             }
157             else
158                 return -1;
159             
160         }
161         
162         
163         public static ArrayList<String> produce_RPN(ArrayList<String> list_temp)
164         {
165             int t=0,i=0;
166             String tmp;
167             Tack mytack = new Tack(20);
168             ArrayList<String> lt_temp = new ArrayList<String>();
169             while(true)
170             {
171                 tmp = list_temp.get(i++);
172                 if(isInteger(tmp))
173                 {
174                     lt_temp.add(tmp);
175                 }
176                 else{
177                     if(mytack.myisempty())
178                     {
179                         mytack.mypush(tmp);
180                     }
181                         
182                     
183                     else{
184                         if(isCPriority(tmp, mytack.mypeek()))
185                             mytack.mypush(tmp);
186                         else{
187                             lt_temp.add(mytack.mypop());
188                             mytack.mypush(tmp);
189                         }
190                         
191                     }
192                 }
193                 if(i>=list_temp.size())
194                 {
195                     while(!mytack.myisempty())
196                         lt_temp.add(mytack.mypop());
197                     System.out.println(transform_string(list_temp));
198                     list_temp = lt_temp;
199                     System.out.println(list_temp);
200                     return list_temp;
201                 }
202             }
203             
204             
205         }
206         
207         
208         
209         public static boolean isInteger(String str) {    
210             for (int i = str.length();--i>=0;){  
211                         if (!Character.isDigit(str.charAt(i))){
212                             return false;
213                         }
214                     }
215                     return true;
216           } 
217         public static boolean isCPriority(String str,String s) { 
218             if((str+s).equals("*+") || (str+s).equals("*-") || (str+s).equals("/+") || (str+s).equals("/-"))
219                 return true;
220             else
221                 return false;    
222           }
223         public static String transform_string(ArrayList<String> list_temp)
224         {
225             String s="";
226             for(int i=0;i<list_temp.size();i++)
227             {
228                 s+=list_temp.get(i);
229             }
230             return s;
231             
232         }
233           
234         static class Stack
235         {
236             int mytop;
237             double stk[];
238             
239             public Stack(int num) {
240                 mytop=-1;
241                 stk=new double[num];
242             }
243             /*出栈*/
244             double mypop()
245             {
246                 double peek=stk[mytop];
247                 mytop--;
248                 return peek;
249             }
250             /*入栈*/
251             void mypush(double x)
252             {
253                 mytop++;
254                 stk[mytop]=x;
255                 
256             }
257             /*判空*/
258             Boolean myisempty()
259             {
260                 if(mytop==-1)
261                     return true;
262                 else
263                     return false;
264             }
265             /*取栈顶元素*/
266             double mypeek()
267             {
268                 double peek=stk[mytop];
269                 return peek;
270             }
271             /*栈大小*/
272             int mysize()
273             {
274                 return mytop+1;
275             }
276         }
277         
278         static class Tack
279         {
280             int mytop;
281             String tk[];
282             
283             public Tack(int num) {
284                 mytop=-1;
285                 tk=new String[num];
286             }
287             /*出栈*/
288             String mypop()
289             {
290                 String peek=tk[mytop];
291                 mytop--;
292                 return peek;
293             }
294             /*入栈*/
295             void mypush(String x)
296             {
297                 mytop++;
298                 tk[mytop]=x;
299                 
300             }
301             /*判空*/
302             Boolean myisempty()
303             {
304                 if(mytop==-1)
305                     return true;
306                 else
307                     return false;
308             }
309             /*取栈顶元素*/
310             String mypeek()
311             {
312                 String peek=tk[mytop];
313                 return peek;
314             }
315             /*栈大小*/
316             int mysize()
317             {
318                 return mytop+1;
319             }
320         
321 
322     }
323 
324 
325 }
View Code
  • main函数
 1 package ui_test;
 2 
 3 public class Main {
 4 
 5     public static void main(String[] args) {
 6         Login lg = new Login();
 7         //new MyExGUI();
 8 
 9     }
10 
11 }
View Code

6、总结

  通过本次实验,对于结对编程有了非常浓厚的兴趣,也体会到了结对编程对于项目的重要意义,总之收获很多。

在项目的设计、编写、调试、优化中,遇到了很多熟悉而又陌生的问题,花费的时间也比较多。由于对于计算机语言的偏好,对于有些语言,我选择舍弃,注重计算机的一门语言,努力做到最好。闻道有先后,术业有专攻。

7、结对编程(照片)

 

8、展示PSP

PSP2.1

任务内容

计划完成需要的时间(min)

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

Planning

计划

30

30

 Estimate

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

30

30

Development

开发

360

300

Analysis

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

100

60

 Design Spec

生成设计文档

10

10

Design Review

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

20

10

Coding Standard

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

10

5

Design

具体设计

60

35

Coding

具体编码

120

130

Code Review

代码复审

10

10

est

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

30

40

Reporting

报告

30

43

Test Report

测试报告

25

30

Size Measurement

计算工作量

2

3

Postmortem & Process

Improvement Plan

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

3

10

 

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

         我的小伙伴是傅康,他很认真,对待每一件事都有一个积极的态度,在这次结对编程中,承担主要的工作量,如果他是赛车手,我就是导航员,如果他是狙击手,我就是观察员,如果他是机长,我就是副机长,我们相辅相成,缺一不可。在生活中,我的小伙伴是我的室友,我对他也有一个比较全面的了解,他的工作能力强,有责任心,对待事物和热情。在这次编程中,我们两个都提出了建设性的意见。在这次编程中,我们两个都提出了建设性的意见,互相修改代码,虽然有些争执,但是还是很好的解决了,完成了这次编程任务。

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

       结对编程,在每一时刻都是一个程序员在编程,说效率如何高,也只是1+1>1,但是否大于2呢?答案是肯定的。首先,一个人的编程,平均很难实现1>80%×1的工作效力。但是在和同伴一起工作时,必须保持思维一直高度集中,所以平均都可以达到1>80%×1的个人效力,同时有了一遍代码评审,使得出错几率就降低,减少了bug的产生。也由于两个人的思想汇集,能创造了很多新编程算法或结构重用等。所以着眼于整个项目来看,这个实践确实大大提高了效率。本次结对编程,就很好的证明了1+1>2这一点。

posted @ 2018-04-03 22:20  dwXuan  阅读(4541)  评论(4编辑  收藏  举报