MyDateBase.java
package chzu.csci.pwn;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class MyDataBase extends SQLiteOpenHelper {
private static final String DB_NAME="2017211808.db";
private static final int DB_VERSION=1;
MyDataBase(Context context){
super(context,DB_NAME,null,DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(//第一次运行时新建一个USER表,并且插入初始数据
"CREATE TABLE USER (_id INTEGER PRIMARY KEY AUTOINCREMENT,"
+"NAME TEXT,"
+"PASSWORD TEXT,"
+"SCORE INTEGER);"
);
db.execSQL(//第一次运行时新建一个TEST表,并且插入初始数据
"CREATE TABLE TEST (_id INTEGER PRIMARY KEY AUTOINCREMENT,"
+"TITLE TEXT,"
+"QUESTION TEXT,"
+"OPTA TEXT,"
+"OPTB TEXT,"
+"OPTC TEXT,"
+"OPTD TEXT,"
+"REFANSWER TEXT,"
+"ANSWER TEXT,"
+"SCORE INTEGER);"
);
insertUser(db,"PWN","2017211808",0);
insertTest(db,"试题1","下列哪一个不属于Activity的生命周期方法?",
"onInit()","onStart()","onStop()","onPause()","A",50);
insertTest(db,"试题2","下列关于线程的说法中,错误的是?","Android主线程中可以创建新的线程",
"主线程中创建的线程可以操作UI组件","新线程可以和Handler共同使用","创建的Handler对象隶属于创建它的线程","B",50);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
public void insertUser(SQLiteDatabase db,String name,String password,int score){
ContentValues value=new ContentValues();
value.put("NAME",name);
value.put("PASSWORD",password);
value.put("SCORE",score);
db.insert("User",null,value);
}
public void insertTest(SQLiteDatabase db,String title,String question,String a,String b,String c,String d,String ref,int score){
ContentValues value=new ContentValues();
value.put("TITLE",title);
value.put("QUESTION",question);
value.put("OPTA",a);
value.put("OPTB",b);
value.put("OPTC",c);
value.put("OPTD",d);
value.put("REFANSWER",ref);
value.put("SCORE",score);
db.insert("Test",null,value);
}
}
MainActivity
package chzu.csci.pwn;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
public Cursor cursor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void login(View view) {
SQLiteOpenHelper helper=new MyDataBase(this);
SQLiteDatabase db=helper.getReadableDatabase();
EditText name=(EditText)findViewById(R.id.name);
EditText pwd=(EditText)findViewById(R.id.pwd);
String nameInput=String.valueOf(name.getText());
String pwdInput=String.valueOf(pwd.getText());
cursor=db.query("USER",new String[]{"_id"},"NAME=? and PASSWORD=?",
new String[]{nameInput,pwdInput},null,null,null);
if(cursor.moveToFirst()){
Intent intent=new Intent(MainActivity.this,TestActivity.class);
intent.putExtra("NAME",nameInput);
startActivity(intent);
}else{
Toast.makeText(this,"系统中无此用户",Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
cursor.close();
}
}
MusicService.java
package chzu.csci.pwn;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;
import androidx.annotation.Nullable;
public class MusicService extends Service{
private MediaPlayer mediaPlayer;
//Service初始化时调用
public void onCreate(){
super.onCreate();
mediaPlayer = MediaPlayer.create(this, R.raw.notice);//这里注意将音乐文件修改成自己的
}
public class MusicBinder extends Binder{
MusicService getMusic(){
return MusicService.this;
}
}
private IBinder binder=new MusicBinder();
@Override
public IBinder onBind(Intent intent) {
if(!mediaPlayer.isPlaying()){
// 开始播放
mediaPlayer.start();
// 允许循环播放
mediaPlayer.setLooping(true);
}
return binder;
}
public boolean onUnbind(Intent intent) {
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
}
return super.onUnbind(intent);
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
//先停止 再释放
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
}
mediaPlayer.release();
}
public MusicService() {
}
}
TestActivity.java
package chzu.csci.pwn;
import androidx.appcompat.app.AppCompatActivity;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;
public class TestActivity extends AppCompatActivity {
public static boolean running=true;
public static int seconds=0;
public static boolean wasRunning=false;
private Cursor cursor;
public String loginUser;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
if(savedInstanceState!=null){
seconds=savedInstanceState.getInt("seconds");
running=savedInstanceState.getBoolean("running");
wasRunning=savedInstanceState.getBoolean("wasRunning");
}
loginUser=getIntent().getStringExtra("NAME");
runTimer();
init();
setlistClick();
}
private void init(){
TextView welcome=(TextView)findViewById(R.id.welcome);
welcome.setText("欢迎您,"+loginUser+"!");
ListView listView=(ListView)findViewById(R.id.question);
SQLiteOpenHelper helper=new MyDataBase(this);
try{
SQLiteDatabase db=helper.getReadableDatabase();
cursor= db.query("TEST",new String[]{"_id","TITLE"},null,null,null,null,null);
SimpleCursorAdapter listAdapter=new SimpleCursorAdapter(this,android.R.layout.simple_list_item_1,
cursor,new String[]{"TITLE"},new int[]{android.R.id.text1},0);
listView.setAdapter(listAdapter);
}catch (SQLException e){
Toast.makeText(this,"DataBase unavalibale",Toast.LENGTH_SHORT).show();
}
}
//设置列表点击监听器
protected void setlistClick(){
ListView listView=(ListView)findViewById(R.id.question);
AdapterView.OnItemClickListener itemClickListener=new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent=new Intent(TestActivity.this,QuestionDetailActivity.class);
intent.putExtra("ID",(int)id);
startActivity(intent);
}
};
listView.setOnItemClickListener(itemClickListener);
}
private void runTimer(){
final TextView textView=findViewById(R.id.time);
final Handler handler=new Handler();
handler.post(new Runnable() {
@Override
public void run() {
int hours=seconds/3600;
int minutes=(seconds%3600)/60;
int sec=seconds%60;
String time=String.format("%d:%02d:%02d",hours,minutes,sec);
textView.setText(time);
if(running){
seconds++;
}
handler.postDelayed(this,1000);
}
});
}
@Override
protected void onStop() {
super.onStop();
wasRunning=running;
running=false;
}
@Override
protected void onStart() {
super.onStart();
if(wasRunning){
running=true;
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean("running",running);
outState.putInt("seconds",seconds);
outState.putBoolean("running",wasRunning);
}
public void submit(View view) {
SQLiteOpenHelper helper=new MyDataBase(this);
int sum=0;
SQLiteDatabase db=helper.getWritableDatabase();
cursor= db.query("TEST",new String[]{"_id","REFANSWER","ANSWER","SCORE"},null,
null,null,null,null);
while (cursor.moveToNext()){
String ref=cursor.getString(1);
String answer=cursor.getString(2);
int score=cursor.getInt(3);
if(ref.equals(answer)){
sum+=score;
}
}
ContentValues bankvalues=new ContentValues();
bankvalues.put("SCORE",sum);
db.update("USER",bankvalues,"NAME=?",new String[]{loginUser});
Intent intent=new Intent(TestActivity.this,FinishActivity.class);
intent.putExtra("NAME",loginUser);
startActivity(intent);
}
@Override
protected void onDestroy() {
super.onDestroy();
cursor.close();
}
}
QuestionDetailActivity.java
package chzu.csci.pwn;
import androidx.appcompat.app.AppCompatActivity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class QuestionDetailActivity extends AppCompatActivity {
private Cursor cursor;
public Integer id;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_question_detail);
id=getIntent().getIntExtra("ID",0);
init();
}
private void init(){
SQLiteOpenHelper helper=new MyDataBase(this);
RadioButton a=(RadioButton)findViewById(R.id.a);
RadioButton b=(RadioButton)findViewById(R.id.b);
RadioButton c=(RadioButton)findViewById(R.id.c);
RadioButton d=(RadioButton)findViewById(R.id.d);
TextView title=(TextView)findViewById(R.id.title);
TextView question=(TextView)findViewById(R.id.question);
try{
SQLiteDatabase db=helper.getReadableDatabase();
cursor= db.query("TEST",new String[]{"_id","TITLE","QUESTION","OPTA","OPTB","OPTC","OPTD","ANSWER"},"_id=?",
new String[]{Integer.toString(id)},null,null,null);
if(cursor.moveToFirst()){
title.setText(cursor.getString(1));
question.setText(cursor.getString(2));
a.setText(cursor.getString(3));
b.setText(cursor.getString(4));
c.setText(cursor.getString(5));
d.setText(cursor.getString(6));
String answer=cursor.getString(7)!=null?cursor.getString(7):"";
if(answer.equals("A")){
a.setChecked(true);
}else if(answer.equals("B")){
b.setChecked(true);
}else if(answer.equals("C")){
c.setChecked(true);
}else if(answer.equals("D")){
d.setChecked(true);
}
}
}catch (SQLException e){
Toast.makeText(this,"DataBase unavalibale",Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
cursor.close();
}
public void submit(View view) {
RadioGroup select=(RadioGroup)findViewById(R.id.select);
int size=select.getChildCount();
String key[]={"A","B","C","D"};
for(int i=0;i<size;i++){
RadioButton temp=(RadioButton) select.getChildAt(i);
if(temp.isChecked()){
SQLiteOpenHelper helper=new MyDataBase(this);
SQLiteDatabase db=helper.getWritableDatabase();
ContentValues bankvalues=new ContentValues();
bankvalues.put("ANSWER",key[i]);
db.update("TEST",bankvalues,"_id=?",new String[]{Integer.toString(id)});
Toast.makeText(this,"保存成功",Toast.LENGTH_SHORT).show();
}
}
}
}
FinishActivity.java
package chzu.csci.pwn;
import androidx.appcompat.app.AppCompatActivity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.os.IBinder;
import android.view.View;
import android.widget.TextView;
public class FinishActivity extends AppCompatActivity {
public String loginUser;
private Cursor cursor;
private MusicService musicService;
private ServiceConnection connection;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_finish);
connection=new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
MusicService.MusicBinder binder=(MusicService.MusicBinder)service;
musicService=binder.getMusic();
}
@Override
public void onServiceDisconnected(ComponentName name) { }
};
loginUser=getIntent().getStringExtra("NAME");
init();
}
public void init(){
TextView stuNo=(TextView)findViewById(R.id.stuNo);
TextView timeuse=(TextView)findViewById(R.id.timeuse);
TextView score=(TextView)findViewById(R.id.score);
SQLiteOpenHelper helper=new MyDataBase(this);
SQLiteDatabase db=helper.getReadableDatabase();
cursor= db.query("USER",new String[]{"_id","SCORE"},"NAME=?",
new String[]{loginUser},null,null,null);
if(cursor.moveToFirst()){
stuNo.setText("姓名:"+loginUser);
timeuse.setText("用时:"+String.valueOf(TestActivity.seconds)+"秒");
int getScore=cursor.getInt(1);
score.setText("得分:"+getScore);
if(getScore==100){
Intent intent = new Intent(this,MusicService.class);
bindService(intent,connection,BIND_AUTO_CREATE);
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
cursor.close();
unbindService(connection);
}
public void anain(View view) {
TestActivity.seconds=0;
Intent intent=new Intent(this,MainActivity.class);
startActivity(intent);
unbindService(connection);
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="姓名"
android:textSize="24sp" />
<EditText
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:hint="请输入姓名"
android:inputType="textPersonName" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="密码"
android:textSize="24sp" />
<EditText
android:id="@+id/pwd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:hint="请输入密码"
android:inputType="textPassword" />
</LinearLayout>
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="登录"
android:onClick="login"
android:textSize="24sp" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
activity_test.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".TestActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/welcome"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="欢迎"
android:textSize="24sp" />
<TextView
android:id="@+id/time"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="00:00:00"
android:textSize="60sp" />
<ListView
android:id="@+id/question"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/commit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="submit"
android:text="提交"
android:textSize="24sp" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
activity_question_detail.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".QuestionDetailActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="题目"
android:textSize="28sp" />
<TextView
android:id="@+id/question"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="122222222222222222222222222222222222222222222222"
android:textSize="24sp" />
<RadioGroup
android:id="@+id/select"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RadioButton
android:id="@+id/a"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="RadioButton"
android:checked="true"
android:textSize="24sp" />
<RadioButton
android:id="@+id/b"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="RadioButton"
android:textSize="24sp" />
<RadioButton
android:id="@+id/c"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="RadioButton"
android:textSize="24sp" />
<RadioButton
android:id="@+id/d"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="RadioButton"
android:textSize="24sp" />
</RadioGroup>
<Button
android:id="@+id/submit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="提交"
android:onClick="submit"
android:textSize="24sp" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
activity_finish.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".FinishActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/stuNo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView"
android:textSize="24sp" />
<TextView
android:id="@+id/timeuse"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView"
android:textSize="24sp" />
<TextView
android:id="@+id/score"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView"
android:textSize="24sp" />
<Button
android:id="@+id/again"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="重做一次"
android:onClick="anain"
android:textSize="24sp" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="chzu.csci.pwn">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".FinishActivity"></activity>
<activity android:name=".QuestionDetailActivity" />
<activity android:name=".TestActivity" />
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>