软件工程结对作业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表格

 

六、工作照

原文地址:https://www.cnblogs.com/chengqiqin07/p/5342594.html