一、項目簡介
功能描述:
基於SQL的學生管理系統,支持用戶登錄,能夠學生基本信息進行添加,修改和刪除,通過給出學號或者姓名查詢學生基本信息,能夠生成學生學習情況報表,並將結果輸出到txt文件。
個人負責任務: 組件監視器重寫,數據庫讀寫
團隊博客鏈接:https://home.cnblogs.com/u/2428720
個人博客鏈接:https://home.cnblogs.com/u/2428720
二、功能架構圖
這個項目一共由三個包組成,model包,student包和util包;
model包:
Student.java,主要是對Student的屬性和方法黨的整體封裝;
student包:
AccListFrame.java,主要是系統主界面的設計,包括內部各個組件所能完成功能和事件的設計;
scrollPane.setViewportView(table):把table,放到一個scrollPane;
quaryALL():查詢指定學生信息,並能夠在表中通過生成表控制模型,構造成績排序比較器以一定的順序排列;
報表窗口下調用List<Student>計算得到各科目班級平均成績,每個學生的總成績,班級總成績平均值,實現學生集合的比較,並以總成績降序排列;將List的引用給data數組,在columnCounts數組中給出學生屬性,並生成DefaultTableModel(data,columnCounts),它使用一個 Vector 來存儲這個二維表單元格的值對象,將其放在Jtable中,創建一個str型的content,用循環將List<Student>的newlist給content,然后使用Util.writeObjToFile("成績表.txt", content);將報表中的學生成績信息輸出到“成績表.txt”中;
AccSerive.java,主要是實現各種與數據庫讀寫相關的方法,將其封裝在一個類中;數據庫的讀寫均是先連接數據庫,然后向數據庫發送SQL語言,得到查詢結果或者進行插入和修改,刪除,最后關閉連接;使用prepareStatement(String sql)方法對參數sql指定的SQL語言進行預編譯處理,生成該數據庫底層的內部命令,並將該命令封裝在PrepareStatement對象中,提高了訪問數據庫的速度;並使用通配符?來代替sql語句中的字段的值,只要在對SQl預處理執行之前再配置
?的具體值即可,使得數據庫讀寫更加靈活;
其中queryAll()根據在下拉列表中獲取的查詢條件(學號,姓名)做出相應的查詢;
AddFrame.java,是用於添加學生基本信息的界面的設計,在AccListFrame中點擊“添加”按鈕后觸發監視器產生的,添加學生信息結束后釋放AddFrame返回到系統主界面AccListFrame;
AddScoreFrame.java,是用於添加和修改學生成績的界面的設計,在AccListFrame中點擊“成績”按鈕后觸發監視器產生的,添加或修改學生成績結束后釋放AddFrame返回到系統主界面AccListFrame;
Login.java,主要是登錄界面的設計,在輸入用戶名和密碼,登錄成功后,釋放窗體,生成系統主界面AccListFrame;
在Login中,使用Serializable接口實現java序列化(Java序列化是指把Java對象轉換為字節序列的過程,實現了數據的持久化,通過序列化可以把數據永久地保存到硬盤上,利用序列化實現遠程通信,即在網絡上傳送對象的字節序列。)
setLocationRelativeTo():設置窗口相對於指定組件的位置。 如果組件當前未顯示或者為 null,則此窗口將置於屏幕的中央
BtnListener:監視器首先判斷是否有點擊登錄的事件;若有,獲取jTextField和jPasswordField中的用戶名與密碼,並與已經設置的用戶名與密碼相比較
JOptionPane.showMessageDialog(null, "用戶名不能為空"):彈出對話框並顯示框里的信息;
UpdateFrame.java,是用於修改學生基本信息的界面的設計,在AccListFrame中點擊“成績”按鈕后觸發監視器產生的,添加或修改學生基本信息結束后釋放UpdateFrame返回到系統主界面AccListFrame;
Util包:
Util.java,是用於連接MySql數據庫的文件;此外還需要在Referenced Libraries中導入MySQL連接驅動;
三、個人任務簡述
| 序號 |
完成功能與任務 |
描述 |
| 1 |
全局功能 |
使用ActionListener等事件處理,便於系統功能實現 |
| 2 |
面向對象設計 |
使用了面向對象技術設計系統。 |
| 3 |
數據庫讀寫編碼部分 |
使用了JDBC。使用了Navicat Premium15數據庫連接池連接數據庫,提高了數據庫鏈接的性能,使用PrepareStatement提高讀寫效率。 |
四、本人負責功能詳解
1. *面向對象設計
組員共同設計完成;
2. *全局功能:
主要負責各個組件監視器的重寫
- 用戶登錄(Login):使用ActionEvent事件的監視器監視,觸發事件時回調重寫的接口方法,將用戶名和密碼通過equal方法與指定的數據進行比對進行登錄操作;
- 主界面(AccListFrame):使用ActionEvent事件的監視器監視查詢,添加,修改,刪除,成績,報表按鈕,觸發事件時回調重寫的接口方法,生成各自的窗口;
- 在修改,成績,報表窗口均是使用ActionEvent事件的監視器中實現對應的功能;
- *報表窗口下調用List<Student>計算得到各科目班級平均成績,每個學生的總成績,班級總成績平均值,實現學生集合的比較,並以總成績降序排列;將List的引用給data數組,在columnCounts數組中給出學生屬性,並生成DefaultTableModel(data,columnCounts),它使用一個 Vector 來存儲這個二維表單元格的值對象,將其放在Jtable中,創建一個str型的content,用循環將List<Student>的newlist給content,然后使用Util.writeObjToFile("成績表.txt", content);將報表中的學生成績信息輸出到“成績表.txt”中;本想實現隨機生成10
- 用戶登錄:監視器重寫接口方法;
- 主界面主要實現功能(包含查詢,添加,修改,刪除,成績的按鈕的監視器重寫接口方法)
- 修改,成績窗口功能的技術實現
4.對報表窗口功能的技術實現(生成成績報表並輸出至txt)
3. *數據庫讀寫部分
簡述所完成模塊采用的技術、難點及解決方法。
所有以下數據庫的讀寫均是先連接數據庫,然后向數據庫發送SQL語言,得到查詢結果或者進行插入和修改,刪除,最后關閉連接;使用prepareStatement(String sql)方法對參數sql指定的SQL語言進行預編譯處理,生成該數據庫底層的內部命令,並將該命令封裝在PrepareStatement對象中,提高了訪問數據庫的速度;並使用通配符?來代替sql語句中的字段的值,只要在對SQl預處理執行之前再配置
?的具體值即可,使得數據庫讀寫更加靈活;
1.查詢獲得全部學生基本信息
2.刪除學生信息
3.插入學生信息
4.修改學生信息
5.修改學生成績
6.獲得最大的學生學號
五、課程設計感想
在一開始的時候,對javaswing的組件和布局有些生疏,后來先自己畫出窗口再進行布局,就顯得更加整齊了;在添加時間處理時,用了學到的ActionEvent事件,JDBC和MYSQL數據庫也是通過書中學習,通過使用PrepareStatement()預處理和通配符解決了很多問題;
在網上也了解到了一些好的編程格式和一些便捷的方法;
六、展望
對於學生查詢的部分,沒有完成模糊匹配,考慮是不是在sql語句上有錯誤;
我想進一步學習POI技術、增加將學生成績報表導出至Excel功能
