**基于Python实现的选课系统**
## 1.选课系统数据库设计
![](http://www.writebug.com/myres/static/uploads/2021/10/22/c1f175c9be0e86f2325fc86a50d988a5.writebug)
### 1.1从ER图到表结构
#### 实体集
+ 课程信息 course (<u>course_id</u>, title, credits, dept_name)
+ 开课信息 section (<u>course_id</u>, <u>section_id</u>, start, end, classroom_no, limit, day, lesson)
+ 账户信息 account (<u>ID</u>, password, role)
+ 学生信息 student(<u>student_id</u>,student_name, student_major, student_dept_name, student_total_credit)
+ 教师信息 instructor (<u>instructor_id</u>, instructor_name, instructor_class, dept_name)
+ 考试信息 exam (<u>course_id</u>, <u>section_id</u>, exam_classroom_no, exam_day, type, start_time, end_time, open_note_flag)
+ 教室信息 classroom (<u>classroom_no</u>,capacity)
#### 关系集
+ 教师 & 开课 :教授 teaches (<u>instructor_id</u>, <u>course_id</u>, <u>section_id</u>)
+ 学生 & 开课 :选课 takes (<u>course_id</u>, <u>section_id</u>, <u>student_id</u>, grade)
+ 学生 & 开课:申请 application (<u>course_id</u>, <u>section_id</u>, <u>student_id</u>, status, application_reason, if_drop)
### 1.2表结构分析
+ course: 用于存储和管理课程信息的数据库表,主键是课程编号course_id。
```sqlite
CREATE TABLE "course" (
"course_id" TEXT(255) NOT NULL,
"title" TEXT(255) NOT NULL,
"credits" integer(10) NOT NULL,
"dept_name" TEXT(255),
PRIMARY KEY ("course_id")
);
```
+ section: 用于存储和管理本学期实际上开设的课程信息,是一个弱实体集。开课涉及到上课时间,如星期五 3-4这样的时间。为了保证原子性,
系统拆分成了三部分:day表示是一周的第几天,start表示这门课的开始节次,end表示这门课的结束节次。lesson作为导出属性而存在。section
作为弱实体集,它的主键由course_id和section_id联合组成。本数据库表引用了两个外键,一个是course的主键,一个是classroom的主键。针对这两个外键,数据库库表都设置了级联删除以及级联更新。
```sqlite
CREATE TABLE "section" (
"course_id" TEXT(255) NOT NULL,
"section_id" INTEGER(10) NOT NULL,
"classroom_no" TEXT(255),
"limit" INTEGER(10) NOT NULL,
"day" INTEGER(10) NOT NULL,
"start" integer(10) NOT NULL,
"end" integer(10) NOT NULL,
PRIMARY KEY ("course_id", "section_id"),
FOREIGN KEY ("course_id") REFERENCES "course" ("course_id") ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY ("classroom_no") REFERENCES "classroom" ("classroom_no") ON DELETE CASCADE ON UPDATE CASCADE
);
```
+ account: 用于存储管理账户信息的数据库表,含有用户名,密码和角色。主键是用户名ID。
```sqlite
CREATE TABLE "account" (
"ID" text(255) NOT NULL,
"password" text(255) NOT NULL,
"role" integer(10) NOT NULL,
PRIMARY KEY ("ID")
);
```
+ student: 用于存储和管理学生的相关信息。信息主要包括学号,姓名,专业,院系和总学分。主键是学号student_id。总学分的默认值是0。
```sqlite
CREATE TABLE "student" (
"student_id" TEXT(255) NOT NULL,
"student_name" TEXT(255) NOT NULL,
"student_major" TEXT(255) NOT NULL,
"student_dept_name" TEXT(255) NOT NULL,
"student_total_credit" INTEGER(10) DEFAULT 0,
PRIMARY KEY ("student_id")
);
```
+ instructor: 用于存储和管理教师的相关信息。信息主要包括教师编号,教师姓名,所属院系和职称。主键是教师编号。
```sqlite
CREATE TABLE "instructor" (
"instructor_id" TEXT(255) NOT NULL,
"instructor_name" TEXT(255),
"instructor_class" TEXT(255),
"dept_name" TEXT(255),
PRIMARY KEY ("instructor_id")
);
```
+ exam: 用于存储和管理课程考核的相关信息。含有属性课程编号,开课编号,考试类型(论文或者考试)等。其中教室,考试的开始时间以及是否开卷是在考核类型为考试时才有涵义。考核作为一个弱实体集,它的主键由课程编号和开课编号联合组成,与开课一一对应。本表引用了三个外键,分别是表section的联合主键和表classroom的主键。删除和更新都是级联执行。
```sqlite
CREATE TABLE "exam" (
"course_id" TEXT(255) NOT NULL,
"section_id" TEXT(255) NOT NULL,
"exam_classroom_no" TEXT(255),
"exam_day" integer(5) NOT NULL,
"type" integer(5) NOT NULL,
"start_time" TEXT(255),
"end_time" TEXT(255) NOT NULL,
"open_note_flag" integer(5),
PRIMARY KEY ("course_id", "section_id"),
FOREIGN KEY ("course_id", "section_id") REFERENCES "section" ("course_id", "section_id") ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY ("exam_classroom_no") REFERENCES "classroom" ("classroom_no") ON DELETE CASCADE ON UPDATE CASCADE
);
```
+ classroom: 教室信息。含有教室的编号以及容量。主键是教室编号。
+ teaches: 教师教授课程关系集对应的数据库表。主键是course_id,section_id和instructor_id。相关外键的删除和更新都是级联的。
```sqlite
CREATE TABLE "teaches" (
"instructor_id" TEXT(255) NOT NULL,
"course_id" TEXT(255) NOT NULL,
"section_id" INTEGER(10) NOT NULL,
PRIMARY KEY ("instructor_id", "course_id", "section_id"),
FOREIGN KEY ("course_id", "section_id") REFERENCES "section" ("course_id", "section_id") ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY ("instructor_id") REFERENCES "instructor" ("instructor_id") ON DELETE CASCADE ON UPDATE CASCADE
);
```
+ takes: 学生选课关系集对应的数据库表。主键是course_id,section_id和student_id。相关外键的删除和更新都是级联的。
```sqlite
CREATE TABLE "takes" (
"course_id" text(255) NOT NULL,
"section_id" INTEGER(10) NOT NULL,
"student_id" text(255) NOT NULL,
"grade" TEXT(10),
PRIMARY KEY ("course_id", "section_id", "student_id"),
FOREIGN KEY ("course_id", "section_id") REFERENCES "section" ("course_id", "section_id") ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY ("student_id") REFERENCES "student" ("student_id") ON DELETE CASCADE ON UPDATE CASCADE
);
```
+ application: 学生选课申请对应的数据库表。主键是course_id,section_id和student_id。相关外键的删除和更新都是级联的。特别的含有属性if_drop用来标志学生是否申请成功了改课程之后又退掉了。相关外键的删除和更新都是级联的。
```sqlite
CREATE TABLE "application" (
"course_id" text(255) NOT NULL,
"section_id" integer(5) NOT NULL,
"student_id" text(255) NOT NULL,
"status" integer(5) NOT NULL DEFAULT 0,
"application_reason" text(255),
"if_drop" integer(5) DEFAULT 0,
PRIMARY KEY ("course_id", "section_id", "student_id"),
FOREIGN KEY ("student_id") REFERENCES "student" ("student_id") ON DELETE CASCADE ON UPDATE NO ACTION,
FOREIGN KEY ("course_id", "section_id") REFERENCES "section" ("course_id", "section_id") ON DELETE CASCADE ON UPDATE NO ACTION
);
```
### 1.3函数依赖与范式分析
+ 所有关系的属性的域都是原子的,不包含任何组合属性,所以上述关系模式都属于第一范式。
+ 没有任何非主属性部分依赖于键,所以也符合第二范式。
+ 没有任何非主属性传递依赖于键,所以符合第三范式。
+ 没有任何属性传递依赖于键,所以符合BC范式。
综上,我们设计的关系模式属于BC范式。
## 2.功能点实现——数据库操作逻辑
### 2.1选课
选退课功能开放后,学生才可以进行选课。学生选课,数据库需要先检查该课程的选课人数是否已经达到选课上限,并且检查选择的课程是否与已选课程具有时空冲突(包括上课和考试的时空冲突)。如果没超过上限并且没有冲突,则该学生可以选上该门课程。
### 2.2退课
选退课功能开放后,学生才可以进行退课。学生退课,如果学生已经选择这门课程,直接去掉选课表中的一行数据。注意,如果用户是通过选课申请选上该门课�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
课程信息 course (course_id, title, credits, dept_name) 开课信息 section (course_id, section_id, start, end, classroom_no, limit, day, lesson) 账户信息 account (ID, password, role) 学生信息 student(student_id,student_name, student_major, student_dept_name, student_total_credit) 教师信息 instructor (instructor_id, instructor_name, instructor_class, dept_name) 详细介绍参考:https://blog.csdn.net/sheziqiong/article/details/132823059
资源推荐
资源详情
资源评论
收起资源包目录
基于Python实现的选课系统.zip (168个子文件)
bootstrap.css 143KB
AdminLTE.css 110KB
ionicons.css 56KB
_all-skins.css 47KB
_all-skins.min.css 41KB
font-awesome.css 36KB
skin-black-light.css 5KB
skin-blue-light.css 4KB
skin-purple-light.css 4KB
skin-yellow-light.css 4KB
skin-green-light.css 4KB
skin-red-light.css 4KB
skin-black.css 4KB
skin-black-light.min.css 4KB
skin-blue-light.min.css 4KB
skin-yellow-light.min.css 4KB
skin-purple-light.min.css 4KB
skin-green-light.min.css 4KB
skin-blue.css 4KB
skin-red-light.min.css 4KB
skin-yellow.css 3KB
skin-purple.css 3KB
skin-black.min.css 3KB
skin-green.css 3KB
skin-red.css 3KB
skin-blue.min.css 3KB
skin-purple.min.css 3KB
skin-yellow.min.css 3KB
skin-green.min.css 3KB
skin-red.min.css 3KB
login.css 579B
courseSelection.css 455B
courseTable.css 395B
fontawesome-webfont.eot 162KB
ionicons.eot 118KB
glyphicons-halflings-regular.eot 20KB
.gitignore 2KB
.gitignore 39B
.gitigore 66B
courseSelection.html 22KB
examManagement.html 19KB
sectionManagement.html 18KB
instructorManagement.html 15KB
courseManagement.html 15KB
studentManagement.html 15KB
index.html 12KB
courseTable.html 11KB
courseApplication.html 6KB
sectionManagementInstructor.html 5KB
courseNameList.html 5KB
courseApplicationManagementIns.html 4KB
courseGrade.html 3KB
login.html 3KB
message.inc.html 908B
base.html 633B
test.html 226B
index.html 20B
courseTakingSystem.iml 1KB
courseSelection.iml 458B
login_background.jpg 61KB
login_background.jpg 61KB
jquery-3.3.1.min.js 85KB
bootstrap.js 68KB
adminlte.js 28KB
index.js 2KB
course.js 2KB
login.js 2KB
utils.js 2KB
user.rooter.js 887B
instructor.js 759B
account.js 729B
section.js 729B
student.js 729B
exam.js 699B
message.inc.js 511B
student.router.js 374B
users.js 350B
instructor.router.js 201B
root.router.js 187B
settings.json 89B
LICENSE 1KB
README.md 30KB
README.md 30KB
FontAwesome.otf 132KB
项目文档.pdf 1.58MB
需求文档.pdf 215KB
说明文档.pdf 197KB
ER.pdf 73KB
ER_png.png 76KB
1.png 26KB
2.png 25KB
3.png 18KB
arrow_right.png 1KB
collapse.png 119B
expand.png 108B
root_service.py 53KB
views.py 26KB
import_service.py 23KB
check_service.py 12KB
backupORM.py 11KB
共 168 条
- 1
- 2
资源评论
- m0_751087872024-04-17资源很实用,内容详细,值得借鉴的内容很多,感谢分享。
- AnonymousBamboo2023-11-16内容与描述一致,超赞的资源,值得借鉴的内容很多,支持!
- 一桃复一李2024-03-19感谢资源主的分享,很值得参考学习,资源价值较高,支持!
shejizuopin
- 粉丝: 1w+
- 资源: 1288
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功