伙伴链接: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++中四则运算的计算方法,也有安卓界面的开发以及在移动设备上的应用的知识,这两者在这次实验中进行了融合,但是这并不意味着是将两者生硬的合并在一起,而是两者有序的,你中有我,两者不可或缺的融合。
当然在这个过程中我们费了不少脑筋,因为对安卓知识的缺乏,但是我们也没有放弃,在图书馆找了大量的资料,翻阅了很多书籍,从入门做起,最初学会了简单界面的搭建,后来在慢慢的熟悉了安卓的开发环境之后,有渐渐的学会了安卓控件的使用,由于对这方面的知识接触时间太短,在程序运行时出现的错误还是很难发现,但是我们的努力和坚持也使得我们获得了一定的成果,最终可以在移动设备上显示运算式,虽然在结果显示上还存在着很多不足,但是我觉得这次实验对我来说是进步的,我觉得这是最重要的。 虽然不知道在接下来的实验中我们还会碰到什么样的困难,但是无论是什么我都会尽最大的努力去完成,不断超越自己的!
五、时间记录日志
六、实验计划日志
七、缺陷记录日志
八、工作照