Java Swing GUI工具包+JDBC實現校園信息管理系統

前言

  • 此文章是本人的一份數據庫實驗報告,寫本文章的目的是記錄本次實驗的開發歷程,分享出來一起學習改進不足,歡迎指教。

項目名稱

  • 數據庫系統設計綜合實驗

題目

  • 假設有“教師”、“學生”、“課程”三個實體,教師的基本信息包括:工號、姓名、職
    稱、工資,課程的基本信息包括:課程號、課程名、學分數,學生的基本信息包括:學
    號、姓名、性別、年齡。系統必須滿足以下要求:
    (1) 一門課程只能有一個教師任課,一個教師可以上多門課程
    (2) 一個學生可以選修多門課程,一門課程可以由多個學生來選修,記錄不同學生選修不同課程的成績;
    (3) 設置一個管理員,用於維護(添加、刪除和修改等基本任務)學生基本信息、教師基本信息和教師所授課程等工作,此外,管理員添加學生時,爲其設置初始密碼;當學生選修了某門課程,課程成績由管理員錄入;
    (4) 學生可以利用學號和密碼登錄系統,登陸系統後,可以進行選課、修改密碼和個人基本信息、查詢自己的選課及總學分等操作;
    (5) 能夠統計不同職稱的教師的數量、不同職稱的教師的平均工資,可以統計每門課程的平均成績、最高分、最低分,統計每個學生選修課程的總學分;

項目實現

開發工具

  • 數據庫:Oracle19.3
  • 數據庫管理工具:Navicat、sqlPlus、sql Developer
  • 開發語言:Java(版本爲1.8)
  • GUI工具包:Java Swing
  • 數據庫連接:JDBC
  • IDE: IntelliJ IDEA Ultimate Edition 2019.2

數據庫設計

E-R圖

在這裏插入圖片描述

UML圖

在這裏插入圖片描述

關係模型

Teacher(Tno,Tname,Tposition,Tsalary,Tpwd),其中,Tno爲teacher表的主碼
Course(Cno,Cname,Ccredit,Tno),其中,Cno爲course表的主碼,Tno爲外碼,Tno參照Teacher(Tno)
Student(Sno,Sname,Ssex,Sage,Spwd),其中,Sno爲Student表的主碼
SC(Sno,Con,Grade),其中,(Sno,Cno)爲SC表的主碼,Sno爲外碼,參照Student(Sno),Cno爲外碼,參照Course(Cno)

創建數據庫

  • 創建一個用戶
create user cyf identified by admin;  --創建新用戶
grant resource,connect,DBA to cyf;  --授權
  • 建表

teacher表

Create table teacher
(
    Tno varchar2(10) primary key,  --教師職工號
    Tname varchar2(20) Not Null Unique,  --姓名
    Tsex varchar2(4) CHECK(Tsex IN ('男','女') ),  --性別(E-R圖中沒有)
    Tposition varchar2(20) Not NULL, --教師職稱
    Tsalary number Not NULL,  --薪水
    Tpwd varchar2(16)  --登錄密碼
);

course表

Create table course
(
    Cno varchar2(10) primary key, --課程號
    Cname varchar2(20) ,  --課程名
    Ccredit number,  --學分
    Tno varchar2(10),  --教師職工號
    FOREIGN key(Tno) references teacher(Tno)  --Tno參考teacher表的Tno
);

student表

Create table student
(
    Sno varchar2(10) primary key, --學號
    Sname varchar2(20) Not NULL Unique,  --姓名
    Ssex varchar2(4) CHECK(Ssex IN ('男','女') ),  --性別
    Sage number Not NULL,  --年齡
    Spwd varchar2(16)  --密碼
);

sc表

Create table SC
(
    Sno varchar2(10) Not NULL,  --學號
    Cno varchar2(10) Not NULL,  --課程號
    Grade number,  --成績
    foreign key(SNO) references Student(Sno),
    foreign key(Cno) references Course(Cno)
)

管理員用戶表admin_Users

Create table admin_Users
(
    admin_id varchar2(10) not null primary key,  --用戶名
    admin_pwd varchar2(16) not null  --密碼
)
  • 插入數據
-- teacher表
insert into teacher(tno,tname,tsex, tposition, tsalary) values('T001','張三','男','教授',30000);
insert into teacher(tno,tname,tsex, tposition, tsalary) values('T002','李四','男','教授',28000);
insert into teacher(tno,tname,tsex, tposition, tsalary) values('T003','王五','女','副教授',25000);
insert into teacher(tno,tname,tsex, tposition, tsalary) values('T004','趙六','男','教授',35000);
insert into teacher(tno,tname,tsex, tposition, tsalary) values('T005','孫七','女','講師',18000);
-- student表
insert into student(sname,ssex,sno, sage) values('李勇','男','1806100001',20);
insert into student(sname,ssex,sno, sage) values('劉晨','女','1806100002',19);
insert into student(sname,ssex,sno, sage) values('王敏','女','1806100003',18);
insert into student(sname,ssex,sno, sage) values('張立','男','1806100004',19);
insert into student(sname,ssex,sno, sage) values('趙明','男','1806100005',19);--課程信息
--course表
insert into course (cno,cname,ccredit,Tno) values('C001','數據庫',2,'T001');
insert into course (cno,cname,ccredit,Tno) values('C002','操作系統',2,'T002');
insert into course (cno,cname,ccredit,Tno) values('C003','數值分析',1,'T003');
insert into course (cno,cname,ccredit,Tno) values('C004','數據結構',2,'T004');
insert into course (cno,cname,ccredit,Tno) values('C005','計算機網絡',2,'T005');
--SC表
insert into sc (sno,cno,grade) values('1806100001','C001',80);
insert into sc (sno,cno,grade) values('1806100002','C001',88);
insert into sc (sno,cno,grade) values('1806100003','C001',95);
insert into sc (sno,cno,grade) values('1806100004','C001',86);
insert into sc (sno,cno,grade) values('1806100005','C001',93);
insert into sc (sno,cno,grade) values('1806100001','C002',86);
insert into sc (sno,cno,grade) values('1806100001','C002',90);

--admin_Users表
insert into admin_Users(Uid,Upwd) values(‘admin’,’admin’);
insert into admin_Users(Uid,Upwd) values(‘admin2’,’admin2’);
--驗證
select * from teacher;
select * from student;
select * from course;
select * from sc;
select * from admin_Users;

  • 結果
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述

連接數據庫

驅動下載並測試

①打開IDEA,新建一個工程
②下載oracle數據庫驅動(jar文件):【注意驅動版本需要跟Oracle版本相匹配!!!】
【若oracle版本不是最新版,可以嘗試採用idea自動下載的驅動測試能連通】
驅動下載
③在IDEA中配置驅動,並測試連通
可參考的文章:文章1 文章2
在這裏插入圖片描述
在這裏插入圖片描述

JDBC連接

  • 數據庫名稱爲orcl,用戶名爲cyf,密碼爲admin
import java.sql.*;

public class sqlOperator {  //一個名爲sqlOperator的類

    private static Connection conn;

    static {  //與數據庫建立連接
        try {
            conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "cyf", "admin");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

開始編寫代碼

系統功能模塊拆分

  • 管理員子系統
  • 學生子系統
  • 教師子系統

代碼框架分析

在這裏插入圖片描述

  • 整個系統劃分爲6個部分:系統選擇窗口(InfoSysMain)、登錄窗口(LoginSys)、管理員子系統(adminSys)、學生子系統(studentSys)、教師子系統(teacherSys)、數據庫交互函數(sqlOperator)
  • 調用關係:主窗口infoSysMain進行子系統選擇,選擇後將系統選擇系統作爲參數調用登錄窗口LoginSys,登錄窗口根據選擇的系統參數調用SQLOperator的Auth認證函數查詢相應的數據庫進行登錄認證,登錄成功後,LoginSys調用對應的子系統的函數,進入相應的系統(adminSys、studentSys、teacherSys)。

實現效果

主窗口(提供兩種界面風格,可在工程中調整)

在這裏插入圖片描述
在這裏插入圖片描述

管理員模塊

在這裏插入圖片描述

  • 管理員子系統(分爲三個模塊)
    在這裏插入圖片描述
  • 子模塊1:學生信息管理:
    ①查詢學生信息
    ②添加、修改、刪除學生信息;
    ③爲沒有設置初始密碼的學生設置初始密碼
    ④爲學生錄入所選課程的成績(只顯示學生選擇了的課程)
    在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述
  • 子模塊2:教師信息管理:
    ①查詢教師信息
    ②添加、修改、刪除教師信息
    ③查看教師選課名稱和所有課程名稱(課程只能由教師通過教師系統選課)
    ④添加新開設的課程
    在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述
  • 子模塊3:修改管理員密碼
    在這裏插入圖片描述在這裏插入圖片描述

學生模塊

在這裏插入圖片描述

  • 功能:
    ①學生可修改除學號以外的信息
    ②學生可選擇除已選課程以外的課程
    ③學生可查看已選課程的信息(學分、任課教師等)
    ④學生可查看自己已選課程的總學分
    在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述

教師模塊

在這裏插入圖片描述

  • 功能:
    ①教師可查看、修改個人除職工號以外的個人信息
    ②教師可選擇目前沒有任課教師的課程(教師可選擇多門課程,但一門課程只能由一位教師當任課教師)
    ③教師可查看相關課程的信息(課程名、學分、任課教師、選課人數等)
    ④教師可查看所有學生的選課總學分信息
    ⑤教師可查看不同職稱教師的人數和平均工資信息
    在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述

各模塊的代碼

設計初稿及Swing工具包概述

  • 本人在寫此代碼前,先花了些時間回顧熟悉Swing工具包的框架特點,並繪製了設計初稿,依照初稿完成以上窗口的設計,並製作成一個PPT。爲了方便學習交流,跟代碼一塊分享出來。
  • 界面設計及Swing使用.pptx
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章