# 一、需求分析
- **开发意义:** 随着信息技术不断向深入发展,越来越多的学校开始着手信息化建设。其中学生选课、成绩信息化管理就是其中重要的一块内容。学生选课与成绩信息规模大、项目条数多、信息量庞大,传统的人工管理方式显然已经无法满足要求,需要借助计算机来进行现代化信息管理,从而提高管理的准确性与高效性。
- **可行性:** 传统人工管理成绩存在诸多弊病,比如准确性低、效率低等。计算机具有存储快、查找便利、准确性高的特点,能非常好的解决人工管理的弊病。
- **应用环境:**
- Web服务器:tomcat8.5;
- 编程工具Eclipse Java 2019-09;
- 数据库:SQL sever 2017;
- 技术路线: jsp+servlet+javabean;
## 1.1系统功能需求
系统功能框架介绍,处理模块描述。
- 管理员:
1. 查询教师名单;
2. 添加教师信息;
3. 修改教师信息;
4. 删除教师信息;
5. 查询学生名单;
6. 添加学生信息;
7. 修改学生信息;
8. 删除学生信息;
9. 查询课程信息;
10. 添加课程信息;
11. 修改课程信息;
12. 删除课程信息;
13. 修改登录密码;
- 教师:
1. 查看个人信息;
2. 查看任课信息;
3. 按照课程表信息开设课程;
4. 取消个人已开课的课程;
5. 按行政班级查看学生均绩及排名;
6. 按任课课程查询学生单门成绩及排名;
7. 按学年查询个人教授课程的平均成绩;
8. 录入学生成绩, 自动更新该学生已修总学分;
9. 修改登录密码;
- 学生:
1. 查看个人信息;
2. 查看本人课程;
3. 选课与退选;
4. 按学年查询考试成绩;
5. 修改登录密码;
![图1.1.1 系统功能需求](https://img-blog.csdnimg.cn/20200104155621922.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMxODE5Mg==,size_16,color_FFFFFF,t_70)
## 1.2 其他性能需求
1. 分管理员、教师、学生不同身份登录,并给予不同的权限,提高系统安全性;
2. 使用前端验证保证用户的输入正确。
3. 创建触发器及存储过程,保证完整性。
4. 充分考虑系统报错情况,尽量防止系统崩溃。
# 二、概念结构设计
## 2.1实体关系分析
1. 开设班级,每个班级包含若干学生;
2. 课程由教师开设;
3. 同一门课可能有多个教师开课,一个教师在一学期可能开多门课程;
4. 需要考虑不同学年,并以学年制管理学籍;
5. 不考虑按照班级直接开课的情况,即所有课程均由学生自由选择;
6. 一个学生只能选择某位老师的开的某个课程,即学生不能同时选择同一门两个不同老师开的课程;
7. 不存在两个及以上老师联合开课的情况,即不存在两个及以上教师负责同一教学班的情况。
## 2.2 E-R图
基于以上分析可得以下E-R 图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200104155743402.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMxODE5Mg==,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200104155758431.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMxODE5Mg==,size_16,color_FFFFFF,t_70)
# 三、逻辑结构设计
## 3.1关系模式设计
将E-R图转换为以下关系模式:(加粗代表主键,斜体内容表示外键)
- 班级(**班级编号**, 班级名称)
- 学生(**学号**, 姓名, 性别, 年龄, 生源所在地, 已修学分总数, 登录密码, *班级编号*)
- 课程(**课程编号**, 课程名称, 学时, 考试或考查, 学分)
- 教师(**教师编号**, 姓名, 性别, 年龄, 职称, 电话, 登录密码)
- 开课情况(**开课编号**,*课程编号*, *任课教师编号*,开课学年, 开课学期,**学号**,成绩)
- 选课情况(***开课编号*,*学号***,成绩)
## 3.2数据类型定义
对关系模式中的属性定义类型、长度和约束:
1. 班级
| 数据项名 | 数据类型 | 长度 | 完整性约束 | 备注 |
| --- | --- | --- | --- | --- |
| 班级编号 | nvarchar | 4 | 主键,唯一,非空 | |
| 班级名称 | nvarchar | 20 | 非空 |
2. 学生
| 数据项名 | 数据类型 | 长度 | 完整性约束 | 备注 |
| --- | --- | --- | --- | --- |
| 学号 | nvarchar | 12 | 主键,唯一,非空 | |
| 姓名 | nvarchar | 5 | 非空 |
| 性别 | nvarchar | 1 | 非空 |
| 年龄 | int | 4 | 非空 |
| 生源所在地 | nvarchar | 20 | 非空 |
| 已修学分总数 | float | 4 | |
| 登录密码 | nvarchar | 20 | 非空 |
| 班级编号 | nvarchar | 4 | 外键,非空 |
3. 课程
| 数据项名 | 数据类型 | 长度 | 完整性约束 | 备注 |
| --- | --- | --- | --- | --- |
| 课程编号 | nvarchar | 5 | 主键,唯一,非空 | |
| 课程名称 | nvarchar | 20 | 非空 |
| 学时 | int | 4 | 非空 |
| 考试或考查 | bit | 1 | 非空 |
| 学分 | float | 4 | 非空 |
4. 教师
| 数据项名 | 数据类型 | 长度 | 完整性约束 | 备注 |
| --- | --- | --- | --- | --- |
| 教师编号 | nvarchar | 5 | 主键,唯一,非空 | |
| 姓名 | nvarchar | 20 | 非空 |
| 性别 | nvarchar | 1 | 非空 |
| 年龄 | int | 4 | 非空 |
| 职称 | nvarchar | 10 | 非空 |
| 电话 | nvarchar | 20 | 非空 |
| 登录密码 | nvarchar | 20 | 非空 |
5. 开课选课情况
| 数据项名 | 数据类型 | 长度 | 完整性约束 | 备注 |
| --- | --- | --- | --- | --- |
| 开课编号 | nvarchar | 15 | 主键,唯一,非空 | |
| 课程编号 | nvarchar | 5 | 外键,非空 |
| 任课教师编号 | nvarchar | 5 | 外键,非空 |
| 开课学年 | nvarchar | 4 | 非空 |
| 开课学期 | bit | 1 | 非空 |
6. 选课情况
| 数据项名 | 数据类型 | 长度 | 完整性约束 | 备注 |
| --- | --- | --- | --- | --- |
| 开课编号 | nvarchar | 15 | 联合主键,也均为外键 | |
| 学号 | nvarchar | 12 |
| 成绩 | int | 4 | |