Android版学生管理系统

用户可以输入姓名、性别、年龄三个字段,通过点击添加学生按钮,将学生信息展示到开始为空的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>

效果图:

之后我们要建立一个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,希望各位大神指正。

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

您可能感兴趣的文章:

  • 简单实现Android学生管理系统(附源码)
  • Android实现学生管理系统
  • Android中使用ContentProvider管理系统资源的实例
  • Android实现电池管理系统
  • 直接可用的Android studio学生信息管理系统
(0)

相关推荐

  • Android中使用ContentProvider管理系统资源的实例

    ContentProvider管理联系人的实例: package com.android.xiong.getsystemcontentprovidertest; import java.util.ArrayList; import android.app.Activity; import android.app.AlertDialog; import android.content.ContentUris; import android.content.ContentValues; import

  • 直接可用的Android studio学生信息管理系统

    百度上流传最广的版本有所欠缺,并不能直接使用,同时有很多不必要的功能,这是我进行删减.修改.核查后的版本,根据下面的步骤一步步来直接能够运行程序. 本程序实现的功能是增删改查以及全选 首先是程序提纲 主要部分是java文件和xml文件. activity放在java文件里面,xml文件就是布局文件,用来规定界面的显示格式. 类定义的Java文件 StudentDao StudnetDBHelper Student TableContanst 其他文件 string .xml color.xml

  • Android实现电池管理系统

    一.Android 电池服务 Android电池服务,用来监听内核上报的电池事件,并将最新的电池数据上报给系统,系统收到新数据后会去更新电池显示状态.剩余电量等信息.如果收到过温报警和低电报警,系统会自动触发关机流程,保护电池和机器不受到危害. Android电池服务的启动和运行流程: Android 电池服务的源码结构 Framework\base\services\java\com\android\server         ├── SystemServer.java           

  • 简单实现Android学生管理系统(附源码)

    本文实例讲述了Android实现学生管理系统,分享给大家供大家参考.具体如下: (1)管理系统实现的功能主要是:学生.教师的注册登录,和选课,以及修改学生的成绩等基本简单的功能,最主要的是实现一些Dialog的使用. 界面如下: (2)主要代码如下:(个人留作笔记,如需要完整代码,在最下边免费下载) 下边是一个适配器,适配器是为了一个listvie进行设置值,其中加载的是一个itemview,适配器中还是用了继承的方法,用于通知适配器进行更新. public class CourseAdapte

  • Android实现学生管理系统

    本文实例为大家分享了Android实现学生管理系统的关键性代码,供大家参考,具体内容如下 局部效果图: 实现代码: 1.布局 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.itheima27.sutdentmanager&qu

  • Android版学生管理系统

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

  • Java版学生管理系统

    本文实例为大家分享了Java版学生管理系统的具体代码,供大家参考,具体内容如下 学生类 //学生类 public class Student {     //学号     private int sid;     //姓名     private String name;     //年龄     private int age;     //地址     private String address;     //创建构造方法     public Student(){       }    

  • 基于Python实现面向对象版学生管理系统

    目录 一.目标 二.系统需求 三.准备程序文件 1. 分析 2. 创建程序文件 四.书写程序 1. student.py 2. 管理系统需求 3. main.py 4. 定义系统功能函数 4.1 添加学生 4.2 删除学生 4.3 修改学生信息 4.5 查询学生信息 4.6 显示所有学生信息 4.7 保存学生信息 4.8 加载学生信息 五.源代码 main.py student.py managerSystem.py 六.总结 一.目标 了解面向对象开发过程中类内部功能的分析方法 了解常用系统功

  • python版学生管理系统

    写一个学生管理系统,最好用python. 我都没学过python呢,只好开始临时抱佛脚,再到网上找找有没有例子看看,下面是我参照另一个博主写的,中间有一些和我不能融合的错误,我已经解决了. input("\n\nPress the enter key to exit.") def functionList(): # 定义功能菜单 print("---------请输入序号选择您要得功能---------") print("") print(&qu

  • 简单实现Java版学生管理系统

    本文实例为大家分享了Java实现学生管理系统的具体代码,供大家参考,具体内容如下 package BookDemo_1; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Test { public static void main(String[] args) { StudentSys stuSys=new StudentSys("学生管理系统"); stuSys.initWi

  • python Tkinter版学生管理系统

    本文实例为大家分享了python Tkinter版学生管理的具体代码,供大家参考,具体内容如下 Tkinter是python自带的UI包,无需下载,只需要导入 tkinter 文档 //http://effbot.org/tkinterbook//// 文档是英文版本的,可以翻译! 界面效果如下: python的pc端界面还是可以的,较为美观! 页面较为粗狂,为经过专业设计! 系统的对象封装,数据连接使用的是原本控制台版本的! 控制台版本的系统,包含对象封装,数据连接 #导入tkinter 包

随机推荐