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. EL&Filter&Listener:EL表达式和JSTL,Servlet规范中的过滤器,Servlet规范中的监听器,观察着设计模式,监听器的使用,综合案例学生管理系统

    EL&Filter&Listener-授课 1 EL表达式和JSTL 1.1 EL表达式 1.1.1 EL表达式介绍 *** EL(Expression Language):表达式语言 ...

  2. Mybatis高级:Mybatis注解开发单表操作,Mybatis注解开发多表操作,构建sql语句,综合案例学生管理系统使用接口注解方式优化

    知识点梳理 课堂讲义 一.Mybatis注解开发单表操作 *** 1.1 MyBatis的常用注解 之前我们在Mapper映射文件中编写的sql语句已经各种配置,其实是比较麻烦的 而这几年来注解开发越 ...

  3. java基础: ArrayList集合应用, ArrayList增删改查详解,综合java基础实现学生管理系统,

    1.ArrayList 集合和数组的区别 : 共同点:都是存储数据的容器 不同点:数组的容量是固定的,集合的容量是可变的 1.1 -ArrayList的构造方法和添加方法 public ArrayLi ...

  4. 【IOS开发笔记02】学生管理系统

    端到端的机会 虽然现在身处大公司,但是因为是内部创业团队,产品.native.前端.服务器端全部坐在一起开发,大家很容易做零距离交流,也因为最近内部有一个前端要转岗过来,于是手里的前端任务好像可以抛一 ...

  5. Qt5——从零开始的学生管理系统

    Qt教程——从零开始的学生管理系统(文件) 一.项目设计 1.需求分析 记录并处理学生成绩信息. 1)添加新的学生数据: 2)根据学号对已有的学生数据进行修改: 3)根据学号删除已存在的学生信息: 4 ...

  6. 学生管理系统(C语言简单实现)

    仅供借鉴.仅供借鉴.仅供借鉴(整理了一下大一C语言每个章节的练习题.没得题目.只有程序了) 文章目录 1 .实训名称 2.实训目的及要求 3. 源码 4.实验小结 1 .实训名称 实训12:文件 2. ...

  7. java版本的学生管理系统

    import java.awt.BorderLayout; import java.awt.Color; import java.awt.Frame; import java.awt.event.Ac ...

  8. Java+Mysql+学生管理系统

    最近正在学java和数据库,想起以前写的学生管理系统,都是从网上下载,敷衍了事.闲来无事,也就自己写了一个,不过功能实现的不是很多. 开发语言:java: 开发环境:Mysql, java: 开发工具 ...

  9. 学生管理系统(SSM简易版)总结

    之前用 Servlet + JSP 实现了一个简易版的学生管理系统,在学习了 SSM 框架之后,我们来对之前写过的项目重构一下! 技术准备 为了完成这个项目,需要掌握如下技术: Java 基础知识 前 ...

随机推荐

  1. vue-cli搭建项目的目录结构及说明

    vue-cli基于webpack搭建项目的目录结构 build文件夹 ├── build              // 项目构建的(webpack)相关代码    │ ├── build.js   ...

  2. 下篇:python的基本数据类型以及对应的常用方法(列表、元组、字典、集合)

    为了日后便于查询,本文所涉及到的所有命令集合如下: python中的基本数据类型有数字.字符串.布尔值.列表.元组.字典.就像每一个职业有自己特定的技能,比如医生能看病,农民能种田,每种数据类型也有属 ...

  3. 纯CSS菜单样式,及其Shadow DOM,Json接口 实现

    先声明,要看懂这篇博客要求你具备少量基础CSS知识, 当然如果你只是要用的话就随便了,不用了解任何知识 完整项目github链接:https://github.com/git-Code-Shelf/M ...

  4. 详解BLE 空中包格式—兼BLE Link layer协议解析

    BLE有几种空中包格式?常见的PDU命令有哪些?PDU和MTU的区别是什么?DLE又是什么?BLE怎么实现重传的?BLE ACK机制原理是什么?希望这篇文章能帮你回答以上问题. 虽然BLE空中包(pa ...

  5. IT男的别样人生,爱折腾,竟然辞职跑丽江去了

    深圳待了4年,在深圳腾讯总部任职,北漂了5年多,任某知名团购公司CTO,有了孩子以后才知道自己想要什么 2015年4月,我和老婆还有6个月的儿子丽江游, 却在旅行的第四天, 买下了位于束河古镇正门的高 ...

  6. Docker与容器

    Docker介绍 1. Docker 主要解决什么问题 Docker 对外宣称的是Build.Ship 和Run,Docker 要解决的核心问题就是快速地干这三件事情.它通过将运行环境和应用程序打包到 ...

  7. Ajax PHP JavaScript MySQL实现简易的无刷新在线聊天室

    思路 消息显示区 发消息 板块 消息显示 消息发送 优化 显示非重复性的数据 优化显示 加上滚动条 每次都显示最新消息 完整代码 前端代码 数据库表结构 服务器端代码 总结与展望 总结 展望 为更好的 ...

  8. boost::asio::spawn 将一统C++网络库

    boost::asio::spawn 将一统C++网络库(金庆的专栏)boost::asio::spawn()创建一个协程,使C++网络编程大大简化,个人认为这使得 asio 成为C++首选网络库.b ...

  9. Python 3 智能发音

    真是十分神奇.. import win32com.client import time s = win32com.client.Dispatch("SAPI.SpVoice") s ...

  10. EBS并发程序监控

    SELECT s.* FROM fnd_concurrent_requests r, v$session v, v$sql s WHERE r.oracle_session_id = v.audsid ...