zoukankan      html  css  js  c++  java
  • 四则运算03

    设计思想:

    把整数和真分数进行分类,在每个分类下进行输入题目量、数值范围、是否有乘除法、加减法是否有负数、除法是否有余数的操作。

    在整数下定义两个随机数,在真分数下定义四个随机数。

    如果有乘除法,加减法有负数,除法有余数就直接输出题目。

    如果无乘除法,那么输出的结果就只有加减法的题目。

    之后把生成的题目写入数据库,然后测试10000条数据

    源代码:

    package zuoye3;
    
    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[]={'+','-','*','÷'};
        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(""+randomArr[0]);
                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;
        }
        public 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=test";
        private String dbusername = "sa";
        private String dbpassword = "144214";
        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语句执行失败!");
            }
        }
    }
    

    结果截图:

     

  • 相关阅读:
    【整理】Dword、LPSTR、LPWSTR、LPCSTR、LPCWSTR、LPTSTR、LPCTSTR
    C/C++中printf和C++中cout的输出格式
    左值的理解(给渴望学习的新手)
    c++ 指针精髓
    c++中的函数前面加个LRESULT是什么意思啊?
    pb调用vc写的动态链接库文件
    C++问题 & *用法
    vs2008下MFC内存泄露问题一点经验
    mysql5.6.41winx64安装
    开发是一件需要非常小心的工作
  • 原文地址:https://www.cnblogs.com/huyangyang/p/7010736.html
Copyright © 2011-2022 走看看