当前位置:   article > 正文

Java+Swing+MySQL学生成绩管理系统

java+swing+mysql

目录

一、系统介绍

1.运行环境

2.技术说明

3.系统功能

4.数据库ER图表

二、系统实现

1.整体结构 

2.用户注册、登录

3.增加学生

4.模糊查询学生信息

5.成绩管理和查询

6.查询成绩 

7.课程更改

  

 三、部分代码

1.ChangePasswordView.java

2.LoginView.java

3.RegisterView.java

4.GradeView.java

5.备注


一、系统介绍

1.运行环境

开发工具:Eclipse/IDEA

JDK版本:jdk1.8

Mysql版本:5.7

2.技术说明

Java+Swing+Mysql

3.系统功能

学生成绩管理系统是广泛使用的一种信息管理系统,在学生成绩管理系统中,需要能处理各班信息、各班下属学生的个人信息及每个学生学习成绩信息。班级信息包括班级编号、班级名称,学生信息包括学号、姓名、性别、所属班级、联系方式等,及各门课程的成绩。与班级相关的操作是查看已有班级、新增班级、修改班级名称、删除班级、录入新生信息等;与学生相关的操作是查看已有学生、修改学生基本信息、删除学生、录入成绩、修改成绩、根据姓名、学号、班级、课程等多条件查询学生成绩,并可以依据多种条件进行排序。

4.数据库ER图表

二、系统实现

1.整体结构 

2.用户注册、登录

对所有的输入都有进行正则校验,用户名有2-6位中文和6-18位英文或数字限制,且不能输入特殊符号;密码有6-18位英文或数字限制。如下图 

3.增加学生

可以对学生的信息进行修改、学生查询、增加删除。所有输入操作均有防暴力输入和正则判断。

4.模糊查询学生信息

5.成绩管理和查询

6.查询成绩 

 

7.课程更改

 三、部分代码

1.ChangePasswordView.java

  1. package com.Lauguobin.www.view.Login;
  2. import java.awt.GridLayout;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5. import javax.swing.JButton;
  6. import javax.swing.JDialog;
  7. import javax.swing.JFrame;
  8. import javax.swing.JLabel;
  9. import javax.swing.JOptionPane;
  10. import javax.swing.JPanel;
  11. import javax.swing.JPasswordField;
  12. import javax.swing.JTextField;
  13. import com.Lauguobin.www.po.User;
  14. import com.Lauguobin.www.service.UserService;
  15. import com.Lauguobin.www.util.ViewUtil;
  16. public class ChangePasswordView extends JDialog
  17. {
  18. private static final long serialVersionUID = 1L;
  19. private JPanel all;
  20. private JPanel buttons;
  21. private JLabel user;
  22. private JLabel oldPassword;
  23. private JLabel newPassword;
  24. private JTextField tu;
  25. private JPasswordField top;
  26. private JPasswordField tnp;
  27. private JButton yes;
  28. private JButton no;
  29. ChangePasswordView()
  30. {
  31. all = new JPanel(new GridLayout(3,1));
  32. user = new JLabel("     用户名");
  33. oldPassword = new JLabel("     旧密码");
  34. newPassword = new JLabel("     新密码");
  35. tu = new JTextField(13);
  36. top = new JPasswordField(13);
  37. tnp = new JPasswordField(13);
  38. tnp.addActionListener(new ChangePasswordMonitor());
  39. all.add(user);
  40. all.add(tu);
  41. all.add(oldPassword);
  42. all.add(top);
  43. all.add(newPassword);
  44. all.add(tnp);
  45. yes = new JButton("确定修改");
  46. yes.addActionListener(new ChangePasswordMonitor());
  47. no = new JButton("取消");
  48. no.addActionListener(new ChangePasswordMonitor());
  49. buttons = new JPanel();
  50. buttons.add(yes);
  51. buttons.add(no);
  52. add(all,"North");
  53. add(buttons,"South");
  54. int screenHeight = ViewUtil.geScreenHeight();
  55. int screenWidth = ViewUtil.geScreenWidth();
  56. setTitle("密码修改");
  57. setLocation(screenWidth / 3 , screenHeight / 2);
  58. setResizable(false);
  59. pack();
  60. setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
  61. setModal(true);
  62. setVisible(true);
  63. }
  64. class ChangePasswordMonitor implements ActionListener
  65. {
  66. @Override
  67. public void actionPerformed(ActionEvent e)
  68. {
  69. //点击确定或者在新密码行敲击回车响应
  70. if(e.getSource() == yes || e.getSource() == tnp)
  71. {
  72. UserService us = new UserService();
  73. //封装数据
  74. String uname = tu.getText();
  75. String pold = new String(top.getPassword());
  76. String pnew = new String(tnp.getPassword());
  77. User in = new User(uname,pold);
  78. try
  79. {
  80. //调用service判断并由其决定是否执行
  81. int flag = us.IfAlter(in,pnew);
  82. switch(flag)
  83. {
  84. case 0:
  85. {
  86. JOptionPane.showMessageDialog(null, "操作成功", "标题", JOptionPane.PLAIN_MESSAGE);
  87. dispose();
  88. break;
  89. }
  90. case 1:JOptionPane.showMessageDialog(null, "新密码长度必须位于6 - 18位", "警告", JOptionPane.WARNING_MESSAGE); break;
  91. case 2:JOptionPane.showMessageDialog(null, "原账户信息验证错误", "警告", JOptionPane.WARNING_MESSAGE); break;
  92. default :JOptionPane.showMessageDialog(null, "未知错误", "警告", JOptionPane.ERROR_MESSAGE); break;
  93. }
  94. }
  95. catch (Exception e1)
  96. {
  97. e1.printStackTrace();
  98. }
  99. }
  100. if(e.getSource() == no)
  101. dispose();
  102. }
  103. }
  104. }

2.LoginView.java

  1. package com.Lauguobin.www.view.Login;
  2. import java.awt.*;
  3. import java.awt.event.*;
  4. import javax.swing.*;
  5. import com.Lauguobin.www.po.*;
  6. import com.Lauguobin.www.service.*;
  7. import com.Lauguobin.www.util.*;
  8. import com.Lauguobin.www.view.StudentMenagement.StudentMenageView;
  9. /**
  10. * 登录界面的类
  11. * @author GB菌
  12. */
  13. public class LoginView extends JFrame
  14. {
  15. private static final long serialVersionUID = 1L;
  16. //当前登录用户的身份信息
  17. public static String USING_USER;
  18. public static String USING_USER_PASSWORD;
  19. public static boolean USER_IDENTITY;
  20. //总的Panel
  21. private JPanel buttonPanel;
  22. private JLabel picture;
  23. private JPanel all;
  24. private ButtonGroup group;
  25. private JPanel radios;
  26. private JRadioButton oldDriver;
  27. private JRadioButton newbie;
  28. private JPanel loginName;
  29. private JPanel loginPassword;
  30. private JLabel labelName;
  31. private JLabel labelPw;
  32. private JTextField name;
  33. private JPasswordField password;
  34. private JButton login;
  35. private JButton zc;
  36. private JButton quit;
  37. private JButton clean;
  38. private JButton change;
  39. /**
  40. * main方法在这里
  41. * @param args
  42. */
  43. public static void main(String[] args)
  44. {
  45. EventQueue.invokeLater
  46. (
  47. new Runnable()
  48. {
  49. public void run()
  50. {
  51. new LoginView();
  52. }
  53. }
  54. );
  55. }
  56. //构造方法
  57. public LoginView()
  58. {
  59. int screenHeight = ViewUtil.geScreenHeight();
  60. int screenWidth = ViewUtil.geScreenWidth();
  61. //创建按钮并且连接
  62. login = new JButton("登录");
  63. login.addActionListener(new LoginMonitor());
  64. zc = new JButton("注册");
  65. zc.addActionListener(new LoginMonitor());
  66. quit = new JButton("退出");
  67. quit.addActionListener(new LoginMonitor());
  68. clean = new JButton("清除信息");
  69. clean.addActionListener(new LoginMonitor());
  70. change = new JButton("修改密码");
  71. change.addActionListener(new LoginMonitor());
  72. //实例化容器
  73. buttonPanel = new JPanel();
  74. loginName = new JPanel();
  75. loginPassword = new JPanel();
  76. all = new JPanel(new GridLayout(3,1));
  77. picture = new JLabel(new ImageIcon("picture.jpg"));
  78. group = new ButtonGroup();
  79. radios = new JPanel();
  80. labelName = new JLabel(" 账号");
  81. name = new JTextField(13);
  82. name.addActionListener(new LoginMonitor());
  83. labelPw = new JLabel(" 密码");
  84. password = new JPasswordField(13);
  85. password.addActionListener(new LoginMonitor());
  86. oldDriver = new JRadioButton("管理员");
  87. newbie = new JRadioButton("用户");
  88. loginName.add(labelName);
  89. loginName.add(name);
  90. loginName.add(clean);
  91. loginPassword.add(labelPw);
  92. loginPassword.add(password);
  93. loginPassword.add(change);
  94. group.add(oldDriver);
  95. group.add(newbie);
  96. radios.add(oldDriver);
  97. oldDriver.addActionListener(new LoginMonitor());
  98. radios.add(newbie);
  99. newbie.addActionListener(new LoginMonitor());
  100. all.add(loginName);
  101. all.add(loginPassword);
  102. all.add(radios);
  103. buttonPanel.add(login);
  104. buttonPanel.add(zc);
  105. buttonPanel.add(quit);
  106. add(picture,"North");
  107. add(all);
  108. add(buttonPanel , "South");
  109. setTitle("学生成绩管理系统");
  110. setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
  111. setLocation(screenWidth / 3 , screenHeight / 5);
  112. setResizable(false);
  113. setVisible(true);
  114. pack();
  115. }
  116. /**
  117. * 方便事件响应管理,把这个类设置成内部类
  118. * @author GB菌
  119. *
  120. */
  121. class LoginMonitor implements ActionListener
  122. {
  123. @Override
  124. public void actionPerformed(ActionEvent e)
  125. {
  126. UserService us = new UserService();
  127. //点击登录或在密码文本域中敲击回车
  128. if((e.getSource() == login)||(e.getSource() == password))
  129. {
  130. if(oldDriver.isSelected())
  131. USER_IDENTITY = true;
  132. else if(newbie.isSelected())
  133. USER_IDENTITY = false;
  134. else
  135. {
  136. JOptionPane.showMessageDialog(null, "请选择用户类型", "输入错误", JOptionPane.ERROR_MESSAGE);
  137. return ;
  138. }
  139. String n = name.getText();
  140. String p = new String(password.getPassword());
  141. password.setText("");
  142. User user = new User(n,p,USER_IDENTITY);
  143. try
  144. {
  145. if(us.IfHaveUser(user))
  146. {
  147. dispose();
  148. USING_USER = n;
  149. USING_USER_PASSWORD = p;
  150. new StudentMenageView();
  151. }
  152. else
  153. {
  154. JOptionPane.showMessageDialog(null, "用户名、密码或用户身份选择错误", "输入错误", JOptionPane.ERROR_MESSAGE);
  155. }
  156. }
  157. catch (Exception e1)
  158. {
  159. e1.printStackTrace();
  160. }
  161. }
  162. //注册事件
  163. if(e.getSource() == zc)
  164. {
  165. new RegisterView();
  166. }
  167. //清除信息事件
  168. if(e.getSource() == clean)
  169. {
  170. name.setText("");
  171. password.setText("");
  172. }
  173. //更改密码事件
  174. if(e.getSource() == change)
  175. {
  176. new ChangePasswordView ();
  177. }
  178. //退出事件
  179. if(e.getSource() == quit)
  180. {
  181. int n = JOptionPane.showConfirmDialog(null, "是否退出?", "退出",JOptionPane.YES_NO_OPTION);
  182. if(n==0)
  183. System.exit(0);
  184. }
  185. }
  186. }
  187. }

3.RegisterView.java

  1. package com.Lauguobin.www.view.Login;
  2. import java.awt.*;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5. import javax.swing.*;
  6. import com.Lauguobin.www.po.User;
  7. import com.Lauguobin.www.service.UserService;
  8. import com.Lauguobin.www.util.ViewUtil;
  9. /** 这个窗口只有在登录界面才会用到
  10. * 这个类用于构建注册窗口。并没有太大卵用。
  11. * @author GB菌
  12. *
  13. */
  14. public class RegisterView extends JDialog
  15. {
  16. private static final long serialVersionUID = 1L;
  17. private JPanel all;
  18. private JPanel buttons;
  19. private JPanel tips;
  20. private JPanel one;
  21. private JPanel two;
  22. private JPanel three;
  23. private ButtonGroup group;
  24. private JPanel radios;
  25. private JLabel user;
  26. private JLabel password;
  27. private JLabel affirmPassword;
  28. private JLabel tip1;
  29. private JLabel tip2;
  30. private JLabel tip3;
  31. private JTextField tu;
  32. private JPasswordField tp;
  33. private JPasswordField atp;
  34. private JButton yes;
  35. private JButton no;
  36. private JRadioButton oldDriver;
  37. private JRadioButton newbie;
  38. RegisterView()
  39. {
  40. all = new JPanel(new GridLayout(4,1));
  41. tips = new JPanel(new GridLayout(3,0));
  42. group = new ButtonGroup();
  43. radios = new JPanel();
  44. one = new JPanel();
  45. two = new JPanel();
  46. three = new JPanel();
  47. user = new JLabel("用户名称");
  48. password = new JLabel("用户密码");
  49. affirmPassword = new JLabel("确认密码");
  50. tip1 = new JLabel("  温馨提示:用户名只允许有字母、中文、数字  ");
  51. tip2 = new JLabel("      用户名允许的长度为4 - 20位  ");
  52. tip3 = new JLabel("      密码长度必须位于6 - 18位");
  53. tu = new JTextField(10);
  54. tp = new JPasswordField(10);
  55. tp.addActionListener(new RegisterMonitor());
  56. atp= new JPasswordField(10);
  57. atp.addActionListener(new RegisterMonitor());
  58. oldDriver = new JRadioButton("管理员");
  59. newbie = new JRadioButton("用户");
  60. group.add(oldDriver);
  61. group.add(newbie);
  62. radios.add(oldDriver);
  63. oldDriver.addActionListener(new RegisterMonitor());
  64. radios.add(newbie);
  65. newbie.addActionListener(new RegisterMonitor());
  66. one.add(user);
  67. one.add(tu);
  68. two.add(password);
  69. two.add(tp);
  70. three.add(affirmPassword);
  71. three.add(atp);
  72. all.add(one);
  73. all.add(two);
  74. all.add(three);
  75. all.add(radios);
  76. tips.add(tip1);
  77. tips.add(tip2);
  78. tips.add(tip3);
  79. yes = new JButton("注册");
  80. yes.addActionListener(new RegisterMonitor());
  81. no = new JButton("取消");
  82. no.addActionListener(new RegisterMonitor());
  83. buttons = new JPanel();
  84. buttons.add(yes);
  85. buttons.add(no);
  86. add(all,"North");
  87. add(tips);
  88. add(buttons,"South");
  89. int screenHeight = ViewUtil.geScreenHeight();
  90. int screenWidth = ViewUtil.geScreenWidth();
  91. setTitle("新手上路");
  92. setLocation(screenWidth / 3 , screenHeight / 2);
  93. setResizable(false);
  94. pack();
  95. setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
  96. setModal(true);
  97. setVisible(true);
  98. }
  99. class RegisterMonitor implements ActionListener
  100. {
  101. @Override
  102. public void actionPerformed(ActionEvent e)
  103. {
  104. UserService us = new UserService();
  105. //点击确定或者在密码文本域敲击回车
  106. if(e.getSource() == yes || e.getSource() == tp)
  107. {
  108. String u = tu.getText();
  109. String p = new String(tp.getPassword());
  110. String p2 = new String(atp.getPassword());
  111. if(!p.equals(p2))
  112. {
  113. JOptionPane.showMessageDialog(null, "两次密码输入不一致!", "输入错误", JOptionPane.ERROR_MESSAGE);
  114. tp.setText("");
  115. atp.setText("");
  116. return;
  117. }
  118. boolean identity;
  119. if(oldDriver.isSelected())
  120. identity = true;
  121. else if(newbie.isSelected())
  122. identity = false;
  123. else
  124. {
  125. JOptionPane.showMessageDialog(null, "请选择用户类型", "输入错误", JOptionPane.ERROR_MESSAGE);
  126. return ;
  127. }
  128. try
  129. {
  130. //把数据封装成对象操作
  131. User user = new User(u,p,identity);
  132. //调用service判断并由service决定是否注册
  133. int flag = us.IfAddUserSuccess(user);
  134. switch(flag)
  135. {
  136. case 0:
  137. {
  138. JOptionPane.showMessageDialog(null, "注册成功", "信息", JOptionPane.PLAIN_MESSAGE);
  139. dispose();
  140. break;
  141. }
  142. case 1:JOptionPane.showMessageDialog(null, "密码长度必须在6 - 18位", "警告", JOptionPane.WARNING_MESSAGE);break;
  143. case 2:JOptionPane.showMessageDialog(null, "用户名不合法", "警告", JOptionPane.WARNING_MESSAGE);break;
  144. case 3:JOptionPane.showMessageDialog(null, "用户已存在", "警告", JOptionPane.WARNING_MESSAGE);break;
  145. default :JOptionPane.showMessageDialog(null, "未知错误", "错误", JOptionPane.WARNING_MESSAGE);break;
  146. }
  147. }
  148. catch (Exception e1)
  149. {
  150. e1.printStackTrace();
  151. }
  152. }
  153. //点击取消
  154. if(e.getSource() == no)
  155. dispose();
  156. }
  157. }
  158. }

4.GradeView.java

  1. package com.Lauguobin.www.view.ScoreMenagement;
  2. import java.awt.event.ActionEvent;
  3. import java.awt.event.ActionListener;
  4. import javax.swing.*;
  5. import javax.swing.table.DefaultTableModel;
  6. import com.Lauguobin.www.service.*;
  7. import com.Lauguobin.www.util.ViewUtil;
  8. import com.Lauguobin.www.view.Login.LoginView;
  9. /**
  10. * 成绩管理窗口,需要一个id来确定是谁的成绩
  11. * @author GB菌
  12. *
  13. */
  14. public class GradeView extends JDialog
  15. {
  16. private static final long serialVersionUID = 1L;
  17. private JScrollPane list;
  18. private JTable tab;
  19. private JPanel inButton;
  20. private JPanel search;
  21. private JTextField text;
  22. private JButton s;
  23. private JLabel label;
  24. private JButton yes;
  25. private JButton change;
  26. private JButton f5;
  27. int id;
  28. public GradeView(int id)
  29. {
  30. this.id = id;
  31. yes = new JButton("返回");
  32. yes.addActionListener(new GVMonitor());
  33. f5 = new JButton("刷新");
  34. f5.addActionListener(new GVMonitor());
  35. change = new JButton("修改成绩");
  36. change.addActionListener(new GVMonitor());
  37. s = new JButton("搜索");
  38. s.addActionListener(new GVMonitor());
  39. text = new JTextField(15);
  40. text.addActionListener(new GVMonitor());
  41. list = new JScrollPane();
  42. label = new JLabel("搜索成绩<'%'和'_'模糊>");
  43. inButton = new JPanel();
  44. search = new JPanel();
  45. inButton.add(change);
  46. inButton.add(f5);
  47. inButton.add(yes);
  48. search.add(label);
  49. search.add(text);
  50. search.add(s);
  51. list = new JScrollPane();
  52. ScoreService ss = new ScoreService();
  53. Object[][] nt = ss.getAllScore(id);
  54. String[] title = {"学生ID","学生姓名","课程号","课程名称","学科成绩","获得学分"};
  55. DefaultTableModel model = new DefaultTableModel(nt, title)
  56. {
  57. private static final long serialVersionUID = 1L;
  58. //此处设置单元格时否可以被编辑。
  59. public boolean isCellEditable(int row, int column)
  60. {
  61. return false;
  62. }
  63. };
  64. tab = new JTable(model);
  65. tab.getTableHeader();
  66. ViewUtil.fitTableColumns(tab);
  67. list.getViewport().add(tab);
  68. add(search,"North");
  69. add(list);
  70. add(inButton,"South");
  71. int screenHeight = ViewUtil.geScreenHeight();
  72. int screenWidth = ViewUtil.geScreenWidth();
  73. setTitle("查看成绩");
  74. setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
  75. setBounds(screenWidth / 3 , screenHeight / 4 , screenWidth / 3 , screenHeight / 3);
  76. setModal(true);
  77. setResizable(false);
  78. setVisible(true);
  79. }
  80. class GVMonitor implements ActionListener
  81. {
  82. @Override
  83. public void actionPerformed(ActionEvent e)
  84. {
  85. /*
  86. * 返回事件
  87. */
  88. if(e.getSource() == yes)
  89. dispose();
  90. /*
  91. * 搜索事件
  92. */
  93. if(e.getSource() == text || e.getSource() == s)
  94. {
  95. String str = text.getText();
  96. if(str.equals(""))
  97. {
  98. JOptionPane.showMessageDialog(null, "请输入搜索条件", "警告", JOptionPane.WARNING_MESSAGE);
  99. }
  100. else
  101. {
  102. //显示搜索结果的列表
  103. Object info[][] = new ScoreService().getSearch(str,id);
  104. String[] title = {"学生ID","学生姓名","课程号","课程名称","学科成绩","获得学分"};
  105. DefaultTableModel model = new DefaultTableModel(info,title)
  106. {
  107. private static final long serialVersionUID = 1L;
  108. //此处设置单元格时否可以被编辑。
  109. public boolean isCellEditable(int row, int column)
  110. {
  111. return false;
  112. }
  113. };
  114. tab.setModel(model);
  115. tab.getTableHeader();
  116. ViewUtil.fitTableColumns(tab);
  117. list.getViewport().add(tab);
  118. }
  119. }
  120. /*
  121. * 更改成绩事件
  122. */
  123. if(e.getSource() == change)
  124. {
  125. if(LoginView.USER_IDENTITY)
  126. {
  127. int selectedRowIndex = tab.getSelectedRow();
  128. if(selectedRowIndex >= 0)
  129. {
  130. //调用service
  131. new SetScoreView(selectedRowIndex,tab,list);
  132. }
  133. else
  134. {
  135. JOptionPane.showMessageDialog(null, "请选中一行", "警告", JOptionPane.INFORMATION_MESSAGE);
  136. }
  137. }
  138. else
  139. JOptionPane.showMessageDialog(null, "你根本就不是老司机!", "警告", JOptionPane.WARNING_MESSAGE);
  140. }
  141. if(e.getSource() == f5)
  142. {
  143. ScoreService ss = new ScoreService();
  144. Object[][] nt = ss.getAllScore(id);
  145. String[] title = {"学生ID","学生姓名","课程号","课程名称","学科成绩","获得学分"};
  146. DefaultTableModel model = new DefaultTableModel(nt,title)
  147. {
  148. private static final long serialVersionUID = 1L;
  149. //此处设置单元格时否可以被编辑。
  150. public boolean isCellEditable(int row, int column)
  151. {
  152. return false;
  153. }
  154. };
  155. tab.setModel(model);
  156. tab.getTableHeader();
  157. ViewUtil.fitTableColumns(tab);
  158. list.getViewport().add(tab);
  159. }
  160. }
  161. }
  162. }

5.备注

如有侵权请联系我删除 



 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/871836
推荐阅读
相关标签
  

闽ICP备14008679号