Java Swing GUI+JDBC+Oracle数据库实现校园信息管理系统

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

前言

  • 此文章是本人的一份数据库实验报告,写本文章的目的是记录本次实验的开发历程,分享出来一起学习改进不足,欢迎指教。

项目名称

  • 数据库系统设计综合实验

题目

假设有“教师”、“学生”、“课程”三个实体,教师的基本信息包括:工号、姓名、职 称、工资,课程的基本信息包括:课程号、课程名、学分数,学生的基本信息包括:学 号、姓名、性别、年龄。系统必须满足以下要求:

(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表

扫描二维码关注公众号,回复: 13851350 查看本文章
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

猜你喜欢

转载自juejin.im/post/7088521367955439623