• 软件工程结对作业02


    伙伴博客地址:http://www.cnblogs.com/haoying1994/ 

    软件链接:http://files.cnblogs.com/files/chengqiqin07/Calculator.apk

    一、设计思想

          这次的实验是在前几次实验的又一次升级版的叠加,在看到老师给出的题目要求时,首先我们想到了编写一个智能手机软件,因为我们正在学习移动应用技术开发技术,同时,现在智能手机应用广泛,相对来说比较有实用性。在这几次老师的上课指导下,我们开始我们的二柱子运算终极版代码编写。首先我们开始搭建环境,然后开始搭建界面(ps:原计划用两个界面,可是倒腾了很久,查阅了很多资料,总是无法实现界面的跳转),然后开始进行控件的使用以及对运算式的显示,我们打算把以前用C++写的程序导入进去,编程Java语言。最后计算结果,点击下一题后台匹配答案,判断结果是否正确(ps:计算结果也由于知识学习不够,在老师规定时间内尚未完成,并没有实现)。

    二、源程序代码

    MainActivity.java

    package com.Chengqiqin.calculator;
    
    import java.text.NumberFormat;
    import java.text.ParseException;
    import java.util.Locale;
    import java.util.Random;
    
    import android.os.Bundle;
    import android.renderscript.Script;
    import android.text.TextUtils;
    import android.app.Activity;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View; 
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.RadioButton;
    import android.widget.RadioGroup;
    import android.widget.TextView;
    import android.widget.Toast;
    import android.app.Activity;
    import android.view.Menu;
    
    public class MainActivity extends Activity {
    
        //变量***********************************************************************
        private RadioGroup rgRes;
        private TextView tvProblem,tvDisplay;
        private RadioButton rB1,rB2,rB3,rB4;
        private EditText etl,etResult,etR;
        private Button btnNext;
        int Choose=0;
        String Result;
        int maxNum=0;
        int Pronum=0,numb=0;;
        String problem="";
        String symbol[]={"+","-","*","/"};
        int i=1;  
        int a[]={-1};
        
        Random ran=new Random(System.currentTimeMillis());
        //函数***********************************************************************
       
        private RadioGroup.OnCheckedChangeListener mChangeRadio = new RadioGroup.OnCheckedChangeListener() //监控RadioButton控件
        {
            
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                if(checkedId==rB1.getId())
                {
                    Choose=1;
                }
                else if(checkedId==rB2.getId())
                {
                    Choose=2;
                }
                else if(checkedId==rB3.getId())
                {
                    Choose=3;
                }
                else if(checkedId==rB4.getId())
                {
                    Choose=4;
                }
            }
        }; 
        
        @Override 
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            tvProblem=(TextView)findViewById(R.id.tvProblem); 
            tvDisplay=(TextView)findViewById(R.id.tvDisplay); 
            btnNext=(Button)findViewById(R.id.btnNext);
            rgRes=(RadioGroup)findViewById(R.id.rgRes);
            rB1=(RadioButton)findViewById(R.id.rB1);
            rB2=(RadioButton)findViewById(R.id.rB2);
            rB3=(RadioButton)findViewById(R.id.rB3);
            rB4=(RadioButton)findViewById(R.id.rB4); 
            etl=(EditText)findViewById(R.id.etl);
            etR=(EditText)findViewById(R.id.etR);
            etResult=(EditText)findViewById(R.id.etResult);
            tvDisplay.setText("点击下一题继续答题!");
            
            rgRes.setOnCheckedChangeListener(mChangeRadio);
            btnNext.setOnClickListener(new Button.OnClickListener()//监控”下一题“控件
            {
    
                @Override
                public void onClick(View arg0) 
                {
                    // TODO Auto-generated method stub  
                    if(i<Pronum+1)
                    {
                        problem="";
                        tvProblem.clearComposingText();
                        tvProblem.setText("第"+i+"题:"+Problem()+"=");  
                        tvDisplay.setText("");
                        i++;
                    }
                    else
                    {
                        tvDisplay.setText("答题结束,请重新选择题目类型并开始答题");
                    }
                }
            });
        }
        
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            //getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
        public String Problem()//得出表达式
        {
            if(Choose==1||Choose==2)
            {
                int num=ran.nextInt(3)+2;
                problem=problem+ran.nextInt(maxNum);
                while(num-1>0)
                {
                    problem=problem+symbol[ran.nextInt(numb)];
                    problem=problem+(ran.nextInt(maxNum-1)+1);
                    num--;
                 }
            }
            else if(Choose==3||Choose==4)
            {    
                int num=ran.nextInt(2)+2;
                int Rbr=0,j=0,n=0;
                while(j<num-1)
                {
                    while(ran.nextInt(2)==1&&Rbr<num-2&&j<num-1)
                    {
                        if(n>0&&a[n-1]==0&&j<=num-2)
                        {
                            break;
                        }
                        else
                        {
                            problem=problem+"(";
                            a[n]=j;
                            Rbr++;
                            n++;        
                            if(j==num-2)
                            {
                                break;
                            }
                        }    
                    }
                    problem=problem+(ran.nextInt(maxNum-1)+1);
                    if(n>0&&a[n-1]<=j-1)
                    {    
                        if(Rbr==2)
                        {
                            problem=problem+")"; 
                            n--;
                        }
                        else
                        { 
                            if(ran.nextInt(2)==0)
                            {    
                                problem=problem+")"; 
                                n--;
                            }
                        } 
                    }
                    if(j==num-2)
                    {
                        if(n>0&&a[n-1]==0)
                        {    
                            problem=problem+")"; 
                            n--;
                        }
                    }
                    problem=problem+symbol[ran.nextInt(numb)];
                    j++;
                } 
                problem=problem+(ran.nextInt(maxNum-1)+1);
                while(n>0)
                {
                    problem=problem+")"; 
                    n--; 
                }
            }
            return problem;
        }
        public void btnBegin_Click(View v)//监控”开始答题“控件
        { 
            
             String s="";
             s=tvDisplay.getText().toString().trim();
             if(s.equals("")){//上一次答题未结束时重新选择答题
                 Toast t=Toast.makeText(MainActivity.this, "答题还没有结束,请继续答题", Toast.LENGTH_LONG);
                 t.show();
                  return;
              }
             else
             {
                 s=etl.getText().toString().trim();
                 int flag=0;
                 if(s.equals("")){//避免题目数量为空
                     Toast t=Toast.makeText(MainActivity.this, "请输入题目数量", Toast.LENGTH_LONG);
                     t.show();
                     return;
                 }
                 else
                 {
                     Pronum = Integer.parseInt(s);
                     flag++;
                 }
                 s=etResult.getText().toString();
                 if(s.equals("")){//避免上限为空
                     Toast t=Toast.makeText(MainActivity.this, "请输入上限", Toast.LENGTH_LONG);
                     t.show();
                     return;
                 }
                 else
                 {
                     maxNum=Integer.parseInt(s);
                     flag++;
                 }
                 if(Choose==1||Choose==3)
                 {
                     numb=2;
                 }
                 else
                 {
                     numb=4;
                 }
                 if(flag==2)
                 {
                     problem="";
                     i=2;
                     tvProblem.clearComposingText();
                     tvProblem.setText("第"+1+"题:"+Problem()+"="); 
                     tvDisplay.setText("");
                 }  
             }
        }
    }

    layout

    <LinearLayout xmlns:tools="http://schemas.android.com/tools"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/LinearLayout1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".MainActivity" >
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:text="欢迎进入四则运算题库!" />
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="请选择四则运算题类型:" />
    
        <RadioGroup
            android:id="@+id/rgRes"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >
    
            <RadioButton
                android:id="@+id/rB1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:checked="true"
                android:text="一级(只有加减)" />
    
            <RadioButton
                android:id="@+id/rB2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="二级(既有加减,又有乘除)" />
    
            <RadioButton
                android:id="@+id/rB3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="三级(只有加减,有括号)" />
    
            <RadioButton
                android:id="@+id/rB4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="四级(加减乘除加括号)" />
    
        </RadioGroup>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
    
            <TextView
                android:id="@+id/textView4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="请输入题目数量:" />
    
            <EditText
                android:id="@+id/etl"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:ems="10" />
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
    
            <TextView
                android:id="@+id/textView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="请输入运算式中数的最大值" />
    
            <EditText
                android:id="@+id/etResult"
                android:layout_width="80dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:ems="10" >
    
                <requestFocus />
            </EditText>
    
        </LinearLayout>
    
        <Button
            android:id="@+id/btnBegin"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="btnBegin_Click"
            android:text="开始答题" />
    
        <TextView
            android:id="@+id/textView5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="请在等号后面输入你的答案:" />
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
    
            <TextView
                android:id="@+id/tvProblem"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
    
            <EditText
                android:id="@+id/etR"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:ems="10" />
    
            <Button
                android:id="@+id/btnNext"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:onClick="btnNext_Click"
                android:text="下一题" />
    
        </LinearLayout>
    
        <TextView
            android:id="@+id/tvDisplay"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    
    </LinearLayout>

    三、运行结果截图

    四、编程总结及体会

            这次编程我们选择了用安卓,虽然实验完成效果不好,但是我学习到了很多,再用C++编写时,我对以前的知识进行了复习,在对Android软件编写时,我学习到了很多,不再像刚开始那样什么都不懂了。在实验中,尽管我们正在学习如何用安卓编写智能手机应用,可是我也算是刚刚入门,遇到的问题颇多的,我们总是解决了一个问题又遇到了一个新的问题,总的来说,还是自己能力不够,学习的知识点不到位。在这次实验中,我在将C++语言编写的代码导入到Java中时,由于不能进行调试,导致出现问题我也无法判断问题出现在哪里,实验时间大大浪费,同时由于对我使用的ADT编程软件不熟悉,加大了实验难度,最终在时间快到时仍然还有问题没有解决,比如无法实现两个界面的转换(界面不不美观)、无法判断结果。我想这说明了我学习还有很大不足,需要在以后增加自己的技能,多动手实验。我会在后面的时间里继续学习Android开发编程,争取能进一步完善这个程序。

    五、PSP表格

     

    六、工作照

  • 相关阅读:
    99%的人都理解错了HTTP中GET与POST的区别
    idea 使用
    一道java算法题
    记一次jedis并发使用问题JedisException: Could not return the resource to the pool
    我珍藏的神兵利器
    记一次诡异的debug
    spring cloud config
    spring mvc 集成quartz
    git使用下
    Mongo--03 mongo副本集、备份与恢复
  • 原文地址:https://www.cnblogs.com/chengqiqin07/p/5342594.html
Copyright © 2020-2023  润新知