四則運算手機開發版

1、題目java

每一個同窗選一個方向,把程序擴展一下:
一、讓程序能接受用戶輸入答案,並斷定對錯。並輸出正確的錯題數
二、把程序變成一個網頁程序,用戶經過設定參數,就能夠獲得各類題目。
三、把程序變成一個Windows 圖形界面的程序。
四、把程序變成一個智能手機程序 (你正在用什麼手機, 就寫那個手機的程序)。(能夠延期3周後)
五、選一個你歷來沒有學過的編程語言,試一試實現基本功能。android

2、思路c++

  四則運算出題應用
  1.輸入出題數 ,點擊Confirm  ( 1<=n<=MAXNUMBER)
  2.提交成功後,顯示第一道題目
  3.點擊Last和Next可切換題目
  4.點擊Submit後,覈對題目正確與否,並輸出答對題數
  
  注意:
  1.答案保留一位小數
  2.除法老是用較大的數除以較小的數
3、源代碼
 
 
 
  

package com.example.example07;編程

 
  

import java.text.DecimalFormat;數組

 
  

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;app

 
  

public class MainActivity extends Activity {dom

 
  

private int index = 0; // 當前題數
private int NUMBER = 0;; // 題目總數
private static final int MAXNUMBER = 100; // 最大出題數
private static final int MAXVALUE = 100; // 每道題目的最大值
private boolean isSubmit = false; // 是否提交
private String[] QUESTION = new String[MAXNUMBER]; // 題目集合
private double[] ANSWER = new double[MAXNUMBER]; // 答案集合
private double[] USER_ANSWER = new double[MAXNUMBER]; // 用戶答案集合
private boolean[] ANSWER_CHECK = new boolean[MAXNUMBER]; // 用戶答案斷定

//聲明控件
private EditText et_number,et_answer,et_question; //題目數輸入框 答案輸入框 題目顯示框
private Button btn_confirm,btn_last,btn_next,btn_submit; //肯定題數 上一題 下一題 提交題目
private TextView tv_count,tv_check,tv_judge;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// 獲取控件
et_question = (EditText)findViewById(R.id.et_question); // 題目顯示
et_number = (EditText)findViewById(R.id.et_number); // 題數
et_answer = (EditText)findViewById(R.id.et_answer); // 答案
btn_confirm = (Button)findViewById(R.id.btn_confirm); // 肯定題數
btn_last = (Button)findViewById(R.id.btn_last); // 上一題
btn_next = (Button)findViewById(R.id.btn_next); // 下一題
btn_submit = (Button)findViewById(R.id.btn_submit); // 提交題目
tv_count = (TextView)findViewById(R.id.tv_count); // 顯示當前題目數
tv_check = (TextView)findViewById(R.id.tv_check); // 輸出答對題數
tv_judge = (TextView)findViewById(R.id.tv_judge); // 斷定正確與否

// 肯定輸入題數按鈕
btn_confirm.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// 若是輸入題數範圍正確
if(inputNumber()){
et_number.setEnabled(false); // 題數不可再輸入
btn_confirm.setEnabled(false); // Confirm按鈕不可用
NUMBER = Integer.parseInt(et_number.getText().toString()); // 獲取題目數
getQuestion(); // 獲取題目
showItem(index); // 顯示題目

// 激活選題按鈕
btn_next.setOnClickListener(new NextClick());
btn_last.setOnClickListener(new LastClick());
}
}
});

// 提交按鈕
btn_submit.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
if (inputNumber()) {
if (!isSubmit) {
if (check()) {
btn_submit.setText("重置");
isSubmit = true;
et_answer.setEnabled(false);
}
} else {
// 重置函數
reset();
btn_submit.setText("提交");
isSubmit = false;
et_answer.setEnabled(true);
}
}
}
});
}

/*
* 輸入題數判斷
*/
private boolean inputNumber(){
int temp = 0;
try{
temp = Integer.parseInt(et_number.getText().toString());
}catch(Exception e){
e.printStackTrace();
return false;
}

if(temp >= 1 && temp <= MAXNUMBER){
return true;
}
else{
return false;
}
}

// 輸出全部100之內加減乘除的式子
private void getQuestion(){
DesignQuestion dq = new DesignQuestion();
DecimalFormat df = new DecimalFormat(".00");
for(int i = 0;i < NUMBER;i++){
dq.reset(); // 從新出題
QUESTION[i] = dq.getString(); // 獲取題目
ANSWER[i] = Double.parseDouble(df.format(dq.getAnswer())); // 獲取答案
}

}



// 顯示第i題的題目
private void showItem(int i){
et_question.setText(QUESTION[i]);
index = i;
tv_count.setText(""+(index+1)+"/"+NUMBER);
if(USER_ANSWER[i]!=0.0){
et_answer.setText(""+USER_ANSWER[i]);
}

// 若是提交
if(isSubmit){
if(ANSWER_CHECK[index] == true){
tv_judge.setText("√");
Toast.makeText(getApplicationContext(), "回答正確" ,Toast.LENGTH_SHORT).show();
}
else{
tv_judge.setText("×");
Toast.makeText(getApplicationContext(), "正確答案爲"+ANSWER[index],Toast.LENGTH_SHORT).show();
}
}

// 獲取焦點
et_answer.requestFocus();
}

// 上一題按鈕
class LastClick implements OnClickListener{編程語言

 
  

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
if(index == 0){
Toast.makeText(getApplicationContext(), "這已是第一題",Toast.LENGTH_SHORT).show();
}
else{
if(!et_answer.getText().toString().equals("")){ // 輸入非空
try{
USER_ANSWER[index] = Double.parseDouble(et_answer.getText().toString());
}catch(Exception e){
e.printStackTrace();
return;
}
}
// 顯示上一題
index--;
et_answer.setText("");
showItem(index);
}
}

}

// 下一題按鈕
class NextClick implements OnClickListener{ide

 
  

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
if(index == NUMBER-1){
Toast.makeText(getApplicationContext(), "這已是最後一題",Toast.LENGTH_SHORT).show();
}
else{
// 若是輸入非空
if(!et_answer.getText().toString().equals("")){
try{
USER_ANSWER[index] = Double.parseDouble(et_answer.getText().toString());
}catch(Exception e){
e.printStackTrace();
return;
}
}

// 顯示下一題
index++;
et_answer.setText("");
showItem(index);
}
}

}

// 覈對答案
private boolean check(){

// 斷定最後一道題目
if(!et_answer.getText().toString().equals("")){
try{
USER_ANSWER[index] = Double.parseDouble(et_answer.getText().toString());
}catch(Exception e){
e.printStackTrace();
return false;
}
}

// 覈對全部題目
int right = 0; // 答對題數
for(int i = 0;i < NUMBER;i++){
if(ANSWER[i] == USER_ANSWER[i]){
right++;
ANSWER_CHECK[i] = true;
}
}

// 斷定提交時正在顯示的題目
if(ANSWER_CHECK[index] == true){
tv_judge.setText("√");
Toast.makeText(getApplicationContext(), "回答正確" ,Toast.LENGTH_SHORT).show();
}
else{
tv_judge.setText("×");
Toast.makeText(getApplicationContext(), "正確答案爲"+ANSWER[index],Toast.LENGTH_SHORT).show();
}

String str = "這次答題共" + NUMBER + "道題,答對" + right + "題。";
tv_check.setText(str);

return true;
}

// 重置函數
private void reset(){
// 重置變量
index = 0;
NUMBER = 0;
ANSWER = new double[MAXNUMBER];
QUESTION = new String[MAXNUMBER];
USER_ANSWER = new double[MAXNUMBER];
ANSWER_CHECK = new boolean[MAXNUMBER];

// 重置控件
btn_confirm.setEnabled(true);
et_number.setEnabled(true);
tv_count.setText("0/0");
et_answer.setText("");
tv_check.setText("");
tv_judge.setText("");
et_number.setText("");
et_question.setText("");

}


}函數

 
  


package com.example.example07;

 
  

/*
* 出題類
* 可調用的方法:
* 1.從新出題
* 2.獲取題目
* 3.獲取答案
*/

 
  

public class DesignQuestion {

 
  

private int valueNum;
private int[] values;
private int[] symbols;
private static int MAXVALUE = 100;


// 構造函數
public DesignQuestion(){
valueNum = 3;
toRandom();
}

public void reset(){
toRandom();
}

// 生成隨機數和符號
private void toRandom(){
// 數值隨機
values = new int[valueNum];
for(int i = 0; i < values.length;i++){
values[i] = (int)(1+Math.random()*MAXVALUE);
}
// 符號隨機
symbols = new int[valueNum-1];
for(int i = 0;i < symbols.length;i++){
symbols[i] = (int)(1+Math.random()*4);
}
}

/* 生成答案
* 1.若是第一個符號爲加 則先計算後面
* 2.若是第一個符號爲減
* 第二個符號位加減 則先計算前面 不然先計算後面
* 3.若是第一個符號爲乘除 則先計算前面
*/
public double getAnswer(){
double temp = 0;
switch(symbols[0]){
case 1:{
temp = getResult(values[1],values[2],symbols[1]);
return getResult(values[0],(int)temp,symbols[0]);
}
case 2:{
if(symbols[1] == 1 || symbols[1] == 2){ // 第二位爲加減
temp = getResult(values[0],values[1],symbols[0]);
return getResult((int)temp,values[2],symbols[1]);
}
else{
temp = getResult(values[1],values[2],symbols[1]);
return getResult(values[0],(int)temp,symbols[0]);
}
}
case 3:
case 4:{
temp = getResult(values[0],values[1],symbols[0]);
return getResult((int)temp,values[2],symbols[1]);
}
default: return 0;
}
}

// 根據符號返回計算結果
private double getResult(int leftValue,int rightValue,int symbol){
switch(symbol){
case 1:return leftValue + rightValue;
case 2:return leftValue - rightValue;
case 3:return leftValue * rightValue;
case 4:return (double)leftValue / (double)rightValue;
default:return 0;
}
}

// 生成題目
public String getString(){
String temp = "";
for(int i = 0;i < valueNum-1;i++){
temp = temp + values[i] + "\t\t\t" + toSymbol(symbols[i]) + "\t\t\t";
}
temp = temp + values[valueNum-1]+ "\t\t\t=";
return temp;
}

// 根據數字返回符號
private String toSymbol(int i){
switch(i){
case 1:return "+";
case 2:return "-";
case 3:return "*";
case 4:return "/";
default:return null;
}
}

}

 
 
 

4、實驗截圖

 

 

4、實驗日誌

項目記錄 日誌:

 

聽課

編寫程序

閱讀相關書籍

網上查找資料

日總計

上週四

2

0

0

0

2

上週五

0

1

1

0

2

上週六

0

3

0.5

1

4.5

上週日

2

0.5

0.5

0

3

週一

0

3

0.5

1

4.5

週二

0

1

0

1

2

週三

0

2

1

0

4

周總計

4

12.5

3.5

3

21

時間記錄日誌

日期

開始 時間

結束時間

中斷時間

淨時間

活動

備註

上週四

14:00

16:00

10

100

上課

軟件工程

上週五

16:00

17:00

0

60

編程

二維數組問題

 

 

19:00

20:00

0

60

閱讀書籍

構建之法

上週六

12:00

16:00

60

180

編程

 

 

19:00

21:00

30

90

閱讀書籍

構建之法

上週日

14:00

16:00

10

100

上課

軟件工程

 

19:00

20:00

0

60

編程 查找資料

四則運算安卓版

星期一

13:00

17:00

60

180

編程

數組問題

四則運算安卓版

 

17:00

18:00

0

60

上網

查資料

星期二

12:00

14:00

30

90

編程

數組問題

星期三

13:00

15:00

0

180

編程

四則運算安卓版

缺陷記錄日誌:

日期

編號

類型

引入階段

排除階段

修復階段

修復缺陷

 

4/1

1

操做數的個數

 

 

12h

 

 

在編寫的程序中,從一開始的兩個數的運算增長到三個數的運算

 

 

 

 

 

5、實驗總結:本次實驗是在上幾回四則運算的基礎上編寫出來的,咱們應用移動應用開發技術將本次實驗發佈成安卓版本,並能夠安裝到手機上,咱們此次的思路沒有改變,知識語言由c++轉變爲Java語言,Java語言相對比較簡單,好多函數、類都能調用,比較方便。並且在這次編寫 的過程當中,咱們對安卓的開發更加熟悉,使咱們獲益很多。

  個人夥伴 魯鑫:http://www.cnblogs.com/LUXIN123/

相關文章
相關標籤/搜索