数据库系统课程设计(高校成绩管理数据库系统的设计与实现)

Posted 阿阿阿扶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库系统课程设计(高校成绩管理数据库系统的设计与实现)相关的知识,希望对你有一定的参考价值。

目录

 

1、需求分析 1

1.1 数据需求描述 1

1.2 系统功能需求 3

1.3 其他性能需求 4

2、概念结构设计 4

2.1 局部E-R图 4

2.2 全局E-R图 5

2.3 优化E-R图 6

3、逻辑结构设计 6

3.1 关系模式设计 6

3.2 数据类型定义 6

3.3 关系模式的优化 8

4、物理结构设计 9

4.1 聚簇设计 9

4.2 索引设计 9

4.3 分区设计 10

5、数据库实施 10

5.1 基本表建立 10

5.2 视图的建立 17

5.3 索引的建立 22

5.4 触发器建立 23

5.5 建存储过程 26

6、应用系统开发与试运行 27

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

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

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

7、实验总结 42

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

7.2 系统设计的不足 47

7.3 进一步改进思路和体会 47

1.需求分析

开发平台:Microsoft Visual Studio 2013
开发环境:微软在Builder 2013开发者大会上发布了Visual Studio 2013预览版,并且发布其程序组件库.NET 4.5.1的预览版,该软件已于北京时间2013年11月13日23:00时正式发布。Visual Studio 2013 预览版以 Visual Studio 2012 和后续的Microsoft Visual Studio 更新中的进展为基础构建而成,为开发团队提供需要的解决方案,使其接纳这种转变并开发和交付利用下一波Windows 平台创新 (Windows 8.1) 的新式应用程序,同时在所有 Microsoft 平台上支持多种设备和服务。

1.1 数据需求描述 

分析系统的数据需求,用数据字典和数据流图描述系统的数据需求,一般要求有2级(初级和详细级)数据流图,并确定系统开发边界。

1.2 系统功能需求 

系统功能框架介绍,处理模块描述。

管理员

  1. 添加教师名单
  2. 查询教师名单
  3. 修改教师信息
  4. 删除教师信息
  5. 添加学生名单
  6. 查询学生名单
  7. 修改学生名单
  8. 统计生源地信息
  9. 修改管理员密码
  10. 重置教师密码
  11. 重置学生密码

学生

  1. 查询个人基本信息
  2. 查询个人成绩
  3. 查询班级课表
  4. 查询个人课表
  5. 修改个人密码
  6. 查询自己的总学分

教师

  1. 查询教师个人信息
  2. 查询个人任课信息
  3. 查询所任课程平均成绩
  4. 查询所任课程学生排名
  5. 提交所任课程的学生成绩
  6. 修改个人密码

1.3 其他性能需求

1.3 其他性能需求

(1)用户输入出错时,有错误提示。

(2)给管理员,教师,学生不同的权限,提高数据安全性;

(3)创建触发器,存储过程,防止数据不一致;

2、概念结构设计

2.1 局部E-R图

画出局部的E-R图,进一步进行解释说明。

2.2 全局E-R图

合并成全局的E-R图,5个数据类别之间存在6个关系。

2.3 优化E-R图

因为本次的E-R已经符合了要求,这里就不需要优化了。

3、逻辑结构设计

3.1 关系模式设计

教师teachers(教师编号,教师姓名,教师性别,教师年龄,教师职称,联系电话)

专业major(专业编号,专业名称)

班级class(班级编号,班级名称,专业编号)

学生students(学号,姓名,性别,年龄,地区,已修学分,班级编号)

课程course(课程编号,课程名称,课程学时,教师姓名,课程学期,考核方式,学分)

开设 class-course(课程编号,班级编号)

上课 teacher-class(教师编号,班级编号)

授课 teacher-course(教师编号,课程编号)

成绩报告 reports (学号,课程编号,学期,成绩,教师姓名)

管理员账号administer-account(管理员账号,管理员密码)

教师账号Teachers-account(教师账号,教师密码)

学生账号students-account(学生账号,学生密码)

3.2 数据类型定义

    

  1. 教师Teacher表

表1  Teacher表

数据项名

数据类型

长度

完整性约束

教师编号

char

10

主键

教师姓名

char

10

教师性别

char

5

教师年龄

int

职称

char

10

联系电话

char

20

  1. 专业Major表

表2  Major表

数据项名

数据类型

长度

完整性约束

专业编号

char

10

主键

专业名称

char

10

  1. 班级Class表

表3  class表

数据项名

数据类型

长度

完整性约束

班级编号

char

10

主键

班级名称

char

10

专业编号

char

10

外键

  1. 学生表Students表

表4  students表

数据项名

数据类型

长度

完整性约束

学号

char

12

主键

姓名

char

10

性别

char

5

年龄

int

生源所在地

char

20

已修学分

float

班级编号

char

10

外键

  1. 课程Course表

表5  courses表

数据项名

数据类型

长度

完整性约束

课程编号

char

10

主键

课程名称

char

10

教师姓名

char

10

课程学期

char

20

课程学时

int

>0

考核方式

char

5

学分

float

>0

  1. 开设 class-course表

表6  class-course表

数据项名

数据类型

长度

完整性约束

班级编号

char

10

主键

外键

课程编号

char

10

外键

  1. 上课 teacher-class表

表7  teacher-class表

数据项名

数据类型

长度

完整性约束

教师编号

char

10

主键

外键

班级编号

char

10

外键

  1. 授课 teacher-course表

表8  teacher-course表

数据项名

数据类型

长度

完整性约束

教师编号

char

10

主键

外键

课程编号

char

10

外键

  1. 成绩报告表reports表

表9  reports表

数据项名

数据类型

长度

完整性约束

学号

char

12

主键

外键

课程编号

char

10

外键

学期

char

10

成绩

int

教师姓名

char

10

  1. 教师账号

表10  Teacher-account表

数据项名

数据类型

长度

完整性约束

教师编号

char

10

主键

教师密码

char

10

  1. 管理员账号

表11  Admin-account表

数据项名

数据类型

长度

完整性约束

管理员编号

char

10

主键

管理员密码

char

10

  1. 学生账号

表12  student-account表

数据项名

数据类型

长度

完整性约束

学生编号

char

12

主键

学生密码

char

10

3.3 关系模式的优化

该关系模式已经满足规范化需求,这里不进行规范化处理。

4、物理结构设计

4.1 聚簇设计

   

教师Teacher(教师编号)

课程Course(课程编号)

学生Students(学生编号,班级编号)

班级Class(班级编号)

原因:这几张表都是实体表,同时聚簇中的属性都是主键或是外键,且被访问次数高,而其他表或者这些表上的其他属性被访问次数较低,没有考虑聚簇的必要。

原则:

1基本表中该属性访问次数较多

2基本表中某属性列重复率较高

3基本表中某属性列的值修改很少,或者增加和删除元组次数较少

4.2 索引设计

建立索引的一般规则:

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

所以我们建了这些索引:

  (1)

教师表Xum_Teachers18 索引:(教师编号 xm_Tno18)

create unique index Tea_Tno on Xum_Teachers18(xm_Tno18)

  (2)

课程表Xum_Courses18 索引:(课程编号xm_Cno18)

create unique index Cour_Cno on Xum_Courses18(xm_Cno18)

(3)

班级表 Xum_Class18 索引:(班级编号 xm_CLno18, 专业编号xm_Mno18)

create unique index Mno_CLno on Xum_Class18(xm_CLno18,xm_Mno18)

(4)

学生表Xum_Students18 索引:(学生学号xm_Sno18,班级编号xm_CLno18)

create unique index CLno_Sno on Xum_Students18(xm_Sno18,xm_CLno18)

(5)

成绩报告表Xum_Reports18 索引:(学生编号xm_Sno18 ,课程编号xm_Cno18)

create unique index Cno_Sno on Xum_Reports18(xm_Sno18,xm_Cno18)

(6)

专业表 xm_Cno18  索引:(专业编号xm_Mno18)

create unique index Majo_Mno on Xum_Majors18(xm_Mno18)

4.3 分区设计

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

1减少访问冲突,提高I/O并发性。多个事物并发访问同一磁盘时,会产生磁盘访问冲突而导致效率低下,如果事务访问数据均能分布于不同磁盘上,则I/O可并发执行,从而提高数据库访问速度。

2分散热点数据,均衡I/O负担。在数据库中数据访问的频率是不均匀的,那些经常被访问的数据成为热点数据,此类数据宜分散存在于不同的磁盘上,以均衡各个磁盘的负荷,充分发挥多磁盘的并行操作的优势。

3保证关键数据快速访问,缓解系统瓶颈。在数据库中有些数据如数据字典等的访问频率很高,为保证对它的访问不直接影响整个系统的效率,可以将其存放在某一固定磁盘上,以保证其快速访问。

实际例子有将关系和索引放在不同磁盘上,查询时两个磁盘同时运行提高物理I/O效率。

不过考虑到本次课题数据量有限,暂不考虑分区设计。

5、数据库实施

5.1 基本表建立

  1. (1)教师表建立 Xum_Teachers18

图10 建立教师表

create table Xum_Teachers18 (
xm_Tno18 char(10) primary key,
xm_Tname18 char(10),
xm_Tsex18 char(5),
xm_Tage18 int,
xm_Tpos18 char(10),
xm_Tpho18 char(20)

)

(2)专业表建立Xum_Majors18

create table Xum_Majors18(
xm_Mno18 char(10) primary key,
xm_Mname18 char(10)
)

(3)班级表建立Xum_Class18

create table Xum_Class18(

xm_Clno18 char(10) primary key,
xm_Clname char(10),
xm_Mno18 char(10)
constraint Major_Class foreign key(xm_Mno18) references Xum_Majors18
)

(4)学生表Xum_Students18

create table Xum_Students18(
xm_Sno18 char(12) primary key,
xm_Sname18 char(10),
xm_Ssex18 char(5),
xm_Sage18 int,
xm_Sorig18 char(20),
xm_Ssum18 float,
xm_Clno18 char(10)
constraint Class_Student foreign key(xm_Clno18) references Xum_Class18
)

 (5)课程表 Xum_Courses18


create table Xum_Courses18(
xm_Cno18 char(10) primary key,
xm_Cname18 char(10),
xm_Tname18 char(10),
xm_Cdate18 char(20),
xm_Cway18 char(5),
xm_Ccredit18 float check(xm_Ccredit18>0),
xm_Chour18 int check(xm_Chour18>0)

)

 (6)授课表 Xum_Tea_Cour18

create table Xum_Tea_Cour18(
xm_Tno18 char(10),
xm_Cno18 char(10),
primary key(xm_Tno18,xm_Cno18),
constraint teacher_course foreign key(xm_Tno18) references Xum_Teachers18,
constraint tea_cour foreign key(xm_Cno18) references Xum_Courses18

)

(7)班级上课表Xum_Class_Cour18


create table Xum_Class_Cour18(
xm_Clno18 char(10),
xm_Cno18 char(10),
primary key(xm_Clno18,xm_Cno18),
constraint class_course foreign key(xm_Clno18) references Xum_Class18,
constraint clas_cour foreign key(xm_Cno18) references Xum_Courses18

)

(8)教师任课表Xum_Teac_Class18


create table Xum_Teac_Class18(
xm_Tno18 char(10),
xm_Clno18 char(10),
primary key(xm_Tno18,xm_Clno18),
constraint tea_class foreign key(xm_Tno18) references Xum_Teachers18,
constraint teach_class foreign key(xm_Clno18) references Xum_Class18
)

(9)成绩表Xum_Reports18


create table Xum_Reports18(

xm_Cno18 char(10),
xm_Sno18 char(12),
xm_Score18 float,
xm_date char(10),
xm_Tname18 char(10),
primary key(xm_Cno18,xm_Sno18),
constraint cour foreign key(xm_Cno18) references Xum_Courses18,
constraint stude foreign key(xm_Sno18) references Xum_Students18

)

(10)管理员账号密码表 (11)学生账号密码表(12)教师账号密码表


create table Students_account18(
xm_Sno18 char(12) primary key,
xm_Skey18 char(10)

)

create table Teachers_account18(
xm_Tno18 char(12) primary key,
xm_Tkey18 char(10)

)
create table Admin_account18(
xm_Ano18 char(12) primary key,
xm_Akey18 char(10)

)

 (13)数据库表预览

5.2 视图的建立

(1)学生成绩

create view 学生成绩统计
as
(select Xum_Students18.xm_Sno18,Xum_Students18.xm_Sname18,
Xum_Courses18.xm_Cname18,Xum_Class18.xm_Clname,
Xum_Reports18.xm_Tname18,Xum_Courses18.xm_Ccredit18,
Xum_Courses18.xm_Cdate18,Xum_Reports18.xm_Score18

from Xum_Reports18,Xum_Students18,Xum_Courses18,Xum_Class18
where Xum_Students18.xm_Sno18=Xum_Reports18.xm_Sno18
and Xum_Reports18.xm_Cno18=Xum_Courses18.xm_Cno18
and Xum_Class18.xm_Clno18=Xum_Students18.xm_Clno18
)

(2)课程平均成绩


create view 每门平均成绩
as(
select xm_Cno18,avg(xm_Score18)平均分
from Xum_Reports18
group by xm_Cno18


)

(3)课程和学分统计

create view 课程和学分统计
as
(
select xm_Sno18,xm_Cname18,xm_Ccredit18
from 学生成绩统计
)

(4)教师课表


create view 教师课表
as(
select xm_Tno18,Xum_Teachers18.xm_Tname18,xm_Cno18,xm_Cname18,
xm_Ccredit18,xm_Chour18
from Xum_Teachers18,Xum_Courses18
where Xum_Teachers18.xm_Tname18=Xum_Courses18.xm_Tname18
)

(5)班级课表


create view 班级课表
as
(
select Xum_Class18.xm_Clno18,xm_Clname,Xum_Courses18.xm_Cno18,
xm_Cname18,xm_Cdate18,xm_Ccredit18,xm_Chour18
from Xum_Class18,Xum_Courses18,Xum_Class_Cour18
where Xum_Class18.xm_Clno18=Xum_Class_Cour18.xm_Clno18
and Xum_Class_Cour18.xm_Cno18=Xum_Courses18.xm_Cno18
)

(6)生源地人员统计


create  view 生源地人员统计
as
(select xm_Sorig18,count(xm_Sno18)数量
from Xum_Students18
group by xm_Sorig18
)

(7)教师课程成绩


create view 教师课程成绩
as
(
select xm_Tno18,Xum_Teachers18.xm_Tname18,xm_Cno18,xm_Sno18,xm_Score18
from Xum_Teachers18,Xum_Reports18
where Xum_Teachers18.xm_Tname18=Xum_Reports18.xm_Tname18


)

(8)教师与学生成绩

 (9)视图预览

 5.3 索引的建立

create unique index Tea_Tno on Xum_Teachers18(xm_Tno18)
create unique index Cour_Cno on Xum_Courses18(xm_Cno18)
create unique index Mno_CLno on Xum_Class18(xm_CLno18,xm_Mno18)
create unique index Majo_Mno on Xum_Majors18(xm_Mno18)
create unique index CLno_Sno on Xum_Students18(xm_Sno18,xm_CLno18)
create unique index Cno_Sno on Xum_Reports18(xm_Sno18,xm_Cno18)

 5.4 触发器建立 

(1)教师删除(删除一个教师时,与教师相关的记录全都删除)

    这里漏写了删除教师账号信息 如果运行出错了 可以参考“学生删除“代码 改写触发器

create trigger 教师删除18 
on Xum_Teachers18
for delete 
as 
  delete xm_Tno18
  where Xum_Tea_Cour18.xm_Tno18=(select xm_Tno18 from deleted)
  and Xum_Teac_Class18.xm_Tno18=(select  xm_Tno18 from deleted)

(2)学生删除(删除一个学生时,与该学生相关的记录全都删除

create trigger 学生删除18
on Xum_Students18
for delete 
as
 begin
   delete from Xum_Reports18
  where Xum_Reports18.xm_Sno18 in (select xm_Sno18 from deleted)
  delete from Students_account18
  where Students_account18.xm_Sno18 in (select  xm_Sno18 from deleted)
  end

 (3)学生统计(提交成绩时,将》=60的成绩记为合格,同时加上该课程学分)


create trigger 学分统计18 on Xum_Reports18
for insert
as
 update Xum_Students18
 set xm_Ssum18=(
 select sum(xm_Ccredit18)
 from Xum_Courses18
 where xm_Cno18 in
 (
 select xm_Cno18
 from Xum_Reports18
 where xm_Score18>=60 
 and Xum_Reports18.xm_Sno18 in
 (select xm_Sno18
 from inserted)

 )
 )
 where Xum_Students18.xm_Sno18 in
 (
 select xm_Sno18
 from inserted
 )

(4)教师更新


create trigger 教师更新
on Xum_Teachers18
for update
as 
   if update(xm_Tno18)
   begin 
   update Xum_Tea_Cour18
   set xm_Tno18=i.xm_Tno18
   from deleted d,inserted i ,Xum_Tea_Cour18 t
   where t.xm_Tno18=d.xm_Tno18
   end
   
   begin
   update Xum_Teac_Class18
   set xm_Tno18=i.xm_Tno18
   from deleted d,inserted i,Xum_Teac_Class18 c
   where c.xm_Tno18=d.xm_Tno18
   end

(5)学生添加 自动注册新用户 默认密码12345


 create trigger 插入创建学生新用户18
  on Xum_Students18
  for insert
  as
   declare @sno char(10)
   begin
       select @sno=xm_Sno18 from inserted
	   insert into Students_account18
	   values(@sno,'12345')


  end

 (6)教师添加 自动注册新用户 默认密码12345

 create trigger 插入创建教师新用户18
  on Xum_Teachers18
  for insert
  as
   declare @tno char(10)
   begin
       select @tno=xm_Tno18 from inserted
	   insert into Teachers_account18
	   values(@tno,'12345')


  end

5.5 建存储过程

(1)插入新学生


create procedure pro_插入新学生
@sno char(12),
@sname char(10),
@ssex char(5),
@sage int,
@sorig char(20),
@ssum float,
@clno char(10)
as 
insert Xum_Students18(xm_Sno18,xm_Sname18,xm_Ssex18,xm_Sage18
,xm_Sorig18,xm_Ssum18,xm_Clno18)
values(@sno,@sname,@ssex,@sage,@sorig,@ssum,@clno)
select *
from Xum_Students18
go

(2)自动算学分


create procedure pro_输入成绩自动生成学分
@sno char(12),
@cno char(10),
@cname char(10),
@cdate char(10),
@score int,
@tname char(10),
@credit float

as
begin  
   insert into pro_选修
   values(@sno,@cno,@score)
   update Xum_Students18
   set xm_Ssum18=xm_Ssum18+@credit
   where Xum_Students18.xm_Sno18=@sno
end

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

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

     Visual studio 2013 + SQL server 2014

     Win10系统

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;

namespace WindowsFormsApplication1

    class sqlConnect
    
        public SqlConnection conn = null;
        public sqlConnect()
        
            if (conn == null)
            
                string connectString = "Data Source =LAPTOP-FPCD1SM8\\\\SQL2014; database =XumMIS18; " +
            "Integrated Security = True";
                conn = new SqlConnection(connectString);
                if (conn.State == ConnectionState.Closed) conn.Open();

            
        
        public void closeConnect()
        
            if (conn.State == ConnectionState.Closed) conn.Close();
        
        public DataSet Getds(string sql)
        
            if (conn.State == ConnectionState.Closed) conn.Open();
            DataSet ds = new DataSet();
            SqlDataAdapter da = new SqlDataAdapter(sql, conn);
            da.Fill(ds);
            conn.Close();

            return ds;
        

        public int OperateData(string sql)
        
            if (conn.State == ConnectionState.Closed) conn.Open();
            SqlCommand sqlcom = new SqlCommand();
            sqlcom.CommandText = sql;
            sqlcom.CommandType = CommandType.Text;
            sqlcom.Connection = conn;
            int x = sqlcom.ExecuteNonQuery();
            conn.Close();
            return x;

        
        public DataSet BindDataGridView(DataGridView dgv, string sql)
        
            if (conn.State == ConnectionState.Closed) conn.Open();
            SqlDataAdapter da = new SqlDataAdapter(sql, conn);
            DataSet ds = new DataSet();
            da.Fill(ds);
            dgv.DataSource = ds.Tables[0];
            return ds;


        
    

6.3 系统各功能设计和运行界

以上是关于数据库系统课程设计(高校成绩管理数据库系统的设计与实现)的主要内容,如果未能解决你的问题,请参考以下文章

教务处课程管理系统的设计与实现 文献收集

数据库系统原理之数据库应用设计与开发实例

高校学生评奖评优管理系统的设计与实现

mysql数据库学生成绩管理系统

数据库课程设计 java实现高校学生选课管理系统论文+源程序+数据库

课程设计题目及可行性研究报告的任务分配

(c)2006-2024 SYSTEM All Rights Reserved IT常识