首页 > 系统 > Android > 正文

Android版学生管理系统

2019-10-22 18:17:06
字体:
来源:转载
供稿:网友

用户可以输入姓名、性别、年龄三个字段,通过点击添加学生按钮,将学生信息展示到开始为空的ScrollView控件中,ScrollView控件只能包裹一个控件,我这里包裹的是LinearLayout。点击保存数据按钮将数据通过XmlSerializer对象将数据保存到sd卡中,当点击恢复数据按钮时将sd卡文件中的数据读取出来回显到ScrollView中。大概功能就是这样的,下面我们来看看具体的代码吧。

因为要读写文件,所以要在清单文件中添加两个权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

首先,我们画出UI界面,具体代码和效果如下:

<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" > <TextView  android:id="@+id/title"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:layout_gravity="center_horizontal"  android:layout_marginTop="5dip"  android:textSize="28sp"  android:textColor="#D5F2F4"  android:text="学生管理系统" /> <LinearLayout   android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:layout_marginTop="5dip"  android:orientation="horizontal">  <LinearLayout    android:layout_height="wrap_content"   android:layout_width="0dip"   android:layout_weight="1"   android:orientation="vertical">   <TextView     android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_gravity="center_horizontal"    android:textSize="18sp"    android:textColor="#DAD5D9"    android:text="姓名"/>   <EditText    android:id="@+id/et_name"     android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:singleLine="true"/>  </LinearLayout>  <LinearLayout    android:layout_height="wrap_content"   android:layout_width="0dip"   android:layout_weight="1"   android:orientation="vertical">   <TextView     android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_gravity="center_horizontal"    android:textSize="18sp"    android:textColor="#DAD5D9"    android:text="性别"/>   <EditText    android:id="@+id/et_sex"     android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:singleLine="true"/>  </LinearLayout>  <LinearLayout    android:layout_height="wrap_content"   android:layout_width="0dip"   android:layout_weight="1"   android:orientation="vertical">   <TextView     android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_gravity="center_horizontal"    android:textSize="18sp"    android:textColor="#DAD5D9"    android:text="年龄"/>   <EditText    android:id="@+id/et_age"     android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:inputType="number"    android:singleLine="true"/>  </LinearLayout>  <Button    android:id="@+id/btn_add"   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:layout_gravity="bottom"   android:textColor="@android:color/black"   android:textSize="20sp"   android:text="添加学生"/> </LinearLayout> <!-- ScrollView只可以包裹一个控件 --> <ScrollView   android:layout_width="fill_parent"  android:layout_height="0dip"  android:layout_weight="1"  android:layout_marginTop="5dip">  <LinearLayout    android:id="@+id/ll_student_group"   android:layout_width="fill_parent"   android:layout_height="fill_parent"   android:orientation="vertical">  </LinearLayout> </ScrollView> <LinearLayout   android:orientation="horizontal"  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:layout_marginTop="5dip">  <Button    android:id="@+id/btn_save"   android:layout_width="0dip"   android:layout_height="fill_parent"   android:layout_weight="1"   android:textSize="20sp"   android:textColor="@android:color/black"   android:text="保存数据"/>  <Button    android:id="@+id/btn_restore"   android:layout_width="0dip"   android:layout_height="fill_parent"   android:layout_weight="1"   android:textSize="20sp"   android:textColor="@android:color/black"   android:text="恢复数据"/> </LinearLayout> </LinearLayout>

效果图:

Android版学生管理系统,Android管理系统,Android学生管理系统

之后我们要建立一个student的domain,就包括了三个字段,name、age、sex,为了方便观看,我也将Student代码也全部贴出来:

package cn.yzx.studentmanageros.domain;public class Student { private String name; private String sex; private Integer age; public Student() {  super();  // TODO Auto-generated constructor stub } public Student(String name, String sex, Integer age) {  super();  this.name = name;  this.sex = sex;  this.age = age; } @Override public String toString() {  return "Student [name=" + name + ", sex=" + sex + ", age=" + age + "]"; } public String getName() {  return name; } public void setName(String name) {  this.name = name; } public String getSex() {  return sex; } public void setSex(String sex) {  this.sex = sex; } public Integer getAge() {  return age; } public void setAge(Integer age) {  this.age = age; }}

之后,也是最主要的,activity的实现文件,我这里直接将代码贴出来,因为注释的很清楚:

package cn.yzx.studentmanageros;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.text.Format;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;import org.xmlpull.v1.XmlSerializer;import android.app.Activity;import android.graphics.Color;import android.os.Bundle;import android.os.Environment;import android.text.TextUtils;import android.util.Log;import android.util.Xml;import android.view.View;import android.view.View.OnClickListener;import android.widget.EditText;import android.widget.LinearLayout;import android.widget.TextView;import android.widget.Toast;import cn.yzx.studentmanageros.domain.Student;public class MainActivity extends Activity implements OnClickListener { private static final String TAG = "MainActivity"; private EditText et_name; private EditText et_sex; private EditText et_age; private LinearLayout llStudentGroup; //学生列表控件 private List<Student> studentList; private File cacheFile = new File(Environment.getExternalStorageDirectory(), "student.xml"); @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  init(); } private void init() {  studentList = new ArrayList<Student>();  et_name = (EditText) findViewById(R.id.et_name);  et_sex = (EditText) findViewById(R.id.et_sex);  et_age = (EditText) findViewById(R.id.et_age);  llStudentGroup = (LinearLayout) findViewById(R.id.ll_student_group);  findViewById(R.id.btn_add).setOnClickListener(this);  findViewById(R.id.btn_save).setOnClickListener(this);  findViewById(R.id.btn_restore).setOnClickListener(this); } @Override public void onClick(View v) {  switch (v.getId()) {  case R.id.btn_add: //添加学生   //取出数据   String name = et_name.getText().toString();   String sex = et_sex.getText().toString();   String age = et_age.getText().toString();   //控制台打印数据   Log.e(TAG, "name="+name+",sex="+sex+",age="+age);   //判断是否有数据为空   if(TextUtils.isEmpty(name) || TextUtils.isEmpty(sex) || TextUtils.isEmpty(age)){    Toast.makeText(this, "请重新输入", 0).show();    break;   }   //封装成Student实体   Student student = new Student(name, sex, Integer.valueOf(age));   //添加到学生列表中   addToStudentList(student);   break;  case R.id.btn_save: //保存数据   boolean isSuccess = saveStudentList();   if(isSuccess){    Toast.makeText(this, "保存成功", 0).show();   }else {    Toast.makeText(this, "保存失败", 0).show();   }   break;  case R.id.btn_restore: //恢复数据   // 恢复数据之前, 需要把集合中和LinearLayout中的数据全部清空   studentList.clear();   // 把线性布局中所有的控件全部移除   llStudentGroup.removeAllViews();   //从文件中读取数据   List<Student> readStudentList = readStudentList();   // 把取出回来的数据, 一条一条的添加到学生列表中   for (Student stu : readStudentList) {    addToStudentList(stu);   }   break;  default:   break;  } } private List<Student> readStudentList() {  List<Student> studentList = null;  // 构建一个XmlPullParser解析器对象  XmlPullParser parser = Xml.newPullParser();  // 指定要解析的文件  try {   parser.setInput(new FileInputStream(cacheFile), "utf-8");   // 开始解析: 获取EventType解析事件, 循环去判断事件   int eventType = parser.getEventType();   Student student = null;   while(eventType!=XmlPullParser.END_DOCUMENT){    // 当前的事件类型不等于结束的document, 继续循环    String tagName = parser.getName();    switch (eventType) {    case XmlPullParser.START_TAG:     if("students".equals(tagName)){//<students>      studentList = new ArrayList<Student>();     }else if ("student".equals(tagName)) {//<student>      student = new Student();     }else if ("name".equals(tagName)) {      student.setName(parser.nextText());     }else if ("sex".equals(tagName)) {      student.setSex(parser.nextText());     }else if("age".equals(tagName)){      student.setAge(Integer.valueOf(parser.nextText()));     }     break;    case XmlPullParser.END_TAG:     if("student".equals(tagName)){      studentList.add(student);     }     break;    default:     break;    }    eventType = parser.next(); // 取下一个事件类型   }   return studentList;  } catch (Exception e) {   // TODO Auto-generated catch block   e.printStackTrace();  }  return null; } private boolean saveStudentList() {  String path = cacheFile.getPath();  Log.e(TAG, "保存文件的路径:"+path);  //得到一个序列化对象  XmlSerializer serializer = Xml.newSerializer();  try {   //指定输出流   serializer.setOutput(new FileOutputStream(cacheFile), "utf-8");   //写start_document   serializer.startDocument("utf-8", true);   // 写<students>   serializer.startTag(null, "students");   for (Student student : studentList) {    Log.e(TAG, student.toString());    // 写<student>    serializer.startTag(null, "student");     // 写<name>     serializer.startTag(null, "name");     serializer.text(student.getName());     // 写</name>     serializer.endTag(null, "name");     // 写<sex>     serializer.startTag(null, "sex");     serializer.text(student.getSex());      // 写</sex>     serializer.endTag(null, "sex");     // 写<age>     serializer.startTag(null, "age");     serializer.text(String.valueOf(student.getAge()));      // 写</age>     serializer.endTag(null, "age");    // 写</student>    serializer.endTag(null, "student");   }   // 写</students>   serializer.endTag(null, "students");   //写end_document   serializer.endDocument();   return true;  } catch(Exception e) {   e.printStackTrace();  }  return false; } /**  * 把给定的学生添加到学生列表中  * @param student  */ private void addToStudentList(Student student) {  // 把学生信息添加到集合中, 为了方便呆会去保存  studentList.add(student);  //创建一个TextView对象,并设置其内容  TextView tv = new TextView(this);  String text = "  "+student.getName()+" "+student.getSex()+"  "+student.getAge();  tv.setText(text);  tv.setTextSize(18);  tv.setTextColor(Color.BLACK);  // 把TextView添加到学生列表中  llStudentGroup.addView(tv); }}

大家可以试试,有什么问题可以留言讨论,本人才学android,希望各位大神指正。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VEVB武林网。


注:相关教程知识阅读请移步到Android开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表