赞
踩
目录
这里我建了两张表,一张是系统登陆信息的,另一张是存储了所有学生成绩的表,可以根据自己需要修改表的内容和属性格式,后续会不断完善
如下所示:
另外需要java连接mysql的jar包,以及javafx的jar包导入,这里就不详细多说。
这里可以换成自己的图片
这里的图片也可以更换成预设的头像,可以实现根据用户切换不同的图片
学生端只做了查看和查找成绩的功能,修改,添加,删除等功能在教师端实现。同时增加了修改个人信息 的功能 通过验证密码来判断修改权限。
学生端只能查看自己一个人的成绩 因为这里使用的是Tableview组件,所以省去了实现排序功能。
这里实现了根据日期和备注查找,后续也可以实现根据科目,总分进行分别查找,这些功能都比较好实现,主要是数据库的条件查找加上控件的重新展示排列,操作比较麻烦,但是实现起来比较简单。
教师端的功能就比较丰富,增删改查,可以查考所有学生的成绩
给每个学生添加成绩,这个功能就很鸡肋,不如直接去数据库导入Excel文件添加。
这里直接在tableview表格上单击成绩修改 简单很多 我这里设置了只有三科成绩和备注可以修改,总分和平均分会随着成绩的修改而自动修改。因此我在这里隐藏了修改成绩按钮。
也是直接在tableview中直接操作,选中后点击删除成绩按钮,会弹出确认对话框,确认后即删除成功,表格也会自动更新。这里的删除和修改权限只有教师端才有,学生端的功能被隐藏。
目前支持根据姓名精确查找,日期,备注模糊查找,然后也是和显示成绩一样,可以在表格上修改,删除。
因为代码过多分了多个类,所以就先展示一部分,具体源代码可以私信我获取
- package com.example.studentgrade;
-
- import Dao.BaseDao;
- import Dao.StringUtil;
- import Pojo.User;
- import javafx.event.EventHandler;
- import javafx.fxml.FXML;
- import javafx.scene.control.Label;
- import javafx.scene.control.PasswordField;
- import javafx.scene.control.TextField;
- import javafx.scene.input.KeyCode;
- import javafx.scene.input.KeyEvent;
- import javafx.stage.Stage;
-
- import java.sql.Connection;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
-
- public class LoginController {
-
- @FXML //学号输入文本框
- protected TextField id;
- @FXML //密码输入文本框
- protected PasswordField password;
- @FXML //密码输入错误提示
- protected Label errorlabel;
- private BaseDao baseDao=new BaseDao();
-
- @FXML
- //登陆按钮事件
- protected void onloginclick() throws Exception {
- //将错误信息清除
- errorlabel.setText("");
- boolean loginstaus=false;
- //先判断输入是否为空
- if (StringUtil.isEmpty(id.getText())||StringUtil.isEmpty(password.getText()))
- {
- //如果有一个输入为空 就返回false
- return;
- }
- //查询数据库
- ResultSet rs = baseDao.searchalluser();
- while (rs.next())
- {
- if (rs.getString("id").equals(id.getText())&&rs.getString("password").equals(password.getText()))
- {
- //如果输入均正确
- System.out.println("登陆成功");
- loginstaus=true;
- login=true;
- User user=User.getUser();
- user.setId(rs.getString("id"));
- user.setName(rs.getString("name"));
- user.setAge((Integer) rs.getObject("age"));
- user.setJob(rs.getString("job"));
- user.setPassword(rs.getString("password"));
- Main main=new Main();
- main.start(new Stage());
-
- }
- }
- if (loginstaus==false)
- {
- errorlabel.setText("账号或密码输入错误,请重新输入");
- System.out.println("登陆失败");
- }
- }
- @FXML
- void onregisterclick() throws Exception {
- Register register=new Register();
- register.start(new Stage());
- }
-
- public static boolean login=false;
- }
- package com.example.studentgrade;
-
- import Dao.BaseDao;
- import Dao.StringUtil;
- import javafx.collections.ObservableList;
- import javafx.fxml.FXML;
- import javafx.scene.control.*;
-
- import java.sql.ResultSet;
- import java.sql.SQLException;
-
- public class RegisterController {
- private BaseDao baseDao=new BaseDao();
- @FXML
- private ComboBox job=new ComboBox<>();
- @FXML
- private TextField id;
- @FXML
- private TextField name;
- @FXML
- private PasswordField password;
- @FXML
- private TextField age;
- @FXML
- void onregisterclick() throws SQLException, ClassNotFoundException {
- //获取身份列表
- // ObservableList items = job.getItems(); //返回一个列表
- String jobstr= (String) job.getSelectionModel().selectedItemProperty().getValue();
- // System.out.println(job.getSelectionModel().selectedItemProperty().getValue());
- //获取各个信息
- //先判断是否有空
- if (StringUtil.isEmpty(id.getText())||StringUtil.isEmpty(name.getText())||StringUtil.isEmpty(password.getText())||StringUtil.isEmpty(age.getText())||StringUtil.isEmpty(jobstr))
- {
- // System.out.println("有空值");
- Dialog<ButtonType> warning = new Dialog<>();
- warning.getDialogPane().getButtonTypes().add(new ButtonType("确认", ButtonBar.ButtonData.OK_DONE));
- warning.setTitle("注册失败");
- warning.setContentText("请完整填写信息");
- warning.show();
- return;
- }
- String idstr=id.getText();
- String namestr=name.getText();
- String passwordstr=password.getText();
- String agestr=age.getText();
- //先判断学号是否被注册
- ResultSet rs = baseDao.searchalluser();
- while (rs.next())
- {
- if (idstr.equals(rs.getString("id")))
- {
- //如果有重复的学号
- Dialog<ButtonType> warning = new Dialog<>();
- warning.getDialogPane().getButtonTypes().add(new ButtonType("确认", ButtonBar.ButtonData.OK_DONE));
- warning.setTitle("注册失败");
- warning.setContentText("该学号已被注册");
- warning.show();
- return;
- }
- }
- //调用dao中方法创建新用户
- boolean status=baseDao.addnewuser(idstr,namestr,passwordstr,Integer.parseInt(agestr),jobstr);
- if (status==true)
- {
- Dialog<ButtonType> warning = new Dialog<>();
- warning.getDialogPane().getButtonTypes().add(new ButtonType("确认", ButtonBar.ButtonData.OK_DONE));
- warning.setTitle("注册成功");
- warning.setContentText("注册成功");
- warning.show();
- //清空所有文本框 防止重复注册
- id.clear();
- name.clear();
- password.clear();
- age.clear();
- }
-
-
- }
- }
- package com.example.studentgrade;
-
- import Pojo.User;
- import javafx.application.Application;
- import javafx.event.ActionEvent;
- import javafx.event.EventHandler;
- import javafx.fxml.FXMLLoader;
- import javafx.scene.Parent;
- import javafx.scene.Scene;
- import javafx.scene.control.Button;
- import javafx.scene.text.Text;
- import javafx.stage.Stage;
-
- import java.io.IOException;
-
- public class Main extends Application {
-
-
- @Override
- public void start(Stage stage) throws Exception {
- // FXMLLoader fxmlLoader = new FXMLLoader(Main.class.getResource("Main.fxml"));
- Parent root=FXMLLoader.load(Register.class.getResource("Main.fxml"));
- Scene scene = new Scene(root, 898, 621);
- //获取用户信息
- User user=User.getUser();
- //获取Text标签
- Text name= (Text) root.lookup("#name");
- Text id=(Text)root.lookup("#id");
- Text age=(Text)root.lookup("#age");
- //设置标签值
- name.setText(user.getName());
- id.setText(user.getId());
- age.setText(String.valueOf(user.getAge()));
-
- //设置学生端 添加成绩和删除成绩按钮不可见 不可修改成绩
- //获得这3个按钮
- Button addbutton= (Button) root.lookup("#add");
- Button delbutton= (Button) root.lookup("#del");
- Button modifybutton=(Button)root.lookup("#modify");
- Button findbutton=(Button)root.lookup("#find");
- //通过判断job属性来区分客户端显示类型
- if (user.getJob().equals("学生"))
- {
- stage.setTitle("学生成绩管理系统(学生端)");
- addbutton.setVisible(false);
- delbutton.setVisible(false);
- modifybutton.setVisible(false);
- //将查找成绩按钮移至中间
- findbutton.setLayoutX(799); findbutton.setLayoutY(296);
- }else if (user.getJob().equals("教师"))
- {
- stage.setTitle("学生成绩管理系统(教师端)");
- }else {
- stage.setTitle("学生成绩管理系统(管理员端)");
- }
- //为退出按钮绑定事件
- Button tuichu=(Button)root.lookup("#exit");
- tuichu.setOnAction(new EventHandler<ActionEvent>() {
- @Override
- public void handle(ActionEvent actionEvent) {
- stage.close();
- LoginApplication loginApplication=new LoginApplication();
- try {
- loginApplication.start(new Stage());
- System.out.println("退出成功");
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
- });
-
-
-
- stage.setScene(scene);
- //设置不可改变大小
- stage.setResizable(false);
- stage.show();
-
-
- }
- }
其中的User类利用了单例模式,只保存了当前登陆用户的所有信息,方便各个类面板调用判断。
这个也是刚学不久后做的第二个实例,花了大概一天时间,还不是很完美,经过自己测试基本功能都能正常使用。
这次创建了Basedao类专门用来连接数据库,因此改动部分较少,只需要改成自己的数据库名,表名就行,也可以先根据我的来用,后续根据自己的需要修改。
需要完整源代码的可以私信我,麻烦大家点个赞就好了。目前还没有整理好,且功能在不断地完善。有bug的地方可以指出,共同探讨学习。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。