版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 迎春晚會活動方案
- 2026年及未來5年中國液力緩速器行業(yè)市場調(diào)查研究及投資前景預(yù)測報告
- 2026年智慧農(nóng)業(yè)生態(tài)建設(shè)行業(yè)報告
- 企業(yè)心理咨詢制度
- 五臺縣文昌學(xué)校制度
- 機(jī)動技術(shù)偵察
- 二次系統(tǒng)的基本知識課件
- 湖北中考?xì)v史三年(2023-2025)真題分類匯編專題03 中國現(xiàn)代史選擇題(解析版)
- 2025-2030中國生命科學(xué)產(chǎn)業(yè)發(fā)展戰(zhàn)略及投資策略建議研究研究報告
- 2025至2030中國金融科技服務(wù)市場監(jiān)管政策及商業(yè)模式評估研究報告
- 電力設(shè)施的綠色設(shè)計與可持續(xù)發(fā)展
- 小型農(nóng)場研學(xué)課課程設(shè)計
- GB/T 3487-2024乘用車輪輞規(guī)格系列
- 第四單元“小說天地”(主題閱讀)-2024-2025學(xué)年六年級語文上冊閱讀理解(統(tǒng)編版)
- 蔣詩萌小品《誰殺死了周日》臺詞完整版
- 中醫(yī)培訓(xùn)課件:《中藥熱奄包技術(shù)》
- 2024年全國初中數(shù)學(xué)聯(lián)合競賽試題參考答案及評分標(biāo)準(zhǔn)
- 七年級上信息科技期末測試卷
- 起重機(jī)械的安全圍擋與隔離區(qū)域
- 車輛運(yùn)用管理工作-認(rèn)識車輛部門組織機(jī)構(gòu)(鐵道車輛管理)
- 22S803 圓形鋼筋混凝土蓄水池
評論
0/150
提交評論