基於調查需求下完成的四則運算,我們完成了主要的3大功能。
第一,普通的填空題運算,這個是傳統的運算練習方式,團隊都認為這個選項是必要的,好的傳統要留下來,在個人經歷中,填空練習是一個不錯的選擇。
第二,選擇題的運算,選擇題是另一個特別的傳統練習方式,選擇題可以調轉運算者的思維方式,不一定要按部就班運算,例如某些答案可以帶入而得出結果。
第三,我們設立了一個提高測試的選項,里面有時間限制的填空題運算,好處是在做慣普通填空題的人可以在自己設立的時間限制下,看看能完成多少道題目,提高每次的效率,從而更好的提高運算能力。
整體燃盡圖:
本次實驗中團隊的分工完成如下:
王俊凱:主要對選擇題運算項目的編寫。
核心代碼:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.xuanzeti_layout); ActionBar actionBar = getActionBar();//獲取ActionBar對象 actionBar.setDisplayShowHomeEnabled(true);//顯示應用程序圖標 actionBar.setDisplayHomeAsUpEnabled(true);//將應用程序圖標轉變為可點擊圖標,並添加一個返回箭頭 btn_next = (Button) findViewById(R.id.buttonnext); btn_next.setOnClickListener(this); btn_FN = (Button) findViewById(R.id.buttonfinishe); btn_FN.setOnClickListener(this); textView = (TextView) findViewById(R.id.textViewtimu); textViewtip = (TextView) findViewById(R.id.textViewtip); btnA = (Button) findViewById(R.id.buttonA); btnA.setOnClickListener(this); btnB = (Button) findViewById(R.id.buttonB); btnB.setOnClickListener(this); btnC = (Button) findViewById(R.id.buttonC); btnC.setOnClickListener(this); btnD = (Button) findViewById(R.id.buttonD); btnD.setOnClickListener(this); CreatCal(); } @Override public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.buttonA: if(datiflag==true){textViewtip.setText("你已答過此題!!");break;}datiflag=true; if (Integer.parseInt(this.btnA.getText().toString().substring(2)) == trueResult) { textViewtip.setText("選擇正確!"); counter++; all++; } else { textViewtip.setText("選擇錯誤!"); all++; } break; case R.id.buttonB: if(datiflag==true){textViewtip.setText("你已答過此題!!");break;}datiflag=true; if (Integer.parseInt(this.btnB.getText().toString().substring(2)) == trueResult) { textViewtip.setText("選擇正確!"); counter++; all++; } else { textViewtip.setText("選擇錯誤!"); all++; } break; case R.id.buttonC: if(datiflag==true){textViewtip.setText("你已答過此題!!");break;}datiflag=true; if (Integer.parseInt(this.btnC.getText().toString().substring(2)) == trueResult) { textViewtip.setText("選擇正確!"); counter++; all++; } else { textViewtip.setText("選擇錯誤!"); all++; } break; case R.id.buttonD: if(datiflag==true){textViewtip.setText("你已答過此題!!");break;} datiflag=true; if (Integer.parseInt(this.btnD.getText().toString().substring(2)) == trueResult) { textViewtip.setText("選擇正確!"); counter++; all++; } else { textViewtip.setText("選擇錯誤!"); all++; } break; case R.id.buttonnext: CreatCal(); break; case R.id.buttonfinishe: textViewtip.setText("你一共答了" + all + "題,對了"+counter+"題");// +",正確率為:" Toast.makeText(this, "答題結束!", Toast.LENGTH_LONG).show(); break; } } public int CreatCal() { datiflag=false; int i1, i2; char[] h = { '+', '-', 'x', '÷' }; i1 = (int) (Math.random() * 3); i2 = (int) (Math.random() * 4); num1 = (int) (Math.random() * 100 + 1); num3 = (int) (Math.random() * 100 + 1); if (i2 == 3) num2 = (int) (Math.random() * 10 + 1) * num3; else num2 = (int) (Math.random() * 100 + 1); textView.setText(num1 + "" + h[i1] + "" + num2 + h[i2] + num3 + "="); trueResult = core.Cal(i1, i2, num1, num2, num3); rand = (int) (Math.random() * 3); switch (rand) { case 0: btnA.setText("A." + trueResult); btnB.setText("B." + (trueResult + 10)); btnC.setText("C." + (trueResult + 20)); btnD.setText("D." + (trueResult + 30)); break; case 1: btnA.setText("A." + (trueResult - 10)); btnB.setText("B." + trueResult); btnC.setText("C." + (trueResult + 10)); btnD.setText("D." + (trueResult + 20)); break; case 2: btnA.setText("A." + (trueResult - 20)); btnB.setText("B." + (trueResult - 10)); btnC.setText("C." + trueResult); btnD.setText("D." + (trueResult + 10)); break; case 3: btnA.setText("A." + (trueResult - 30)); btnB.setText("B." + (trueResult - 20)); btnC.setText("C." + (trueResult - 10)); btnD.setText("D." + this.CreatCal()); break; } return trueResult; }
王逸輝:主要對計時練習運算項目的編寫。
核心代碼:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.jishi_layout); btn_next = (Button) findViewById(R.id.b2); btn_next.setOnClickListener(this); btn_PD = (Button) findViewById(R.id.button1); btn_PD.setOnClickListener(this); text = (EditText) findViewById(R.id.editText1); textView = (TextView) findViewById(R.id.textView2); textViewtip = (TextView) findViewById(R.id.textView5); ActionBar actionBar = getActionBar();//獲取ActionBar對象 actionBar.setDisplayShowHomeEnabled(true);//顯示應用程序圖標 actionBar.setDisplayHomeAsUpEnabled(true);//將應用程序圖標轉變為可點擊圖標,並添加一個返回箭頭 CreatCal(); final Chronometer chronometer = (Chronometer) findViewById(R.id.chronometer); Button btnStart = (Button) findViewById(R.id.btnStart); Button btnStop = (Button) findViewById(R.id.btnStop); Button btnRest = (Button) findViewById(R.id.btnReset); final EditText edtSetTime = (EditText) findViewById(R.id.edt_settime); btnStart.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { System.out.println("--開始記時---"); String ss = edtSetTime.getText().toString(); if (!(ss.equals("") && ss != null)) { startTime = Integer.parseInt(edtSetTime.getText() .toString()); } // 設置開始講時時間 chronometer.setBase(SystemClock.elapsedRealtime()); // 開始記時 chronometer.start(); } }); btnStop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 停止 chronometer.stop(); } }); // 重置 btnRest.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { chronometer.setBase(SystemClock.elapsedRealtime()); a = b = c = 0; } }); chronometer .setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() { @Override public void onChronometerTick(Chronometer chronometer) { // 如果開始計時到現在超過了startime秒 if (SystemClock.elapsedRealtime() - chronometer.getBase() > startTime * 1000) { chronometer.stop(); // 給用戶提示 showDialog(); } } }); } protected void showDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(this); // builder.setIcon(R.drawable.eb28d25); builder.setTitle("警告") .setMessage("時間到,完成題目個數為" + c + "正確題目個數為" + a + "錯誤題目個數為" + b) .setPositiveButton("確定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); AlertDialog dialog = builder.create(); dialog.show(); }
羅凱傑丶馬志磊:主要對填空題運算項目的編寫,整體布局的制作和BUG的提出與修正。
核心代碼:布局那些代碼太多了,而且分散,這里就不作介紹了...
public void CreatCal() { int i1, i2; char[] h = { '+', '-', 'x', '÷' }; i1 = (int) (Math.random() * 3); i2 = (int) (Math.random() * 4); num1 = (int) (Math.random() * 100 + 1); num3 = (int) (Math.random() * 100 + 1); if(i2==3) num2 = (int) (Math.random() * 10 + 1)*num3; else num2 = (int) (Math.random() * 100 + 1); textView.setText(num1 + "" + h[i1] + "" + num2 + h[i2] + num3 + "="); trueResult = core.Cal(i1, i2, num1, num2, num3); // trueResult=core.Add(i1,i2,num1,num2,num3); /* * switch (i1) { case 0: trueResult=core.Add(num1, num2); * * break; case 1: trueResult=core.Subtraction(num1, num2); break; case * 2: trueResult=core.multiplication(num1, num2); break; case 3: * trueResult=core.Division(num1, num2); break; } */ } public void checkout(int trueResult) { String test = text.getText().toString(); if (test != null && test.length() > 0) { result = Integer.parseInt(this.text.getText().toString()); if (result == trueResult) { this.textViewtip.setText("答案正確!"); } else { this.textViewtip.setText("錯誤,正確答案是:" + this.trueResult); } // 處理代碼 } else { // 可以彈出警告 Toast.makeText(this, "輸入不能為空!", Toast.LENGTH_LONG).show(); } }
每個人都有做出自己的工作量,有不懂和不適宜的地方,我們都會開會進行討論,互相幫助完成項目。
第三階段貢獻分:
王俊凱 30
王逸輝 30
羅凱傑 20
馬志磊 20
以下是我們程序的主要界面及應用:
完成軟件后,我們在推廣方面也下了不少功夫,比如在某些社交網站上上傳我們的軟件推介,向一些有需求的用戶推介,在之前作調查的用戶中也有期待我們結果的用戶,我們也給他們發送軟件下載,希望他們用了好評后推廣出去。
推廣鏈接:http://pan.baidu.com/s/1sjSvnKp
我們團隊存放代碼的GITHUB的地址https://github.com/masion