一、实验内容

编写一个录入学生信息的图形界面来录入学生信息。学生信息包括学号,姓名,性别,年龄、成绩等。界面中有保存、浏览、结束三个按钮。保存按钮是将录入的学生对象的信息保存到一个文件student.dat中,结束按钮是程序运行终止、浏览按钮点击后将启动另一个GUI界面,界面中使用一个表格控件显示从文件中读入的所有学生信息。

二、实验代码

1、学生类Student

package core;

import java.io.Serializable;

/**
 * 学生类共用5个属性、没有属性都有get()方法、只有性别sex有set()方法特殊用途
 */
public class Student implements Serializable {//对象序列化

    private String sno;
    private String sex;
    private String name;
    private int age;
    private float score;

    public Student(String sno, String name, String sex, int age, float score) {
        this.sno = sno;
        this.sex = sex;
        this.name = name;
        this.age = age;
        this.score = score;
    }

    public String getSno() {
        return sno;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public float getScore() {
        return score;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Student{" + "sno=" + sno + ", sex=" + sex + ", name=" + name + ", age=" + age + ", score=" + score + '}';
    }
}

2、文件帮助类:FileHelper 输入和输出到文本中

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package DB;

import core.Student;
import java.util.List;
import java.io.*;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * 输入输出流帮助类:WriteObj写对象方法和ReadAllObj读对象方法
 */
public class FileHelper {

    final String path = "A:\\【1】学校专业课\\大二下\\【2】JAVA\\期末考题类型\\SysStudentIn\\student.data";

    public void WriteObj(Student stu) {//写输出对象函数,参数是学生对象
        FileOutputStream fos = null;//定义一个字节输出流对象
        try {
            fos = new FileOutputStream(path, true);//指定输出流的目的地路径,true代表不会刷新原文件只是从末尾继续写入数据
            ObjectOutputStream oos = new ObjectOutputStream(fos);//因为FileOutputStream功能不强不能直接对一个对象写
            //所以使用ObjectOutputStream类创建一个对象调用其写对象的方法来加强。但是真正写入的功能还是FileOutputStream来完成的
            oos.writeObject(stu);//输出,写入对象数据到文件
        } catch (FileNotFoundException ex) {
            Logger.getLogger(FileHelper.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(FileHelper.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                fos.close();//关闭流
            } catch (IOException ex) {
                Logger.getLogger(FileHelper.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    public List<Student> ReadAllObj() {//返回类型为List,输入读取对象函数
        List<Student> lstStus = new ArrayList<Student>();//List接口对象lstStus,把ArryList类创建的对象赋值给接口对象
        try {
            Student stu = null;//声明一个学生对象,还未创建
            FileInputStream fis = new FileInputStream(path);//创建字节输入流读取对象,并指定目标路径path
            ObjectInputStream ois;//ObjectInputStream增强功能
            while (fis.available() > 0) {//判断文件是否已经读到最后一个
                ois = new ObjectInputStream(fis);//创建增强版读取输入流对象ois,下面使用该对象的增强版函数可读取整个对象
                stu = (Student) ois.readObject();//直接调用readObject函数,一读取读整个对象出来
                lstStus.add(stu);//读取到的对象存放到数组对象lstStus
            }
            fis.close();
        } catch (FileNotFoundException ex) {
            Logger.getLogger(FileHelper.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(FileHelper.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(FileHelper.class.getName()).log(Level.SEVERE, null, ex);
        }
        return lstStus;
    }
}

3、图像界面两个:StudentMgrUI、StudentView

package UI;

import DB.FileHelper;
import DB.MySQLHelper;
import core.Student;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

/**
 * 输入数据的窗体:在点击保存按钮中具体实现功能
 */
public class StudentMgrUI extends javax.swing.JFrame {

    public StudentMgrUI() {
        initComponents();
    }

 //保存按钮点击事件函数
 private void jButSaveActionPerformed(java.awt.event.ActionEvent evt) {                                         
        //如何获取按钮的值??????????——判断并转换为string类型
        Student stu = new Student(jTxtNo.getText(), jTextName.getText(), String.valueOf(jRdoMale.isSelected()),
                Integer.parseInt(jTextAge.getText()), Integer.parseInt(jTextScore.getText()));//获取文本框数据
        //写入文本里面去
        if (stu.getSex() == "true") {//判断上面获取的值,若为true,说明选择了男
            stu.setSex("男");
        } else {
            stu.setSex("女");
        }
        FileHelper fh = new FileHelper();
        fh.WriteObj(stu);//把学生对象写入文本   
        JOptionPane.showMessageDialog(this, "数据保存成功");//弹出提示窗口
    }   

  //查看按钮点击事件函数
 private void jButViewActionPerformed(java.awt.event.ActionEvent evt) {                                         

        StudentView sv = new StudentView();
        sv.setVisible(true);
    }            

    //退出按钮点击事件函数
 private void jBtnCloseActionPerformed(java.awt.event.ActionEvent evt) {                                          

        System.exit(0);//实现系统退出
    }          

   //系统自动生成的控件对象
    private javax.swing.ButtonGroup buttonGroup1;
    private javax.swing.JButton jBtnClose;
    private javax.swing.JButton jButSave;
    private javax.swing.JButton jButView;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JRadioButton jRdoFemale;
    private javax.swing.JRadioButton jRdoMale;
    private javax.swing.JTextField jTextAge;
    private javax.swing.JTextField jTextName;
    private javax.swing.JTextField jTextScore;
    private javax.swing.JTextField jTxtNo;                 
}

package UI;

import DB.FileHelper;
import DB.MySQLHelper;
import core.Student;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.table.DefaultTableModel;

/**
 *查看数据界面窗体:自定义一个表头数组
 * 自定义两个类方法StudentView()、ReadData()
 */
public class StudentView extends javax.swing.JFrame {
    private String title[];//表头数组
    private DefaultTableModel dm;//DefaultTableModel类声明一个对象dm
    public StudentView() {//该方法实现把数据绑定在表控件上jTable1
        initComponents();
        title = new String[]{"学号","姓名","性别","年龄", "成绩"};//表头数组
        dm = new DefaultTableModel(null, title);
        jTable1.setModel(dm);//对象jTable1调用函数把映射关系打印到表格中
        ReadData();//读取数据到窗口studentview中    
    }

       //读取文本内容
    public void ReadData() {
        FileHelper fh = new FileHelper();
        List<Student> lststu = fh.ReadAllObj();//从文本中读取数据复制给LIST类创建的接口lststu
        for (Student stu : lststu) {
            Object[] objs = {stu.getSno(), stu.getName(),stu.getSex() ,stu.getAge(), stu.getScore()};
            //学生对象调用函数获取数据并赋值给数据objs
            dm.addRow(objs);//dm对象添加objs对象的数据学生对象所有数据  
        }
    }

   //此处省略…………了系统函数

    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTable1;       
}

 

三、运行截图

java 学生姓名添加和显示 java建立界面输入学生信息_FileHelper

java 学生姓名添加和显示 java建立界面输入学生信息_输入输出流_02