一.需求分析
随着时代的进步,学生越来越多对于学生信息的管理也不断的在增加,需要能够一个能够管理学生信息的程序。
总体能够实现对学生基本信息包括:姓名、年龄、性别的记录,并且能够记录学生的选课情况,成绩,并且对成绩进行修改记录。
一.系统总体设计
技术说明
UI设计:通过多种布局的嵌套及控件的使用来达成效果,通过TextView控件显示文本信息,使用Button控件定义onClick属性并在Activity中定义方法实现点击,并且通过RadioButton在学生性别中判断,使用了Edit Text编辑框在登陆界面中,显示输入框中信息。
Activity组件的应用:主要通过使用Intent、Bundle类来进行跳转,各个Activity界面之间的切换。
SQLite数据库:创建了SQLite数据库,使用了onCreate()方法和onUpgrade()方法,并进行增删改查操作。
File存储:使用了openFileInput()和openFileOutput()方法来存取以及读取设备上的数据,也采用了一些Shared Preferences类进行储存。
ListView:使用了List View和自定义适配器,点击ListView中的条目出现对话框进行修改,修改后立即通知适配器进行数据的重新加载
一.数据库设计
字段名 |
字段类型 |
约束控制 |
说明 |
name |
char |
主键(primary key) |
姓名 |
gender |
char |
Not null |
性别 |
age |
int |
Not null |
年龄 |
class |
char |
Not null |
课程 |
grade |
int |
Not null |
分数 |
二.系统总体实现
主要部分代码:
(一)布局文件部分代码:主要展示几个比较重要的界面
1.总体文件布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/main_welcome"
android:textSize="20sp" />
<Button
android:id="@+id/btn_user_manager"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:layout_marginTop="23dp"
android:background="@drawable/btn_selector"
android:text="1.用户管理" />
<Button
android:id="@+id/btn_stu_manager"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:layout_marginTop="23dp"
android:background="@drawable/btn_selector"
android:text="2.学生管理" />
<Button
android:id="@+id/btn_coure_manager"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:layout_marginTop="23dp"
android:background="@drawable/btn_selector"
android:text="3.课程管理" />
<Button
android:id="@+id/btn_score_manager"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:layout_marginTop="23dp"
android:background="@drawable/btn_selector"
android:text="4.成绩管理" />
<Button
android:id="@+id/btn_exit"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:layout_marginTop="23dp"
android:background="@drawable/btn_selector"
android:text="5.退出" />
</LinearLayout>
</RelativeLayout>
- 登录界面
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="50dip"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="用户登录"
android:textColor="@color/black"
android:textSize="23sp" />
</RelativeLayout>
<!-- 信息输入框 -->
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10.0dip"
android:layout_marginRight="10.0dip"
android:layout_marginTop="20.0dip"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="50.0dip"
android:gravity="center_vertical"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="50.0dip"
android:gravity="center_vertical"
android:text="用户名:"
android:textSize="20sp" />
<EditText
android:id="@+id/loginInputUserName"
android:layout_width="fill_parent"
android:layout_height="50.0dip"
android:hint="请输入用户名" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="50.0dip"
android:gravity="center_vertical"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="50.0dip"
android:gravity="center_vertical"
android:text="密 码:"
android:textSize="20sp" />
<EditText
android:id="@+id/loginInputPassword"
android:layout_width="fill_parent"
android:layout_height="50.0dip"
android:hint="请输入密码" />
</LinearLayout>
</LinearLayout>
<Button
android:id="@+id/btn_login"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="20dp"
android:text="登录" />
</LinearLayout>
- 展现学生信息界面
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="80dp"
android:padding="8dp" >
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="80dp"
android:orientation="vertical" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="40dp" >
<TextView
android:layout_width="40dp"
android:layout_height="40dp"
android:text="姓名"
android:textSize="20sp" />
<View
android:layout_width="wrap_content"
android:layout_height="1dp"
android:layout_weight="1" />
<TextView
android:layout_width="40dp"
android:layout_height="40dp"
android:text="性别"
android:textSize="20sp" />
<View
android:layout_width="wrap_content"
android:layout_height="1dp"
android:layout_weight="1" />
<TextView
android:layout_width="40dp"
android:layout_height="40dp"
android:text="年龄"
android:textSize="20sp" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="40dp" >
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:text=""
android:textSize="20sp" />
<View
android:layout_width="wrap_content"
android:layout_height="1dp"
android:layout_weight="1" />
<TextView
android:id="@+id/tv_sex"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:text=""
android:textSize="20sp" />
<View
android:layout_width="wrap_content"
android:layout_height="1dp"
android:layout_weight="1" />
<TextView
android:id="@+id/tv_age"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:text=""
android:textSize="20sp" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="20dp" >
<ListView
android:id="@+id/course_student_manage"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView>
</LinearLayout>
(二)Activity代码(部分)
- MainActivity
package com.example.studentsytem;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import com.example.CourseManagerActivity;
import com.example.ScoreManagerActivity;
import com.example.StudentManagerActivity;
import com.example.UserManagerActivity;
import com.example.StudentDBHelper;
public class MainActivity extends Activity implements OnClickListener {
private Button btn_user_manager;
private Button btn_stu_manager;
private Button btn_coure_manager;
private Button btn_score_manager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_user_manager = (Button) this.findViewById(R.id.btn_user_manager);
btn_stu_manager = (Button) this.findViewById(R.id.btn_stu_manager);
btn_coure_manager = (Button) this.findViewById(R.id.btn_coure_manager);
btn_score_manager = (Button) this.findViewById(R.id.btn_score_manager);
btn_user_manager.setOnClickListener(this);
btn_stu_manager.setOnClickListener(this);
btn_coure_manager.setOnClickListener(this);
btn_score_manager.setOnClickListener(this);
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_user_manager:
Intent intent1 = new Intent(MainActivity.this, UserManagerActivity.class);
startActivity(intent1);
break;
case R.id.btn_stu_manager:
Intent intent2 = new Intent(MainActivity.this, StudentManagerActivity.class);
startActivity(intent2);
break;
case R.id.btn_coure_manager:
Intent intent3 = new Intent(MainActivity.this, CourseManagerActivity.class);
startActivity(intent3);
break;
case R.id.btn_score_manager:
Intent intent4 = new Intent(MainActivity.this, ScoreManagerActivity.class);
startActivity(intent4);
break;
case R.id.btn_exit:
break;
}
}
}
- StudentManagerActivity
package com.example.studentsytem;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class StudentManagerActivity extends Activity implements OnClickListener{
private Button query_by_name;
private Button query_all_student;
private EditText et_query_by_name;
private Button btn_query_by_name;
private Button score_student;
private List<Student> list;
private TextView tv_name;
private TextView tv_sex;
private TextView tv_age;
private View dialogView;
private AlertDialog dialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.student_manage);
list = new ArrayList<Student>();
query_by_name = (Button) this.findViewById(R.id.query_by_name);
query_all_student = (Button) this.findViewById(R.id.query_all_student);
score_student = (Button) this.findViewById(R.id.score_student);
query_by_name.setOnClickListener(this);
query_all_student.setOnClickListener(this);
score_student.setOnClickListener(this);
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.query_by_name:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//加载布局文件
LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
dialogView = inflater.inflate(R.layout.dialog_query_by_name,null);
builder.setView(dialogView);
builder.create();
dialog = builder.show();
et_query_by_name = (EditText) dialogView.findViewById(R.id.et_query_by_name);
btn_query_by_name = (Button) dialogView.findViewById(R.id.btn_query_by_name);
tv_name = (TextView) dialogView.findViewById(R.id.tv_name);
tv_sex = (TextView) dialogView.findViewById(R.id.tv_sex);
tv_age = (TextView) dialogView.findViewById(R.id.tv_age);
//点击按钮的时候对学生信息进行查询
btn_query_by_name.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
String name = et_query_by_name.getText().toString();
//查询学生信息
queryStudentByName(name);
}
});
break;
case R.id.query_all_student://查询所有学生信息
Intent intent = new Intent(StudentManagerActivity.this, QueryAllStudentActivity.class);
startActivity(intent);
finish();
break;
case R.id.score_student: //管理学生分数信息
Intent intent2 = new Intent(StudentManagerActivity.this, ManageStudentScoreActivity.class);
startActivity(intent2);
finish();
break;
}
}
/**
* 根据姓名查询学生信息
*
*
*/
protected void queryStudentByName(String name) {
PersonFactory factory = new PersonFactory();
TeacherInter teacherInter = (TeacherInter) factory.getPersonByClass("com.xuliugen.control.impl.TeacherImpl");
list = teacherInter.queryStudentByName(name);
if (list != null) {
for (Student stu : list) {
// 如果一下子赋值的话是不正确的
tv_name.setText(stu.getName() + "");
tv_sex.setText(stu.getSex() + "");
tv_age.setText(stu.getAge() + "");
}
} else {
// dialog.dismiss(); //这句话是消掉dialog之后弹出一个对话框
Toast.makeText(StudentManagerActivity.this, "没有找到你所需要的学生信息!",Toast.LENGTH_LONG).show();
}
}
}
3.StudentDBHelper
package com.example.studentsytem;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class StudentDBHelper extends SQLiteOpenHelper {
private static final String TAG = "StudentDBHelper";
public static final String DB_NAME = "student_manager.db";
public static final int VERSION = 1; //构造方法
public StudentDBHelper(Context context, String name, CursorFactory factory, int version)
{
super(context, name, factory, version);
}
public StudentDBHelper(Context context) {
this(context, DB_NAME, null, VERSION); }
//创建数据库
@Override
public void onCreate(SQLiteDatabase db) {
Log.v(TAG, "onCreate");
db.execSQL("create table "
+ TableContanst.STUDENT_TABLE + "(_id Integer primary key AUTOINCREMENT,"
+ "name char,age integer, sex char, likes char, phone_number char,train_date date, "
+ "modify_time DATETIME)"); }
//更新数据库
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.v(TAG, "onUpgrade");
}
}
4,UserLoginActivity
package com.example.studentsytem;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class UserLoginActivity extends Activity {
private EditText loginInputUserName;
private EditText loginInputPassword;
private Button btn_login;
private String username;
private String password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.user_login);
loginInputUserName = (EditText) this.findViewById(R.id.loginInputUserName);
loginInputPassword = (EditText) this.findViewById(R.id.loginInputPassword);
btn_login = (Button) this.findViewById(R.id.btn_login);
btn_login.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//获取值要在按钮点击的时候
username = loginInputUserName.getText().toString();
password = loginInputPassword.getText().toString();
studentLogin(username, password);
}
});
}
/**
* 用户的登录
*
*/
private void studentLogin(String username, String password) {
PersonFactory personFactory = new PersonFactory();
StudentInter studentInter = (StudentInter) personFactory.getPersonByClass("com.xuliugen.control.impl.StudentImpl");
boolean flag = studentInter.login(username,password);
if(flag){
Toast.makeText(UserLoginActivity.this, "登录成功!", Toast.LENGTH_LONG).show();
Intent intent = new Intent(UserLoginActivity.this,UserManagerActivity.class);
finish();
}else{
Toast.makeText(UserLoginActivity.this, "登录失败!", Toast.LENGTH_LONG).show();
Intent intent = new Intent(UserLoginActivity.this,UserManagerActivity.class);
finish();
}
}
}
五.程序功能测试及截图
(1)主界面
(2)注册界面
(3)查找界面
(4)选课界面
(5)查询信息界面
六.心得体会
这次课设使我对android项目的开发有了一个新的认识,知道了一个心得项目是什么样的,完成一个项目真的很需要时间和精力。在制作的过程中总是会出现各种各样的问题,在Activity的切换上遇到问题,以及在File存储,listview出现了困难,通过上博客园、CSDN之类的学术网站去参考一些的解决办法,总之还是要多学习,多练习,经常做才能更加的熟悉。