学籍管理系统实验报告终版
位置: 首页 >报告 > 述职报告 > 文章内容

学籍管理系统实验报告终版

2020-08-21 07:22:12 投稿作者: 点击:

  jxjk

  数据库课程设计

 ——学籍管理系统

  2016-9-6 安徽大学

 计算机科学与技术 1 班

 陈斌

 E11314079

  目录 一、 实验目的及要求 ....................................................................... 2 1. 实验目的 ...................................................................................... 2 2. 实验要求 ...................................................................................... 2 二、 实验环境 .................................................................................. 2 三、 实验内容与步骤 ....................................................................... 3 1. 系统需求分析 .............................................................................. 3 2. 概念结构设计 .............................................................................. 6 3. 逻辑结构设计 .............................................................................. 9 4. 数据库与应用系统的实施和维护 ............................................. 11 四、 总结 ....................................................................................... 28

  一、 目的及要求 1. 实验目的 (1) 通过本次课程设计,熟练掌握一种开发语言(如 C#)和一种数据库系统软件(如 SQL server 2014)的使用。

 (2) 加深对软件工程的理解,训练编写程序的良好习惯。包括:认真编写需求分析文档、做好系统功能和数据库设计、学会自己进行程序的算法、数据结构设计。

 (3) 培养良好的程序设计风格(模块划分、接口设计、程序界面、应用系统设计)和习惯(程序备份、版本更新与控制),提高软件测试、调试的能力与技巧。

 (4) 通过本次课程设计,应该达到具有独立完成小型应用系统设计的能力,具备编写较为规范的软件设计文档的能力。

 2. 实验要求 设计本系统模拟学校学籍管理内容,包括学生入学登记、学生选课、考试成绩登记、补考处理及教师教学质量分析统计等,简化的系统需要管理的情况如下:

 (1) 可随时查询出不同系及各系教师与各系学生情况,系、教师与学生各反映如下情况:

 系:系号、系名、系负责人、专业数等 教师:工号、姓名、性别、职称、工龄、出生年月、基本工资等 学生:学号、姓名、性别、年龄等 (2) 为简单起见教师与学生区分系别,而课程不分系,课程需反映如下信息:课程代号、课程名、课程数、必修课、学分。

 (3) 学生入学时新生需录入登记,登记后即可选课学习课程(一学期约20学分)。

 (4) 一门课只由一位教师上,一位教师可上多门课,满 30 人才开课。

 (5) 学生选每门课有个成绩,若成绩不及格则补考后还需记录补考成绩。

 二、 实验环境 本系统开发平台及运行环境如下:

 系统开发平台:Microsoft Visual Studio 2015 系统开发语言:C# 数据库管理软件:SQL Server 2014 运行平台:Windows10 教育版 运行环境:Microsoft.NET Framework SDK v4.5

  三、 实验内容与步骤 1. 系统需求分析 (1) 信息要求:指用户需要从数据库中获得信息的内容与性质。数据库中需要存储哪些数据。

 本系统是针对学生学籍管理,主要涉及教师信息、学生选修课程信息、学校开设的课程信息、学校的院系信息、教师开设课程信息、学生选修课程成绩信息等多种数据信息。

 用户名和密码信息:

 字段名 数据类型 长度 主键否 描述 Username varchar 16 是 用户名 Password varchar 16

 密码 Userclass char 1

 用户类别

  学生信息:

 字段名 数据类型 长度 主键否 描述 Sid varchar 16 是 学号 Sname varchar 16

 姓名 Ssex char 1

 性别 Sage int

  年龄 Sdep varchar 16

 所属系别 Stel char 11

 电话 SIDcard char 18

 身份证号

  教师信息:

 字段名 数据类型 长度 主键否 描述 Tid varchar 16 是 工号 Tname varchar 16

 姓名 Tsex char 1

 性别 Tprotitle varchar 16

 职称 Tworktime int

  工龄 Tbirth date

  出生年月 Tsal float

  工资 Tdep varchar 16

 所属系别 Ttel char 11

 电话 TIDcard char 18

 身份证号

  院系信息:

 字段名 数据类型 长度 主键否 描述 Did varchar 16 是 系号 Dname varchar 64

 系名 Dchief varchar 16

 负责人 Dmajorcount int

  专业数 Darea varchar 64

 地址

  课程信息:

 字段名 数据类型 长度 主键否 描述 Cid varchar 16 是 课程代号 Cname varchar 32

 课程名 Ccount int

  课程数 Ccompulsory char 1

 是否必修 Ccredit float

  学分 Tid varchar 16

 授课教师

  学生选课信息:

 字段名 数据类型 长度 主键否 描述 Sid varchar 16 是 学号 Cid varchar 16 课程代号 Fscore int

  正考成绩 Sscore int

  补考成绩

  课程选修人数:

 字段名 数据类型 长度 主键否 描述 Cid varchar 16 是 课程代号 Numbers int

  选修人数

  (2) 处理要求:用户需要完成什么处理功能,对处理的响应时间有什么要求(给出功能模块图)。

 学籍管理系统主要满足三类用户的要求,这三类用户分别是教务处的系统管理员、教师和学生。系统管理员能对学生信息、教师信息、课程信息等进行有效的管理和维护,包括增加、删除、修改等基本的维护功能和灵活的查询功能;教师和学生能够对个人基本信息、授课、选课所涉及的有关信息进行查询、更新等操作。具体的需求分析如下:

 1) 系统管理员:

 ① 维护学生的个人基本信息 ② 维护教师的个人基本信息

  ③ 维护课程信息 ④ 新生入学登记 2) 学生用户:

 ① 查询和修改个人信息 ② 进行选课操作 ③ 查询当前所选课程信息和以前所选课程的成绩信息 3) 教师用户:

 ① 查询和修改个人信息 ② 课程结束后,教师对所教授的学生进行成绩登记 ③ 查询教学安排 功能模块图如下所示:

 学籍管理系统学生操作模块教师操作模块用户登录模块学生登录教师登录管理员登录管理员操作模块查询个人信息修改个人信息选课查询课程成绩查询教学安排维护学生信息维护课程信息维护教师信息查询个人信息修改个人信息成绩登记新生入学登记

 图 图 1 功能模块图

 (3) 安全性与完整性要求。

 数据库的安全性是指保护数据库,防止不合法的使用所造成的数据泄露和破坏。数据库系统中保证数据安全性的主要措施是进行存取控制,即规定不同用户对于不同数据对象所允许执行的操作,并控制各用户只能存取他有权(操作权力)存取的数据。存取控制机制分为自主存取控制 (DAC)与强制存取控制(MAC),主要包括两部分:

  一是定义用户权限,并将用户权限登记到数据字典中; 二是合法权限检查。

 数据库完整性指数据的(逻辑而非物理)正确性和相容性。为了防止数据库中存在不合语义的数据,防止错误数据的输入和输出。数据库完整性技术包括完整性约束条件与完整性检查两部分。完整性约束条件指为维护数据库的完整性,DBMS 提供加在数据库数据之上的语义约束条件,作为数据库模式的一部分存入数据库。完整性检查意味检查数据库是否满足完整性约束条件的机制。完整性约束条件作用的对象可以是关系、元组、列三种。其中

  列约束主要是列的类型、取值范围、精度、排序等的约束条件。元组的约束是元组中各个字段间的联系的约束。关系的约束是若干元组间、关系集合上以及关系之间的联系的约束。完整性约束条件涉及这三类对象,其状态可以是静态的,也可以是动态的。

 完整性约束条件一般分为实体完整性、参考完整性 自定义完整性。定义实体完整性约束条件要考虑修改关系中主码的问题;定义参考完整性约束条件要考虑外码能否接受空值问题、在被参照关系中删除元组的问题(级联删除或受限删除)、在参照关系中插入元组时的问题。

 2. 概念结构设计 根据分析,学籍管理系统包含学生、教师、院系及课程 4 个实体,各个实体的局部 E-R 图如下所示,其中学号是学生实体的主码,工号是教师实体的主码,系号是院系实体的主码,课程号是课程实体的主码,负责人是院系实体的外码(参照的是教师实体的工号)。

 学生学号 姓名 性别 年龄 电话身份证号

 图 图 2 学生实体及属性

  教师工号 姓名 性别 职称 工龄出生年月工资 电话身份证号

 图 图 3 教师实体及属性

  院系系号 系名 负责人 专业数 地址

 图 图 4 院系实体及属性

 课程课程代号课程名 课程数是否必修学分 图 图 5 课程实体及属性

 (1) 逐一设计分 ER 图,合并分 ER 图,生成基本 ER 图。

 根据需求分析的结果可以看到,在学籍管理系统中,一个学生可以选择多门课程,一个教师可以教授多门课程,一门课程可以被多个学生选修,只能由一位教师教授。由此可知,学生、教师、课程三者之间通过选课进行联系。教师和学生区分系别,因此学生与院系,教师与院系均存在联系。

 由以上分析可得各个局部的 E-R 图,如下所示(忽略各个实体的属性):

 学生 院系 学习 n 1

 图 图 6 学生与院系之间的 E-R 图 教师 院系 工作 1 m

 图 图 7 教师与院系之间的 E-R 图

  学生课程选修nm成绩

  学生教师教授nm

 图 图 8 学生与课程之间的 E-R 图

  图 图 9 学生与教师之间的 E-R 图

 教师 课程 讲授 1 m

 图 图 10 教师与课程之间的 E-R 图 (2) 若在合并中存在属性冲突、命名冲突以及结构冲突,给出解决办法,若存在不必要的冗余,则消除并给出设计方法。

 合并分 E-R 图并不是单纯地将各个分 E-R 图画在一起,而是必须消除各个分E-R 图中的不一致,以形成一个能为全系统中所有用户共同理解和接受的统一的概念模型。各个分 E-R 图之间的冲突包括 3 种:属性冲突、命名冲突以及结构冲突。

 经过分析,得到学生、教师、院系和课程 3 者之间可以通过选课这个联系进行关联。因此,合并各个分 E-R 图,生成基本 E-R 图,如下所示:

  教师课程 学生 选修院系讲授工作学习n 11mn mn1工号姓名性别 职称 工龄出生年月工资 电话身份证号系号系名专业数地址学号 姓名 性别 年龄电话身份证号课程代号课程名课程数是否必修学分正考成绩负责1 1补考成绩

 图 图 11 学籍管理系统基本 E-R 图

 (3) 基本 ER 图中要求标明主码、外码、联系类型。

 基本 E-R 图中,各实体的主码用下划线加粗显示,外码倾斜加粗表示,联系类型表明于连接线上。

 3. 逻辑结构设计 (1) 给出由 ER 得到的关系模型,并注明转换过程中应用的规则。

 E-R 图向关系数据模型转换的 基本规则如下:

 1) 一个实体转换为一个关系模式,实体的属性就是关系的属性,实体的键就是关系的键; 2) 一个联系转化为一个关系模式,与该联系相连的各个实体的键以及联系的属性为该关系的属性,该关系的键分为 3 种情况:

 ① 1:1 联系:任一相连实体的键都可以作为该关系的主键。

 ② 1:n 联系:n 端(多端)实体的键作为该关系的主键。

 ③ m:n 联系:各端实体的键的组合为该关系的主键。

 其中,1:1 联系可以和联系的任意一端实体的关系模式合并,将联系的属性和另一端关系模式的键加入该关系模式即可;1:n 联系则需要和多端的关系模式合并,在多端关系模式中加入联系的属性和 1 端关系模式的键即可;m:n 联系不能与实体合并,必须转换为单独的关系模式。

 根据 E-R 图向关系数据模型转换的相关规则,将图 11 所示的 E-R 图转换为关系数据模型,得到学籍管理系统的关系模式如下:

 教师( 工号, 系号 ,姓名,性别,职称,工龄,出生年月,工资,电话,身份证),应用规则 2)- ② 1:n 联系。

 学生( 学号, 系号 ,姓名,性别,年龄,电话,身份证),应用规则 2)- ② 1:n联系。

 院系( 系号, 负责人工号 ,系名,专业数,地址),应用规则 2)- ① 1:1 联系。

 课程( 课程代号, 授课教师工号 ,课程名,课程数,是否必修,学分),应用规则 2)- ② 1:n 联系。

 选修( 学号,课程号,正考成绩,补考成绩),应用规则 2)- ③ m:n 联系。

 (2) 数据模型的优化。

 数据库的逻辑设计的结果不是唯一的。为了进一步提高数据库应用系统的性能,还应该根据应用需要适当地修改、调整数据模型的结构,这就是数据模型的优化。关系数据模型的优化通常以规范化理论为指导。

 (3) 确定数据依赖。

 分别写出每个关系内部属性的以及不同关系模式属性间的数据依赖。根据需求分析可知:

 1. 教师关系模式的数据依赖:{工号->系号,工号->姓名,工号->性别,工号->职称,工号->工龄,工号->出生年月,工号->工资,工号->电话,工号->身份证}; 2. 学生关系模式的数据依赖:{学号->系号,学号->姓名,学号->性别,学号->年龄,学号->电话,学号->身份证}; 3. 院系关系模式的数据依赖:{系号->负责人工号,系号->系名,系号->专业数,系号->地址}; 4. 课程关系模式的数据依赖:{课程代号->授课教师工号,课程代号->课程名,课程代号->课程数,课程代号->是否必修,课程代号->学分}; 5. 选修关系模式的数据依赖:{(学号,课程号)->正考成绩,(学号,课程号)->补考成绩}; (4) 对各个关系模式之间的数据依赖进行极小化处理,消除冗余的联系。

 采用分析方法,根据数据项之间逻辑关系的说明,已经消除了各个关系模式之间的数据冗余联系。

 (5) 按照数据依赖的理论确定个关系模式分别属于第几范式。

 根据各个范式的定义:

 1) 教师关系模式属于 BCNF,因为该关系模式的码是工号,且每一个决定因素都包含码,所以∈BCNF; 2) 学生关系模式属于 BCNF,因为该关系模式的码是学号,且每一个决定因素都包含码,所以∈BCNF; 3) 院系关系模式属于 BCNF,因为该关系模式的码是系号,且每一个决定因素都包含码,所以∈BCNF; 4) 课程关系模式属于 BCNF,因为该关系模式的码是课程代号,且每一个决定因素都包含码,所以∈BCNF; 5) 选修关系模式属于 BCNF,因为该关系模式的码是(学号,课程号),且每一个决定因素都包含码,所以∈BCNF;

  (6) 用户子模式设计。

 将概念模型转换为全局逻辑模型后,还应该根据局部应用需求,结合具体DBMS 的特点设,计用户的外模式。

 学生查看课程信息,需要知道授课教师的姓名,建立视图:

 选修课程(课程号,课程名,课程数,是否必修,学分,授课教师姓名); 学生查看课程成绩,建立相应视图:

 课程成绩(课程号,课程名,学分,是否必修,正考成绩,补考成绩); 教师录入正考成绩,建立相应视图:

 正考成绩录入(学号,学生姓名,正考成绩); 教师录入补考成绩,建立相应视图:

 补考成绩录入(学号,学生姓名,补考成绩); 教师查看教学安排,建立相应视图:

 教学安排(课程号,课程名,课程数,是否必修,学分,已选人数); 教师查看选课名单,建立相应视图:

 选课名单(课程号,课程名,课程数,是否必修,学分,授课教师姓名,学号,学生姓名,性别,院系); (7) 对不同级别用户定义不同的视图保证系统安全性。

 学生只能查看个人基本信息,和个人选课及课程成绩信息;教师只能查看个人基本信息,和自己的教学安排信息,只能对选自己教授课程的学生进行成绩录入;管理员可以查询所有学生的信息、所有教师的信息、院系信息及课程信息。

 4. 数据库与应用系统的实施和维护 (1) 应用程序的编码和调试。

 (2) 给出截图(标明图号)简单阐述该模块的基本功能。

 给出该模块的设计思路,针对难点部分进行详细地阐述。

 首先是登录模块:

  输入用户名和密码,选择登录用户,点击登录。链接数据库,检查数据库中是否存在该用户,以及密码是否正确,如果错误,提示用户名或密码错误,否则进入相应的用户界面。

 相关数据库查询语句:

 string sql = string. Format ("select count(*) from Users where Username="{0}" and Password="{1}" and Userclass="{2}"", name , pwd, type); 管理员模块:

 登录管理员账号,进入管理员界面,管理员首先向数据库中添加相应的数据信息。

  院系信息管理:

 点击院系信息管理,可以进行添加院系信息操作。可以自动导入文件,也可以手动添加相关信息。以导入文件为例:

 点击导入文件按钮,选择相应文件,点击打开。如果格式不正确,则给出相应提示,否则导入相应信息,点击提交,将数据存入数据库中。

  同理,学生信息、教师信息、课程信息均可按此方法导入数据库中。

 导入数据库的相关 Sql 语句(以院系信息为例):首先查找数据库中是否已存在即将导入的系号,如果有则跳过,否则进行插入操作。

 sql = string. Format ("select * from Department where Did="{0}"", dataGridView1. Rows [i]. Cells [0]. Value . ToString ()); sql1 = string. Format ("insert into Department values("{0}","{1}","{2}","{3}","{4}")",

  dataGridView1. Rows [i]. Cells [0]. Value . ToString (), dataGridView1. Rows [i]. Cells [1]. Value . ToString (), dataGridView1. Rows [i]. Cells [2]. Value . ToString (), dataGridView1. Rows [i]. Cells [3]. Value . ToString (), dataGridView1. Rows [i]. Cells [4]. Value . ToString ());

 此外,管理员可以查询相关信息。点击信息查询,会弹出相关子菜单,可以查询相应的信息。

 相应查询 Sql 语句为:

 string sql = string. Format ("select Did,Dname,Tname,Tid,Dmajorcount,Darea from Department,Teacher where Dchief=Tid"); string sql = string. Format ("select Tid,Tname,Tsex,Tprotitle,Tworktime,Tbirth,Tsal,Dname, Ttel,TIDcard from Teacher,Department where Tdep=Did"); string sql = string. Format ("select Sid,Sname,Ssex,Sage,Dname,Stel,SIDcard from Student,Department where Sdep=Did");

 在导入学生信息和教师信息时,会同时向 User 表(即登录账号信息表)中插入用户名和密码,以及用户类型,默认初始密码和用户名相同。

 string sql2 = string. Format ("insert into Users values("{0}","{1}","{2}")", dataGridView1. Rows [i]. Cells [0]. Value . ToString (), dataGridView1. Rows [i]. Cells [0]. Value . ToString (), type - 1);

  学生模块:

 输入学号和密码,登录系统,进入学生操作界面:

 点击个人信息查询可以查询个人基本信息:

 查询语句为:

 sql = string. Format ("select * from Student where Sid="{0}"", sid);

  但查询到的是院系编号,为了避免表的连接操作,先查询到所属院系编号,然后根据院系编号查询系名:

 sql = string. Format ("select Dname from Department where Did="{0}"", label12. Text ); label12. Text 存储了之前查询到的系编号。

 点击个人信息修改可修改手机号码(其他基本信息默认不可自己修改):

  手机号修改成功后点击个人信息查询,可以发现已修改成功:

  修改 Sql 语句为:

 string sql = string. Format ("update Student set Stel="{0}" where Sid="{1}"", textBox1. Text . ToString (), sid); textBox1. Text 是修改后的手机号 ,Sid 是该学生的学号。

  选课模块:

 点击选课菜单,再点击导入所有课程,此时系统会查询数据库,将数据库中课程信息显示出来,每一门课程后面都有一个选课按钮,点击按钮即可选课:

  再次点击该选课按钮后会提示已选过改门课程:

 导入所有课程的 Sql 语句为:

 string sql = "select Cid,Cname,Ccount,Ccompulsory,Ccredit,Tname,Teacher.Tid from Course,Teacher where Course.Tid=Teacher.Tid"; 选课操作的 Sql 语句为:

 string sql = string. Format ("insert into ChooseCourse values("{0}","{1}",null,null)", sid, dataGridView1. Rows [e. RowIndex ]. Cells [0]. Value . ToString ()); 选课表中存放了学生的学号,和该课程的课程号,以及正考成绩(初始为 null)和补考成绩(初始为 null)。

 此外,如果改门课程第一次被选,则选课人数置为 1,否则选课人数+1,相关 Sql 语句为:

 string sql2 = string. Format ("insert into CStunumber values("{0}",{1})", dataGridView1. Rows [e. RowIndex ]. Cells [0]. Value . ToString (), 1); string sql3 = string. Format ("update CStunumber set Numbers=Numbers+1 where Cid="{0}"", dataGridView1. Rows [e. RowIndex ]. Cells [0]. Value . ToString ());

  点击成绩查询,老师未登记成绩前显示为空:

 成绩查询 Sql 语句:

 string sql = string. Format ("select Course.Cid,Cname,Ccredit,Ccompulsory,Fscore,Sscore from ChooseCourse,Course where ChooseCourse.Cid=Course.Cid and Sid="{0}"", sid);

  教师模块:

  输入教师工号和密码,点击登录即可进入教师界面:

 教师个人信息查询以及个人信息修改和学生类似,故不赘述。

  教师成绩录入:

 点击成绩录入,首先进行正考成绩录入。在这之前,系统先查询数据库,查询该教师授课信息,该教师只能录入所授课程的成绩:

  查询该教师所授课程的 Sql 语句为:

 string sql = string. Format ("select Cname,Cid from Course where Tid="{0}"", tid);

 以 C 语言为例:

 选择 C 语言后,会显示选修 C 语言课程的学生信息,然后录入该学生的成绩,点击提交。

  查询选修该课程的学生信息及首次成绩的 Sql 语句为:

 sql = string. Format ("select ChooseCourse.Sid,Sname,Fscore from ChooseCourse,Student where ChooseCourse.Sid=Student.Sid and Cid="{0}"", cid);

  接着录入补考成绩:

 只有第一次成绩小于 60 分的学生才需要录入补考成绩,其 Sql 语句为:

 sql = string. Format ("select ChooseCourse.Sid,Sname,Sscore from ChooseCourse,Student where ChooseCourse.Sid=Student.Sid and Fscore<60 and Cid="{0}"", cid);

  教学安排查询:

 教师可以查询自己所授课程的基本信息及选修该课程的学生信息(即名单):

  点击选课名单可显示名单信息:

 教师录完成绩后再次登录学生账号即可查询到成绩:

  四、 总结 通过这次课程设计,我对数据库的编程语言有了深刻的了解,对 SQL 语言的简洁性和高效性有了自己进一步的体会,同时对数据库的一些设计模式也有了一个大致的认识与了解。

 在整个程序的设计过程中,对软件编程的流程,包括需求分析、概要设计、详细设计等步骤又有了一个新的认识,尤其是需求分析的好坏在整个程序的设计中有着举足轻重的作用。需求分析没有做好,后面的步骤很容易受到负面的影响。

 此外,关于学籍管理系统:

 一、看似简单,其实不然

 一开始看题目要求只有几个模块觉得挺简单,但当真真正正地去把每一个模块完成时,很多意想不到的情况发生了。有时候会为了一个操作不能调试成功而耗费大量的时间,还需要查阅各种资料,好在最后成功解决了遇到的问题。

 二、冷静沉着、兢兢业业

 编程是一个很繁琐的过程,要考虑到很多错误转移情况,在这期间会有很多以前不曾想过的问题出现,次数多了,不免会有觉得做不下去的感觉。但是我从中发现,只要一步一步调试、静下心来看待问题,再复杂再微小的问题都会迎刃而解,当一个程序被调试出来时,那时的快乐相比与任何困难都值得的。

猜你喜欢
推荐图文
毕业设计
  • 办公表格
    办公表格

    打开文本图片集摘要:换流变压器是直流输电工程中的核心设备之一,...

  • 谈判技巧
    谈判技巧

    摘要:随着社会经济和科技的迅猛发展,非物质文化遗产保护面临着严...