【无标题】

1.创建数据库

CREATE DATABASE `student_management`;

 a.建管理员表

 
CREATE TABLE `student_management`.`admin`  (
  `admin_id` int NOT NULL COMMENT '管理员ID',
  `admin_account` varchar(255) NOT NULL COMMENT '管理员账号',
  `admin_name` varchar(255) NOT NULL COMMENT '管理员名称',
  `admin_password` varchar(255) NOT NULL COMMENT '管理员密码',
  PRIMARY KEY (`admin_id`)
);

 b.建学生表

CREATE TABLE `student_management`.`student`  (
  `student_id` int NOT NULL COMMENT '学生学号',
  `student_name` varchar(255) NOT NULL COMMENT '学生姓名',
  `student_age` int NOT NULL COMMENT '学生年龄',
  `student_sex` varchar(255) NOT NULL COMMENT '学生性别',
  `student_class` int NOT NULL COMMENT '学生所属班级',
  PRIMARY KEY (`student_id`)
);

c.建课程表

CREATE TABLE `student_management`.`course`  (
  `course_id` int NOT NULL COMMENT '课程ID',
  `course_name` varchar(255) NOT NULL COMMENT '课程名称',
  PRIMARY KEY (`course_id`)
);

d.建成绩表

CREATE TABLE `student_management`.`score`  (
  `score_id` int NOT NULL COMMENT '成绩ID',
  `student_id` int NOT NULL COMMENT '成绩对应的学生ID',
  `course_id` int NOT NULL COMMENT '成绩所对应的课程ID',
  `grade` int NOT NULL COMMENT '成绩分数',
  PRIMARY KEY (`score_id`)
);

e.建班级表

 
CREATE TABLE `student_management`.`class`  (
  `class_id` int NOT NULL COMMENT '班级ID',
  `class_name` varchar(255) NOT NULL COMMENT '班级名称',
  `class_year` varchar(255) NOT NULL COMMENT '班级所属年级',
  PRIMARY KEY (`class_id`)
);

f.建年级表

CREATE TABLE `student_management`.`year`  (
  `year_id` int NOT NULL COMMENT '年级ID',
  `class_year` varchar(255) NOT NULL COMMENT '年级',
  PRIMARY KEY (`year_id`)
);

2.构建所需要的类

a.管理员类

package model;
 
public class Admin {
	private Integer adminId;//管理员ID
	private String adminAccount;//管理员账号
	private String adminName;//管理员姓名
	private String password;//管理员登录密码
	
	
	public Integer getAdminId() {
		return adminId;
	}
	public void setAdminId(Integer adminId) {
		this.adminId = adminId;
	}
	public String getAdminAccount() {
		return adminAccount;
	}
	public void setAdminAccount(String adminAccount) {
		this.adminAccount = adminAccount;
	}
	public String getAdminName() {
		return adminName;
	}
	public void setAdminName(String adminName) {
		this.adminName = adminName;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public Admin(Integer adminId, String adminAccount, String adminName, String password) {
		super();
		this.adminId = adminId;
		this.adminAccount = adminAccount;
		this.adminName = adminName;
		this.password = password;
	}
	public Admin() {
		super();
	}
	
	
 
}

b.学生信息类

package model;
 
public class Student {
	private Integer StudentId;//学生ID
	private String name;//学生姓名
	private Integer age;//学生年龄
	private String sex;//学生性别
	private String _class;//学生班级
	private String year;//学生年级
	public Integer getStudentId() {
		return StudentId;
	}
	public void setStudentId(Integer studentId) {
		StudentId = studentId;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public String get_class() {
		return _class;
	}
	public void set_class(String _class) {
		this._class = _class;
	}
	public String getYear() {
		return year;
	}
	public void setYear(String year) {
		this.year = year;
	}
	public Student(Integer studentId, String name, Integer age, String sex, String _class, String year) {
		super();
		StudentId = studentId;
		this.name = name;
		this.age = age;
		this.sex = sex;
		this._class = _class;
		this.year = year;
	}
	public Student() {
		super();
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((StudentId == null) ? 0 : StudentId.hashCode());
		result = prime * result + ((_class == null) ? 0 : _class.hashCode());
		result = prime * result + ((age == null) ? 0 : age.hashCode());
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		result = prime * result + ((sex == null) ? 0 : sex.hashCode());
		result = prime * result + ((year == null) ? 0 : year.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Student other = (Student) obj;
		if (StudentId == null) {
			if (other.StudentId != null)
				return false;
		} else if (!StudentId.equals(other.StudentId))
			return false;
		if (_class == null) {
			if (other._class != null)
				return false;
		} else if (!_class.equals(other._class))
			return false;
		if (age == null) {
			if (other.age != null)
				return false;
		} else if (!age.equals(other.age))
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		if (sex == null) {
			if (other.sex != null)
				return false;
		} else if (!sex.equals(other.sex))
			return false;
		if (year == null) {
			if (other.year != null)
				return false;
		} else if (!year.equals(other.year))
			return false;
		return true;
	}
	@Override
	public String toString() {
		return "Student [StudentId=" + StudentId + ", name=" + name + ", age=" + age + ", sex=" + sex + ", _class="
				+ _class + ", year=" + year + "]";
	}
	
	
 
}

c.学生成绩类

package model;
 
import java.math.BigDecimal;
 
public class StudentScore {
	private Integer rank;//排名
	private Integer studentId;//学生ID
	private String studentName;//学生姓名
	private String className;//学生班级
	private String yearName;//学生年级
	private Integer chinese;//语文成绩
	private Integer math;//数学成绩
	private Integer english;//英语成绩
	private Integer politics;//思政成绩
	private Integer TP;//总分
	private BigDecimal average;//平均分
	
	public Integer getRank() {
		return rank;
	}
	public void setRank(Integer rank) {
		this.rank = rank;
	}
	public Integer getStudentId() {
		return studentId;
	}
	public void setStudentId(Integer studentId) {
		this.studentId = studentId;
	}
	public String getStudentName() {
		return studentName;
	}
	public void setStudentName(String studentName) {
		this.studentName = studentName;
	}
	public String getClassName() {
		return className;
	}
	public void setClassName(String className) {
		this.className = className;
	}
	public String getYearName() {
		return yearName;
	}
	public void setYearName(String yearName) {
		this.yearName = yearName;
	}
	public Integer getChinese() {
		return chinese;
	}
	public void setChinese(Integer chinese) {
		this.chinese = chinese;
	}
	public Integer getMath() {
		return math;
	}
	public void setMath(Integer math) {
		this.math = math;
	}
	public Integer getEnglish() {
		return english;
	}
	public void setEnglish(Integer english) {
		this.english = english;
	}
	public Integer getPolitics() {
		return politics;
	}
	public void setPolitics(Integer politics) {
		this.politics = politics;
	}
	public Integer getTP() {
		return TP;
	}
	public void setTP(Integer tP) {
		TP = tP;
	}
	public BigDecimal getAverage() {
		return average;
	}
	public void setAverage(BigDecimal average) {
		this.average = average;
	}
	public StudentScore(Integer rank, Integer studentId, String studentName, String className, String yearName,
			Integer chinese, Integer math, Integer english, Integer politics, Integer tP, BigDecimal average) {
		super();
		this.rank = rank;
		this.studentId = studentId;
		this.studentName = studentName;
		this.className = className;
		this.yearName = yearName;
		this.chinese = chinese;
		this.math = math;
		this.english = english;
		this.politics = politics;
		TP = tP;
		this.average = average;
	}
	public StudentScore() {
		super();
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((TP == null) ? 0 : TP.hashCode());
		result = prime * result + ((average == null) ? 0 : average.hashCode());
		result = prime * result + ((chinese == null) ? 0 : chinese.hashCode());
		result = prime * result + ((className == null) ? 0 : className.hashCode());
		result = prime * result + ((english == null) ? 0 : english.hashCode());
		result = prime * result + ((math == null) ? 0 : math.hashCode());
		result = prime * result + ((politics == null) ? 0 : politics.hashCode());
		result = prime * result + ((rank == null) ? 0 : rank.hashCode());
		result = prime * result + ((studentId == null) ? 0 : studentId.hashCode());
		result = prime * result + ((studentName == null) ? 0 : studentName.hashCode());
		result = prime * result + ((yearName == null) ? 0 : yearName.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		StudentScore other = (StudentScore) obj;
		if (TP == null) {
			if (other.TP != null)
				return false;
		} else if (!TP.equals(other.TP))
			return false;
		if (average == null) {
			if (other.average != null)
				return false;
		} else if (!average.equals(other.average))
			return false;
		if (chinese == null) {
			if (other.chinese != null)
				return false;
		} else if (!chinese.equals(other.chinese))
			return false;
		if (className == null) {
			if (other.className != null)
				return false;
		} else if (!className.equals(other.className))
			return false;
		if (english == null) {
			if (other.english != null)
				return false;
		} else if (!english.equals(other.english))
			return false;
		if (math == null) {
			if (other.math != null)
				return false;
		} else if (!math.equals(other.math))
			return false;
		if (politics == null) {
			if (other.politics != null)
				return false;
		} else if (!politics.equals(other.politics))
			return false;
		if (rank == null) {
			if (other.rank != null)
				return false;
		} else if (!rank.equals(other.rank))
			return false;
		if (studentId == null) {
			if (other.studentId != null)
				return false;
		} else if (!studentId.equals(other.studentId))
			return false;
		if (studentName == null) {
			if (other.studentName != null)
				return false;
		} else if (!studentName.equals(other.studentName))
			return false;
		if (yearName == null) {
			if (other.yearName != null)
				return false;
		} else if (!yearName.equals(other.yearName))
			return false;
		return true;
	}
	@Override
	public String toString() {
		return "StudentScore [rank=" + rank + ", studentId=" + studentId + ", studentName=" + studentName
				+ ", className=" + className + ", yearName=" + yearName + ", chinese=" + chinese + ", math=" + math
				+ ", english=" + english + ", politics=" + politics + ", TP=" + TP + ", average=" + average + "]";
	}
	
	
}

3.构建service功能

a.创建SelectService接口

添加项目需要的查询方法声明,实现如下:

package service;
 
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
 
import model.Admin;
import model.Student;
 
public interface SelectService {
 
	//查询管理员信息
	//验证管理员登录信息
	Admin selectAdminByAccount(String account) throws Exception;
	
	//按班级或年级获取学生信息
	ResultSet selectStudentByAny(String classId,String classYear) throws Exception;
	
	//获取所有年级
	List<String> selectAllYear() throws Exception;
	
	//按年级获取班级
	List<String> selectclassByYear(String year) throws Exception;
	
	
	//按年级获取年级ID
	Integer selectYearIdByYearName(String yearName) throws Exception;
	//按班级获取班级ID
	Integer selectClassIdByClassName(String className) throws Exception;
	
	//按学号查询学生信息
	Student selectStudentByStuId(Integer stuId) throws Exception;
	
	//通过班级查询年级
	String selectYearByClassName(String className) throws Exception;
	
	//模糊查询学生信息
	ResultSet selectStudentByKey(String key) throws Exception;
	
	//查询学生成绩并通过条件进行排名
	ResultSet selectStudentRankByKey(String key,String yearName,String className) throws Exception;
	
}

b.实现SelectService接口中的方法

package service;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
 
import config.DatabaseConnection;
import model.Admin;
import model.Student;
 
public class SelectServiceImpl implements SelectService{
	
	public Admin selectAdminByAccount(String account) throws Exception {
		
		String sql = "select * from admin where admin_account = ? ";
		PreparedStatement preStmt = DatabaseConnection.connection().prepareStatement(sql);
		preStmt.setString(1, account);
		ResultSet result = preStmt.executeQuery();	
		
		Admin admin = null;
		while(result.next()) {
            admin = new Admin();
			admin.setAdminId(result.getInt("admin_id"));
			admin.setAdminAccount(result.getString("admin_account"));
			admin.setAdminName(result.getString("admin_name"));
			admin.setPassword(result.getString("admin_password"));
		}
		return admin;
	}
 
	@Override
	public ResultSet selectStudentByAny(String className, String classYear) throws Exception {
		String sql = "SELECT\r\n"
				+ "	student.student_id,\r\n"
				+ "	student.student_name,\r\n"
				+ "	student.student_age,\r\n"
				+ "	student.student_sex,\r\n"
				+ "	class.class_name,\r\n"
				+ "	`year`.class_year\r\n"
				+ "FROM\r\n"
				+ "	`year`\r\n"
				+ "	INNER JOIN class ON `year`.year_id = class.class_year\r\n"
				+ "	INNER JOIN student ON class.class_id = student.student_class \r\n"
				+ "WHERE\r\n"
				+ "	1 = 1 ";
		
		if(className != null && !className.equals("")) {
			String str = "and class.class_name = " + "'" + className + "'\r\n";
			sql += str;
		}
		if(classYear != null && !classYear.equals("")) {
			String str = "and `year`.class_year = " +  "'" + classYear + "'\r\n";
			sql += str;
		}
		
		Statement stmt = DatabaseConnection.connection().createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
//		ResultSet result = stmt.executeQuery(sql);
//		
//		List<Student> stuList = new ArrayList<Student>();
//		while(result.next()) {
//			Student stu = new Student();
//			stu.setStudentId(result.getInt("student_id"));
//			stu.setName(result.getString("student_name"));
//			stu.setSex(result.getString("student_sex"));
//			stu.set_class(result.getString("class_name"));
//			stu.setYear(result.getString("class_year"));
//			stuList.add(stu);
//		}
		return stmt.executeQuery(sql);
	}
 
	@Override
	public List<String> selectAllYear() throws Exception {
		String sql = "select class_year from `year`";
		Statement stmt = DatabaseConnection.connection().createStatement();
		ResultSet result = stmt.executeQuery(sql);
		List<String> yearList = new ArrayList<String>();
		while(result.next()) {
			yearList.add(result.getString("class_year"));
		}
		return yearList;
	}
 
	@Override
	public List<String> selectclassByYear(String year) throws Exception {
		String sql ="SELECT\r\n"
				+ "	class_name \r\n"
				+ "FROM\r\n"
				+ "	class\r\n"
				+ "	INNER JOIN `year` ON `year`.year_id = class.class_year \r\n"
				+ "WHERE\r\n"
				+ "	1 = 1 ";
		
		if(year != null && !year.equals("")) {
			String str = "AND `year`.class_year = " + "'" + year + "'";
			sql += str;
		}
		Statement stmt = DatabaseConnection.connection().createStatement();
		ResultSet result = stmt.executeQuery(sql);
		
		List<String> classList = new ArrayList<String>();
		while(result.next()) {
			classList.add(result.getString("class_name"));
		}
		return classList;
	}
 
	@Override
	public Integer selectYearIdByYearName(String yearName) throws Exception {
		String sql = "SELECT year_id FROM `year` WHERE `year`.year_name = " + "'" + yearName + "'";
		
		Statement stmt = DatabaseConnection.connection().createStatement();
		ResultSet result = stmt.executeQuery(sql);
		Integer yearId = null; 
		while(result.next()) {
			yearId = result.getInt("year_id");
		}
		return yearId;
	}
 
	@Override
	public Integer selectClassIdByClassName(String className) throws Exception {
		String sql = "SELECT class_id FROM `class` WHERE `class`.class_name = " + "'" + className + "'";
		Statement stmt = DatabaseConnection.connection().createStatement();
		ResultSet result = stmt.executeQuery(sql);
		
		Integer classId = null; 
		while(result.next()) {
			classId = result.getInt("class_id");
		}
		return classId;
	}
 
	@Override
	public Student selectStudentByStuId(Integer stuId) throws Exception {
		String sql = "SELECT\r\n"
				+ "	student.student_id,\r\n"
				+ "	student.student_name,\r\n"
				+ "	student.student_age,\r\n"
				+ "	student.student_sex,\r\n"
				+ "	class.class_name,\r\n"
				+ "	`year`.class_year \r\n"
				+ "FROM\r\n"
				+ "	`year`\r\n"
				+ "	INNER JOIN class ON `year`.year_id = class.class_year\r\n"
				+ "	INNER JOIN student ON class.class_id = student.student_class \r\n"
				+ "WHERE\r\n"
				+ "student.student_id = " + stuId;
		
		Statement stmt = DatabaseConnection.connection().createStatement();
		ResultSet result = stmt.executeQuery(sql);
		Student stu = new Student();
		while(result.next()) {		
			stu.setStudentId(result.getInt("student_id"));
			stu.setName(result.getString("student_name"));
			stu.setSex(result.getString("student_sex"));
			stu.set_class(result.getString("class_name"));
			stu.setYear(result.getString("class_year"));
		}
		return stu;
	}
 
	@Override
	public String selectYearByClassName(String className) throws Exception {
		String sql = "SELECT\r\n"
				+ "	`year`.class_year y \r\n"
				+ "FROM\r\n"
				+ "	class\r\n"
				+ "	INNER JOIN `year` ON class.class_year = `year`.year_id \r\n"
				+ "WHERE\r\n"
				+ "	class_name = '"+ className +"'";
		
		
		Statement stmt = DatabaseConnection.connection().createStatement();
		ResultSet result = stmt.executeQuery(sql);
		String yearName = null;
		while(result.next()) {
			yearName = result.getString("y");
		}
		
		return yearName;
	}
 
	@Override
	public ResultSet selectStudentByKey(String key) throws Exception {
		String sql = "SELECT\r\n"
				+ "	student.student_id,\r\n"
				+ "	student.student_name,\r\n"
				+ "	student.student_age,\r\n"
				+ "	student.student_sex,\r\n"
				+ "	class.class_name,\r\n"
				+ "	`year`.class_year\r\n"
				+ "FROM\r\n"
				+ "	`year`\r\n"
				+ "	INNER JOIN class ON `year`.year_id = class.class_year\r\n"
				+ "	INNER JOIN student ON class.class_id = student.student_class \r\n"
				+ "WHERE\r\n"
				+ "	1 = 1 ";
		
		if(key != null && !key.equals("")) {
			String str1 = "and class.class_name like " + "'%" + key + "%'\r\n";
			sql += str1;
			
			String str2 = "or `year`.class_year like " +  "'%" + key + "%'\r\n";
			sql += str2;
			
			String str3 = "or student.student_name like " +  "'%" + key + "%'\r\n";
			sql += str3;
		}
		Statement stmt = DatabaseConnection.connection().createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
		return stmt.executeQuery(sql);
	}
 
	@Override
	public ResultSet selectStudentRankByKey(String key,String yearName,String className) throws Exception {
		String sql = "SELECT\r\n"
				+ "	ROW_NUMBER() OVER () AS _rank,d.* \r\n"
				+ "FROM\r\n"
				+ "	(\r\n"
				+ "SELECT\r\n"
				+ "		c.student_id,\r\n"
				+ "		c.student_name,\r\n"
				+ "		c.class_name,\r\n"
				+ "		c.class_year,\r\n"
				+ "		CAST( c.`大学语文` AS SIGNED ) AS 大学语文,\r\n"
				+ "		CAST( c.`思政` AS SIGNED ) AS 思政,\r\n"
				+ "		CAST( c.`英语` AS SIGNED ) AS 英语,\r\n"
				+ "		CAST( c.`高数` AS SIGNED ) AS 高数,\r\n"
				+ "		CAST(( c.`大学语文` + c.`思政` + c.`英语` + c.`高数` ) AS SIGNED ) AS TP,\r\n"
				+ "		CAST(((\r\n"
				+ "					c.`大学语文` + c.`思政` + c.`英语` + c.`高数` \r\n"
				+ "					) / 4 \r\n"
				+ "			) AS DECIMAL ( 3, 1 )) AS average \r\n"
				+ "	FROM\r\n"
				+ "		(\r\n"
				+ "		SELECT\r\n"
				+ "			b.student_id,\r\n"
				+ "			b.student_name,\r\n"
				+ "			b.class_name,\r\n"
				+ "			b.class_year,\r\n"
				+ "			MAX( b.`大学语文` ) AS '大学语文',\r\n"
				+ "			MAX( b.`思政` ) AS `思政`,\r\n"
				+ "			MAX( b.`高数` ) AS `高数`,\r\n"
				+ "			MAX( b.`英语` ) AS `英语` \r\n"
				+ "		FROM\r\n"
				+ "			(\r\n"
				+ "			SELECT\r\n"
				+ "				a.student_id,\r\n"
				+ "				a.student_name,\r\n"
				+ "				a.class_name,\r\n"
				+ "				a.class_year,\r\n"
				+ "			CASE\r\n"
				+ "					\r\n"
				+ "					WHEN a.course_name = '英语' THEN\r\n"
				+ "					a.grade ELSE '' \r\n"
				+ "				END AS 英语,\r\n"
				+ "			CASE\r\n"
				+ "					\r\n"
				+ "					WHEN a.course_name = '高数' THEN\r\n"
				+ "					a.grade ELSE '' \r\n"
				+ "				END AS 高数,\r\n"
				+ "			CASE\r\n"
				+ "					\r\n"
				+ "					WHEN a.course_name = '大学语文' THEN\r\n"
				+ "					a.grade ELSE '' \r\n"
				+ "				END AS 大学语文,\r\n"
				+ "			CASE\r\n"
				+ "					\r\n"
				+ "					WHEN a.course_name = '思政' THEN\r\n"
				+ "					a.grade ELSE '' \r\n"
				+ "				END AS 思政 \r\n"
				+ "			FROM\r\n"
				+ "				(\r\n"
				+ "				SELECT\r\n"
				+ "					student.student_id,\r\n"
				+ "					student.student_name,\r\n"
				+ "					course.course_name,\r\n"
				+ "					score.grade,\r\n"
				+ "					class.class_name,\r\n"
				+ "					`year`.class_year \r\n"
				+ "				FROM\r\n"
				+ "					student\r\n"
				+ "					INNER JOIN score ON student.student_id = score.student_id\r\n"
				+ "					INNER JOIN course ON course.course_id = score.course_id\r\n"
				+ "					INNER JOIN class ON student.student_class = class.class_id\r\n"
				+ "					INNER JOIN `year` ON `year`.year_id = class.class_year \r\n"
				+ "				) a \r\n"
				+ "			GROUP BY\r\n"
				+ "				a.student_id,\r\n"
				+ "				a.course_name \r\n"
				+ "			) b \r\n"
				+ "		GROUP BY\r\n"
				+ "			b.student_id \r\n"
				+ "		) c \r\n"
				+ "	) d \r\n"
				+ "WHERE\r\n"
				+ "	1 = 1 \r\n";
		
		if(className != null && !className.equals("")) {
			sql += "and d.class_name = " + "'" + className + "'";
		}else {
			if(yearName != null && !yearName.equals("")){
				sql += "and d.class_year = " + "'" + yearName + "'";
			}else {
				sql += "and d.class_year = '大一'";//默认大一
			}
		}
						
		sql += "\r\nORDER BY\r\n";	
		String str = "d.TP";
		
		if(key != null && !key.equals("")) {
			str = "d." + key;
		}
		sql += str + " DESC";
		
		
		Statement stmt = DatabaseConnection.connection().createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
		
		ResultSet executeQuery = stmt.executeQuery(sql);
		
		
		return executeQuery;
	}
 
}

c.删除、增加、修改接口

删除接口

package service;
 
public interface DeleteService {
 
	void deleteStudentByStuId(Integer stuId) throws Exception;
}

增加接口

package service;
 
import model.Student;
 
public interface InsertService {
	
	void InsertStudent(String name,Integer age,String sex,String className) throws Exception;
 
}

修改接口

package service;
 
public interface UpdateService {
	
	//修改学生信息
	void updateStudent(Integer stuId,String StuName,String stuSex,Integer stuAge,Integer StuClassId) throws Exception;
 
}

d.实现接口方法

实现删除接口方法

package service;
 
import java.sql.Statement;
 
import config.DatabaseConnection;
 
public class DeleteServiceImpl implements DeleteService{
	
	public void deleteStudentByStuId(Integer stuId) throws Exception{
		//删除学生表中学生信息
		String sql = "DELETE \r\n"
				+ "FROM\r\n"
				+ "	student \r\n"
				+ "WHERE\r\n"
				+ "	student_id = " + stuId;
		//删除成绩表中学生信息
		String sql1 = "DELETE \r\n"
				+ "FROM\r\n"
				+ " score \r\n"
				+ "WHERE\r\n"
				+ "	score.student_id = " + stuId;
		Statement stmt = DatabaseConnection.connection().createStatement();
		stmt.executeUpdate(sql);
		stmt.executeUpdate(sql1);
	}
 
}

实现增加接口方法

package service;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
 
import config.DatabaseConnection;
import model.Student;
 
public class InsertServiceImpl implements InsertService{
 
	//插入一条学生信息
	/*
	 * 先通过年级和班级名字获取对应的Id
	 * 再插入一条学生信息
	 * 
	 * */
	@Override
	public void InsertStudent(String name,Integer age,String sex,String className) throws Exception {
		Connection conn = DatabaseConnection.connection();
		
		SelectService service = new SelectServiceImpl();
		Integer classId = service.selectClassIdByClassName(className);
		
		String sql = "INSERT INTO student(student_name,student_age,student_sex,student_class) VALUES(?,?,?,?)";
		PreparedStatement preStmt = conn.prepareStatement(sql);
		preStmt.setString(1,name);
		preStmt.setInt(2, age);
		preStmt.setString(3,sex);
		preStmt.setInt(4,classId);
		preStmt.executeUpdate();	
	}
 
}

实现修改接口方法

package service;
 
 
import java.sql.Connection;
import java.sql.Statement;
 
import config.DatabaseConnection;
 
public class UpdateServiceImpl implements UpdateService{
	
	
 
	@Override
	public void updateStudent(Integer stuId,String stuName, String stuSex, Integer stuAge, Integer StuClassId) throws Exception {
		String sql = "UPDATE student SET\r\n";
		boolean isHave = false;//判断是否已经添加了修改的语句,如果是则后面的语句需要加上逗号
		
		
		if(stuName != null && !stuName.equals("")) {
			if(isHave) {
				sql += ",";
			}
			sql += "student_name = '" + stuName + "'"; 
			isHave = true;
		}
		
		if(stuAge != null && !stuAge.equals("")) {
			if(isHave) {
				sql += ",";
			}
			sql += "student_age = " + stuAge; 
			isHave = true;
		}
		
		if(stuSex != null && !stuSex.equals("")) {
			if(isHave) {
				sql += ",";
			}
			sql += "student_sex = '" + stuSex + "'"; 
			isHave = true;
		}
		
		if(StuClassId != null && !StuClassId.equals("")) {
			if(isHave) {
				sql += ",";
			}
			sql += "student_class = " + StuClassId; 
			isHave = true;
		}
		
		sql += "\r\nWHERE\r\n"
				+ "student_id = " + stuId;
		Statement stmt = DatabaseConnection.connection().createStatement();
		stmt.executeUpdate(sql);
	}
 
}

4.连接数据库

创建一个config包,在里面添加一个静态类,负责连接数据库。

package config;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
 
public class DatabaseConnection {
	
	public static Connection connection() throws Exception{
		
        Class.forName("com.mysql.cj.jdbc.Driver");
        String url = "jdbc:mysql://localhost:3306/student_management?serverTimezone=UTC";// 注意设置时区,这个连接是8.0版本的mysql。
        String username = "root";
        String passwords = "root";
        Connection c = DriverManager.getConnection(url, username, passwords);
        if (c != null) {
            System.out.println("数据库连接成功!");
        } else {
            System.out.println("数据库连接失败!");
        }
            
        return c;        
	} 
 
}

5.创建util包,负责一些工具

a.日期计算工具

package util;
 
import java.util.Calendar;
 
public class DataUtil {
 
	//获取年份数组
	public static Integer[] getYear() {
		Integer[] arr = new Integer[100];
 
        Calendar cal=Calendar.getInstance();      
		int last = cal.get(Calendar.YEAR);
		
		for (int i = 0; i < arr.length; i++) {
			arr[i] = last--;
		}
		return arr;
	}
	
	//获取月份数组
	public static Integer[] getMonth() {
		Integer[] arr = new Integer[12];
		for (int i = 0; i < arr.length; i++) {
			arr[i] = i + 1;
		}
		return arr;
	}
	
	//获取日期数组
	public static Integer[] getDays(Integer year,Integer month) {		
		int days = 0;
		switch (month) {
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:days = 31;break;
		case 4:
		case 6:
		case 9:
		case 11:days = 30;break;
		case 2:days = ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) ? 29 : 28;break;
		default:
			throw new IllegalArgumentException("Unexpected value: " + month);
		}
		Integer[] arr = new Integer[days];
		for (int i = 0; i < arr.length; i++) {
			arr[i] = i + 1;
		}
		return arr;	
	}
	
	//通过出生日期获取年龄
	public static Integer getAge(Integer year,Integer month,Integer days) {
		
		Calendar cal=Calendar.getInstance();      
		int y=cal.get(Calendar.YEAR);      
		int m=cal.get(Calendar.MONTH);      
		int d=cal.get(Calendar.DATE);  
 
		if((m > month) || (m == month && d > days)) {
			return y - year;
		}else {
			return y - year - 1;
		}
	}
}

b.ResultSet转化为Object[][]的方法类

package util;
 
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
 
public class ResultSetUtil {
	
	public static Object[][] getObjectArray(ResultSet rs) throws Exception{
		Object[][] data = null;
		rs.last();
		int rows = rs.getRow();
		data = new Object[rows][];  
		
		ResultSetMetaData md = rs.getMetaData();//获取记录集的元数据
		int columnCount = md.getColumnCount();//列数
		rs.first();
		int k = 0;
		do {
			Object[] row = new Object[columnCount];
			for(int i=0; i<columnCount; i++) {
				row[i] = rs.getObject(i+1).toString();
			}
			data[k] = row;
			k++;
		}while(rs.next());
		return data;
	}
 
}

c.List转化为数组的方法类

package util;
 
import java.util.List;
 
public class ListToArray {
	public static String[] getArray(List<String> list) {
		String[] arr = new String[list.size()];
		
		for (int i = 0; i < arr.length; i++) {
			arr[i] = list.get(i);
		}
		
		return arr;
	}
 
}

6.创建view包,存放窗体

a.管理员登录窗口

代码:

package view;
 
import java.awt.BorderLayout;
import java.awt.EventQueue;
 
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
 
import model.Admin;
import service.SelectService;
import service.SelectServiceImpl;
 
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.BoxLayout;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
 
import java.awt.Font;
import javax.swing.SwingConstants;
import javax.swing.JTextPane;
import javax.swing.JPasswordField;
import java.awt.Color;
import javax.swing.JTextField;
import java.awt.Toolkit;
import java.awt.SystemColor;
import javax.swing.ImageIcon;
 
public class Login extends JFrame {
 
	private JPanel contentPane;
	private JPasswordField txtPassword;
	private JTextField txtUserName;
 
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Login frame = new Login();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}
 
	/**
	 * Create the frame.
	 */
	public Login() {
		setBackground(Color.WHITE);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 290);
		contentPane = new JPanel();
		contentPane.setBackground(new Color(47, 79, 79));
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
 
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblNewLabel = new JLabel("登录");
		lblNewLabel.setForeground(Color.WHITE);
		lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
		lblNewLabel.setFont(new Font("宋体", Font.BOLD, 18));
		lblNewLabel.setBounds(0, 0, 436, 71);
		contentPane.add(lblNewLabel);
		
		JLabel lblNewLabel_1 = new JLabel("用户名:");
		lblNewLabel_1.setForeground(Color.WHITE);
		lblNewLabel_1.setIcon(null);
		lblNewLabel_1.setHorizontalAlignment(SwingConstants.RIGHT);
		lblNewLabel_1.setBounds(81, 80, 58, 23);
		contentPane.add(lblNewLabel_1);
		
		JLabel lblNewLabel_2 = new JLabel("密    码:");
		lblNewLabel_2.setForeground(Color.WHITE);
		lblNewLabel_2.setHorizontalAlignment(SwingConstants.RIGHT);
		lblNewLabel_2.setBounds(81, 131, 58, 23);
		contentPane.add(lblNewLabel_2);
		
		JButton btnNewButton = new JButton("登录");
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String userName = txtUserName.getText();
				String password = txtPassword.getText();
				
				if(userName.equals("") || password.equals("") || password.equals(null)) {
					JOptionPane.showMessageDialog(null, "用户名或密码为空!");
				}else {
					Admin admin = null;
					
					SelectService select = new SelectServiceImpl();
					try {
						admin = select.selectAdminByAccount(userName);
					} catch (Exception e1) {
						// TODO 自动生成的 catch 块
						e1.printStackTrace();
					}	
					if(admin != null) {
						if(admin.getPassword().equals(password)) {
							JOptionPane.showMessageDialog(null, "登录成功!");
							close();
							new Management().setVisible(true);
						}else {
							JOptionPane.showMessageDialog(null, "您输入的密码错误!");
						}
					}else {
						JOptionPane.showMessageDialog(null, "您输入的账号错误!");
					}
				}		
			}
		});
		btnNewButton.setFont(new Font("华文仿宋", Font.BOLD, 13));
		btnNewButton.setBackground(Color.WHITE);
		
		btnNewButton.setBounds(168, 193, 97, 23);
		contentPane.add(btnNewButton);
		
		txtPassword = new JPasswordField();
		txtPassword.setBounds(149, 131, 164, 23);
		contentPane.add(txtPassword);
		
		txtUserName = new JTextField();
		txtUserName.setBounds(149, 81, 164, 21);
		contentPane.add(txtUserName);
		txtUserName.setColumns(10);
		
		JLabel lblNewLabel_3 = new JLabel("");
		lblNewLabel_3.setIcon(new ImageIcon("D:\\guigu\\homework\\student_anagement\\images\\user_icon_copy.png"));
		lblNewLabel_3.setBounds(64, 80, 14, 23);
		contentPane.add(lblNewLabel_3);
		
		JLabel lblNewLabel_4 = new JLabel("");
		lblNewLabel_4.setIcon(new ImageIcon("D:\\guigu\\homework\\student_anagement\\images\\lock_icon_copy.png"));
		lblNewLabel_4.setBounds(64, 131, 14, 23);
		contentPane.add(lblNewLabel_4);
	}
	public void close() {
		this.setVisible(false);
	}
}

b.学生管理窗口

代码:

package view;
 
 
 
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTabbedPane;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.BorderLayout;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
 
import model.Student;
import service.DeleteService;
import service.DeleteServiceImpl;
import service.SelectService;
import service.SelectServiceImpl;
import util.ListToArray;
import util.ResultSetUtil;
 
import javax.swing.JLabel;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import java.awt.CardLayout;
import javax.swing.JButton;
import javax.swing.JTextField;
import java.awt.Font;
 
import javax.swing.LayoutStyle.ComponentPlacement;
import java.awt.SystemColor;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.List;
 
import javax.swing.JMenu;
import javax.swing.JOptionPane;
import javax.swing.JList;
import javax.swing.JScrollPane;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JComboBox;
import javax.swing.SwingConstants;
 
public class Management extends JFrame {
 
	private JPanel contentPane;
	private JTextField textField;
	private JTable table;
	
	private String className = null;
	private String classYear = null;
	
	private DeleteService delete = new DeleteServiceImpl();
	private JTable table_1;
 
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Management frame = new Management();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}
 
	/**
	 * Create the frame.
	 */
	public Management() {
		setResizable(false);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 764, 573);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
 
		setContentPane(contentPane);
		
		JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
		
		JPanel panel_1 = new JPanel();
		panel_1.setBackground(Color.WHITE);
		tabbedPane.addTab("学生管理", null, panel_1, null);
		
		JPanel panel_4 = new JPanel();
		panel_4.setBackground(new Color(250, 250, 210));
		
		JButton btnNewButton = new JButton("查询");
		
		btnNewButton.setForeground(Color.BLACK);
		btnNewButton.setBackground(Color.WHITE);
		btnNewButton.setFont(new Font("宋体", Font.BOLD, 14));
		
		textField = new JTextField();
		textField.setColumns(10);
		
		JLabel lblNewLabel = new JLabel("查询:");
		lblNewLabel.setFont(new Font("宋体", Font.BOLD, 14));
		
		//获取年级信息
		SelectService select = new SelectServiceImpl();
		List<String> yearList = null;
		try {
			yearList = select.selectAllYear();
		} catch (Exception e) {
			e.printStackTrace();
		}
		String[] yearArray = null;
		//如果年级不为空,则将其转化为数组
		if(yearList != null) {
			yearArray = ListToArray.getArray(yearList);	
		}
				
		JComboBox comboBox = new JComboBox(yearArray);
		
		//获取当前选中的年级
		String year =  (String) comboBox.getSelectedItem();
		System.out.println(year);
		List<String> classList = null;
		//通过年级获取班级
		try {
			classList = select.selectclassByYear(year);
		} catch (Exception e) {
			e.printStackTrace();
		}
		String[] classArray = null;		
		if(classList != null) {
			classArray = ListToArray.getArray(classList);
		}			
		JComboBox comboBox_1 = new JComboBox(classArray);
			
		//为第一个添加下拉框添加监听
		//控制第二个下拉框的值
		comboBox.addActionListener(new ActionListener() {
		    public void actionPerformed(ActionEvent evt) {
		        comboBox_1.removeAllItems();
		        //获取当前选中的年级
		  		String year =  (String) comboBox.getSelectedItem();
		  		List<String> classList = null;
		  		//通过年级获取班级
		  		try {
		  			classList = select.selectclassByYear(year);
		  		} catch (Exception e) {
		  			e.printStackTrace();
		  		}
		  		String[] classArray = null;		
		  		if(classList != null) {
		  			classArray = ListToArray.getArray(classList);
		  		}
		  		for (int i = 0; i < classArray.length; i++) {        	  
					comboBox_1.addItem(classArray[i]);
				}
		  		
		  		String yearName = (String)comboBox.getSelectedItem();
			    String className = (String)comboBox_1.getSelectedItem();
				Object[][] data = updateStudentTable(className,yearName);	
				table.setModel(new DefaultTableModel(
						data,
						new String[] {
							"学号", "姓名", "年龄", "性别", "班级", "年级"
						}
					));	
				table.updateUI(); 
		    }
		});		
		//为第二个下拉框添加监听
		comboBox.addActionListener(new ActionListener() {
		    public void actionPerformed(ActionEvent evt) {		     
		  		String yearName = (String)comboBox.getSelectedItem();
			    String className = (String)comboBox_1.getSelectedItem();
				Object[][] data = updateStudentTable(className,yearName);	
				table.setModel(new DefaultTableModel(
						data,
						new String[] {
							"学号", "姓名", "年龄", "性别", "班级", "年级"
						}
					));	
				table.updateUI();          		    
		    }
		});	
		
		
				
		GroupLayout gl_panel_4 = new GroupLayout(panel_4);
		gl_panel_4.setHorizontalGroup(
			gl_panel_4.createParallelGroup(Alignment.TRAILING)
				.addGroup(gl_panel_4.createSequentialGroup()
					.addContainerGap(112, Short.MAX_VALUE)
					.addComponent(lblNewLabel, GroupLayout.PREFERRED_SIZE, 50, GroupLayout.PREFERRED_SIZE)
					.addPreferredGap(ComponentPlacement.UNRELATED)
					.addComponent(comboBox, GroupLayout.PREFERRED_SIZE, 74, GroupLayout.PREFERRED_SIZE)
					.addGap(33)
					.addComponent(comboBox_1, GroupLayout.PREFERRED_SIZE, 83, GroupLayout.PREFERRED_SIZE)
					.addGap(86)
					.addComponent(textField, GroupLayout.PREFERRED_SIZE, 166, GroupLayout.PREFERRED_SIZE)
					.addGap(18)
					.addComponent(btnNewButton)
					.addGap(55))
		);
		gl_panel_4.setVerticalGroup(
			gl_panel_4.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_panel_4.createSequentialGroup()
					.addGap(20)
					.addGroup(gl_panel_4.createParallelGroup(Alignment.BASELINE)
						.addComponent(textField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(comboBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(comboBox_1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(btnNewButton)
						.addComponent(lblNewLabel, GroupLayout.PREFERRED_SIZE, 25, GroupLayout.PREFERRED_SIZE))
					.addContainerGap(30, Short.MAX_VALUE))
		);
		panel_4.setLayout(gl_panel_4);
		
		JPanel panel_5 = new JPanel();
		panel_5.setBackground(SystemColor.scrollbar);
		
		JButton btnNewButton_1 = new JButton("添加学生");
		btnNewButton_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				new AddStudent().setVisible(true);
			}
		});
		
		JButton btnNewButton_2 = new JButton("删除学生");
		
		
		JButton btnNewButton_3 = new JButton("修改学生信息");
		
		
		JButton btnNewButton_4 = new JButton("退出系统");
		btnNewButton_4.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				close();
			}
		});
		
		JButton btnNewButton_5 = new JButton("刷新信息");
		btnNewButton_5.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Object[][] data = updateStudentTable(null,null);	
				table.setModel(new DefaultTableModel(
						data,
						new String[] {
							"学号", "姓名", "年龄", "性别", "班级", "年级"
						}
					));	
				table.updateUI();       
			}
		});
		GroupLayout gl_panel_5 = new GroupLayout(panel_5);
		gl_panel_5.setHorizontalGroup(
			gl_panel_5.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_panel_5.createSequentialGroup()
					.addGroup(gl_panel_5.createParallelGroup(Alignment.LEADING)
						.addComponent(btnNewButton_1, GroupLayout.DEFAULT_SIZE, 105, Short.MAX_VALUE)
						.addGroup(gl_panel_5.createSequentialGroup()
							.addGap(2)
							.addGroup(gl_panel_5.createParallelGroup(Alignment.LEADING)
								.addComponent(btnNewButton_3, GroupLayout.DEFAULT_SIZE, 105, Short.MAX_VALUE)
								.addComponent(btnNewButton_2, GroupLayout.DEFAULT_SIZE, 103, Short.MAX_VALUE)
								.addComponent(btnNewButton_5, GroupLayout.DEFAULT_SIZE, 105, Short.MAX_VALUE)
								.addComponent(btnNewButton_4, GroupLayout.DEFAULT_SIZE, 105, Short.MAX_VALUE))))
					.addContainerGap())
		);
		gl_panel_5.setVerticalGroup(
			gl_panel_5.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_panel_5.createSequentialGroup()
					.addGap(75)
					.addComponent(btnNewButton_1)
					.addGap(41)
					.addComponent(btnNewButton_2)
					.addGap(42)
					.addComponent(btnNewButton_3)
					.addGap(44)
					.addComponent(btnNewButton_5)
					.addGap(46)
					.addComponent(btnNewButton_4)
					.addContainerGap(93, Short.MAX_VALUE))
		);
		panel_5.setLayout(gl_panel_5);
		
		JScrollPane scrollPane = new JScrollPane();
		
		
		
		Object[][] data = updateStudentTable(null,null);	
		table = new JTable();
		table.setModel(new DefaultTableModel(
			data,
			new String[] {
				"学号", "姓名", "年龄", "性别", "班级", "年级"
			}
		));
		
		
		JPanel panel = new JPanel();
		tabbedPane.addTab("学生排名", null, panel, null);
		
		JPanel panel_6 = new JPanel();
		GroupLayout gl_panel = new GroupLayout(panel);
		gl_panel.setHorizontalGroup(
			gl_panel.createParallelGroup(Alignment.LEADING)
				.addGroup(Alignment.TRAILING, gl_panel.createSequentialGroup()
					.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
					.addComponent(panel_6, GroupLayout.PREFERRED_SIZE, 727, GroupLayout.PREFERRED_SIZE)
					.addGap(32))
		);
		gl_panel.setVerticalGroup(
			gl_panel.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_panel.createSequentialGroup()
					.addComponent(panel_6, GroupLayout.DEFAULT_SIZE, 521, Short.MAX_VALUE)
					.addContainerGap())
		);
		
		Object[][] data1 = updateScoreByKey(null, null, null);
		table_1 = new JTable();
		table_1.setEnabled(false);
		table_1.setModel(new DefaultTableModel(
				data1,
				new String[] {
						"排名", "学号", "姓名","年级","班级", "语文", "数学", "英语","思政","总分","平均分"
				}
			));	
		
		JLabel lblNewLabel_1 = new JLabel("选择年级和班级:");
		//获取年级信息
		SelectService select2 = new SelectServiceImpl();
		List<String> yearList2 = null;
		try {
			yearList = select.selectAllYear();
		} catch (Exception e) {
			e.printStackTrace();
		}
		String[] yearArray2 = null;
		//如果年级不为空,则将其转化为数组
		if(yearList != null) {
			yearArray2 = ListToArray.getArray(yearList);	
		}
		
		JComboBox comboBox_2 = new JComboBox(yearArray2);
		
		//获取当前选中的年级
		String year2 =  (String) comboBox_2.getSelectedItem();
		System.out.println(year);
		List<String> classList2 = null;
		//通过年级获取班级
		try {
			classList2 = select.selectclassByYear(year);
		} catch (Exception e) {
			e.printStackTrace();
		}
		classList.add(0, "全部");
		String[] classArray2 = null;		
		if(classList != null) {
			classArray2 = ListToArray.getArray(classList);
		}					
		
		JComboBox comboBox_3 = new JComboBox(classArray2);
		
		String[] crouse = {"全部","大学语文","高数","思政","英语"};
		JComboBox comboBox_4 = new JComboBox(crouse);
		
		comboBox_4.addActionListener(new ActionListener() {
		    public void actionPerformed(ActionEvent evt) {
		     
		  		String yearName = (String)comboBox_2.getSelectedItem();
		  		String className = (String)comboBox_3.getSelectedItem();
		  		String key = (String)comboBox_4.getSelectedItem();
		  		
		  		if(key != null && key.equals("全部")) key = null;
		  		if(className != null && className.equals("全部")) className = null;
				Object[][] data = updateScoreByKey(key,yearName,className);	
				table_1.setModel(new DefaultTableModel(
						data,
						new String[] {
							"排名", "学号", "姓名","年级","班级", "语文", "数学", "英语","思政","总分","平均分"
						}
					));	
				table_1.updateUI();  
		    }
		});		
		
		JLabel lblNewLabel_2 = new JLabel("按单科排名:");
		
		comboBox_2.addActionListener(new ActionListener() {
		    public void actionPerformed(ActionEvent evt) {
		        comboBox_3.removeAllItems();
		        //获取当前选中的年级
		  		String year =  (String) comboBox_2.getSelectedItem();
		  		List<String> classList = null;
		  		//通过年级获取班级
		  		try {
		  			classList = select.selectclassByYear(year);
		  		} catch (Exception e) {
		  			e.printStackTrace();
		  		}
		  		classList.add(0,"全部");
		  		String[] classArray = null;		
		  		if(classList != null) {
		  			classArray = ListToArray.getArray(classList);
		  		}
		  		
		  		for (int i = 0; i < classArray.length; i++) {        	  
					comboBox_3.addItem(classArray[i]);
				}
	
		  		String yearName = (String)comboBox_2.getSelectedItem();
				Object[][] data = updateScoreByKey(null,yearName,null);	
				table_1.setModel(new DefaultTableModel(
						data,
						new String[] {
							"排名", "学号", "姓名","年级","班级", "语文", "数学", "英语","思政","总分","平均分"
						}
					));	
				table_1.updateUI();  
		    }
		});		
		//为第二个下拉框添加监听
		comboBox_3.addActionListener(new ActionListener() {
		    public void actionPerformed(ActionEvent evt) {		     
		  		String yearName = (String)comboBox_2.getSelectedItem();
			    String className = (String)comboBox_3.getSelectedItem();
			    if(className != null && className.equals("全部")) {
			    	className = null;
			    }
				Object[][] data = updateScoreByKey(null,yearName,className);	
				table_1.setModel(new DefaultTableModel(
						data,
						new String[] {
							"排名", "学号", "姓名","年级","班级", "语文", "数学", "英语","思政","总分","平均分"
						}
					));	
				table_1.updateUI();          		    
		    }
		});
		
		JPanel panel_3 = new JPanel();
		
		JButton btnNewButton_6 = new JButton("退出");
		btnNewButton_6.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				close();
			}
		});
		
		JLabel lblNewLabel_3 = new JLabel("成绩排名");
		lblNewLabel_3.setFont(new Font("宋体", Font.BOLD, 15));
		lblNewLabel_3.setHorizontalAlignment(SwingConstants.CENTER);
		GroupLayout gl_panel_6 = new GroupLayout(panel_6);
		gl_panel_6.setHorizontalGroup(
			gl_panel_6.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_panel_6.createSequentialGroup()
					.addComponent(panel_3, GroupLayout.DEFAULT_SIZE, 749, Short.MAX_VALUE)
					.addContainerGap())
				.addGroup(gl_panel_6.createSequentialGroup()
					.addGap(14)
					.addComponent(lblNewLabel_1)
					.addGap(18)
					.addComponent(comboBox_2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
					.addGap(36)
					.addComponent(comboBox_3, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
					.addGap(50)
					.addGroup(gl_panel_6.createParallelGroup(Alignment.LEADING)
						.addComponent(lblNewLabel_3, GroupLayout.PREFERRED_SIZE, 107, GroupLayout.PREFERRED_SIZE)
						.addGroup(gl_panel_6.createSequentialGroup()
							.addComponent(lblNewLabel_2, GroupLayout.PREFERRED_SIZE, 79, GroupLayout.PREFERRED_SIZE)
							.addPreferredGap(ComponentPlacement.RELATED)
							.addComponent(comboBox_4, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
							.addGap(125)
							.addComponent(btnNewButton_6, GroupLayout.PREFERRED_SIZE, 71, GroupLayout.PREFERRED_SIZE)))
					.addGap(129))
		);
		gl_panel_6.setVerticalGroup(
			gl_panel_6.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_panel_6.createSequentialGroup()
					.addContainerGap()
					.addComponent(lblNewLabel_3, GroupLayout.PREFERRED_SIZE, 55, GroupLayout.PREFERRED_SIZE)
					.addPreferredGap(ComponentPlacement.UNRELATED)
					.addGroup(gl_panel_6.createParallelGroup(Alignment.BASELINE)
						.addComponent(lblNewLabel_1)
						.addComponent(comboBox_2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(comboBox_3, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(lblNewLabel_2)
						.addComponent(comboBox_4, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(btnNewButton_6))
					.addGap(18)
					.addComponent(panel_3, GroupLayout.DEFAULT_SIZE, 409, Short.MAX_VALUE)
					.addContainerGap())
		);
		
		JScrollPane scrollPane_1 = new JScrollPane();
		GroupLayout gl_panel_3 = new GroupLayout(panel_3);
		gl_panel_3.setHorizontalGroup(
			gl_panel_3.createParallelGroup(Alignment.TRAILING)
				.addGroup(Alignment.LEADING, gl_panel_3.createSequentialGroup()
					.addComponent(scrollPane_1, GroupLayout.PREFERRED_SIZE, 722, GroupLayout.PREFERRED_SIZE)
					.addContainerGap(27, Short.MAX_VALUE))
		);
		gl_panel_3.setVerticalGroup(
			gl_panel_3.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_panel_3.createSequentialGroup()
					.addContainerGap()
					.addComponent(scrollPane_1, GroupLayout.DEFAULT_SIZE, 443, Short.MAX_VALUE))
		);
		
		
		panel_3.setLayout(gl_panel_3);
		panel_6.setLayout(gl_panel_6);
		panel.setLayout(gl_panel);
		
		JPanel panel_2 = new JPanel();
		tabbedPane.addTab("学生成绩管理", null, panel_2, null);
		
		//修改学生信息
		btnNewButton_3.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				int index = table.getSelectedRow();
				if(index != -1) {
					String key = (String) table.getValueAt(index, 0);
					Integer classId = Integer.parseInt(key.strip());
					new UpdateStudent(classId).setVisible(true);
				}			
			}
		});
		
		//删除学生信息
		btnNewButton_2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				int[] arr = table.getSelectedRows();
				int n = JOptionPane.showConfirmDialog(null, "是否删除?", "Title",JOptionPane.YES_NO_OPTION); 
				if(n == 0) {
					for (int i = 0; i < arr.length; i++) {			
						String key = (String) table.getValueAt(arr[i], 0);
						Integer classId = Integer.parseInt(key.strip());
						try {
							delete.deleteStudentByStuId(classId);
							Object[][] data = updateStudentTable(null,null);	
							table.setModel(new DefaultTableModel(
									data,
									new String[] {
										"学号", "姓名", "年龄", "性别", "班级", "年级"
									}
								));	
							table.updateUI();
						} catch (Exception e1) {
							// TODO 自动生成的 catch 块
							e1.printStackTrace();
						}
					}
				
				}
			}
		});
		//条件查询
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String key = textField.getText();
				Object[][] data = updateByselect(key);
				table.setModel(new DefaultTableModel(
						data,
						new String[] {
							"学号", "姓名", "年龄", "性别", "班级", "年级"
						}
					));	
				table.updateUI();
			}
		});
		scrollPane.setViewportView(table);
		GroupLayout gl_panel_1 = new GroupLayout(panel_1);
		gl_panel_1.setHorizontalGroup(
			gl_panel_1.createParallelGroup(Alignment.LEADING)
				.addComponent(panel_4, GroupLayout.PREFERRED_SIZE, 750, GroupLayout.PREFERRED_SIZE)
				.addGroup(gl_panel_1.createSequentialGroup()
					.addComponent(panel_5, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
					.addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 633, GroupLayout.PREFERRED_SIZE))
		);
		gl_panel_1.setVerticalGroup(
			gl_panel_1.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_panel_1.createSequentialGroup()
					.addComponent(panel_4, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
					.addGroup(gl_panel_1.createParallelGroup(Alignment.LEADING)
						.addComponent(panel_5, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 456, GroupLayout.PREFERRED_SIZE)))
		);
		panel_1.setLayout(gl_panel_1);
		scrollPane_1.setViewportView(table_1);
		GroupLayout gl_contentPane = new GroupLayout(contentPane);
		gl_contentPane.setHorizontalGroup(
			gl_contentPane.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_contentPane.createSequentialGroup()
					.addComponent(tabbedPane, GroupLayout.PREFERRED_SIZE, 745, Short.MAX_VALUE)
					.addContainerGap())
		);
		gl_contentPane.setVerticalGroup(
			gl_contentPane.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_contentPane.createSequentialGroup()
					.addComponent(tabbedPane, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
					.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
		);
		contentPane.setLayout(gl_contentPane);
	}
 
	/**
	 * @return
	 */
	private Object[][] updateStudentTable(String className,String classYear) {
		//查询所有学生信息
		Object[][] data = null;
		SelectService select = new SelectServiceImpl();		
		try {
			ResultSet rs = select.selectStudentByAny(className, classYear);	
			if(rs.next()) {
				data = ResultSetUtil.getObjectArray(rs);
			}
			
		} catch (Exception e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
		return data;
	}
	
	private Object[][] updateByselect(String key) {
		//查询所有学生信息
		Object[][] data = null;
		SelectService select = new SelectServiceImpl();		
		try {
			ResultSet rs = select.selectStudentByKey(key);
			data = ResultSetUtil.getObjectArray(rs);
		} catch (Exception e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
		return data;
	}
	
	private Object[][] updateScoreByKey(String key,String yearName,String className){
		//查询所有学生信息
		Object[][] data = null;
		SelectService select = new SelectServiceImpl();		
		try {
			ResultSet rs = select.selectStudentRankByKey(key, yearName, className);
			if(rs.next()) {
				data = ResultSetUtil.getObjectArray(rs);
			}
			
		} catch (Exception e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
		return data;		
	}
	
	public void close() {
		this.setVisible(false);
	}
}

 c.添加学生窗口

代码:

package view;
 
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Enumeration;
import java.util.List;
 
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
 
import service.InsertService;
import service.InsertServiceImpl;
import service.SelectService;
import service.SelectServiceImpl;
import util.DataUtil;
import util.ListToArray;
 
import javax.swing.AbstractButton;
import javax.swing.ButtonGroup;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import java.awt.Color;
import javax.swing.JToggleButton;
import java.awt.Font;
 
public class AddStudent extends JFrame {
 
	private JPanel contentPane;
	private JTextField textField;
 
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					AddStudent frame = new AddStudent();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}
 
	/**
	 * Create the frame.
	 */
	public AddStudent() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 351, 386);
		contentPane = new JPanel();
		contentPane.setBackground(Color.WHITE);
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
 
		setContentPane(contentPane);
		
		JPanel panel = new JPanel();
		panel.setBackground(Color.WHITE);
		
		JLabel lblNewLabel_5 = new JLabel("添加学生信息");
		lblNewLabel_5.setFont(new Font("宋体", Font.BOLD, 15));
		lblNewLabel_5.setHorizontalAlignment(SwingConstants.CENTER);
		GroupLayout gl_contentPane = new GroupLayout(contentPane);
		gl_contentPane.setHorizontalGroup(
			gl_contentPane.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_contentPane.createSequentialGroup()
					.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
						.addGroup(gl_contentPane.createSequentialGroup()
							.addGap(89)
							.addComponent(lblNewLabel_5, GroupLayout.PREFERRED_SIZE, 121, GroupLayout.PREFERRED_SIZE))
						.addGroup(gl_contentPane.createSequentialGroup()
							.addContainerGap()
							.addComponent(panel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)))
					.addContainerGap(23, Short.MAX_VALUE))
		);
		gl_contentPane.setVerticalGroup(
			gl_contentPane.createParallelGroup(Alignment.LEADING)
				.addGroup(Alignment.TRAILING, gl_contentPane.createSequentialGroup()
					.addContainerGap()
					.addComponent(lblNewLabel_5, GroupLayout.DEFAULT_SIZE, 26, Short.MAX_VALUE)
					.addPreferredGap(ComponentPlacement.RELATED)
					.addComponent(panel, GroupLayout.PREFERRED_SIZE, 312, GroupLayout.PREFERRED_SIZE)
					.addGap(42))
		);
		
		JLabel lblNewLabel = new JLabel("姓名:");
		lblNewLabel.setHorizontalAlignment(SwingConstants.RIGHT);
		
		JLabel lblNewLabel_1 = new JLabel("出生日期:");
		lblNewLabel_1.setHorizontalAlignment(SwingConstants.RIGHT);
		
		JLabel lblNewLabel_2 = new JLabel("性别:");
		lblNewLabel_2.setHorizontalAlignment(SwingConstants.RIGHT);
		
		JLabel lblNewLabel_3 = new JLabel("年级:");
		lblNewLabel_3.setHorizontalAlignment(SwingConstants.RIGHT);
		
		JLabel lblNewLabel_4 = new JLabel("班级:");
		lblNewLabel_4.setHorizontalAlignment(SwingConstants.RIGHT);
		
		JButton btnNewButton = new JButton("添加");
		
		btnNewButton.setBackground(Color.WHITE);
		
		//获取年级信息
		SelectService select = new SelectServiceImpl();
		List<String> yearList = null;
		try {
			yearList = select.selectAllYear();
		} catch (Exception e) {
			e.printStackTrace();
		}
		String[] yearArray = null;
		//如果年级不为空,则将其转化为数组
		if(yearList != null) {
			yearArray = ListToArray.getArray(yearList);	
		}
		
		//初始化年级下拉框的值
		JComboBox comboBox = new JComboBox(yearArray);
		comboBox.setBackground(Color.WHITE);
		
		//获取当前选中的年级
		String year =  (String) comboBox.getSelectedItem();
		System.out.println(year);
		List<String> classList = null;
		//通过年级获取班级
		try {
			classList = select.selectclassByYear(year);
		} catch (Exception e) {
			e.printStackTrace();
		}
		String[] classArray = null;		
		if(classList != null) {
			classArray = ListToArray.getArray(classList);
		}	
		//初始化第二个下拉框的值
		JComboBox comboBox_1 = new JComboBox(classArray);
		comboBox_1.setBackground(Color.WHITE);
		
		//为第一个添加下拉框添加监听
		//控制第二个下拉框的值
		comboBox.addActionListener(new ActionListener() {
		    public void actionPerformed(ActionEvent evt) {
		        comboBox_1.removeAllItems();
		        //获取当前选中的年级
		  		String year =  (String) comboBox.getSelectedItem();
		  		System.out.println(year);
		  		List<String> classList = null;
		  		//通过年级获取班级
		  		try {
		  			classList = select.selectclassByYear(year);
		  		} catch (Exception e) {
		  			e.printStackTrace();
		  		}
		  		String[] classArray = null;		
		  		if(classList != null) {
		  			classArray = ListToArray.getArray(classList);
		  		}
		          for (int i = 0; i < classArray.length; i++) {        	  
					comboBox_1.addItem(classArray[i]);
				}
		    }
		});
		
		
		
		textField = new JTextField();
		textField.setColumns(10);
		
		//获取年份数组并添加到下拉框中
		JComboBox comboBox_2 = new JComboBox(DataUtil.getYear());
		comboBox_2.setBackground(Color.WHITE);
		
		//获取月份数组并添加到下拉框中
		JComboBox comboBox_3 = new JComboBox(DataUtil.getMonth());
		comboBox_3.setBackground(Color.WHITE);
		
		//通过月份获取当月的天数
		//获取当前的月份
		int m = (int) comboBox_3.getSelectedItem();
		//获取年份
		int y = (int) comboBox_2.getSelectedItem();
		//获取天数并添加到下拉框中
		JComboBox comboBox_4 = new JComboBox(DataUtil.getDays(y, m));
		comboBox_4.setBackground(Color.WHITE);
		
		comboBox_2.addActionListener(new ActionListener() {
		    public void actionPerformed(ActionEvent evt) {
		        comboBox_3.setSelectedIndex(0);
		        comboBox_4.setSelectedIndex(0);       
		    }
		});
		comboBox_3.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				int month = (int) comboBox_3.getSelectedItem();
				//获取年份
				int year = (int) comboBox_2.getSelectedItem();
				Integer[] days = DataUtil.getDays(year, month);
				comboBox_4.removeAllItems();
				for (int i = 0; i < days.length; i++) {
					comboBox_4.addItem(days[i]);
				}
			}
		});
			
		JRadioButton rdbtnNewRadioButton = new JRadioButton("男");
		rdbtnNewRadioButton.setBackground(Color.WHITE);
		
		JRadioButton rdbtnNewRadioButton_1 = new JRadioButton("女");
		rdbtnNewRadioButton_1.setBackground(Color.WHITE);
		
		ButtonGroup bg = new ButtonGroup();
		rdbtnNewRadioButton.setSelected(true);
		bg.add(rdbtnNewRadioButton_1);
		bg.add(rdbtnNewRadioButton);
		
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String stuName = textField.getText();
				Integer age = DataUtil.getAge(
						(Integer)comboBox_2.getSelectedItem(),
						(Integer)comboBox_3.getSelectedItem(), 
						(Integer)comboBox_4.getSelectedItem());
				String sex = "";
				Enumeration<AbstractButton> radioBtns=bg.getElements();
				while (radioBtns.hasMoreElements()) {
					AbstractButton btn = radioBtns.nextElement();
					if(btn.isSelected()){
						sex = btn.getText();
						break;
					}
				}
				String className = (String) comboBox_1.getSelectedItem();
						
				if(stuName == null || stuName.equals("")){
					JOptionPane.showMessageDialog(null, "姓名不能为空!");
				}else {
					InsertService insert = new InsertServiceImpl();
					try {
						insert.InsertStudent(stuName, age, sex, className);
						JOptionPane.showMessageDialog(null, "添加成功!");
						close();
						
					} catch (Exception e1) {
						// TODO 自动生成的 catch 块
						e1.printStackTrace();
					}
				}			
			}
		});
		
		
		GroupLayout gl_panel = new GroupLayout(panel);
		gl_panel.setHorizontalGroup(
			gl_panel.createParallelGroup(Alignment.TRAILING)
				.addGroup(gl_panel.createSequentialGroup()
					.addGroup(gl_panel.createParallelGroup(Alignment.TRAILING)
						.addGroup(gl_panel.createSequentialGroup()
							.addContainerGap()
							.addComponent(lblNewLabel, GroupLayout.PREFERRED_SIZE, 41, GroupLayout.PREFERRED_SIZE))
						.addGroup(gl_panel.createParallelGroup(Alignment.LEADING)
							.addGroup(gl_panel.createSequentialGroup()
								.addContainerGap()
								.addComponent(lblNewLabel_4, GroupLayout.DEFAULT_SIZE, 76, Short.MAX_VALUE))
							.addGroup(gl_panel.createSequentialGroup()
								.addGap(32)
								.addGroup(gl_panel.createParallelGroup(Alignment.TRAILING, false)
									.addComponent(lblNewLabel_3, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
									.addComponent(lblNewLabel_2, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
									.addComponent(lblNewLabel_1, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))))
					.addGap(18)
					.addGroup(gl_panel.createParallelGroup(Alignment.LEADING)
						.addComponent(btnNewButton, GroupLayout.PREFERRED_SIZE, 97, GroupLayout.PREFERRED_SIZE)
						.addGroup(gl_panel.createSequentialGroup()
							.addComponent(comboBox_2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
							.addPreferredGap(ComponentPlacement.UNRELATED)
							.addComponent(comboBox_3, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
							.addPreferredGap(ComponentPlacement.UNRELATED)
							.addComponent(comboBox_4, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
						.addGroup(gl_panel.createSequentialGroup()
							.addComponent(rdbtnNewRadioButton, GroupLayout.PREFERRED_SIZE, 53, GroupLayout.PREFERRED_SIZE)
							.addGap(18)
							.addComponent(rdbtnNewRadioButton_1, GroupLayout.PREFERRED_SIZE, 59, GroupLayout.PREFERRED_SIZE))
						.addComponent(comboBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(comboBox_1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(textField, GroupLayout.PREFERRED_SIZE, 138, GroupLayout.PREFERRED_SIZE))
					.addGap(52))
		);
		gl_panel.setVerticalGroup(
			gl_panel.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_panel.createSequentialGroup()
					.addGap(27)
					.addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
						.addComponent(lblNewLabel)
						.addComponent(textField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
					.addGap(24)
					.addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
						.addComponent(lblNewLabel_1)
						.addComponent(comboBox_2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(comboBox_3, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(comboBox_4, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
					.addGap(18)
					.addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
						.addComponent(lblNewLabel_2)
						.addComponent(rdbtnNewRadioButton)
						.addComponent(rdbtnNewRadioButton_1))
					.addGap(18)
					.addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
						.addComponent(lblNewLabel_3)
						.addComponent(comboBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
					.addGap(18)
					.addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
						.addComponent(lblNewLabel_4)
						.addComponent(comboBox_1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
					.addGap(34)
					.addComponent(btnNewButton)
					.addGap(47))
		);
		panel.setLayout(gl_panel);
		contentPane.setLayout(gl_contentPane);
	}
	
	//关闭窗口
	public void close() {
		this.setVisible(false);
	}
}

d.修改学生信息窗口

代码:

package view;
 
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Enumeration;
import java.util.List;
 
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
 
import model.Student;
import service.InsertService;
import service.InsertServiceImpl;
import service.SelectService;
import service.SelectServiceImpl;
import service.UpdateService;
import service.UpdateServiceImpl;
import util.DataUtil;
import util.ListToArray;
 
import javax.swing.AbstractButton;
import javax.swing.ButtonGroup;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import java.awt.Color;
import javax.swing.JToggleButton;
import java.awt.Font;
 
public class UpdateStudent extends JFrame {
 
	private JPanel contentPane;
	private JTextField textField;
	private Integer stuId;//需要修改的学生学号
	private SelectService select = new SelectServiceImpl();
	private UpdateService update = new UpdateServiceImpl();
	
 
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					UpdateStudent frame = new UpdateStudent(null);
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}
 
	/**
	 * Create the frame.
	 */
	public UpdateStudent(Integer stuId) {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 370, 386);
		contentPane = new JPanel();
		contentPane.setBackground(Color.WHITE);
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
 
		setContentPane(contentPane);
		
		JPanel panel = new JPanel();
		panel.setBackground(Color.WHITE);
		
		JLabel lblNewLabel_5 = new JLabel("修改学生信息");
		lblNewLabel_5.setFont(new Font("宋体", Font.BOLD, 15));
		lblNewLabel_5.setHorizontalAlignment(SwingConstants.CENTER);
		GroupLayout gl_contentPane = new GroupLayout(contentPane);
		gl_contentPane.setHorizontalGroup(
			gl_contentPane.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_contentPane.createSequentialGroup()
					.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
						.addGroup(gl_contentPane.createSequentialGroup()
							.addGap(89)
							.addComponent(lblNewLabel_5, GroupLayout.PREFERRED_SIZE, 121, GroupLayout.PREFERRED_SIZE))
						.addGroup(gl_contentPane.createSequentialGroup()
							.addContainerGap()
							.addComponent(panel, GroupLayout.PREFERRED_SIZE, 325, GroupLayout.PREFERRED_SIZE)))
					.addContainerGap(24, Short.MAX_VALUE))
		);
		gl_contentPane.setVerticalGroup(
			gl_contentPane.createParallelGroup(Alignment.TRAILING)
				.addGroup(gl_contentPane.createSequentialGroup()
					.addContainerGap()
					.addComponent(lblNewLabel_5, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
					.addPreferredGap(ComponentPlacement.RELATED)
					.addComponent(panel, GroupLayout.PREFERRED_SIZE, 312, GroupLayout.PREFERRED_SIZE)
					.addContainerGap())
		);
		
		//获取需要修改学生的信息
		Student stu = null;
		try {
			stu = select.selectStudentByStuId(stuId);
		} catch (Exception e2) {
			// TODO 自动生成的 catch 块
			e2.printStackTrace();
		}
		
		JLabel lblNewLabel = new JLabel("姓名:");
		lblNewLabel.setHorizontalAlignment(SwingConstants.RIGHT);
		
		
		
		JLabel lblNewLabel_1 = new JLabel("出生日期:");
		lblNewLabel_1.setHorizontalAlignment(SwingConstants.RIGHT);
		
		JLabel lblNewLabel_2 = new JLabel("性别:");
		lblNewLabel_2.setHorizontalAlignment(SwingConstants.RIGHT);
		
		JLabel lblNewLabel_3 = new JLabel("年级:");
		lblNewLabel_3.setHorizontalAlignment(SwingConstants.RIGHT);
		
		JLabel lblNewLabel_4 = new JLabel("班级:");
		lblNewLabel_4.setHorizontalAlignment(SwingConstants.RIGHT);
		
		JButton btnNewButton = new JButton("确认");
		
		btnNewButton.setBackground(Color.WHITE);
		
		//获取年级信息
		
		List<String> yearList = null;
		try {
			yearList = select.selectAllYear();
		} catch (Exception e) {
			e.printStackTrace();
		}
		String[] yearArray = null;
		//如果年级不为空,则将其转化为数组
		if(yearList != null) {
			yearArray = ListToArray.getArray(yearList);	
		}
		
		//初始化年级下拉框的值
		JComboBox comboBox = new JComboBox(yearArray);
		comboBox.setBackground(Color.WHITE);
		
		//获取当前选中的年级
		String year =  (String) comboBox.getSelectedItem();
		System.out.println(year);
		List<String> classList = null;
		//通过年级获取班级
		try {
			classList = select.selectclassByYear(year);
		} catch (Exception e) {
			e.printStackTrace();
		}
		String[] classArray = null;		
		if(classList != null) {
			classArray = ListToArray.getArray(classList);
		}	
		//初始化第二个下拉框的值
		JComboBox comboBox_1 = new JComboBox(classArray);
		comboBox_1.setBackground(Color.WHITE);
		
		//为第一个添加下拉框添加监听
		//控制第二个下拉框的值
		comboBox.addActionListener(new ActionListener() {
		    public void actionPerformed(ActionEvent evt) {
		    	comboBox_1.removeAllItems();
 
 
		        //获取当前选中的年级
		  		String year =  (String) comboBox.getSelectedItem();
		  		System.out.println(year);
		  		List<String> classList = null;
		  		//通过年级获取班级
		  		try {
		  			classList = select.selectclassByYear(year);
		  		} catch (Exception e) {
		  			e.printStackTrace();
		  		}
		  		String[] classArray = null;		
		  		if(classList != null) {
		  			classArray = ListToArray.getArray(classList);
		  		}
		          for (int i = 0; i < classArray.length; i++) {        	  
					comboBox_1.addItem(classArray[i]);
				}
		    }
		});
		
		
		
		textField = new JTextField();
			
		textField.setColumns(10);
		
		//获取年份数组并添加到下拉框中
		JComboBox comboBox_2 = new JComboBox(DataUtil.getYear());
		comboBox_2.setBackground(Color.WHITE);
		
		//获取月份数组并添加到下拉框中
		JComboBox comboBox_3 = new JComboBox(DataUtil.getMonth());
		comboBox_3.setBackground(Color.WHITE);
		
		//通过月份获取当月的天数
		//获取当前的月份
		int m = (int) comboBox_3.getSelectedItem();
		//获取年份
		int y = (int) comboBox_2.getSelectedItem();
		//获取天数并添加到下拉框中
		JComboBox comboBox_4 = new JComboBox(DataUtil.getDays(y, m));
		comboBox_4.setBackground(Color.WHITE);
		
		comboBox_2.addActionListener(new ActionListener() {
		    public void actionPerformed(ActionEvent evt) {
		        comboBox_3.setSelectedIndex(0);
		        comboBox_4.setSelectedIndex(0);       
		    }
		});
		comboBox_3.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				int month = (int) comboBox_3.getSelectedItem();
				//获取年份
				int year = (int) comboBox_2.getSelectedItem();
				Integer[] days = DataUtil.getDays(year, month);
				comboBox_4.removeAllItems();
				for (int i = 0; i < days.length; i++) {
					comboBox_4.addItem(days[i]);
				}
			}
		});
			
		JRadioButton rdbtnNewRadioButton = new JRadioButton("男");
		rdbtnNewRadioButton.setBackground(Color.WHITE);
		
		JRadioButton rdbtnNewRadioButton_1 = new JRadioButton("女");
		rdbtnNewRadioButton_1.setBackground(Color.WHITE);
		
		ButtonGroup bg = new ButtonGroup();
		rdbtnNewRadioButton.setSelected(true);
		bg.add(rdbtnNewRadioButton_1);
		bg.add(rdbtnNewRadioButton);
		
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String stuName = textField.getText();
				Integer age = DataUtil.getAge(
						(Integer)comboBox_2.getSelectedItem(),
						(Integer)comboBox_3.getSelectedItem(), 
						(Integer)comboBox_4.getSelectedItem());
				String sex = "";
				Enumeration<AbstractButton> radioBtns=bg.getElements();
				while (radioBtns.hasMoreElements()) {
					AbstractButton btn = radioBtns.nextElement();
					if(btn.isSelected()){
						sex = btn.getText();
						break;
					}
				}
				String className = (String) comboBox_1.getSelectedItem();
						
				if(stuName == null || stuName.equals("")){
					JOptionPane.showMessageDialog(null, "姓名不能为空!");
				}else {
					try {
						Integer classId = select.selectClassIdByClassName(className);
						int n = JOptionPane.showConfirmDialog(null, "是否确认进行修改?", "Title",JOptionPane.YES_NO_OPTION); 
						if(n == 0) {
							update.updateStudent(stuId,stuName, sex, age, classId);
							JOptionPane.showMessageDialog(null, "修改成功!");
							close();
						}
					} catch (Exception e1) {
						// TODO 自动生成的 catch 块
						e1.printStackTrace();
					}
				}			
			}
		});
		
		//初始化姓名为所需要修改的学生信息
		//因为储存的是年龄不是出生日期,无法计算具体日期则不初始化了
		if(stuId != null && !stuId.equals("")) {
			//初始化姓名
			textField.setText(stu.getName());
			
			//初始化性别
			if(stu.getSex().equals("男")) {
				rdbtnNewRadioButton.setSelected(true);
			}else {
				rdbtnNewRadioButton_1.setSelected(true);
			}
			
			String yearName = "";
			try {
				yearName = select.selectYearByClassName(stu.get_class());
			} catch (Exception e1) {
				// TODO 自动生成的 catch 块
				e1.printStackTrace();
			}
			//初始化年级
			 comboBox.setSelectedItem(yearName);
			 
			 //初始化班级
			 comboBox_1.setSelectedItem(stu.get_class());
		}
		
		JButton btnNewButton_1 = new JButton("退出");
		
		btnNewButton_1.setBackground(Color.WHITE);
		
		
		
		
		
		
		GroupLayout gl_panel = new GroupLayout(panel);
		gl_panel.setHorizontalGroup(
			gl_panel.createParallelGroup(Alignment.TRAILING)
				.addGroup(gl_panel.createSequentialGroup()
					.addContainerGap()
					.addGroup(gl_panel.createParallelGroup(Alignment.TRAILING)
						.addGroup(gl_panel.createSequentialGroup()
							.addGroup(gl_panel.createParallelGroup(Alignment.TRAILING)
								.addComponent(lblNewLabel, GroupLayout.PREFERRED_SIZE, 41, GroupLayout.PREFERRED_SIZE)
								.addGroup(gl_panel.createParallelGroup(Alignment.TRAILING, false)
									.addComponent(lblNewLabel_3, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
									.addComponent(lblNewLabel_2, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
									.addComponent(lblNewLabel_1, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
									.addComponent(lblNewLabel_4, GroupLayout.DEFAULT_SIZE, 92, Short.MAX_VALUE)))
							.addGap(18))
						.addGroup(gl_panel.createSequentialGroup()
							.addComponent(btnNewButton, GroupLayout.PREFERRED_SIZE, 83, GroupLayout.PREFERRED_SIZE)
							.addPreferredGap(ComponentPlacement.RELATED)))
					.addGroup(gl_panel.createParallelGroup(Alignment.LEADING)
						.addGroup(gl_panel.createSequentialGroup()
							.addComponent(comboBox_2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
							.addPreferredGap(ComponentPlacement.UNRELATED)
							.addComponent(comboBox_3, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
							.addPreferredGap(ComponentPlacement.UNRELATED)
							.addComponent(comboBox_4, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
						.addComponent(textField, GroupLayout.PREFERRED_SIZE, 138, GroupLayout.PREFERRED_SIZE)
						.addComponent(comboBox_1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(comboBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addGroup(gl_panel.createParallelGroup(Alignment.TRAILING)
							.addComponent(btnNewButton_1, GroupLayout.PREFERRED_SIZE, 81, GroupLayout.PREFERRED_SIZE)
							.addGroup(gl_panel.createSequentialGroup()
								.addComponent(rdbtnNewRadioButton, GroupLayout.PREFERRED_SIZE, 53, GroupLayout.PREFERRED_SIZE)
								.addGap(18)
								.addComponent(rdbtnNewRadioButton_1, GroupLayout.PREFERRED_SIZE, 59, GroupLayout.PREFERRED_SIZE))))
					.addGap(62))
		);
		gl_panel.setVerticalGroup(
			gl_panel.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_panel.createSequentialGroup()
					.addGap(27)
					.addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
						.addComponent(lblNewLabel)
						.addComponent(textField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
					.addGap(24)
					.addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
						.addComponent(lblNewLabel_1)
						.addComponent(comboBox_2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(comboBox_3, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(comboBox_4, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
					.addGap(18)
					.addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
						.addComponent(lblNewLabel_2)
						.addComponent(rdbtnNewRadioButton)
						.addComponent(rdbtnNewRadioButton_1))
					.addGap(18)
					.addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
						.addComponent(lblNewLabel_3)
						.addComponent(comboBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
					.addGap(18)
					.addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
						.addComponent(comboBox_1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(lblNewLabel_4))
					.addGap(31)
					.addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
						.addComponent(btnNewButton)
						.addComponent(btnNewButton_1))
					.addGap(42))
		);
		panel.setLayout(gl_panel);
		contentPane.setLayout(gl_contentPane);
		btnNewButton_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				close();
			}
		});
	}
	
	//关闭窗口
	public void close() {
		this.setVisible(false);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值