”二柱子“终结版
一、实验要求
1、生成的题目中计算过程不能产生负数;
2、题目中生成的除法算式,其结果应该为真分数;
3、每道题目中出现的运算符的个数不超过3个,括号不限;
4、程序一次运行生成的题目不能重复
5、把程序变成一个网页程序或者只能手机程序,用户通过设定参数,就可以得到各种题目,并可以实现在线答题并评判
二、实验项目介绍
本次实验的安卓程序名为“四则运算生成器”,是使用JAVA语言在Andriod Eclipse上编写的,主要功能是用户可订制题目数量、数值范围还有进行计算练习题的类型,分别用TextView、RadioButton实现的,然后将控件获取的值传递到第二个界面实现题目的随机生成。然后在计算界面可以显示用户在前一页上进行的选择,然后依次出题,用户作答,之后判断正误,显示正确答案,最后统计正确率。最后我们将项目打包成为了.APK文件,可以跨手机进行安装。
三、实验源代码
CalculateNow.java文件:
package i.love.icalculator; import tools.calculate.*; import java.util.Random; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.View; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import org.luyang.csdn.*; public class CalculateNow extends Activity { //变量************************************************************* int level, quizCount, maxNumber, number,count1,count2; String question,answer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_calculate_now); // 从前面页面得到配置信息==============开始================= //TextView tv_level = (TextView) findViewById(R.id.tv_level); TextView tv_quizCount = (TextView) findViewById(R.id.tv_quizCount); TextView tv_maxNumber = (TextView) findViewById(R.id.tv_maxNumber); TextView tv_showQuestionNumber = (TextView) findViewById(R.id.tv_showQuestionNumber); Intent intent = getIntent(); level = intent.getIntExtra("level", 0); quizCount = intent.getIntExtra("quizCount", 0); maxNumber = intent.getIntExtra("maxNumber", 0); count1=intent.getIntExtra("count1", 0); count2=intent.getIntExtra("count2", 0); //tv_level.setText(String.valueOf(level)); tv_quizCount.setText(String.valueOf(quizCount)); tv_maxNumber.setText(String.valueOf(maxNumber)); // 从前面页面得到配置信息==============结束================= number = 1; tv_showQuestionNumber.setText("第" + String.valueOf(number) + "题"); calculate c = new calculate(); question = c.Question(level, maxNumber); answer = String.valueOf(new CalStr(question).getResult()); TextView tv_showQuestion = (TextView) findViewById(R.id.tv_showQuestion); tv_showQuestion.setText(question + "=" ); } //函数***************************************************************** public void answerSubmit(View v) //提交 { EditText et_answer=(EditText) findViewById(R.id.et_getAnswer); TextView tv_checkYes=(TextView) findViewById(R.id.checkYes); try { if(et_answer.length()==0){ Toast.makeText(this, "请回答问题", 0).show(); } else if(Float.parseFloat(et_answer.getText().toString().trim())==Float.parseFloat(answer)){ count1++; tv_checkYes.setText("恭喜你答对了!!!"+" "+"一共答对了"+count1+"道题目,答错了"+count2+"道题目。"); } else{ count2++; tv_checkYes.setText("很抱歉答错了,答案是"+answer+" "+"一共答对了"+count1+"道题目,答错了"+count2+"道题目。"); } } catch (NumberFormatException e) { Toast.makeText(this, "请输入正常的数字", 0).show(); return; } if (number < quizCount) { number++; calculate c = new calculate(); TextView tv_showQuestionNumber = (TextView) findViewById(R.id.tv_showQuestionNumber); TextView tv_showQuestion = (TextView) findViewById(R.id.tv_showQuestion); tv_showQuestionNumber.setText("第" + String.valueOf(number) + "题"); question = c.Question(level, maxNumber); answer = String.valueOf(new CalStr(question).getResult()); tv_showQuestion.setText(question + "=" ); } else{ Toast.makeText(this, "全部的题已经做完,请重新开始,或者退出系统", 1).show(); } et_answer.setText(""); } public void Clear(View v)//重置 { TextView txtView = (TextView) findViewById(R.id.et_getAnswer); txtView.setText(" "); } }
CalulatorConfig.java文件:
package i.love.icalculator; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.RadioButton; import android.widget.Toast; public class CalculatorConfig extends Activity { Button bt_startQuiz; RadioButton rb_level1, rb_level2, rb_level3, rb_level4; EditText et_quizCount, et_maxNumber; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_calculator_config); bt_startQuiz = (Button) findViewById(R.id.bt_startQuiz); rb_level1 = (RadioButton) findViewById(R.id.rb_level1); rb_level2 = (RadioButton) findViewById(R.id.rb_level2); rb_level3 = (RadioButton) findViewById(R.id.rb_level3); rb_level4 = (RadioButton) findViewById(R.id.rb_level4); et_quizCount = (EditText) findViewById(R.id.et_quizCount); et_maxNumber = (EditText) findViewById(R.id.et_maxNumber); } // 判断得到试题级别 public int checkWhichLevelIsSelected() { if (rb_level1.isChecked()) { return 1; } else if (rb_level2.isChecked()) { return 2; } else if (rb_level3.isChecked()) { return 3; } else if (rb_level4.isChecked()) { return 4; } else { return 0; } } // 点击开始答题按钮方法 public void startQuiz(View v) { if (et_quizCount.length() == 0) { Toast.makeText(this, "请输入题目数量", Toast.LENGTH_SHORT).show(); return; } else if (et_maxNumber.length() == 0) { Toast.makeText(this, "请输入运算式中数的最大值", Toast.LENGTH_SHORT).show(); return; } else if (Integer.parseInt(et_quizCount.getText().toString()) == 0) { Toast.makeText(this, "题目数量不能为0", Toast.LENGTH_SHORT).show(); return; } else if (Integer.parseInt(et_maxNumber.getText().toString()) == 0) { Toast.makeText(this, "最大值不能为0", Toast.LENGTH_SHORT).show(); return; } else { int level = checkWhichLevelIsSelected(); int quizCount = Integer.parseInt(et_quizCount.getText().toString() .trim()); int maxNumber = Integer.parseInt(et_maxNumber.getText().toString() .trim()); Intent intent = new Intent(this, CalculateNow.class); intent.putExtra("level", level); intent.putExtra("quizCount", quizCount); intent.putExtra("maxNumber", maxNumber); startActivity(intent); } } }
四、实验效果展示
主界面如下: 开始答题:
点击“提交”按钮: 点击“重置”按钮后,文本被清除:
之后每道题目的显示:
五、实验心得
通过这次二柱子的实验,我能够基本了解配置id,布置各个控件,编辑控件单击事件等等函数的方法。安卓程序与C#一样都是可视化的编程,但是区别还是蛮明显。C#是用C语言为基本语言编写的,而安卓是用JAVA语言。我们对JAVA语言的熟悉度显然没有C熟悉。还有就是,可视化的界面设计不像C++程序那样所有的功能都是用代码来实现的,这样有利又有弊吧,比如我们可以简单的设计自己的界面,但是这样就不容易像别人学习代码,因为在同样的界面下面将函数加载到不同的地方实现的功能可能完全不一样。
此外,以为这次作业的任务量比较大,我们都有畏惧心理,所以拖延症又犯了,原计划清明小长假的时候完成的任务拖到昨天今天才弄完。下次的项目我们一定要做好计划,然后每天或者每一阶段严格按照计划实施。
最后附上同组的小伙伴赵子茵博客主页,大家都辛苦了~~~