本文已参与「新人创作礼」活动,一起开启掘金创作之路。
前言
- 此文章是本人的一份数据库实验报告,写本文章的目的是记录本次实验的开发历程,分享出来一起学习改进不足,欢迎指教。
项目名称
- 数据库系统设计综合实验
题目
假设有“教师”、“学生”、“课程”三个实体,教师的基本信息包括:工号、姓名、职 称、工资,课程的基本信息包括:课程号、课程名、学分数,学生的基本信息包括:学 号、姓名、性别、年龄。系统必须满足以下要求:
(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:修改管理员密码
学生模块
- 功能: ①学生可修改除学号以外的信息 ②学生可选择除已选课程以外的课程 ③学生可查看已选课程的信息(学分、任课教师等) ④学生可查看自己已选课程的总学分
教师模块
- 功能: ①教师可查看、修改个人除职工号以外的个人信息 ②教师可选择目前没有任课教师的课程(教师可选择多门课程,但一门课程只能由一位教师当任课教师) ③教师可查看相关课程的信息(课程名、学分、任课教师、选课人数等) ④教师可查看所有学生的选课总学分信息 ⑤教师可查看不同职称教师的人数和平均工资信息
各模块的代码
-
由于代码比较多,因此,已资源形式上传。
-
github:github.com/1732562137/…
设计初稿及Swing工具包概述
- 本人在写此代码前,先花了些时间回顾熟悉Swing工具包的框架特点,并绘制了设计初稿,依照初稿完成以上窗口的设计,并制作成一个PPT。为了方便学习交流,跟代码一块分享出来。
- 界面设计及Swing使用.pptx
今天的文章Java Swing GUI+JDBC+Oracle数据库实现校园信息管理系统分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/14280.html