1. 最终要做的项目目标:


2、编写Android清单文件AndroidManifest.xml

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

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.itheima27.sutdentmanager"

android:versionCode="1"

android:versionName="1.0" >

<uses-sdk

android:minSdkVersion="8"

android:targetSdkVersion="19" />

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

<application

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

<activity

android:name="com.itheima27.sutdentmanager.MainActivity"

android:label="@string/app_name" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

</application>

</manifest>

3 编写布局文件activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@android:color/white"

android:orientation="vertical" >

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center_horizontal"

android:layout_marginTop="5dip"

android:text="学生管理系统"

android:textColor="#99CCFF"

android:textSize="23sp"/>

<RelativeLayout

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_marginTop="5dip"

android:padding="5dip">

<TextView

android:id="@+id/tv_name"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:paddingLeft="15dip"

android:paddingRight="15dip"

android:text="姓名"

android:textSize="18sp" />

<TextView

android:id="@+id/tv_sex"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginLeft="5dip"

android:layout_toRightOf="@id/tv_name"

android:paddingLeft="15dip"

android:paddingRight="15dip"

android:text="性别"

android:textSize="18sp" />

<TextView

android:id="@+id/tv_age"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginLeft="5dip"

android:layout_toRightOf="@id/tv_sex"

android:paddingLeft="15dip"

android:paddingRight="15dip"

android:text="年龄"

android:textSize="18sp" />

<!-- 在姓名的下面 -->

<EditText

android:id="@+id/et_name"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignLeft="@id/tv_name"

android:layout_alignRight="@id/tv_name"

android:layout_below="@id/tv_name"

android:singleLine="true" />

<!-- 在性别的下面 -->

<EditText

android:id="@+id/et_sex"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignLeft="@id/tv_sex"

android:layout_alignRight="@id/tv_sex"

android:layout_below="@id/tv_sex"

android:singleLine="true" />

<EditText

android:id="@+id/et_age"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignLeft="@id/tv_age"

android:layout_alignRight="@id/tv_age"

android:layout_below="@id/tv_age"

android:inputType="number"

android:singleLine="true" />

<Button

android:id="@+id/btn_add_student"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignBaseline="@id/et_age"

android:layout_toRightOf="@id/et_age"

android:text="添加学生"

android:textSize="20sp" />

</RelativeLayout>

<ScrollView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_weight="1" >

<LinearLayout

android:id="@+id/ll_student_list"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_margin="1dip"

android:orientation="vertical"

android:padding="5dip" >

</LinearLayout>

</ScrollView>

<LinearLayout

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_marginTop="5dip"

android:orientation="horizontal" >

<Button

android:id="@+id/btn_save"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_weight="1"

android:text="保存数据"

android:textSize="20sp" />

<Button

android:id="@+id/btn_restore"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_weight="1"

android:text="恢复数据"

android:textSize="20sp" />

</LinearLayout>

</LinearLayout>

4 编写Student实体

package com.itheima27.sutdentmanager.entities;

public class Student {

private String name;

private String sex;

private Integer age;

public Student() {

super();

}

public Student(String name, String sex, Integer age) {

super();

this.name = name;

this.sex = sex;

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

}

@Override

public String toString() {

return "Student [name=" + name + ", sex=" + sex + ", age=" + age + "]";

}

}

5 编写MainActivity

package com.itheima27.sutdentmanager;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.util.ArrayList;

import java.util.List;

import org.xmlpull.v1.XmlPullParser;

import org.xmlpull.v1.XmlSerializer;

import android.graphics.Color;

import android.os.Bundle;

import android.os.Environment;

import android.support.v7.app.ActionBarActivity;

import android.text.TextUtils;

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 com.itheima27.sutdentmanager.entities.Student;

public class MainActivity extends ActionBarActivity implements OnClickListener {

private EditText etName;

private EditText etSex;

private EditText etAge;

private LinearLayout llStudentList;

private List<Student> studentList;

private String filePath;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

init();

}

private void init() {

etName = (EditText) findViewById(R.id.et_name);

etSex = (EditText) findViewById(R.id.et_sex);

etAge = (EditText) findViewById(R.id.et_age);

llStudentList = (LinearLayout) findViewById(R.id.ll_student_list);

findViewById(R.id.btn_save).setOnClickListener(this);

findViewById(R.id.btn_restore).setOnClickListener(this);

findViewById(R.id.btn_add_student).setOnClickListener(this);

studentList = new ArrayList<Student>();

filePath = Environment.getExternalStorageDirectory().getPath() + "/student.xml";

}

public void onClick(View v) {

switch (v.getId()) {

case R.id.btn_save:

if(studentList.size() > 0) {

//将信息写到xml文件中

if(saveStudent2Local()) {

Toast.makeText(this, "保存成功", 0).show();

} else {

Toast.makeText(this, "保存失败", 0).show();

}

} else {

Toast.makeText(this, "当前没有数据", 0).show();

}

break;

case R.id.btn_restore:

if(restoreStudentFromLocal()) {

Toast.makeText(this, "恢复成功", 0).show();

} else {

Toast.makeText(this, "恢复失败", 0).show();

}

break;

case R.id.btn_add_student:

addStudent();

break;

default:

break;

}

}

/**

* 从xml中读出Student数据

* @return

*/

private boolean restoreStudentFromLocal() {

try {

XmlPullParser parser = Xml.newPullParser();

parser.setInput(new FileInputStream(filePath), "utf-8");

int eventType = parser.getEventType();

studentList.clear();

Student student = null;

String nodeName = null;

while(eventType != XmlPullParser.END_DOCUMENT) {

nodeName = parser.getName();

switch (eventType) {

case XmlPullParser.START_TAG:

if("student".equals(nodeName)) {

student = new Student();

} else if("name".equals(nodeName)) {

student.setName(parser.nextText());

} else if("sex".equals(nodeName)) {

student.setSex(parser.nextText());

} else if("age".equals(nodeName)) {

student.setAge(Integer.valueOf(parser.nextText()));

}

break;

case XmlPullParser.END_TAG:

if("student".equals(nodeName)) {

studentList.add(student);

}

break;

default:

break;

}

eventType = parser.next();

}

refreshStudentList();

return true;

} catch (Exception e) {

e.printStackTrace();

}

return false;

}

/**

* 恢复student的List列表

*/

private void refreshStudentList() {

llStudentList.removeAllViews();

TextView childView;

for (Student student : studentList) {

childView = new TextView(this);

childView.setTextSize(23);

childView.setTextColor(Color.BLACK);

childView.setText("  " + student.getName() + "  " + student.getSex() + "  " + student.getAge());

llStudentList.addView(childView);

}

}

private boolean saveStudent2Local() {

try {

XmlSerializer serializer = Xml.newSerializer();

serializer.setOutput(new FileOutputStream(filePath), "utf-8");

serializer.startDocument("utf-8", true);

serializer.startTag(null, "infos");

for (Student stu : studentList) {

serializer.startTag(null, "student");

serializer.startTag(null, "name");

serializer.text(stu.getName());

serializer.endTag(null, "name");

serializer.startTag(null, "sex");

serializer.text(stu.getSex());

serializer.endTag(null, "sex");

serializer.startTag(null, "age");

serializer.text(String.valueOf(stu.getAge()));

serializer.endTag(null, "age");

serializer.endTag(null, "student");

}

serializer.endTag(null, "infos");

serializer.endDocument();

return true;

} catch (Exception e) {

e.printStackTrace();

}

return false;

}

private void addStudent() {

String name = etName.getText().toString();

String sex = etSex.getText().toString();

String age = etAge.getText().toString();

if(!TextUtils.isEmpty(name)

&& !TextUtils.isEmpty(sex)

&& !TextUtils.isEmpty(age)) {

studentList.add(new Student(name, sex, Integer.valueOf(age)));

TextView childView = new TextView(this);

childView.setTextSize(23);

childView.setTextColor(Color.BLACK);

childView.setText("  " + name + "  " + sex + "  " + age);

llStudentList.addView(childView);

} else {

Toast.makeText(this, "请正确输入", 0).show();

}

}

}

05_学生管理系统,xml读写,布局的综合应用相关推荐

  1. 学生管理系统说明文档

    0.作品描述 基于Python的tkinter.pymysql等模块,连接到MySQL数据库,对表记录进行增改查等操作,并展示到相应窗体列表控件中,实现对学生信息.成绩的管理. 1.思维导图 2.数据 ...

  2. 学校教务管理系统、网站布局自动化、学生成绩教师、成绩查询

    下载地址:https://download.csdn.net/download/ouyangxiaobai123/22176771 项目介绍: 学校教务管理系统.网站布局自动化.学生成绩教师.成绩查询 ...

  3. xml解析案例:一个简单的学生管理系统

    1.创建一个xml文件,写一些学生信息 <?xml version="1.0" encoding="UTF-8"?><person> & ...

  4. 汇编综合实验--学生管理系统

    文章目录 前言 一.程序完整的代码 二.各各子程序的功能讲解 1.登入功能 2.菜单功能 3.输入功能 4.输出功能 5.成绩排序功能 6.不及格人数统计功能 7.删除学习信息功能 8.插入学生信息功 ...

  5. python综合练习:学生管理系统

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.程序功能(Function) 1.功能概述 2.思维导图 二. 学生实体(Entity) 2.关系模式 3.学生表记录 ...

  6. java与数据库综合实训_JAVA数据库学生管理系统实训报告

    <JAVA数据库学生管理系统实训报告>由会员分享,可在线阅读,更多相关<JAVA数据库学生管理系统实训报告(43页珍藏版)>请在人人文库网上搜索. 1.实训报告实训名称:学生成 ...

  7. 综合案例----学生管理系统

    学生类 package studentsystem;public class Student {private String id;private String name;private int ag ...

  8. 【Android基础】学生管理系统

    用户可以输入姓名.性别.年龄三个字段,通过点击添加学生按钮,将学生信息展示到开始为空的ScrollView控件中,ScrollView控件只能包裹一个控件,我这里包裹的是LinearLayout.点击 ...

  9. android的学生管理系统,Android版学生管理系统

    用户可以输入姓名.性别.年龄三个字段,通过点击添加学生按钮,将学生信息展示到开始为空的ScrollView控件中,ScrollView控件只能包裹一个控件,我这里包裹的是LinearLayout.点击 ...

最新文章

  1. YOLO-Z | 记录修改YOLOv5以适应小目标检测的实验过程
  2. Spring 中策略模式的 2 个经典应用,可以用来怼面试官了
  3. [洛谷P4174][NOI2006]最大获利
  4. 信息学奥赛一本通 1014:与圆相关的计算 | OpenJudge NOI 1.3 09
  5. 定时器 setTimeout setInterval
  6. 如何写好标题,才能轻松上简书首页?
  7. mysql check约束无效
  8. 阿里巴巴高级技术专家:如何成为优秀的技术主管(上篇)
  9. Word文件带密码如何解除?
  10. 邻接表——最简单易懂的写法——向非我非非我大佬低头
  11. 安徽师大附中%你赛day3T1 怜香惜玉 解题报告
  12. 漏洞复现之CVE-2018-1273 Spring Data Commons 远程命令执行
  13. C++数据结构算法(一)
  14. Python之禅及其翻译
  15. CD-ROM是指啥?
  16. html2canvas没有样式,html2canvas没有抓住svg(html2canvas not grabbing svg)
  17. 【转载】二阶滤波器级联(C浮点实现)
  18. 蓝牙模块HC05遇到的一些常见的问题
  19. Windows消息概述
  20. css3中的景深,3d,和动画效果

热门文章

  1. 如何用Seaborn描绘柱状图(条形图),箱线图,小提琴图,分类散点图,分面网格分类图,散点图(3)
  2. VTK:参数化超环形用法实战
  3. VTK:冰激凌用法实战
  4. VTK:vtkConnectivityFilter用法实战
  5. OpenCASCADE:Foundation Classes之插件管理
  6. boost::units模块实现使用自动前缀的简要示例
  7. boost::math::pow相关用法的测试程序
  8. boost::log::filter用法的测试程序
  9. boost::function_types::is_member_function_pointer的用法测试程序
  10. GDCM:DICOM文件转储飞利浦ECHO的测试程序