android studio驾校题库计分项目

展示效果图
android studio驾校题库计分项目_第1张图片

1:准备工作
android studio驾校题库计分项目_第2张图片
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;

@Override
protected 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)