欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android實(shí)現(xiàn)簡單的答題系統(tǒng)

 更新時(shí)間:2021年01月27日 11:39:16   作者:我愛酸奶奶奶奶奶  
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)簡單的答題系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Android實(shí)現(xiàn)答題系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下

Question:

package com.example.lenovo.exam; 
 
/** 
 * Created by lenovo on 2017/12/4. 
 */ 
//保存從數(shù)據(jù)庫中讀取的記錄 
public class Question { 
 public String question; 
 public String answerA; 
 public String answerB; 
 public String answerC; 
 public String answerD; 
 public int answer; 
 public String explaination; 
 public int ID ; 
 //用戶選擇的答案 
 public int selectedAnswer; 
} 

DBService:

使用android自帶數(shù)據(jù)庫,下載SQLite Database Browser對數(shù)據(jù)庫進(jìn)行操作
src main文件夾下創(chuàng)建assests文件夾(此文件夾下的內(nèi)容在應(yīng)用被打包成apk時(shí)不會被壓縮)(存放試題數(shù)據(jù)庫)

在數(shù)據(jù)庫啟動(dòng)時(shí),將該數(shù)據(jù)庫文件復(fù)制到數(shù)據(jù)庫目錄下

package com.example.lenovo.exam; 
 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
 
import java.util.ArrayList; 
import java.util.List; 
 
/** 
 * Created by lenovo on 2017/12/4. 
 */ 
//連接數(shù)據(jù)庫,并從數(shù)據(jù)庫中獲取所需數(shù)據(jù) 
public class DBService { 
 private SQLiteDatabase db; 
 //在構(gòu)造函數(shù)中打開指定數(shù)據(jù)庫,并把它的引用指向db 
 public DBService(){ 
 db=SQLiteDatabase.openDatabase("/data/data/com.example.lenovo.exam/databases/question.db" + 
  "",null,SQLiteDatabase.OPEN_READWRITE); 
 } 
 //獲取數(shù)據(jù)庫中的問題 
 public List<Question> getQuestion(){ 
 List<Question> list=new ArrayList<Question>(); 
 /* 
  Cursor是結(jié)果集游標(biāo),用于對結(jié)果集進(jìn)行隨機(jī)訪問,其實(shí)Cursor與JDBC中的ResultSet作用很相似。 
  rawQuery()方法的第一個(gè)參數(shù)為select語句;第二個(gè)參數(shù)為select語句中占位符參數(shù)的值,如果select語句沒有使用占位符,該參數(shù)可以設(shè)置為null。*/ 
 Cursor cursor =db.rawQuery("select * from question",null); 
 if(cursor.getCount()>0){ 
  cursor.moveToFirst();//將cursor移動(dòng)到第一個(gè)光標(biāo)上 
  int count=cursor.getCount(); 
  //將cursor中的每一條記錄生成一個(gè)question對象,并將該question對象添加到list中 
  for(int i=0;i<count;i++){ 
  cursor.moveToPosition(i); 
  Question question =new Question(); 
  question.ID=cursor.getInt(cursor.getColumnIndex("ID")); 
  question.question=cursor.getString(cursor.getColumnIndex("question")); 
  question.answerA=cursor.getString(cursor.getColumnIndex("answerA")); 
  question.answerB=cursor.getString(cursor.getColumnIndex("answerB")); 
  question.answerC=cursor.getString(cursor.getColumnIndex("answerC")); 
  question.answerD=cursor.getString(cursor.getColumnIndex("answerD")); 
  question.answer=cursor.getInt(cursor.getColumnIndex("answer")); 
 
  question.explaination=cursor.getString(cursor.getColumnIndex("explanation")); 
  //表示沒有選擇任何選項(xiàng) 
  question.selectedAnswer=-1; 
  list.add(question); 
  } 
 } 
 return list; 
 } 
 
} 

ExamActivity:

package com.example.lenovo.exam; 
 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.RadioButton; 
import android.widget.RadioGroup; 
import android.widget.TextView; 
 
import java.util.ArrayList; 
import java.util.List; 
 
/** 
 * Created by lenovo on 2017/12/4. 
 */ 
 
public class ExamActivity extends Activity { 
 
 private int count; 
 private int current; 
 private boolean wrongMode;//標(biāo)志變量,判斷是否進(jìn)入錯(cuò)題模式 
 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_exam); 
 
 DBService dbService = new DBService(); 
 final List<Question> list = dbService.getQuestion(); 
 
 count = list.size(); 
 current = 0; 
 wrongMode=false;//默認(rèn)情況 
 
 final TextView tv_question = findViewById(R.id.question); 
 final RadioButton[] radioButtons = new RadioButton[4]; 
 radioButtons[0] = findViewById(R.id.answerA); 
 radioButtons[1] = findViewById(R.id.answerB); 
 radioButtons[2] = findViewById(R.id.answerC); 
 radioButtons[3] = findViewById(R.id.answerD); 
 Button btn_previous = findViewById(R.id.btn_previous); 
 Button btn_next = findViewById(R.id.btn_next); 
 final TextView tv_explaination = findViewById(R.id.explaination); 
 final RadioGroup radioGroup = findViewById(R.id.radioGroup); 
 //為控件賦值 
 Question q = list.get(0); 
 tv_question.setText(q.question); 
 tv_explaination.setText(q.explaination); 
 radioButtons[0].setText(q.answerA); 
 radioButtons[1].setText(q.answerB); 
 radioButtons[2].setText(q.answerC); 
 radioButtons[3].setText(q.answerD); 
 
 btn_next.setOnClickListener(new View.OnClickListener() { 
 
  @Override 
  public void onClick(View view) { 
  if (current < count - 1) {//若當(dāng)前題目不為最后一題,點(diǎn)擊next按鈕跳轉(zhuǎn)到下一題;否則不響應(yīng) 
   current++; 
   //更新題目 
   Question q = list.get(current); 
   tv_question.setText(q.question); 
   radioButtons[0].setText(q.answerA); 
   radioButtons[1].setText(q.answerB); 
   radioButtons[2].setText(q.answerC); 
   radioButtons[3].setText(q.answerD); 
   tv_explaination.setText(q.explaination); 
 
   //若之前已經(jīng)選擇過,則應(yīng)記錄選擇 
   radioGroup.clearCheck(); 
   if (q.selectedAnswer != -1) { 
   radioButtons[q.selectedAnswer].setChecked(true); 
   } 
 
  } 
  //錯(cuò)題模式的最后一題 
  else if(current==count-1&& wrongMode==true){ 
   new AlertDialog.Builder(ExamActivity.this) 
    .setTitle("提示") 
    .setMessage("已經(jīng)到達(dá)最后一題,是否退出?") 
    .setPositiveButton("確定", new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialogInterface, int i) { 
     ExamActivity.this.finish(); 
    } 
    }) 
    .setNegativeButton("取消",null) 
    .show(); 
 
  } 
  else{ 
   //當(dāng)前題目為最后一題時(shí),告知用戶作答正確的數(shù)量和作答錯(cuò)誤的數(shù)量,并詢問用戶是否要查看錯(cuò)題 
   final List<Integer> wrongList=checkAnswer(list); 
   //作對所有題目 
   if(wrongList.size()==0){ 
   new AlertDialog.Builder(ExamActivity.this) 
    .setTitle("提示") 
    .setMessage("恭喜你全部回答正確!") 
    .setPositiveButton("確定", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int i) { 
     ExamActivity.this.finish(); 
     } 
    }).show(); 
 
   } 
   else 
   new AlertDialog.Builder(ExamActivity.this) 
    .setTitle("提示") 
    .setMessage("您答對了"+(list.size()-wrongList.size())+ 
     "道題目;答錯(cuò)了"+wrongList.size()+"道題目。是否查看錯(cuò)題?") 
    .setPositiveButton("確定", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int which) { 
 
     //判斷進(jìn)入錯(cuò)題模式 
     wrongMode=true; 
     List<Question> newList=new ArrayList<Question>(); 
     //將錯(cuò)誤題目復(fù)制到newList中 
     for(int i=0;i< wrongList.size();i++){ 
      newList.add(list.get(wrongList.get(i))); 
     } 
     //將原來的list清空 
     list.clear(); 
     //將錯(cuò)誤題目添加到原來的list中 
     for(int i=0;i<newList.size();i++){ 
      list.add(newList.get(i)); 
     } 
     current=0; 
     count=list.size(); 
     //更新顯示時(shí)的內(nèi)容 
     Question q = list.get(current); 
     tv_question.setText(q.question); 
     radioButtons[0].setText(q.answerA); 
     radioButtons[1].setText(q.answerB); 
     radioButtons[2].setText(q.answerC); 
     radioButtons[3].setText(q.answerD); 
     tv_explaination.setText(q.explaination); 
     //顯示解析 
     tv_explaination.setVisibility(View.VISIBLE); 
     } 
    }) 
    .setNegativeButton("取消", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int which) { 
//點(diǎn)擊取消時(shí),關(guān)閉當(dāng)前activity 
     ExamActivity.this.finish(); 
     } 
    }).show(); 
  } 
  } 
 }); 
 btn_previous.setOnClickListener(new View.OnClickListener() { 
  @Override 
  public void onClick(View view) { 
  if (current > 0)//若當(dāng)前題目不為第一題,點(diǎn)擊previous按鈕跳轉(zhuǎn)到上一題;否則不響應(yīng) 
  { 
   current--; 
   Question q = list.get(current); 
   tv_question.setText(q.question); 
   radioButtons[0].setText(q.answerA); 
   radioButtons[1].setText(q.answerB); 
   radioButtons[2].setText(q.answerC); 
   radioButtons[3].setText(q.answerD); 
   tv_explaination.setText(q.explaination); 
 
 
   //若之前已經(jīng)選擇過,則應(yīng)記錄選擇 
   radioGroup.clearCheck(); 
   if (q.selectedAnswer != -1) { 
   radioButtons[q.selectedAnswer].setChecked(true); 
   } 
 
  } 
 
  } 
 }); 
 //選擇選項(xiàng)時(shí)更新選擇 
 radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 
  @Override 
  public void onCheckedChanged(RadioGroup radioGroup, int checkedId) { 
  for (int i = 0; i < 4; i++) { 
   if (radioButtons[i].isChecked() == true) { 
   list.get(current).selectedAnswer = i; 
   break; 
   } 
  } 
 
  } 
 }); 
 } 
 
 /* 
判斷用戶作答是否正確,并將作答錯(cuò)誤題目的下標(biāo)生成list,返回給調(diào)用者 
 */ 
 private List<Integer> checkAnswer(List<Question> list) { 
 List<Integer> wrongList = new ArrayList<Integer>(); 
 for(int i=0;i<list.size();i++) 
 { 
  if(list.get(i).answer!=list.get(i).selectedAnswer){ 
  wrongList.add(i); 
  } 
 } 
 return wrongList; 
 } 
} 

MainActivity:

package com.example.lenovo.exam; 
 
import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
 
 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
 
public class MainActivity extends AppCompatActivity { 
 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 String DB_PATH = "/data/data/com.example.lenovo.exam/databases/"; 
 String DB_NAME = "question.db"; 
 //應(yīng)用啟動(dòng)時(shí),判斷數(shù)據(jù)庫是否存在,不存在則將提前打包好的數(shù)據(jù)庫文件復(fù)制到數(shù)據(jù)庫目錄下 
 //數(shù)據(jù)庫目錄不存在時(shí),創(chuàng)建數(shù)據(jù)庫目錄 
 if ((new File(DB_PATH + DB_NAME).exists()) == false) { 
  File dir = new File(DB_PATH); 
  if (!dir.exists()) { 
  dir.mkdir(); 
  } 
 } 
//定義輸入輸出流,用于復(fù)制文件 
 try { 
  InputStream is = getBaseContext().getAssets().open(DB_NAME); 
  OutputStream os = new FileOutputStream(DB_PATH + DB_NAME); 
  byte[] buffer = new byte[1024]; 
  int length; 
  while ((length = is.read(buffer)) > 0) { 
  os.write(buffer, 0, length); 
  } 
  //刷新輸出流,關(guān)閉輸入輸出流 
  os.flush(); 
  os.close(); 
  os.close(); 
 
 
 } catch (IOException e) { 
  e.printStackTrace(); 
 } 
 
 
 Button btn = findViewById(R.id.button); 
 btn.setOnClickListener(new View.OnClickListener() 
 
 { 
  public void onClick(View v) { 
  Intent intent = new Intent(MainActivity.this, ExamActivity.class); 
  startActivity(intent); 
 
 
  } 
 }); 
 
 
 } 
} 

運(yùn)行截圖

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論