目录
一、团队成员及任务
组长:宗庆亮 计科(智能)22-1 202203200021
负责模块:静态登录界面实现以及学生信息系统管理界面的创建
组员:郑金洲 计科(智能)22-1 202203200022
负责模块:增加,删除,修改以及查询功能的实现
团队博客:面向对象程序设计(Java)课程设计——学生信息管理系统(GUI+文件)小组汇报_WayneZ16的博客-CSDN博客
二、项目简介
本项目由我们二人共同合作完成,该系统可实现学生信息的增加,删除,修改,查询,筛选的功能。并将学生信息存储在文件txt 中,不会覆盖原数据。该系统没有利用数据库,是使用文件来存储学生数据,有基本的 UI 界面,操作友好,项目运行没有问题。
三、运行结果
1.登录界面
2.管理系统界面
3.信息录入
4.查看全部信息
5.查询信息(输入学号后,点击查询信息)
6. 删除信息(输入存在的学号后,点击删除信息)
7.修改信息(输入学号后,点击修改信息)
四、源代码(详见团队博客)
https://blog.csdn.net/ZJZ0116/article/details/131191851?spm=1001.2014.3001.5501
五、个人部分实现过程
1.系统基本功能:录入、修改、删除等
package Student_Manage;
import java.io.*;
import java.util.ArrayList;
public class function {
//本程序学生数量不多,用数组列表ArrayList, 当学生数据多的时候,考虑用链表
ArrayList<student_information> arry=new ArrayList<student_information>();
public function() //读文件,将文件中的学生信息存放在数组列表
{
this.readFile();
}
//根据学号查找学生信息,找到返回学号,找不到返回-1
public int find(String str)
{
for (int i = 0; i<arry.size(); i++)
if (arry.get(i).getStuID().equals(str))
return i;//等于在数组列表的位置
return -1;
}
//修改学生信息
public void update(student_information stu) {
int flag=find(stu.getStuID()); //查找是否存在
arry.set(flag, stu); //替换 flag 处的学生信息
}
// 读文件,
public boolean readFile() {
String t=null;
try{
FileReader f1 = new FileReader("student.txt");
BufferedReader br=new BufferedReader(f1);
arry.clear(); // 清除原数组列表中的数据
while ((t= br.readLine())!= null)
{
String [] s=t.split("\\s+");
student_information st=new student_information(s[0],s[1],s[2],s[3],s[4],s[5],s[6]);//注意若该文件每行没有七个字符串,则会出错
arry.add(st);
System.out.println("读取文件:");
System.out.println(s[0]);
}
f1.close();
br.close();
return true;
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
return false;
}
}
//添加学生信息
public boolean add(student_information stu)
{
System.out.println();
System.out.println("要添加的学生");
System.out.println(stu.fileString());
System.out.println();
if (find(stu.getStuID())!=-1)
return false;
arry.add(stu);
return true;
}
//写注意每行必须有七个元素,否则读取文件并判断是否存在时会出错时会出错,没有输入的用---代替
public boolean writeFile() {
FileWriter fw=null;
BufferedWriter out=null;
try {
fw = new FileWriter("student.txt");
out = new BufferedWriter(fw);
//姓名学号等中间隔一个空格
for(int i=0;i<arry.size();i++){
String s=arry.get(i).fileString();
System.out.println("数组列表数据:");
System.out.println(arry.get(i).fileString());
out.write(s);
out.newLine();
}
out.close();
fw.close();
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
//删除学生信息,并且文件中的内容也要修改
public boolean delete(String s) //添加学生记信息
{
int pos=find(s);
if (pos==-1)
return false;
arry.remove(pos);
return true;
}
}
2.查询信息,以表格形式呈现
package Student_Manage;
import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;
import java.awt.*;
import java.io.*;
import java.util.ArrayList;
import java.util.Vector;
public class showones {
//读取学生信息,展示在窗口
ArrayList<student_information> arry=new ArrayList<student_information>();
student_information stu=new student_information();
JTable table = null;
DefaultTableModel model = null;
//显示全部学生信息
public showones() {
JFrame jf = new JFrame("显示符合条件的学生信息(点击表头可以按照升序降序排序");
//jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
// 创建内容面板
JPanel panel = new JPanel();
// 表头(列名)
// String[] columnNames ={"序号","学号","姓名","性别","年龄","电话号码","家庭住址","身份证号码" };
Vector columnNames=createColumnNames();
//需要查询的符合条件的,用字符串数组f记录
String [] f = new String [7];
try{
FileReader f1 = new FileReader("查询时暂时存放的文件.txt");
BufferedReader br=new BufferedReader(f1);
//arry.clear();// 清除原数组列表中的数据
String t=null;
while ((t= br.readLine())!= null)
{
f=t.split("\\s+"); //要查询的学生信息
}
f1.close();
br.close();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
//记得清空,否则下次查询没有筛选条件时,查询的是上一次的条件
File file =new File("查询时暂时存放的文件.txt");
try {
if(!file.exists()) {
file.createNewFile();
}
FileWriter fileWriter =new FileWriter(file);
fileWriter.write("");
fileWriter.flush();
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
//判断需要查询的是那些条件
ArrayList List = new ArrayList();
for(int i=0;i<7;i++) {
if(!f[i].equals("--")) //需要满足的条件
List.add(i);
}
//将满足查询条件的学生信息录入系统
for(int i=0;i<List.size();i++)
System.out.println(List.get(i));
try{
FileReader f1 = new FileReader("student.txt");
BufferedReader br=new BufferedReader(f1);
String t=null;
int flag=0;
int t1=0;
arry.clear();// 清除原数组列表中的数据
while ((t= br.readLine())!= null)
{
String [] s=t.split("\\s+");
for(int i=0;i<List.size();i++)
{
t1=(int) List.get(i);
if(f[t1].equals(s[t1])) {
flag=flag+1;
}
}
if(flag==List.size()) {
student_information st=new student_information(s[0],s[1],s[2],s[3],s[4],s[5],s[6]);//注意若该文件每行没有七个字符串,则会出错
arry.add(st);
}
flag=0;
}
f1.close();
br.close();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
Vector data=createTableModelData();
// 创建一个默认的表格模型
model = new DefaultTableModel(data, columnNames);
table = new JTable(model);
table.setPreferredScrollableViewportSize(new Dimension(400, 80));
JScrollPane tablePanel = new JScrollPane(table);
// 设置表格内容颜色
table.setForeground(Color.BLACK); // 字体颜色
table.setFont(new Font(null, Font.PLAIN, 14)); // 字体样式
table.setSelectionForeground(Color.DARK_GRAY); // 选中后字体颜色
table.setSelectionBackground(Color.LIGHT_GRAY); // 选中后字体背景
table.setGridColor(Color.GRAY); // 网格颜色
// 设置表头
table.getTableHeader().setFont(new Font(null, Font.BOLD, 14)); // 设置表头名称字体样式
table.getTableHeader().setForeground(Color.RED); // 设置表头名称字体颜色
table.getTableHeader().setResizingAllowed(false); // 设置不允许手动改变列宽
table.getTableHeader().setReorderingAllowed(false); // 设置不允许拖动重新排序各列
// 设置行高
table.setRowHeight(40);
// 第一列列宽设置为40
table.getColumnModel().getColumn(0).setPreferredWidth(40);
// 设置滚动面板视口大小(超过该大小的行数据,需要拖动滚动条才能看到)
table.setPreferredScrollableViewportSize(new Dimension(900, 320));
//排序器
RowSorter sorter = new TableRowSorter(model);
table.setRowSorter(sorter);
JScrollPane pane = new JScrollPane(table);
// 把 表格 放到 滚动面板 中(表头将自动添加到滚动面板顶部)
JScrollPane scrollPane = new JScrollPane(table);
// 添加 滚动面板 到 内容面板
panel.add(scrollPane);
// JScrollPane pane = new JScrollPane(table);
// 设置 内容面板 到 窗口
jf.setContentPane(panel);
jf.pack();
jf.setSize(900, 600);
jf.add(scrollPane, BorderLayout.CENTER);
//数据居中显示
DefaultTableCellRenderer r = new DefaultTableCellRenderer();
r.setHorizontalAlignment(JLabel.CENTER);
table.setDefaultRenderer(Object.class, r);
jf.setLocationRelativeTo(null);
int t=arry.size();
//int t=table.getRowCount();
if(t<=0){
JOptionPane.showMessageDialog(null, "该系统中没有符合条件的学生!!!");
jf.setVisible(false);
}
else {
jf.setVisible(true);
}
}
private Vector createColumnNames() {
Vector columnNames = new Vector();
//columnNames.add("序号");
columnNames.add("学号");
columnNames.add("姓名");
columnNames.add("性别");
columnNames.add("年龄");
columnNames.add("电话");
columnNames.add("宿舍号");
columnNames.add("家庭住址");
return columnNames;
}
private Vector createTableModelData() {
Vector data = new Vector();
for(int i=0;i<arry.size();i++) {
Vector<String> rowData=new Vector<>();
rowData.add(arry.get(i).getStuID());
rowData.add(arry.get(i).getName());
rowData.add(arry.get(i).getSex());
rowData.add(arry.get(i).getAge());
rowData.add(arry.get(i).getPhoneNumber());
rowData.add(arry.get(i).getRoomNumber());
rowData.add(arry.get(i).getHome_place());
data.add(rowData);
}
return data;
}
3.实现表格排序功能
package Student_Manage;
import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;
import java.awt.*;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Vector;
public class show_stuall {
JTable table = null;
DefaultTableModel model = null;
//显示全部学生信息
public show_stuall() {
JFrame jf = new JFrame("显示全部学生信息(点击表头可以按照升序降序排序)");
// 创建内容面板
JPanel panel = new JPanel();
// 表头(列名)
Vector columnNames=createColumnNames();
Vector data=createTableModelData();
// 创建一个默认的表格模型
model = new DefaultTableModel(data, columnNames);
table = new JTable(model);
table.setPreferredScrollableViewportSize(new Dimension(400, 80));
JScrollPane tablePanel = new JScrollPane(table);
// 设置表格内容颜色
table.setForeground(Color.BLACK); // 字体颜色
table.setFont(new Font(null, Font.PLAIN, 14)); // 字体样式
table.setSelectionForeground(Color.DARK_GRAY); // 选中后字体颜色
table.setSelectionBackground(Color.LIGHT_GRAY); // 选中后字体背景
table.setGridColor(Color.GRAY); // 网格颜色
// 设置表头
table.getTableHeader().setFont(new Font(null, Font.BOLD, 14)); // 设置表头名称字体样式
table.getTableHeader().setForeground(Color.RED); // 设置表头名称字体颜色
table.getTableHeader().setResizingAllowed(false); // 设置不允许手动改变列宽
table.getTableHeader().setReorderingAllowed(false); // 设置不允许拖动重新排序各列
// 设置行高
table.setRowHeight(40);
// 第一列列宽设置为40
table.getColumnModel().getColumn(0).setPreferredWidth(40);
// 设置滚动面板视口大小(超过该大小的行数据,需要拖动滚动条才能看到)
table.setPreferredScrollableViewportSize(new Dimension(900, 320));
//排序器
RowSorter sorter = new TableRowSorter(model);
table.setRowSorter(sorter);
JScrollPane pane = new JScrollPane(table);
// 把 表格 放到 滚动面板 中(表头将自动添加到滚动面板顶部)
JScrollPane scrollPane = new JScrollPane(table);
// 添加 滚动面板 到 内容面板
panel.add(scrollPane);
// JScrollPane pane = new JScrollPane(table);
// 设置 内容面板 到 窗口
jf.setContentPane(panel);
jf.pack();
jf.setSize(900, 600);
jf.add(scrollPane, BorderLayout.CENTER);
//数据居中显示
DefaultTableCellRenderer r = new DefaultTableCellRenderer();
r.setHorizontalAlignment(JLabel.CENTER);
table.setDefaultRenderer(Object.class, r);
jf.setLocationRelativeTo(null);
int t=table.getRowCount();
if(t<=0){
JOptionPane.showMessageDialog(null, "该系统中还没有录入学生信息!!!");
jf.setVisible(false);
}
else {
jf.setVisible(true);
}
}
private Vector createColumnNames() {
Vector columnNames = new Vector();
//columnNames.add("序号");
columnNames.add("学号");
columnNames.add("姓名");
columnNames.add("性别");
columnNames.add("年龄");
columnNames.add("电话");
columnNames.add("宿舍号");
columnNames.add("家庭住址");
return columnNames;
}
private Vector createTableModelData() {
Vector data = new Vector();
String t=null;
try{
FileReader f1 = new FileReader("student.txt");
BufferedReader br=new BufferedReader(f1);
//arry.clear();// 清除原数组列表中的数据
int i=0;
while ((t= br.readLine())!= null)
{
String [] s=t.split("\\s+"); //通过空格分割字符串数组
Vector rowData = new Vector();
//rowData.add("i");
rowData.add(s[0]);
rowData.add(s[1]);
rowData.add(s[2]);
rowData.add(s[3]);
rowData.add(s[4]);
rowData.add(s[5]);
rowData.add(s[6]);
data.add(rowData);
// System.out.print(s[6]);
i++;
}
f1.close();
br.close();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
return data;
}
}