JavaWeb四则运算2开发记录
in inbox with 0 comment

JavaWeb四则运算2开发记录

in inbox with 0 comment

程序设计思想

程序设计思想:程序分为两部分一部分是后台一部分是前台。
联系这两部分的是数据库。
后台只是生成题目,然后写入到数据库中。
前台从数据库中提取数据,显示在界面上。
以下是具体说明:
后台部分:

  1. 随机生成数字和运算符,但是要控制其结果在100以内
  2. 双目运算和三目运算分开存储,放到两张表里
  3. 三目运算可以由双目运算"拆分"得到

程序源代码

RandomString:

import java.util.ArrayList;
import java.util.Random;

import javax.enterprise.concurrent.ManageableThread;

public class RandomString {

    static    private String op1=null;
    static    private String op2=null;
    static    private char opr;
    static int max=100;
    static    public ArrayList newRandomString(int ch){

        double op1 = 0,op2=0;
        
//        ((int)(Math.random()*4));//随机产生不同的算数式子
        
        switch(ch){
            
            case 0:{//产生加法

                 op1=Math.random()*100+1;
                 op2=Math.random()*(100-op1)+1;
                 opr='+';
            }
                break;
            case 1:{//减法
                
                op1=Math.random()*100+1;
                op2=Math.random()*100+1;
                if(op2-op1>0){
                    double temp;
                    temp=op1;
                    op1=op2;
                    op2=temp;
                }
                opr='-';    
            }break;
            case 2:{//乘法
                op1=Math.random()*10+1;
                op2=Math.random()*10+1;
                opr='*';
            }break;
            case 3:{//除法
                
                op1=Math.random()*10+1;
                op2=Math.random()*10+1;
                op1=(int)op1*(int)op2;
                
                opr='/';                
            }break;
            
        }
        
    ArrayList list=new ArrayList();    
    list.add((int)op1);
    list.add(opr);
    list.add((int)op2);
    
        return list;
        
    }
    
    static public String toString(ArrayList list){
        
        String s="";
        for(int i=0;i<list.size();i++){
            if(i%2==0){
                s=s+list.get(i);
                }else{
                s=s+String.valueOf(list.get(i))  ;
                }
        
                //Integer.toString((int)list.get(0))+list.get(1)+Integer.toString((int)list.get(2));
        
        }
        return s;
        
        
    }
    
    static    public ArrayList newRandomString(){

        double op1 = 0,op2=0;
        
//        ((int)(Math.random()*4));//随机产生不同的算数式子
        switch(((int)(Math.random()*4))){
            
            case 0:{//产生加法

                 op1=Math.random()*100+1;
                 op2=Math.random()*(100-op1)+1;
                 opr='+';
            }
                break;
            case 1:{//减法
                
                op1=Math.random()*100+1;
                op2=Math.random()*100+1;
                if(op2-op1>0){
                    double temp;
                    temp=op1;
                    op1=op2;
                    op2=temp;
                }
                opr='-';    
            }break;
            case 2:{//乘法
                op1=Math.random()*10+1;
                op2=Math.random()*10+1;
                opr='*';
            }break;
            case 3:{//除法
                
                op1=Math.random()*10+1;
                op2=Math.random()*10+1;
                op1=(int)op1*(int)op2;
                
                opr='/';                
            }break;
            
        }
        
    ArrayList list=new ArrayList();    
    list.add((int)op1);
    list.add(opr);
    list.add((int)op2);
    
        return list;
        
    }
    
    static public ArrayList newHarderRandomString(){
        
        ArrayList list=new ArrayList();
        char opr1 = '&',opr2='&';
        double op1,op2,op3;
        double c1=Math.random();
        double c2=Math.random();
        if(c1>=0.5){
            opr1='+';
        }else{
            opr1='-';
        }
        if(c2>=0.5){
            opr2='+';
        }else{
            opr2='-';
        }
        //输出opr1和opr2
        //System.out.println("*********************");
//        System.out.println("opr1:"+opr1);
//        System.out.println("opr2:"+opr2);
//        System.out.println("*********************");
        //三个数判断结果在100以内
        if((opr1=='+')&&(opr2=='+')){//连加时
            
            op1=Math.random()*33;
            op2=Math.random()*33;
            op3=Math.random()*33;
            list.add((int)op1);
            list.add(opr1);
            list.add((int)op2);
            list.add(opr2);
            list.add((int)op3);    
            
    
        }else if((opr1=='-')&&(opr2=='-')){
            
            op3=Math.random()*100;
            op2=Math.random()*(100-op3);
            int min=(int)op2+(int)op3;
            Random random=new Random();
            op1=random.nextInt(max-min)+min;
            list.add((int)op1);
            list.add(opr1);
            list.add((int)op2);
            list.add(opr2);
            list.add((int)op3);

        }else if((opr1=='-')&&(opr2=='+')){
            
            list=RandomString.newRandomString(1);//1为减法
            list.add(opr2);
            op3=Math.random()*(100-((int)list.get(0)-(int)list.get(2)))+1;
            list.add((int)op3);
            
        }else if((opr1=='+')&&(opr2=='-')){
            
            list=RandomString.newRandomString(0);//0为加法
            list.add(opr2);
            op3=Math.random()*(((int)list.get(0)+(int)list.get(2)))+1;
            list.add((int)op3);
        }
        
        return list;
    } 

}

CheckAnswer:

import java.util.ArrayList;

public class CheckAnswer {
    
static    public String calaulateAnswer(ArrayList list){
        
    if(list.size()==3){
        char opr=(char)list.get(1);
        switch(opr){
        
        case '+':return Integer.toString((int)list.get(0)+(int)list.get(2));
        
        case '-':return Integer.toString((int)list.get(0)-(int)list.get(2));
        
        case '*':return Integer.toString((int)list.get(0)*(int)list.get(2));
        
        case '/':return  Integer.toString((int)list.get(0)/(int)list.get(2));
        
        default :return null;
        }
    }else{//为三位数字的加减
        
        
        char opr1=(char)list.get(1);
        char opr2=(char)list.get(3);
        
        if(opr1=='+'){
            if(opr2=='+'){
                return Integer.toString((int)list.get(0)+(int)list.get(2)+(int)list.get(4));    
            }else{
                return Integer.toString((int)list.get(0)+(int)list.get(2)-(int)list.get(4));
            }
            
        }else{
            if(opr2=='+'){
                return Integer.toString((int)list.get(0)-(int)list.get(2)+(int)list.get(4));
            }
            else{
                return Integer.toString((int)list.get(0)-(int)list.get(2)-(int)list.get(4));
            }
            
        }
        
        
        
    }    
    }
    
    
}

Main:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

public class Main {

    public static void main(String[] args) throws SQLException {
        // TODO Auto-generatesd method stub
        
        String JDriver="com.microsoft.sqlserver.jdbc.SQLServerDriver";//加载驱动
        String connectDB= "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=HN";//数据源
        try
          {
           Class.forName(JDriver);//加载数据库引擎,返回给定字符串名的类
          }catch(ClassNotFoundException e)
          {
           //e.printStackTrace();
           System.out.println("加载数据库引擎失败");
           System.exit(0);
          }
        System.out.println("数据库驱动成功");
        
        String user="sa";
           String password="123456zz";
           Connection con = null;
        try {
            con = DriverManager.getConnection(connectDB,user,password);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }//连接数据库对象
           System.out.println("连接数据库成功");
           Statement stmt = null;
           try {
             stmt=con.createStatement();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }//创建SQL命令对象
        //---------------------------------------------------------------------------------------//
        RandomString s=new RandomString();
        ArrayList list=new ArrayList();
        long i=0;
        while(i!=10){
        list=s.newRandomString();
    //    list=s.newHarderRandomString();
        i++;
        System.out.println("-----------------------------------------");
        System.out.println("序号:"+i);
        
        stmt.executeUpdate("insert into Table2(expression,result)values('"+RandomString.toString(list)+"','"+CheckAnswer.calaulateAnswer(list)+"')");

        System.out.println("算数式子:"+RandomString.toString(list));    
        System.out.println(CheckAnswer.calaulateAnswer(list));
        System.out.println("-----------------------------------------");
        
        }
    }

}

运行结果截图

//截图部分只展示了一个表,这个表是用来存储连加的情况的。
sht.jpg

编程总结分析

写代码之前脑子里需要有一个完整的程序框架,不能一边写一边想,因为这样多半时候会带来不必要的返工。

Responses