网络数据库课程设计实施方案
更新时间:2024-04-14 03:47:01 阅读量: 综合文库 文档下载
《网络数据库》课程设计实施方案
一、《网络数据库》课程设计目的及意义
通过设计一个数据库应用系统,可进一步熟悉SQL Server索引、视图、存储过程、触发器的概念、T-SQL语句的用法,在C#中的数据访问办法及实现方式。通过这个课程设计可以加深对SQL Server数据库知识的学习,理解,积累在实际工程中运用各种数据库对象的经验,使学生掌握使用应用软件开发工具开发数据库管理系统的基本方法。在实用性方面,客房管理系统也是很普遍的一种应用,选择该系统作为课程设计也可以为以后学生可能遇到的实际开发提供借鉴。 二、课程设计项目选题(任选一) 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类的实现
该类主要实现班级的业务逻辑,如:验证系统是否有班级、该班是否有学生、该班学生人数是否已超过额定、班级名是否已存在、该班是否已开课、添加、删除、修改和查找班级。具体代码如下所示:
using System; using System.Windows.Forms; using DataAccess; using System.Data.SqlClient; using System.Collections; using System.Data; namespace BusinessRuler { public class Classes { private DataGridView _dgvClass; public Classes(DataGridView dgv) { _dgvClass = dgv; } public Classes() { } //验证系统是否有班级 public static bool IsClassExists() { if (DataAccess.Classes.IsClassExists().HasRows) { return true; } else { MessageBox.Show(\目前还没有班级,请首先创建班级\错误\MessageBoxIcon.Information); return false; } } //验证该班是否有学生 public bool IsStudentExists(string className) DataAccess.Classes objClass = DataAccess.Classes.CreateInstance(className); if (objClass.CurrentCount > 0 ) { return true; }
else { MessageBox.Show(\该班目前还没有学生,无法进行成绩管理,请首先添加学生!\错误\ return false; } } //验证该班学生人数是否已超过额定 public static bool isInCapacity(string className) { int studentCapacity = Int32.Parse(BusinessRuler.ReaderWirteConfig.GetValueByKey(\ DataAccess.Classes objClass = DataAccess.Classes.CreateInstance(className); if (objClass.CurrentCount == studentCapacity ) { MessageBox.Show(\该班学生人数已满!\错误\MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } return true; } //验证班级名是否已存在 public static bool CheckExists(string className) { return DataAccess.Classes.CheckExists(className).HasRows; } //检查该班是否已开课 public bool IsCourseExist(string className) { DataAccess.Classes objClass = new DataAccess.Classes(className); if (objClass.FillByAllSubjectName().Tables[0].Rows.Count > 0 ) { return true; } else { MessageBox.Show(className+ \班尚无课程,无法进行成绩管理,请先添加课程!\错误\ return false; } } //更新数据网格的显示 public void UpdateDataGrid() { if (this._dgvClass != null) { DataSet objDataSet = DataAccess.Classes.FillByAllClass(); this._dgvClass.DataSource = objDataSet.Tables[0]; } } //添加班级 public void AddClass(string className, string director, DateTime entranceDate, string remark) { //首先判断班级名称是否已存在 if (CheckExists(className)) { MessageBox.Show(\班级名\已存在,请重新输入班级名!\班级名已存在\ } else { if (DataAccess.Classes.CreateClass(className, director, entranceDate, remark) > 0) { UpdateDataGrid(); MessageBox.Show(\成功添加班级!\操作成功\MessageBoxIcon.Information); } } } //修改班级 public void ModifyClass(string className, string director,DateTime entranceDate, string remark) { DataAccess.Classes objClass = new DataAccess.Classes(className); objClass.Director = director; objClass.EntranceDate = entranceDate; objClass.Remark = remark; if (objClass.Update() > 0) { UpdateDataGrid(); MessageBox.Show(\修改班级资料成功!\操作成功\MessageBoxIcon.Information); } } //删除班级 public void DeleteClass(string className) { if (!CheckExists(className)) { MessageBox.Show(\班级名\不存在,请重新输入班级名!\班级名不存在\ } else { if (DialogResult.Yes == MessageBox.Show(\真的要删除班级' \吗?\\n 删除该班时,将同时删除该班所有学生的档案及相关课程、成绩的记录,确定要继续吗?\删除确认\ { DataAccess.Classes objClass = new DataAccess.Classes(className); if (objClass.Delete() > 0) { UpdateDataGrid(); MessageBox.Show(\成功删除班级' \操作成功\MessageBoxButtons.OK, MessageBoxIcon.Information); } } } } public void FillCboByAllClassName(ComboBox cbo, int position) { cbo.Items.Clear(); DataTable classNames = DataAccess.Classes.GetAllClassName(); foreach (DataRow row in classNames.Rows) { cbo.Items.Add(row[0].ToString()); } cbo.SelectedIndex = position; } public void FillCboByAllClassName(ComboBox cbo, string theClassName) { cbo.Items.Clear(); int position = 0; int i = 0; DataTable classNames = DataAccess.Classes.GetAllClassName(); foreach(DataRow row in classNames.Rows) { cbo.Items.Add(row[0].ToString()); if (row[0].ToString().Equals(theClassName)) { position = i; } i++; } cbo.SelectedIndex = position; } //查找班级 public static void FindByClassName(DataGridView dgv, string className) { for (int row = 0; row < dgv.Rows.Count; row++) { if (dgv.Rows[row].Cells[\ { dgv.Rows[row].Selected = true; return ; } } MessageBox.Show(\已到记录末尾!\结果\MessageBoxIcon.Information); } //按班主任查找 public static void FindByDirector(DataGridView dgv, string director,bool useMatch) { for (int row = Int32.Parse(dgv.Tag.ToString()); row < dgv.Rows.Count; row++) { bool condition = dgv.Rows[row].Cells[\ if (useMatch) { condition = dgv.Rows[row].Cells[\ } if (condition) { dgv.Rows[row].Selected = true; dgv.Tag = (row+1).ToString(); return ; } } MessageBox.Show(\已到记录末尾!\结果\MessageBoxButtons.OK, MessageBoxIcon.Information); dgv.Tag = 0; } //按建班日期查找 public static void FindByDate(DataGridView dgv, DateTime startDate, DateTime finishDate) { for (int row = Int32.Parse(dgv.Tag.ToString()); row < dgv.Rows.Count; row++) { DateTime dateValue = DateTime.Parse(dgv.Rows[row].Cells[\ if (dateValue >= startDate && dateValue <= finishDate) { dgv.Rows[row].Selected = true; dgv.Tag = (row + 1).ToString(); return; } } MessageBox.Show(\已到记录末尾!\结果\MessageBoxIcon.Information); dgv.Tag = 0; } } } DataAccess.Classes类的实现
该类主要实现班级的对象的创建和数据库操作,如:得到所有班级名、新建班级、获取班级所有学生的集合、得到指定班级所有课程信息的记录、添加、删除和修改班级。具体代码如下所示:
using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.SqlClient; using System.Collections; namespace DataAccess { public class Classes { private string _className; private string _director; private int _currentCount;
private DateTime _entranceDate; private string _remark; #region public string Name { get { return _className; } set { _className = value; } } public string Director { get { return _director; } set { _director = value; } } public int CurrentCount { get { return _currentCount; } set { _currentCount = value; } } public DateTime EntranceDate { get { return _entranceDate; } set { _entranceDate = value; } } public string Remark { get { return _remark; } set { _remark = value; } } #endregion //实例化班级 public Classes(string className) { _className = className; } public Classes() { } public static Classes CreateInstance(string className) { Classes c = null; string strSql = \ SqlCommon sqlcomm = new SqlCommon(); SqlDataReader reader = sqlcomm.ExecuteReader(strSql, new SqlParameter(\className)); if (reader.Read()) { c = new Classes(className); c._director = reader[\ c._currentCount = (Int32.Parse(reader[\ c._entranceDate = (DateTime)reader[\ c._remark = reader[\ } reader.Close(); return c; } //得到所有班级名 public static DataTable GetAllClassName() { string strSql = \ SqlCommon sqlcomm = new SqlCommon(); DataSet ds = sqlcomm.CreaDataSet(strSql, null); return ds.Tables[0]; } //新建班级 public static int CreateClass(string className, string director, DateTime entranceDate, string remark) { string strSql = \values(@className,@director,@entranceDate,@remark);\ SqlCommon sqlcomm = new SqlCommon(); SqlParameter[] pa = new SqlParameter[4]; pa[0] = new SqlParameter(\ pa[1] = new SqlParameter(\ pa[2] = new SqlParameter(\ pa[3] = new SqlParameter(\ return sqlcomm.ExecuteNonQuery(strSql, pa); } //更新班级 public int Update() { string strSql = \@entranceDate,[Remark] = @remark where [ClassName] = @className\ SqlCommon sqlcomm = new SqlCommon(); return sqlcomm.ExecuteNonQuery(strSql, new SqlParameter(\new SqlParameter(\this._remark),new SqlParameter(\ } //删除班级 public int Delete() { //删除班级的同时删除该班所有学生记录、课程记录、成绩记录 StringBuilder strSql = new StringBuilder(); strSql.Append(\where [ClassName] = @className) ;\ strSql.Append(\ strSql.Append(\ strSql.Append(\ SqlCommon sqlcomm = new SqlCommon(); return sqlcomm.ExecuteNonQuery(strSql.ToString(),true,false, new SqlParameter(\ } //检查是否有班 public static SqlDataReader IsClassExists() { string strSql = \ SqlCommon sqlcomm = new SqlCommon(); SqlDataReader reader = sqlcomm.ExecuteReader(strSql, null); return reader; } //检查是否有学生 public SqlDataReader IsStudentExists() { string strSql = \[CurrentCount] > 0 \ SqlCommon sqlcomm = new SqlCommon(); SqlDataReader reader = sqlcomm.ExecuteReader(strSql,new SqlParameter(\ return reader; } //检查班级名是否已存在 public static SqlDataReader CheckExists(string className) { string strSql = \ SqlCommon sqlcomm = new SqlCommon(); SqlDataReader reader = sqlcomm.ExecuteReader(strSql, new SqlParameter(\className)); return reader; } //得到所有班级的记录 public static DataSet FillByAllClass() { string strSql = \ SqlCommon sqlcomm = new SqlCommon(); DataSet ds = sqlcomm.CreaDataSet(strSql, null); return ds; } //获取班级所有学生的集合 public DataSet FillByAllStudent() { string strSql = \Student where [ClassName] = @className\ SqlCommon sqlcomm = new SqlCommon(); DataSet ds = sqlcomm.CreaDataSet(strSql, new SqlParameter(\_className)); return ds; } public DataTable GetAllStudentNo() { string strSql = \ SqlCommon sqlcomm = new SqlCommon(); DataSet ds = sqlcomm.CreaDataSet(strSql, new SqlParameter(\_className)); return ds.Tables[0]; } //得到指定班级所有课程信息的记录 public DataSet FillByAllCourse() { string strSql = \where [ClassName] = @className\ SqlCommon sqlcomm = new SqlCommon(); DataSet ds = sqlcomm.CreaDataSet(strSql,new SqlParameter(\ return ds; } //得到指定班级所有课程名称的记录 public DataSet FillByAllSubjectName() { string strSql = \ SqlCommon sqlcomm = new SqlCommon(); DataSet ds = sqlcomm.CreaDataSet(strSql,new SqlParameter(\ return ds; } //判断该班是否已存在相应课程 public SqlDataReader GetDataReaderBySubjectName(string subjectName) { string strSql = \[SubjectName] = @subjectName \ SqlCommon sqlcomm = new SqlCommon(); SqlDataReader reader = sqlcomm.ExecuteReader(strSql, new SqlParameter(\
return reader; } } } 界面设计:
系统的界面除去主运行界面和系统辅助窗体外,还有班级、课程、成绩、学生、科目、教师等对象相应的管理、添加、查找和修改等界面。具体的界面如下图所示:
图8 程序运行主界面
图9 添加班级界面
图10 查找课程界面
图11 更新学生成绩界面
图12学生管理界面
图13登录界面
图14更改密码界面
图15系统选项设置界面
图16系统用户管理界面(管理员登录)
图17选择班级界面
图18输出报表界面
说明:班级、课程、成绩、学生、科目和教师等对象的管理、添加、查找和修改界面类似,故以上没一一给出所有的界面。
参考案例2:客房管理系统设计
一、课程设计的目的和意义
在当今经济和商务交往日益频繁的状况下,宾馆服务行业正面临客流量骤增的压力。越来越多的宾馆饭店都认识到传统的管理方法已经不能适合当今社会的需要,必须借助先进的计算机信息技术对宾馆服务进行管理。“客房管理系统”可以说是整个宾馆计算机信息系统的中心子系统,因为宾馆最主要的功能就是为旅客提供客房。设计客房管理这样一个系统,可以涉及到大多数SQL Server数据库的重要数据库对象、重要功能和特性,比如:视图、触发器和存储过程等。由此,通过这个课程设计可以加深对这些SQL Server数据库知识的学习、理解,积累在实际工程应用中运用各种数据库对象的经验,使学生掌握使用应用软件开发工具开发数据库管理系统的基本方法。在实用性方面,客房管理系统是很普遍的一种应用,选择该系统作为课程设计也可以为学生以后可能遇到的实际开发提供借鉴。
本课程设计的主要目的是学习和练习SQL Server数据库的实际应用,所以选择SQL Server 2000作为数据库服务器。 二、系统功能设计: 本系统主要有以主要功能
数据录入功能:在本系统中提供客人信息登记功能。可以录入客人的姓名、性别、年龄、身份证号码、家庭住址、工作单位、来自地的地名、入住时间、预住天数、客房类别、客房号、离店时间以及缴纳押金等信息。在客人退房时,系统根据输入的离店时间信客房单价自动计算客人住宿金额。
数据查询功能:系统需提供以下查询功能
查某类客房的入住情况及空房情况,显示所有该类客房空廖数据和客房号。
根据客人的姓名来自地的地名、工作单位、或家庭住址等信息查询客人的确信息;根据客人房号查询入住客人的信息。
查询某个客人住宿费用情况,显示客人缴纳押金的金额、实际入住天数、客房价格、实际住宿费、住宿费差额及金额等信息。
查询所有入住时间达到或过预计入住天数的客人。 数据统计功能
统计一段时间内各类客房的入住情况。 统计全年各月份的客房收入。 统计一段时间内各客房的入住率。 三、数据库设计
1.数据表设计:在客房管理(KFGL)数据库中要建立三个数据表:客人信息数据表、客房信息数据表、客房类型数据表。 A)客人信息数据表 列名 CID Cname Csex Cage Cpnum Cadd Cwork Cfrom Cintime Cday Rnum couttime cdeposit ccost
数据类型 Int char Bit Tinyint Char Varchar varchar char Smalldatetime tinyint char Smalldatetime smallmoney smallmoney
大小 4 8 1 1 10 50 50 10 4 1 5 4 4 4
空值 ü ü ü ü ü ü
键
说明
主键(标识列) 序号
姓名 性别 年龄 身份证号码 家庭住址 工作单位 来自地的地名 入住时间 预计入住天数 客房号 离店时间 押金金额 住宿费
B)客房信息数据表 列名 Rnum
数据类型 char
大小 5
空值
键 主键
说明 客房号
rstats rtype cid
char char Char
1 2 9
客房状态 客房类型编号 入住客人序号
C)客房类型数据表 列名 Rtype Rname Rprice
数据类型 Char Char Smallmoney
大小 2 10 4
空值
键 主键
说明 客房类型编号 客房类型名称 该类型客房价格
2.数据完整性约束:主键约束、非空值约束、CHECK约束、缺省约束、惟一约束、外键约束以及规则、标识列
3.视图、触发器和存储过程设计 A)客人选择客房处理(存储过程) B)客人入住登记处理(触发器) C)客人退房处理(触发器) D)客人信息查询处理(存储过程) E)查询客人住宿费用的处理(存储过程) F)查询住宿时间到期的客人(视图) G)客房销售统计(存储过程)
H)统计某年份每月的客房销售数据(存储过程) I)统计一段时间内务类客房的入住率(存储过程) 四、“客房管理系统”应用程序结构设计 1.功能模块设计
根据系统功能要求,把程序分为信息录入、查询和统计三个模块:
A)入住登记与离店模块 B)查询模块 C)统计模块 2.用户界面设计 A)系统主窗口
B)“客人登记和结账”窗口 C)“查询空余客房”窗口 D)“客人信息查询”窗口 E)“客人费用查询”窗口 F)“统计”窗口
五、使用C#创建项并编写代码 1.创建项目
2.设计“用户登记”模块 3.设计“浏览所有记录”模块 4.设计“客房查询”模块 5.客人信息查询模块 6.客人费用查询模块 7.客人入住天数查询模块 8.统计功能模块 9.结束代码
正在阅读:
网络数据库课程设计实施方案04-14
高中开学周记600字02-21
田径运动会作文02-04
乡镇市场建设工程工作开展实施情况总结报告08-05
低碳环保调查报告05-21
分析化学填空题题库及答案10-02
南开19春学期(1709、1803、1809、1903)《Web页面设计》在线作业05-17
得意忘形的近义词02-21
读《中国哲学简史》有感04-07
校园创客交流平台的设计与实现12-31
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 实施方案
- 课程
- 数据库
- 设计
- 网络
- 云南省低碳展规划纲要(2011—2020)
- 思修复习资料
- 开关电源PCB布板要领 - 图文
- 时代光华-心态决定状态-讲义及答案(答案在讲义后)
- 剑河县情概况
- 设备安装施工方案
- 生态万头猪养殖基地可行性
- 金融研究各期文章目录2010-2015
- Jade使用手册-峰形拟合与分解
- 桥梁墩柱、盖梁工程施工专项方案(含系梁)
- 江西省基础教育研究课题语文网络阅读申请书 - 图文
- 基于MATLAB的信号去噪研究
- 加强新形势下基层信访工作的思考
- 云南省计算机一级B类考试上机考试归纳 - 图文
- xx露天煤矿土地复垦方案 - secret - 图文
- 2015江苏对口单招机电专业二模试题和答案
- 高一地理下册分班考试试题
- 国际法案例分析
- 常见不可数名词整理 - 图文
- 武汉大学2008-2009第二学期(180)试题