项目——基于Oracle实现一个简易版的教务系统

一、背景知识

本教务系统用户分为,学生,教师,系主任,管理员。学生具有选课功能,管理员具有排课功能。对于排课与选课考虑了简单的冲突检测,如下:

  1. 根据老师教学课表,为教学班所有的同学建立对相应课程的学习表
  2. 管理员手动排课,系统检查教学表,课程表是否内容与时间冲突
  3. 学生自助选课,检查是否课程冲突,时间冲突

二、需求分析(功能确定)

在这里插入图片描述

三、概念分析(E-R图)

  1. 设计实体:

学生、老师、课程、班级

  1. 现实关系:

一个老师可以教多个课程,多个老师可以共同教一个课程
一个老师可以教多个班级,多个老师可以共同教一个班级
一个学生可以学习多个课程,多个学生可以共同学习一个课程
一个学生只能属于一个班级,多个学生可以共同属于一个班级

  1. 确定基础ER图
    在这里插入图片描述
  2. 实体与关系的属性

实体属性:
老师:姓名,工号,密码
学生:姓名,学号,密码,班级号
课程:名称,编号,类型,学分,学时
班级:名称,编号,班主任工号(这里班主任工号可有可无,暂定一个班主任)
联系属性:
任教:老师工号与班级建立连接
教学:老师工号与课程建立连接
学习:学生学号与课程建立连接,另外包含课程成绩

  1. 完善ER图
    在这里插入图片描述

四、逻辑分析(关系表)

将E-R 图转化为关系模型,并指出各关系的主码和外码
(加粗代表主码,斜体代表外码)
教师(工号,密码,姓名);
课程(编号,名称,类型,学分,学时);
学生(学号,密码,姓名,所属班级编号);
班级(编号,名称,班主任工号);
教学(教师工号课程编号班级编号,上课时间);
学习(学生学号课程编号,成绩);

五、物理分析(数据类型)

在这里插入图片描述

六、代码实现

  1. 创建表
--教师表
create table teacher
(tea_id int primary key,
tea_password varchar(20) not null,
tea_name varchar(20) not null
);--课程表
create table course
(cou_id int primary key,
cou_name varchar(100) not null,
cou_type varchar(20) not null,
stu_score int not null,
stu_time int not null
);--班级表
create table classes
(cla_id int primary key,
cla_name varchar(20) not null,
head_id int,
foreign key (head_id) references teacher(tea_id)
);--学生表
create table student
(stu_id int primary key,
stu_password varchar(20) not null,
stu_name varchar(20) not null,
class_id int not null,
foreign key(class_id) references classes(cla_id)
);--教学表
create table teach(
teacher_id int,
class_id int,
course_id int,
study_time varchar(20) not null,
foreign key(teacher_id) references teacher(tea_id),
foreign key(class_id) references classes(cla_id),
foreign key(course_id) references course(cou_id)
);--学习表
(在teach初始化完成后执行)
create table study(stu_id,cou_id)
as select stu_id,course_id
from teach,student
where student.class_id=teach.class_id;
alter table study add grade int;
  1. 插入数据
--教师列表
insert into teacher values('10001','123','唐卷');
insert into teacher values('10002','123','杨朔');
insert into teacher values('10003','123','谭恒良');
insert into teacher values('10004','123','丁子旋');
insert into teacher values('10005','123','陈文彬');
insert into teacher values('10006','123','陶文正');
insert into teacher values('10007','123','杨柳');
insert into teacher values('10008','123','颜国风');
insert into teacher values('10009','123','王显珉');--班级列表
insert into classes values('40181','计科181','10009');
insert into classes values('40182','计科182','10008');
insert into classes values('40183','计科183','10003');
insert into classes values('40184','计科184','10009');
insert into classes values('40185','计科185','10002');
insert into classes values('40186','计科186','10004');--课程列表
insert into course values('30001','编译原理','专业必修','2','32');
insert into course values('30002','编译原理实验','专业必修','0.5','16');
insert into course values('30003','机器学习与数据挖掘','专业必修','3','48');
insert into course values('30004','机器学习与数据挖掘实验','专业必修','0.5','16');
insert into course values('30005','人工智能原理','专业必修','3','48');
insert into course values('30006','人工智能原理实验','专业必修','1','32');
insert into course values('30007','Unix/Linux操作系统分析','专业选修','2','32');
insert into course values('30008','Unix/Linux操作系统分析实验','专业选修','0.5','16');
insert into course values('30009','算法设计与分析','专业选修','2','32');--学生列表
insert into student values('20001','123','张三','40183');
insert into student values('20002','123','李四','40182');
insert into student values('20003','123','吴芳','40183');
insert into student values('20004','123','刘静','40181');
insert into student values('20005','123','金泽','40186');
insert into student values('20006','123','张良仁','40183');
insert into student values('20007','123','陈鹏','40185');
insert into student values('20008','123','林岭','40186');
insert into student values('20009','123','张义谋','40185');
insert into student values('20010','123','陈淇','40181');
insert into student values('20011','123','柳忠','40186');
insert into student values('20012','123','杨阳','40182');--教学列表
insert into teach values('10001','40181','30001','1-16周,周三,3-4节');
insert into teach values('10001','40181','30002','1-16周,周三,7-8节');
insert into teach values('10001','40182','30001','1-16周,周三,3-4节');
insert into teach values('10001','40182','30002','1-16周,周三,7-8节');
insert into teach values('10002','40181','30003','1-16周,周三,1-2节');
insert into teach values('10002','40183','30003','1-16周,周三,1-2节');
insert into teach values('10002','40181','30004','1-16周,周三,5-6节');
insert into teach values('10002','40182','30004','1-16周,周三,7-8节');
insert into teach values('10003','40181','30005','1-8周,周一,3-4节');
insert into teach values('10003','40182','30005','1-8周,周一,3-4节');
insert into teach values('10003','40183','30005','1-8周,周一,3-4节');
insert into teach values('10003','40181','30005','1-16周,周五,1-2节');
insert into teach values('10003','40182','30005','1-16周,周五,1-2节');
insert into teach values('10003','40183','30005','1-16周,周五,1-2节');
insert into teach values('10003','40181','30006','1-16周,周五,7-8节');
insert into teach values('10003','40182','30006','1-16周,周五,5-6节');
insert into teach values('10003','40183','30006','1-16周,周五,3-4节');
insert into teach values('10006','40181','30007','1-10周,周二,9-11节');
insert into teach values('10006','40181','30008','1-8周,周二,1-2节');
insert into teach values('10006','40182','30007','1-10周,周二,9-11节');
insert into teach values('10006','40182','30008','1-8周,周三,5-6节');
insert into teach values('10005','40181','30009','1-16周,周一,5-6节');
insert into teach values('10005','40182','30009','1-16周,周一,5-6节');
insert into teach values('10005','40183','30009','1-16周,周一,5-6节');
insert into teach values('10007','40184','30009','1-16周,周一,5-6节');
insert into teach values('10007','40185','30009','1-16周,周一,5-6节');
insert into teach values('10007','40186','30009','1-16周,周一,5-6节');--更新学习列表的成绩
update study set grade='89' where stu_id='20002' and cou_id='30001';
update study set grade='85' where stu_id='20004' and cou_id='30001';
update study set grade='84' where stu_id='20002' and cou_id='30002';
update study set grade='91' where stu_id='20004' and cou_id='30002';

七、分析实体对表的权限

在这里插入图片描述

注:红√表示只对自己的列表有相关功能

八、功能的代码实现

  1. 学生功能
--查询课表
create view stu_table(tea_id,tea_name,cou_id,cou_name,study_time)
as select teach.teacher_id, teacher.tea_name, course.cou_id, course.cou_name, teach.study_time
from student,classes,teach,course,teacher
where student.class_id=classes.cla_id and classes.cla_id=teach.class_id 
and teach.course_id=course.cou_id and teach.teacher_id=teacher.tea_id and student.stu_id='20002';--查询分数
create view stu_grade(course_id,course_name, stu_score, grade)
as select study.cou_id, course.cou_name, course.stu_score, study.grade from study,course
where stu_id='20002' and course.cou_id=study.cou_id and grade is not null;--查询绩点(总学分,算术平均分,加权平均分)
create view stu_point(all_score,avg_grade,grade_piont)
as select sum(stu_score),avg(grade),sum(stu_score*grade)/sum(stu_score) 
from stu_grade;
  1. 教师功能
--教师任教课程
create view tea_course(cou_id, cou_name)
as select distinct cou_id, cou_name
from teach,course 
where teach.course_id=course.cou_id and teach.teacher_id='10001';--根据点击的任教课程进行成绩查询与修改
create view tea_grade(cou_id, cou_name,stu_id,stu_name,grade)
as select study.cou_id, cou_name, study.stu_id,stu_name,grade
from teach,study,course,student 
where teach.course_id=course.cou_id and teach.class_id=student.class_id
and student.stu_id=study.stu_id and teach.course_id=study.cou_id
and teach.teacher_id='10001' and teach.course_id='30001';--任课课表查询
create tea_table(class_id,class_nname,cou_id,cou_name,study_time)
as select cla_id,cla_name,cou_id,cou_name,study_time
from teach,classes,course
where teach.class_id=classes.cla_id and teach.course_id=course.cou_id
and teach.teacher_id='10001';
  1. 系主任功能——整合批量的学生功能和教师功能(删除id挑选条件)

  2. 管理员功能

--用于手动排课中的专业选修(判断老师课表是否时间冲突)
select count(*) from (select teacher_id from teach
where teacher_Id Like'10001' and study_time Like '1-16周,周三,7-8节');--用于手动排课中的专业必修(判断老师课表是否时间冲突 and 判断学生课表是否课程冲突或时间冲突)
select count(*) from(select teacher_id from teach
where teacher_id='10001' and study_time='1-16周,周三,1-2节'
or class_id='40183' and course_id='30001' and study_time='' or class_id='40183' and study_time='1-16周,周三,1-2节');--用于学生自助选课(检查学生课表是否时间冲突或课程冲突)
select count(*) from (
select teach.teacher_id, teacher.tea_name, course.cou_id, course.cou_name, teach.study_time
from student,classes,teach,course,teacher
where student.class_id=classes.cla_id and classes.cla_id=teach.class_id 
and teach.course_id=course.cou_id and teach.teacher_id=teacher.tea_id and student.stu_id='20002')
where study_time='1-8周,周一,3-4节' or cou_id='30002' and study_time='';

十、不足与思考

1、学生选课实际上还涉及并发性问题
2、管理员功能应该实现智能排课,管理员只做排课合法性检测
3、教务系统存储大量数据,涉及查询效率优化的需求

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1618801.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

2022谷歌博士奖学金名单公布:共61人获奖!

来源:机器之心 谷歌博士奖学金(Google PhD Fellowship)旨在奖励在计算机科学等前瞻科研领域表现优异的年轻学者,奖学金用于直接支持攻读博士学位,并提供与谷歌研究导师合作的机会。 自创立以来,该项目已经资…

STM32+CubeMX 通过RMS和FFT进行波形识别

波形识别 本文所展示的程序可以用于分辨正弦波、三角波、方波三种波形。 文章目录 波形识别思路可以判断波形的两个特点时域方面频域方面 外设配置 & DSP库配置代码部分串口重定向时域部分变量定义ADC采集求最大值,最小值,幅值取出波形的一个周期求…

2022秋软工实践 团队展示与选题报告

这个作业属于哪个课程Fzusdn这个作业要求在哪里2022秋软工实践 团队展示与选题报告这个作业的目标群策群力初步完成项目设计,有效交流带来团队友好氛围团队名称小心肝队组长学号042003121组员1学号032002221组员2学号032002343组员3学号032002401组员4学号032002422…

【英语】大学英语CET考试,词汇语法50h+(导学方法论,词汇3关键,语法3大山)

文章目录 1、谭剑波-词汇直播课1-2(词汇学习3个关键)1.1 看不懂句子的原因(词汇的重要性)1.2 记不住单词的原因(死记硬背70%)1.3 理解单词的本质(词根词缀,26字母,联想辅…

杨朔:大数据时代的移动营销

2019独角兽企业重金招聘Python工程师标准>>> 杨朔:大数据时代的移动营销 惠莫森中国区总经理杨朔表示,大数据本身强调的可能是大,但我们强调的是有用的数据。对于庞大的数据处理,我们提倡从小做起。所谓“小”便是移动…

详解ACM基础算法—DFS深度优先搜索算法 HIT杨朔

深度优先搜索(DFS)是搜索手段之一。是从某个状态开始不断转移状态直到无法转移为止,然后退回到前一步状态继续转移其他状态,可以想象为一个沿树爬行的虫子,在一个交叉口他会首先随机选择一条分岔路口一直走下去直到死路…

【调试经验】Ubuntu22.04 安装和配置MySQL 8.0.34

在安装新版本的MySQL到电脑时,按着网上一些教程执行发现错误繁多,最后索性自己摸索并把服务装好了。自己也整理了一下在操作时的一些,上传分享上来希望能帮助到大家。 目录 正文 安装MySQL 配置MySQL 登录账户 方式1: 默认账户登录 方…

Illustrator打开visio导出的emf为什么会报错

问题描述 将使用Visio绘制的.emf文件直接拖入Adobe Illustrator有时候会弹出如下报错窗口——“无法完成操作,因为出现未知错误。” 原因分析 经过多次测试,发现这个跟Visio中元素的数量有关,当数量>24或>27(差不多就这…

加密狗检测不到mysql_广联达检测不到加密锁

请先检查本机是否已正确安装广联达软件及加密锁驱动程序,盗版用户还需要安装一个“授权工具”。 碰到此问题,着实让人头疼。偶本人表示已经碰到很多次,有句古话:久病成医(有这句话?)。现将解决方法记录如下&#xff1a…

【教程】广联达装饰设计(Deco Design)软件模型导出

【教程】广联达装饰设计(Deco Design)软件模型导出 首先确认自己的模型是正常,并且可以显示,包括家具(不管是外部还是内部)。选择工具 - 显示设置 - 楼层显示 - 自定义楼层-全部楼层。 开始-导出-Igms即可…

并发编程基础知识篇--线程的状态和基本操作

目录 创建线程的四种方式 线程的状态和生命周期 扩展知识 线程的调度 线程状态的基本操作 interrupted 实例 join 实例 sleep 实例 扩展小知识 yield 实例 扩展 创建线程的四种方式 创建线程的四种方式 继承Thread类实现Runnable接口使用Callable和Future创…

win7笔记本无线网服务器,win7笔记本连接不上无线网络

有些时候我们在使用win7笔记本,难免会遇到连接不上无线网络的情况,这是怎么回事呢?下面就由学习啦小编来为你们简单的介绍win7笔记本连接不上无线网络的解决方法吧! win7笔记本连接不上无线网络的解决方法 Win7右下角的无线图标为但还是连接不上的话&am…

win7计算机建立无线网络连接不上,教你电脑连接不上无线网络怎么办

最近有网友反馈,遇到了笔记本无法连接无线网络的问题。笔记本如果连接不了WiFi,这样就会带来很多不便。其实导致电脑连接不上无线网络的原因有很多,接下来就让小编教你电脑连接不上无线网络怎么办吧。 电脑连接不上无线网络怎么办&#xff1a…

Win10电脑连接不上无线网络怎么解决

为了电脑使用方便,很多网友都会给电脑连接上无线网络来上网,但是电脑遇到连不上网络怎么办呢?今天给大家分享一个方法,大家遇到无线网络连接不上问题可以参考一下。 系统:win10专业版 电脑:联想Ideapad 7…

Win10笔记本电脑连接不上WiFi的解决办法

笔记本电脑连接不上WiFi是很多朋友会遇到的一个问题,而产生的原因也很多,解决起来相对麻烦一些,需要了解导致的原因与排查方法。最近小编的Win10笔记本电脑也遇到了类似的无线网络连接不可用的问题,不过通过排查很快就解决了,下面小编分享一下详细的Win10笔记本电脑连接不…

禁用计算机的网络连接无线网络连接不上,win7笔记本电脑无线网络连接不上怎么解决?...

最近有不少网友都遇到了win7笔记本电脑无线网络连接不上的问题。我们都知道,无线网络是可以共享的,笔记本无线网络连接不上,我们就无法有进一步的操作了。那么,win7笔记本电脑无线网络连接不上怎么解决呢?接下来,小编…

深度学习怎么学?

推荐这本小白看的《深度学习:从基础到实践(上下册)》。 深度学习:从基础到实践(上下册) 深入浅出的讲述了深度学习的基本概念与理论知识,不涉及复杂的数学内容,零基础小白也能轻松掌…

笔记本计算机无法上无线网络,告诉你解决笔记本电脑连不上无线网络

在科技快速发展的今天,无线网络给我们的生活带来了极大的方便,正是因为有无线网卡的存在,才使得笔记本电脑能够开启WiFi,成为移动热点。不过也有用户会遇到笔记本电脑连不上无线网络的情况,该怎么去解决呢?…

禁用计算机的网络连接无线网络连接不上,笔记本电脑无线网络连接不上是什么原因...

笔记本电脑无线网络连接不上是什么原因?笔记本电脑连接不上无线网络的原因,有以下几种可能:1、无线网络密码不正确;2、无线网络缓存问题;3、路由器上进行了限制。 笔记本电脑无线网络连接不上 一、无线网络密码不正确 …

笔记本电脑连接不上WiFi怎么办?4个实用解决方法!

案例:笔记本电脑连接不上WiFi怎么办 “朋友们,想问问大家知道为什么我的笔记本电脑连接不上WiFi呢?试了好几遍还是无法连接,遇到这种情况我应该怎么解决呢?感谢大家!” 在现代生活中,笔记本电…