JavaSwing成绩管理系统
目录
一、背景及技术
背景:JavaSwing实现前台页面展示,包括后台管理界面和教师登录查看页面,后台数据部分可以选择保存在内存中,也可以选择保存在数据库中。实现简单的学生成绩管理系统。
技术语言:java+mysql
二、思维脑图
三、模块设计
1、界面设计思路
主窗体可以分为两部分,一部分是上面的导航按钮部分,另一部分是内容区域,根据不同的按钮点击切换到不同的页面;
主窗体:
主窗体继承自JPanel
内容区域可以创建一个JDesktopPane桌面面板类,可以实现多页面的切换
每一个不同的页面可以继承自JInternalFrame,每一个继承JInternalFrame的页面可以填充到JDesktopPane桌面面板中;
2、登录页面
登录分为管理员和教师两种角色,登录成功分别进入不同的界面
代码:
/**
* 主启动类
*
* @create 2024-01-07
*/
public class MainFrame {
public static final JFrame frame = new JFrame("学生成绩管理系统");
//当前登录的用户
public static User user;
public static void main(String[] args) {
frame.setSize(SystemConstant.FRAME_WIDTH, SystemConstant.FRAME_HEIGHT);
frame.setLayout(null);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(new LoginPanel());
}
public static void setContentPanel(JPanel panel) {
frame.setContentPane(panel);
}
}
/**
* 登录
*
* @create 2024-01-07
*/
public class LoginPanel extends JPanel {
public LoginPanel() {
this.setBounds(0, 0, SystemConstant.FRAME_WIDTH, SystemConstant.FRAME_HEIGHT);
this.add(new JLabel("用户名"));
JTextField nameField = new JTextField(10);
this.add(nameField);
this.add(new JLabel("密码"));
JPasswordField passwordField = new JPasswordField(10);
this.add(passwordField);
JRadioButton adminRadio = new JRadioButton("管理员", true);
JRadioButton commonRadio = new JRadioButton("教师");
ButtonGroup group = new ButtonGroup();
group.add(adminRadio);
group.add(commonRadio);
this.add(adminRadio);
this.add(commonRadio);
JButton loginBt = new JButton("登录");
this.add(loginBt);
loginBt.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
User user = null;
String username = nameField.getText();
String password = new String(passwordField.getPassword());
JPanel panel = null;
if (adminRadio.isSelected()) {
// user = UserDao.getUserByUserName(username);
user = UserDao.getUserByName(username);
panel = new AdminPanel();
} else if (commonRadio.isSelected()) {
user = TeacherDao.getUserByName(username);
panel = new UserPanel();
}
if (user == null || !user.getPassword().equals(password)) {
JOptionPane.showMessageDialog(loginBt.getParent(), "密码错误", "系统提示", JOptionPane.WARNING_MESSAGE);
} else {
MainFrame.setContentPanel(panel);
MainFrame.user = user;
}
}
});
}
}
3、管理员登录成功内容页面
public class AdminPanel extends JPanel {
private static JDesktopPane contentPanel = new JDesktopPane();
public AdminPanel() {
this.setBounds(0, 0, SystemConstant.FRAME_WIDTH, SystemConstant.FRAME_HEIGHT);
contentPanel.setBounds(0, 20, SystemConstant.FRAME_WIDTH, SystemConstant.FRAME_HEIGHT - 50);
this.add(contentPanel, BorderLayout.CENTER);
JMenuBar menuBar = new JMenuBar();
JMenu studentMenu = new JMenu("学生管理");
JMenu projectMenu = new JMenu("课程管理");
JMenu paiMenu = new JMenu("排课");
JMenu systemMenu = new JMenu("系统管理");
menuBar.add(studentMenu);
menuBar.add(projectMenu);
menuBar.add(paiMenu);
menuBar.add(systemMenu);
JMenuItem logout = new JMenuItem("退出登录");
systemMenu.add(logout);
logout.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
contentPanel.removeAll();
contentPanel.repaint();
MainFrame.setContentPanel(new LoginPanel());
}
});
studentMenu.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
setContent(new StudentTablePanel());
}
});
projectMenu.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
setContent(new CourseTablePanel());
}
});
paiMenu.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
setContent(new PlanTablePanel());
}
});
this.setLayout(new BorderLayout());
menuBar.setBounds(0, 0, SystemConstant.FRAME_WIDTH, 50);
this.add(menuBar, BorderLayout.NORTH);
}
public static void setContent(JInternalFrame jInternalFrame) {
jInternalFrame.setSize(SystemConstant.FRAME_WIDTH, SystemConstant.FRAME_HEIGHT - 100);
jInternalFrame.setVisible(true);
contentPanel.removeAll();
contentPanel.repaint();
contentPanel.add(jInternalFrame);
}
}
4、学生管理
/**
* 学生管理
*
* @create 2024-01-08
*/
public class StudentTablePanel extends JInternalFrame {
public StudentTablePanel() {
super("学生信息列表", true, true, true, true);
this.setSize(SystemConstant.FRAME_WIDTH, SystemConstant.FRAME_HEIGHT);
JTable jTable = new JTable() {
//表格只读
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
};
//查询所有数据填充到表格当中
TableModel tableModel = new DefaultTableModel(StudentDao.searchMulti(new int[0], null), StudentDao.columnNames);
jTable.setModel(tableModel);
//顶部栏操作
JPanel topPanel = new JPanel();
topPanel.add(new JLabel("学院:"));
JComboBox<ComboItem> deptBox = new JComboBox<>();
BaseDataUtil.fillComboItem(deptBox, BaseDataDao.getDeptList());
topPanel.add(deptBox);
topPanel.add(new JLabel("系:"));
JComboBox<ComboItem> majorBox = new JComboBox<>();
BaseDataUtil.fillComboItem(majorBox, BaseDataDao.getMajorList(""));
topPanel.add(majorBox);
topPanel.add(new JLabel("班级:"));
JComboBox<ComboItem> classBox = new JComboBox<>();
BaseDataUtil.fillComboItem(classBox, BaseDataDao.getClassList(""));
topPanel.add(classBox);
deptBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
System.out.println(e.getItem().toString() + "选中");
ComboItem comboItem = (ComboItem) deptBox.getSelectedItem();