首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2EE

Java Swing 單機版學籍管理系統完整源碼解析

     編輯:J2EE

專案概覽

基於 JDK 1.4/1.5、Swing、JDBC-ODBC Bridge(Access 資料庫)的桌面應用,實現學生信息增刪改查、班級/單位群組查詢。代碼單文件、單類結構,適合初學者研讀 GUI 編程、事件處理、JDBC 基礎操作。

架構與核心類

  • STU:啟動類,實例化 Frm_Main。
  • Frm_Main implements ActionListener:主視窗、菜單、工具欄、表單、文本區、JDBC 連接/關閉、所有業務邏輯(CRUD、查詢、事務模擬)。

關鍵技術點剖析

1. GUI 佈局:絕對定位

c.setLayout(null); // 容器使用空佈局
classidL.setLocation(35, 40); classidL.setSize(40, 20);
classidT.setLocation(90, 40); classidT.setSize(200, 20);
// ... 其餘組件同理
缺點:跨平台適應性差、維護困難。實戰建議使用 BorderLayout+GridBagLayout 或 MigLayout 第三方庫。

2. 菜單與工具欄統一事件分發

// 菜單項、工具欄按鈕均註冊 this (Frm_Main) 為監聽器
subMenu1[i].addActionListener(this);
toolBarButton[i].addActionListener(this);
// actionPerformed 內用 e.getSource() 判斷來源分發

3. JDBC-ODBC 連接(已過時)


Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection("jdbc:odbc:jettang", "sa", "");
st = con.createStatement();
JDK 8 移除 JDBC-ODBC Bridge。現代應用應使用 UCanAccess (Access) 或遷移至 SQLite/H2/MySQL + 標準 JDBC 驅動。

4. SQL 拼接風險與事務模擬


// 查詢
String strSQL = "select * from stuinfo where name ='" + idid + "'";
// 新增
String strSQL = "insert into stuinfo(classid,name,sex,age,call,department) values('" 
    + classid + "','" + name + "','" + sex + "','" + age + "','" + call + "','" + department + "')";
// 修改
String strSQL = "update stuinfo set classid='" + classid + "',sex='" + sex 
    + "',age='" + age + "',call='" + call + "',department='" + department 
    + "' where name='" + name + "'";
  • SQL 注入風險極高:參數未使用 PreparedStatement。
  • 事務控制缺失:每操作獨立 executeUpdate,無 commit/rollback,修改/刪除中途失敗會導致數據不一致。

5. 群組查詢結果展示


public void displayres(ResultSet rs1) throws SQLException {
    if (!rs1.next()) { JOptionPane.showMessageDialog(null, "無此記錄"); return; }
    getNextRow(rs1); c.validate();
}
public void getNextRow(ResultSet rs2) throws SQLException {
    int count = 1;
    while (rs2.next()) {
        name = " 姓名:" + rs2.getString(1);
        age = " 年齡:" + rs2.getString(2) + " 單位:";
        department = rs2.getString(3) + "\n";
        textT.append(count + "." + name + age + department);
        count++;
    }
}
結果直接拼接追加到 JTextArea,大數據量時界面卡頓。建議使用 JTable + DefaultTableModel 分頁加載。

現代化重構建議

維度現狀建議
構建工具無Maven/Gradle,依賴管理、打包
數據庫Access + JDBC-ODBCH2 (嵌入式) / SQLite / MySQL + 標準驅動
持久層手寫 SQL 拼接MyBatis / JdbcTemplate / JPA (Hibernate)
GUI 架構單類、絕對佈局MVC/MVP 分層,SwingBuilder 或 JavaFX + FXML
事件處理巨型 actionPerformedCommand 模式 / Lambda 表達式 (Java 8+) 分離處理器
配置外部化硬編碼連接串properties/YAML + 環境變量注入
測試無JUnit + Testcontainers 單元/整合測試

結語

此代碼作為「Java GUI + JDBC 入門教具」極具參考價值,展示了事件驅動、組件佈局、資料庫交互最基礎形態。但生產環境絕不可直接使用,需針對安全性、可維護性、擴展性進行系統性重構。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved