基于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文件代碼中加上這樣一句:
如下圖:
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
我這里因為不需要進行場景之間的數據溝通,僅僅是場景切換,比較簡單,示例代碼:
場景顯示不再贅述,和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 >類型的引用。
其他常規用法請查詢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類
我的程序中,有一個按鈕是添加學生,點擊之后,彈出一個子面板,用戶將新學生的信息填入子面板之后,將數據返回給主面板,示例代碼:
最后一句就是獲取fxml對應的control類,通過強制類型轉化,轉化成我自己定義的AddStudentControl類,然后即可獲取其中的信息。
3.3.4 對話框
在上面B站教學中,兩個老師都談到了關于對話框的封裝,我這里就簡單的提2點:
1. Alert 類對話框的使用
一般就這樣用,三個部分,標題、頭部信息、正文信息,而且AlertType中也有其他類型,錯誤、警告等等,網上都有相關信息。
2. 封裝對話框
其實可以自定義對話框的形式,直接彈出一個子面板作為一個對話框。
pane是自己定義的一個面板,然后在主面板中調用啟動這個面板,stage.initModality(Modality.WINDOW_MODAL);
這句代碼設置這個面板為模態對話框。
上面就是提供了兩種思路來設計對話框,具體的要根據具體情況設計。
4 總結
本文不涉及很多數據庫課設的東西,更多著重點在于 JavaFX,一些常見的控件API上寫的非常清楚而且用起來也比較簡單,直接用即可,我在本文寫的基本上是我花了很多時間精力去查、去學習的部分。
簡談JavaFX,JavaFX不同與Java Swing,它的圖形界面代碼和邏輯功能實現代碼是分離的,由fxml文件控制控件的布局,同時需要一個Control類來和它綁定實現控件的監聽方法和功能。同時JavaFX界面更加美觀,設計起來比較方便。但是對于速成的我來說。JavaFX的門檻較比Swing更高。JavaFX作為一個比較完善的新技術,學習的最大困難在于可用的中文資料很少。同時網絡上的示例代碼很少,大多數通過查詢API和官方示例文檔來摸索學習,由于全是英文版,閱讀起來十分困難。不過當用習慣之后,一些常用的語法了解之后,用起來還是比較舒心的。但是以上部分僅僅是用來實現一個簡單的學生管理系統,如果面對大型的項目還是要多花精力去學習的。
總結
以上是生活随笔為你收集整理的基于JavaFX实现的数据库学生管理系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: opensplice dds v6.3.
- 下一篇: Vue第二部分(1):组件基础学习