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

2022-09-13 10:42:18 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

目录

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 建立教师表

代码语言:javascript复制
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

代码语言:javascript复制
create table Xum_Majors18(
xm_Mno18 char(10) primary key,
xm_Mname18 char(10)
)

(3)班级表建立Xum_Class18

代码语言:javascript复制
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

代码语言:javascript复制
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

代码语言:javascript复制
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

代码语言:javascript复制
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

代码语言:javascript复制
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

代码语言:javascript复制
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

代码语言:javascript复制
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)教师账号密码表

代码语言:javascript复制
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)学生成绩

代码语言:javascript复制
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)课程平均成绩

代码语言:javascript复制
create view 每门平均成绩
as(
select xm_Cno18,avg(xm_Score18)平均分
from Xum_Reports18
group by xm_Cno18


)

(3)课程和学分统计

代码语言:javascript复制
create view 课程和学分统计
as
(
select xm_Sno18,xm_Cname18,xm_Ccredit18
from 学生成绩统计
)

(4)教师课表

代码语言:javascript复制
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)班级课表

代码语言:javascript复制
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)生源地人员统计

代码语言:javascript复制
create  view 生源地人员统计
as
(select xm_Sorig18,count(xm_Sno18)数量
from Xum_Students18
group by xm_Sorig18
)

(7)教师课程成绩

代码语言:javascript复制
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 索引的建立

代码语言:javascript复制
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)教师删除(删除一个教师时,与教师相关的记录全都删除)

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

代码语言:javascript复制
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)学生删除(删除一个学生时,与该学生相关的记录全都删除

代码语言:javascript复制
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的成绩记为合格,同时加上该课程学分)

代码语言:javascript复制
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)教师更新

代码语言:javascript复制
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

代码语言:javascript复制
 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

代码语言:javascript复制
 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)插入新学生

代码语言:javascript复制
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)自动算学分

代码语言:javascript复制
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 前台界面与后台数据库连接说明,代码实现。

代码语言:javascript复制
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 系统各功能设计和运行界面截图。

(1)登录界面如图所示

①登入异常

(输入的密码、账号错误,提示框报错)

图43 账号或密码错误

②输入不完整

③验证成功

(2)进入学生界面

①个人信息查询

②成绩查询,选择学年查询

③班级课表查询

④学生课表和学分查询

⑤修改密码

输入为空

原密码输入错误(原密码为123456)

两次新密码验证不通过

修改成功

(3)教师界面

①教师个人信息查询

②教师任课查询

③所任课程平均成绩

④查询选择该课程学生的分数排名(分数按降序)

⑤教师提交学生成绩 添加成绩(课程里只有这个老师教的课)

确定课程出现选择该课程学生的信息

删除信息

修改成绩(只能修改成绩,只有最后一行可编辑,将第二位同学 99改为98)

⑥修改密码和学生界面类似

(4)管理员界面

①教师管理

实现插入编号为T10的教师信息,同时查询编号为T10老师的信息

插入的教室信息(T10,舒克,男,46,教授,3765874563)查询T10老师的信息

教师删除(删除为T10教师的信息)

修改T09教师的年龄(36–>45)

②学生界面

可以实现学生信息的插入、删除、修改以及查询和教师界面类似,这里不做过大介绍

③管理员生源统计

④管理员修改密码与学生老师的相同

⑤管理员重置教师、学生密码

为防止有教师、学生忘记密码,这里提供密码重置功能。

7、实验总结

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

(1)因为从来没有写过C#代码,刚开始的时候,对这门语言非常陌生,不知道从何下,所以,我的界面模块都是按照书本后面的实例代码写的,写的时候其实心里还是非常模糊,不知道怎么实现代码和数据库的嵌入,花了很多时间在探索上。但是C#是一门非常适合做界面的语言,它继承了C语言和java语言的优点,同时界面上控件的安放十分简单上手。

(2)在系统需求分析完成以后,根据用户需求设计概念结构的时候遇到了数据冗余等多种问题,经过慢慢的分解关系最终得到了相对来说还比较完善的概念结构,通过ER图表示出来。

(3)设计数据库的时候,原本是没有想到触发器和存储过程的设计,但是当界面设计完成的差不多,要初步测试界面功能时,才发现数据库的设计存在很多缺陷,在实现插入、删除时,多张表之间存在信息不对称问题,例如教师或学生删除后,没有将其相关记录删除,也没有将其账号注销,更新信息也同样存在这样的问题,因此,测试时出现了很多异常情况,不过后来添加了触发器,大抵上解决了这些问题。

(4)SQL语句经常出错。因为是写在代码里面,查询语句表现出来就是一串字符串,在SQL SEVER写查询语句时,会自动检查拼写、逻辑错误,直接在代码里面写SQL语句非常容易出错,导致程序的中端。因为本质上都是对数据库的操作,我认为可以先在SQL SEVER中写好语句,并且验证其的正确性之后,再写入C# 代码中,这样会大大降低错误率。

(5)字符串匹配问题,在实现用户登录及密码修改时,我发现,对查询结果与本身的字符串进行匹配时,尽管他们显示出是相等的,但是匹配是不成功的。譬如说登录时,输入账号为A01,先通过查询找出A01的密码,在将输入的密码与其匹配,实验中将这两个进行输出,肉眼上是看不出差别的,但是程序匹配上是永远失败的,这个问题产生的原因至今我还是不太清楚。后来,我将这两个查询语句进行合并,返回满足账号和密码的记录数,若记录为0,则说明输入的账号或密码有误,若不是0,则说明输入无误。

7.2 系统设计的不足

(1)数据库表格的设计存在一些不合理的地方,Reports表中,感觉加入教师编号会更利与数据库的实现,因为只有教师姓名,会加剧设计教师与学生操作的复杂性,且出错率也会变高。

(2)功能实现的不够全面,管理员的功能主要体现在老师和学生这两种类别上,其实还可以进行课程的管理等等,学生的选课、退课功能也还没有考虑上,整个系统还是比较脆弱简单的。

(3)在进行学生成绩排名的时候,只能显示排名结果,但是不能显示名次。

(4)数据库设计时,涉及到班级和专业的地方很少,实际中,应该把这两个也考虑进去,才能完善整个系统。

(5)建立了太多视图,设计视图的时候,因为有很多信息的交叉,还有很多外键,需要很多自然连接 ,非常繁琐。

7.3 进一步改进思路和体会

(1)本次课设让我理解了设计数据库的复杂性,并且数据库的设计一定要保障数据库的完整性和准确性,这些在数据定义、基本表建立、设计触发器和存储过程时都要仔细考虑。

(2)本次实验也让我对C#这么语言有了初步的理解,C#集合了c语言和java语言的优点,是一门非常适合做界面的语言,界面制作比较容易上手。

(3)设计更多的触发器,加强表与表之间的联系,尽量减少视图的数量,提高基本表与视图的有效性。

(4)优化界面,使界面更加符合实际需求。

体会

通过这次课程设计发现这其中需要的很多知识我们没有接触过,还有很多需要我们掌握的东西我们不明白。同时也发现有很多已经学过的东西我们没有理解到位,不能灵活运用于实际,不能很好的用来解决问题,这就需要我们不断的大量的实践,通过不断的自学,不断地发现问题,思考问题,进而解决问题。从 种文档的阅读到开始的需求分析、概念结构设计、逻辑结构设计、物理结构设计。亲身体验了一回系统的设计开发过程。很多东西书上写的很清楚,貌似看着也很简单,操作起来要考虑到方方面面,这还只是一个比较简单的系统,可想可知在我们生活中应用的数据库会有多么复杂。


(写得比较简陋,页面不太美观,数据结构也存在问题,数据库文件已经找不到了,想要参考C#源码的可以私我,一定要先建好数据库(修改sqlConnect.cs的数据库名称),确保连接没问题,再将C#每个页面的查询语句改成自己建的表)

不知道的看SQL Sever开启时服务器名称

要成功运行 一定要建好数据库、插入数据,插入的数据一定要有一定的对应关系,遵循主外键约束,当数据插入完毕之后。

插入数据参考

代码语言:javascript复制
insert
into Xum_Majors18
values('M01','计智')
insert
into Xum_Majors18
values('M02','计科')
insert
into Xum_Majors18
values('M03','软工')
insert
into Xum_Majors18
values('M04','网工')



insert 
into Xum_Class18
values('CL01','计智1902','M01')
insert 
into Xum_Class18
values('CL02','计智1902','M01')
insert 
into Xum_Class18
values('CL03','计科1902','M02')
insert 
into Xum_Class18
values('CL04','计科1902','M02')
insert 
into Xum_Class18
values('CL05','网工1901','M03')
insert 
into Xum_Class18
values('CL06','网工1902','M03')

insert 
into Xum_Class18
values('CL07','软工1901','M04')
insert 
into Xum_Class18
values('CL08','软工1902','M04')

insert 
into Xum_Courses18
values('C01','离散数学','程珍','大一下','考试',4,24)
insert 
into Xum_Courses18
values('C03','机器学习','黄亮','大一下','考查',4 ,24)
insert 
into Xum_Courses18
values('C04','数字电路','赵冬冬','大一下','考试',4 ,24)
insert 
into Xum_Courses18
values('C05','数字电路','龙胜春','大一下','考试',4 ,24)
insert 
into Xum_Courses18
values('C06','马原','周文','大一上','考试',3 ,18)
insert 
into Xum_Courses18
values('C07','毛概','陈燕','大一下','考试',3 ,18)
insert 
into Xum_Courses18
values('C08','思修','吴五','大一上','考试', 4,24)


insert 
into Xum_Students18
values('06060101','张三','男',20,'浙江',20,'CL01')
insert 
into Xum_Students18
values('06060102','李四','男',20,'浙江',15,'CL01')
insert 
into Xum_Students18
values('06060103','王五','男',20,'浙江',10,'CL02')
insert 
into Xum_Students18
values('06060104','张南','女',20,'浙江',22,'CL02')
insert 
into Xum_Students18
values('06060105','丽丽','女',20,'北京',18,'CL03')
insert 
into Xum_Students18
values('06060106','倩倩','女',20,'浙江',19,'CL03')
insert 
into Xum_Students18
values('06060107','悠悠','女',20,'浙江',25,'CL04')
insert 
into Xum_Students18
values('06060108','琪琪','男',20,'安徽',22,'CL04')
insert 
into Xum_Students18
values('06060109','贝奇','男',20,'湖南',20,'CL05')
insert 
into Xum_Students18
values('06060110','洛克','男',20,'浙江',20,'CL05')
insert 
into Xum_Students18
values('06060202','尼克','男',20,'江苏',15,'CL06')
insert 
into Xum_Students18
values('06060203','艾米','女',20,'江西',10,'CL06')
insert 
into Xum_Students18
values('06060301','丝尔特','女',20,'福建',20,'CL07')
insert 
into Xum_Students18
values('06060302','梅森','男',20,'浙江',15,'CL07')
insert 
into Xum_Students18
values('06060403','大卫','男',20,'浙江',10,'CL08')
insert 
into Xum_Students18
values('06060405','汤米','女',20,'浙江',22,'CL08')



insert 
into Xum_Teachers18
values('T01','程珍','女',35,'教师','13344332278')
insert 
into Xum_Teachers18
values('T02','王英姿','女',35,'教师','13756742178')
insert 
into Xum_Teachers18
values('T03','黄亮','男',34,'教师','15745723349')
insert 
into Xum_Teachers18
values('T04','赵冬冬','男',30,'教师','17858640979')
insert 
into Xum_Teachers18
values('T05','龙胜春','女',37,'教师','17857573670')
insert 
into Xum_Teachers18
values('T06','周文','女',32,'教师','18367986174')
insert 
into Xum_Teachers18
values('T07','陈燕','女',45,'教师','17858427842')
insert 
into Xum_Teachers18
values('T08','吴五','男',35,'教师','15724547842')



insert 
into Xum_Tea_Cour18
values('T01','C01')
insert 
into Xum_Tea_Cour18
values('T02','C02')
insert 
into Xum_Tea_Cour18
values('T03','C03')
insert 
into Xum_Tea_Cour18
values('T04','C04')

insert 
into Xum_Tea_Cour18
values('T05','C05')
insert 
into Xum_Tea_Cour18
values('T06','C06')
insert 
into Xum_Tea_Cour18
values('T07','C07')
insert 
into Xum_Tea_Cour18
values('T08','C08')


insert 
into Xum_Class_Cour18
values('CL01','C01')
insert 
into Xum_Class_Cour18
values('CL02','C02')
insert 
into Xum_Class_Cour18
values('CL03','C03')
insert 
into Xum_Class_Cour18
values('CL04','C04')
insert 
into Xum_Class_Cour18
values('CL05','C05')
insert 
into Xum_Class_Cour18
values('CL06','C06')
insert 
into Xum_Class_Cour18
values('CL07','C07')
insert 
into Xum_Class_Cour18
values('CL08','C08')

insert
into Xum_Teac_Class18
values('T01','CL01')
insert
into Xum_Teac_Class18
values('T02','CL02')
insert
into Xum_Teac_Class18
values('T03','CL03')
insert
into Xum_Teac_Class18
values('T04','CL04')
insert
into Xum_Teac_Class18
values('T05','CL05')
insert
into Xum_Teac_Class18
values('T06','CL06')
insert
into Xum_Teac_Class18
values('T07','CL07')
insert
into Xum_Teac_Class18
values('T08','CL08')


insert
into Xum_Reports18
values('C01','06060101',90,'大一下','程珍')
insert
into Xum_Reports18
values('C01','06060102',93,'大一下','程珍')
insert
into Xum_Reports18
values('C02','06060103',78,'大一上','王英姿')
insert
into Xum_Reports18
values('C02','06060104',96,'大一上','王英姿')

insert
into Xum_Reports18
values('C03','06060105',87,'大一下','黄亮')

insert
into Xum_Reports18
values('C03','06060106',98,'大一下','黄亮')
insert
into Xum_Reports18
values('C04','06060107',94,'大一下','赵冬冬')
insert
into Xum_Reports18
values('C04','06060108',80,'大一下','赵冬冬')
insert
into Xum_Reports18
values('C05','06060109',87,'大一下','龙胜春')
insert
into Xum_Reports18
values('C05','06060110',96,'大一下','龙胜春')
insert
into Xum_Reports18
values('C06','06060202',95,'大一上','周文')
insert
into Xum_Reports18
values('C06','06060203',93,'大一上','周文')
insert
into Xum_Reports18
values('C07','06060301',98,'大一下','陈燕')
insert
into Xum_Reports18
values('C07','06060302',77,'大一下','陈燕')
insert
into Xum_Reports18
values('C08','06060403',67,'大一上','吴五')
insert
into Xum_Reports18
values('C08','06060405',88,'大一上','吴五')




insert 
into Teachers_account18
values('T01','12345')
insert 
into Teachers_account18
values('T02','12345')
insert 
into Teachers_account18
values('T03','12345')
insert 
into Teachers_account18
values('T04','12345')
insert 
into Teachers_account18
values('T05','12345')
insert 
into Teachers_account18
values('T06','12345')
insert 
into Teachers_account18
values('T07','12345')
insert 
into Teachers_account18
values('T08','12345')


insert into
Students_account18
values('06060101','12345')
insert into
Students_account18
values('06060102','12345')
insert into
Students_account18
values('06060103','12345')
insert into
Students_account18
values('06060104','12345')
insert into
Students_account18
values('06060105','12345')
insert into
Students_account18
values('06060106','12345')
insert into
Students_account18
values('06060107','12345')
insert into
Students_account18
values('06060108','12345')
insert into
Students_account18
values('06060109','12345')
insert into
Students_account18
values('06060110','12345')
insert into
Students_account18
values('06060202','12345')
insert into
Students_account18
values('06060203','12345')
insert into
Students_account18
values('06060301','12345')
insert into
Students_account18
values('06060302','12345')
insert into
Students_account18
values('06060403','12345')
insert into
Students_account18
values('06060405','12345')

insert into
Admin_account18
values('A01','12345')
insert into
Admin_account18
values('A02','12345')

打开所有协议,然后修改每个界面的查询语句

注意点:

1.C#源码用VS2013运行 其他版本可能会出错 SQL sever选择2014版

2.不要重复插入数据,插入的数据遵循主外键约束

3.触发器一定要写 如果不想写的话 就把对应的功能去掉(譬如“教师删除“”触发器,可以直接删除掉“删除教师”的功能)如果要留下这些功能 一定要写触发器

4.视图可以不建立 运行过程中并没有用到

5.可以先在SQL里面运行语句 再去C#里面运行 这样出错概率低

6.源码里面有几个页面多余 运行时没有用到就可以删掉

7.数据库连接问题 要把所有协议打开 保证服务器名没有写错

8.页面可以自己重新编辑(换控件、背景jpg、增添功能)

(不需要关注我的 只是学习分享,只要私信我,或者在下方留言我都会发的 不需要已关注的)

因为感觉评论好像会审核 提醒的也比较慢 并且也有点泄露隐私 大家尽量私信我就好了 这样回复也方便一点

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/160483.html原文链接:https://javaforall.cn

0 人点赞