数据库课程设计报告
-----学生管理系统
一、需求分析
根据老师的要求,我主要把精力集中在学生选课的功能实现上,角色分为管理员与学生 实现功能包括如下两部分:
A.学生端实现功能:
1.系统管理:登陆,退出
2.学籍管理:新生注册,修改信息
3.选课管理:选课,我的课表
4.成绩管理(查询个人成绩)
B.管理员端实现功能:
1.系统管理:登录,修改密码
2.学生信息管理:显示学生列表,更改学生状态录入学生各学期科目成绩、修改
3.选课管理:添加、删除选课,显示选课列表,添加选课成绩
4.成绩管理:查看成绩,统计成绩
二.概念结构设计
实体联系图如下:
三.逻辑设计
关系模型:
学生(学号,姓名,密码,性别,专业,入学日期)
课程(ID,课程名,课时)
学期(ID,学期名称)
安排(ID,学期ID,课程ID,老师,地点,教材名)
选课(安排ID,学号,成绩,是否定教材,审核)
状态(ID,状态名)
管理员(ID,姓名,密码)
四.物理结构设计
数据表及关系:
五.系统实施
主要分三层:
表现层,数据访问层,数据存储层(参照《C#网络应用开发例学与实践》实现)这样分层,降低耦合度,便于查错及修改
六.知识点总结
1.使用ADO.NET访问数据库的过程
//新建连接对象
SqlConnection conn = new SqlConnection();
conn.ConnectionString = \"Data Source=(local);Initial Catalog=School;Integrated Security=True\";
//新建命令对象
SqlCommand cmd = new SqlCommand(\"UpdateStudentInfo\", conn);
//指定命令类型为存储过程
cmd.CommandType = CommandType.StoredProcedure;
//添加参数
cmd.Parameters.Add(new SqlParameter(\"@userName\", userName));
cmd.Parameters.Add(new SqlParameter(\"@userID\", userID));
conn.Open();
//保存执行结果
int recordsAffected = cmd.ExecuteNonQuery();
conn.Close();
2.引用类型与值类型
SqlParameter(\"@isBook\", \"0\");对
SqlParameter(\"@isBook\", 0); 错
“@isBook int ”
SqlParameter 构造函数 (String, Object) Object不能对应int类型
3.模糊查询的过程
A.
CREATE PROCEDURE [dbo].[Pr_GetMyScore]
(
@stuNum varchar(50) = null,
@termIDvarchar(20) = null,
@courseName varchar(50) = null
)
AS
BEGIN
SELECT
[term].[name] AS 学期,
[arrange].arrangeID AS 选课编号,
[course].[Name] AS 课程名称,
FROM[elective],[arrange],[term],[course]
WHERE[arrange].[termID] = [term].[termID]
and[arrange].[courseID] =[course].[courseID]
and[arrange].[arrangeID] = [elective].[arrangeID]
AND (@termID=\'0\' OR [arrange].[termID]=@termID)
AND (@courseName IS NULL OR [course].[Name]like \'%\' + @courseName + \'%\')
AND (@stuNum IS NULL OR [elective].[stuID]=@stuNum)
AND[course].courseID = [arrange].courseID
END
B.
CREATE PROCEDURE [dbo].[Pr_GetScore]
(
@stuNum varchar(50) = null,
@courseName varchar(50) = null,
)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @sql varchar(8000)
SET @sql=\' SELECT
[elective].[stuID] AS 学号, [student].[name] AS 姓名,
[arrange].arrangeID AS 选课编号,
FROM[elective],[arrange],[course],[student]
WHERE[arrange].[courseID] =[course].[courseID]
and [arrange].[arrangeID] = [elective].[arrangeID]
AND[student].[stuID] = [elective].[stuID]\'
IF @stuNum IS NOT NULL
SET @sql=@sql+\' AND [elective].[stuID]=\'+\'\'\'\'+@stuNum+\'\'\'\'
IF @courseName IS NOT NULL
SET @sql=@sql+\' AND [course].[Name] like \'+\'\'\'%\' +@courseName+\'%\'\'\'
EXEC(@sql)
END
七.实验感想
在实训之前,我接触过一些.NET的知识,那时更多的是看实例,然后照搬过来做,对ADO.NET模型不是很了解,这次实训,我又系统地看了一下ADO.NET的基础,加深了对ADO.NET的理解,明白两个核心组件DataSet和.NET Framework的任务。我觉得理论加实践,才能加深对知识的理解,提高处理问题的能力。
做项目,如果从数据库开始分析,把表设计好,那么进行业务逻辑层的设计就很容易实现,也便于以后的扩展。
通过这次的学习,我又接触了很多的.NET控件,(DataGridView,ListView),在遇到不懂的问题,或者解答同学提出的问题时,我尽量查MSDN,使用里面的实例做测试,学到不少知识。