国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android實現簡單的答題系統

2019-10-22 18:16:56
字體:
來源:轉載
供稿:網友

本文實例為大家分享了Android實現答題系統的具體代碼,供大家參考,具體內容如下

Question:

package com.example.lenovo.exam;  /**  * Created by lenovo on 2017/12/4.  */ //保存從數據庫中讀取的記錄 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自帶數據庫,下載SQLite Database Browser對數據庫進行操作
src main文件夾下創建assests文件夾(此文件夾下的內容在應用被打包成apk時不會被壓縮)(存放試題數據庫)

在數據庫啟動時,將該數據庫文件復制到數據庫目錄下

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.  */ //連接數據庫,并從數據庫中獲取所需數據 public class DBService {  private SQLiteDatabase db;  //在構造函數中打開指定數據庫,并把它的引用指向db  public DBService(){   db=SQLiteDatabase.openDatabase("/data/data/com.example.lenovo.exam/databases/question.db" +     "",null,SQLiteDatabase.OPEN_READWRITE);  }  //獲取數據庫中的問題  public List<Question> getQuestion(){   List<Question> list=new ArrayList<Question>();   /*     Cursor是結果集游標,用于對結果集進行隨機訪問,其實Cursor與JDBC中的ResultSet作用很相似。     rawQuery()方法的第一個參數為select語句;第二個參數為select語句中占位符參數的值,如果select語句沒有使用占位符,該參數可以設置為null。*/   Cursor cursor =db.rawQuery("select * from question",null);   if(cursor.getCount()>0){    cursor.moveToFirst();//將cursor移動到第一個光標上    int count=cursor.getCount();    //將cursor中的每一條記錄生成一個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"));     //表示沒有選擇任何選項     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;//標志變量,判斷是否進入錯題模式   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;//默認情況    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) {//若當前題目不為最后一題,點擊next按鈕跳轉到下一題;否則不響應      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);       //若之前已經選擇過,則應記錄選擇      radioGroup.clearCheck();      if (q.selectedAnswer != -1) {       radioButtons[q.selectedAnswer].setChecked(true);      }      }     //錯題模式的最后一題     else if(current==count-1&& wrongMode==true){      new AlertDialog.Builder(ExamActivity.this)        .setTitle("提示")        .setMessage("已經到達最后一題,是否退出?")        .setPositiveButton("確定", new DialogInterface.OnClickListener() {         @Override         public void onClick(DialogInterface dialogInterface, int i) {          ExamActivity.this.finish();         }        })        .setNegativeButton("取消",null)        .show();      }     else{      //當前題目為最后一題時,告知用戶作答正確的數量和作答錯誤的數量,并詢問用戶是否要查看錯題      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())+           "道題目;答錯了"+wrongList.size()+"道題目。是否查看錯題?")         .setPositiveButton("確定", new DialogInterface.OnClickListener() {          @Override          public void onClick(DialogInterface dialogInterface, int which) {            //判斷進入錯題模式           wrongMode=true;           List<Question> newList=new ArrayList<Question>();           //將錯誤題目復制到newList中           for(int i=0;i< wrongList.size();i++){            newList.add(list.get(wrongList.get(i)));           }           //將原來的list清空           list.clear();           //將錯誤題目添加到原來的list中           for(int i=0;i<newList.size();i++){            list.add(newList.get(i));           }           current=0;           count=list.size();           //更新顯示時的內容           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) { //點擊取消時,關閉當前activity           ExamActivity.this.finish();          }         }).show();     }    }   });   btn_previous.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View view) {     if (current > 0)//若當前題目不為第一題,點擊previous按鈕跳轉到上一題;否則不響應     {      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);        //若之前已經選擇過,則應記錄選擇      radioGroup.clearCheck();      if (q.selectedAnswer != -1) {       radioButtons[q.selectedAnswer].setChecked(true);      }      }     }   });   //選擇選項時更新選擇   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;      }     }     }   });  }   /* 判斷用戶作答是否正確,并將作答錯誤題目的下標生成list,返回給調用者  */  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";   //應用啟動時,判斷數據庫是否存在,不存在則將提前打包好的數據庫文件復制到數據庫目錄下   //數據庫目錄不存在時,創建數據庫目錄   if ((new File(DB_PATH + DB_NAME).exists()) == false) {    File dir = new File(DB_PATH);    if (!dir.exists()) {     dir.mkdir();    }   } //定義輸入輸出流,用于復制文件   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);    }    //刷新輸出流,關閉輸入輸出流    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);      }   });    } } 

運行截圖

Android,答題系統Android,答題系統Android,答題系統Android,答題系統

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 固始县| 涟源市| 萨嘎县| 泗阳县| 大新县| 紫云| 治县。| 加查县| 鸡泽县| 凤山县| 五家渠市| 麻阳| 玉溪市| 垫江县| 合江县| 闽侯县| 凤阳县| 涟水县| 高邑县| 囊谦县| 崇左市| 富顺县| 泸水县| 黑河市| 景洪市| 涟源市| 株洲县| 永兴县| 盐源县| 会泽县| 临沧市| 米林县| 南阳市| 永丰县| 容城县| 湖南省| 固始县| 湖南省| 凤阳县| 彰武县| 鸡西市|