软件工程结对作业02

 伙伴链接:http://www.cnblogs.com/chengqiqin07/

 安卓APP:http://files.cnblogs.com/files/chengqiqin07/Calculator.apk

一、设计思路

   我们这次的实验是在前几次实验的又一次升级版的叠加,在实验要求中选择一个网页程序或智能升级程序两者中我们选择了后者,一方面相对于网页,智能移动设备的使用对于现在社会是很普遍的,对于我们以后的学习是很有帮助的,因此想借此学习一下安卓开发,另一方面是我的伙伴目前在上移动应用技术开发技术课,对我们的实验有帮助,在这几次老师的上课指导下,我们开始我们的二柱子运算终极版代码编写。首先我们在visual studio 2010中用EXE完成了四则运算的式子输出以及结果计算以及判断功能,其次我们开始搭建安卓的开发环境,然后开始搭建界面(ps:原计划用两个界面,可是倒腾了很久,查阅了很多资料,总是无法实现界面的跳转),然后开始进行控件的使用以及对运算式的显示,我们打算把以前写的程序导入进去,编程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++中四则运算的计算方法,也有安卓界面的开发以及在移动设备上的应用的知识,这两者在这次实验中进行了融合,但是这并不意味着是将两者生硬的合并在一起,而是两者有序的,你中有我,两者不可或缺的融合。

   当然在这个过程中我们费了不少脑筋,因为对安卓知识的缺乏,但是我们也没有放弃,在图书馆找了大量的资料,翻阅了很多书籍,从入门做起,最初学会了简单界面的搭建,后来在慢慢的熟悉了安卓的开发环境之后,有渐渐的学会了安卓控件的使用,由于对这方面的知识接触时间太短,在程序运行时出现的错误还是很难发现,但是我们的努力和坚持也使得我们获得了一定的成果,最终可以在移动设备上显示运算式,虽然在结果显示上还存在着很多不足,但是我觉得这次实验对我来说是进步的,我觉得这是最重要的。    虽然不知道在接下来的实验中我们还会碰到什么样的困难,但是无论是什么我都会尽最大的努力去完成,不断超越自己的!

五、时间记录日志

六、实验计划日志

七、缺陷记录日志

八、工作照

转载于:https://www.cnblogs.com/haoying1994/p/5346121.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值