android studio驾校题库计分项目
展示效果图
1:准备工作
2.
3.![在这里插入图片描述](https://img-blog.csdnimg.cn/20181217202445728.png) package com.example.a41119.standardtest; import android.app.Activity;
import android.app.AlertDialog;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import java.util.ArrayList;
public class MainActivity extends Activity {
private LinearLayout llSingleChoice;private LinearLayout llMultipleChoice;private LinearLayout llJudgement;private TextView tvStem;private RadioGroup rgSingleChoice;private RadioButton rbSingleA;private RadioButton rbSingleB;private RadioButton rbSingleC;private RadioButton rbSingleD;private RadioGroup rgJudgement;private RadioButton rbJudgementT;private RadioButton rbJudgementF;private CheckBox cbMultipleA;private CheckBox cbMultipleB;private CheckBox cbMultipleC;private CheckBox cbMultipleD;private ArrayList questions;private int questionIndex;private String[] answers;private String answer;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 利用布局资源文件设置用户界面 setContentView(R.layout.activity_main); // 通过资源标识获得控件实例 llSingleChoice = findViewById(R.id.ll_single_choice); llMultipleChoice = findViewById(R.id.ll_multiple_choice); llJudgement = findViewById(R.id.ll_judgement); tvStem = findViewById(R.id.tv_stem); rgSingleChoice = findViewById(R.id.rg_single_choice); rbSingleA = findViewById(R.id.rb_single_a); rbSingleB = findViewById(R.id.rb_single_b); rbSingleC = findViewById(R.id.rb_single_c); rbSingleD = findViewById(R.id.rb_single_d); rgJudgement = findViewById(R.id.rg_judgement); rbJudgementT = findViewById(R.id.rb_judgement_t); rbJudgementF = findViewById(R.id.rb_judgement_f); cbMultipleA = findViewById(R.id.cb_multiple_a); cbMultipleB = findViewById(R.id.cb_multiple_b); cbMultipleC = findViewById(R.id.cb_multiple_c); cbMultipleD = findViewById(R.id.cb_multiple_d); // 初始化试题库 questions = getQuestions(); // 实例化答案数组 answers = new String[questions.size()]; // 取出第1题 Question question = questions.get(questionIndex); // 根据题型设置界面 setInterfaceByType(question);}private ArrayList getQuestions() { ArrayList questions = new ArrayList<>(); // 创建第1题 Question question = new Question(); question.setId(1); question.setStem("驾驶机动车在道路上违反道路交通安全法的行为,属于什么行为?"); question.setA("违章行为"); question.setB("违法行为"); question.setC("过失行为"); question.setD("违规行为"); question.setType(1); question.setAnswer("B"); // 将第1题添加到试题库 questions.add(question); // 创建第2题 question = new Question(); question.setId(2); question.setStem("交通信号包括交通信号灯、交通标志、交通标线和交通警察的指挥。"); question.setA("正确"); question.setB("错误"); question.setC(""); question.setD(""); question.setType(3); question.setAnswer("A"); // 将第2题添加到试题库 questions.add(question); // 创建第3题 question = new Question(); question.setId(3); question.setStem("机动车驾驶人违法驾驶造成重大交通事故构成犯罪的,依法追究什么责任?"); question.setA("刑事责任"); question.setB("民事责任"); question.setC("经济责任"); question.setD("直接责任"); question.setType(1); question.setAnswer("A"); // 将第3题添加到试题库 questions.add(question); // 创建第4题 question = new Question(); question.setId(4); question.setStem("钱某驾驶大型卧铺客车,乘载45人(核载40人),保持40公里/小时以上的车速行至八宿县境内连续下坡急转弯路段处,翻下100米深的山崖,造成17人死亡、20人受伤。钱某的主要违法行为是什么?"); question.setA("驾驶时接听手持电话"); question.setB("超速行驶"); question.setC("客车超员"); question.setD("疲劳驾驶"); question.setType(2); question.setAnswer("BC"); // 将第4题添加到试题库 questions.add(question); // 创建第5题 question = new Question(); question.setId(5); question.setStem("邹某驾驶大型卧铺客车(核载35人,实载47人),行至京港澳高速公路938公里时,因乘车人携带的大量危险化学品在车厢内突然发生爆燃,造成41人死亡,6人受伤。此事故中的主要违法行为是什么?"); question.setA("客车超员"); question.setB("乘车人携带易燃易爆危险物品"); question.setC("超速行驶"); question.setD("不按规定停车"); question.setType(2); question.setAnswer("AB"); // 将第5题添加到试题库 questions.add(question); return questions;}/** * 根据题型设置界面 * * @param question */private void setInterfaceByType(Question question) { // 判断题型,选择界面 switch (question.getType()) { case 1: llSingleChoice.setVisibility(View.VISIBLE); llMultipleChoice.setVisibility(View.INVISIBLE); llJudgement.setVisibility(View.INVISIBLE); tvStem.setText("[单选] " + question.getId() + ". " + question.getStem()); tvStem.setTextColor(Color.RED); rbSingleA.setText(question.getA()); rbSingleB.setText(question.getB()); rbSingleC.setText(question.getC()); rbSingleD.setText(question.getD()); // 清空控件选中状态 rbSingleA.setChecked(false); rbSingleB.setChecked(false); rbSingleC.setChecked(false); rbSingleD.setChecked(false); rgSingleChoice.check(-1); answer = answers[questionIndex]; if (answer != null) { // 根据用户答案来设定单选按钮状态 switch (answer) { case "A": rbSingleA.setChecked(true); break; case "B": rbSingleB.setChecked(true); break; case "C": rbSingleC.setChecked(true); break; case "D": rbSingleD.setChecked(true); break; } } break; case 2: llMultipleChoice.setVisibility(View.VISIBLE); llSingleChoice.setVisibility(View.INVISIBLE); llJudgement.setVisibility(View.INVISIBLE); tvStem.setText("[多选] " + question.getId() + ". " + question.getStem()); tvStem.setTextColor(Color.BLACK); cbMultipleA.setText(question.getA()); cbMultipleB.setText(question.getB()); cbMultipleC.setText(question.getC()); cbMultipleD.setText(question.getD()); // 清空控件选中状态 cbMultipleA.setChecked(false); cbMultipleB.setChecked(false); cbMultipleC.setChecked(false); cbMultipleD.setChecked(false); answer = answers[questionIndex]; if (answer != null) { for (int i = 0; i < answer.length(); i++) { switch (answer.charAt(i)) { case 'A': cbMultipleA.setChecked(true); break; case 'B': cbMultipleB.setChecked(true); break; case 'C': cbMultipleC.setChecked(true); break; case 'D': cbMultipleD.setChecked(true); break; } } } break; case 3: llJudgement.setVisibility(View.VISIBLE); llSingleChoice.setVisibility(View.INVISIBLE); llMultipleChoice.setVisibility(View.INVISIBLE); tvStem.setText("[判断] " + question.getId() + ". " + question.getStem()); tvStem.setTextColor(Color.BLUE); // 清空控件选中状态 rbJudgementT.setChecked(false); rbJudgementF.setChecked(false); rgJudgement.check(-1); // 根据用户答案来设定单选按钮状态 answer = answers[questionIndex]; if (answer != null) { switch (answer) { case "A": rbJudgementT.setChecked(true); break; case "B": rbJudgementF.setChecked(true); break; } } }}/** * 退出 * * @param view */public void doExit(View view) { finish();}/** * 上一题 * * @param view */public void doPrevious(View view) { // 判断用户是否做了本题 switch (questions.get(questionIndex).getType()) { case 1: if (rbSingleA.isChecked() || rbSingleB.isChecked() || rbSingleC.isChecked() || rbSingleD.isChecked()) { saveAnswer(); } break; case 2: if (cbMultipleA.isChecked() || cbMultipleB.isChecked() || cbMultipleC.isChecked() || cbMultipleD.isChecked()) { saveAnswer(); } break; case 3: if (rbJudgementT.isChecked() || rbJudgementF.isChecked()) { saveAnswer(); } break; } if (questionIndex > 0) { questionIndex--; } else { questionIndex = questions.size() - 1; } // 根据题型设置界面 setInterfaceByType(questions.get(questionIndex));}/** * 下一题 * * @param view */public void doNext(View view) { // 判断用户是否做了本题 switch (questions.get(questionIndex).getType()) { case 1: if (rbSingleA.isChecked() || rbSingleB.isChecked() || rbSingleC.isChecked() || rbSingleD.isChecked()) { saveAnswer(); } break; case 2: if (cbMultipleA.isChecked() || cbMultipleB.isChecked() || cbMultipleC.isChecked() || cbMultipleD.isChecked()) { saveAnswer(); } break; case 3: if (rbJudgementT.isChecked() || rbJudgementF.isChecked()) { saveAnswer(); } break; } Log.d("test", (questionIndex + 1) + answers[questionIndex]); if (questionIndex < questions.size() - 1) { questionIndex++; } else { questionIndex = 0; } // 根据题型设置界面 setInterfaceByType(questions.get(questionIndex));}/** * 提交按钮单击事件处理方法 * * @param view */public void doSubmit(View view) { // 保存当前题目答案 saveAnswer(); // 计算成绩点 int points = 0; for (int i = 0; i < questions.size(); i++) { if (null != answers[i]) { if (answers[i].equals(questions.get(i).getAnswer())) { points++; } } } // 按百分制来折算分数 double score = points * 100 / questions.size(); // 根据分数给出评语 String comment = ""; if (score >= 90) { comment = "分数:" + score + "\n评语:棒棒哒~"; } else if (score >=60) { comment = "分数:" + score + "\n评语:还行吧!"; } else { comment = "分数:" + score + "\n评语:好好干吧!"; } // 利用警告对话框来显示测试结果 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setIcon(R.mipmap.ic_launcher_round) .setTitle("测试结果") .setMessage(comment) .setPositiveButton("确定", null) .create() .show();}/** * 保存用户选择的答案 */private void saveAnswer() { switch (questions.get(questionIndex).getType()) { case 1: // 单选题 if (rbSingleA.isChecked()) { answers[questionIndex] = "A"; } else if (rbSingleB.isChecked()) { answers[questionIndex] = "B"; } else if (rbSingleC.isChecked()) { answers[questionIndex] = "C"; } else { answers[questionIndex] = "D"; } break; case 2: // 多选题 StringBuilder builder = new StringBuilder(); if (cbMultipleA.isChecked()) { builder.append("A"); } if (cbMultipleB.isChecked()) { builder.append("B"); } if (cbMultipleC.isChecked()) { builder.append("C"); } if (cbMultipleD.isChecked()) { builder.append("D"); } answers[questionIndex] = builder.toString(); break; case 3: // 判断题 if (rbJudgementT.isChecked()) { answers[questionIndex] = "A"; } else { answers[questionIndex] = "B"; } break; }}
}
4
.
package com.example.a41119.standardtest;
/**
- Created by howard2005 on 2018-12-05.
*/
public class Question {
/**
* 编号
/
private int id;
/*
* 题干
/
private String stem;
/*
* A选项
/
private String a;
/*
* B选项
/
private String b;
/*
* C选项
/
private String c;
/*
* D选项
/
private String d;
/*
* 题型
* 1 - 单选题
* 2 - 多选题
* 3 - 判断题
/
private int type;
/*
* 答案
*/
private String answer;
public int getId() { return id;}public void setId(int id) { this.id = id;}public String getStem() { return stem;}public void setStem(String stem) { this.stem = stem;}public String getA() { return a;}public void setA(String a) { this.a = a;}public String getB() { return b;}public void setB(String b) { this.b = b;}public String getC() { return c;}public void setC(String c) { this.c = c;}public String getD() { return d;}public void setD(String d) { this.d = d;}public int getType() { return type;}public void setType(int type) { this.type = type;}public String getAnswer() { return answer;}public void setAnswer(String answer) { this.answer = answer;}
}
5.
6.![在这里插入图片描述](https://img-blog.csdnimg.cn/20181217202621588.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdTE3MjM0MDUw,size_16,color_FFFFFF,t_70) 如下:
标准化测试程序
正确
错误
上一题
下一题
提交
退出
更多相关文章
- android SQLiteOpenHelper 对SQLite的操作
- android 上下左右手势判断 根据别人的改的
- Android根据包名获取程序基本信息
- Android(安卓)工具代码
- Android自动化工具Monkeyrunner使用(六) —— 根据ID查找对象
- Android:根据上下文Context获取Activity
- Android根据Button状态(normal,focused,pressed)显示不同背景图
- 根据文本生成位图
- android C++ 和 jni,根据JNIEnv的FindClass获取java类,包括多线程