学习我要做题网题库怎么开发?

如何在微信平台上开发考试系统? - 知乎22被浏览8765分享邀请回答1添加评论分享收藏感谢收起0添加评论分享收藏感谢收起查看更多回答1 个回答被折叠()考试宝典 | 在线题库
十天内自动登录
若您在使用的过程中出现"点击按钮无响应"从而造成"无法登录""无法进入答题页面"等情况,可能是由于浏览器的兼容性问题导致,请参考
及以上版本浏览器或
浏览器进行学习。随笔 - 1082, 文章 - 0, 评论 - 0, 引用 - 0
Android实训案例(九)——答题系统的思绪,自己设计一个题库的体验,一个思路清晰的答题软件制作过程
项目也是偷师的,决心研究一下数据库。所以写的还是很详细的,各位看官,耐着性子看完,实现结果不重要,思路一定要清晰,我们做一个简单的项目,所以也就设计的比较简陋了,首先新建一个项目——AnswerSystem
一.实现项目框架
主页面就是一个问题,四个答案,还有一个正确答案,最后就是翻页了,正确答案默认是隐藏的,所以我们的layout_mian.xml是这样实现的
&?xml version="1.0" encoding="utf-8"?&
xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"&
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"&
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="20dp"&
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="问:刘桂林是何许人也?"
android:textColor="@color/colorAccent"
android:textSize="22sp"
android:textStyle="bold" /&
android:id="@+id/mRadioGroup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"&
android:id="@+id/RadioA"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="大帅哥" /&
android:id="@+id/RadioB"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="参照A" /&
android:id="@+id/RadioC"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="参照B" /&
android:id="@+id/RadioD"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="参照C" /&
android:visibility="invisible"
android:id="@+id/tv_result"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="正确答案:肯定选A呀!"
android:textColor="@color/colorPrimaryDark"
android:textSize="18sp" /&
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:orientation="horizontal"&
android:id="@+id/btn_up"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="上一题" /&
android:id="@+id/btn_down"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="下一题" /&
我们来预览一下
二.数据库的设计
数据库的话,我们采用一个轻量级数据库编辑器去编辑Sqlite Database Browser
官网地址(墙外面的世界):
当然,你也可直接搜索这个软件也是可以下载到的,然后点击安装,一步步安装就可以完成了
我们在这里就点击新建数据库——question.db,然后就添加了一些参数,主要就是编号和问题,四个选项,答案,解析等
然后我们点击浏览数据,这里我们可以看到我这里设置的表明对应的说明
既然这样,那我们就多写几个问题吧
紧接着,我们要考虑的一个问题就是,把这个数据库放到软件的数据库里面,所以我先把question.db放在assets目录下,然后通过以下的方法区拷贝到app目录
* 将数据库拷贝到相应目录
private void initFile() {
if (new File(DB_PATH + DB_NAME).exists() == false) {
File dir = new File(DB_PATH);
if (!dir.exists()) {
dir.mkdir();
InputStream is = getBaseContext().getAssets().open(DB_NAME);
OutputStream os = new FileOutputStream(DB_PATH + DB_NAME);
byte[] buffer = new byte[1024];
while ((length = is.read(buffer)) & 0) {
os.write(buffer, 0, length);
os.flush();
os.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
三.答题功能实现
当这个方法执行了之后,你运行了软件,你在data/data/包名/database目录下就可以看到这个数据库了,这样我们就可以先去定义一个类专门用来存储数据——Question
package com.lgl.
* 保存数据库数据
* Created by LGL on .
public class Question {
* 对应的就是Filter1-7
还有一个选中答案
public int ID;
public String answerA;
public String answerB;
public String answerC;
public String answerD;
public int
public int selectedA
紧接着,我们写一个数据库的类,专门连接数据库和获取数据——DBService
package com.lgl.
import android.database.C
import android.database.sqlite.SQLiteD
import java.util.ArrayL
import java.util.L
* 连接数据库
* Created by LGL on .
public class DBService {
private SQLiteD
public DBService() {
db = SQLiteDatabase.openDatabase("/data/data/com.lgl.answersystem/databases/question.db", null, SQLiteDatabase.OPEN_READWRITE);
public List&Question& getQuestion() {
List&Question& list = new ArrayList&&();
Cursor cursor = db.rawQuery("select * from question", null);
if (cursor.getCount() & 0) {
cursor.moveToFirst();
int count = cursor.getCount();
for (int i = 0; i & i++) {
cursor.moveToPosition(i);
Question question = new Question();
question.ID = cursor.getInt(cursor.getColumnIndex("Field1"));
question.question = cursor.getString(cursor.getColumnIndex("Field2"));
question.answerA = cursor.getString(cursor.getColumnIndex("Field3"));
question.answerB = cursor.getString(cursor.getColumnIndex("Field4"));
question.answerC = cursor.getString(cursor.getColumnIndex("Field5"));
question.answerD = cursor.getString(cursor.getColumnIndex("Field6"));
question.answer = cursor.getInt(cursor.getColumnIndex("Field7"));
question.explaination = cursor.getString(cursor.getColumnIndex("Field8"));
question.selectedAnswer = -1;
list.add(question);
OK,到这里,我们的数据库算是写好了一大半了,我们这里可以看到,其实就是查询我们的数据库然后封装在这个实体类中,紧接着,我们可以先初始化一些控件
private void initView() {
tv_title = (TextView) findViewById(R.id.tv_title)
mRadioButton[0] = (RadioButton) findViewById(R.id.RadioA)
mRadioButton[1] = (RadioButton) findViewById(R.id.RadioB)
mRadioButton[2] = (RadioButton) findViewById(R.id.RadioC)
mRadioButton[3] = (RadioButton) findViewById(R.id.RadioD)
btn_down = (Button) findViewById(R.id.btn_down)
btn_up = (Button) findViewById(R.id.btn_up)
tv_result = (TextView) findViewById(R.id.tv_result)
mRadioGroup = (RadioGroup) findViewById(R.id.mRadioGroup)
接着就开始实现我们的答题系统了
* 初始化数据库服务
private void initDB() {
DBService dbService = new DBService();
final List&Question& list = dbService.getQuestion();
count = list.size();
corrent = 0;
Question q = list.get(0);
tv_title.setText(q.question);
mRadioButton[0].setText(q.answerA);
mRadioButton[1].setText(q.answerB);
mRadioButton[2].setText(q.answerC);
mRadioButton[3].setText(q.answerD);
btn_up.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (corrent & 0) {
corrent--;
Question q = list.get(corrent);
tv_title.setText(q.question);
mRadioButton[0].setText(q.answerA);
mRadioButton[1].setText(q.answerB);
mRadioButton[2].setText(q.answerC);
mRadioButton[3].setText(q.answerD);
tv_result.setText(q.explaination);
mRadioGroup.clearCheck();
if (q.selectedAnswer != -1) {
mRadioButton[q.selectedAnswer].setChecked(true);
btn_down.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (corrent & count - 1) {
corrent++;
Question q = list.get(corrent);
tv_title.setText(q.question);
mRadioButton[0].setText(q.answerA);
mRadioButton[1].setText(q.answerB);
mRadioButton[2].setText(q.answerC);
mRadioButton[3].setText(q.answerD);
tv_result.setText(q.explaination);
mRadioGroup.clearCheck();
if (q.selectedAnswer != -1) {
mRadioButton[q.selectedAnswer].setChecked(true);
Toast.makeText(MainActivity.this, "最后一题啦!", Toast.LENGTH_SHORT).show();
mRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
public void onCheckedChanged(RadioGroup group, int checkedId) {
for (int i = 0; i &4 ; i ++){
if(mRadioButton[i].isChecked() == true){
list.get(corrent).selectedAnswer =
现在的逻辑还是非常的简单的,我们连接数据库拿到数据,点击上一题和下一题的时候,就开始切换数据,我们并没有对他进行什么很难的处理,我们运行一下
四.答错解析
我们在上面实现了答题的功能,同时,也实现了保存选项的功能,拿这样的话,我们就可以再来实现一个判断错误的方法
* 判断是否答题正确
private List&Integer& checkAnswer(List&Question&list){
List&Integer&wrongList= new ArrayList&&();
for(int i = 0 ; i&list.size();i++){
for (list.get(i).answer != list.get(i).selectedAnswer){
wrongList.add(i);
return wrongL
然后我们就可以在点击按钮到最后一题的时候判断是否正确了
final List&Integer& wrongList = checkAnswer(list);
if(wrongList.size() == 0){
new AlertDialog.Builder(MainActivity.this).setTitle("提示").setMessage("你好厉害,答对了所有题!")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}).setNegativeButton("取消",null).show();
new AlertDialog.Builder(MainActivity.this).setTitle("恭喜,答题完成!")
.setMessage("答对了" + (list.size() - wrongList.size()) + "道题" + "\n"
+ "答错了" + wrongList.size() + "道题" + "\n" + "是否查看错题?").setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
wrongMode = true;
List&Question& newList = new ArrayList&Question&();
for (int i = 0; i & wrongList.size(); i++) {
newList.add(list.get(wrongList.get(i)));
list.clear();
for (int i = 0; i & newList.size(); i++) {
list.add(newList.get(i));
corrent = 0;
count = list.size();
Question q = list.get(corrent);
tv_title.setText(q.question);
mRadioButton[0].setText(q.answerA);
mRadioButton[1].setText(q.answerB);
mRadioButton[2].setText(q.answerC);
mRadioButton[3].setText(q.answerD);
tv_result.setText(q.explaination);
tv_result.setVisibility(View.VISIBLE);
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}).show();
这里,开始是一个判断你全答对的情况下,那就直接提示你正确,否则的话,也就开始进行处理了,同时,你要查看错题的话,你就的切换错题模式,我们就重新加载数据了,这里还会有几个情况,比如当我们查看错题有点击到最后一题的时候,我们可以直接弹提示
else if (corrent == count - 1 && wrongMode == true) {
new AlertDialog.Builder(MainActivity.this).setTitle("提示").setMessage("已经到达最后一道题,是否退出?")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}).setNegativeButton("取消",null).show();
这样,我们简单的答题系统就差不多完成了,我们来运行一下
这个实现起来还是比较清晰脱俗的,我们可以点击在数据库里面任意的添加题目,这都是OK的,项目我上传到了Github上,有兴趣的可以看一下哦!
欢迎加群:一起讨论技术兴趣!学习资源下载
1、函数的定义域
2、;,则,。
3、函数在上满足罗尔定理的条件,则结论成立的=
4、分段函数在处连续,则。
5、函数单调递减区间。
指培养物在培养阶段发生变异,进而导致再生植株亦发生遗传改变的现象。 该现象广泛存在于各种再生途径(体细胞胚胎发生途径和器官发生途径)的组织培...
ID:对于将现金送存银行的业务,会计人员应编制的记账凭证是(&&& )。
A.现金付款凭证&&&&&&&&&&&&&&&&&& B.银行收款凭证
C.现金付款凭证和银行收款凭证&&&& D.转账凭证ID:与企业会计核算相比,预算会计具有哪些特点?ID:
ID:实行从量征收关税,当国际市场价格上涨时,其保护程度降低。(&&&& )选择答案:正确错误ID:ID:当标记的TYPE属性值为(
)时,代表一个可选多项的复选框。A. TEXT
B. PASSWORD
D. CHECKBOXID:简述一般纳税人在计算增值税时采用的计税方法。ID:数据的存储结构包括结构和结构。
在线题库导航
本月汇编点击排行
点击次数:346点击次数:263点击次数:232点击次数:219点击次数:200点击次数:195

我要回帖

更多关于 我要做题网 的文章

 

随机推荐