Este artigo participou do evento "Newcomer Creation Ceremony" para iniciar juntos o caminho da criação de ouro.
prefácio
- Este artigo é um relatório meu de um experimento de banco de dados. O objetivo de escrever este artigo é registrar o processo de desenvolvimento deste experimento, compartilhá-lo para aprender e melhorar e receber conselhos.
Nome do Projeto
- Experimento abrangente de design de sistema de banco de dados
tema
Suponha que existam três entidades: "Professor", "Aluno" e "Curso" . As informações básicas do professor incluem: número do cargo, nome, cargo e salário. As informações básicas do curso incluem: número do curso, nome do curso , créditos e informações básicas dos alunos. As informações incluem: número do aluno, nome, sexo, idade. O sistema deve atender aos seguintes requisitos:
(1) Apenas um professor pode ministrar um curso e um professor pode fazer vários cursos ;
(2) Um aluno pode cursar vários cursos , e um curso pode ser cursado por vários alunos , e registrar as notas de diferentes alunos em cursos diferentes;
(3) Configure um administrador para manter (tarefas básicas como adicionar, excluir e modificar) as informações básicas dos alunos, as informações básicas do professor e os cursos ministrados pelos professores. Além disso, ao adicionar alunos, o administrador define uma senha inicial para quando um aluno escolhe um curso, a nota do curso é inserida pelo administrador;
(4) Os alunos podem usar seu ID e senha de aluno para fazer login no sistema . Após fazer login no sistema, eles podem selecionar cursos, modificar senhas e informações pessoais básicas e consultar sobre sua seleção de cursos e créditos totais;
(5) Ser capaz de contar o número de professores com diferentes títulos profissionais, o salário médio dos professores com diferentes títulos profissionais, a nota média, a maior e a menor nota de cada curso e o total de créditos das disciplinas eletivas de cada aluno ;
Realização do projeto
ferramentas de desenvolvimento
- Banco de dados: 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