计算机科学与技术学院
2008-2009 学年第 2 学期
《 数据库原理(Ⅲ)》课程设计
题目:
学生管理系统
班级:
学号:
姓名:
教师:
成绩:
一、需求分析
随着社会的进步,各种信息量也逐渐增加,包括在学校内,对学生的信息管理就是一个
很重要的环节。对于新录入的学员要及时增添其相关信息到学校数据库,而对于已经毕业的
数据库课程设计
学员也要及时删除。同时,在校学生的信息还可以随时进行更新编辑,以便保证数据的完整
性和正确性。
此学生信息管理信息系统是面向大学的管理系统,其目的是对学校内的学生,班级,系
和学会进行统一有序的管理。
1)系统涉及到的各实体以及实体之间的关系如下:
学生——学号, 姓名,性别,宿舍区, 班号,系号, 学会名
班级——班号,人数,入校年份,系号
系 ——系号,系名 ,系办公室号 ,人数
学会——学会名,人数,成立年份,地点
经过分析,有两个问题:①学会和学生之间是多对多的关系 ②学生,班级和系形成了循环
的主外键的关系,这对于级联删除和级联插入时会出现问题。所以,最终将各个实体表整合
如下:
学生——学号, 姓名,性别,宿舍区, 班号
班级——班号,人数,入校年份,系号
系 ——系号,系名 ,系办公室号 ,人数
学会——学会名,人数,成立年份,地点
学会成员——学号,学会名
2)面向的对象有后台管理员和前台注册的用户,他们的权限也不相同,权限范围如下:
①管理员权限:
注册成为管理员后,可以对系,班级,学生,学会以及学会成员分别进行添加,删除,查询
和修改,只要符合条件和逻辑便可以将数据写进数据库中,并保证数据没有冗余。同时可以
对自己的密码进行修改。
②普通用户权限:
注册成为普通用户后,可以对每个学生的综合信息进行查询,但不能进行添加,删除以及修
改操作。进行查询显示的信息使用的是视图,是将学生,班级,系,学会成员四张表进行连
接生成的。同时,用户同样可以对自己的密码进行修改。
3)存储过程的应用:
在普通用户进行信息查询的时候使用了存储过程,用于显示所有学生的相关信息,是基于视
图操作的。
4)触发器:
触发器应用在普通用户注册上,当用户注册的用户名为“管理员”或者是“admin”时,自
动在用户名前加上“user_”以便产生歧义。
其组织结构图如下:
- 1 -
数据库课程设计
相关数据流图如下
(1)管理员活动流图:
(2)普通用户数据流图:
- 2 -
数据库课程设计
数据字典:
(1) 数据结构:学生
含义说明:定义了一个学生的信息结构:
组成:学号, 姓名,性别, 出生年月,宿舍区, 班号,系号,学会名
数据项:学号
含义说明:唯一标识一个学生
类型:整型
长度:4
(2) 数据流:管理员对所有信息进行管理以及普通用户对信息进行查询
说明:表示每一位登录者的操作
(3) 处理过程: 各项操作
(4) 定义一个视图,用于显示普通用户查询的学生信息
(5) 定义一个存储过程,用于对视图中的学生信息进行查询
(6) 定义一个触发器,用于对普通用户注册的限制,有些用户名不能注册
二、结构设计
1.概念结构设计
根据需求,得到的 E-R 图如下:
- 3 -
数据库课程设计
2.逻辑结构设计:
根据以上 E-R 图可得一下关系模型:
学生(学号, 姓名,性别,宿舍区, 班号,系号, 学会名)
班级(班号,人数,入校年份,系号)
系 (系号,系名 ,系办公室号 ,人数)
学会(学会名,人数,成立年份,地点)
属于(学号,班号)
拥有(班号,系号)
加入(学号,学会名)
经过化简合并后得到最后的关系模型:
学生(学号, 姓名,性别,宿舍区, 班号)
班级(班号,人数,入校年份,系号)
系 (系号,系名 ,系办公室号 ,人数)
学会(学会名,人数,成立年份,地点)
学会成员(学号,学会名)
根据以上关系,建立各表如下:
学生:
班级:
- 4 -
数据库课程设计
系:
学会:
学会成员:
管理员,用户登录信息:
关系图如下:
三、程序代码:
- 5 -
数据库课程设计
1. 数据库操作代码如下:
1)连接数据库:
public class DataCon
{
public DataCon()
{
// TODO: 在此处添加构造函数逻辑
}
public SqlConnection getCon()
{
string sqlCon = "server=localhost;uid=sa;pwd=sa;database=sql";
SqlConnection myCon = new SqlConnection(sqlCon);
return myCon;
}
}
2)与数据库进行数据交换:
public class DataOperate
{
private SqlCommand sqlcom;
public DataOperate()
{
//声明一个SqlCommand对象
// TODO: 在此处添加构造函数逻辑
}
#region
DataCon dataCon = new DataCon();
public bool DataCom(string sql)
{
//绑定控件
SqlConnection sqlconn = dataCon.getCon();
sqlconn.Open();
SqlCommand sqlcomm = new SqlCommand(sql, sqlconn);
try
{
sqlcomm.ExecuteNonQuery();
return true;
}
catch
{
return false;
}
finally
{
sqlconn.Close();
}
}
- 6 -
数据库课程设计
#endregion
#region
DataCon dataCon1 = new DataCon();
public bool gvBind(GridView gv,string sql,string tab)
{
//绑定GridView控件
SqlConnection sqlconn=dataCon1.getCon();
sqlconn.Open();
SqlDataAdapter sqldataadapter=new SqlDataAdapter(sql,sqlconn);
DataSet mydataset=new DataSet();
sqldataadapter.Fill(mydataset,tab);
gv.DataSource=mydataset;
try
{
gv.DataBind();
return true;
}
catch
{
return false;
}
finally
{
sqlconn.Close();
}
}
#endregion
#region
DataCon dataCon2 = new DataCon();
public bool dataBind(DataList dl, string sql) //绑定DataList控件
{
SqlConnection sqlconn = dataCon2.getCon();
sqlconn.Open();
SqlDataAdapter myadapter = new SqlDataAdapter(sql, sqlconn);
DataSet mydataset = new DataSet();
myadapter.Fill(mydataset);
dl.DataSource = mydataset;
try
{
dl.DataBind();
return true;
}
catch
{
return false;
- 7 -