文章目錄
前言
- 此文章是本人的一份數據庫實驗報告,寫本文章的目的是記錄本次實驗的開發歷程,分享出來一起學習改進不足,歡迎指教。
項目名稱
- 數據庫系統設計綜合實驗
題目
- 假設有“教師”、“學生”、“課程”三個實體,教師的基本信息包括:工號、姓名、職
稱、工資,課程的基本信息包括:課程號、課程名、學分數,學生的基本信息包括:學
號、姓名、性別、年齡。系統必須滿足以下要求:
(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:修改管理員密碼
學生模塊
- 功能:
①學生可修改除學號以外的信息
②學生可選擇除已選課程以外的課程
③學生可查看已選課程的信息(學分、任課教師等)
④學生可查看自己已選課程的總學分
教師模塊
- 功能:
①教師可查看、修改個人除職工號以外的個人信息
②教師可選擇目前沒有任課教師的課程(教師可選擇多門課程,但一門課程只能由一位教師當任課教師)
③教師可查看相關課程的信息(課程名、學分、任課教師、選課人數等)
④教師可查看所有學生的選課總學分信息
⑤教師可查看不同職稱教師的人數和平均工資信息
各模塊的代碼
- 由於代碼比較多,因此,已資源形式上傳。
- 主窗口:InfoSysMain.java
- 登錄窗口:LoginSys.java
- 管理員子系統:adminSys.java
- 學生子系統:studentSys.java
- 教師子系統:teacherSys.java
- 數據庫交互:sqlOperator.java
- 整合版代碼:《Java Swing GUI工具包+JDBC實現校園信息管理系統》代碼整合.zip
設計初稿及Swing工具包概述
- 本人在寫此代碼前,先花了些時間回顧熟悉Swing工具包的框架特點,並繪製了設計初稿,依照初稿完成以上窗口的設計,並製作成一個PPT。爲了方便學習交流,跟代碼一塊分享出來。
- 界面設計及Swing使用.pptx