目录

一、系统介绍

1.运行环境

2.技术说明

3.系统功能

4.数据库实体E-R图设计

5.数据库表的设计

二、系统实现

1.用户登录

2.主界面

3.数据库连接

4.数据查询

5.查询课程信息

6.添加学生信息

7.修改学生信息

三、部分代码

1.ChangePwd.java

2.Login.java

3.Main.java

5.备注


一、系统介绍

1.运行环境

开发工具:Eclipse/IDEA

JDK版本:jdk1.8

Mysql版本:5.7

2.技术说明

Java+Swing+Mysql

3.系统功能

主要功能包括 1.管理学生信息,其中包括添加,删除,修改等操作。2.管理课程信息,其中包括添加,删除,修改等操作。3.管理选课信息,其中包括添加,删除,修改等操作。4.查询信息,其中包括查询学生信息,查询课程信息,查询选课信息等操作

4.数据库实体E-R图设计

学生管理实体E-R图

课程管理实体E-R图

选课管理实体E-R图

5.数据库表的设计

数据库名:user

管理员表(user)

列名

数据类型

长度

是否为空

uno

int

11

name

varchar

10

password

varchar

10

数据库名:stu

学生表(stu)

列名

数据类型

长度

是否为空

sno

Int

11

name

varchar

10

sex

varchar

10

age

int

10

sdept

varchar

10

数据库名:course

课程表(course)

列名

数据类型

长度

是否为空

cno

char

4

cname

varchar

10

credit

Int

10

数据库名:sc

选课表(sc)

列名

数据类型

长度

是否为空

sno

char

11

cno

char

4

score

Int

10

二、系统实现

根据需求分析阶段得到的功能需求,可将系统功能大概分为六个模块:这几个模块用户登录、学生管理、课程管理、选课管理、查询管理、系统退出

系统数据流程图

1.用户登录

public void actionPerformed(ActionEvent e) {if (e.getActionCommand().equals("登录")) {try {DBUtil.initst();String stuname=nameField.getText();String stupwd=passwordField.getText();//根据数据库表中的用户名查密码进行匹配DBUtil.rs=DBUtil.st.executeQuery("select password from user where name='"+stuname+"'");if (DBUtil.rs.next()) {if (DBUtil.rs.getString(1).equals(stupwd)) {//如果密码正确就显示主页面this.hide();new Main().show();} else {//如果密码错误弹出框JOptionPane.showMessageDialog(null, "密码错误,请联系管理员");}}else {//姓名不对弹出提示框JOptionPane.showMessageDialog(null, "用户不存在");}DBUtil.closeDB();} catch (SQLException ex) {ex.printStackTrace();}}else {System.exit(0)} }

2.主界面

主界面主要是用于对选择相应的功能进行相应的功能,主界面主要包括学生管理、课程管理、选课管理、数据查询、系统退出五大功能。    主界面添加JMenuBar菜单条,和JMenu菜单,和JMenuItem菜单项。三个菜单包括:学生管理、课程管理、选课管理和数据查询。学生管理中包括:增加学生、修改学生、删除学生。课程管理中包括:增加课程、修改课程、删除课程。选课管理中包括:增加选课、修改选课、删除选课。数据查询主要包括学生查询、课程查询、选课查询。还有一个单独的系统退出。

重要代码:

// 学生表JTable jTable = new JTable();jTable.setModel(userModel);JScrollPane jScrollPane = new JScrollPane();jScrollPane.setViewportView(jTable);add(jScrollPane, BorderLayout.CENTER);// 菜单栏JMenuBar menuBar = new JMenuBar();setJMenuBar(menuBar);// 学生信息菜单栏JMenu user = new JMenu("学生管理");menuBar.add(user);JMenuItem addstu = new JMenuItem("增加学生");JMenuItem updatestu = new JMenuItem("修改学生");JMenuItem deletestu = new JMenuItem("删除学生");user.add(addstu);user.add(updatestu);user.add(deletestu);// 系统退出JLabel exit = new JLabel("系统退出");exit.setForeground(Color.red);exit.setFont(new java.awt.Font("宋体", 1, 15));menuBar.add(exit);// 查询区JPanel jPaneln = new JPanel();JLabel nameJLabel = new JLabel("学号/课程号:");JTextField nameField = new JTextField(20);JButton selectbtn = new JButton("查询");jPaneln.add(nameJLabel);jPaneln.add(nameField);jPaneln.add(selectbtn);add(jPaneln, BorderLayout.NORTH);// 查询学号/课程号按钮selectbtn.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubString stu = nameField.getText();String sql = "select * from stu where sno='" + stu + "'";userModel.reload(sql);String sql1 = "select * from course where cno='" + stu + "'";coursemodel.reload(sql1);String sql2 = "SELECT sc.sno,stu.name,sc.cno,course.cname,credit,score FROM sc,stu,course where sc.sno=stu.sno and course.cno=sc.cno and sc.sno='"+ stu + "'";selectsmodel.reload(sql2);}});

3.数据库连接

学生、课程以及成绩的增删改查都是建立在连接数据库的基础之上,在MySQL里建立用户管理员表、学生表、课程表、选课表等。建立JDBC数据源的连接。

连接数据库重要代码:

public class DBUtil {static Connection con;public static Statement st;static PreparedStatement ps;public static ResultSet rs;static String url="jdbc:mysql://localhost:3306/studb" />

4.数据查询

5.查询课程信息

重要代码:

/* * 查询管理 */// 查询所有学生信息querystu.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stub// 刷新jTable并把jTable显示出来userModel.reload(null);jTable.setModel(userModel);}});// 查询所有课程信息querycourse.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stub// 刷新jTable并把jTable显示出来coursemodel.reload(null);jTable.setModel(coursemodel);}});// 查询所有学生选课信息queryselect.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stub// 刷新jTable并把jTable显示出来selectsmodel.reload(null);jTable.setModel(selectsmodel);}});

6.添加学生信息

添加学生信息主要代码:

public void actionPerformed(ActionEvent e) {if (e.getActionCommand().equals("确定")) {try {DBUtil.initst();String sno=snoField.getText();String stuname=nameField.getText();String sex=sexField.getText();String age=ageField.getText();String sdept=sdeptField.getText();int n=DBUtil.st.executeUpdate("insert into stu values('"+sno+"','"+stuname+"','"+sex+"','"+age+"','"+sdept+"')");if (n>0) {JOptionPane.showMessageDialog(null, "添加成功"); } else {JOptionPane.showMessageDialog(null, "添加失败"); }DBUtil.closeDB();} catch (SQLException ex) {ex.printStackTrace();}DBUtil.closeDB();}else {this.hide();UserModel.reload(null);}}

7.修改学生信息

这部分的主要功能是更改数据库中学生的基本信息。查询出学生表,点击表中的某一行进行选中,再点击学生信息菜单栏的修改学生信息就可以进行修改

修改学生信息:

三、部分代码

1.ChangePwd.java

package body;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.SQLException;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPasswordField;import javax.swing.JTextField;public class ChangePwd extends JFrame implements ActionListener {JTextField nameField;JPasswordField passwordField;public ChangePwd() {setTitle("修改密码");setLayout(null);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(500,200,350,300);JLabel nameJLabel=new JLabel("账号");nameField=new JTextField();JLabel passJLabel=new JLabel("密码");passwordField=new JPasswordField();nameJLabel.setBounds(50,15,100,100);nameField.setBounds(100,50,200,30);passJLabel.setBounds(50,70,100,100);passwordField.setBounds(100,100,200,30);JButton loginButton=new JButton("确定");JButton cancelButton=new JButton("取消");loginButton.setBounds(100,150,80,30);cancelButton.setBounds(200,150,80,30);add(nameJLabel);add(nameField);add(passJLabel);add(passwordField);add(loginButton);add(cancelButton);loginButton.setActionCommand("登录");cancelButton.setActionCommand("取消");loginButton.addActionListener(this);cancelButton.addActionListener(this);setVisible(true);}@Overridepublic void actionPerformed(ActionEvent e) {if (e.getActionCommand().equals("登录")) {try {DBUtil.initst();String stuname=nameField.getText();String stupwd=passwordField.getText();int n=DBUtil.st.executeUpdate("update user set password='"+stupwd+"' where name='"+stuname+"'");if (n>0) {JOptionPane.showMessageDialog(null, "修改成功"); } else {JOptionPane.showMessageDialog(null, "修改失败"); }DBUtil.closeDB();} catch (SQLException ex) {ex.printStackTrace();}}else {this.hide();new Login().show();} }public static void main(String[] args) {ChangePwd changePwd=new ChangePwd();}}

2.Login.java

package body;import java.awt.Graphics;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.SQLException;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JPasswordField;import javax.swing.JTextField;public class Login extends JFrame implements ActionListener {JTextField nameField;JPasswordField passwordField;public Login() {JPanel panel = new ImagePanel();add(panel);panel.setLayout(null);setTitle("系统登录");setLayout(null);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(500,200,350,300);//添加账号密码文本及文本框JLabel nameJLabel=new JLabel("账号");nameField=new JTextField();JLabel passJLabel=new JLabel("密码");passwordField=new JPasswordField();nameJLabel.setBounds(50,15,100,100);nameField.setBounds(100,50,200,30);passJLabel.setBounds(50,70,100,100);passwordField.setBounds(100,100,200,30);//登录取消按钮JButton loginButton=new JButton("登录");JButton cancelButton=new JButton("取消");loginButton.setBounds(50,150,80,30);cancelButton.setBounds(220,150,80,30);//添加到面版add(nameJLabel);add(nameField);add(passJLabel);add(passwordField);add(loginButton);add(cancelButton);//给登录取消按钮添加控件loginButton.setActionCommand("登录");cancelButton.setActionCommand("取消");loginButton.addActionListener(this);cancelButton.addActionListener(this);setVisible(true);}@Overridepublic void actionPerformed(ActionEvent e) {if (e.getActionCommand().equals("登录")) {try {DBUtil.initst();String stuname=nameField.getText();String stupwd=passwordField.getText();//根据数据库表中的用户名查密码进行匹配DBUtil.rs=DBUtil.st.executeQuery("select password from user where name='"+stuname+"'");if (DBUtil.rs.next()) {if (DBUtil.rs.getString(1).equals(stupwd)) {//如果密码正确就显示主页面this.hide();new Main().show();} else {//如果密码错误弹出框JOptionPane.showMessageDialog(null, "密码错误,请联系管理员");}}else {//姓名不对弹出提示框JOptionPane.showMessageDialog(null, "用户不存在");}DBUtil.closeDB();} catch (SQLException ex) {ex.printStackTrace();}}else {System.exit(0);} }class ImagePanel extends JPanel {protected void paintComponent(Graphics g) {super.paintComponent(g);ImageIcon icon = new ImageIcon("icon/1.jpg");g.drawImage(icon.getImage(), 0, 0, null);}}public static void main(String[] args) {Login login=new Login();}}

3.Main.java

package body;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.sql.SQLException;import java.util.Vector;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.JTextField;import course.AddCourse;import course.CourseModel;import course.UpdateCourse;import selects.AddSelect;import selects.SelectsModel;import selects.UpdateSelect;import stu.AddStu;import stu.UpdateStu;import stu.UserModel;public class Main extends JFrame {public static UserModel userModel;public static CourseModel coursemodel;public static SelectsModel selectsmodel;JTextField exit;public Main() {setTitle("学生选课管理系统");setBounds(300, 100, 1000, 800);String sql = "select * from stu";userModel = new UserModel();userModel.init(sql);String sql1 = "select * from course";coursemodel = new CourseModel();coursemodel.init(sql1);String sql2 = "SELECT sc.sno,stu.name,sc.cno,course.cname,credit,score FROM sc,stu,course where sc.sno=stu.sno and course.cno=sc.cno";selectsmodel = new SelectsModel();selectsmodel.init(sql2);// 学生表JTable jTable = new JTable();jTable.setModel(userModel);JScrollPane jScrollPane = new JScrollPane();jScrollPane.setViewportView(jTable);add(jScrollPane, BorderLayout.CENTER);// 菜单栏JMenuBar menuBar = new JMenuBar();setJMenuBar(menuBar);// 学生信息菜单栏JMenu user = new JMenu("学生管理");menuBar.add(user);JMenuItem addstu = new JMenuItem("增加学生");JMenuItem updatestu = new JMenuItem("修改学生");JMenuItem deletestu = new JMenuItem("删除学生");user.add(addstu);user.add(updatestu);user.add(deletestu);// 课程管理菜单栏JMenu course = new JMenu("课程管理");menuBar.add(course);JMenuItem addcourse = new JMenuItem("增加课程");JMenuItem updatecourse = new JMenuItem("修改课程");JMenuItem deletecourse = new JMenuItem("删除课程");course.add(addcourse);course.add(updatecourse);course.add(deletecourse);// 选课管理菜单栏JMenu select = new JMenu("选课管理");menuBar.add(select);JMenuItem addselect = new JMenuItem("添加选课");JMenuItem updateselect = new JMenuItem("修改选课");JMenuItem deleteselect = new JMenuItem("删除选课");select.add(addselect);select.add(updateselect);select.add(deleteselect);// 查询管理菜单栏JMenu query = new JMenu("查询管理");menuBar.add(query);JMenuItem querystu = new JMenuItem("查询所有学生");JMenuItem querycourse = new JMenuItem("查询所有课程");JMenuItem queryselect = new JMenuItem("查询所有选课");query.add(querystu);query.add(querycourse);query.add(queryselect);// 系统退出JLabel exit = new JLabel("系统退出");exit.setForeground(Color.red);exit.setFont(new java.awt.Font("宋体", 1, 15));menuBar.add(exit);// 查询区JPanel jPaneln = new JPanel();JLabel nameJLabel = new JLabel("学号/课程号:");JTextField nameField = new JTextField(20);JButton selectbtn = new JButton("查询");jPaneln.add(nameJLabel);jPaneln.add(nameField);jPaneln.add(selectbtn);add(jPaneln, BorderLayout.NORTH);// 查询学号/课程号按钮selectbtn.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubString stu = nameField.getText();String sql = "select * from stu where sno='" + stu + "'";userModel.reload(sql);String sql1 = "select * from course where cno='" + stu + "'";coursemodel.reload(sql1);String sql2 = "SELECT sc.sno,stu.name,sc.cno,course.cname,credit,score FROM sc,stu,course where sc.sno=stu.sno and course.cno=sc.cno and sc.sno='"+ stu + "'";selectsmodel.reload(sql2);}});/* * 学生管理 */// 增加学生信息addstu.addMouseListener(new MouseListener() {@Overridepublic void mouseReleased(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mousePressed(MouseEvent e) {// TODO Auto-generated method stubnew AddStu().show();}@Overridepublic void mouseExited(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseEntered(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseClicked(MouseEvent e) {// TODO Auto-generated method stub}});// 删除学生信息deletestu.addMouseListener(new MouseListener() {@Overridepublic void mouseReleased(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mousePressed(MouseEvent e) {// TODO Auto-generated method stubint index = jTable.getSelectedRow();if (index == -1) {JOptionPane.showMessageDialog(null, "未选中");} else {Object user = userModel.rowData.get(index);String sno = ((Vector) user).get(0).toString();try {DBUtil.initst();int n = DBUtil.st.executeUpdate("delete from stu where sno='" + sno + "'");if (n > 0) {JOptionPane.showMessageDialog(null, "删除成功");} else {JOptionPane.showMessageDialog(null, "删除失败");}UserModel.reload(null);DBUtil.closeDB();} catch (SQLException ex) {ex.printStackTrace();}}}@Overridepublic void mouseExited(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseEntered(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseClicked(MouseEvent e) {// TODO Auto-generated method stub}});// 修改学生信息updatestu.addMouseListener(new MouseListener() {@Overridepublic void mouseReleased(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mousePressed(MouseEvent e) {// TODO Auto-generated method stubint index = jTable.getSelectedRow();if (index == -1) {JOptionPane.showMessageDialog(null, "未选中");} else {Object user = userModel.rowData.get(index);new UpdateStu(user).show();}}@Overridepublic void mouseExited(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseEntered(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseClicked(MouseEvent e) {// TODO Auto-generated method stub}});/* * 课程管理 */// 增加课程信息addcourse.addMouseListener(new MouseListener() {@Overridepublic void mouseReleased(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mousePressed(MouseEvent e) {// TODO Auto-generated method stubnew AddCourse().show();}@Overridepublic void mouseExited(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseEntered(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseClicked(MouseEvent e) {// TODO Auto-generated method stub}});// 删除课程信息deletecourse.addMouseListener(new MouseListener() {@Overridepublic void mouseReleased(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mousePressed(MouseEvent e) {// TODO Auto-generated method stubint index = jTable.getSelectedRow();if (index == -1) {JOptionPane.showMessageDialog(null, "未选中");} else {Object course = coursemodel.rowData1.get(index);String cno = ((Vector) course).get(0).toString();try {DBUtil.initst();int n = DBUtil.st.executeUpdate("delete from course where cno='" + cno + "'");if (n > 0) {JOptionPane.showMessageDialog(null, "删除成功");} else {JOptionPane.showMessageDialog(null, "删除失败");}CourseModel.reload(null);DBUtil.closeDB();} catch (SQLException ex) {ex.printStackTrace();}}}@Overridepublic void mouseExited(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseEntered(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseClicked(MouseEvent e) {// TODO Auto-generated method stub}});// 修改课程信息updatecourse.addMouseListener(new MouseListener() {@Overridepublic void mouseReleased(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mousePressed(MouseEvent e) {// TODO Auto-generated method stubint index = jTable.getSelectedRow();if (index == -1) {JOptionPane.showMessageDialog(null, "未选中");} else {Object course = coursemodel.rowData1.get(index);new UpdateCourse(course).show();}}@Overridepublic void mouseExited(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseEntered(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseClicked(MouseEvent e) {// TODO Auto-generated method stub}});/* * 学生选课管理 */// 增加学生选课信息addselect.addMouseListener(new MouseListener() {@Overridepublic void mouseReleased(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mousePressed(MouseEvent e) {// TODO Auto-generated method stubnew AddSelect().show();}@Overridepublic void mouseExited(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseEntered(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseClicked(MouseEvent e) {// TODO Auto-generated method stub}});// 删除学生选课信息deleteselect.addMouseListener(new MouseListener() {@Overridepublic void mouseReleased(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mousePressed(MouseEvent e) {// TODO Auto-generated method stubint index = jTable.getSelectedRow();if (index == -1) {JOptionPane.showMessageDialog(null, "未选中");} else {Object select = selectsmodel.rowData2.get(index);String sno = ((Vector) select).get(0).toString();try {DBUtil.initst();int n = DBUtil.st.executeUpdate("delete from sc where sno='" + sno + "'");if (n > 0) {JOptionPane.showMessageDialog(null, "删除成功");} else {JOptionPane.showMessageDialog(null, "删除失败");}SelectsModel.reload(null);DBUtil.closeDB();} catch (SQLException ex) {ex.printStackTrace();}}}@Overridepublic void mouseExited(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseEntered(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseClicked(MouseEvent e) {// TODO Auto-generated method stub}});// 修改学生选课信息updateselect.addMouseListener(new MouseListener() {@Overridepublic void mouseReleased(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mousePressed(MouseEvent e) {// TODO Auto-generated method stubint index = jTable.getSelectedRow();if (index == -1) {JOptionPane.showMessageDialog(null, "未选中");} else {Object select = selectsmodel.rowData2.get(index);new UpdateSelect(select).show();}}@Overridepublic void mouseExited(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseEntered(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseClicked(MouseEvent e) {// TODO Auto-generated method stub}});/* * 查询管理 */// 查询所有学生信息querystu.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stub// 刷新jTable并把jTable显示出来userModel.reload(null);jTable.setModel(userModel);}});// 查询所有课程信息querycourse.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stub// 刷新jTable并把jTable显示出来coursemodel.reload(null);//jTable.show();jTable.setModel(coursemodel);}});// 查询所有学生选课信息queryselect.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stub// 刷新jTable并把jTable显示出来selectsmodel.reload(null);//jTable.show();jTable.setModel(selectsmodel);}});/* * 系统退出 */exit.addMouseListener(new MouseListener() {public void mouseClicked(MouseEvent e) {System.exit(0);// 处理鼠标点击}public void mouseEntered(MouseEvent e) {// 处理鼠标移入}public void mouseExited(MouseEvent e) {// 处理鼠标离开}public void mousePressed(MouseEvent e) {// 处理鼠标按下}public void mouseReleased(MouseEvent e) {// 处理鼠标释放}});setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public static void main(String[] args) {Main main = new Main();}}

5.备注

如有侵权请联系我删除