当前位置:   article > 正文

JavaFx+Mysql简单实现学生成绩管理系统(学生端和教师端)实现增删改查,利用SceneBuilder省去自己布局系统界面_基于javafx图形化界面实现的学生成绩管理系统

基于javafx图形化界面实现的学生成绩管理系统

目录

数据库建表准备:

程序展示:

1.登陆界面 

注册界面:

学生端展示:

1.查看成绩功能 

2.查找成绩

教师端展示:

1.添加成绩

2.修改成绩:

3.删除成绩

3.查找成绩

​编辑 

源代码展示:

登陆界面

注册界面 

登录后系统主界面


数据库建表准备:

这里我建了两张表,一张是系统登陆信息的,另一张是存储了所有学生成绩的表,可以根据自己需要修改表的内容和属性格式,后续会不断完善

如下所示:

另外需要java连接mysql的jar包,以及javafx的jar包导入,这里就不详细多说。

程序展示:

1.登陆界面 

这里可以换成自己的图片

注册界面:

学生端展示:

这里的图片也可以更换成预设的头像,可以实现根据用户切换不同的图片

学生端只做了查看和查找成绩的功能,修改,添加,删除等功能在教师端实现。同时增加了修改个人信息 的功能  通过验证密码来判断修改权限。

1.查看成绩功能 

 学生端只能查看自己一个人的成绩 因为这里使用的是Tableview组件,所以省去了实现排序功能。

2.查找成绩

 这里实现了根据日期和备注查找,后续也可以实现根据科目,总分进行分别查找,这些功能都比较好实现,主要是数据库的条件查找加上控件的重新展示排列,操作比较麻烦,但是实现起来比较简单。

教师端展示:

 教师端的功能就比较丰富,增删改查,可以查考所有学生的成绩

1.添加成绩

 给每个学生添加成绩,这个功能就很鸡肋,不如直接去数据库导入Excel文件添加。

2.修改成绩:

这里直接在tableview表格上单击成绩修改 简单很多 我这里设置了只有三科成绩和备注可以修改,总分和平均分会随着成绩的修改而自动修改。因此我在这里隐藏了修改成绩按钮。

3.删除成绩

 也是直接在tableview中直接操作,选中后点击删除成绩按钮,会弹出确认对话框,确认后即删除成功,表格也会自动更新。这里的删除和修改权限只有教师端才有,学生端的功能被隐藏。

3.查找成绩

目前支持根据姓名精确查找,日期,备注模糊查找,然后也是和显示成绩一样,可以在表格上修改,删除。

源代码展示:

因为代码过多分了多个类,所以就先展示一部分,具体源代码可以私信我获取

登陆界面

  1. package com.example.studentgrade;
  2. import Dao.BaseDao;
  3. import Dao.StringUtil;
  4. import Pojo.User;
  5. import javafx.event.EventHandler;
  6. import javafx.fxml.FXML;
  7. import javafx.scene.control.Label;
  8. import javafx.scene.control.PasswordField;
  9. import javafx.scene.control.TextField;
  10. import javafx.scene.input.KeyCode;
  11. import javafx.scene.input.KeyEvent;
  12. import javafx.stage.Stage;
  13. import java.sql.Connection;
  14. import java.sql.ResultSet;
  15. import java.sql.SQLException;
  16. import java.sql.Statement;
  17. public class LoginController {
  18. @FXML //学号输入文本框
  19. protected TextField id;
  20. @FXML //密码输入文本框
  21. protected PasswordField password;
  22. @FXML //密码输入错误提示
  23. protected Label errorlabel;
  24. private BaseDao baseDao=new BaseDao();
  25. @FXML
  26. //登陆按钮事件
  27. protected void onloginclick() throws Exception {
  28. //将错误信息清除
  29. errorlabel.setText("");
  30. boolean loginstaus=false;
  31. //先判断输入是否为空
  32. if (StringUtil.isEmpty(id.getText())||StringUtil.isEmpty(password.getText()))
  33. {
  34. //如果有一个输入为空 就返回false
  35. return;
  36. }
  37. //查询数据库
  38. ResultSet rs = baseDao.searchalluser();
  39. while (rs.next())
  40. {
  41. if (rs.getString("id").equals(id.getText())&&rs.getString("password").equals(password.getText()))
  42. {
  43. //如果输入均正确
  44. System.out.println("登陆成功");
  45. loginstaus=true;
  46. login=true;
  47. User user=User.getUser();
  48. user.setId(rs.getString("id"));
  49. user.setName(rs.getString("name"));
  50. user.setAge((Integer) rs.getObject("age"));
  51. user.setJob(rs.getString("job"));
  52. user.setPassword(rs.getString("password"));
  53. Main main=new Main();
  54. main.start(new Stage());
  55. }
  56. }
  57. if (loginstaus==false)
  58. {
  59. errorlabel.setText("账号或密码输入错误,请重新输入");
  60. System.out.println("登陆失败");
  61. }
  62. }
  63. @FXML
  64. void onregisterclick() throws Exception {
  65. Register register=new Register();
  66. register.start(new Stage());
  67. }
  68. public static boolean login=false;
  69. }

注册界面 

  1. package com.example.studentgrade;
  2. import Dao.BaseDao;
  3. import Dao.StringUtil;
  4. import javafx.collections.ObservableList;
  5. import javafx.fxml.FXML;
  6. import javafx.scene.control.*;
  7. import java.sql.ResultSet;
  8. import java.sql.SQLException;
  9. public class RegisterController {
  10. private BaseDao baseDao=new BaseDao();
  11. @FXML
  12. private ComboBox job=new ComboBox<>();
  13. @FXML
  14. private TextField id;
  15. @FXML
  16. private TextField name;
  17. @FXML
  18. private PasswordField password;
  19. @FXML
  20. private TextField age;
  21. @FXML
  22. void onregisterclick() throws SQLException, ClassNotFoundException {
  23. //获取身份列表
  24. // ObservableList items = job.getItems(); //返回一个列表
  25. String jobstr= (String) job.getSelectionModel().selectedItemProperty().getValue();
  26. // System.out.println(job.getSelectionModel().selectedItemProperty().getValue());
  27. //获取各个信息
  28. //先判断是否有空
  29. if (StringUtil.isEmpty(id.getText())||StringUtil.isEmpty(name.getText())||StringUtil.isEmpty(password.getText())||StringUtil.isEmpty(age.getText())||StringUtil.isEmpty(jobstr))
  30. {
  31. // System.out.println("有空值");
  32. Dialog<ButtonType> warning = new Dialog<>();
  33. warning.getDialogPane().getButtonTypes().add(new ButtonType("确认", ButtonBar.ButtonData.OK_DONE));
  34. warning.setTitle("注册失败");
  35. warning.setContentText("请完整填写信息");
  36. warning.show();
  37. return;
  38. }
  39. String idstr=id.getText();
  40. String namestr=name.getText();
  41. String passwordstr=password.getText();
  42. String agestr=age.getText();
  43. //先判断学号是否被注册
  44. ResultSet rs = baseDao.searchalluser();
  45. while (rs.next())
  46. {
  47. if (idstr.equals(rs.getString("id")))
  48. {
  49. //如果有重复的学号
  50. Dialog<ButtonType> warning = new Dialog<>();
  51. warning.getDialogPane().getButtonTypes().add(new ButtonType("确认", ButtonBar.ButtonData.OK_DONE));
  52. warning.setTitle("注册失败");
  53. warning.setContentText("该学号已被注册");
  54. warning.show();
  55. return;
  56. }
  57. }
  58. //调用dao中方法创建新用户
  59. boolean status=baseDao.addnewuser(idstr,namestr,passwordstr,Integer.parseInt(agestr),jobstr);
  60. if (status==true)
  61. {
  62. Dialog<ButtonType> warning = new Dialog<>();
  63. warning.getDialogPane().getButtonTypes().add(new ButtonType("确认", ButtonBar.ButtonData.OK_DONE));
  64. warning.setTitle("注册成功");
  65. warning.setContentText("注册成功");
  66. warning.show();
  67. //清空所有文本框 防止重复注册
  68. id.clear();
  69. name.clear();
  70. password.clear();
  71. age.clear();
  72. }
  73. }
  74. }

登录后系统主界面

  1. package com.example.studentgrade;
  2. import Pojo.User;
  3. import javafx.application.Application;
  4. import javafx.event.ActionEvent;
  5. import javafx.event.EventHandler;
  6. import javafx.fxml.FXMLLoader;
  7. import javafx.scene.Parent;
  8. import javafx.scene.Scene;
  9. import javafx.scene.control.Button;
  10. import javafx.scene.text.Text;
  11. import javafx.stage.Stage;
  12. import java.io.IOException;
  13. public class Main extends Application {
  14. @Override
  15. public void start(Stage stage) throws Exception {
  16. // FXMLLoader fxmlLoader = new FXMLLoader(Main.class.getResource("Main.fxml"));
  17. Parent root=FXMLLoader.load(Register.class.getResource("Main.fxml"));
  18. Scene scene = new Scene(root, 898, 621);
  19. //获取用户信息
  20. User user=User.getUser();
  21. //获取Text标签
  22. Text name= (Text) root.lookup("#name");
  23. Text id=(Text)root.lookup("#id");
  24. Text age=(Text)root.lookup("#age");
  25. //设置标签值
  26. name.setText(user.getName());
  27. id.setText(user.getId());
  28. age.setText(String.valueOf(user.getAge()));
  29. //设置学生端 添加成绩和删除成绩按钮不可见 不可修改成绩
  30. //获得这3个按钮
  31. Button addbutton= (Button) root.lookup("#add");
  32. Button delbutton= (Button) root.lookup("#del");
  33. Button modifybutton=(Button)root.lookup("#modify");
  34. Button findbutton=(Button)root.lookup("#find");
  35. //通过判断job属性来区分客户端显示类型
  36. if (user.getJob().equals("学生"))
  37. {
  38. stage.setTitle("学生成绩管理系统(学生端)");
  39. addbutton.setVisible(false);
  40. delbutton.setVisible(false);
  41. modifybutton.setVisible(false);
  42. //将查找成绩按钮移至中间
  43. findbutton.setLayoutX(799); findbutton.setLayoutY(296);
  44. }else if (user.getJob().equals("教师"))
  45. {
  46. stage.setTitle("学生成绩管理系统(教师端)");
  47. }else {
  48. stage.setTitle("学生成绩管理系统(管理员端)");
  49. }
  50. //为退出按钮绑定事件
  51. Button tuichu=(Button)root.lookup("#exit");
  52. tuichu.setOnAction(new EventHandler<ActionEvent>() {
  53. @Override
  54. public void handle(ActionEvent actionEvent) {
  55. stage.close();
  56. LoginApplication loginApplication=new LoginApplication();
  57. try {
  58. loginApplication.start(new Stage());
  59. System.out.println("退出成功");
  60. } catch (IOException e) {
  61. throw new RuntimeException(e);
  62. }
  63. }
  64. });
  65. stage.setScene(scene);
  66. //设置不可改变大小
  67. stage.setResizable(false);
  68. stage.show();
  69. }
  70. }

其中的User类利用了单例模式,只保存了当前登陆用户的所有信息,方便各个类面板调用判断。

这个也是刚学不久后做的第二个实例,花了大概一天时间,还不是很完美,经过自己测试基本功能都能正常使用。

这次创建了Basedao类专门用来连接数据库,因此改动部分较少,只需要改成自己的数据库名,表名就行,也可以先根据我的来用,后续根据自己的需要修改。

需要完整源代码的可以私信我,麻烦大家点个赞就好了。目前还没有整理好,且功能在不断地完善。有bug的地方可以指出,共同探讨学习。

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

闽ICP备14008679号