Android课程设计:学生信息管理

一.需求分析

随着时代的进步,学生越来越多对于学生信息的管理也不断的在增加,需要能够一个能够管理学生信息的程序。

总体能够实现对学生基本信息包括:姓名、年龄、性别的记录,并且能够记录学生的选课情况,成绩,并且对成绩进行修改记录。

一.系统总体设计

 

 

 

技术说明

    UI设计:通过多种布局的嵌套及控件的使用来达成效果,通过TextView控件显示文本信息,使用Button控件定义onClick属性并在Activity中定义方法实现点击,并且通过RadioButton在学生性别中判断,使用了Edit Text编辑框在登陆界面中,显示输入框中信息。

Activity组件的应用主要通过使用IntentBundle类来进行跳转,各个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>

  1. 登录界面

 

 

   <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>

  1. 展现学生信息界面

 

 

  <?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代码(部分)

 

  1. 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;

        }

    }

}

 

 

  1. 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");

    }

}

 

 

4UserLoginActivity

 

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之类的学术网站去参考一些的解决办法,总之还是要多学习,多练习,经常做才能更加的熟悉。

原文地址:https://www.cnblogs.com/mineral/p/12010872.html