基于C#和Sql Server 2008实现的高校成绩管理系统

Gentleman

发布日期: 2021-05-17 08:40:31 浏览量: 107
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

一、需求分析

随着学校的规模不断扩大,学生数量急剧增加,有关学生的各种信息量也
成倍增长。面对庞大的信息量需要有学生管理系统来提高学生管理工作的效率。通过这样的系统可以做到信息的规范管理、 科学统计和快速查询、修改、增加、删除等,从而减少管理方面的工作量。为了能够科学、高效、及时地处理大量的学生、老师的信息与数据,因此,引入高校成绩管理系统是非常有必要的。

本系统应用于高校中以完成对成绩的管理,因为本系统的图形化界面系统,操作人员不需要具备数据库的专业知识,只需要了解相关基础概念即可对该系统进行高效地使用。

1.1 数据需求描述

1.1.1 数据项描述

  1. {数据项名:专业编号 类型:CHAR 长度:5}
  2. {数据项名:专业名称 类型:CHAR 长度:20}
  3. {数据项名:班级编号 类型:CHAR 长度:5}
  4. {数据项名:教师编号 类型CHAR 长度:5}
  5. {数据项名:教师姓名 类型:CHAR 长度:10}
  6. {数据项名:教师性别 类型:CHAR 长度:2 取值范围:男或女}
  7. {数据项名:教师年龄 类型:INT 取值范围:18-80}
  8. {数据项名:职称 类型:CHAR 取值范围:教授,副教授,高级 讲师,讲师}
  9. {数据项名:联系电话 类型:CHAR 长度:15}
  10. {数据项名:课程编号 类型:CHAR 长度:5}
  11. {数据项名:课程名称 类型:CHAR 长度:20}
  12. {数据项名:学时 类型:INT 取值范围:>0}
  13. {数据项名:考核方式 类型:CHAR 长度:4取值范围:考试,考察}
  14. {数据项名:学分 类型:FLOAT 取值范围:>0 }
  15. {数据项名:学生学号 类型:CHAR 长度:5}
  16. {数据项名:学生姓名 类型:CHAR 长度:10}
  17. {数据项名:学生性别 类型:CHAR 长度:2取值范围:男或女}
  18. {数据项名:学生年龄 类型:INT 取值范围:15-40}
  19. {数据项名:生源所在地 类型: CHAR 长度:20}
  20. {数据项名:已修学分数 类型: INT }
  21. {数据项名:地区 类型:CHAR 长度:10}

1.1.2 数据结构

  1. {学生,学生群体,组成:{学生学号,学生姓名,学生性别,学生年龄,生源所在地,已修学分数,地区}}
  2. {教师,教师群体,组成:{教师编号,教师姓名,教师性别,教师年龄,职称,联系电话}}
  3. {课程,可供学习的课程,组成:{课程编号,课程名称,学时,考核方式,学分}}
  4. {专业,学校开设的专业,组成:{专业编号,专业名称}}
  5. {班级,专业开设的班级,组成:{班级编号,班级名称}}

1.1.3 数据流

  1. {学习,成绩录入,成绩查询,组成:{学生,课程,教师}}

数据流图描述:

由于不同的权限对应的数据需求不同,为了便于数据的收集与处理,我们把整个管理系统分为管理员、学生以及教师三个模块,各个模块的数据流图如下所示:

管理员模块数据流图

学生模块数据流图

教师模块数据流图

1.2 系统功能需求

学生成绩管理系统主要提供学生成绩的查询、维护,方便管理的网上的信息查阅平台,学生可以通过该系统查阅与自己相关信息,比如个人信息、成绩查询、班级开课查询等,并且能够修改自己的登录密码。教师可以通过成绩管理系统查阅学生信息、教师信息、以及自己所执教课程学生成绩的录入、查询课程的平均分、根据课程查询该课程的学生排名、根据条件(学生学号、课程号或者班级号)查询学生信息。系统管理员可以实现以上的所以功能,还有对学生信息的添加,删除,修改;教师信息的添加,删除,修改;课程信息的添加,删除,修改。具体功能如下:

管理员模块

主要功能是对每学期课课程信息的添加,修改,删除;教师信息的添加,删除,修改;学生信息的添加,修改,删除;还可以对全体学生信息,教师信息的查询,学生成绩的查询以及自己登陆密码的修改等。

教师模块

主要功能是对自己教课程进行成绩的录入,对教师个人信息的查询,学生成绩的查询,按照条件查询学生信息,各个课程的平均成绩查询,特定课程的学生成绩排名以及自己登陆密码的修改等。

学生模块

主要功能是对自己信息的查询,每学期成绩的查询,自己已修课程和学分的查询,班级开课情况查询,登陆密码修改等。

各个模块之间的结构联系图如下

1.3 其他性能需求

硬件环境

  • 处理器:Inter(R) Core(TM) i5-7000U CPU @2.50GHz 2.70GHz
  • 内存:8.00GB
  • 外部设备:显示器,键盘,鼠标

软件环境

  • 系统:windows 10 64 位专业版
  • 数据库软件:Microsoft SQL sever 2008
  • 应用系统开发环境:Microsoft Visual Studio 2010

适合用户

适合各类中等学校对中学生成绩事务管理,或高校大类基础课程成绩事务管理。

系统模块化设计

本系统遵循了“自顶向下,逐层展开”结构化时间原则,系统功能按模块化实现,各模块之间既关联又相互独立,每个模块执行特定的功能,系统设计操作简单,可读性强。

系统实用性

为了提高系统效率,系统提供了多种形式的对话框,并在设计过程中考虑尽量减少用户的输入。为了提高查询效率,系统提供了多种组合查询。

系统安全性

为了防止非法人员进入系统,造成意外破坏,在进入本系统之前,需经过密码认证,同时,系统管理员对每个用户的使用权限进行设置,使不至于越权操作。

二、概念结构设计

班级 E-R 图

学生 E-R 图

教师 E-R 图

课程 E-R 图

成绩 E-R 图

全局 E-R 图

三、逻辑结构设计

3.1 关系模式设计

  • 班级(班级号,专业名称)
  • 学生(学号,班级号,密码,姓名,性别,年龄,生源地,已修学分,地区信息)
  • 教师(教师工号,密码,姓名,性别,年龄,职称,联系方式)
  • 课程(课程号,班级号,任课老师,课程名,学期,学时,考核方式,课程学分)
  • 教授(教师工号,课程号)
  • 成绩(学号,课程号,学期,分数)

3.2 数据类型定义

nirszhangy_Classes 表

序号 字段 别名 数据类型 长度 约束条件 主键 外键
1 nrszy_ClassNo 班级号 Char 12 Y N
2 nrszy_Deptname 专业名 Char 20 N N

nirszhangy_Students 表

序号 字段 别名 数据类型 长度 约束条件 主键 外键
1 nrszy_Sno 学号 Char 12 Y N
2 nrszy_Spassword 登录密码 Char 15 默认为 123456 N N
3 nrszy_ClassNo 所在班级号 Char 12 非空 N Y
4 nrszy_Sname 姓名 Char 20 N N
5 nrszy_Ssex 性别 Char 2 男/女 N N
6 nrszy_Sage 年龄 Int > 0 N N
7 nrszy_Splace 生源地 Char 10 N N
8 nrszy_Scredit 已修学分 Float >= 0 N N
9 nrszy_Sarea 地区信息 Char 20 N N

nirszhangy_Teachers 表

序号 字段 别名 数据类型 长度 约束条件 主键 外键
1 nrszy_Tno 教师工号 Char 12 Y N
2 nrszy_Tpassword 登录密码 Char 15 默认为 123456 N N
3 nrszy_Tname 姓名 Char 20 N N
4 nrszy_Tsex 性别 Char 2 男/女 N N
5 nrszy_Tage 年龄 Int > 0 N N
6 nrszy_Ttitle 职称 Char 12 N N
7 nrszy_Tphone 联系方式 Char 15 N N

nirszhangy_Courses 表

序号 字段 别名 数据类型 长度 约束条件 主键 外键
1 nrszy_Cno 课程号 Char 12 Y N
2 nrszy_ClassNo 班级号 Char 12 N Y
3 nrszy_Cname 课程名 Char 20 非空 N N
4 nrszy_Tno 任课老师工号 Char 12 N Y
5 nrszy_Cterm 学期 Char 12 N N
6 nrszy_Ctime 学时 Int N N
7 nrszy_Ctestway 考核方式 Char 5 考试/考查 N N
8 nrszy_Ccredit 学分 Int > 0 N N

nirszhangy_Reports 表

序号 字段 别名 数据类型 长度 约束条件 主键 外键
1 nrszy_Sno 学号 Char 12 Y Y
2 nrszy_Cno 课程号 Char 12 Y Y
4 nrszy_Gterm 学期 Char 12 N N
5 nrszy_Grade 分数 Int ∈[0,100] N N

3.3 关系模式的优化

优化全局 E-R 模式的几个原则:

  • 实体型的合并:这里的合并不是指”公共实体型”的局部 E-R 模式合并,而是指两个有联系的实体型的合并
  • 冗余属性的消除:通常在各个局部 E-R 模式中式不允许冗余属性存在的,但在合并为全局 E-R 模式后,可能产生全局范围内的冗余属性
  • 冗余联系的消除

由于上述关系模式都为 BCNF,因此不需要对他们进行规范化了。

四、物理结构设计

4.1 聚簇设计

聚簇是将有关的数据元组集中存放于一个物理块内或若干相邻物理块内或同一柱面内,以提高查询效率的数据存储结构。聚簇设计就是根据用户需求确定每个关系是否需要建立聚簇,如果需要,则应确定在该关系的哪些属性列上建立聚簇。一般在遇到以下一些特定情况时才考虑对一个关系建立聚簇:

  • 当对一个关系的某些属性列的访问时该关系的主要应用,而对其他属性的访问很少或是次要应用时,可以考虑对该关系在这些属性列上建立聚簇
  • 如果一个关系在某些属性列上的值重复率很高,则可以考虑对该关系在这些组属性列上建立聚簇
  • 如果一个关系一旦装入数据,某些属性列的值很少修改,也很少增加或删除元组,则可以考虑对该关系对该关系在这些组属性列上建立聚簇

基于以上要求,该成绩管理系统可建立的聚簇索引有:

  • 学生(学生号)
  • 教师(教师号)
  • 课程(课程号)

事实上,SQL 在建表的过程中已经相应地在各个表中建立了聚簇索引。

4.2 索引设计

索引也是按照关系的某些属性列建立的,它与聚簇的不同之处在于,当索引属性列发生变化,或增加,删除元组时,只有索引发生变化,而关系中原先得元组的存放位置不受影响。此外,每个关系只能建立一个聚簇,但却可以同时建立多个索引。对于一个确定的关系,通常在下列情况下可以考虑建立索引:

  • 在在主属性列和外键属性列上通常都可以分别建立索引,不仅有助于唯一性检测和完整性检查,而且可以加快连接查询的速度
  • 以查询为主的关系可以建立尽可能多的索引
  • 对等值连接,但满足条件的元组较少的查询可考虑建立索引
  • 如果查询可以从索引直接得到结果而不必访问关系,则对此种查询可建立索引。例如,为查询某个属性的 MIN,MAX,AVG,SUM,COUNT 等函数值,可在该属性列上建立索引

根据以上要求,本关系的课程表,学生表,教师表分别按照课程号,学号,教师编号的升序建立索引。

4.3 分区设计

磁盘分区设计的一般原则:

  • 减少访问冲突,提高 I/O 并发性:多个事物并发访问同一磁盘时,会产生磁盘访问冲突而导致效率低下,如果事务访问数据均能分布于不同磁盘上,则 I/O 可并发执行,从而提高数据库访问速度
  • 分散热点数据,均衡 I/O 负担:在数据库中数据访问的频率是不均匀的,那些经常被访问的数据成为热点数据,此类数据宜分散存在于不同的磁盘上,以均衡各个磁盘的负荷,充分发挥多磁盘的并行操作的优势
  • 保证关键数据快速访问,缓解系统瓶颈:在数据库中有些数据如数据字典等的访问频率很高,为保证对它的访问不直接影响整个系统的效率,可以将其存放在某一固定磁盘上,以保证其快速访问

该成绩管理系统由于程序较小,所以不进行分区设计。统一储存在 F 盘:/数据库大型实验。

4.4 数据备份

4.4.1 备份方法

将数据库的全部数据或者部分数据复制到磁带,另外一个磁盘上或者另一台电脑上。

4.4.2 备份周期

每天晚上进行动态增量转储,每月进行一次海量转储。

4.4.3 备份工具

特佳容灾是一套主要面向 Windows、Linux 以及 Unix 平台下集、文件备份、操作系统备份于一体的综合实时备份系统。能够做到真正的 CDP,能够实现业务的连续性,并且能够容错以及容灾

五、数据库实施

5.1 数据库建立

5.2 基本表建立

创建基本表”nirszhangy_Classes”

创建基本表”nirszhangy_Students”

创建基本表”nirszhangy_Teachaers”

创建基本表”nirszhangy_Courses”

创建基本表”nirszhangy_Teach”

创建基本表”nirszhangy_Reports”

5.3 视图的建立

将一些需要连接多个基本表的查询先建立视图,简化应用系统中查询语句的书写。

创建视图”nirszhangy_stu_grade_view”

创建视图”nirszhangy_course_avg_grade”

创建视图”nirszhangy_stu_course_view”

创建视图”nirszhangy_teacher_course_view”

5.4 索引的建立

建立对班级号的索引

建立对课程号的索引

建立对学号的索引

建立对教师工号的索引

5.5 触发器建立

使用自定义完整性实验中的 nirszhangy_Reports 表。为此表建立触发器 UPD_nirszhangy_Grade,当插入或使更新表中的数据时,保证所操作的纪录的 nrs_Grade 值为 0 到 100 之间的数。

建立触发器 UPD_nirszhangy_Grade

使用自定义完整性实验中的 nirszhangy_Courses 表。为此表建立触发器 UPD_credit,当插入或使更新表中的数据时,保证所操作的纪录的 nrs_Ccredit 大于 0 的数。

建立触发器 UPD_credit

当为学生登记课程成绩时,根据成绩是否及格(nrs_Grade >= 60),自动为学生登记已修学分 nrs_Scredit。

建立触发器 UPD_grade2

每当新添加一个学生时,密码默认为 123456。教师的密码也采取相同操作。

建立 BUD_Spassword

建立 BUD_Tpassword

5.6 存储过程的建立

创建一个存储过程(insertResult)添加学生成绩,要求输入(学号,课程名,分数)如果输入的学号不存在,则提示“学生基本信息表中不存在此学号,请检查后重新输入”,如果输入的课程不存在,则提示“还没有这门课程,请检查后重新输入”,最后添加成绩,若成功,则显示”成绩添加成功”。

建立存储过程如下

  1. CREATE PROCEDURE InsertResult
  2. (@nrszy_Sno char(12),
  3. @nrszy_Cno char(12),
  4. @nrszy_Grade float
  5. )
  6. AS
  7. SET NOCOUNT ON
  8. DECLARE @nCount int SET @nCount=0
  9. DECLARE @nCourse int SET @nCourse=0
  10. DECLARE @nExistAchievement int SET @nExistAchievement=0
  11. SELECT @nCount=COUNT(nrszy_Sno)
  12. FROM nirszhangy_Students
  13. WHERE nirszhangy_Students.nrszy_Sno=@nrszy_Sno
  14. IF @nCount<1
  15. BEGIN
  16. PRINT'学生基本信息表中不存在此学号,请检查后重新输入'
  17. RETURN
  18. END
  19. /*如果输入的课程不存在,则提示“还没有这门课程,请检查后重新输入”*/
  20. SELECT @nCourse=COUNT(nrszy_Cno)
  21. FROM nirszhangy_Courses
  22. WHERE nirszhangy_Courses.nrszy_Cno=@nrszy_Cno
  23. IF @nCourse<1
  24. BEGIN
  25. PRINT'还没有这门课程,请检查后重新输入'
  26. RETURN
  27. END
  28. /*添加成绩,若成功,则显示"成绩添加成功"*/
  29. UPDATE nrszy_Grade
  30. SET nirszhangy_Reports.nrszy_Grade=@nrszy_Grade
  31. WHERE nirszhangy_Reports.nrszy_Sno=@nrszy_Sno
  32. PRINT'成绩添加成功'

存储过程 2.根据输入的课程编号和开课学期,统计学生的成绩排名。

  1. /************************学生成绩排名**************************/
  2. CREATE PROCEDURE 学生成绩排名
  3. @课程编号 CHAR(12),@开课学期 CHAR(20)
  4. AS
  5. SELECT nrszy_Sno,nrszy_Grade,nrszy_Gterm
  6. FROM nirszhangy_Reports
  7. where nirszhangy_Reports.nrszy_Cno = @课程编号
  8. and nirszhangy_Reports.nrszy_Gterm = @开课学期
  9. order by nrszy_Grade desc

5.7 添加数据并测试

nirszhang_Classes 表的添加

nirszhang_Classes 表的结果

nirszhang_Students 表的添加

密码和已修学分通过触发器自动填写,另外错误的两条元组修改后成功插入。

nirszhang_Students 表的结果

nirszhang_Teachers 表的添加

nirszhang_Teachers 表的结果

nirszhang_Courses 表的添加

nirszhang_Courses 表的结果

nirszhang_Reports 表的添加

nirszhang_Reports 表的结果

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

6.1 开发平台和开发环境介绍。

硬件环境

  • 处理器:Inter(R) Core(TM) i5-7200U CPU @2.50GHz 2.70GHz
  • 内存:8.00GB
  • 外部设备:显示器,键盘,鼠标

软件环境

  • 系统:windows 10 64 位专业版
  • 数据库软件:Microsoft SQL sever 2008
  • 应用系统开发环境:VS2010

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

使用 VS2010 C#中的 SqlConnection 方式连接数据库,连接主要代码如下:

  1. string str1 = "server=(local);uid =nrszy;database=nirunshengzhangyu02MIS;pwd =123456";
  2. SqlConnection con = new SqlConnection(str1);//建立连接的信息
  3. if (con.State == ConnectionState.Closed)
  4. {
  5. con.Open();//建立连接
  6. }

6.3 系统各功能设计和运行界面截图。

在测试系统功能前插入了一些其它的数据,以更好地显示系统的功能。

6.3.1 管理员登陆

登录界面

管理员登陆

管理员信息查询

教师信息总查询

教师管理界面

添加教师信息

我们对刚添加的 T18 老师进行删除,删除后的结果如下:

删除后的教师信息结果

学生信息总查询

查询学生信息

添加学生信息

删除学生信息

课程信息查询

查询课程信息

添加课程信息

我们对 C20 课程进行删除

6.3.2 教师登录

教师登录

教师登陆后的首页

教师个人信息查询

教师查询学生信息(按学号)

教师查询学生信息(按课程编号)

教师查询学生信息(按班级)

教师任课信息查询

教师修改登录密码

6.3.3 教师成绩录入

在对学生成绩进行录入时,原本是按照课程号,学号,学期,成绩进行一个一个插入,这样做效率太低,经过改进后,可以对某个教师号,选定课程号,学期后,拉出修这个学期该门课的学生,然后只需对照着学生,输入相对应的成绩,完成录入即可,省去了原来需要输入课程号,学号,学期等大量重复无用的时间。

根据教师号、课程号、学期拉出相对应的选课学生信息图

对每个学生进行相应的成绩输入图

成绩输入后的查询结果图

各个课程平均成绩查询结果图

某一门课程的学生成绩排名查询结果图

6.3.4 学生登录

学生登陆

学生登陆首页

学生基本信息查询

学生修改登录密码

学生成绩查询

学生成绩查询

七、实验总结

7.1 遇到的问题和解决的办法

删除学生表的某个学号的学生时,系统提示与 Reports 中的 Sno 发生冲突,删除失败。分析之后,发现可以建立一个级联删除的触发器,先把 Reports 中 Sno 对应的元组删除,再将 Students 中 Sno 对应的元组删除,SQL 语句如下图:

在对学生信息进行插入时,出现类型转换的错误,经检查,发现是 VS 中对应的 testbox 和输入内容顺序不一致造成,将顺序调整一致后,就没有问题了。

7.2 系统设计的不足

对一些数据的约束处理考虑得不够完善,很多时候会忘记对某几个数据之间的约束限制,没有充分考虑到使用者输入的各种情况。

通过一个输入框可输入多种查询条件,来达到增加一个页面的重复利用率,但是实际使用时对用户来说有些不友好,一不小心就会出错,交互功能有待完善。

没有很好地考虑到实际的需求,所针对的问题都是基于数据量很小的情况,面对大量数据的时候,处理起来会显得力不从心。

如果有两个用户同时登录,会造成数据的读写不一致,造成数据污染,改程序未考虑这一因素。

7.3 进一步改进思路和体会

7.3.1 改进思路

  • 通过添加触发器来对用户输入的数据进行判断和处理,对于不满足要求的输入要及时对用户进行反馈

  • 美化交互界面,对交互界面进行合理的布局,让用户使用得更加舒服

  • 添加一个新的功能,能够完成对数据的批量选择和删除操作

  • 利用并发控制策略,通过排它锁和共享锁,实现对数据的完整性,一致性约束

7.3.2 体会

在数据库开发的整个过程中,前期的需求分析可谓相当重要,需要花大量的时间和精力进行分析与准备,好的需求分析往往可以对后面的开发过程起到事半功倍的效果,相反,如果需求分析不到位,会让后面的开发过程变得非常困难,最后落得吃力不讨好的结果,所以完整且准确的需求分析变得尤为重要。

在这次短学期数据库的系统实验中,完整地学习了数据库设计的全过程,改变了以前只是一个劲地写代码的观念,前期的需求分析,概念结构,逻辑结构,物理结构的设计能提高后期实施的效率。

通过短学期的动手操作,对于整个数据库的开发流程有了更深的了解与认识,也充分回顾了前面所学的知识,把各种各样的内容和知识串了起来,加深了对整个课程的认识,对今后的学习也有一定的启示和借鉴。

上传的附件 cloud_download 基于C#和Sql Server 2008实现的高校成绩管理系统.7z ( 19.28mb, 1次下载 )
error_outline 下载需要10点积分

发送私信

一个人幸运的前提,其实是ta有能力改变自己

12
文章数
24
评论数
最近文章
eject