日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

基于JavaFX实现的数据库学生管理系统

發布時間:2025/3/15 windows 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于JavaFX实现的数据库学生管理系统 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

0 前言

本博客所有內容和代碼僅用來學習,無任何商用,如有侵權請聯系我刪除。

本文原創,創作不易,轉載請注明!!!

源碼如下:
度盤鏈接:https://pan.baidu.com/s/1M1nzoOSRdxG6h06RrUXPgA
提取碼:Lin2

CSDN: https://download.csdn.net/download/RongLin02/19666506

本文鏈接
個人博客:https://ronglin.fun/?p=134
PDF鏈接:見博客網站
CSDN: https://blog.csdn.net/RongLin02/article/details/113002758

0.1 關于課程設計

本學期學習了課程:數據庫系統、面向對象編程,學院開始了為期兩周的數據庫課程設計,主要用編程語言連接數據庫實現數據庫信息的管理,本人選擇了較為簡單且普遍的一個課題——學生管理系統。本次課程設計所用語言為Java、開發工具為eclipse、數據庫為MySQL5.5,為了控件更加美觀和學習更多有關Java的技術,本次GUI設計采用JavaFX,界面更加美觀,設計更加便利。
本博客主要記錄JavaFX而不是數據庫設計,數據庫系統代碼設計因人而異,需要程序員會基本的Java語法(尤其是JDBC),學會基本的GUI概念和Swing控件的使用,再加上一定的編程思維和時間即可完成。
本次課程設計時間安排:
第一周周一上午安裝MySQL5.5,周一下午和周二一整天學習JavaFX最基本的知識,周三開始到第二周的周二完成代碼設計,第二周周三晚上老師檢查,第二周周四寫實驗報告,至此完成。

0.2 關于JavaFX

先分享幾個我自己覺得好用的網站,如果侵權請聯系我刪除
1.JavaFX中文介紹
http://www.javafxchina.net/blog/docs/
這個網站里邊有JavaFX基本功能的實例代碼和運行之后的截圖,快速入門熟悉一個控件很方便,最最最最重要的它是中文
2.圖標網站
https://www.iconfont.cn/
這個網站有很多小圖標可以讓程序更美觀,需要github賬號或微博賬號
3.JavaFX Api
https://docs.oracle.com/javafx/2/api/index.html
最最最重要的網站,api文檔,所有有關JavaFX的類方法屬性啥的都可以查到,當然因為全都是英文,讀起來可能有點吃力,但是要是想靈活運用控件,api文檔必須要讀的,因為JavaFX中文解釋在網站上很少,最全的就是查api了
4.Javafx scene builder使用中文幫助
https://www.pianshen.com/article/71881133912/
這個網站里翻譯了scene builder的菜單欄,中文很友好,還有scene builder使用的簡單教程
5.bilibili大學
https://www.bilibili.com/video/BV1y7411L7f8?from=search&seid=11179207790505725760
這個教學視頻很精簡,大概1.5倍速、2倍速很快就能看完,基礎的語法都能講到,本人就是看的這個,基本上一天多就能上手了,很適合極速上手。
https://www.bilibili.com/video/BV1fW41167RP
與上面的老師對比,這個視頻講的極其細致,甚至包括了api中的每一個方法的用法,要是有某一個控件不會用,推薦去看這個老師的視頻學習。
6.提示
當然,學習JavaFX我個人覺得首選 API文檔,JavaFX實現了代碼界面和功能界面的分離,使程序的可讀性明顯提高,當然控件也更美觀,可擴展性極強。

1 MySQL的安裝

這是課設最最基礎的一步,本人所用的是mysql-5.5.28-win32版本,按照CSDN的安裝教程一步一步安裝,轉載網址如下:
https://blog.csdn.net/weixin_38239039/article/details/79629984
根據個人情況選擇安裝的設置選項,同時注意中文編碼為了和eclipse、windows系統cmd對應,全部統一“GBK”,以免出現數據庫中的中文數據亂碼。
如果發現MySQL安裝到最后一步卡住,可能是因為前置版本沒有刪除干凈,就把C盤下的programData中的MySQL文件全部刪除,一般這個是隱藏的,需要搜索出來。

2 界面預覽

2.1 登陸界面

2.2 用戶身份選擇界面(登錄成功界面)

2.3 學生界面


點擊查詢之后

2.4 老師界面

2.5 添加/修改學生界面


3 JavaFX控件簡述及代碼實現

3.1 JavaFX的安裝和工具

3.1.1 e(fx)clipse 的安裝

在eclipse 菜單欄 Help – Eclipse Marketplace中可以找到,但是下載速度感人,網上還有其他途徑下載,讀者可自行搜索學習。

3.1.2 Javafx scene builder

這個工具和eclipse是獨立的,可視化操作JavaFX控件的工具,直接生成代碼寫入FXML文件,省去了需要程序員自己用代碼設計界面。上面推薦的網站里有一個是專門講解Javafx scene builder的,可以對照著看一看,網上還有很多的配置教程,完成配置之后,在eclipse中對著fxml文件直接右鍵即可調出來:

同時Javafx scene builder還提供了Controler類代碼的生成在菜單欄Veiw中:

3.2 Fxml文件的使用

3.2.1 fxml和control類

每一個fxml文件負責面板中控件的位置 ,然后還有一個需要一個與其綁定的control類負責各個控件的功能(也可以沒有),兩個方式可以實現fxml和control類綁定:
方法一,Javafx scene builder中左下角可以直接綁定工程文件中的control類:

control.LoginControl表示在一個名為 control 的文件夾下中的一個 LoninControl 類。
方法二,在fxml文件代碼中加上這樣一句:

fx:controller="control.LoginControl"

如下圖:

3.2.2 fxml文件的調用

這里直接看代碼可能更加清楚,如果想要更詳細的了解其機制,請查詢API(上面的網站推薦有):

package application;import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.stage.Stage; import javafx.scene.Scene;import javafx.scene.layout.Pane;//程序入口 public class Main extends Application{@Overridepublic void start(Stage primaryStage) {try { Pane loginPane = FXMLLoader.load(getClass().getResource("/resources/fxml_Login.fxml"));Scene loginScene = new Scene(loginPane,450,300);primaryStage.setScene(loginScene);primaryStage.setTitle("數據庫系統登錄入口");primaryStage.show();primaryStage.setResizable(false); } catch(Exception e) {e.printStackTrace();}}public static void main(String[] args) {launch(args);} }

這是JavaFX固定的主程序啟動代碼,每一個fxml對應一個面板,所以在程序中調用fxml需要如此調用

Pane loginPane = FXMLLoader.load(getClass().getResource("/resources/fxml_Login.fxml"));

3.2.3 control類的運用

我們已經成功的調用了fxml中的面板,如果要想處理面板的信息,我們就需要一個control類了,可以將其類比為Swing中的監聽器。上文說到,Javafx scene builder中可以自動生成control代碼,其中標有@FXML的變量和方法就對應了fxml中的控件和點擊了控件所觸發的結果。同時,每一個control類還可以實現 Initializable 接口中的initialize()方法實現每一個控件的初始化,可以理解為類似于控件們的構造函數,但是 Initializable 接口和構造函數的關系,如果讀者有興趣的話可以可自行搜索學習。代碼格式如下:

public class Control implements Initializable {@FXMLprivate MenuBar menus;//對應fxml中的控件@Overridepublic void initialize(URL location, ResourceBundle resources) {}//初始化控件方法@FXMLvoid addStudent(ActionEvent event) {}//對應點擊控件之后要執行的代碼}

3.3 控件簡述和特殊用法

其實控件的用法在官方API中都有用法,但是對于我這種速成法學習JavaFX來說,我沒有很長的時間去一個一個方法的鉆研查找,而且API中全是英文,理解起來麻煩,同時相關用法在網上資料較少,我在這里羅列一些我在設計GUI中常用的和網上資料較少的控件用法,僅供參考,正確的用法請查詢官方API。

3.3.1 場景的切換

有關場景的切換和場景之間的數據通訊,這里有三篇CSDN博客有關于場景切換的詳細實現:
https://blog.csdn.net/nthack5730/article/details/51901593
https://blog.csdn.net/miniduhua/article/details/71190747
https://blog.csdn.net/eguid/article/details/94326636
我這里因為不需要進行場景之間的數據溝通,僅僅是場景切換,比較簡單,示例代碼:

//獲取當前場景且關閉Stage loginStage = (Stage) btn_login.getScene().getWindow();loginStage.close();//登錄成功場景出現try { Pane selectPane = FXMLLoader.load(getClass().getResource("/resources/fxml_Select.fxml"));Scene selectScene = new Scene(selectPane,606,300);Stage selectStage=new Stage();selectStage.setScene(selectScene);selectStage.setTitle("登錄成功");selectStage.show();selectStage.setResizable(false);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}

場景顯示不再贅述,和Main入口中的方法一樣,直接stage.show()即可,這里解釋一下如何通過點擊按鈕實現本窗口關閉,這句代碼:
Stage loginStage = (Stage) btn_login.getScene().getWindow(); loginStage.close();
就是獲取 一個名為 btn_login 的按鈕 所在的 Scene 所在的窗口,然后把它強制類型轉為 Stage 類,然后 stage.close()即可實現按鈕所在窗口的關閉。

3.3.2 ComboBox的用法

下拉選擇框ComboBox的用法在JavaFX中的用法非常靈活,有關更多復雜的用法,讀者有興趣的話請查詢官方API,這里就簡單的示范一下如何給ComboBox填充選項。
在定義ComboBox類的時候需要指定一個泛型,就是下拉框中的選項的類型,我這里統一為String,僅僅作為性別選擇框,只有“男” “女”兩個選擇。通過setItems()方法設置下拉框的內容,用法可以直接copy,直接這樣用即可,同時observableArrayList()方法中也可以傳入一個 ArrayList< T >類型的引用。

@FXMLprivate ComboBox<String> comboBox_Sex;//一個性別的下拉選擇框@Overridepublic void initialize(URL location, ResourceBundle resources) {ObservableList<String> OptionsSex = FXCollections.observableArrayList("男","女");comboBox_Sex.setItems(OptionsSex);}//初始化方法

其他常規用法請查詢API或者上面的JavaFX中文網站,里邊都有詳細的說明。

3.3.2 TableView的用法

TableView的用法極其復雜,這里僅僅展示一下我在課設中的簡單用法,更多靈活的用法請查詢官方API:

@FXMLprivate TableView<Person> tableView;@FXMLprivate TableColumn<Person, String> table_StudentID;@Overridepublic void initialize(URL location, ResourceBundle resources) {table_StudentID.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Person,String>,ObservableValue<String>>(){@Overridepublic ObservableValue<String> call(CellDataFeatures<Person, String> param) {// TODO Auto-generated method stubSimpleStringProperty StudentID=new SimpleStringProperty(param.getValue().student.StudentID);return StudentID;}});}

就簡單的說一下這幾句代碼實現了什么,每一個表格中的單元格都需要設置 這個單元格要顯示什么信息,我自定義的Person類中有成員變量Student類,Student類中含有成員變量String StudentID;而這個單元格我就想讓他顯示傳入的person中的StudentID,所以最后return了StudentID。簡單的說,如果就是簡單的用TableColumn的話,僅僅需要更改的就是**param.getValue()**之后的東西和泛型的類型,其余就是這一套。getValue()得到的就是傳入的類。
當然如果按照官方API的方法也可以直接用,但是這樣的話,在自定義數據類型中需要規規矩矩的寫好封裝方法 getXxxx()和setXxxx(),否則就單元格無法顯示內容。

同時填充數據同ComboBox,調用FXCollections.observableArrayList()方法,而且對這個ArrayList的操作會自動的同步到表格的顯示,用起來還是比較方便的。

3.3.3 獲取fxml綁定的control類

有的時候,我們會需要一個子面板,主面板調出子面板,用戶對子面板操作之后,關閉子面板,我們希望把子面板的相關數據返回給主面板。通過前面的例子,知道了如何調用fxml文件生成一個面板,現在通過fxml獲取其綁定的control類
我的程序中,有一個按鈕是添加學生,點擊之后,彈出一個子面板,用戶將新學生的信息填入子面板之后,將數據返回給主面板,示例代碼:

Pane addStudentPane=null;URL location=null;//System.out.println("添加學生");location = getClass().getResource("/resources/fxml_AddStudent.fxml");FXMLLoader fxmlLoader = new FXMLLoader();fxmlLoader.setLocation(location);fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory());try {addStudentPane =fxmlLoader.load(location.openStream());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}AddStudentControl control=(AddStudentControl)fxmlLoader.getController();

最后一句就是獲取fxml對應的control類,通過強制類型轉化,轉化成我自己定義的AddStudentControl類,然后即可獲取其中的信息。

3.3.4 對話框

在上面B站教學中,兩個老師都談到了關于對話框的封裝,我這里就簡單的提2點:
1. Alert 類對話框的使用

//System.out.println("登錄失敗");Alert loginError = new Alert(Alert.AlertType.ERROR);//loginError.initStyle(StageStyle.UTILITY);//不顯示圖標loginError.initStyle(StageStyle.UNIFIED);//最少平臺顯示//loginError.initStyle(StageStyle.TRANSPARENT);//啥也沒有//loginError.initStyle(StageStyle.UNDECORATED);//啥也沒有loginError.setHeaderText("登錄失敗");loginError.setTitle("錯誤");String ERROR_TEXT="請檢查數據庫信息";loginError.setContentText(ERROR_TEXT);loginError.show();

一般就這樣用,三個部分,標題、頭部信息、正文信息,而且AlertType中也有其他類型,錯誤、警告等等,網上都有相關信息。
2. 封裝對話框
其實可以自定義對話框的形式,直接彈出一個子面板作為一個對話框。

Scene sc =new Scene(pane);Stage stage=new Stage();stage.setScene(sc);stage.initOwner(btn_add.getScene().getWindow());stage.setTitle("對話框");stage.initStyle(StageStyle.UNIFIED);stage.initModality(Modality.WINDOW_MODAL);stage.showAndWait();

pane是自己定義的一個面板,然后在主面板中調用啟動這個面板,stage.initModality(Modality.WINDOW_MODAL);
這句代碼設置這個面板為模態對話框。

上面就是提供了兩種思路來設計對話框,具體的要根據具體情況設計。

4 總結

本文不涉及很多數據庫課設的東西,更多著重點在于 JavaFX,一些常見的控件API上寫的非常清楚而且用起來也比較簡單,直接用即可,我在本文寫的基本上是我花了很多時間精力去查、去學習的部分。
簡談JavaFX,JavaFX不同與Java Swing,它的圖形界面代碼和邏輯功能實現代碼是分離的,由fxml文件控制控件的布局,同時需要一個Control類來和它綁定實現控件的監聽方法和功能。同時JavaFX界面更加美觀,設計起來比較方便。但是對于速成的我來說。JavaFX的門檻較比Swing更高。JavaFX作為一個比較完善的新技術,學習的最大困難在于可用的中文資料很少。同時網絡上的示例代碼很少,大多數通過查詢API和官方示例文檔來摸索學習,由于全是英文版,閱讀起來十分困難。不過當用習慣之后,一些常用的語法了解之后,用起來還是比較舒心的。但是以上部分僅僅是用來實現一個簡單的學生管理系統,如果面對大型的項目還是要多花精力去學習的。

總結

以上是生活随笔為你收集整理的基于JavaFX实现的数据库学生管理系统的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。