2020-06-09

基于安卓的学生管理系统

转载https://blog.csdn.net/sinat_34608734/article/details/74136271?utm_medium=distribute.wap_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.wap_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

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

首页的布局main.xml

复制代码

<?xml version="1.0" encoding="utf-8"?>













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

?

<?xml version="1.0" encoding="utf-8"?>




<TextView android:id="@+id/tv_stu_age"
    android:layout_width="fill_parent" 
    android:layout_gravity="center"
    android:layout_height="wrap_content" 
    android:layout_weight="1"/>
<TextView android:id="@+id/tv_stu_sex"
    android:layout_width="fill_parent" 
    android:layout_gravity="center"
    android:layout_height="wrap_content" 
    android:layout_weight="1"/>
  
<TextView android:id="@+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"/>
<TextView android:id="@+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"/>
<TextView android:id="@+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"/>
<TextView android:id="@+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"/>
      
<CheckBox 
    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


2
3
4
5
6
7
8
9

复制代码
界面效果图如下:

删除界面:

在点击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
160
复制代码
当然我们需要一个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
120
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 >
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 >
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 >
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
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
219
220
复制代码
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
45
复制代码
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
复制代码
界面效果如下:

查询结果界面:

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

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
3 Hello World, TextStudentManager!
4 学员管理系统
5 学员信息修改
6 男
7 女
8 唱歌
9 跳舞
10 健身
11 添加学员信息
12 请选择
13
复制代码
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
7
8
9 <activity android:name=".StudentListActivity"
10 android:label=“学员信息列表”>
11
12
13
14
15
16
17 <activity android:name=".AddStudentActivity"
18 android:label=“学员信息添加”>
19
20 <activity android:name=".ShowStudentActivity"
21 android:label=“学员详细信息”>
22
23 <activity android:name=".StudentSearch"
24 android:label=“学员信息查询”>
25
26 <activity android:name=".SearchResult"
27 android:label=“查询结果”>
28
29 <provider
30 android:name=".MyStudentManagerProvider"
31 android:authorities=“cn.yj3g.student.activity.MyStudentManagerProvider”>
32
33
34
35
36 <instrumentation android:name=“android.test.InstrumentationTestRunner”
37 android:targetPackage=“cn.yj3g.student.activity” android:label=“Tests for My App” />
38
复制代码

由于自己也是初学者,所以大家发现什么问题,可以留言,大家一起学习。
文章最后发布于: 2015-02-16

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值