伙伴博客地址: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表格
六、工作照