android学生信息管理系统源码

利用ListView和数据库做一个学员信息管理系统。下面把做的代码复制下来,供大家参考。

首页的布局main.xml

复制代码
xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <RelativeLayout android:id="@+id/RelativeLayout"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content">
        <Button android:id="@+id/bn_search_id" 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:text="搜索"
            android:gravity="center_vertical" />
        <Button android:gravity="center" 
            android:text="@string/myButton"
            android:id="@+id/btn_add_student" 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@+id/bn_search_id" 
            android:layout_toLeftOf="@+id/bn_select" />
        <Button  android:gravity="center_vertical"
            android:text="选择" 
            android:id="@+id/bn_select" 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:layout_alignParentTop="true"
            android:layout_alignParentRight="true">Button>
    RelativeLayout>
    <TextView 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="              ID            姓 名       年 龄         性 别        "
    />
    <ListView android:id="@android:id/list"
    android:layout_width="fill_parent" 
    android:layout_weight="1"
    android:layout_height="wrap_content"/>
    <LinearLayout 
        android:orientation="horizontal"
        android:id="@+id/showLiner"
        android:visibility="gone"    
         android:layout_width="fill_parent"
         android:layout_height="wrap_content">
         <Button 
         android:id="@+id/bn_delete"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:layout_weight="1"
         android:text="删除"
         android:enabled="false"
         />     
         <Button 
         android:id="@+id/bn_selectall"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:layout_weight="1"
         android:text="全选"
         />
         <Button 
         android:id="@+id/bn_canel"
        android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:layout_weight="1"
         android:text="取消"
         />   
         LinearLayout>
        
LinearLayout>
复制代码

创建listView中显示学员信息的xml格式 student_list_item.xml

?
"1.0" encoding="utf-8"?>
"http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" >
    "fill_parent" 
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="1"
        android:background="@drawable/icon"/>
    "@+id/tv_stu_id"
        android:layout_width="fill_parent" 
        android:layout_gravity="center"
        android:layout_height="wrap_content" 
        android:layout_weight="1"/>
    "@+id/tv_stu_name"
        android:layout_width="fill_parent" 
        android:layout_gravity="center"
        android:layout_height="wrap_content" 
        android:layout_weight="1"/>
          
    "@+id/tv_stu_age"
        android:layout_width="fill_parent" 
        android:layout_gravity="center"
        android:layout_height="wrap_content" 
        android:layout_weight="1"/>
    "@+id/tv_stu_sex"
        android:layout_width="fill_parent" 
        android:layout_gravity="center"
        android:layout_height="wrap_content" 
        android:layout_weight="1"/>
      
    "@+id/tv_stu_likes"
        android:layout_width="fill_parent" 
        android:layout_gravity="center"
        android:layout_height="wrap_content" 
        android:layout_weight="1"
        android:visibility="gone"/>
    "@+id/tv_stu_phone"
        android:layout_width="fill_parent" 
        android:layout_gravity="center"
        android:layout_height="wrap_content" 
        android:layout_weight="1"
        android:visibility="gone"/>
    "@+id/tv_stu_traindate"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:layout_gravity="center"
        android:layout_weight="1"
        android:visibility="gone"/>
    "@+id/tv_stu_modifyDateTime"
        android:layout_width="fill_parent" 
        android:layout_gravity="center"
        android:layout_height="wrap_content" 
        android:layout_weight="1"
        android:visibility="gone"/>
          
    
        android:id="@+id/cb_box"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:layout_weight="1"
        android:visibility="gone"
        android:checked="false"
        android:focusable="false"
    />

  创建一个StudentListActivity做为主页显示学员信息以及进行一些操作。

复制代码
package cn.yj3g.student.activity;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;
import cn.yj3g.student.dao.StudentDao;
import cn.yj3g.student.db.StudentDBHelper;
import cn.yj3g.student.entry.Student;
import cn.yj3g.student.entry.TableContanst;

public class StudentListActivity extends ListActivity implements
        OnClickListener, OnItemClickListener, OnItemLongClickListener {

    private static final String TAG = "TestSQLite";
    private Button addStudent;
    private Cursor cursor;
    private SimpleCursorAdapter adapter;
    private ListView listView;
    private List<Long> list;
    private RelativeLayout relativeLayout;
    private Button searchButton;
    private Button selectButton;
    private Button deleteButton;
    private Button selectAllButton;
    private Button canleButton;
    private LinearLayout layout;
    private StudentDao dao;
    private Student student;
    private Boolean isDeleteList = false;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Log.e(TAG, "onCreate");
        list = new ArrayList<Long>();
        student = new Student();
        dao = new StudentDao(new StudentDBHelper(this));
        addStudent = (Button) findViewById(R.id.btn_add_student);
        searchButton = (Button) findViewById(R.id.bn_search_id);
        selectButton = (Button) findViewById(R.id.bn_select);
        deleteButton = (Button) findViewById(R.id.bn_delete);
        selectAllButton = (Button) findViewById(R.id.bn_selectall);
        canleButton = (Button) findViewById(R.id.bn_canel);
        layout = (LinearLayout) findViewById(R.id.showLiner);
        relativeLayout=(RelativeLayout) findViewById(R.id.RelativeLayout);
        listView = getListView();

        // 为按键设置监听
        addStudent.setOnClickListener(this);
        searchButton.setOnClickListener(this);
        selectButton.setOnClickListener(this);
        deleteButton.setOnClickListener(this);
        canleButton.setOnClickListener(this);
        selectAllButton.setOnClickListener(this);
        listView.setOnItemClickListener(this);
        listView.setOnItemLongClickListener(this);
        listView.setOnCreateContextMenuListener(this);

    }

    @Override
    protected void onStart() {
        // 调用load()方法将数据库中的所有记录显示在当前页面
        super.onStart();
        load();

    }

    public void onClick(View v) {
        // 跳转到添加信息的界面
        if (v == addStudent) {
            startActivity(new Intent(this, AddStudentActivity.class));
        } else if (v == searchButton) {
            // 跳转到查询界面
            startActivity(new Intent(this, StudentSearch.class));
        } else if (v == selectButton) {
            // 跳转到选择界面
            isDeleteList = !isDeleteList;
            if (isDeleteList) {
                checkOrClearAllCheckboxs(true);
            } else {
                showOrHiddenCheckBoxs(false);
            }
        } else if (v == deleteButton) {
            // 删除数据
            if (list.size() > 0) {
                for (int i = 0; i < list.size(); i++) {
                    long id = list.get(i);
                    Log.e(TAG, "delete id=" + id);
                    int count = dao.deleteStudentById(id);
                }
                dao.closeDB();
                load();
            }
        } else if (v == canleButton) {
            // 点击取消,回到初始界面
            load();
            layout.setVisibility(View.GONE);
            isDeleteList = !isDeleteList;
        } else if (v == selectAllButton) {
            // 全选,如果当前全选按钮显示是全选,则在点击后变为取消全选,如果当前为取消全选,则在点击后变为全选
            selectAllMethods();
        }
    }
    // 创建菜单
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.layout.menu, menu);
    }

    // 对菜单中的按钮添加响应时间
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        int item_id = item.getItemId();
        student = (Student) listView.getTag();
        Log.v(TAG, "TestSQLite++++student+" + listView.getTag() + "");
        final long student_id = student.getId();
        Intent intent = new Intent();
        // Log.v(TAG, "TestSQLite+++++++id"+student_id);
        switch (item_id) {
        // 添加
        case R.id.add:
            startActivity(new Intent(this, AddStudentActivity.class));
            break;
        // 删除
        case R.id.delete:
            deleteStudentInformation(student_id);
            break;
        case R.id.look:
            // 查看学生信息
            // Log.v(TAG, "TestSQLite+++++++look"+student+"");
            intent.putExtra("student", student);
            intent.setClass(this, ShowStudentActivity.class);
            this.startActivity(intent);
            break;
        case R.id.write:
            // 修改学生信息
            intent.putExtra("student", student);
            intent.setClass(this, AddStudentActivity.class);
            this.startActivity(intent);
            break;
        default:
            break;
        }
        return super.onContextItemSelected(item);
    }

    // 创建一个按钮菜单
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        menu.add(1, 1, 1, "按入学日期排序");
        menu.add(1, 2, 1, "按姓名进行排序");
        menu.add(1, 5, 1, "按学号进行排序");
        menu.add(1, 3, 1, "模糊查找");
        menu.add(1, 4, 1, "退出");
        return super.onCreateOptionsMenu(menu);
    }

    // 对菜单中的按钮添加响应时间
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        switch (id) {
        // 排序
        case 1:
            cursor = dao.sortByTrainDate();
            load(cursor);
            break;

        // 排序
        case 2:
            cursor = dao.sortByName();
            load(cursor);
            break;
        // 查找
        case 3:
            startActivity(new Intent(this, StudentSearch.class));
            break;
        // 退出
        case 4:
            finish();
            break;
        case 5:
            cursor = dao.sortByID();
            load(cursor);
            break;
        default:
            break;
        }
        return super.onOptionsItemSelected(item);
    }

    // 长点击一条记录触发的时间
    @Override
    public boolean onItemLongClick(AdapterView parent, View view,
            int position, long id) {
        Student student = (Student) dao.getStudentFromView(view, id);
        listView.setTag(student);
        return false;
    }

    // 点击一条记录是触发的事件
    @Override
    public void onItemClick(AdapterView parent, View view, int position,
            long id) {
        if (!isDeleteList) {
            student = dao.getStudentFromView(view, id);
            // Log.e(TAG, "student*****" + dao.getStudentFromView(view, id));
            Intent intent = new Intent();
            intent.putExtra("student", student);
            intent.setClass(this, ShowStudentActivity.class);
            this.startActivity(intent);
        } else {
            CheckBox box = (CheckBox) view.findViewById(R.id.cb_box);
            box.setChecked(!box.isChecked());
            list.add(id);
            deleteButton.setEnabled(box.isChecked());
        }
    }

    // 自定义一个加载数据库中的全部记录到当前页面的无参方法
    public void load() {
        StudentDBHelper studentDBHelper = new StudentDBHelper(
                StudentListActivity.this);
        SQLiteDatabase database = studentDBHelper.getWritableDatabase();
        cursor = database.query(TableContanst.STUDENT_TABLE, null, null, null,
                null, null, TableContanst.StudentColumns.MODIFY_TIME + " desc");
        startManagingCursor(cursor);
        adapter = new SimpleCursorAdapter(this, R.layout.student_list_item,
                cursor, new String[] { TableContanst.StudentColumns.ID,
                        TableContanst.StudentColumns.NAME,
                        TableContanst.StudentColumns.AGE,
                        TableContanst.StudentColumns.SEX,
                        TableContanst.StudentColumns.LIKES,
                        TableContanst.StudentColumns.PHONE_NUMBER,
                        TableContanst.StudentColumns.TRAIN_DATE }, new int[] {
                        R.id.tv_stu_id, R.id.tv_stu_name, R.id.tv_stu_age,
                        R.id.tv_stu_sex, R.id.tv_stu_likes, R.id.tv_stu_phone,
                        R.id.tv_stu_traindate });
        listView.setAdapter(adapter);
    }

    // 自定义一个加载数据库中的全部记录到当前页面的有参方法
    public void load(Cursor cursor) {
        adapter = new SimpleCursorAdapter(this, R.layout.student_list_item,
                cursor, new String[] { TableContanst.StudentColumns.ID,
                        TableContanst.StudentColumns.NAME,
                        TableContanst.StudentColumns.AGE,
                        TableContanst.StudentColumns.SEX,
                        TableContanst.StudentColumns.LIKES,
                        TableContanst.StudentColumns.PHONE_NUMBER,
                        TableContanst.StudentColumns.TRAIN_DATE }, new int[] {
                        R.id.tv_stu_id, R.id.tv_stu_name, R.id.tv_stu_age,
                        R.id.tv_stu_sex, R.id.tv_stu_likes, R.id.tv_stu_phone,
                        R.id.tv_stu_traindate });
        listView.setAdapter(adapter);
    }

    // 全选或者取消全选
    private void checkOrClearAllCheckboxs(boolean b) {
        int childCount = listView.getChildCount();
        // Log.e(TAG, "list child size=" + childCount);
        for (int i = 0; i < childCount; i++) {
            View view = listView.getChildAt(i);
            if (view != null) {
                CheckBox box = (CheckBox) view.findViewById(R.id.cb_box);
                box.setChecked(!b);
            }
        }
        showOrHiddenCheckBoxs(true);
    }

    // 显示或者隐藏自定义菜单
    private void showOrHiddenCheckBoxs(boolean b) {
        int childCount = listView.getChildCount();
        // Log.e(TAG, "list child size=" + childCount);
        for (int i = 0; i < childCount; i++) {
            View view = listView.getChildAt(i);
            if (view != null) {
                CheckBox box = (CheckBox) view.findViewById(R.id.cb_box);
                int visible = b ? View.VISIBLE : View.GONE;
                box.setVisibility(visible);
                layout.setVisibility(visible);
                deleteButton.setEnabled(false);
            }
        }
    }

    // 自定义一个利用对话框形式进行数据的删除

    private void deleteStudentInformation(final long delete_id) {
        // 利用对话框的形式删除数据
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("学员信息删除")
                .setMessage("确定删除所选记录?")
                .setCancelable(false)
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        int raws = dao.deleteStudentById(delete_id);
                        layout.setVisibility(View.GONE);
                        isDeleteList = !isDeleteList;
                        load();
                        if (raws > 0) {
                            Toast.makeText(StudentListActivity.this, "删除成功!",
                                    Toast.LENGTH_LONG).show();
                        } else
                            Toast.makeText(StudentListActivity.this, "删除失败!",
                                    Toast.LENGTH_LONG).show();
                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        dialog.cancel();
                    }
                });
        AlertDialog alert = builder.create();
        alert.show();
    }

    // 点击全选事件时所触发的响应
    private void selectAllMethods() {
        // 全选,如果当前全选按钮显示是全选,则在点击后变为取消全选,如果当前为取消全选,则在点击后变为全选
        if (selectAllButton.getText().toString().equals("全选")) {
            int childCount = listView.getChildCount();
            for (int i = 0; i < childCount; i++) {
                View view = listView.getChildAt(i);
                if (view != null) {
                    CheckBox box = (CheckBox) view.findViewById(R.id.cb_box);
                    box.setChecked(true);
                    deleteButton.setEnabled(true);
                    selectAllButton.setText("取消全选");
                }
            }
        } else if (selectAllButton.getText().toString().equals("取消全选")) {
            checkOrClearAllCheckboxs(true);
            deleteButton.setEnabled(false);
            selectAllButton.setText("全选");
        }
    }
}
复制代码

menu.xml文件

复制代码
1 <menu xmlns:android="http://schemas.android.com/apk/res/android">
2 
3     <group android:checkableBehavior="single">
4         <item android:id="@+id/delete" android:title="删除学员信息" />
5         <item android:id="@+id/look" android:title="详细信息" />
6         <item android:id="@+id/add" android:title="添加学员信息" />
7         <item android:id="@+id/write" android:title="修改学员信息" />
8     group>
9 menu>
复制代码

界面效果图如下:

删除界面:

在点击ListView中的一条Item时,老师要求显示出这个学生的详细信息,所以需要一个xml文件来显示这个信息。在这里我创建了一个student_info.xml文件

复制代码
  1 xml version="1.0" encoding="utf-8"?>
  2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3     android:orientation="vertical"
  4     android:layout_width="fill_parent"
  5     android:layout_height="fill_parent"
  6     android:padding="5dip"
  7     >
  8     <TextView android:id="@+id/id2_text_id"
  9         android:layout_width="80dip"
 10         android:layout_height="40dip"
 11         android:layout_marginRight="5dip"
 12         android:layout_marginTop="5dip"
 13         android:layout_marginBottom="5dip"
 14         android:textSize="16sp"
 15         android:gravity="left|center_vertical"
 16         android:text="学员ID:"
 17     />
 18     
 19     <TextView android:id="@+id/tv_info_id"
 20         android:layout_width="fill_parent"
 21         android:layout_height="40dip"
 22         android:layout_toRightOf="@id/id2_text_id"
 23         android:layout_alignParentRight="true"
 24         android:layout_alignTop="@id/id2_text_id"
 25         android:gravity="left|center_vertical"
 26     />
 27     
 28     <TextView android:id="@+id/name2_text_id"
 29         android:layout_width="80dip"
 30         android:layout_height="40dip"
 31         android:layout_marginRight="5dip"
 32         android:layout_marginTop="5dip"
 33         android:layout_marginBottom="5dip"
 34         android:layout_below="@id/id2_text_id"
 35         android:layout_alignLeft="@id/id2_text_id"
 36         android:textSize="16sp"
 37         android:gravity="left|center_vertical"
 38         android:text="姓名:"
 39     />
 40     
 41     <TextView android:id="@+id/tv_info_name"
 42         android:layout_width="fill_parent"
 43         android:layout_height="40dip"
 44         android:layout_toRightOf="@id/name2_text_id"
 45         android:layout_alignParentRight="true"
 46         android:layout_alignTop="@id/name2_text_id"
 47         android:gravity="left|center_vertical"
 48     />
 49     
 50     <TextView android:id="@+id/age2_text_id"
 51         android:layout_width="80dip"
 52         android:layout_height="40dip"
 53         android:gravity="left|center_vertical"
 54         android:layout_marginRight="5dip"
 55         android:layout_below="@id/name2_text_id"
 56         android:layout_marginBottom="5dip"
 57         android:textSize="16sp"
 58         android:text="年龄:"
 59     />
 60     
 61     <TextView android:id="@+id/tv_info_age"
 62         android:layout_width="fill_parent"
 63         android:layout_height="40dip"
 64         android:layout_toRightOf="@id/age2_text_id"
 65         android:layout_alignParentRight="true"
 66         android:layout_alignTop="@id/age2_text_id"
 67         android:gravity="left|center_vertical"
 68     />
 69     
 70     <TextView android:id="@+id/sex2_text_id"
 71         android:layout_width="80dip"
 72         android:layout_height="40dip"
 73         android:gravity="left|center_vertical"
 74         android:layout_below="@id/age2_text_id"
 75         android:layout_alignLeft="@id/age2_text_id"
 76         android:layout_marginRight="5dip"
 77         android:layout_marginBottom="5dip"
 78         android:text="性别:"
 79         android:textSize="16sp"
 80     />
 81     
 82     <TextView
 83         android:id="@+id/tv_info_sex"
 84         android:layout_width="fill_parent"
 85         android:layout_height="40dip"
 86         android:layout_toRightOf="@id/sex2_text_id"
 87         android:layout_alignParentRight="true"
 88         android:layout_alignTop="@id/sex2_text_id"
 89         android:gravity="left|center_vertical"
 90         />
 91     
 92     <TextView  android:id="@+id/like2_text_id"
 93         android:layout_width="80dip"
 94         android:layout_height="40dip"
 95         android:gravity="left|center_vertical"
 96         android:layout_below="@id/sex2_text_id"
 97         android:layout_alignLeft="@id/sex2_text_id"
 98         android:layout_marginRight="5dip"
 99         android:layout_marginBottom="5dip"
100         android:text="爱好:"
101         android:textSize="16sp"
102     />
103     <TextView android:layout_height="40dip" 
104         android:id="@+id/tv_info_likes" 
105         android:layout_width="wrap_content" 
106         android:layout_toRightOf="@id/like2_text_id"
107         android:layout_below="@id/sex2_text_id"
108         android:layout_marginRight="52dip"
109         android:gravity="left|center_vertical"/>
110 
111     <TextView android:id="@+id/contact2_text_id"
112         android:layout_width="80dip"
113         android:layout_height="40dip"
114         android:gravity="center_vertical|left"
115         android:layout_marginRight="5dip"
116         android:layout_below="@id/like2_text_id"
117         android:layout_marginBottom="5dip"
118         android:textSize="16sp"
119         android:text="联系电话:"
120     />
121     
122     <TextView android:id="@+id/tv_info_phone"
123         android:layout_width="fill_parent"
124         android:layout_height="40dip"
125         android:layout_toRightOf="@id/contact2_text_id"
126         android:layout_alignParentRight="true"
127         android:layout_alignTop="@id/contact2_text_id"
128         android:gravity="center_vertical|left"
129     />
130     
131     <TextView android:id="@+id/train2_time_text_id"
132         android:layout_width="80dip"
133         android:layout_height="40dip"
134         android:gravity="center_vertical|left"
135         android:layout_marginRight="5dip"
136         android:layout_below="@id/contact2_text_id"
137         android:layout_marginBottom="5dip"
138         android:textSize="16sp"
139         android:text="入学日期"
140     />
141     
142     <TextView android:id="@+id/tv_info_train_date"
143         android:layout_width="fill_parent"
144         android:layout_height="40dip"
145         android:layout_toRightOf="@id/train2_time_text_id"
146         android:layout_alignParentRight="true"
147         android:layout_alignTop="@id/train2_time_text_id"
148         android:gravity="center_vertical|left"
149     />
150     
151     <Button android:id="@+id/back_to_list_id" 
152         android:layout_width="fill_parent" 
153         android:layout_height="wrap_content" 
154         android:text="返回列表界面" 
155         android:layout_below="@id/train2_time_text_id" 
156         android:layout_alignParentLeft="true"
157         android:layout_alignParentRight="true"
158         android:onClick="goBack">
159     Button>
160 RelativeLayout>
复制代码

当然我们需要一个Activity来显示这些信息,在这里我创建了一个ShowStudentActivity。

复制代码
 1 package cn.yj3g.student.activity;
 2 
 3 import android.app.Activity;
 4 import android.content.Intent;
 5 import android.os.Bundle;
 6 import android.view.View;
 7 import android.widget.TextView;
 8 import cn.yj3g.student.entry.Student;
 9 import cn.yj3g.student.entry.TableContanst;
10 
11 public class ShowStudentActivity extends Activity {
12 
13     @Override
14     public void onCreate(Bundle savedInstanceState) {
15         super.onCreate(savedInstanceState);
16         setContentView(R.layout.student_info);
17         Intent intent = getIntent();
18         Student student = (Student) intent.getSerializableExtra(TableContanst.STUDENT_TABLE);
19         ((TextView)findViewById(R.id.tv_info_id)).setText(student.getId()+"");
20         ((TextView)findViewById(R.id.tv_info_name)).setText(student.getName());
21         ((TextView)findViewById(R.id.tv_info_age)).setText(student.getAge()+"");
22         ((TextView)findViewById(R.id.tv_info_sex)).setText(student.getSex());
23         ((TextView)findViewById(R.id.tv_info_likes)).setText(student.getLike());
24         ((TextView)findViewById(R.id.tv_info_train_date)).setText(student.getTrainDate());
25         ((TextView)findViewById(R.id.tv_info_phone)).setText(student.getPhoneNumber());
26     }
27     
28     public void goBack(View view) {
29         finish();
30     }
31 }
复制代码

界面效果如下:

最最重要的环节来了,我们做这个系统主要是为了管理学员,所以增加和修改学员信息是必不可少的,因此需要一个Activity来专门提供添加和修改学员信息。在这里还有一件重要的事情要做,那就是要设计添加和修改学员的界面,在这里可用用相对布局做比较简单。我在这里创建了一个AddStudentActivity来添加和修改学员信息,下面附上相关代码:

add_student.xml

复制代码
  1 xml version="1.0" encoding="utf-8"?>
  2 
  3 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"  
  4     android:layout_width="fill_parent"  
  5     android:layout_height="fill_parent"  
  6     android:fillViewport="true"  
  7     android:scrollbarStyle="outsideInset" > 
  8 <RelativeLayout 
  9     android:orientation="vertical"
 10     android:layout_width="fill_parent"
 11     android:layout_height="fill_parent"
 12     android:padding="5dip"
 13     >
 14     
 15     <TextView android:id="@+id/tv_stu_text_id"
 16         android:layout_width="80dip"
 17         android:layout_height="40dip"
 18         android:gravity="center_vertical|right"
 19         android:layout_marginRight="5dip"
 20         android:layout_marginTop="5dip"
 21         android:layout_marginBottom="5dip"
 22         android:textSize="16sp"
 23         android:text="学员ID:"
 24     />
 25     
 26     <TextView android:id="@+id/tv_stu_id"
 27         android:layout_width="fill_parent"
 28         android:layout_height="40dip"
 29         android:text="未分配ID"
 30         android:layout_toRightOf="@id/tv_stu_text_id"
 31         android:layout_alignParentRight="true"
 32         android:layout_alignTop="@id/tv_stu_text_id"
 33         android:gravity="center"
 34         android:background="#ffffff"
 35         android:textColor="#000000"
 36         android:textSize="16sp"
 37     />
 38     
 39     <TextView android:id="@+id/tv_name_text"
 40         android:layout_width="80dip"
 41         android:layout_height="40dip"
 42         android:gravity="center_vertical|right"
 43         android:layout_marginRight="5dip"
 44         android:layout_below="@id/tv_stu_text_id"
 45         android:layout_alignLeft="@id/tv_stu_text_id"
 46         android:layout_marginBottom="5dip"
 47         android:textSize="16sp"
 48         android:text="姓名:"
 49     />
 50     
 51     <EditText android:id="@+id/et_name"
 52         android:layout_width="fill_parent"
 53         android:layout_height="40dip"
 54         android:layout_toRightOf="@id/tv_name_text"
 55         android:layout_alignParentRight="true"
 56         android:layout_alignTop="@id/tv_name_text"
 57         android:hint="请输入姓名"
 58         android:inputType="textPersonName"
 59         android:paddingLeft="20dip"/>
 60     
 61     <TextView android:id="@+id/tv_age_text"
 62         android:layout_width="80dip"
 63         android:layout_height="40dip"
 64         android:gravity="center_vertical|right"
 65         android:layout_marginRight="5dip"
 66         android:layout_below="@id/tv_name_text"
 67         android:layout_marginBottom="5dip"
 68         android:textSize="16sp"
 69         android:text="年龄:"
 70     />
 71     
 72     <EditText android:id="@+id/et_age"
 73         android:layout_width="fill_parent"
 74         android:layout_height="40dip"
 75         android:layout_toRightOf="@id/tv_age_text"
 76         android:layout_alignParentRight="true"
 77         android:layout_alignTop="@id/tv_age_text"
 78         android:hint="请输入年龄"
 79         android:paddingLeft="20dip"
 80         android:maxLength="3"
 81         android:inputType="number"
 82     />
 83     
 84     <TextView android:id="@+id/tv_sex_text"
 85         android:layout_width="80dip"
 86         android:layout_height="40dip"
 87         android:gravity="center_vertical|right"
 88         android:layout_below="@id/tv_age_text"
 89         android:layout_alignLeft="@id/tv_age_text"
 90         android:layout_marginRight="5dip"
 91         android:layout_marginBottom="5dip"
 92         android:text="性别:"
 93         android:textSize="16sp"
 94     />
 95     
 96     <RadioGroup
 97         android:id="@+id/rg_sex"
 98         android:layout_width="fill_parent"
 99         android:layout_height="40dip"
100         android:orientation="horizontal"
101         android:layout_toRightOf="@id/tv_sex_text"
102         android:layout_alignParentRight="true"
103         android:layout_alignTop="@id/tv_sex_text"
104         >
105         <RadioButton
106           android:id="@+id/rb_sex_male"
107           android:layout_width="wrap_content"
108           android:layout_height="wrap_content"
109           android:layout_weight="1"
110           android:text=""
111           android:textSize="16sp"
112         />
113         <RadioButton android:layout_width="wrap_content" 
114         android:layout_height="wrap_content" 
115         android:text="" 
116         android:id="@+id/rb_sex_female"
117         android:layout_weight="1"
118         android:textSize="16sp">
119         RadioButton>
120     RadioGroup>
121     
122     <TextView  android:id="@+id/tv_likes_text"
123         android:layout_width="80dip"
124         android:layout_height="40dip"
125         android:gravity="center_vertical|right"
126         android:layout_below="@id/rg_sex"
127         android:layout_alignLeft="@id/tv_sex_text"
128         android:layout_marginRight="5dip"
129         android:layout_marginBottom="5dip"
130         android:text="爱好:"
131         android:textSize="16sp"
132     />
133     <CheckBox
134     android:id="@+id/box1"
135             android:layout_width="wrap_content" android:layout_height="wrap_content"
136             android:layout_toRightOf="@id/tv_likes_text"
137             android:layout_below="@+id/rg_sex"
138             android:layout_alignLeft="@+id/group1"
139             android:text="@string/box1"
140     >CheckBox>
141     <CheckBox
142     android:id="@+id/box2"
143             android:layout_width="wrap_content" android:layout_height="wrap_content"
144             android:layout_toRightOf="@+id/box1"
145             android:layout_below="@+id/rg_sex"
146             android:layout_alignTop="@+id/box1"
147             android:text="@string/box2"
148     >CheckBox>
149     <CheckBox
150     android:id="@+id/box3"
151             android:layout_width="wrap_content" android:layout_height="wrap_content"
152             android:layout_toRightOf="@+id/box2"
153             android:layout_below="@+id/rg_sex"
154             android:layout_alignTop="@+id/box2"
155             android:text="@string/box3"
156     >CheckBox>
157     
158     <TextView android:id="@+id/tv_phone_text"
159         android:layout_width="80dip"
160         android:layout_height="40dip"
161         android:gravity="center_vertical|right"
162         android:layout_marginRight="5dip"
163         android:layout_below="@id/tv_likes_text"
164         android:layout_marginBottom="5dip"
165         android:textSize="16sp"
166         android:text="联系电话:"
167     />
168     
169     <EditText android:id="@+id/et_phone"
170         android:layout_width="fill_parent"
171         android:layout_height="40dip"
172         android:layout_toRightOf="@id/tv_phone_text"
173         android:layout_alignParentRight="true"
174         android:layout_alignTop="@id/tv_phone_text"
175         android:hint="请输入手机号"
176         android:paddingLeft="20dip"
177         android:inputType="phone"
178         android:maxLength="11"
179     />
180     
181     <TextView android:id="@+id/tv_traindate_text"
182         android:layout_width="80dip"
183         android:layout_height="40dip"
184         android:gravity="center_vertical|right"
185         android:layout_marginRight="5dip"
186         android:layout_below="@id/tv_phone_text"
187         android:layout_marginBottom="5dip"
188         android:textSize="16sp"
189         android:text="入学日期"
190         
191     />
192     
193     <EditText android:id="@+id/et_traindate"
194         android:layout_width="fill_parent"
195         android:layout_height="40dip"
196         android:layout_toRightOf="@id/tv_traindate_text"
197         android:layout_alignParentRight="true"
198         android:layout_alignTop="@id/tv_traindate_text"
199         android:hint="点击选择日期"
200         android:inputType="date"
201         android:paddingLeft="20dip"
202         android:focusable="false"
203     />
204     <Button android:id="@+id/btn_save" 
205         android:layout_width="wrap_content" 
206         android:layout_height="wrap_content" 
207         android:text="保存" 
208         android:layout_below="@id/tv_traindate_text" 
209         android:layout_alignRight="@id/rg_sex">
210     Button>
211     <Button android:id="@+id/btn_clear" 
212         android:layout_width="wrap_content" 
213         android:layout_height="wrap_content" 
214         android:text="重置" 
215         android:layout_below="@id/tv_traindate_text" 
216         android:layout_toLeftOf="@id/btn_save"
217         android:layout_marginRight="10dip">
218     Button>
219 RelativeLayout>
220 ScrollView>
复制代码

AddStudentActivity代码:

复制代码
  1 package cn.yj3g.student.activity;
  2 
  3 import java.io.Serializable;
  4 import java.text.SimpleDateFormat;
  5 import java.util.Calendar;
  6 import java.util.Date;
  7 import java.util.HashSet;
  8 
  9 import android.app.Activity;
 10 import android.app.DatePickerDialog;
 11 import android.app.Dialog;
 12 import android.content.ContentValues;
 13 import android.content.Intent;
 14 import android.database.sqlite.SQLiteDatabase;
 15 import android.os.Bundle;
 16 import android.view.View;
 17 import android.view.View.OnClickListener;
 18 import android.widget.Button;
 19 import android.widget.CheckBox;
 20 import android.widget.CompoundButton;
 21 import android.widget.CompoundButton.OnCheckedChangeListener;
 22 import android.widget.DatePicker;
 23 import android.widget.EditText;
 24 import android.widget.RadioButton;
 25 import android.widget.RadioGroup;
 26 import android.widget.TextView;
 27 import android.widget.Toast;
 28 import cn.yj3g.student.dao.StudentDao;
 29 import cn.yj3g.student.db.StudentDBHelper;
 30 import cn.yj3g.student.entry.Student;
 31 import cn.yj3g.student.entry.TableContanst;
 32 
 33 public class AddStudentActivity extends Activity implements OnClickListener {
 34 
 35     private static final String TAG = "AddStudentActivity";
 36     private final static int DATE_DIALOG = 1;
 37     private static final int DATE_PICKER_ID = 1;
 38     private TextView idText;
 39     private EditText nameText;
 40     private EditText ageText;
 41     private EditText phoneText;
 42     private EditText dataText;
 43     private RadioGroup group;
 44     private RadioButton button1;
 45     private RadioButton button2;
 46     private CheckBox box1;
 47     private CheckBox box2;
 48     private CheckBox box3;
 49     private Button restoreButton;
 50     private String sex;
 51     private Button resetButton;
 52     private Long student_id;
 53 
 54     private StudentDao dao;
 55     private boolean isAdd = true;
 56 
 57     @Override
 58     public void onCreate(Bundle savedInstanceState) {
 59         super.onCreate(savedInstanceState);
 60         setContentView(R.layout.add_student);
 61         idText = (TextView) findViewById(R.id.tv_stu_id);
 62         nameText = (EditText) findViewById(R.id.et_name);
 63         ageText = (EditText) findViewById(R.id.et_age);
 64         button1 = (RadioButton) findViewById(R.id.rb_sex_female);
 65         button2 = (RadioButton) findViewById(R.id.rb_sex_male);
 66         phoneText = (EditText) findViewById(R.id.et_phone);
 67         dataText = (EditText) findViewById(R.id.et_traindate);
 68         group = (RadioGroup) findViewById(R.id.rg_sex);
 69         box1 = (CheckBox) findViewById(R.id.box1);
 70         box2 = (CheckBox) findViewById(R.id.box2);
 71         box3 = (CheckBox) findViewById(R.id.box3);
 72 
 73         restoreButton = (Button) findViewById(R.id.btn_save);
 74         resetButton = (Button) findViewById(R.id.btn_clear);
 75         dao = new StudentDao(new StudentDBHelper(this));
 76 
 77         // 设置监听
 78         restoreButton.setOnClickListener(this);
 79         resetButton.setOnClickListener(this);
 80         dataText.setOnClickListener(this);
 81         checkIsAddStudent();
 82     }
 83 
 84     /**
 85      * 检查此时Activity是否用于添加学员信息
 86      */
 87     private void checkIsAddStudent() {
 88         Intent intent = getIntent();
 89         Serializable serial = intent
 90                 .getSerializableExtra(TableContanst.STUDENT_TABLE);
 91         if (serial == null) {
 92             isAdd = true;
 93             dataText.setText(getCurrentDate());
 94         } else {
 95             isAdd = false;
 96             Student s = (Student) serial;
 97             showEditUI(s);
 98 
 99         }
100     }
101 
102     /**
103      * 显示学员信息更新的UI
104      */
105     private void showEditUI(Student student) {
106         // 先将Student携带的数据还原到student的每一个属性中去
107         student_id = student.getId();
108         String name = student.getName();
109         int age = student.getAge();
110         String phone = student.getPhoneNumber();
111         String data = student.getTrainDate();
112         String like = student.getLike();
113         String sex = student.getSex();
114         if (sex.toString().equals("")) {
115             button2.setChecked(true);
116         } else if (sex.toString().equals("")) {
117             button1.setChecked(true);
118         }
119         if (like != null && !"".equals(like)) {
120             if (box1.getText().toString().indexOf(like) >= 0) {
121                 box1.setChecked(true);
122             }
123             if (box2.getText().toString().indexOf(like) >= 0) {
124                 box2.setChecked(true);
125             }
126             if (box3.getText().toString().indexOf(like) >= 0) {
127                 box3.setChecked(true);
128             }
129         }
130         // 还原数据
131         idText.setText(student_id + "");
132         nameText.setText(name + "");
133         ageText.setText(age + "");
134         phoneText.setText(phone + "");
135         dataText.setText(data + "");
136         setTitle("学员信息更新");
137         restoreButton.setText("更新");
138     }
139 
140     public void onClick(View v) {
141         // 收集数据
142         if (v == restoreButton) {
143             if (!checkUIInput()) {// 界面输入验证
144                 return;
145             }
146             Student student = getStudentFromUI();
147             if (isAdd) {
148                 long id = dao.addStudent(student);
149                 dao.closeDB();
150                 if (id > 0) {
151                     Toast.makeText(this, "保存成功, ID=" + id, 0).show();
152                     finish();
153                 } else {
154                     Toast.makeText(this, "保存失败,请重新输入!", 0).show();
155                 }
156             } else if (!isAdd) {
157                 long id = dao.addStudent(student);
158                 dao.closeDB();
159                 if (id > 0) {
160                     Toast.makeText(this, "更新成功", 0).show();
161                     finish();
162                 } else {
163                     Toast.makeText(this, "更新失败,请重新输入!", 0).show();
164                 }
165             }
166 
167         } else if (v == resetButton) {
168             clearUIData();
169         } else if (v == dataText) {
170             showDialog(DATE_PICKER_ID);
171         }
172     }
173 
174     /**
175      * 清空界面的数据
176      */
177     private void clearUIData() {
178         nameText.setText("");
179         ageText.setText("");
180         phoneText.setText("");
181         dataText.setText("");
182         box1.setChecked(false);
183         box2.setChecked(false);
184         group.clearCheck();
185     }
186 
187     /**
188      * 收集界面输入的数据,并将封装成Student对象
189      */
190     private Student getStudentFromUI() {
191         String name = nameText.getText().toString();
192         int age = Integer.parseInt(ageText.getText().toString());
193         String sex = ((RadioButton) findViewById(group
194                 .getCheckedRadioButtonId())).getText().toString();
195         String likes = "";
196         if (box1.isChecked()) { // basketball, football football
197             likes += box1.getText();
198         }
199         if (box2.isChecked()) {
200             if (likes.equals("")) {
201                 likes += box2.getText();
202             } else {
203                 likes += "," + box2.getText();
204             }
205             if (likes.equals("")) {
206                 likes += box3.getText();
207             } else {
208                 likes += "," + box3.getText();
209             }
210         }
211         String trainDate = dataText.getText().toString();
212         String phoneNumber = phoneText.getText().toString();
213         String modifyDateTime = getCurrentDateTime();
214         Student s=new Student(name, age, sex, likes, phoneNumber, trainDate,
215                 modifyDateTime);
216         if (!isAdd) {
217             s.setId(Integer.parseInt(idText.getText().toString()));
218             dao.deleteStudentById(student_id);
219         }
220         return s;
221     }
222 
223     /**
224      * 得到当前的日期时间
225      */
226     private String getCurrentDateTime() {
227         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
228         return format.format(new Date());
229     }
230     /**
231      * 得到当前的日期
232      */
233     private String getCurrentDate() {
234         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
235         return format.format(new Date());
236     }
237     /**
238      * 验证用户是否按要求输入了数据
239      */
240     private boolean checkUIInput() { // name, age, sex
241         String name = nameText.getText().toString();
242         String age = ageText.getText().toString();
243         int id = group.getCheckedRadioButtonId();
244         String message = null;
245         View invadView = null;
246         if (name.trim().length() == 0) {
247             message = "请输入姓名!";
248             invadView = nameText;
249         } else if (age.trim().length() == 0) {
250             message = "请输入年龄!";
251             invadView = ageText;
252         } else if (id == -1) {
253             message = "请选择性别!";
254         }
255         if (message != null) {
256             Toast.makeText(this, message, 0).show();
257             if (invadView != null)
258                 invadView.requestFocus();
259             return false;
260         }
261         return true;
262     }
263 
264     private DatePickerDialog.OnDateSetListener onDateSetListener = new DatePickerDialog.OnDateSetListener() {
265         @Override
266         public void onDateSet(DatePicker view, int year, int monthOfYear,
267                 int dayOfMonth) {
268             dataText.setText(year + "-" + (monthOfYear + 1) + "-" + dayOfMonth);
269         }
270     };
271 
272     @Override
273     protected Dialog onCreateDialog(int id) {
274         switch (id) {
275         case DATE_PICKER_ID:
276             return new DatePickerDialog(this, onDateSetListener, 2011, 8, 14);
277         }
278         return null;
279     }
280 }
复制代码

界面效果如下:

修改界面:

在这里我还做了一个额外的功能就是模糊查找,有想法的可以参考下。

StudentSearch代码:

复制代码
package cn.yj3g.student.activity;

import cn.yj3g.student.dao.StudentDao;
import cn.yj3g.student.db.StudentDBHelper;
import cn.yj3g.student.entry.TableContanst;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;

public class StudentSearch extends Activity implements OnClickListener {
    private EditText nameText;
    private Button button;
    private Button reButton;
    private Cursor cursor;
    private SimpleCursorAdapter adapter;
    private ListView listView;
    private StudentDao dao;
    private Button returnButton;
    private LinearLayout layout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.search);
        nameText = (EditText) findViewById(R.id.et_srarch);
        layout=(LinearLayout) findViewById(R.id.linersearch);
        button = (Button) findViewById(R.id.bn_sure_search);
        reButton = (Button) findViewById(R.id.bn_return);
        listView = (ListView) findViewById(R.id.searchListView);
        returnButton = (Button) findViewById(R.id.return_id);
        dao = new StudentDao(new StudentDBHelper(this));
        
        
        reButton.setOnClickListener(this);
        returnButton.setOnClickListener(this);
        button.setOnClickListener(this);    
    }

    @Override
    public void onClick(View v) {
        if (v == button) {
            reButton.setVisibility(View.GONE);    
            button.setVisibility(View.GONE);
            nameText.setVisibility(View.GONE);
            layout.setVisibility(View.VISIBLE);
            String name = nameText.getText().toString();
            cursor = dao.findStudent(name);
            if (!cursor.moveToFirst()) {
                Toast.makeText(this, "没有所查学员信息!", Toast.LENGTH_SHORT).show();
            } else
                //如果有所查询的信息,则将查询结果显示出来
                adapter = new SimpleCursorAdapter(this, R.layout.find_student_list_item,
                        cursor, new String[] { TableContanst.StudentColumns.ID,
                                TableContanst.StudentColumns.NAME,
                                TableContanst.StudentColumns.AGE,
                                TableContanst.StudentColumns.SEX,
                                TableContanst.StudentColumns.LIKES,
                                TableContanst.StudentColumns.PHONE_NUMBER,
                                TableContanst.StudentColumns.TRAIN_DATE },
                        new int[] { R.id.tv_stu_id, R.id.tv_stu_name,
                                R.id.tv_stu_age, R.id.tv_stu_sex,
                                R.id.tv_stu_likes, R.id.tv_stu_phone,
                                R.id.tv_stu_traindate });
            listView.setAdapter(adapter);
        }else if(v==reButton|v==returnButton){
            finish();
        }
    }
}
复制代码

search.xml

复制代码
 1 xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:orientation="vertical"
 4     android:layout_width="fill_parent" 
 5     android:layout_height="fill_parent" >
 6     <EditText 
 7         android:id="@+id/et_srarch"
 8         android:layout_width="fill_parent" 
 9         android:layout_height="wrap_content"
10         android:hint="请输入学员姓名"
11         android:inputType="textPersonName"
12     />
13     <Button 
14         android:id="@+id/bn_sure_search"
15         android:gravity="center"
16         android:layout_width="fill_parent" 
17         android:layout_height="wrap_content"
18         android:text="确定"
19         />
20         <Button 
21         android:id="@+id/bn_return"
22         android:gravity="center"
23         android:layout_width="fill_parent" 
24         android:layout_height="wrap_content"
25         android:text="返回"
26         />
27         
28 <LinearLayout android:id="@+id/linersearch"
29                 android:orientation="vertical"
30                 android:visibility="gone"
31                 android:layout_width="fill_parent" 
32                 android:layout_height="wrap_content">
33     <ListView
34     android:id="@+id/searchListView"
35     android:layout_weight="1"
36     android:layout_width="fill_parent"
37     android:layout_height="wrap_content"/>
38     <Button 
39     android:id="@+id/return_id"
40     android:layout_width="fill_parent"
41     android:layout_height="wrap_content"
42     android:text="返回"
43     />                
44 LinearLayout>
45 LinearLayout>
复制代码

find_student_list_item.xml

复制代码
 1 xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:orientation="horizontal" android:layout_width="fill_parent"
 4     android:layout_height="wrap_content">
 5     <ImageView android:layout_width="fill_parent"
 6         android:layout_height="wrap_content" android:layout_weight="1"
 7         android:background="@drawable/icon" />
 8         <TextView android:id="@+id/tv_stu_id" android:layout_width="fill_parent"
 9         android:layout_height="wrap_content" android:layout_weight="1" />
10     <TextView android:id="@+id/tv_stu_name" android:layout_width="fill_parent"
11         android:layout_height="wrap_content" android:layout_weight="1" />
12     <TextView android:id="@+id/tv_stu_age" android:layout_width="fill_parent"
13         android:layout_height="wrap_content" android:layout_weight="1" />
14     <TextView android:id="@+id/tv_stu_sex" android:layout_width="fill_parent"
15         android:layout_height="wrap_content" android:layout_weight="1" />
16     <TextView android:id="@+id/tv_stu_likes" android:layout_width="fill_parent"
17         android:layout_height="wrap_content" android:layout_weight="1" />
18     <TextView android:id="@+id/tv_stu_phone"
19         android:layout_width="fill_parent" android:layout_height="wrap_content"
20         android:layout_weight="1" />
21     <TextView android:id="@+id/tv_stu_traindate" android:layout_width="fill_parent"
22         android:layout_height="wrap_content" android:layout_weight="1" />
23 
24 LinearLayout>
复制代码

界面效果如下:

查询结果界面:

在这里还牵扯到了一些常量和数据库的连接以及增删改查等操作,我用我们老师的方法将他们分别放在不同的包里。下面附上代码:

StudentDao类

复制代码
  1 package cn.yj3g.student.dao;
  2 
  3 import java.util.ArrayList;
  4 import java.util.HashMap;
  5 import java.util.List;
  6 import java.util.Map;
  7 import android.content.ContentValues;
  8 import android.database.Cursor;
  9 import android.database.sqlite.SQLiteDatabase;
 10 import android.view.View;
 11 import android.widget.SimpleCursorAdapter;
 12 import android.widget.TextView;
 13 import cn.yj3g.student.activity.R;
 14 import cn.yj3g.student.db.StudentDBHelper;
 15 import cn.yj3g.student.entry.Student;
 16 import cn.yj3g.student.entry.TableContanst;
 17 
 18 public class StudentDao {
 19 
 20     private StudentDBHelper dbHelper;
 21     private Cursor cursor;
 22     public StudentDao(StudentDBHelper dbHelper) {
 23         this.dbHelper = dbHelper;
 24     }
 25     // 添加一个Student对象数据到数据库表
 26     public long addStudent(Student s) {
 27 
 28         ContentValues values = new ContentValues();
 29         values.put(TableContanst.StudentColumns.NAME, s.getName());
 30         values.put(TableContanst.StudentColumns.AGE, s.getAge());
 31         values.put(TableContanst.StudentColumns.SEX, s.getSex());
 32         values.put(TableContanst.StudentColumns.LIKES, s.getLike());
 33         values.put(TableContanst.StudentColumns.PHONE_NUMBER, s.getPhoneNumber());
 34         values.put(TableContanst.StudentColumns.TRAIN_DATE, s.getTrainDate());
 35         values.put(TableContanst.StudentColumns.MODIFY_TIME, s.getModifyDateTime());
 36         return dbHelper.getWritableDatabase().insert(TableContanst.STUDENT_TABLE, null, values);
 37 
 38     }
 39 
 40     // 删除一个id所对应的数据库表student的记录
 41     public int deleteStudentById(long id) {
 42 
 43         return dbHelper.getWritableDatabase().delete(TableContanst.STUDENT_TABLE,
 44                 TableContanst.StudentColumns.ID + "=?", new String[] { id + "" });
 45     }
 46 
 47     // 更新一个id所对应数据库表student的记录
 48     public int updateStudent(Student s) {
 49 
 50         ContentValues values = new ContentValues();
 51         values.put(TableContanst.StudentColumns.NAME, s.getName());
 52         values.put(TableContanst.StudentColumns.AGE, s.getAge());
 53         values.put(TableContanst.StudentColumns.SEX, s.getSex());
 54         values.put(TableContanst.StudentColumns.LIKES, s.getLike());
 55         values.put(TableContanst.StudentColumns.PHONE_NUMBER, s.getPhoneNumber());
 56         values.put(TableContanst.StudentColumns.TRAIN_DATE, s.getTrainDate());
 57         values.put(TableContanst.StudentColumns.MODIFY_TIME, s.getModifyDateTime());
 58         return dbHelper.getWritableDatabase().update(TableContanst.STUDENT_TABLE, values,
 59                 TableContanst.StudentColumns.ID + "=?", new String[] { s.getId() + "" });
 60 
 61     }
 62 
 63     // 查询所有的记录
 64     public List<Map<String,Object>> getAllStudents() { //modify_time desc
 65         
 66         List<Map<String, Object>> data = new ArrayList<Map<String,Object>>();
 67         Cursor cursor = dbHelper.getWritableDatabase().query(TableContanst.STUDENT_TABLE, null, null, null,
 68                 null, null, TableContanst.StudentColumns.MODIFY_TIME+" desc");
 69         while(cursor.moveToNext()) {
 70             Map<String, Object> map = new HashMap<String, Object>(8);
 71             long id = cursor.getInt(cursor.getColumnIndex(TableContanst.StudentColumns.ID));
 72             map.put(TableContanst.StudentColumns.ID, id);
 73             String name = cursor.getString(cursor.getColumnIndex(TableContanst.StudentColumns.NAME));
 74             map.put(TableContanst.StudentColumns.NAME, name);
 75             int age = cursor.getInt(cursor.getColumnIndex(TableContanst.StudentColumns.AGE));
 76             map.put(TableContanst.StudentColumns.AGE, age);
 77             String sex = cursor.getString(cursor.getColumnIndex(TableContanst.StudentColumns.SEX));
 78             map.put(TableContanst.StudentColumns.SEX, sex);
 79             String likes = cursor.getString(cursor.getColumnIndex(TableContanst.StudentColumns.LIKES));
 80             map.put(TableContanst.StudentColumns.LIKES, likes);
 81             String phone_number = cursor.getString(cursor.getColumnIndex(TableContanst.StudentColumns.PHONE_NUMBER));
 82             map.put(TableContanst.StudentColumns.PHONE_NUMBER, phone_number);
 83             String train_date = cursor.getString(cursor.getColumnIndex(TableContanst.StudentColumns.TRAIN_DATE));
 84             map.put(TableContanst.StudentColumns.TRAIN_DATE, train_date);
 85             String modify_time = cursor.getString(cursor.getColumnIndex(TableContanst.StudentColumns.MODIFY_TIME));
 86             map.put(TableContanst.StudentColumns.MODIFY_TIME, modify_time);
 87             data.add(map);
 88         }
 89         return data;
 90     }
 91     //模糊查询一条记录
 92     public Cursor findStudent(String name){
 93     
 94         Cursor cursor = dbHelper.getWritableDatabase().query(TableContanst.STUDENT_TABLE,  null, "name like ?",
 95                 new String[] { "%" + name + "%" }, null, null, null,null);
 96     return cursor;
 97     }
 98     //按姓名进行排序
 99     public Cursor sortByName(){
100         Cursor cursor = dbHelper.getWritableDatabase().query(TableContanst.STUDENT_TABLE,  null,null,
101                 null, null, null,TableContanst.StudentColumns.NAME);
102     return cursor;
103     }
104     //按入学日期进行排序
105     public Cursor sortByTrainDate(){
106         Cursor cursor = dbHelper.getWritableDatabase().query(TableContanst.STUDENT_TABLE,  null,null,
107                 null, null, null,TableContanst.StudentColumns.TRAIN_DATE);
108     return cursor;
109     }
110     //按学号进行排序
111     public Cursor sortByID(){
112         Cursor cursor = dbHelper.getWritableDatabase().query(TableContanst.STUDENT_TABLE,  null,null,
113                 null, null, null,TableContanst.StudentColumns.ID);
114     return cursor;
115     }
116     public void closeDB() {
117         dbHelper.close();
118     }
119     //自定义的方法通过View和Id得到一个student对象
120     public Student getStudentFromView(View view, long id) {
121         TextView nameView = (TextView) view.findViewById(R.id.tv_stu_name);
122         TextView ageView = (TextView) view.findViewById(R.id.tv_stu_age);
123         TextView sexView = (TextView) view.findViewById(R.id.tv_stu_sex);
124         TextView likeView = (TextView) view.findViewById(R.id.tv_stu_likes);
125         TextView phoneView = (TextView) view.findViewById(R.id.tv_stu_phone);
126         TextView dataView = (TextView) view.findViewById(R.id.tv_stu_traindate);
127         String name = nameView.getText().toString();
128         int age = Integer.parseInt(ageView.getText().toString());
129         String sex = sexView.getText().toString();
130         String like = likeView.getText().toString();
131         String phone = phoneView.getText().toString();
132         String data = dataView.getText().toString();
133         Student student = new Student(id, name, age, sex, like, phone, data,null);
134         return student;
135     }
136     
137 }
复制代码

StudentDBHelper类

复制代码
 1 package cn.yj3g.student.db;
 2 
 3 import cn.yj3g.student.entry.TableContanst;
 4 import android.content.Context;
 5 import android.database.sqlite.SQLiteDatabase;
 6 import android.database.sqlite.SQLiteDatabase.CursorFactory;
 7 import android.database.sqlite.SQLiteOpenHelper;
 8 import android.util.Log;
 9 
10 public class StudentDBHelper extends SQLiteOpenHelper {
11 
12     private static final String TAG = "StudentDBHelper";
13 
14     public static final String DB_NAME = "student_manager.db";
15     public static final int VERSION = 1;
16     //构造方法
17     public StudentDBHelper(Context context, String name, CursorFactory factory, int version) {
18         super(context, name, factory, version);
19 
20     }
21 
22     public StudentDBHelper(Context context) {
23         this(context, DB_NAME, null, VERSION);
24     }
25     //创建数据库
26     @Override
27     public void onCreate(SQLiteDatabase db) {
28         Log.v(TAG, "onCreate");
29         db.execSQL("create table "
30                 + TableContanst.STUDENT_TABLE
31                 + "(_id Integer primary key AUTOINCREMENT,"
32                 + "name char,age integer, sex char, likes char, phone_number char,train_date date, "
33                 + "modify_time DATETIME)");
34     }
35     //更新数据库
36     @Override
37     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
38         Log.v(TAG, "onUpgrade");
39     }
40 
41 }
复制代码

Student类:

复制代码
  1 package cn.yj3g.student.entry;
  2 
  3 import java.io.Serializable;
  4 
  5 import android.view.View;
  6 import android.widget.TextView;
  7 import cn.yj3g.student.activity.R;
  8 
  9 public class Student implements Serializable{
 10 
 11     private long id;
 12     private String name;
 13     private int age;
 14     private String sex;
 15     private String like;
 16     private String phoneNumber;
 17     private String trainDate;
 18     private String modifyDateTime;
 19     
 20     
 21     public Student() {
 22         super();
 23     }
 24 
 25     public Student(long id, String name, int age, String sex, String like, String phoneNumber,
 26             String trainDate, String modifyDateTime) {
 27         super();
 28         this.id = id;
 29         this.name = name;
 30         this.age = age;
 31         this.sex = sex;
 32         this.like = like;
 33         this.phoneNumber = phoneNumber;
 34         this.trainDate = trainDate;
 35         this.modifyDateTime = modifyDateTime;
 36     }
 37     
 38     public Student(String name, int age, String sex, String like, String phoneNumber,
 39             String trainDate, String modifyDateTime) {
 40         super();
 41         this.name = name;
 42         this.age = age;
 43         this.sex = sex;
 44         this.like = like;
 45         this.phoneNumber = phoneNumber;
 46         this.trainDate = trainDate;
 47         this.modifyDateTime = modifyDateTime;
 48     }
 49 
 50     public long getId() {
 51         return id;
 52     }
 53     public void setId(long id) {
 54         this.id = id;
 55     }
 56     public String getName() {
 57         return name;
 58     }
 59     public void setName(String name) {
 60         this.name = name;
 61     }
 62     public int getAge() {
 63         return age;
 64     }
 65     public void setAge(int age) {
 66         this.age = age;
 67     }
 68     public String getSex() {
 69         return sex;
 70     }
 71     public void setSex(String sex) {
 72         this.sex = sex;
 73     }
 74     public String getLike() {
 75         return like;
 76     }
 77     public void setLike(String like) {
 78         this.like = like;
 79     }
 80     public String getPhoneNumber() {
 81         return phoneNumber;
 82     }
 83     public void setPhoneNumber(String phoneNumber) {
 84         this.phoneNumber = phoneNumber;
 85     }
 86     public String getTrainDate() {
 87         return trainDate;
 88     }
 89     public void setTrainDate(String trainDate) {
 90         this.trainDate = trainDate;
 91     }
 92     public String getModifyDateTime() {
 93         return modifyDateTime;
 94     }
 95     public void setModifyDateTime(String modifyDateTime) {
 96         this.modifyDateTime = modifyDateTime;
 97     }
 98     @Override
 99     public int hashCode() {
100         final int prime = 31;
101         int result = 1;
102         result = prime * result + age;
103         result = prime * result + (int) (id ^ (id >>> 32));
104         result = prime * result + ((like == null) ? 0 : like.hashCode());
105         result = prime * result + ((modifyDateTime == null) ? 0 : modifyDateTime.hashCode());
106         result = prime * result + ((name == null) ? 0 : name.hashCode());
107         result = prime * result + ((phoneNumber == null) ? 0 : phoneNumber.hashCode());
108         result = prime * result + ((sex == null) ? 0 : sex.hashCode());
109         result = prime * result + ((trainDate == null) ? 0 : trainDate.hashCode());
110         return result;
111     }
112     @Override
113     public boolean equals(Object obj) {
114         if (this == obj)
115             return true;
116         if (obj == null)
117             return false;
118         if (getClass() != obj.getClass())
119             return false;
120         Student other = (Student) obj;
121         if (age != other.age)
122             return false;
123         if (id != other.id)
124             return false;
125         if (like == null) {
126             if (other.like != null)
127                 return false;
128         } else if (!like.equals(other.like))
129             return false;
130         if (modifyDateTime == null) {
131             if (other.modifyDateTime != null)
132                 return false;
133         } else if (!modifyDateTime.equals(other.modifyDateTime))
134             return false;
135         if (name == null) {
136             if (other.name != null)
137                 return false;
138         } else if (!name.equals(other.name))
139             return false;
140         if (phoneNumber == null) {
141             if (other.phoneNumber != null)
142                 return false;
143         } else if (!phoneNumber.equals(other.phoneNumber))
144             return false;
145         if (sex == null) {
146             if (other.sex != null)
147                 return false;
148         } else if (!sex.equals(other.sex))
149             return false;
150         if (trainDate == null) {
151             if (other.trainDate != null)
152                 return false;
153         } else if (!trainDate.equals(other.trainDate))
154             return false;
155         return true;
156     }
157     @Override
158     public String toString() {
159         return "Student [id=" + id + ", name=" + name + "]";
160     }
161 }
复制代码

常量TableContanst类:

复制代码
 1 package cn.yj3g.student.entry;
 2 
 3 public final class TableContanst {
 4     
 5     public static final String STUDENT_TABLE = "student";
 6     
 7     public static final class StudentColumns {
 8         public static final String ID = "_id";
 9         public static final String NAME = "name";
10         public static final String AGE = "age";
11         public static final String SEX = "sex";
12         public static final String LIKES = "likes";
13         public static final String PHONE_NUMBER = "phone_number";
14         public static final String TRAIN_DATE = "train_date";
15         public static final String MODIFY_TIME = "modify_time";
16     }
17 }
复制代码

最后我将我的values里的strings.xml和AndroidManifest.xml附在下面,以供大家参考。

strings.xml:

复制代码
 1 xml version="1.0" encoding="utf-8"?>
 2 <resources>
 3     <string name="hello">Hello World, TextStudentManager!string>
 4     <string name="app_name">学员管理系统string>
 5     <string name="information_write">学员信息修改string>
 6     <string name="button1">string>
 7     <string name="button2">string>
 8     <string name="box1">唱歌string>
 9     <string name="box2">跳舞string>
10     <string name="box3">健身string>
11     <string name="myButton">添加学员信息string>
12     <string name="spinner">请选择string>    
13 resources>
复制代码

AndroidManifest.xml:

复制代码
 1 xml version="1.0" encoding="utf-8"?>
 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3       package="cn.yj3g.student.activity"
 4       android:versionCode="1"
 5       android:versionName="1.0">
 6     <uses-sdk android:minSdkVersion="8" />
 7 
 8     <application android:icon="@drawable/student"  android:label="@string/app_name">
 9         <activity android:name=".StudentListActivity"
10                   android:label="学员信息列表">
11             <intent-filter>
12                 <action android:name="android.intent.action.MAIN" />
13                 <category android:name="android.intent.category.LAUNCHER" />
14             intent-filter>
15         activity>
16         
17          <activity android:name=".AddStudentActivity"
18                   android:label="学员信息添加">
19         activity>
20           <activity android:name=".ShowStudentActivity"
21                   android:label="学员详细信息">
22         activity>
23          <activity android:name=".StudentSearch"
24                   android:label="学员信息查询">
25         activity>
26          <activity android:name=".SearchResult"
27                   android:label="查询结果">
28         activity>
29         <provider 
30         android:name=".MyStudentManagerProvider"
31         android:authorities="cn.yj3g.student.activity.MyStudentManagerProvider">provider>
32         <uses-library android:name="android.test.runner" />  
33         
34     application>
35     <uses-permission android:name="android.permission.READ_CONTACTS">uses-permission> 
36     <instrumentation android:name="android.test.InstrumentationTestRunner"
37           android:targetPackage="cn.yj3g.student.activity" android:label="Tests for My App" />
38 manifest>
复制代码


由于自己也是初学者,所以大家发现什么问题,可以留言,大家一起学习。

你可能感兴趣的:(android开发技巧收集,sqlite数据库)