一、实验内容
编写一个录入学生信息的图形界面来录入学生信息。学生信息包括学号,姓名,性别,年龄、成绩等。界面中有保存、浏览、结束三个按钮。保存按钮是将录入的学生对象的信息保存到一个文件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;
}
三、运行截图