openGauss数据库课程设计——教务管理综合系统

工具:openGauss+Data Studio+Eclipse IDE

语言:JAVA+SQL

一、功能需求:

1.1学生模块:

1学生信息查询和修改:通过数据库查询学生的学号、姓名、班级、性别、年龄、生源所在地、已修学分总数、入学时间、班级号、专业号的信息并对部分信息进行修改。

2成绩查询:按学期查询所学课程的成绩。

3课表查询:按学期查询学生所修课程信息。

4课程选退:学生用户能够根据需求选择课程或者退课程。

5学业预警查询:若当前学期学生不及格课程数达到3门会被给予学业预警。

6教学评价:选择本学期某一所学课程,输入评分完成教学评价。

7修改密码:输入原密码和新密码、重复密码来进行密码校验之后进行密码修改。

1.2教师模块:

1教师信息查询和修改:通过数据库来查询教师自己的编号、姓名、性别、年龄、电话、职称等信息并对部分信息进行修改。

2任课查询:按学期查询教师自己所任教的课程。

3学生信息查询:按学期和课程查询选这门课程学生的基本信息。

4成绩录入、更新:按学期和课程查询学生,输入成绩完成成绩录入或修改。

5修改密码:输入原密码和新密码、重复密码来进行密码校验之后进行密码修改。

1.3管理员模块:

1信息添加:对学生表、教师表、课程表、任课表、成绩评分表、专业表、授课表、开课表等8张表进行添加数据。

2信息修改:对学生表、教师表、课程表、任课表、成绩评分表、专业表、授课表、开课表等8张表进行修改数据。

3信息删除:对学生表、教师表、课程表、任课表、成绩评分表、专业表、授课表、开课表等8张表进行删除数据。

4主系表演示:快速查询学生的基本信息和课程成绩。

5删除毕业学生记录:调用存储过程。对那些入学时间达到4年且已修学分达到毕业最小学分的学生在学生表中全部删除。

6学生手动退选课:如当前时间管理员已关闭退选课,学生可以联系管理员进行手动选课。

二、E-R图

三、逻辑结构设计

仅列出一部分:

四、物理结构设计

4.1聚簇设计:

对于“专业”这一关系模式,认为“专业名”和“专业号”一般不会改变,可以在“专业号”建立聚簇索引。

对于“班级”这一关系模式,认为“班级号”一般不会改变,可以在“班级号”建立聚簇索引。

对于“学生”这一关系模式,认为“学号”一般不会改变,可以在“学号”建立聚簇索引。

对于“教师”这一关系模式,认为“教师编号”一般不会改变,可以在“教师编号”建立聚簇索引。

对于“课程”这一关系模式,认为“课程号”一般不会改变,可以在“课程号”建立聚簇索引。

4.2索引设计:

索引在opengauss中的表述是:“在指定的表上创建索引。”索引可以用来提高数据库查询性能,但是不恰当的使用将导致数据库性能下降。建议仅在匹配如下某条原则时创建索引:经常执行查询的字段。

在连接条件上创建索引,对于存在多字段连接的查询,建议在这些字段上建立组合索引。

where子句的过滤条件字段上(尤其是范围条件)。

在经常出现在order by、group by和distinct后的字段。

Opengauss中在分区表上创建索引与在普通表上创建索引的语法不太一样,使用时请注意,如分区表上不支持并行创建索引、不支持创建部分索引。

对以上确定的关系模式分析后大致可以得到以下结论:

教务管理系统常常要查询学生信息,这个过程往往需要知道学生的学号和学生的姓名,因此可以将学生的学号和学生的姓名组合起来,建立一个组合索引。

教务管理系统常常要查询课程信息,这个过程往往需要知道课程的课程号和课程的课程名,因此可以将课程的课程号和课程的课程名组合起来,建立一个组合索引。

教务管理系统常常要查询系别信息,这个过程往往需要知道系别专业的专业号和系别专业的专业名,因此可以将系别专业的专业号和系别专业的专业名组合起来,建立一个组合索引。

教务管理系统常常要查询班级信息,这个过程往往需要知道班级的班级号和班级的班级名称,因此可以将班级的班级号和班级的班级名组合起来,建立一个组合索引。

教务管理系统常常要查询学生个人的成绩,往往是平均绩点,平均分数,这个过程往往要使用集函数AVG,因此在成绩这一属性建立索引

4.3分区设计:

分区表是把逻辑上的一张表根据某种方案分成几张物理块进行存储,这张逻辑上的表称之为分区表,物理块称之为分区。分区表是一张逻辑表,不存储数据,数据实际是存储在分区上的。

常见的分区方案有范围分区(Range Partitioning)、间隔分区(Interval Partitioning)、哈希分区(Hash Partitioning)、列表分区(List Partitioning)、数值分区(Value Partition)等。目前行存表支持范围分区、间隔分区、哈希分区、列表分区,列存表仅支持范围分区。

分区可以提供若干好处:

某些类型的查询性能可以得到极大提升。特别是表中访问率较高的行位于一个单独分区或少数几个分区上的情况下。分区可以减少数据的搜索空间,提高数据访问效率。

当查询或更新一个分区的大部分记录时,连续扫描那个分区而不是访问整个表可以获得巨大的性能提升。

如果需要大量加载或者删除的记录位于单独的分区上,则可以通过直接读取或删除那个分区以获得巨大的性能提升,同时还可以避免由于大量DELETE导致的VACUUM超载(仅范围分区)。

对上述关系模式分析后,可以得到如下结论:

对于学生课程成绩,我们往往关注于成绩在哪一个区间,其中及格与否,优秀与否是两个较为重要的分界线,因此可以根据分数0-60,60-80,80-100建立范围分区,但是由于成绩这一属性不是主键,这种设计不能得到实现。

对于账户表,我们会将账户的类型分为学生、教师和管理员,就相当于是一个list分区,可以根据一个账户属于哪一个类别来进行分区。

五、数据库实施

5.1 八张基本表的建立

5.2 视图的建立(有一些用不到)

(1)为方便查询老师(姓名、工号)所教课程的信息(课程号、课程名、课程学分、开设学期)和所教班级的信息(班级号、班级名),连接教师表、授课表、课程表和班级表,建立视图tea_cou_cla。(2)为方便查询专业(专业号、专业名)、课程信息(课程号、课程名)和开设信息(是否开设、开设学期),连接专业表、开课表和课程表,建立视图dep_cou_dc。

(3)为方便查询老师(姓名、性别、年龄、联系电话、职称)所教课程的信息(课程号、课程名、课程学分)开设信息(开设学期)和所教班级的信息(班级号),连接教师表、开课表、课程表和班级表,建立视图cla_cou_tea_ter。

(4)为方便查询学生(姓名、学号)所选修的信息(课程号、课程名、选修学期、成绩、课程学分)和任课老师的信息(教师号、姓名、性别、年龄、联系电话、职称),连接学生表、选修表、教师表、授课表和课程表,建立视图stu_rep_tea_ter_cou。

(5)为方便查询学生(姓名、姓名、班级、年龄、性别、专业)选修信息(课程号、选课学期)和任课老师的信息(教师号),连接学生表、授课表、专业表、选修表和班级表,建立视图stu_cla_dep_rep_tea。

(6)为方便查询学生(姓名、学号)所在班级的信息(班级号、班级名),连接学生表和班级表,建立视图stu_cla。

(7)为方便查询学生(学号)所选修(学期、教师编号)课程的信息(课程号、课程名、课程学分),连接学生表、开课表和课程表,建立视图stu_tea_cou。

5.3 索引的建立

(1)对于“专业”这一关系模式,认为“专业名”和“专业号”一般不会改变,可以在“专业号”建立聚簇索引“dept_dno”。

(2)对于“班级”这一关系模式,认为“班级号”一般不会改变,可以在“班级号”建立聚簇索引“class_cno”。

(3)对于“学生”这一关系模式,认为“学号”一般不会改变,可以在“学号”建立聚簇索引“student_sno”。

(4)对于“课程”这一关系模式,认为“课程号”一般不会改变,可以在“课程号”建立聚簇索引“course_cno”。

(5)对于“教师”这一关系模式,认为“教师编号”一般不会改变,可以在“教师编号”建立聚簇索引“teacher_tno”。

(6)一般来说,成绩都是从高到低排序,为方便查询,在选课和评分表对于成绩建立降序索引“rep_grade”。

5.4 触发器建立

(1)当老师给学生某门课程成绩打分后,其成绩超过60分就代表获得改门课程的学分,需要在学生表更新学生已修学分总数,因此建立触发器“Report_update_trigger”。

(2)当学生选修的某门课程被管理员删除后,若这门课程分数超过60分,需要更新学生表已修学分总数(减去这门课程的学分),因此建立触发器“Report_delete_trigger”。

5.5 建存储过程

(1)当学生满足毕业条件(入学时间达到4年及以上且已修学分总数达到最少毕业要求)后应当在学生表删除记录,因此建立存储过程“sp_delete_graduate”。

(2)若选课时间结束,管理员关闭选课通道后,当前已经过了选课的时间,学生无法进行选课,可以联系管理员进行手动选课,正确输入对应的学号、课程号和学期,点击选课按钮即可完成选课。

(3)若退课时间结束,管理员关闭退课通道后,若当前已经过了退课的时间,学生无法进行退课,可以联系管理员进行手动退课,正确输入对应的学号、课程号和学期,点击退课按钮即可完成退课。

六、应用系统开发与试运行

6.1 前台界面与后台数据库连接说明,代码实现。

一、建立数据库

(1)建立数据库。打开Data studio,建立数据库,并设置zjutuser为其属主。执行命令CREATE DATABASE " MIS02" ENCODING = 'UTF-8' OWNER zjutuser;

(2)创建SCHEMA并授权给用户zjutuser所有。执行命令CREATE SCHEMA zjutuserAUTHORIZATION zjutuser;

(3)设置当前会话的搜索路径为zjutuser 模式、Puhlic 模式,随后创建的基本表就会自动创建zjutuser 模式下。执行命令SET SEARCH_PATH TO zjutuser,Public;SHOW SEARCH_PATH;

(4)执行文件中后续的sql语句,建立完整的数据库和创建用户。

二、数据库连接

通过JDBC操作openGauss数据库主要操作步骤如下:

下载数据库驱动,opengauss-JDBC。

下载并安装JDK(JDK1.8版)并配置系统环境变量。

根据如下步骤配置系统环境变量。

a.右键单击“我的电脑”,选择“属性”。

b.在“系统”页面左侧导航栏单击“高级系统设置”。

c.在“系统属性”页面,“高级”页签上单击“环境变量”。

d.在“环境变量”页面上,“系统变量”区域单击“新建”或“编辑”配置系统变量。

Java加载数据库驱动的方法是调用Class类的静态方法forName()。此步骤需要在项目中导入postgresql的jar包,方法是在项目中建立lib目录,在其下放入jar包,右键jar包 Build Path->Add to Build Path,导入成功会出现一个Referenced Libraries。

图6-1 在项目中建立lib目录

图6-2 jar包 Build Path->Add to Build Path

图6-3 导入成功会出现一个Referenced Libraries

(4)建立连接。加载完数据库驱动后,就可以建立数据库的连接了,需要使用DriverManager类的静态方法getConnection(String url, String user, String password)方法来实现。

实现连接部分代码如下:

(5)对数据库表中数据进行操作建立了连接后,就可以使用Connection接口的createStatement()方法来获取Statement对象,调用executeUpdate()方法来执行SQL语句。

(6)关闭连接在使用数据库连接完成相应的数据操作后,需要关闭数据库连接关闭数据库连接可以直接调用其close方法即可。

三、创建Java工程

(1)启始页窗口单击“File”-“New”-“Java Project”菜单命令新建一个Java工程(student)。

(2)选中“student”目录下“src”,右击“New”-“Package”菜单命令新建一个包,命名为“studentdemo”。

(3)将文件中的.java源文件放入创建的包内。

四、使用Eclipse IDE操作openGauss数据库

打开LoginJFrame.java,执行Run-> Run As -> 1 JavaApplication,运行程序,会出现登录窗口,输入账号密码(学生A账号:a2020010109,密码Bigdata@888;教师A账号:b013351,密码Bigdata@888;管理员账号:zjutuser,密码Bigdata@123。),登陆成功后进入对应的用户界面完成一系列操作。

6.3系统部分运行界面截图。

  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值