🍅程序员小王的博客:程序员小王的博客
🍅 欢迎点赞 👍 收藏 ⭐留言 📝
🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕
🍅java自学的学习路线:java自学的学习路线
今天有个同学想实现《javafx+JDBC实现新生报到管理系统》,然后我根据网上的一个学生管理系统给他简单修改实现了一下,主要使用JDBC+javafx实现,然后主要是通过数据库账户和密码登录系统,然后分老师和学生,学生通过学号查询自己的信息,可以修改自己的信息,老师可以增加学院,班级,学生信息等
数据库名为当前项目连接的数据库名,用户名和密码为mysql的账户和密码

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity"
minHeight="-Infinity" minWidth="-Infinity"
prefHeight="300.0" prefWidth="450.0" style="-fx-background-color: #87CEFA;"
xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="control.LoginControl">
<children>
<ImageView layoutX="20.0" layoutY="73.0">
<image>
<Image url="@../image/Login_user.png" />
</image>
</ImageView>
<Label layoutX="160.0" layoutY="125.0" text="用户名" textAlignment="CENTER">
<font>
<Font size="20.0" />
</font>
</Label>
<Label layoutX="177.0" layoutY="165.0" text="密码" textAlignment="CENTER">
<font>
<Font size="20.0" />
</font>
</Label>
<TextField fx:id="text_userName" layoutX="235.0" layoutY="125.0" promptText="请输入数据库用户名" text="root">
<font>
<Font name="System Italic" size="15.0" />
</font>
</TextField>
<PasswordField fx:id="text_password" layoutX="235.0" layoutY="165.0" promptText="请输入数据库密码" />
<Button fx:id="btn_login" layoutX="356.0" layoutY="206.0" mnemonicParsing="false" onAction="#loginDataBase" prefHeight="30.0" prefWidth="80.0" text="登录" textFill="RED">
<font>
<Font size="18.0" />
</font>
</Button>
<Label contentDisplay="CENTER" layoutX="106.0" layoutY="214.0" text="萌新,贵州师范学院欢迎你!" textAlignment="CENTER" wrapText="true">
<font>
<Font size="14.0" />
</font>
</Label>
<ImageView fitHeight="32.0" fitWidth="32.0" layoutX="4.0" layoutY="255.0">
<image>
<Image url="@../image/time.png" />
</image>
</ImageView>
<ImageView fitHeight="32.0" fitWidth="32.0" layoutX="234.0" layoutY="254.0">
<image>
<Image url="@../image/IP.png" />
</image>
</ImageView>
<TextField fx:id="text_time" alignment="CENTER" disable="true" editable="false" layoutX="39.0" layoutY="253.0" prefHeight="34.0" prefWidth="150.0" text="1970年1月1日">
<font>
<Font size="16.0" />
</font>
</TextField>
<TextField fx:id="text_IP" alignment="CENTER" disable="true" editable="false" layoutX="266.0" layoutY="253.0" prefHeight="34.0" prefWidth="140.0" text="192.168.0.1">
<font>
<Font size="16.0" />
</font>
</TextField>
<Label alignment="CENTER" contentDisplay="CENTER" layoutX="135.0" layoutY="23.0" text="欢迎使用新生报到管理系统" textAlignment="CENTER" wrapText="true">
<font>
<Font size="18.0" />
</font>
</Label>
<Label layoutX="160.0" layoutY="85.0" text="数据库">
<font>
<Font size="20.0" />
</font>
</Label>
<TextField fx:id="text_DataBaseName" layoutX="235.0" layoutY="84.0" promptText="请输入数据库名称" text="newstudent" />
</children>
</AnchorPane>
连接数据库
public class DataBase {
Connection connection = null;
ResultSet rs = null;
//mysql数据库url
private static String DateBaseName=null;
private static String userMySql=null;
private static String passwordMySql=null;
private static String urlMySql = null;
public DataBase() {
try {
//mysql数据库设置驱动程序类型
Class.forName("com.mysql.cj.jdbc.Driver");
System.out.println("mysql数据库驱动加载成功");
//sqlserver数据库设置驱动程序类型
//Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//System.out.println("sqlserver数据库驱动加载成功");
}
catch(java.lang.ClassNotFoundException e) {
e.printStackTrace();
}
}
public DataBase(String DataBaseName,String userName,String password)
{
this();
DataBase.DateBaseName=DataBaseName;
DataBase.userMySql=userName;
DataBase.passwordMySql=password;
urlMySql = "jdbc:mysql://localhost:3306/"+DateBaseName+"?user="
+userMySql+"&password="+passwordMySql + "&useUnicode=true&characterEncoding=utf-8";
}
public boolean connect()
{
if(urlMySql==null)
{
return false;
}
try{
//mysql数据库
connection = DriverManager.getConnection(urlMySql);
//sqlserver数据库
//connection = DriverManager.getConnection(urlSqlServer);
if(connection!=null){
System.out.println("数据库连接成功");
return true;
}
return false;
}
catch(Exception e){
//e.printStackTrace();
System.out.println("数据库连接失败");
return false;
}
}
public void disconnect(){
try{
if(connection != null){
connection.close();
connection = null;
}
}
catch(Exception e){
e.printStackTrace();
}
}

<HBox xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="control.SelectControl">
<children>
<Button fx:id="btn_Teacher" contentDisplay="CENTER" mnemonicParsing="false" onAction="#selectTeacher" prefHeight="300.0" prefWidth="300.0" style="-fx-background-color: #FFC0CB;" text="我是老师" textAlignment="CENTER" wrapText="true">
<font>
<Font size="72.0" />
</font>
</Button>
<Separator orientation="VERTICAL" prefHeight="300.0" />
<Button fx:id="btn_Student" contentDisplay="CENTER" mnemonicParsing="false" onAction="#selectStudent" prefHeight="300.0" prefWidth="300.0" style="-fx-background-color: #90EE90;" text="我是学生" textAlignment="CENTER" wrapText="true">
<font>
<Font size="72.0" />
</font>
</Button>
</children>
</HBox>
点击我是学生,然后进入学生页面,因为学生是新生,不需要账户和密码登录,学校给学生分配了学号的,我们输入自己的学号,点击查询,就能查询自己的个人信息了

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="410.0" prefWidth="500.0" style="-fx-background-color: #FFF8DC;" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="control.StudentControl">
<children>
<Label layoutX="94.0" layoutY="15.0" text="学号" textAlignment="CENTER" textOverrun="CENTER_ELLIPSIS" wrapText="true">
<font>
<Font size="18.0" />
</font>
</Label>
<TextField fx:id="text_StudentID" layoutX="148.0" layoutY="12.0" promptText="请输入学号查询自己的信息" />
<Button fx:id="btn_Select" layoutX="366.0" layoutY="12.0" mnemonicParsing="false" onAction="#selcetData" text="查询" />
<Label layoutX="148.0" layoutY="72.0" text="姓名">
<font>
<Font size="18.0" />
</font>
</Label>
<TextField fx:id="text_Name" layoutX="189.0" layoutY="69.0" prefHeight="30.0" prefWidth="100.0" />
<Label layoutX="330.0" layoutY="72.0" text="性别">
<font>
<Font size="18.0" />
</font>
</Label>
<ComboBox fx:id="comboBox_Sex" layoutX="373.0" layoutY="69.0" prefHeight="30.0" prefWidth="80.0" />
<Label layoutX="148.0" layoutY="124.0" text="生日">
<font>
<Font size="18.0" />
</font>
</Label>
<Label layoutX="148.0" layoutY="176.0" text="籍贯">
<font>
<Font size="18.0" />
</font>
</Label>
<TextField fx:id="text_Birthday" layoutX="189.0" layoutY="121.0" prefHeight="30.0" prefWidth="120.0" />
<TextField fx:id="text_NativePlace" layoutX="189.0" layoutY="173.0" prefHeight="30.0" prefWidth="175.0" />
<Label layoutX="60.0" layoutY="235.0" text="班级">
<font>
<Font size="18.0" />
</font>
</Label>
<Button fx:id="btn_updata" layoutX="209.0" layoutY="366.0" mnemonicParsing="false" onAction="#upData" text="更新" textFill="RED" visible="false">
<font>
<Font size="18.0" />
</font>
</Button>
<ComboBox fx:id="comboBox_Class" layoutX="110.0" layoutY="235.0" prefWidth="150.0" />
<Label layoutX="277.0" layoutY="235.0" text="学籍">
<font>
<Font size="18.0" />
</font>
</Label>
<TextField fx:id="text_Change" disable="true" editable="false" layoutX="318.0" layoutY="235.0" prefHeight="30.0" prefWidth="65.0" />
<Label layoutX="60.0" layoutY="285.0" text="院系">
<font>
<Font size="18.0" />
</font>
</Label>
<ComboBox fx:id="comboBox_Department" layoutX="110.0" layoutY="285.0" prefHeight="30.0" prefWidth="330.0" />
<Label layoutX="60.0" layoutY="335.0" text="奖励">
<font>
<Font size="18.0" />
</font>
</Label>
<TextField fx:id="text_Reward" editable="false" layoutX="110.0" layoutY="330.0" prefHeight="30.0" prefWidth="150.0" />
<Label layoutX="277.0" layoutY="335.0" text="处分">
<font>
<Font size="18.0" />
</font>
</Label>
<TextField fx:id="text_Punishment" editable="false" layoutX="318.0" layoutY="330.0" prefHeight="30.0" prefWidth="120.0" />
<ImageView layoutX="-4.0" layoutY="70.0">
<image>
<Image url="@../image/picture.png" />
</image>
</ImageView>
<Button fx:id="btn_more" layoutX="332.0" layoutY="121.0" mnemonicParsing="false" onAction="#moreInfo" text="更多信息" textFill="#001eff" visible="false" />
</children>
</AnchorPane>
*
点击更多信息查看自己是否有奖学金

点击进入我是老师,进入学生学籍管理系统,可以查看所有学生信息


MenuItem menu_add = new MenuItem("新增");
menu_add.setGraphic(new ImageView(new Image("image/add.png")));
menu_add.setOnAction((ActionEvent t) -> {
addStudent(t);
});
MenuItem menu_modify = new MenuItem("修改");
menu_modify.setGraphic(new ImageView(new Image("image/modify.png")));
menu_modify.setOnAction((ActionEvent t) -> {
modifyStudent(t);
});
MenuItem menu_delete = new MenuItem("删除");
menu_delete.setGraphic(new ImageView(new Image("image/delete.png")));
menu_delete.setOnAction((ActionEvent t) -> {
deleteStudent(t);
});
MenuItem menu_exit = new MenuItem("退出");
menu_exit.setGraphic(new ImageView(new Image("image/exit.png")));
menu_exit.setOnAction((ActionEvent t) -> {
System.exit(0);
});
点击新增



@Override
public void initialize(URL location, ResourceBundle resources) {
//布局初始化
HBox_bottom.setAlignment(Pos.CENTER);
HBox_application.setAlignment(Pos.CENTER);
text_select.setText("点击查询返回全部信息");
//表格初始化
tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);//表格自动填充
data =FXCollections.observableArrayList();//数据
tableView.setItems(data);//添加数据
tableView.setStyle( "-fx-alignment: CENTER;");
data.clear();
data.addAll(Person.getPeopleFromSQL(Student.getStudentIDFromSQL()));
//每一列初始化
InitTableColumes();
//标签初始化
Date date =new Date();
DateFormat longFormat=DateFormat.getDateInstance(DateFormat.LONG);
InetAddress localAddress=null;
try {
localAddress=InetAddress.getLocalHost();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
label_IP.setText(localAddress.getHostAddress());
label_IP.setTooltip(new Tooltip("本机IP"));
label_time.setText(longFormat.format(date));
label_time.setTooltip(new Tooltip("当前时间"));
//下拉栏初始化
ObservableList<String> Options =
FXCollections.observableArrayList(optionsName);
comboBox.setItems(Options);
comboBox.setTooltip(new Tooltip("选择一个查询项"));
//菜单栏初始化
//编辑栏
MenuItem menu_add = new MenuItem("新增");
menu_add.setGraphic(new ImageView(new Image("image/add.png")));
menu_add.setOnAction((ActionEvent t) -> {
addStudent(t);
});
MenuItem menu_modify = new MenuItem("修改");
menu_modify.setGraphic(new ImageView(new Image("image/modify.png")));
menu_modify.setOnAction((ActionEvent t) -> {
modifyStudent(t);
});
MenuItem menu_delete = new MenuItem("删除");
menu_delete.setGraphic(new ImageView(new Image("image/delete.png")));
menu_delete.setOnAction((ActionEvent t) -> {
deleteStudent(t);
});
MenuItem menu_exit = new MenuItem("退出");
menu_exit.setGraphic(new ImageView(new Image("image/exit.png")));
menu_exit.setOnAction((ActionEvent t) -> {
System.exit(0);
});
menu_edit.getItems().addAll(menu_add,menu_modify,menu_delete,menu_exit);
//帮助栏
MenuItem menu_FU = new MenuItem("教师队伍");
menu_FU.setOnAction((ActionEvent t) ->
{
gotoFuWebpage();
});
MenuItem menu_MO = new MenuItem("学校官网");
menu_MO.setOnAction((ActionEvent t) ->
{
gotoMoWebPage();
});
menu_help.getItems().addAll(menu_FU,menu_MO);
}
有六张表

数据库名: newstudent
文档版本: V1.0.0
文档描述: 新生入学管理系统数据库表设计描述
| 表名 | 说明 |
|---|---|
| class | 专业班级 |
| department | 学院 |
| mychange | 改变 |
| punishment | 惩罚 |
| reward | 奖学金 |
| student | 学生信息 |
表名: class
说明:
数据列:
| 序号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
|---|---|---|---|---|---|---|---|---|
| 1 | ID | char | 12 | 0 | N | Y | ||
| 2 | Name | char | 45 | 0 | Y | N | ||
| 3 | Monitor | char | 12 | 0 | Y | N |
表名: department
说明:
数据列:
| 序号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
|---|---|---|---|---|---|---|---|---|
| 1 | ID | char | 12 | 0 | N | Y | ||
| 2 | Name | char | 150 | 0 | Y | N |
表名: mychange
说明:
数据列:
| 序号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 | |
|---|---|---|---|---|---|---|---|---|---|
| 1 | ID | char | 24 | 0 | N | Y | |||
| 2 | StudentID | char | 12 | 0 | Y | N | |||
| 3 | MyChange | int | 10 | 0 | Y | N | |||
| 4 | Rec_Time | char | 12 | 0 | Y | N | |||
| 5 | Description | char | 90 | 0 | Y | N |
表名: punishment
说明:
数据列:
| 序号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
|---|---|---|---|---|---|---|---|---|
| 1 | ID | char | 24 | 0 | N | Y | ||
| 2 | StudentID | char | 12 | 0 | Y | N | ||
| 3 | Levels | int | 10 | 0 | Y | N | ||
| 4 | Rec_Time | char | 12 | 0 | Y | N | ||
| 5 | Enable | bit | 1 | 0 | Y | N | ||
| 6 | Description | char | 90 | 0 | Y | N |
表名: reward
说明:
数据列:
| 序号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 | |
|---|---|---|---|---|---|---|---|---|---|
| 1 | ID | char | 24 | 0 | N | Y | |||
| 2 | StudentID | char | 12 | 0 | Y | N | |||
| 3 | Levels | int | 10 | 0 | Y | N | |||
| 4 | Rec_Time | char | 12 | 0 | Y | N | |||
| 5 | Description | char | 90 | 0 | Y | N |
表名: student
说明:
数据列:
| 序号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
|---|---|---|---|---|---|---|---|---|
| 1 | StudentID | char | 12 | 0 | N | Y | ||
| 2 | Name | char | 12 | 0 | Y | N | ||
| 3 | Sex | char | 6 | 0 | Y | N | ||
| 4 | Class | char | 12 | 0 | Y | N | ||
| 5 | Department | char | 12 | 0 | Y | N | ||
| 6 | Birthday | char | 12 | 0 | Y | N | ||
| 7 | Native_Place | char | 24 | 0 | Y | N |
新生报道的源码下载地址:https://download.csdn.net/download/weixin_44385486/85788775
