zoukankan      html  css  js  c++  java
  • 课堂结队作业:二维数组(3)

    结队成员:陈欣容,孙奇文

    一、要求:

      1.四则运算3:将表达式和结果存入数据库;

      2.破坏性测试,存入10000条数据;

    二、思路

      1.重点为数据库操作以及表达式结果的计算(本次实验表达式只有两个操作数)其他大致与四则运算2相仿;

      2.整数运算:结果没有负数,出现除号一定能整除这两个条件在生成表达式时用一个while语句控制。由于表达式中的操作数都是字符串形式的,所以要先将字符串转化为整数,再用if else判断操作符计算结果。

      3.分数运算:建立一个分数类,有分子(fenzi)分母(fenmu)两个私有int变量,加减乘除调用外界函数;

      4.数据库操作:建立一个数据库连接的类(class DBBean),构造函数连接数据库,公共方法public void insertEx(Expression e)执行sql-insert语句向数据表中插入一条表达式记录,方法public void clear()执行sql-delete语句清空数据表。

      5.主函数中由用户输入10000,生成一个表达书类的对象数组,长度为10000,再实例化类DBBean,利用for循环和insertEx(Expression e)方法将10000条表达式记录存入数据库中。

    三、实现代码

      package 四则运算3; 

     import java.util.Random;  

    import java.util.Scanner;  

    import java.util.Vector; 

     import java.sql.*;  

    public class MathHomeWork3 {  

    public static int choose,from,to,number,ifChengChu;        public static int randomArr[]=new int[4];

    public static Random ran=new Random(); 

    public static char randomCh[]={'+','-','*','÷'}; 13     public static Expression ex[]; 

    @SuppressWarnings({  "resource" }) 

    public static void main(String[] args){ 

    Scanner in=new Scanner(System.in); 

    System.out.println("题目个数:");

    number=in.nextInt(); 

    System.out.println("数字范围(从小到大输入两个正整数):"); 

    from=in.nextInt();

    to=in.nextInt(); 

    System.out.println("是否有乘除法(1有2无):"); 

    ifChengChu=in.nextInt(); 

    DBBean db=new DBBean(); 

     ex=new Expression[number]; 

     for(int i=0;i<number;i++){ 

    ex[i]=new Expression(); 

     choose=ran.nextInt(2)+1; 

    ex[i]=creaExpression(choose,ifChengChu);                   if(ex[i]==null) 

    i--;           

       } 

     showExpression(ex); 

     for(int i=0;i<number;i++){ 

    db.insertEx(ex[i]);

           } 

      System.out.println("是否清空数据表(1是,其他数字否)?"); 

    int ifClear=in.nextInt(); 

    if(ifClear==1){ 

     db.clear(); 

       } 

    else{ 

        return ; 

         } 

          db.clear(); 

       } 

    //生成表达式 

      public static Expression creaExpression(int choose,int ifChengChu){ 

       char operator; 

       if(ifChengChu==1){ 

      int oper=ran.nextInt(4);        

       operator=randomCh[oper]; 

        } 

       else{ 

           int oper=ran.nextInt(2); 

          operator=randomCh[oper]; 

            } 

     if(choose==1){ 

              Expression ex=new Expression(true); 

              for(int i=0;i<2;i++){ 

              randomArr[i]=randomNum(from,to); 

                  } 

    if(operator=='-'||operator=='÷'){ 

             int ra=0,rb=0; 

             while(true){ 

            ra=randomNum(from,to); 

           rb=randomNum(from,to); 

           if(ra>=rb&&ra%rb==0) 

              break; 

              } 

             randomArr[0]=ra; 

             randomArr[1]=rb; 

          } 

          ex.push(""+operator); 

        ex.push(""+randomArr[1]); 

           ex.push("="); 

          int result=Function.calcuInt(ex.get(0),ex.get(1),ex.get(2)); 

         String s=""+result; 

          ex.setValue(s); 

           return ex; 

     } 

        else if(choose==2){ 

           Expression ex=new Expression(false); 

          if(operator=='-'){ 

             int newindex=ran.nextInt(2)+2; 

            operator=randomCh[newindex]; 

     } 

          FenShu fs[]=new FenShu[2]; 

            String fenshu[]=new String[2]; 

           for(int i=0;i<2;i++){ 

         int a=0,b=0; 

            while(a>=b){

       a=randomNum(from,to);

     b=randomNum(from,to);

     }

             int kk=Function.fun(a,b);

            a/=kk;

             b/=kk;

             fs[i]=new FenShu(a,b);

             fenshu[i]=fs[i].getFenshu();

     }

       ex.push(""+fenshu[0]);

        ex.push(""+operator);

       ex.push(""+fenshu[1]);

       ex.push("=");

     FenShu result=Function.calcuFenshu(fs[0],""+operator,fs[1]);

    ex.setValue(result.getFenshu());

    return ex;

     }

     else

    return null;

       }

    //打印表达式

    public static void showExpression(Expression f[]){

      int len=f.length;

     for(int i=0;i<len;i++){

     System.out.print("No."+(i+1)+": ");

    f[i].show();

    System.out.print(" ");

    }

     }

    //范围生成随机数

    public static int randomNum(int fromA,int toB){

    int x=ran.nextInt(toB-fromA)+fromA+1;

    return x;

        }

    }

    class Function{

    //求分子分母最大公约数

     public static int fun(int x,int y){

        int min,i;

        if(x>y) min=y;

        else

          min=x;

        for(i=min;i>=1;i--){

          if(x%i==0&&y%i==0){

            break;

           }

     }

      return i;

     }

     //计算整数表达式

    public static int calcuInt(String numleft,String oper,String numright){

               int a=Integer.parseInt(numleft);

               int b=Integer.parseInt(numright);

    if(oper.equals("+"))

                 return a+b;

    else if(oper.equals("-"))

                return a-b;

    else if(oper.equals("*"))

               return a*b;

    else if(oper.equals("÷"))

           return a/b;

    else 

           return -1;

     }

     //计算分数表达式

    public static FenShu calcuFenshu(FenShu x,String oper,FenShu y){

          FenShu result=new FenShu();

          if(oper.equals("+")){

           result=addFenshu(x,y);

     }

         else if(oper.equals("÷")){

           result=divideFenshu(x,y);

     }

     else if(oper.equals("*")){

           result=multiFenshu(x,y);

    }

     else result=new FenShu(-1,-1);

          return result;

    }

    //分数加

    public static FenShu addFenshu(FenShu x,FenShu y){

         int zi,mu,yue;

         mu=x.getFenmu()*y.getFenmu();

         zi=x.getFenzi()*y.getFenmu()+y.getFenzi()*x.getFenmu();

          yue=Function.fun(zi, mu);

        zi/=yue;

         mu/=yue;

        FenShu fenshu=new FenShu(zi,mu);

         return fenshu;

    }

    //分数除

    public static FenShu divideFenshu(FenShu x,FenShu y){

    int zi,mu,yue;

    mu=x.getFenmu()*y.getFenzi();

    zi=x.getFenzi()*y.getFenmu();

    yue=Function.fun(zi, mu);

    zi/=yue;

    mu/=yue;

     FenShu fenshu=new FenShu(zi,mu);

    return fenshu;

    }

    //分数除

    public static FenShu multiFenshu(FenShu x,FenShu y){

          int zi,mu,yue;

          mu=x.getFenmu()*y.getFenmu();

          zi=x.getFenzi()*y.getFenzi();

          yue=Function.fun(zi, mu);

           zi/=yue;

          mu/=yue;

          FenShu fenshu=new FenShu(zi,mu);

          return fenshu;

     }

    }

    class Expression{

          private Vector<String> expression;

          private boolean ifInt;

         private String value="";

         public Expression(boolean ifint){

           expression=new Vector<String>();

          ifInt=ifint;

    }

    88public Expression() {

           expression=new Vector<String>();

     }

    public void push(String x){

          expression.addElement(x);

     }

     public String get(int i){

            if(expression!=null&&i>=0&&i<expression.size()){

              return expression.get(i);

    }

     else return null;

    }

     public void set(int i,String x){

                if(expression!=null&&i>=0&&i<expression.size()){

             expression.set(i,x);

    }

              else return;

     }

    public void insert(int i,String x){

          if(expression!=null&&i>=0&&i<expression.size()){

           expression.insertElementAt(x,i);

     }

          else return;

    }

     public void add(int i,String x){

        if(expression!=null&&i>=0&&i<expression.size()){

           expression.add(i,x);

    }

    else return ;

     }

    public void delete(int i){

         if(expression!=null&&i>=0&&i<expression.size()){

             expression.removeElementAt(i);

    }

         else return ;

    }

     public void show(){

        for(int i=0;i<expression.size();i++){

         System.out.print(expression.get(i));

     }

         System.out.print(value);

    }

     public int size(){

         if(expression!=null)

           return expression.size();

         else return -1;

    }

     public void setValue(String v){

         value=v;

    }

     public String getValue(){

        return value;

    }

    public boolean getIfint(){

         return ifInt;

     }

    }

    class FenShu{

     private int fenzi;

    private int fenmu;

    public FenShu(){

          fenzi=1; fenmu=1;

    }

     public FenShu(int x,int y){

         fenzi=x; fenmu=y;

    }

     public int getFenzi(){

          return fenzi;

     }

    public int getFenmu(){

          return fenmu;

    }

    public String getFenshu(){

         String s="["+fenzi+"/"+fenmu+"]";

          return s;

    }

    }

    //数据库操作

    class DBBean {

      private String driverStr = "com.microsoft.sqlserver.jdbc.SQLServerDriver";

       private String connStr = "jdbc:sqlserver://localhost:1433; DatabaseName=yfyf";

       private String dbusername = "sa";

        private String dbpassword = "123456";

        private Connection conn = null;

       private PreparedStatement pstmt = null;

    public DBBean()

    {

           try

          {

             Class.forName(driverStr);

             conn = DriverManager.getConnection(connStr, dbusername, dbpassword);

           }

     catch (Exception ex) {

           System.out.println("数据连接失败!");

     }

     }

    public void insertEx(Expression e){

         if(e.size()!=4 && (!e.getValue().equals(""))){

           System.out.println("插入表达式失败!");

          return ;

       }else{

           try{

                     String sql = "insert into expression values('" +e.get(0)+ "','" +e.get(1)+ "','" +e.get(2)+ "','" +e.getValue()+ "')";

               pstmt=conn.prepareStatement(sql);

               int rst=pstmt.executeUpdate();

             if(rst!=0){

              System.out.print("成功插入表达式:");

               e.show();

               System.out.print(" ");

    }

     else

              System.out.println("插入表达式失败!");

     }

     catch(Exception ex){

             System.out.println("插入表达式失败!");            }

    }

    }

    //清空数据表

    public void clear(){

       try{

          String sql="delete expression";

           pstmt=conn.prepareStatement(sql);

            int rst=pstmt.executeUpdate();

          if(rst!=0){

            System.out.println("成功清空数据表");

     }            

     }

     catch(Exception e){

           System.out.println("delete语句执行失败!");365         }

     }

     }

  • 相关阅读:
    [转]C#汉字转拼音的源码
    [转]C# DES 加密/解密类库,支持文件和中文/UNICODE字符,返回BASE64编码字符串
    48瓶子,48种性格
    “识谎”36计
    巧克力有益智商 经常吃可提高大脑计算能力
    调用方未由服务进行身份验证
    揭秘人体24小时使用手册
    [转]C#实现人民币金额小写转大写的代码
    转一篇绝对详细的手工构造PE文件教程
    bat 查找某个进程的ID号
  • 原文地址:https://www.cnblogs.com/cxr0711/p/6946472.html
Copyright © 2011-2022 走看看