目录
一、系统介绍
1.运行环境
开发工具:Eclipse/IDEA
JDK版本:jdk1.8
Mysql版本:5.7
2.技术说明
Java+Swing+Mysql
3.系统功能
学生管理模块:实现对学生信息的添加、查询、修改、删除操作
课程管理模块:实现对课程信息的添加、查询、修改、删除操作
院系管理模块:实现对院系信息的添加、查询、删除操作
专业管理模块:实现对专业信息的添加、查询、删除操作
班级管理模块:实现对班级信息的添加、删除、查询班级人数操作
选课管理模块:实现对选课信息的添加、查询、删除操作
成绩管理模块:实现对成绩信息的添加、查询、修改、删除操作
奖惩管理模块:实现对奖惩信息的添加、查询、修改、删除操作
4.数据库
·学生信息表(stu_inf):
字段名 | 字段类型 | 小数点 | 是否主键 | 是否为空 | 是否外键 | 备注 |
Sno | Varchar(6) | 是 | 否 | 否 | 学号 | |
Sname | Varchar(10) | 否 | 否 | 否 | 姓名 | |
Ssex | Enum | 否 | 否 | 否 | 性别 | |
Sbirth | Date | 否 | 否 | 出生年月 | ||
Snative | Varchar(10) | 否 | 否 | 籍贯 | ||
Sclass | Int | 否 | 否 | 是 | 班级 | |
Smajor | Varchar(10) | 否 | 否 | 是 | 专业 |
外键:
名 | 字段 | 被引用的模式 | 被引用的表(父) | 被引用的字段 | 删除时 | 更新时 |
inf-class | Sclass, Smajor | meimaobingle | class | classnum, majorname | RESTRICT | RESTRICT |
·课程信息表(course):
字段名 | 字段类型 | 小数点 | 是否主键 | 是否为空 | 是否外键 | 备注 |
Cno | Varchar(4) | 是 | 否 | 否 | 课程号 | |
Cname | Varchar(40) | 否 | 否 | 否 | 课程名 | |
Ccredit | Smallint | 否 | 否 | 否 | 学分 | |
Cteacher | Varchar(10) | 否 | 否 | 否 | 执教教师 |
·院系信息表(department):
字段名 | 字段类型 | 小数点 | 是否主键 | 是否为空 | 是否外键 | 备注 |
departname | Varchar(10) | 是 | 否 | 否 | 院系名 |
·专业信息表(major):
字段名 | 字段类型 | 小数点 | 是否主键 | 是否为空 | 是否外键 | 备注 |
majorname | Varchar(10) | 是 | 否 | 否 | 专业名 | |
departname | Varchar(10) | 否 | 是 | 院系名 |
外键:
名 | 字段 | 被引用的模式 | 被引用的表(父) | 被引用的字段 | 删除时 | 更新时 |
major-depart | departname | meimaobingle | department | departname | CASCADE | CASCADE |
·班级信息表(class):
字段名 | 字段类型 | 小数点 | 是否主键 | 是否为空 | 是否外键 | 备注 |
majorname | Varchar(10) | 是 | 否 | 是 | 专业名 | |
classnum | Int | 是 | 否 | 否 | 班级号 | |
classsum | Smallint | 否 | 否 | 否 | 班级人数 |
外键:
名 | 字段 | 被引用的模式 | 被引用的表(父) | 被引用的字段 | 删除时 | 更新时 |
class-major | majorname | meimaobingle | major | majorname | CASCADE | CASCADE |
·选课信息表(stu_cou):
字段名 | 字段类型 | 小数点 | 是否主键 | 是否为空 | 是否外键 | 备注 |
Cno | Varchar(4) | 是 | 否 | 是 | 课程号 | |
Sno | Varchar(6) | 是 | 否 | 是 | 学号 | |
Grade | Smallint | 否 | 否 | 成绩 |
外键:
名 | 字段 | 被引用的模式 | 被引用的表(父) | 被引用的字段 | 删除时 | 更新时 |
cou_course | Cname, Cno | meimaobingle | course | Cname, Cno | CASCADE | CASCADE |
cou_inf | Sno | meimaobingle | stu_inf | Sno | CASCADE | CASCADE |
·奖惩信息表(stu_san):
字段名 | 字段类型 | 小数点 | 是否主键 | 是否为空 | 是否外键 | 备注 |
id | int | 是 | 否 | 否 | 奖惩ID | |
Sno | Varchar(6) | 否 | 否 | 是 | 学号 | |
Sname | Varchar(10) | 否 | 否 | 是 | 姓名 | |
Reward | Varchar(100) | 否 | 否 | 奖励信息 | ||
Punish | Varchar(100) | 否 | 否 | 惩罚信息 |
外键:
名 | 字段 | 被引用的模式 | 被引用的表(父) | 被引用的字段 | 删除时 | 更新时 |
san-inf | Sno, Sname | meimaobingle | stu_inf | Sno, Sname | CASCADE | CASCADE |
·用户信息表(login):
字段名 | 字段类型 | 小数点 | 是否主键 | 是否为空 | 是否外键 | 备注 |
username | Varchar(10) | 是 | 否 | 否 | 用户名 | |
password | Varchar(10) | 否 | 否 | 否 | 密码 |
二、系统实现
运行界面及其效果图
总体功能框架
三、部分代码
ClassAddInter .java
package view;
import java.awt.EventQueue;
import javax.swing.JInternalFrame;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import java.awt.Font;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.LayoutStyle.ComponentPlacement;
import util.Data;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.awt.event.ActionEvent;
public class ClassAddInter extends JInternalFrame {
private JTextField TextMajor;
private JTextField TextClassnum;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ClassAddInter frame = new ClassAddInter();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public ClassAddInter() {
setTitle("\u6DFB\u52A0\u73ED\u7EA7");
setBounds(100, 100, 450, 300);
JLabel lblNewLabel = new JLabel("\u4E13\u4E1A\u540D");
lblNewLabel.setFont(new Font("楷体", Font.PLAIN, 13));
JLabel lblNewLabel_1 = new JLabel("\u73ED\u7EA7\u53F7");
lblNewLabel_1.setFont(new Font("楷体", Font.PLAIN, 13));
TextMajor = new JTextField();
TextMajor.setColumns(10);
TextClassnum = new JTextField();
TextClassnum.setColumns(10);
JButton btnNewButton = new JButton("\u6DFB\u52A0\u73ED\u7EA7");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String major=TextMajor.getText();
Data db = new Data();
int classnum=-1;
try {
classnum = Integer.parseInt(TextClassnum.getText());
} catch (NumberFormatException e2) {
// TODO Auto-generated catch block
JOptionPane.showMessageDialog(null, "班级号格式得正确!");
e2.printStackTrace();
}
String sql1="insert into class(majorname,classnum) values('"+major+"',"+classnum+")";
try {
int i = db.updateSQL(sql1);
if(i!=0) JOptionPane.showMessageDialog(null, "添加成功");
else JOptionPane.showMessageDialog(null, "格式不正确,无法添加");
} catch (Exception e1) {
JOptionPane.showMessageDialog(null, "格式不正确,无法添加");
e1.printStackTrace();
// TODO Auto-generated catch block
}
try {
db.closeConnection();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
finally {
TextMajor.setText("");
TextClassnum.setText("");
}
}
});
btnNewButton.setFont(new Font("楷体", Font.PLAIN, 14));
JButton btnNewButton_1 = new JButton("\u9000\u51FA");
btnNewButton_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dispose();
}
});
btnNewButton_1.setFont(new Font("楷体", Font.PLAIN, 14));
GroupLayout groupLayout = new GroupLayout(getContentPane());
groupLayout.setHorizontalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(groupLayout.createSequentialGroup()
.addGap(49)
.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(groupLayout.createSequentialGroup()
.addComponent(btnNewButton, GroupLayout.PREFERRED_SIZE, 106, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ComponentPlacement.RELATED, 120, Short.MAX_VALUE)
.addComponent(btnNewButton_1, GroupLayout.PREFERRED_SIZE, 95, GroupLayout.PREFERRED_SIZE)
.addGap(64))
.addGroup(groupLayout.createSequentialGroup()
.addGroup(groupLayout.createParallelGroup(Alignment.TRAILING)
.addComponent(lblNewLabel_1)
.addComponent(lblNewLabel))
.addGap(28)
.addGroup(groupLayout.createParallelGroup(Alignment.LEADING, false)
.addComponent(TextClassnum)
.addComponent(TextMajor, GroupLayout.DEFAULT_SIZE, 153, Short.MAX_VALUE))
.addContainerGap(165, Short.MAX_VALUE))))
);
groupLayout.setVerticalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(groupLayout.createSequentialGroup()
.addGap(43)
.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
.addComponent(lblNewLabel)
.addComponent(TextMajor, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addGap(30)
.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
.addComponent(lblNewLabel_1)
.addComponent(TextClassnum, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addPreferredGap(ComponentPlacement.RELATED, 69, Short.MAX_VALUE)
.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
.addComponent(btnNewButton, GroupLayout.PREFERRED_SIZE, 44, GroupLayout.PREFERRED_SIZE)
.addComponent(btnNewButton_1, GroupLayout.PREFERRED_SIZE, 44, GroupLayout.PREFERRED_SIZE))
.addGap(43))
);
getContentPane().setLayout(groupLayout);
}
}
ClassDelInter.java
package view;
import java.awt.EventQueue;
import javax.swing.JInternalFrame;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import java.awt.Font;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.LayoutStyle.ComponentPlacement;
import util.Data;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class ClassDelInter extends JInternalFrame {
private JTextField TextMajor;
private JTextField TextClassnum;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ClassDelInter frame = new ClassDelInter();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public ClassDelInter() {
setTitle("\u5220\u9664\u73ED\u7EA7");
setBounds(100, 100, 450, 300);
JLabel lblNewLabel = new JLabel("\u4E13\u4E1A\u540D");
lblNewLabel.setFont(new Font("楷体", Font.PLAIN, 13));
JLabel lblNewLabel_1 = new JLabel("\u73ED\u7EA7\u53F7");
lblNewLabel_1.setFont(new Font("楷体", Font.PLAIN, 14));
TextMajor = new JTextField();
TextMajor.setColumns(10);
TextClassnum = new JTextField();
TextClassnum.setColumns(10);
JButton btnNewButton = new JButton("\u5220\u9664");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Data db = new Data();
int classnum=-1;
try {
classnum = Integer.parseInt(TextClassnum.getText());
} catch (NumberFormatException e2) {
// TODO Auto-generated catch block
JOptionPane.showMessageDialog(null, "班级号格式得正确!");
e2.printStackTrace();
}
String major=TextMajor.getText();
String sql="delete from class where classnum="+classnum+" and majorname='"+major+"'";
try {
int i = db.updateSQL(sql);
if(i!=0) JOptionPane.showMessageDialog(null, "删除成功");
else JOptionPane.showMessageDialog(null, "删除失败","删除操作",JOptionPane.INFORMATION_MESSAGE);
} catch (Exception e1) {
e1.printStackTrace();
JOptionPane.showMessageDialog(null, "删除失败","删除操作",JOptionPane.INFORMATION_MESSAGE);
// TODO Auto-generated catch block
}
try {
db.closeConnection();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
finally {
TextClassnum.setText("");
TextMajor.setText("");
}
}
});
btnNewButton.setFont(new Font("楷体", Font.PLAIN, 14));
JButton btnNewButton_1 = new JButton("\u9000\u51FA");
btnNewButton_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dispose();
}
});
btnNewButton_1.setFont(new Font("楷体", Font.PLAIN, 14));
GroupLayout groupLayout = new GroupLayout(getContentPane());
groupLayout.setHorizontalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(Alignment.TRAILING, groupLayout.createSequentialGroup()
.addGap(81)
.addComponent(btnNewButton, GroupLayout.PREFERRED_SIZE, 89, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ComponentPlacement.RELATED, 79, Short.MAX_VALUE)
.addComponent(btnNewButton_1, GroupLayout.PREFERRED_SIZE, 84, GroupLayout.PREFERRED_SIZE)
.addGap(101))
.addGroup(groupLayout.createSequentialGroup()
.addGap(56)
.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
.addComponent(lblNewLabel)
.addComponent(lblNewLabel_1))
.addGap(26)
.addGroup(groupLayout.createParallelGroup(Alignment.LEADING, false)
.addComponent(TextClassnum)
.addComponent(TextMajor, GroupLayout.DEFAULT_SIZE, 122, Short.MAX_VALUE))
.addContainerGap(188, Short.MAX_VALUE))
);
groupLayout.setVerticalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(groupLayout.createSequentialGroup()
.addGap(28)
.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
.addComponent(TextMajor, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addGroup(groupLayout.createSequentialGroup()
.addComponent(lblNewLabel)
.addGap(32)
.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
.addComponent(lblNewLabel_1)
.addComponent(TextClassnum, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))))
.addPreferredGap(ComponentPlacement.RELATED, 71, Short.MAX_VALUE)
.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
.addComponent(btnNewButton_1, GroupLayout.PREFERRED_SIZE, 53, GroupLayout.PREFERRED_SIZE)
.addComponent(btnNewButton, GroupLayout.PREFERRED_SIZE, 52, GroupLayout.PREFERRED_SIZE))
.addGap(51))
);
getContentPane().setLayout(groupLayout);
}
}
login.java
package view;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import util.Data;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import java.awt.Color;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import java.awt.Font;
import javax.swing.JButton;
import javax.swing.LayoutStyle.ComponentPlacement;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.awt.event.ActionEvent;
import javax.swing.ImageIcon;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
public class login extends JFrame {
/**
*
* 登录页面
*/
private static final long serialVersionUID = 1L;
private JPanel contentPane;
private JTextField TextUsername;
private JPasswordField TextPassword;
/**
* 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() {
setTitle("\u767B\u5F55\u9875\u9762");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
JLabel welcome = new JLabel("\u6B22\u8FCE\u767B\u5F55\u77F3\u6CB9\u5927\u5B66\u5B66\u751F\u5B66\u7C4D\u7CFB\u7EDF");
welcome.setFont(new Font("宋体", Font.PLAIN, 15));
welcome.setBackground(Color.WHITE);
welcome.setLabelFor(contentPane);
JButton loginBtn = new JButton("\u767B\u5F55");
loginBtn.setToolTipText("");
loginBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String userName=TextUsername.getText();
@SuppressWarnings("deprecation")
String Password=TextPassword.getText();
Data db=new Data();
String sql="select* from login where username='"+userName+"' and password='"+Password+"'";
ResultSet rs = db.getResult(sql);
try {
if(rs.next()){
db.closeConnection();
if(JOptionPane.showConfirmDialog(null, "登录成功")==0)
{
dispose();
MainFrm main=new MainFrm();
main.setVisible(true);
}
}
else
{
JOptionPane.showMessageDialog(null, "请输入正确的管理员信息");
TextUsername.setText("");
TextPassword.setText("");
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
JOptionPane.showMessageDialog(null, "请输入正确的管理员信息");
TextUsername.setText("");
TextPassword.setText("");
e1.printStackTrace();
}
}
});
JButton exitBtn = new JButton("\u9000\u51FA");
exitBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int i=JOptionPane.showConfirmDialog(null,"不会吧,这就有人要退了?","提示", JOptionPane.YES_NO_OPTION);
if(i==0) System.exit(0);
}
});
JLabel lblNewLabel = new JLabel("");
lblNewLabel.setIcon(new ImageIcon(login.class.getResource("/image/none.ico")));
JLabel lblNewLabel_1 = new JLabel("\u7BA1\u7406\u5458\u8D26\u53F7");
JLabel lblNewLabel_2 = new JLabel("\u7BA1\u7406\u5458\u5BC6\u7801");
TextUsername = new JTextField();
TextUsername.setColumns(10);
TextPassword = new JPasswordField();
GroupLayout gl_contentPane = new GroupLayout(contentPane);
gl_contentPane.setHorizontalGroup(
gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup()
.addContainerGap(102, Short.MAX_VALUE)
.addGroup(gl_contentPane.createParallelGroup(Alignment.TRAILING)
.addGroup(gl_contentPane.createSequentialGroup()
.addComponent(welcome, GroupLayout.PREFERRED_SIZE, 292, GroupLayout.PREFERRED_SIZE)
.addGap(30))
.addGroup(gl_contentPane.createSequentialGroup()
.addComponent(lblNewLabel)
.addGap(180))))
.addGroup(gl_contentPane.createSequentialGroup()
.addGap(81)
.addComponent(loginBtn, GroupLayout.PREFERRED_SIZE, 69, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ComponentPlacement.RELATED, 130, Short.MAX_VALUE)
.addComponent(exitBtn, GroupLayout.PREFERRED_SIZE, 73, GroupLayout.PREFERRED_SIZE)
.addGap(71))
.addGroup(gl_contentPane.createSequentialGroup()
.addGap(65)
.addGroup(gl_contentPane.createParallelGroup(Alignment.TRAILING)
.addComponent(lblNewLabel_2)
.addComponent(lblNewLabel_1))
.addPreferredGap(ComponentPlacement.UNRELATED)
.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING, false)
.addComponent(TextPassword)
.addComponent(TextUsername, GroupLayout.DEFAULT_SIZE, 149, Short.MAX_VALUE))
.addContainerGap(140, Short.MAX_VALUE))
);
gl_contentPane.setVerticalGroup(
gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup()
.addContainerGap()
.addComponent(welcome, GroupLayout.PREFERRED_SIZE, 36, GroupLayout.PREFERRED_SIZE)
.addGap(18)
.addComponent(lblNewLabel)
.addGap(20)
.addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
.addComponent(lblNewLabel_1)
.addComponent(TextUsername, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addGap(26)
.addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
.addComponent(lblNewLabel_2)
.addComponent(TextPassword, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addGap(37)
.addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
.addComponent(loginBtn, GroupLayout.DEFAULT_SIZE, 38, Short.MAX_VALUE)
.addComponent(exitBtn, GroupLayout.PREFERRED_SIZE, 39, GroupLayout.PREFERRED_SIZE))
.addGap(37))
);
contentPane.setLayout(gl_contentPane);
}
}