【移動應(yīng)用開發(fā)技術(shù)】Android實現(xiàn)簡單的答題系統(tǒng)_第1頁
【移動應(yīng)用開發(fā)技術(shù)】Android實現(xiàn)簡單的答題系統(tǒng)_第2頁
【移動應(yīng)用開發(fā)技術(shù)】Android實現(xiàn)簡單的答題系統(tǒng)_第3頁
【移動應(yīng)用開發(fā)技術(shù)】Android實現(xiàn)簡單的答題系統(tǒng)_第4頁
【移動應(yīng)用開發(fā)技術(shù)】Android實現(xiàn)簡單的答題系統(tǒng)_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

【移動應(yīng)用開發(fā)技術(shù)】Android實現(xiàn)簡單的答題系統(tǒng)

在下給大家分享一下Android實現(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ù)庫,下載SQLiteDatabaseBrowser對數(shù)據(jù)庫進(jìn)行操作srcmain文件夾下創(chuàng)建assests文件夾(此文件夾下的內(nèi)容在應(yīng)用被打包成apk時不會被壓縮)(存放試題數(shù)據(jù)庫)在數(shù)據(jù)庫啟動時,將該數(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ī)訪問,其實Cursor與JDBC中的ResultSet作用很相似。

rawQuery()方法的第一個參數(shù)為select語句;第二個參數(shù)為select語句中占位符參數(shù)的值,如果select語句沒有使用占位符,該參數(shù)可以設(shè)置為null。*/

Cursor

cursor

=db.rawQuery("select

*

from

question",null);

if(cursor.getCount()>0){

cursor.moveToFirst();//將cursor移動到第一個光標(biāo)上

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;//標(biāo)志變量,判斷是否進(jìn)入錯題模式

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);

}

}

//錯題模式的最后一題

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ù)量,并詢問用戶是否要查看錯題

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)

{

//判斷進(jìn)入錯題模式

wrongMode=true;

List<Question>

newList=new

ArrayList<Question>();

//將錯誤題目復(fù)制到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();

//更新顯示時的內(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)擊取消時,關(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);

}

}

}

});

//選擇選項時更新選擇

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;

}

}

}

});

}

/*

判斷用戶作答是否正確,并將作答錯誤題目的下標(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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論