实验题目
1.创建一个Android项目,项目名称为“shiyan0801_专业_×××(学生姓名)”,要求:
(1)创建2个Activity,名称分别为MainActivity、ManageActivity,对应的布局文件名称分别为activity_main.xml、activity_manage。
(2)界面构成:
①主界面activity_main:实现用户登录,包括以下控件:
a)2个文本框,分别用来显示“管理员”、“密码”;
b)2个编辑框,分别用来接收用户输入的用户名、密码;
c)1个按钮,文本显示为“登录”。
②activity_manage:实现图书信息设置,包括以下控件:
a)5个文本框用于显示提示信息“图书名称:”、“图书价格”、“图书版次”“图书类别”、“出版社”;
b)2个编辑框分别用于接收图书的名称和价格;
c)4个单选按钮用于版次选择(1版、2版、3版、3版以上);
d)n个复选框用于类别选择(教育、计算机、小说、科技、励志、文学等);
e)1个下拉列表用于出版社选择(人民邮电出版社、科学出版社、高等教育出版社、清华大学出版社,其他等);
f)4个普通按钮,文本分别显示为“添加”、“修改”、“删除”、“查询”;
e)1个ListView控件。
(3)程序功能:
①点击MainActivity中的“登录”按钮,若管理员和密码分别为学生的姓名和学号,则弹出提示对话框,显示“***登录成功!”,然后跳转到ManageActivity,否则,弹出Toast提示“管理员或密码错误,请重新输入”。
②ManageActivity中的操作:
a)单击“添加”按钮,将用户输入和选择的各项信息写入数据库;
b)单击“修改”按钮,将_id为3的记录的价格改为100,出版社改为“清华大学出版社”;
c)单击“删除”按钮,将所有版次为1版的记录删除;
d)单击“查询”按钮,将出版社为“人民邮电出版社”的记录显示在ListView控件中。
项目目录
页面布局
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
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:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="管理员:" />
<EditText
android:id="@+id/et_name"
android:layout_width="200dp"
android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="密码:" />
<EditText
android:id="@+id/et_pwd"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:inputType="textPassword"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center">
<Button
android:id="@+id/bt_login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="登录"
/>
</LinearLayout>
</LinearLayout>
activity_manage.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="图书名称:" />
<EditText
android:id="@+id/et_name"
android:layout_width="200dp"
android:hint="请输入图书名称"
android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="图书价格:"/>
<EditText
android:id="@+id/et_price"
android:layout_width="200dp"
android:hint="请输入图书价格"
android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="图书版次:"/>
<RadioGroup
android:id="@+id/rg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/rb_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1版"/>
<RadioButton
android:id="@+id/rb_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2版"/>
<RadioButton
android:id="@+id/rb_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="3版"/>
<RadioButton
android:id="@+id/rb_4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="3版以上"/>
</RadioGroup>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="图书类别:"/>
<GridLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:columnCount="3"
android:id="@+id/g1_sort"
>
<CheckBox
android:id="@+id/cb1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="教育"
/>
<CheckBox
android:id="@+id/cb2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="计算机"
/>
<CheckBox
android:id="@+id/cb3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="小说"
/>
<CheckBox
android:id="@+id/cb4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="科技"
/>
<CheckBox
android:id="@+id/cb5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="励志"
/>
<CheckBox
android:id="@+id/cb6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="文学"
/>
</GridLayout>
</LinearLayout>
<Spinner
android:id="@+id/sp_bkcbs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/chu">
</Spinner>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center">
<Button
android:id="@+id/bt_insert"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="clickSave"
android:text="插入"/>
<Button
android:id="@+id/bt_update"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="修改"/>
<Button
android:id="@+id/bt_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="删除"/>
<Button
android:id="@+id/bt_query"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="查询"/>
</LinearLayout>
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="5dp"
android:divider="#d9d9d9"
android:dividerHeight="1dp"/>
</LinearLayout>
list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<TextView
android:id="@+id/tv_name"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_marginTop="8dp"
android:text="List布局"
android:textSize="18sp" />
<TextView
android:id="@+id/tv_price"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_marginTop="8dp"
android:text="List布局"
android:textSize="18sp" />
<TextView
android:id="@+id/tv_banci"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_marginTop="8dp"
android:text="List布局"
android:textSize="18sp" />
<TextView
android:id="@+id/tv_leibie"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_marginTop="8dp"
android:text="List布局"
android:textSize="18sp" />
<TextView
android:id="@+id/tv_cbs"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_marginTop="8dp"
android:text="List布局"
android:textSize="18sp" />
</LinearLayout>
array.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="chu">
<item>人民邮电出版社</item>
<item>科学出版社</item>
<item>高等教育出版社</item>
<item>清华大学出版社</item>
<item>其它</item>
</string-array>
</resources>
逻辑实现
MainActivity
package com.star.shiyan0801;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
Button login;
EditText uname,upwd;
String sname,spwd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
login = findViewById(R.id.bt_login);
login.setOnClickListener(new ButtonListener());
}
class ButtonListener implements View.OnClickListener{
@Override
public void onClick(View view) {
uname = findViewById(R.id.et_name);
upwd = findViewById(R.id.et_pwd);
sname = uname.getText().toString();
spwd = upwd.getText().toString();
if (sname.equals("star") && spwd.equals("star")){
Toast.makeText(MainActivity.this,sname+"登录成功!",Toast.LENGTH_LONG);
Intent intent = new Intent(MainActivity.this,ManageActivity.class);
startActivity(intent);
}else{
Toast.makeText(MainActivity.this,"管理员或密码错误,请重新输入",Toast.LENGTH_LONG);
uname.setText("");
upwd.setText("");
}
}
}
}
ManageActivity
package com.star.shiyan0801;
import androidx.appcompat.app.AppCompatActivity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.GridLayout;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.SimpleAdapter;
import android.widget.SimpleCursorAdapter;
import android.widget.Spinner;
import android.widget.Toast;
public class ManageActivity extends AppCompatActivity {
Spinner sp;
EditText etName,etPrice;
RadioGroup rg;
GridLayout gl;
CheckBox cb1,cb2,cb3,cb4,cb5,cb6;
CheckBox cb[]=new CheckBox[6];
ListView lvshow;
//
MyHelper myHelper;
SQLiteDatabase sdb;
Button bt_insert,bt_update,bt_delete,bt_query;
String sbname,sbkbanci,sbkclass,sbkcbs;
double price;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_manage);
init();
bt_query.setOnClickListener(new Click());
bt_insert.setOnClickListener(new Click());
bt_delete.setOnClickListener(new Click());
bt_update.setOnClickListener(new Click());
//创建帮助类对象
myHelper = new MyHelper(this,"BookStore.db",null,3);
sdb = myHelper.getWritableDatabase();
Toast.makeText(ManageActivity.this, "数据库创建成功", Toast.LENGTH_SHORT).show();
}
class Click implements View.OnClickListener {
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.bt_insert:
getdata();
Toast.makeText(ManageActivity.this, sbname, Toast.LENGTH_SHORT).show();
sdb.execSQL("insert into Book(bname,bprice,bbanci,bleibie,bcbs) " +
"values('"+sbname+"',"+price+",'"+sbkbanci+"','"+sbkclass+"','"+sbkcbs+"')");
break;
case R.id.bt_update:
sdb.execSQL("update Book set bprice=100,bcbs='清华大学出版社' where _id=3");
break ;
case R.id.bt_delete:
sdb.execSQL("delete from Book where bbanci='1版'");
break;
case R.id.bt_query:
Cursor c =sdb.rawQuery("select * from Book where bcbs=?",new String[]{"人民邮电出版社"});
SimpleCursorAdapter ad=new SimpleCursorAdapter(
ManageActivity.this,
R.layout.list_item,
c,
new String[]{"bname","bprice","bbanci","bleibie","bcbs"},
new int[]{R.id.tv_name,R.id.tv_price,R.id.tv_banci,
R.id.tv_leibie,R.id.tv_cbs}
);
lvshow.setAdapter(ad);
break;
}
}
}
private void init(){
bt_insert = findViewById(R.id.bt_insert);
bt_update = findViewById(R.id.bt_update);
bt_delete = findViewById(R.id.bt_delete);
bt_query = findViewById(R.id.bt_query);
sp = findViewById(R.id.sp_bkcbs);
etName = findViewById(R.id.et_name);
etPrice = findViewById(R.id.et_price);
rg = findViewById(R.id.rg);
gl = findViewById(R.id.g1_sort);
lvshow = findViewById(R.id.lv);
cb[0] = (CheckBox) findViewById(R.id.cb1);
cb[1] = (CheckBox) findViewById(R.id.cb2);
cb[2] = (CheckBox) findViewById(R.id.cb3);
cb[3] = (CheckBox) findViewById(R.id.cb4);
cb[4] = (CheckBox) findViewById(R.id.cb5);
cb[5] = (CheckBox) findViewById(R.id.cb6);
}
private void getdata(){
sbname = etName.getText().toString();
price = Double.valueOf(etPrice.getText().toString()) ;
sbkbanci = "";
sbkclass="";
sbkcbs="";
for(int i=0;i<rg.getChildCount();i++){
RadioButton rb = (RadioButton) rg.getChildAt(i);
if (rb.isChecked()){
sbkbanci = rb.getText().toString();
break;
}
}
for (int i=0; i< cb.length; i++){
if (cb[i].isChecked()){
sbkclass+=cb[i].getText().toString()+" ";
}
}
sbkcbs = sp.getSelectedItem().toString();
}
}
MyHelper
package com.star.shiyan0801;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;
import androidx.annotation.Nullable;
public class MyHelper extends SQLiteOpenHelper {
//字符串常量定义
public static final String CREATE_TABLE="create table Book("+
"_id integer primary key autoincrement,"+
"bname text,"+
"bprice real,"+
"bbanci varchar(10),"+
"bleibie varchar(20),"+
"bcbs varchar(50))";
private Context mContext;
public MyHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
mContext = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
//调用SQLiteDatabase中的execSQL()执行建表语句。
db.execSQL(CREATE_TABLE);
//创建成功
// Toast.makeText(mContext, "Create succeeded", Toast.LENGTH_SHORT).show();
}
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
db.execSQL("drop table if exists Book");
onCreate(db);
}
}
运行效果
登录页面
登录功能:
填写信息界面
点击插入
将填入的信息插入到数据库中
导出数据库,查看数据库数据
点击修改后,再查看数据
点击删除,再查看数据
点击查询
|