zoukankan      html  css  js  c++  java
  • 简单的学生管理系统

    简单的学生管理系统

    一,主要功能:

      1,添加学生信息;

      2,添加的学生信息显示在线型布局中;

      3,把学生信息保存在xml文件中;

      4,把保存在mxl中的学生信息取出来解析显示在界面;

    二,主要知识点:

      1,layout_weight的使用;

      2,pull解析xml文件,xml序列化;

      3,保存数据到sd卡;

      4,动态添加控件刷新界面;

    三,界面原型如下图:

    四,代码展示:

      1,界面xml文件,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>
    View Code

      2,定义实体类,Student.java

    public class Student {
    
        private String name;
        private String sex;
        private Integer age;
        public Student(String name, String sex, Integer age) {
            super();
            this.name = name;
            this.sex = sex;
            this.age = age;
        }
        public Student() {
            super();
            // TODO Auto-generated constructor stub
        }
        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 + "]";
        }
    }
    View Code

      3,主界面activity,MainActivity.java

    public class MainActivity extends Activity 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";
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
            case R.id.btn_save:
                if(studentList.size() > 0) {
                    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;
            }
        }
        
        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;
        }
        
        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();
            }
        }
    }
    View Code

    通过以上步骤基本实现功能,不过还有需要完善的地方,比如年龄校验等

      

    不下水永远也学不会游泳,量的积累才会有质的飞跃!
  • 相关阅读:
    十六进制计算器
    USB 3.0规范中译本 第7章 链路层
    from表单POST提交nodejs
    07_通过谷歌封装的api操作数据库delete&insert
    06_直接执行sql操作数据库delete&update
    05_直接执行sql操作数据库
    04_数据库升级onUpgrade&ondowngrade
    03_通过OpenHelper获取SqliteDatabase对象
    02_SQliteOpenHelper介绍&oncreate方法介绍
    00_前情回顾&今日展望
  • 原文地址:https://www.cnblogs.com/wk843620202/p/4404534.html
Copyright © 2011-2022 走看看