学生课程注册管理系统的实现
实验内容与步骤
1.设计课程注册管理系统的类图,应用面向对象的对象,类,继承,多态,聚合的方法实现各个类
2.设计一个Student类 ,该类包括学生学号sID和用户账号及密码
3.设计一个teacher类,该类包括教师号tID和职称Level实现教师信息显示及课程安排
4.设计一个register类,包括实现注册管理员的信息显示及其课程设置
类图:
项目结构:
login.java:
package sy1.student;
import javax.swing.*;
import java.awt.*;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
public class login extends JFrame {
public int width = Toolkit.getDefaultToolkit().getScreenSize().width;//获取屏幕的宽
public int height = Toolkit.getDefaultToolkit().getScreenSize().height;//获取屏幕的高
JPanel jp = new JPanel();
ImageIcon image = new ImageIcon("out/production/zhuceglixitong/sy1/student/R-C.jpg");
private JLabel JLtitle;
private JLabel JLname;
private JLabel JLpwd;
static JTextField JTname;
static JPasswordField JTpwd;
private JButton JBsure;
private JRadioButton Bt1, Bt2, Bt3; //定义单选按钮
ButtonGroup group = new ButtonGroup(); //按钮组 实现单选
public login() {// 登录界面
this.setTitle("学生选课系统");
this.setBounds((width - 800) / 2, (height - 600) / 2 - 20, 800, 600); //使窗体居中
this.setResizable(false);
JLtitle = new JLabel("用户登录界面");
JLtitle.setFont(new java.awt.Font("宋体", 4, 50));
JLtitle.setForeground(Color.black);
JLname = new JLabel("用户名:");//设置Label和按钮名
JLname.setForeground(Color.black);
JLpwd = new JLabel("密 码:");
JLpwd.setForeground(Color.black);
JLpwd.setFont(new java.awt.Font("宋体", 4, 20));
JTname = new JTextField(25);
JTpwd = new JPasswordField(25);//文本框
JLname.setFont(new java.awt.Font("宋体", 4, 20));
JBsure = new JButton("登录");
Bt1 = new JRadioButton("学生");
Bt2 = new JRadioButton("老师");
Bt3 = new JRadioButton("管理员");
JLabel background = new JLabel(image); //将背景图片封装为一个JLable
// Jrb1.setFocusPainted(false);
// Jrb2.setFocusPainted(false);
// Jrb3.setFocusPainted(false);
Bt3.setBounds(525, 330, 65, 35);
Bt2.setBounds(470, 330, 55, 35);
Bt1.setBounds(415, 330, 55, 35);
JLtitle.setBounds(360, 50, 300, 100);
JLname.setBounds(370, 240, 80, 35);//设置Label和按钮大小
JTname.setBounds(450, 240, 170, 25);
JLpwd.setBounds(370, 280, 80, 35);
JTpwd.setBounds(450, 280, 170, 25);
JBsure.setBounds(420, 380, 170, 35);
// JBexit.setBounds(180,130,60,25);
background.setBounds(0, 0, 800, image.getIconHeight());
background.setOpaque(false); //背景透明
background.setLayout(null);
group.add(Bt1);
group.add(Bt2);
group.add(Bt3); //将单选组件放在一个组件组里从而实现单选
background.add(this.Bt1);
background.add(this.Bt2);
background.add(this.Bt3);
background.add(JLtitle);
background.add(JLname);
background.add(JTname);
background.add(JLpwd);
background.add(JTpwd);
background.add(JBsure);
jp.add(background);
this.add(jp);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
this.setVisible(true);
// //添加按钮组件监听
Bt1.addActionListener(e -> {
JBsure.addActionListener(a-> {
String studentname= JTname.getText();
String studentpassword= String.valueOf(JTpwd.getPassword());
if(studentname.equals("")){
JOptionPane.showMessageDialog(null,"账号不能为空","警告⚠",JOptionPane.ERROR_MESSAGE);
}
if(studentpassword.equals("")){
JOptionPane.showMessageDialog(null,"密码不能为空","警告⚠",JOptionPane.ERROR_MESSAGE);
}
try{
new SQLConnection();
Connection con= SQLConnection.getConnection();
Statement sta=con.createStatement();
String sql="select * from student where username='"+studentname+"'and password= '"+ studentpassword+"'";
ResultSet rs=sta.executeQuery(sql);
if (rs.next()) {
this.dispose();
new Student();
}
else {
//弹出消息对话框
JOptionPane.showMessageDialog(null,"账号或者密码错误","警告⚠",JOptionPane.ERROR_MESSAGE);
JTpwd.requestFocus();
}
}catch(Exception e1){
e1.printStackTrace();
}
});
});
Bt2.addActionListener(e -> {//teacher登录
JBsure.addActionListener(a->{
String teachername=JTname.getText();
String teacherpassword=String.valueOf(JTpwd.getPassword());//转换为String类型
if(teachername.equals("")){
JOptionPane.showMessageDialog(null,"账号不能为空","警告⚠",JOptionPane.ERROR_MESSAGE); //同理判断是否为空
}
if(teacherpassword.equals("")){
JOptionPane.showMessageDialog(null,"密码不能为空","警告⚠",JOptionPane.ERROR_MESSAGE);
}
try{
new SQLConnection();
Connection con= SQLConnection.getConnection();
Statement sta=con.createStatement();
String sql="select * from teacher where teachername='"+teachername+"'and teacherpassword= '"+ teacherpassword+"'";
ResultSet rs=sta.executeQuery(sql);
if(rs.next()){
this.dispose();//关闭窗口释放一定资源
new teacher();
}else{
JOptionPane.showMessageDialog(null,"账号或者密码错误","警告⚠",JOptionPane.ERROR_MESSAGE);
JTpwd.requestFocus();
}
}catch (Exception e1) {
}
});
});
Bt3.addActionListener(e -> {//管理员登录
JBsure.addActionListener(a->{
String rname=JTname.getText();
String rpassword=String.valueOf(JTpwd.getPassword());//转换为String类型
if(rname.equals("")){
JOptionPane.showMessageDialog(null,"账号不能为空","警告⚠",JOptionPane.ERROR_MESSAGE); //同理判断是否为空
}
if(rpassword.equals("")){
JOptionPane.showMessageDialog(null,"密码不能为空","警告⚠",JOptionPane.ERROR_MESSAGE);
}
try{
new SQLConnection();
Connection con= SQLConnection.getConnection();
Statement sta=con.createStatement();
String sql="select * from register where rname='"+rname+"'and rpassword= '"+rpassword+"'";
ResultSet rs=sta.executeQuery(sql);
if(rs.next()){
this.dispose();//关闭窗口释放一定资源
new Register();
}else{
JOptionPane.showMessageDialog(null,"账号或者密码错误","警告⚠",JOptionPane.ERROR_MESSAGE);
JTpwd.requestFocus();
}
}catch (Exception e1) {
}
});
});
}
public static void main(String []args){
new login();
}
}
student.java:
import java.util.Vector;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
//显示该登录的学生的基本信息 和 所学修的课程信息 数据库
public class Student extends JFrame {
private JButton bt1;
public String sID;
public String Grade;
private JButton bt2;
private JTable table1;
String name = login.JTname.getText();
public Student(){
ImageIcon background = new ImageIcon("out/production/zhuceglixitong/sy1/student/01c8f15aeac135a801207fa16836ae.jpg@1280w_1l_2o_100sh.jpg");
JLabel label = new JLabel(background);
// 把标签的大小位置设置为图片刚好填充整个面板
label.setBounds(0, 0, this.getWidth(), this.getHeight());
// 把内容窗格转化为JPanel,否则不能用方法setOpaque()来使内容窗格透明
JPanel imagePanel = (JPanel) this.getContentPane();
imagePanel.setOpaque(false);
// 把背景图片添加到分层窗格的最底层作为背景
this.getLayeredPane().add(label, new Integer(Integer.MIN_VALUE));
this.setTitle("学生界面");
this.setBounds(450,100,1200,900);
this.setVisible(true);
this.setResizable(false);
this.setLayout(null);
bt1=new JButton("学生信息显示");
bt2=new JButton("学生选课信息");
bt1.setFont(new java.awt.Font("宋体",4,25));
bt2.setFont(new java.awt.Font("宋体",4,25));
JLabel jl=new JLabel();
JLabel we=new JLabel("欢迎来到学生信息界面!");
jl.setBounds(100,100,300,800);
we.setBounds(600,300,600,300);
we.setFont(new java.awt.Font("楷体",4,45));
bt1.setBounds(100,150,200,100);
bt2.setBounds(100,400,200,100);
jl.add(bt1);
jl.add(bt2);
this.add(jl);
this.add(we);
bt1.addActionListener(e->{
Vector titlename = new Vector();//{"学号","年级"};
titlename.add("学号");
titlename.add("年级");
titlename.add("姓名");
titlename.add("年龄");
Vector rowdata = new Vector(); //数据
ResultSet rs = null;
try {
new SQLConnection(); //连接数据库
Connection con = SQLConnection.getConnection();
Statement stmt = con.createStatement(); //statement声明
String sql = "select sID,Grade,name,sage from student where username = '" + name + "' "; //SQL选择查询语句以该账号为条件查询该表
rs = stmt.executeQuery(sql);
} catch (Exception e1) {
System.out.println(e1);
System.out.println("查询出错");
}
try{
while (rs.next()) {
Vector hang = new Vector();
hang.add(rs.getString("sID"));
hang.add(rs.getString("Grade"));
hang.add(rs.getString("name"));
hang.add(rs.getString("sage"));
rowdata.add(hang);
}
}catch(Exception e1){
System.out.println("添加错误");
}
table1 = new JTable(rowdata, titlename);
table1.setEnabled(false); //表格不能编辑
table1.setFont(new java.awt.Font("宋体",4,20));
JScrollPane sroll = new JScrollPane(table1);
DefaultTableCellRenderer r=new DefaultTableCellRenderer();
r.setHorizontalAlignment(JLabel.CENTER);
table1.setDefaultRenderer(Object.class,r);
JFrame jf = new JFrame();
jf.setTitle("个人信息");
jf.setBounds(200, 200, 600, 200); //使窗体居中
jf.setResizable(false);
jf.add(sroll);
jf.setVisible(true);
});
bt2.addActionListener(e->{
Vector tname = new Vector();
tname.add("课程名");
tname.add("课程号");
tname.add("学时");
tname.add("学分");
tname.add("上课教室");
tname.add("上课时间");
Vector rowdata = new Vector(); //数据
ResultSet rs = null;
try {
new SQLConnection(); //连接数据库
Connection con = SQLConnection.getConnection();
Statement stmt = con.createStatement(); //statement声明
String sql = "select cName,course.cID,xSS,xF,sKroom,sKtime from course,student,course_offering where course.cID=course_offering.cID and student.sID=course_offering.sID and username = '" + name + "' ";
rs = stmt.executeQuery(sql);
} catch (Exception e1) {
System.out.println(e1);
System.out.println("查询出错");
}
try{
while (rs.next()) {
Vector hang=new Vector();
hang.add(rs.getString("cName"));
hang.add(rs.getString("course.cID"));
hang.add(rs.getString("xSS"));
hang.add(rs.getString("xF"));
hang.add(rs.getString("sKroom"));
hang.add(rs.getString("sKtime"));
rowdata.add(hang);
}
}catch(Exception e1){
System.out.println("添加错误");
}
table1 = new JTable(rowdata, tname);
table1.setEnabled(false); //表格不能编辑
table1.setFont(new java.awt.Font("宋体",4,20));
JScrollPane sroll = new JScrollPane(table1);
DefaultTableCellRenderer r=new DefaultTableCellRenderer();
r.setHorizontalAlignment(JLabel.CENTER);
table1.setDefaultRenderer(Object.class,r);
JFrame jf = new JFrame();
jf.setTitle("课程信息");
jf.setBounds(200, 200, 600, 200); //使窗体居中
jf.setResizable(false);
jf.add(sroll);
jf.setVisible(true);
});
}
public static void main(String []args){
new Student();//调用构造方法
}
}
SQLConnection.java:这里需创建lib文件下并在lib目录下导入jar包
package sy1.student;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class SQLConnection {
public static Connection getConnection(){
String driver = "com.mysql.cj.jdbc.Driver";//使用Jar包驱动
String url = "jdbc:mysql://localhost:3306/studentinform?useUnicode=true&characterEncoding=utf8&useSSL=true";
String username = "root";//数据库用户名
String password = "1828808086";//数据库密码
Connection conn = null;
try {
Class.forName(driver); //classLoader,加载对应驱动
conn = (Connection) DriverManager.getConnection(url, username, password);
System.out.println("数据库已连接");
} catch (ClassNotFoundException e) {//异常捕获
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static void main(String[] args) {
SQLConnection.getConnection();
}
}
teacher表:
student表:
register表: