网络数据库课程设计实施方案.docx
《网络数据库课程设计实施方案.docx》由会员分享,可在线阅读,更多相关《网络数据库课程设计实施方案.docx(22页珍藏版)》请在冰豆网上搜索。
网络数据库课程设计实施方案
《网络数据库》课程设计实施方案
一、《网络数据库》课程设计目的及意义
通过设计一个数据库使用系统,可进一步熟悉SQLServer索引、视图、存储过程、触发器的概念、T-SQL语句的用法,在C#中的数据访问办法及实现方式。
通过这个课程设计可以加深对SQLServer数据库知识的学习,理解,积累在实际工程中运用各种数据库对象的经验,使学生掌握使用使用软件开发工具开发数据库管理系统的基本方法。
在实用性方面,客房管理系统也是很普遍的一种使用,选择该系统作为课程设计也可以为以后学生可能遇到的实际开发提供借鉴。
二、课程设计项目选题(任选一)
1、客房管理系统
2、工资管理系统设计
3、图书管理系统设计
4、班级管理系统
5、教师信息管理系统
6、成绩管理系统
7、学生信息管理系统
8、实验室管理系统
9、科研项目管理系统
10、商品销售管理系统
三、时间和安排
时间为2周(12天时间),时间应该够用,因为早已把课程设计分解到平时上课所布置的课外作业中。
粗略划分:
第1、2天 布置任务及分组、总体需求分析和设计;编写相关文档、设计说明、查找资料
第3、4天数据库设计,数据表的设计、数据的录入,完整性约束
第5、6天视图、触发器和存储过程设计
第7、8各模块的编程设计;
第9、10 使用C#)创建工程并编写代码;
第11天 程序总调试、修改,撰写课程设计实习报告
四、课程设计报告
内容包括:
系统设计目的、数据库对象、数据表结构(每个表要注明索引、视图、触发器、存储过程)、功能模块划分、程序实现思路、设计说明文档、课程设计心得及程序清单(打印),并按学校的课程设计(论文)格式撰写并装订成册,以备下一次再代此课时使用。
五、成绩考核:
系统测试、设计报告、单项实训分别占40%、40%、20%;
六、进度和组织
1、课程设计进度安排(第17周-第18周)
交付方式:
第16周交付已打印的文档、可演示的软件。
2、课程设计小组
学生每N人1组(一个面最多6组),自由组合,指定一个组长,负责本小组的任务分配和进度安排。
在提交文档时,应在封面上注明小组参加人员,包括学号和姓名,以便老师打分。
课程设计小组应独立工作,可以相互讨论,但小组间不允许互相抄抄袭。
3、19周进行演示。
参考案例1:
小型学生管理系统
问题
本案例实现一个小型的学生管理系统。
完成的功能:
班级管理、学生管理、科目管理、课程管理、成绩管理以及系统管理员才具有的教师管理和用户管理。
1.班级管理:
可对班级进行添加、删除、修改、查找和报表输出等功能,班级属性有:
名称、班主任(来自于系统中保存的教师)、当前学生人数、建班日期和备注等属性。
2.学生管理:
可对学生进行添加、删除、修改、查找和报表输出等功能,学生属性有:
学号、姓名、性别、所属班级(来自于系统中保存的班级)、相片、出生日期和备注等属性。
3.科目管理:
可对科目进行添加、删除、修改、查找和报表输出等功能,科目属性有:
科目名称、学时数和备注等属性。
4.课程管理:
可对每一个班级的上课科目进行添加、删除、修改、查找和报表输出等功能,课程属性有:
所属班级(来自于系统中保存的班级)、授课老师(来自于系统中保存的教师)、开课日期、结课日期和备注等属性。
5.成绩管理:
可对每一个班级的上课科目的学生成绩进行添加、删除、修改、查找和报表输出等功能,成绩属性有:
学生姓名、所属班级(来自于系统中保存的班级)、课程名、成绩、备注等属性。
指导教师讲解问题说明
分析
根据系统的功能划分和实现的方便,我们将整个程序分为三层:
数据层、业务层和界面层。
数据层负责对数据库进行操作,包括向表中插入数据、更新数据、查询数据和删除数据。
业务层负责把界面上的各种操作传达给数据层。
界面层主要负责界面的设计,包括控件的位置和外观等设置、实时反映系统的变化情况。
数据库表的设计
根据程序的功能得出数据实体,进行数据库设计分析,确定以下数据表,如图所示:
图1班级表结构
图2课程表结构
图3分数表结构
图4学生表结构
图5科目表结构
图6教师表结构
图7用户信息表结构
方案实现:
在解决方案中添加3个项目,分别代表数据层、业务层和界面层。
因为班级、课程、成绩、学生、科目和教师等对象的实现方式类似,以下以班级类为示例,讲解实现过程:
BusinessRuler.Classes类的实现
该类主要实现班级的业务逻辑,如:
验证系统是否有班级、该班是否有学生、该班学生人数是否已超过额定、班级名是否已存在、该班是否已开课、添加、删除、修改和查找班级。
具体代码如下所示:
usingSystem;
usingSystem.Windows.Forms;
usingDataAccess;
usingSystem.Data.SqlClient;
usingSystem.Collections;
usingSystem.Data;
namespaceBusinessRuler
{
publicclassClasses
{
privateDataGridView_dgvClass;
publicClasses(DataGridViewdgv)
{
_dgvClass=dgv;
}
publicClasses()
{ }
//验证系统是否有班级
publicstaticboolIsClassExists()
{
if(DataAccess.Classes.IsClassExists().HasRows)
{
returntrue;
}
else
{
MessageBox.Show("目前还没有班级,请首先创建班级","错误",MessageBoxButtons.OK,MessageBoxIcon.Information);
returnfalse;
}
}
//验证该班是否有学生
publicboolIsStudentExists(stringclassName)
DataAccess.ClassesobjClass=DataAccess.Classes.CreateInstance(className);
if(objClass.CurrentCount>0)
{
returntrue;
}
else
{
MessageBox.Show("该班目前还没有学生,无法进行成绩管理,请首先添加学生!
","错误",MessageBoxButtons.OK,MessageBoxIcon.Information);
returnfalse;
}
}
//验证该班学生人数是否已超过额定
publicstaticboolisInCapacity(stringclassName)
{
intstudentCapacity=Int32.Parse(BusinessRuler.ReaderWirteConfig.GetValueByKey("studentCapaticyInClass"));
DataAccess.ClassesobjClass=DataAccess.Classes.CreateInstance(className);
if(objClass.CurrentCount==studentCapacity)
{
MessageBox.Show("该班学生人数已满!
","错误",MessageBoxButtons.OK, MessageBoxIcon.Error);
returnfalse;
}
returntrue;
}
//验证班级名是否已存在
publicstaticboolCheckExists(stringclassName)
{
returnDataAccess.Classes.CheckExists(className).HasRows;
}
//检查该班是否已开课
publicboolIsCourseExist(stringclassName)
{
DataAccess.ClassesobjClass=newDataAccess.Classes(className);
if(objClass.FillByAllSubjectName().Tables[0].Rows.Count>0)
{
returntrue;
}
else
{
MessageBox.Show(className+"班尚无课程,无法进行成绩管理,请先添加课程!
","错误",MessageBoxButtons.OK,MessageBoxIcon.Error);
returnfalse;
}
}
//更新数据网格的显示
publicvoidUpdateDataGrid()
{
if(this._dgvClass!
=null)
{
DataSetobjDataSet=DataAccess.Classes.FillByAllClass();
this._dgvClass.DataSource=objDataSet.Tables[0];
}
}
//添加班级
publicvoidAddClass(stringclassName,stringdirector,DateTimeentranceDate,stringremark)
{
//首先判断班级名称是否已存在
if(CheckExists(className))
{
MessageBox.Show("班级名"+className+"已存在,请重新输入班级名!
","班级名已存在",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
else
{
if(DataAccess.Classes.CreateClass(className,director,entranceDate,remark)>0)
{
UpdateDataGrid();
MessageBox.Show("成功添加班级!
","操作成功",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
}
}
//修改班级
publicvoidModifyClass(stringclassName,stringdirector,DateTimeentranceDate,stringremark)
{
DataAccess.ClassesobjClass=newDataAccess.Classes(className);
objClass.Director=director;
objClass.EntranceDate=entranceDate;
objClass.Remark=remark;
if(objClass.Update()>0)
{
UpdateDataGrid();
MessageBox.Show("修改班级资料成功!
","操作成功",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
}
//删除班级
publicvoidDeleteClass(stringclassName)
{
if(!
CheckExists(className))
{
MessageBox.Show("班级名"+className+"不存在,请重新输入班级名!
","班级名不存在",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
else
{
if(DialogResult.Yes==MessageBox.Show("真的要删除班级'"+className+"'吗?
\n删除该班时,将同时删除该班所有学生的档案及相关课程、成绩的记录,确定要继续吗?
","删除确认",MessageBoxButtons.YesNo,MessageBoxIcon.Question))
{
DataAccess.ClassesobjClass=newDataAccess.Classes(className);
if(objClass.Delete()>0)
{
UpdateDataGrid();
MessageBox.Show("成功删除班级'"+className+"'!
","操作成功",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
}
}
}
publicvoidFillCboByAllClassName(ComboBoxcbo,intposition)
{
cbo.Items.Clear();
DataTableclassNames=DataAccess.Classes.GetAllClassName();
foreach(DataRowrowinclassNames.Rows)
{
cbo.Items.Add(row[0].ToString());
}
cbo.SelectedIndex=position;
}
publicvoidFillCboByAllClassName(ComboBoxcbo,stringtheClassName)
{
cbo.Items.Clear();
intposition=0;
inti=0;
DataTableclassNames=DataAccess.Classes.GetAllClassName();
foreach(DataRowrowinclassNames.Rows)
{
cbo.Items.Add(row[0].ToString());
if(row[0].ToString().Equals(theClassName))
{
position=i;
}
i++;
}
cbo.SelectedIndex=position;
}
//查找班级
publicstaticvoidFindByClassName(DataGridViewdgv,stringclassName)
{
for(introw=0;row {
if(dgv.Rows[row].Cells["colClassName"].Value.ToString().Equals(className))
{
dgv.Rows[row].Selected=true;
return;
}
}
MessageBox.Show("已到记录末尾!
","结果",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
//按班主任查找
publicstaticvoidFindByDirector(DataGridViewdgv,stringdirector,booluseMatch)
{
for(introw=Int32.Parse(dgv.Tag.ToString());row {
boolcondition=dgv.Rows[row].Cells["colDirector"].Value.ToString().Equals(director);
if(useMatch)
{
condition=dgv.Rows[row].Cells["colDirector"].Value.ToString().Contains(director);
}
if(condition)
{
dgv.Rows[row].Selected=true;
dgv.Tag=(row+1).ToString();
return;
}
}
MessageBox.Show("已到记录末尾!
","结果",MessageBoxButtons.OK, MessageBoxIcon.Information);
dgv.Tag=0;
}
//按建班日期查找
publicstaticvoidFindByDate(DataGridViewdgv,DateTimestartDate,DateTimefinishDate)
{
for(introw=Int32.Parse(dgv.Tag.ToString());row {
DateTimedateValue=DateTime.Parse(dgv.Rows[row].Cells["colEntranceDate"].Value.ToString());
if(dateValue>=startDate&&dateValue<=finishDate)
{
dgv.Rows[row].Selected=true;
dgv.Tag=(row+1).ToString();
return;
}
}
MessageBox.Show("已到记录末尾!
","结果",MessageBoxButtons.OK,MessageBoxIcon.Information);
dgv.Tag=0;
}
}
}
DataAccess.Classes类的实现
该类主要实现班级的对象的创建和数据库操作,如:
得到所有班级名、新建班级、获取班级所有学生的集合、得到指定班级所有课程信息的记录、添加、删除和修改班级。
具体代码如下所示:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Data;
usingSystem.Data.SqlClient;
usingSystem.Collections;
namespaceDataAccess
{
publicclassClasses
{
privatestring_className;
privatestring_director;
privateint_currentCount;
privateDateTime_entranceDate;
privatestring_remark;
#region
publicstringName
{
get
{
return_className;
}
set
{
_className=value;
}
}
publicstringDirector
{
get
{
return_director;
}
set
{
_director=value;
}
}
publicintCurrentCount
{
get
{
return_currentCount;
}
set
{
_currentCount=value;
}
}
publicDateTimeEntranceDate
{
get
{
return_entranceDate;
}
set
{
_entranceDate=value;
}
}
publicstringRemark
{
get
{
return_remark;
}
set
{
_remark=value;
}
}
#endregion
//实例化班级
publicClasses(stringclassName)
{
_className=className;
}
publicClasses()
{
}
publicstaticClassesCreateInstance(stringclassName)