學生成績管理系統


一、項目簡介

功能描述

 

基於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. *全局功能:

主要負責各個組件監視器的重寫

  1. 用戶登錄(Login):使用ActionEvent事件的監視器監視,觸發事件時回調重寫的接口方法,將用戶名和密碼通過equal方法與指定的數據進行比對進行登錄操作;
  2. 主界面(AccListFrame):使用ActionEvent事件的監視器監視查詢,添加,修改,刪除,成績,報表按鈕,觸發事件時回調重寫的接口方法,生成各自的窗口;
  3. 在修改,成績,報表窗口均是使用ActionEvent事件的監視器中實現對應的功能;
  4. *報表窗口下調用List<Student>計算得到各科目班級平均成績,每個學生的總成績,班級總成績平均值,實現學生集合的比較,並以總成績降序排列;將List的引用給data數組,在columnCounts數組中給出學生屬性,並生成DefaultTableModel(data,columnCounts),它使用一個 Vector 來存儲這個二維表單元格的值對象,將其放在Jtable中,創建一個str型的content,用循環將List<Student>newlistcontent,然后使用Util.writeObjToFile("成績表.txt", content);將報表中的學生成績信息輸出到“成績表.txt”中;本想實現隨機生成10
  5. 用戶登錄:監視器重寫接口方法;

 

  1. 主界面主要實現功能(包含查詢,添加,修改,刪除,成績的按鈕的監視器重寫接口方法)

 

  1. 修改,成績窗口功能的技術實現

 

 

 

4.對報表窗口功能的技術實現(生成成績報表並輸出至txt

 

3. *數據庫讀寫部分

簡述所完成模塊采用的技術、難點及解決方法。

所有以下數據庫的讀寫均是先連接數據庫,然后向數據庫發送SQL語言,得到查詢結果或者進行插入和修改,刪除,最后關閉連接;使用prepareStatementString sql)方法對參數sql指定的SQL語言進行預編譯處理,生成該數據庫底層的內部命令,並將該命令封裝在PrepareStatement對象中,提高了訪問數據庫的速度;並使用通配符?來代替sql語句中的字段的值,只要在對SQl預處理執行之前再配置

?的具體值即可,使得數據庫讀寫更加靈活;

 

1.查詢獲得全部學生基本信息

 

2.刪除學生信息

 

3.插入學生信息

 

4.修改學生信息

 

5.修改學生成績

 

6.獲得最大的學生學號

 

五、課程設計感想

在一開始的時候,對javaswing的組件和布局有些生疏,后來先自己畫出窗口再進行布局,就顯得更加整齊了;在添加時間處理時,用了學到的ActionEvent事件,JDBCMYSQL數據庫也是通過書中學習,通過使用PrepareStatement()預處理和通配符解決了很多問題;

在網上也了解到了一些好的編程格式和一些便捷的方法;

六、展望

對於學生查詢的部分,沒有完成模糊匹配,考慮是不是在sql語句上有錯誤;

我想進一步學習POI技術、增加將學生成績報表導出至Excel功能

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM