中小学数学卷子自动生成程序——结对编程队友代码分析

概述                                                                                                                                                                                                                    

这是我搭档编写的中小学数学卷子自动生成程序,总体来说功能实现比较完整,代码规范性好、可读性高。

 

优点                                                                                                                                                                                                                    

1.类变量、函数命名规范,变量和函数的功能也比较清晰。类变量的命名完全按照命名规范,如m_type、m_username、m_password等,命名符合变量含义。

    private String m_type;
    private String m_username;
    private int m_password;
    private int m_cnt;    

 

2.题目功能实现比较完善,能够正确生成符合要求的题目

 

3.整个系统的完整度较高,有登陆提示语、退出提示语,用户体验感较好;生成的试卷题目符合每个组别的题目要求且题目形式全面;生成试卷后能够生成按规定命名的文件夹,且可以重复多次地生成不同的试卷。

 

4.代码逻辑清晰,条理性好,利用函数对代码进行封装,函数命名规范,功能一目了然,代码整体的可读性好。

  • 在GeneratingXxxProblem()的函数中,使用数组分类储存操作符,实现不同难度题目的生成,且符合要求中规定的至少条件;对括号符号进行特殊处理,使能生成正确有效的算式
    public void GeneratingSeniorProblem() {            //生成高中题目的函数
            String[] lOperator=new String[] {"+", "-", "*", "/" };
            String[] mOperator=new String[] {"²", "√" };
            String[] hOperator=new String[] {"sin", "cos", "tan"};
            Date now = new Date(); 
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
            String NowTime = format.format( now ); 
            FileWriter writer;
            String str="下列为高中题目,总有"+m_cnt+"道题\r\n";
            
            Random random = new Random();
            for(int i=0;i<m_cnt;i++) 
            {
                str+=i+1+"、";
                int number=random.nextInt(5)%5 + 1;                                                    //生成一个1~5的随机数
                String[] operand=new String[number];
                int rd=random.nextInt(99)+1;
                int onezero=random.nextInt(3);
                operand[0]=hOperator[onezero]+rd;
                
                for(int j=1;j<number;j++)                                                                //获得number个0--99的数字及²、√、sin、cos、tan组成的字符串
                {                       
                    rd=random.nextInt(99)+1;
                    onezero=random.nextInt(8);
                    if(onezero>4) 
                    {
                        operand[j]=""+rd;
                        continue;
                    }
                    else if(onezero==3) 
                    {
                        operand[j]=rd+mOperator[onezero-3];
                        continue;
                    }
                    else if(onezero==4) 
                    {
                        operand[j]=mOperator[onezero-3]+rd;
                        continue;
                    }
                    operand[j]=hOperator[onezero]+rd;
                }
                
                int j=random.nextInt(number);
                for(int n=0;n<number-1;j++,n++)             
                {
                    int temp=random.nextInt(4);
                    str+=operand[j]+lOperator[temp];
                    if(j==number-1) j=-1;
                }
                str+=operand[j]+"="+"\r\n\r\n";
            }
            try 
            {
                String root="src/"+m_username+"/"+NowTime+".txt";;
                writer = new FileWriter(root);
                writer.write(str);
                writer.flush();
                writer.close();
            } 
            catch (IOException e) 
            {
                e.printStackTrace();
            }
        }

     

5.每个功能用函数封装,体现了代码的模块化以及面向对象编程的思想

 

private void InitType()                       //初始化学生信息

private void InputNumber()                   //用于读取输入的函数

public void LoginGenerator()                 //登录系统的函数

public void GeneratingPrimaryProblem()      //生成小学题目

public void GeneratingMiddleProblem()      //生成初中题目

public void GeneratingSeniorProblem()      //生成高中题目的函数

 

 

缺点                                                                                                                                                                                                                    

 1.切换组别的时候没有提示语,感觉可以更加完善,提升用户体验感;界面的容错能力也可以再提升一点

2.没有实现查重功能

3.用if-else语句判断用户名和密码对应在本题给出的特殊条件下可以适用,但是这种判断不太符合实际情况

4.只有小学组别的题目使用到了括号,功能实现还不够完善

 

 

心得                                                                                                                                                                                                                   

对比起我自己,我的搭档考虑问题需求仔细严谨,基本实现了所有功能;通过队友的代码,发现了自己的个人项目中的很多不足,功能实现不完整,交互界面也不够完善,还有太多需要修改和改进的地方。希望能在之后的结对编程里把这些问题都一一解决和改进,做出一个更好的图形用户交互界面。

posted @ 2020-09-30 22:46  软件1802肖欣  阅读(129)  评论(0)    收藏  举报