zoukankan      html  css  js  c++  java
  • 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("
    ".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("
    ");
    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("
    ");
    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("
    ".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("
    ".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这一点。

  • 相关阅读:
    ArrayList源码剖析
    Qt线程外使用Sleep
    malloc、calloc和realloc比较
    C++各大名库
    Qt 编译boost
    VC++ 设置控件显示文本的前景色、背景色以及字体
    std::map的操作:插入、修改、删除和遍历
    time.h文件中包含的几个函数使用时须注意事项
    赋值操作符和拷贝构造函数
    virtual析构函数的作用
  • 原文地址:https://www.cnblogs.com/dwxuan/p/8711505.html
Copyright © 2011-2022 走看看