主类:Test.java

package gui_stu;

public class Test {

	public static void main(String[] args) {
		//调用登录界面
		Login log = new Login();
		log.setBounds(200,200,600,400);
		log.setTitle("学生管理系统");
	}

}

登录界面类:Login.java

package gui_stu;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.Spring;
import javax.swing.SpringLayout;
import javax.swing.border.EmptyBorder;
import javax.swing.SwingConstants;
import java.awt.FlowLayout;
import java.awt.Font;

//登录界面
public class Login extends JFrame implements ActionListener{


	private static final long serialVersionUID = 1L;
	
	private Login log;
	public Login(Login login) {
		// TODO 自动生成的构造函数存根
		this.log=login;
	}
	
	//定义控件
	JPanel jp1;
	JLabel id,pw,title;
	JButton login,restart;
	JTextField id_t;
	JPasswordField pw_t;
	SpringLayout springLayout = new SpringLayout();
	
	public Login() {
		init();
		this.setVisible(true);
		//窗口大小不可变
		setResizable(false);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
 
	private void init() {
		id = new JLabel("账号:");
		pw = new JLabel("密码:");
		title = new JLabel("学生信息管理系统");
		jp1 = new JPanel(springLayout);
		id_t = new JTextField(15);
		pw_t = new JPasswordField(15);
		login = new JButton("登录");
		restart = new JButton("重置");
		//监听jb1按钮
		login.addActionListener(this);
		restart.addActionListener(this);
		
		//获取内容面板
		Container contentPane = getContentPane();
		id_t.setPreferredSize(new Dimension(200,30));
		pw_t.setPreferredSize(new Dimension(200,30));
		//jpanel.add(title,jpanel.CENTER_ALIGNMENT);
		jp1.add(id);
		id.setPreferredSize(new Dimension(200,30));
		jp1.add(id_t);
		jp1.add(pw);
		pw_t.setPreferredSize(new Dimension(200,30));
		jp1.add(pw_t);
		jp1.add(login);
		jp1.add(restart);
		jp1.add(title);
		
		id.setFont(new Font("微软雅黑",Font.PLAIN,18));
		pw.setFont(new Font("微软雅黑",Font.PLAIN,18));
		title.setFont(new Font("微软雅黑",Font.PLAIN,28));
		
		springLayout.putConstraint(springLayout.WEST, id, -100, springLayout.HORIZONTAL_CENTER, jp1);
		springLayout.putConstraint(springLayout.NORTH, id, -200, springLayout.HORIZONTAL_CENTER, jp1);

		//五个参数,控件的边,控件,距离,相对物品的边,相对物品
		springLayout.putConstraint(springLayout.WEST, id_t, -150, springLayout.EAST, id);
		springLayout.putConstraint(springLayout.NORTH, id_t, 0, springLayout.NORTH, id);
		
		springLayout.putConstraint(springLayout.WEST, pw_t, 0, springLayout.WEST, id_t);
		springLayout.putConstraint(springLayout.NORTH, pw_t, 0, springLayout.NORTH, pw);
		springLayout.putConstraint(springLayout.WEST, pw, -100, springLayout.HORIZONTAL_CENTER, jp1);
		springLayout.putConstraint(springLayout.NORTH, pw, -140, springLayout.HORIZONTAL_CENTER, jp1);
		//放置button,相对于中心
		springLayout.putConstraint(springLayout.EAST, login, 10, springLayout.HORIZONTAL_CENTER, jp1);
		springLayout.putConstraint(springLayout.NORTH, login, 40, springLayout.SOUTH, pw);
		springLayout.putConstraint(springLayout.WEST, restart, 40, springLayout.HORIZONTAL_CENTER, jp1);
		springLayout.putConstraint(springLayout.NORTH, restart, 40, springLayout.SOUTH, pw);
		//放置title
		springLayout.putConstraint(springLayout.WEST, title, -5, springLayout.WEST, id);
		springLayout.putConstraint(springLayout.SOUTH, title, -40, springLayout.NORTH, id);
		//将中间容器放入内容面板
		contentPane.add(jp1,BorderLayout.CENTER);

	}
 
	//事件监听
	@Override
	public void actionPerformed(ActionEvent e) {
		String ad = "admin";
		String psw = "166479";
		//登录
		if (e.getSource() == login) {
			String id_s = id_t.getText();
			String pw_s = pw_t.getText();
			
			if (id_s.equals(ad)) {
				if(pw_s.equals(psw)) {
					WindowOfStudent win = new WindowOfStudent();
					win.setBounds(200,200,600,400);
					win.setTitle("学生管理系统");
					this.dispose();
				}else {
					JOptionPane.showMessageDialog(login, "密码错误!!!");
				}
			} else {
				JOptionPane.showMessageDialog(login, "用户名错误!!!");
			}
		} 
		//重置
		if (e.getSource() == restart) {
			id_t.setText("");
			pw_t.setText("");
		} 
		
	}
}

学生信息模板类:Info.java

package gui_stu;

//学生属性
public class Info {
	private String id;
	private String name;
	private String tel;
	private String score;
	private String qq;
	
	
	public Info() {
		
	}
	
	
	public String getQq() {
		return qq;
	}


	public void setQq(String qq) {
		this.qq = qq;
	}


	public void setId(String id) {
		this.id = id;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public void setTel(String tel) {
		this.tel = tel;
	}
	
	public void setScore(String score) {
		this.score = score;
	}

	public String getId() {
		return id;
	}

	public String getName() {
		return name;
	}

	public String getTel() {
		return tel;
	}

	public String getScore() {
		return score;
	}
	
	
}

学生列表及部分操作类:ScoreList.java

package gui_stu;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.*;
import java.io.IOException;

//本程序学生信息数组因为没有填满,所以不能使用 数组名.length 获取数组长度
//只好定义一个length变量来记录数组元素数量(在插入元素时加一)
public class ScoreList {
	private int maxSize = 100;//最大存储容量
	int length = 0;
	Info[] scoreList = new Info[maxSize]; // 用信息类创建数组
	Scanner sc = new Scanner(System.in);
	Random rand = new Random();
	public ScoreList() {
		
	}
	
	//测试demo,每次测试不需要重新输入数据
	public void demo() {
		for(int i=0;i<9;i++) {
			scoreList[i] = new Info();
			scoreList[i].setId((String)("00"+(i+1)));
			scoreList[i].setName((String)((char)(i+65)+""));//先加上65转换为ASCII的大写英文字母((char)(i+65)) ,然后加上""转换为字符串
			scoreList[i].setTel((String)(rand.nextInt(900000)+100000+""));
			scoreList[i].setScore(rand.nextInt(100) + "");
			scoreList[i].setQq((String)(rand.nextInt(900000000)+100000000+""));
			length++;
		}
	}

	//读取数据
	public void loadData() throws IOException {
		File file = new File("student_info_gui.txt");//D:/Student_java_data/student_info.txt
		//File file = new File("D:/java_data/student_info.txt");
		if(!file.exists()) {
			try {
				file.createNewFile();
				System.out.println("初始化成功");
			}catch (Exception e) {
				e.printStackTrace();
				System.out.println("初始化失败");
			}
		}
		try {
			BufferedReader br = new BufferedReader(new FileReader(file));
			String line;
			while((line = br.readLine()) != null) {
				String[] str = line.split("\t\t");
				Info stu = new Info();
				stu.setId(str[0]);
				stu.setName(str[1]);
				stu.setTel(str[2]);
				stu.setScore(str[3]);
				stu.setQq(str[4]);
				scoreList[length++] = stu;
				
			}
			br.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	//写入数据
	public void writeData() throws IOException {
		File file = new File("student_info_gui.txt");
		//File file = new File("D:/java_data/student_info.txt");
		if(!file.exists()) {
			try {
				file.createNewFile();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		try {
			BufferedWriter bw = new BufferedWriter(new FileWriter(file));
			for(int i = 0; i < length; i++) {
				Info stu = scoreList[i];
				bw.write(stu.getId());
				bw.write("\t\t");
				bw.write(stu.getName());
				bw.write("\t\t");
				bw.write(stu.getTel());
				bw.write("\t\t");
				bw.write(stu.getScore());
				bw.write("\t\t");
				bw.write(stu.getQq());
				bw.newLine();
				
			}
			bw.flush();
			bw.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
}

增删改查操作类:no_sql_data.java

package gui_stu;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

public class no_sql_data extends JFrame implements ActionListener{
	public no_sql_data() {
	}
	boolean f = false;
	private static final long serialVersionUID = 1L;
	JLabel jlId,jlName,jlTel,jlScore,jlQQ,jlHelp;
	JTextField jtfId,jtfName,jtfTel,jtfScore,jtfQQ;
	JPanel jp1,jp2,jp3;
	JButton submit,cancel_1,delete,cancel_2,change,cancel_3;
	ScoreList stu = new ScoreList();
	Info data = new Info();
	
	//删除学生
	public void delete() {
		try {
			stu.loadData();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		jlId = new JLabel("请输入要删除学生的学号:");
		jtfId = new JTextField(10);
		
		delete = new JButton("删除");
		//事件监听
		delete.addActionListener(this);
		cancel_2 = new JButton("取消");
		cancel_2.addActionListener(this);
		
		jp1 = new JPanel();
		jp2 = new JPanel();
		jp3 = new JPanel();
		
		//设置布局
		jp1.setLayout(new GridLayout(6,2));
		jp2.setLayout(new GridLayout(6,2));
		
		jp3.add(delete);
		jp3.add(cancel_2);
		
		jp1.add(jlId);
		
		jp1.add(jtfId);
	
		getContentPane().add(jp1,BorderLayout.CENTER);
		getContentPane().add(jp2,BorderLayout.EAST);
		getContentPane().add(jp3,BorderLayout.SOUTH);
		
		setBounds(500,400,300,200);
		//窗口大小不可变
		setResizable(false);
		setVisible(true);
	}
	
	//添加学生
	public void add() {
		try {
			stu.loadData();
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
		
		jlId = new JLabel("学号");
		jlName = new JLabel("姓名");
		jlTel = new JLabel("电话");
		jlScore = new JLabel("成绩");
		jlQQ = new JLabel("QQ");
		
		jtfId = new JTextField(10);
		jtfName = new JTextField(10);
		jtfTel = new JTextField(10);
		jtfScore = new JTextField(10);
		jtfQQ = new JTextField(10);
		
		submit = new JButton("添加");
		//事件监听
		submit.addActionListener(this);
		cancel_1 = new JButton("取消");
		cancel_1.addActionListener(this);
		
		jp1 = new JPanel();
		jp2 = new JPanel();
		jp3 = new JPanel();
		
		//设置布局
		jp1.setLayout(new GridLayout(6,2));
		jp2.setLayout(new GridLayout(6,2));
		
		jp3.add(submit);
		jp3.add(cancel_1);
		
		jp1.add(jlId);
		jp1.add(jlName);
		jp1.add(jlTel);
		jp1.add(jlScore);
		jp1.add(jlQQ);
		
		jp2.add(jtfId);
		jp2.add(jtfName);
		jp2.add(jtfTel);
		jp2.add(jtfScore);
		jp2.add(jtfQQ);
		
		getContentPane().add(jp1,BorderLayout.WEST);
		getContentPane().add(jp2,BorderLayout.CENTER);
		getContentPane().add(jp3,BorderLayout.SOUTH);
		
		setBounds(500,400,300,200);
		//窗口大小不可变
		setResizable(false);
		setVisible(true);
	}
	
	//修改学生
	public void change() {
		try {
			stu.loadData();
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
		
		jlHelp = new JLabel("(学号不可更改,不更改的属性留空即可)");
		jlId = new JLabel("需要修改的学生的学号");
		jlName = new JLabel("姓名");
		jlTel = new JLabel("电话");
		jlScore = new JLabel("成绩");
		jlQQ = new JLabel("QQ");
		
		jtfId = new JTextField(10);
		jtfName = new JTextField(10);
		jtfTel = new JTextField(10);
		jtfScore = new JTextField(10);
		jtfQQ = new JTextField(10);
		
		change = new JButton("修改");
		//事件监听
		change.addActionListener(this);
		cancel_3 = new JButton("取消");
		cancel_3.addActionListener(this);
		
		jp1 = new JPanel();
		jp2 = new JPanel();
		jp3 = new JPanel();
		
		//设置布局
		jp1.setLayout(new GridLayout(6,2));
		jp2.setLayout(new GridLayout(6,2));
		
		jp3.add(change);
		jp3.add(cancel_3);
		
		
		jp1.add(jlId);
		jp1.add(jlName);
		jp1.add(jlTel);
		jp1.add(jlScore);
		jp1.add(jlQQ);
		jp1.add(jlHelp);
		
		jp2.add(jtfId);
		jp2.add(jtfName);
		jp2.add(jtfTel);
		jp2.add(jtfScore);
		jp2.add(jtfQQ);
		
		getContentPane().add(jp1,BorderLayout.WEST);
		getContentPane().add(jp2,BorderLayout.CENTER);
		getContentPane().add(jp3,BorderLayout.SOUTH);
		
		setBounds(500,400,300,200);
		//窗口大小不可变
		setResizable(false);
		setVisible(true);
	}
	
	//事件监听方法
	@Override
	public void actionPerformed(ActionEvent e) {
		//确认添加
		if(e.getSource() == submit) {
			boolean flag = true;
			for(int i = 0; i < stu.length; i++) {
				//学号不可以重复
				if(stu.scoreList[i].getId().equals(jtfId.getText()))
				{
					flag = false;
					break;
				}
				
			}
			//如果学号没有重复且分数区间无误且学号不为空
			if(!jtfId.getText().equals("") && flag == true && Integer.parseInt(jtfScore.getText()) >= 0 && Integer.parseInt(jtfScore.getText()) <= 100) {
				data.setId(jtfId.getText());
				data.setName(jtfName.getText());
				data.setTel(jtfTel.getText());
				data.setScore(jtfScore.getText());
				data.setQq(jtfQQ.getText());
				stu.scoreList[stu.length++] = data;
				try {
					stu.writeData();//添加完成重新导入数据
					JOptionPane.showMessageDialog(this, "添加成功!!!");
					f = true;
				} catch (IOException e1) {
					// TODO 自动生成的 catch 块
					e1.printStackTrace();
				}
				this.dispose();
			}
			else {
				JOptionPane.showMessageDialog(this, "学号不可以重复或者空或者成绩区间[0,100]!!!");
			}
		}
		
		//取消添加
		else if(e.getSource() == cancel_1){
			this.dispose();
		}
		
		//确认删除
		else if(e.getSource() == delete) {
			int flag = -1;
			String id = jtfId.getText();
			if(stu.length>0) {
				for(int i = 0;i<stu.length;i++) {
					if(stu.scoreList[i].getId().equals(id)) {
						flag = i;
						break;//寻找到直接退出,只删除第一个
					}
				}
				if(flag != -1) {
					for(int k = flag; k < stu.length - 1; k++) {
						stu.scoreList[k] = stu.scoreList[k + 1];
					}
					stu.length--;
					try {
						stu.writeData();//删除完成重新导入数据
						JOptionPane.showMessageDialog(this, "删除成功!!!");
					} catch (IOException e1) {
						// TODO 自动生成的 catch 块
						e1.printStackTrace();
					}
				}
				else {
					JOptionPane.showMessageDialog(this, "没有此学生!!!");
				}
			}
			else {
				JOptionPane.showMessageDialog(this, "学生信息为空!!!");
				
			}
			this.dispose();
		}
		
		//取消删除
		else if(e.getSource() == cancel_2) {
			this.dispose();
		}
		
		//确认修改
		else if(e.getSource() == change) {
			int flag = -1;
			String id = jtfId.getText();
			if(stu.length>0) {
				for(int i = 0;i<stu.length;i++) {
					if(stu.scoreList[i].getId().equals(id)) {
						flag = i;
						break;//寻找到直接退出,只删除第一个
					}
				}
			}
			else {
				JOptionPane.showMessageDialog(this, "列表为空,无学生信息!!!");
				this.dispose();
			}
			if(flag != -1) {
				//空下的属性默认不修改
				if(!jtfName.getText().equals("")) {//不为空时才修改
					stu.scoreList[flag].setName(jtfName.getText());
				}
				if(!jtfTel.getText().equals("")) {
					stu.scoreList[flag].setTel(jtfTel.getText());
				}
				
				//分数区间有要求
				if(jtfScore.getText().equals("")) {
					stu.scoreList[flag].setScore(stu.scoreList[flag].getScore());
				}
				else if((Integer.parseInt(jtfScore.getText()) >= 0 && Integer.parseInt(jtfScore.getText()) <= 100)) {
					stu.scoreList[flag].setScore(jtfScore.getText());
					
				}
				else if (Integer.parseInt(jtfScore.getText()) < 0 || Integer.parseInt(jtfScore.getText()) >100){
					JOptionPane.showMessageDialog(this, "成绩区间[0,100]!!!");
				}
				if(!jtfQQ.getText().equals("")) {
					stu.scoreList[flag].setQq(jtfQQ.getText());
				}
				
				try {
					stu.writeData();
					JOptionPane.showMessageDialog(this, "修改成功!!!");
				} catch (Exception e2) {
					e2.printStackTrace();
				}
				
			}
			else {
				JOptionPane.showMessageDialog(this, "无学生信息!!!");
			}
			this.dispose();
		}
		//取消修改
		else if(e.getSource() == cancel_3) {
			this.dispose();
		}
	}
	
}

数据表格模板类:StuModel.java

package gui_stu;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import java.sql.DriverManager;
import java.sql.ResultSet;
import java.util.Random;
import java.util.Scanner;
import java.util.Vector;
 
import javax.swing.table.AbstractTableModel;

public class StuModel extends AbstractTableModel{
	//不知道啥意思
	private static final long serialVersionUID = 1L;
	
	Vector rowData;	//存放数据行
	Vector columnNames;	//存放列名
	
	//创建学生信息数组
	ScoreList stulist = new ScoreList();
	
	//常规导入数据初始化
	public StuModel() {
		try {
			stulist.loadData();
			init();
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
		
	}
	
	//升序,降序,统计方法初始化
	public StuModel(int k) {
		try {
			stulist.loadData();
		} catch (IOException e) {
			e.printStackTrace();
		}
		if(k == 1) {//降序
			down();
		}
		if(k == 2) {//升序
			up();
		}
		if(k == 3) {//统计
			score();
		}
	}
	
	//查询方法初始化
	public StuModel(String str) {
		rowData = new Vector();
		//读取数据
		try {
			stulist.loadData();
		} catch (IOException e) {
			e.printStackTrace();
		}
		//寻找该学号
		for(int i = 0; i < stulist.length; i++) {
			if(stulist.scoreList[i].getId().equals(str)) {
				columnNames = new Vector();
				//设置列名
				columnNames.add("学号");
				columnNames.add("姓名");
				columnNames.add("电话");
				columnNames.add("成绩");
				columnNames.add("QQ");
				
				Vector hang = new Vector<>();
				hang.add(stulist.scoreList[i].getId());
				hang.add(stulist.scoreList[i].getName());
				hang.add(stulist.scoreList[i].getTel());
				hang.add(stulist.scoreList[i].getScore());
				hang.add(stulist.scoreList[i].getQq());
				rowData.add(hang);
				break;
			}
		}
	}
	
	//平均分数等
	public void score() {
		int max=0,min=0;//最大分数,最小分数序号
		double avg=0.0,count_ = 0;//平均分和及格率		
		if(stulist.length>0) {
			for(int i=0;i<stulist.length;i++) {
				//统计及格人数
				if(Integer.parseInt(stulist.scoreList[i].getScore()) >= 60) {
					count_++;
				}
				//寻找最大分数序号
				if(Integer.parseInt(stulist.scoreList[i].getScore()) > Integer.parseInt(stulist.scoreList[max].getScore())) {
					max = i;
				}
				//寻找最小分数序号
				if(Integer.parseInt(stulist.scoreList[i].getScore()) < Integer.parseInt(stulist.scoreList[min].getScore())) {
					min = i;
				}
				//统计平均分
				avg += Integer.parseInt(stulist.scoreList[i].getScore());
			}
			
			columnNames = new Vector();
			//设置列名
			columnNames.add("最高分");
			columnNames.add("最低分");
			columnNames.add("平均分");
			columnNames.add("及格率");
			rowData = new Vector();
			Vector hang = new Vector<>();
			hang.add(stulist.scoreList[max].getScore());
			hang.add(stulist.scoreList[min].getScore());
			hang.add(String.format("%.2f", (avg / stulist.length)));
			hang.add(String.format("%.2f", (count_ / (stulist.length + 1))*100) + "%");
			rowData.add(hang);
		}
	}
	
	//导入测试数据 重载构造方法
	public StuModel(boolean flag) {//flag单纯是为了区分构造函数
		if(flag) {
			try {
				stulist.demo();//导入随机数据
				stulist.writeData();//写入文件
				stulist.loadData();//读取数据
				init();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
	}
	
	private void init() {
		columnNames = new Vector();
		//设置列名
		columnNames.add("序号");
		columnNames.add("学号");
		columnNames.add("姓名");
		columnNames.add("电话");
		columnNames.add("成绩");
		columnNames.add("QQ");
		
		//获取数据行
		rowData = new Vector();
		int i=0;
			
		int num = 1;//因为未来可能会做排序,所以单独设置一个计数器
		while(i<stulist.length) {
			Vector hang = new Vector<>();
			hang.add(num);
			hang.add(stulist.scoreList[i].getId());
			hang.add(stulist.scoreList[i].getName());
			hang.add(stulist.scoreList[i].getTel());
			hang.add(stulist.scoreList[i].getScore());
			hang.add(stulist.scoreList[i].getQq());
			rowData.add(hang);
			i++;
			num++;
		}
	}
	
	//升序
		public void up() {
			if(stulist.length > 0) {
				Info demo = new Info();
				for(int i = 1;i<stulist.length; i++) {
					for(int j=0;j<stulist.length-1;j++) {
						if(Integer.parseInt(stulist.scoreList[j].getScore()) > Integer.parseInt(stulist.scoreList[j + 1].getScore())) {
							demo = stulist.scoreList[j];
							stulist.scoreList[j] = stulist.scoreList[j+1];
							stulist.scoreList[j+1] = demo;
						}
					}
				}
				init();
			}
		}
	
	//降序
	public void down() {
		if(stulist.length > 0) {
			Info demo = new Info();
			for(int i = 1;i<stulist.length; i++) {
				for(int j=0;j<stulist.length-1;j++) {
					if(Integer.parseInt(stulist.scoreList[j].getScore()) < Integer.parseInt(stulist.scoreList[j + 1].getScore())) {
						demo = stulist.scoreList[j];
						stulist.scoreList[j] = stulist.scoreList[j+1];
						stulist.scoreList[j+1] = demo;
					}
				}
			}
			init();
			
		}
	}
	//下面的看不懂
	@Override
	public int getRowCount() {
		return rowData.size();
	}
 
	@Override
	public int getColumnCount() {
		return columnNames.size();
	}
 
	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		return ((Vector)(rowData.get(rowIndex))).get(columnIndex);
	}
	
	@Override
	public String getColumnName(int columnIndex) {
		return (String)columnNames.get(columnIndex);
	}
	
}

主程序界面类:WindowOfStudent.java

package gui_stu;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
 
public class WindowOfStudent extends JFrame implements ActionListener{ 
	
	private static final long serialVersionUID = 1L;
	//定义控件
	JPanel jp1,jp2;
	JLabel jl1,jl2;
	JButton jb1,jb2,jb3,jb4,jbflu,demo,up,down,sum;
	JTable jt;	//表格
	JScrollPane jsp;
	JTextField jtf;
	
	StuModel sm;
	//StuListen listener;
	
	public WindowOfStudent() {
		init();
		this.setVisible(true);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
 
	private void init() {
		
		sum = new JButton("统计");
		sum.addActionListener(this);
		up = new JButton("升序");
		up.addActionListener(this);
		down = new JButton("降序");
		down.addActionListener(this);
		demo = new JButton("DEMO");
		demo.addActionListener(this);
		jbflu = new JButton("刷新");
		jbflu.addActionListener(this);
		jp1 = new JPanel();
		jtf = new JTextField(15);
		jb1 = new JButton("查询");
		//监听jb1按钮
		jb1.addActionListener(this);
		
		jl1 = new JLabel("请输入学号:");	//按学号查询
		
		
		jp1.add(jl1);
		jp1.add(jtf);
		jp1.add(jb1);
		jp1.add(demo);
		jp1.add(jbflu);
		
		jb2 = new JButton("添加");
		jb2.addActionListener(this);
		jb3 = new JButton("修改");
		jb3.addActionListener(this);
		jb4 = new JButton("删除");
		jb4.addActionListener(this);
		
		jp2 = new JPanel();
		jp2.add(jb2);
		jp2.add(jb3);
		jp2.add(jb4);
		jp2.add(up);
		jp2.add(down);
		jp2.add(sum);
		
		
		//创建模型
		sm = new StuModel();
		jt = new JTable(sm);
		jsp = new JScrollPane(jt);
		
		this.add(jsp);
		this.add(jp1,"North");
		this.add(jp2,"South");
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		//查询
		if (e.getSource() == jb1) {
			//数据刷新
			sm = new StuModel(jtf.getText());
			jt.setModel(sm);
			
		} 
		
		//添加
		else if (e.getSource() == jb2) {
			//调用添加函数
			no_sql_data add = new no_sql_data();
			add.add();
			sm = new StuModel();
			jt.setModel(sm);
		}
		
		//修改
		else if (e.getSource() == jb3) {
			//调用修改函数
			no_sql_data add = new no_sql_data();
			add.change();
			sm = new StuModel();
			jt.setModel(sm);
			
		}
		//删除
		else if (e.getSource() == jb4) {
			//调用删除函数
			no_sql_data add = new no_sql_data();
			add.delete();
			sm = new StuModel();
			jt.setModel(sm);
		}
		
		else if(e.getSource() == jbflu) {
			//刷新
			sm = new StuModel();
			jt.setModel(sm);
		}
		
		else if(e.getSource() == demo) {
			//导入测试数据
			sm = new StuModel(true);
			jt.setModel(sm);
		}
		else if(e.getSource() == up) {
			//升序
			sm = new StuModel(2);
			jt.setModel(sm);
		}
		else if(e.getSource() == down) {
			//降序
			sm = new StuModel(1);
			jt.setModel(sm);
		}
		else if(e.getSource() == sum) {
			//统计
			sm = new StuModel(3);
			jt.setModel(sm);
		}
	}
}

以上七个java文件就是全部内容,部分包没有使用是因为复制过来的东西不好细改,现在大概能看懂借鉴的图形界面部分的大佬的文章的80%,删去了他的数据库部分,电脑莫名其妙连不上。

以下是源程序文件(eclipse):

链接:https://pan.baidu.com/s/1iOwJFDvZBjSCKgDPRlcAZg 
提取码:dian 
复制这段内容后打开百度网盘手机App,操作更方便哦

以下是已经打好的jar包(可执行文件):

链接:https://pan.baidu.com/s/1WgzGxns57poIwlEjdfl12w 
提取码:wtav 
复制这段内容后打开百度网盘手机App,操作更方便哦

请大家多多支持欧!!!