收藏 分享(赏)

数据库课程设计(学生成绩管理系统).doc

上传人:精品资料 文档编号:10757448 上传时间:2020-01-07 格式:DOC 页数:31 大小:363.50KB
下载 相关 举报
数据库课程设计(学生成绩管理系统).doc_第1页
第1页 / 共31页
数据库课程设计(学生成绩管理系统).doc_第2页
第2页 / 共31页
数据库课程设计(学生成绩管理系统).doc_第3页
第3页 / 共31页
数据库课程设计(学生成绩管理系统).doc_第4页
第4页 / 共31页
数据库课程设计(学生成绩管理系统).doc_第5页
第5页 / 共31页
点击查看更多>>
资源描述

1、 得分:课 程 设 计 报 告2012 年 1 月 3 日 目录学生信息管理系统设计姓 名 李 富 荣班 级 09 网 络 1 班学 号 20090504113课 程 名 称 数 据 库 原 理 及 应 用指 导 教 师 王 建 颖一 概述.11.1 目的与要求.11.2 设计环境1二 需求分析12.1 系统功能要求设计.12.2 系统模块设计12.3 数据字典2三 概念模型设计4四 逻辑和物理结构设计.44.1 由系统 ER 图转化而得到的关系模式54.2 确定关系模型的存取方法54.3 确定数据库的存储结构55.1 数据库的实施5五 数据库的实施与维护55.1 数据库的实施65.2 部分操

2、作截图255.3 数据库的维护.27六 总结27第- 1 - -页学生信息管理系统一 概述1.1 目的与要求随着科技的发展,基本上所有的具有一定数量数据的机构都开始使用计算机数据库来做管理。几乎所有学校也都已经在使用计算机管理数据的机制,大大减少了学校学生成绩管理的工作量。该课程设计要求设计一个学生成绩的数据库管理系统,数据库中要求包含学生的基本信息,学科基本信息,以及学生所学课程的考试成绩。要方便学生进行成绩查询,通过该课程设计,应该达到把数据库理论知识更加的巩固加深,加强动手能力与实践能力,学以致用,与现实生活中的应用充分的结合起来。1.2 设计环境 Microsoft SQL Serve

3、r 2000 Microsoft Visual C+ 6.0二 需求分析2.1 系统功能要求设计此系统实现如下系统功能:(1)使得学生的成绩管理工作更加清晰、条理化、自动化。(2)通过用登录系统,查询学生基本信息,学生所选课程成绩,添加或删除等功能。 容易地完成学生信息的查询操作。(3) 设计人机友好界面,功能安排合理,操作使用方便,并且进一步考虑系统在安全性,完整性,并发控制,备份和恢复等方面的功能要求。2.2 系统模块设计成绩管理系统大体可以分成二大模块如, 一是学生的基本信息模块,里面应该包含学生的各方面的基本信息;再者便是课程管理模块, 在该模块中应该包含有对学生成绩信息的查询和处理,

4、如平均成绩、最好成绩、最差成绩以及不及格学生的统计等功能模块;再其次还有教师、课程等相关信息的模块;可以得到系统流程图:第- 2 - -页2.3 数据字典数据项是数据库的关系中不可再分的数据单位,下表分别列出了数据的名称、数据类型、长度、取值能否为空。利用 SQL Server 2000 建立“学生选课”数据库,其基本表清单及表结构描述如下:数据库中用到的表:数据库表名关系模式名称备注Student 学生 学生个人信息表Course 课程 课程基本信息表Class 班级 班级成绩信息表SC 学生选课 学生选课信息SC 基本情况数据表,结构如下:字段名 字段类 Not Null 说明登陆失败班级

5、信息 学生信息退出系统用户验证教师信息登陆成功选课信息学生成绩查询课程信息第- 3 - -页型SC _sno Char Primary key 学号Student _Cno char Primary key 课程号Student _Gradeint not null 成绩Student 表信息Student _Sno char Primary key 学号Student _Sname varchar not null 姓名Student _Ssex char not null 性别Student _Sage int not null 年龄Student _SClno char not null

6、 班级号course 数据表,结构如下:字段名 字段类型 约束控制 说明C ourse_cnochar 主键(primary key)课程号C ourse_cnamevarchar reference 课程名C ourse_cpnochar not null 先修课课号C ourse_ccreditint not null 学分Course ctnochar not null 教师号Class 情况数据表,结构如下:字段名 字段类型 约束控制 说明C lass clno char primary key 班级号C lass varchar not null 班级名称第- 4 - -页clnam

7、e三 概念模型设计由需求分析的结果可知,本系统设计的实体包括:(1)学生基本信息:(学号,姓名,性别,年龄,班级号,成绩) 。(2)课程基本信息:( 课程名,课程号,先修课课号,教师号,学分) 。 这些实体间的联系包括:(1)每位学生可以学习多门课程,每门课程可供多位学生学习。由上述分析可得到系统的 ER 图:学分性别 班级号班级号班级成绩年龄四 逻辑和物理结构设计4.1 由系统 ER 图转化而得到的关系模式如下:学号班级 课程号先修棵名称课程名名成绩课程教师号学生姓名第- 5 - -页(1)学生(学号,姓名,性别,年龄,班级号)(2)课程(课程号,课程名,先修课程号,学分,教师号) ,其中主

8、关键字为课程号;(3)班级(班级号,班级成绩)其中主关键字为班级号。可以与学生关系模式合并为:学生(课程号号,成绩,班级号,班级成绩) 。4.2 确定关系模型的存取方法在将概念模型转换成物理模型之后,我们可以对物理模型进行设计,双击物理模型的关系,可以对该关系的名称、注释等信息进行查询。可对该关系的属性列进行设计,可分别设置其名称、码、数据类型以及主码、是否为空等。在实际设计中最常用的存取方法是索引发,使用索引可以大大减少数据的查询时间,在建立索引时应遵循:在经常需要搜索的列上建立索引; 在主关键字上建立索引;在经常用于连接的列上建立索引,即在外键上建立索引;在经常需要根据范围进行搜索的列上创

9、建索引,因为索引已经排序,其指定的范围是连续的等规则。才能充分利用索引的作用避免因索引引起的负面作用。4.3 确定数据库的存储结构确定数据库的存储结构主要指确定数据的存放位置和存储结构,包括确定关系、索引、日志、备份等的存储安排及存储结构,以及确定系统存储参数的配置。因为该成绩管理系统的数据量小, ,所以我们只用把数据存储在使用的电脑硬盘上,不用作更多的安排。(1) 创建学生基本信息表:下图显示了学生,课程和成绩三个关系的物理设计其中课程号与学号号分别为关系的主码。第- 6 - -页五 数据库的实施与维护5.1 数据库的实施:此阶段主要任务包括创建数据库,加载初始数据,数据库试运行,数据库的安

10、全性和完整性控制数据库的备份与恢复,数据库性能的监督分析和改仅,数据库的重组和重构等。首先在数据库中建立一个学生成绩管理系统数据库,然后新建一个数据源。主要代码如下:void CDialogSTU:Add()_variant_t var;CString str;UpdateData(true);if(m_StuID.IsEmpty() |atof(m_StuID)=0)AfxMessageBox(“请重新输入正确的学生学号“);return;if(m_ClaID.IsEmpty() |atof(m_ClaID)=0)AfxMessageBox(“请重新输入正确的班级号“);return;if(

11、!m_pRecordsetCLA-adoBOF)m_pRecordsetCLA-MoveFirst();while(!m_pRecordsetCLA-adoEOF) /比较将要加入的班级号,查看该班第- 7 - -页级号是否在班级表中存在var=m_pRecordsetCLA-GetCollect(“Clno“);str=(LPCSTR)_bstr_t(var);if(atof(m_ClaID)=atof(str)break;m_pRecordsetCLA-MoveNext();if(m_pRecordsetCLA-adoEOF)AfxMessageBox(“请重新输入正确的班级号!“);re

12、turn;if(!m_pRecordset-adoBOF)m_pRecordset-MoveFirst();while(!m_pRecordset-adoEOF) /比较讲要加入的学生学号,查看该学生是否已经存在var=m_pRecordset-GetCollect(“Sno“);str=(LPCSTR)_bstr_t(var);if(atof(m_StuID)=atof(str)AfxMessageBox(“该学生已存在“);break;m_pRecordset-MoveNext();第- 8 - -页if(!m_pRecordset-adoEOF)return;elsetrym_pReco

13、rdset-AddNew();m_pRecordset-PutCollect(“Sno“,_variant_t(m_StuID);m_pRecordset-PutCollect(“Sname“,_variant_t(m_StuName);var.iVal=m_StuAge;m_pRecordset-PutCollect(“Sage“,var.iVal);m_pRecordset-PutCollect(“Ssex“,_variant_t(m_StuSex);m_pRecordset-PutCollect(“Sclno“,_variant_t(m_ClaID);m_pRecordset-Updat

14、e();m_pRecordset-MoveFirst();m_grid.DeleteAllItems();AddToGrid();m_pRecordset-MoveLast();AfxMessageBox(“插入成功!“);catch(_com_error *e)AfxMessageBox(e-ErrorMessage();void CDialogSTU:Modify()_variant_t var;第- 9 - -页CString str;UpdateData(true);if(m_StuID=“ | atof(m_StuID)=0)AfxMessageBox(“学号不能为空“);retur

15、n;if(m_ClaID.IsEmpty() |atof(m_ClaID)=0)AfxMessageBox(“请重新输入正确的班级号“);return;if(!m_pRecordsetCLA-adoBOF)m_pRecordsetCLA-MoveFirst();while(!m_pRecordsetCLA-adoEOF) /比较将要加入的班级号,查看该班级号是否在班级表中存在var=m_pRecordsetCLA-GetCollect(“Clno“);str=(LPCSTR)_bstr_t(var);if(atof(m_ClaID)=atof(str)break;m_pRecordsetCLA

16、-MoveNext();if(m_pRecordsetCLA-adoEOF)AfxMessageBox(“请输入正确的班级号“);return;第- 10 - -页elsetrym_pRecordset-PutCollect(“Sno“,_variant_t(m_StuID);m_pRecordset-PutCollect(“Sname“,_variant_t(m_StuName);var.iVal=m_StuAge;m_pRecordset-PutCollect(“Sage“,var.iVal);m_pRecordset-PutCollect(“Ssex“,_variant_t(m_StuS

17、ex)m_pRecordset-PutCollect(“Sclno“,_variant_t(m_ClaID);m_pRecordset-Update();m_pRecordset-MoveFirst();m_grid.DeleteAllItems();AddToGrid();m_pRecordset-MoveLast();AfxMessageBox(“修改成功!“);catch(_com_error *e)AfxMessageBox(e-ErrorMessage();void CDialogSTU:OnButtonNext() / TODO: Add your control notifica

18、tion handler code herem_pRecordset-MoveNext();_variant_t var;第- 11 - -页CString str;if(m_pRecordset-adoEOF)MessageBox(“已经是末记录!“);m_pRecordset-MoveLast();tryvar=m_pRecordset-GetCollect(“Sno“);str=(LPCSTR)_bstr_t(var);m_StuID=str;var=m_pRecordset-GetCollect(“Sname“);str=(LPCSTR)_bstr_t(var);m_StuName=s

19、tr;var =m_pRecordset-GetCollect(“Sage“);m_StuAge=var.iVal; var=m_pRecordset-GetCollect(“Ssex“);str=(LPCSTR)_bstr_t(var);m_StuSex=str;var=m_pRecordset-GetCollect(“Sclno“);str=(LPCSTR)_bstr_t(var);m_ClaID=str;UpdateData(false);catch(_com_error *e)AfxMessageBox(e-ErrorMessage();BOOL CDialogCOU:OnInitDi

20、alog() 第- 12 - -页CDialog:OnInitDialog();/ TODO: Add extra initialization herem_grid.SetExtendedStyle(LVS_EX_FLATSB|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE|LVS_EX_GRIDLINES);m_grid.InsertColumn(0,“课程号“,LVCFMT_LEFT,100,0);m_grid.InsertColumn(1,“课程名“,LVCFMT_LEFT,100,0);m_grid

21、.InsertColumn(2,“先修课课号“,LVCFMT_LEFT,100,0);m_grid.InsertColumn(3,“学分“,LVCFMT_LEFT,100,0);m_grid.InsertColumn(4,“教师号“,LVCFMT_LEFT,100,0);m_pRecordset.CreateInstance(_uuidof(Recordset);m_pRecordsetCOU.CreateInstance(_uuidof(Recordset);m_pRecordsetSC.CreateInstance(_uuidof(Recordset);m_pRecordsetTno.Cr

22、eateInstance(_uuidof(Recordset);m_pRecordsetCno.CreateInstance(_uuidof(Recordset);/打开 Student 表OpenCOURSES();catch(_com_error *e)AfxMessageBox(e-ErrorMessage();return TRUE; / return TRUE unless you set the focus to a control/ EXCEPTION: OCX Property Pages should return FALSEvoid CDialogCOU:Add()_var

23、iant_t var;CString str;第- 13 - -页UpdateData(true);if(m_CouID=“|atof(m_CouID)=0)AfxMessageBox(“请重新输入正确的课程号“);return;if(m_TID=“|atof(m_TID)=0)AfxMessageBox(“请重新输入正确的教师号“);return;if(m_TID=“|atof(m_TID)=0)AfxMessageBox(“请重新输入正确的先修课课程号“);return;void CDialogCOU:Modify() /存在 1 个问题,当先修课为 11,12 时会有异常_variant

24、_t var;CString str,strb;UpdateData(true);if(m_CouID=“ | atof(m_CouID)=0)AfxMessageBox(“课程号不能为空“);return;if(m_TID=“ | atof(m_TID)=0)第- 14 - -页AfxMessageBox(“教师号不能为空“);return;if(/*m_CouPno=“ | */atof(m_CouPno)=0)AfxMessageBox(“先修课课程号不能为 0“);return;if(!m_pRecordsetTno-adoBOF)m_pRecordsetTno-MoveFirst()

25、;while(!m_pRecordsetTno-adoEOF) var=m_pRecordsetTno-GetCollect(“Tno“);str=(LPCSTR)_bstr_t(var);if(atof(m_TID)=atof(str)break;m_pRecordsetTno-MoveNext();if(m_pRecordsetTno-adoEOF)AfxMessageBox(“请输入正确的教师号“);return;if(!m_pRecordsetCno-adoBOF)m_pRecordsetCno-MoveFirst();第- 15 - -页while(!m_pRecordsetCno-

26、adoEOF) var=m_pRecordsetCno-GetCollect(“Cno“);strb=(LPCSTR)_bstr_t(var);if(atof(m_CouPno)=atof(strb)break;m_pRecordsetCno-MoveNext();if(m_pRecordsetCno-adoEOF)AfxMessageBox(“请输入正确的先修课课程号“);return;elsetrym_pRecordset-PutCollect(“Cno“,_variant_t(m_CouID);m_pRecordset-PutCollect(“Cname“,_variant_t(m_Co

27、uName);m_pRecordset-PutCollect(“Cpno“,_variant_t(m_CouPno);var.iVal=m_CouCredit;m_pRecordset-PutCollect(“Ccredit“,var.iVal);m_pRecordset-PutCollect(“CTno“,_variant_t(m_TID);第- 16 - -页m_pRecordset-Update();m_pRecordset-MoveFirst();m_grid.DeleteAllItems();AddToGrid();m_pRecordset-MoveLast();AfxMessage

28、Box(“修改成功!“);catch(_com_error *e)AfxMessageBox(e-ErrorMessage();void CDialogCLA:Add()_variant_t var;CString str;UpdateData(true);if(m_ClaID=“|atof(m_ClaID)=0)AfxMessageBox(“请重新输入正确的课程号“);return;if(atof(m_ClaID)!=0 while(!m_pRecordset-adoEOF) /比较讲要加入的学生学号,查看该学生是否已经存在var=m_pRecordset-GetCollect(“Clno“

29、);str=(LPCSTR)_bstr_t(var);if(atof(m_ClaID)=atof(str)AfxMessageBox(“该班级已存在“);break;m_pRecordset-MoveNext();if(!m_pRecordset-adoEOF)return;elsetrym_pRecordset-AddNew();m_pRecordset-PutCollect(“Clno“,_variant_t(m_ClaID);m_pRecordset-PutCollect(“Clname“,_variant_t(m_ClaName);m_pRecordset-Update();m_pRe

30、cordset-MoveFirst();m_grid.DeleteAllItems();AddToGrid();第- 18 - -页m_pRecordset-MoveLast();AfxMessageBox(“插入成功!“);catch(_com_error *e)AfxMessageBox(e-ErrorMessage();void CDialogCLA:Delete()_variant_t var;CString str,stra,strb;UpdateData(true);if(m_ClaID=“ | atof(m_ClaID)=0)MessageBox(“请输入要删除的班级号!“);r

31、eturn;if(atof(m_ClaID)!=0 while(!m_pRecordset-adoEOF) /比较讲要加入的学生学号,查看该学生是否已经存在var=m_pRecordset-GetCollect(“Clno“);str=(LPCSTR)_bstr_t(var);if(atof(m_ClaID)=atof(str)第- 19 - -页strb.Format(“SELECT * FROM Student where SClno=%s“,m_ClaID);try/从 SQL 数据库中打开 Student 表m_pRecordsetSTU-Open(strb.AllocSysStrin

32、g(),theApp.m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);if(!m_pRecordsetSTU-adoEOF)AfxMessageBox(“此数据正在被表外数据使用,不能删除!“);m_pRecordsetSTU-Close();return;catch(_com_error *e)AfxMessageBox(e-ErrorMessage();m_pRecordsetSTU-Close();m_pRecordset-Delete(adAffectCurrent);m_pRecord

33、set-Update();m_pRecordset-MoveFirst();m_grid.DeleteAllItems();AddToGrid();m_pRecordset-MoveLast();第- 20 - -页if(m_pRecordset-adoBOF)AfxMessageBox(“表内数据已经为空“);m_btnAdd.SetState(true);m_btnQuery.EnableWindow(FALSE);m_btnDelete.EnableWindow(FALSE);m_btnModify.EnableWindow(FALSE);m_btnFirst.EnableWindow(

34、FALSE);m_btnPre.EnableWindow(FALSE);m_btnNext.EnableWindow(FALSE);m_btnLast.EnableWindow(FALSE);m_btnOK.SetFocus();break;m_pRecordset-MoveNext();if(m_pRecordset-adoEOF)AfxMessageBox(“不存在该班级号,请重新输入正确的学号“);void CDialogCLA:Modify()_variant_t var;UpdateData(true);第- 21 - -页if(m_ClaID=“ | atof(m_ClaID)=0

35、)AfxMessageBox(“学号不能为空“);return;trym_pRecordset-PutCollect(“Clno“,_variant_t(m_ClaID);m_pRecordset-PutCollect(“Clname“,_variant_t(m_ClaName);m_pRecordset-Update();m_pRecordset-MoveFirst();m_grid.DeleteAllItems();AddToGrid();m_pRecordset-MoveLast();AfxMessageBox(“修改成功!“);catch(_com_error *e)AfxMessag

36、eBox(e-ErrorMessage();void CDialogCLA:OnButtonFirst() / TODO: Add your control notification handler code herem_pRecordset-MoveFirst();_variant_t var;CString str;第- 22 - -页tryvar=m_pRecordset-GetCollect(“Clno“);str=(LPCSTR)_bstr_t(var);m_ClaID=str;var=m_pRecordset-GetCollect(“Clname“);str=(LPCSTR)_bs

37、tr_t(var);m_ClaName=str;UpdateData(false);catch(_com_error *e)AfxMessageBox(e-ErrorMessage();void CDialogCLA:OnButtonPre() / TODO: Add your control notification handler code herem_pRecordset-MovePrevious();_variant_t var;CString str;if(m_pRecordset-adoBOF)MessageBox(“已经是第一条记录!“);m_pRecordset-MoveFir

38、st();第- 23 - -页tryvar=m_pRecordset-GetCollect(“Clno“);str=(LPCSTR)_bstr_t(var);m_ClaID=str;var=m_pRecordset-GetCollect(“Clname“);str=(LPCSTR)_bstr_t(var);m_ClaName=str;UpdateData(false);catch(_com_error *e)AfxMessageBox(e-ErrorMessage();void CDialogCLA:OnButtonNext() / TODO: Add your control notific

39、ation handler code herem_pRecordset-MoveNext();_variant_t var;CString str;if(m_pRecordset-adoEOF)MessageBox(“已经是末记录!“);m_pRecordset-MoveLast();tryvar=m_pRecordset-GetCollect(“Clno“);第- 24 - -页str=(LPCSTR)_bstr_t(var);m_ClaID=str;var=m_pRecordset-GetCollect(“Clname“);str=(LPCSTR)_bstr_t(var);m_ClaNam

40、e=str;UpdateData(false);catch(_com_error *e)AfxMessageBox(e-ErrorMessage();void CDialogCLA:OnButtonLast() / TODO: Add your control notification handler code herem_pRecordset-MoveLast();_variant_t var;CString str;tryvar=m_pRecordset-GetCollect(“Clno“);str=(LPCSTR)_bstr_t(var);m_ClaID=str;var=m_pRecor

41、dset-GetCollect(“Clname“);str=(LPCSTR)_bstr_t(var);m_ClaName=str;UpdateData(false);第- 25 - -页catch(_com_error *e)AfxMessageBox(e-ErrorMessage();5.2 部分操作截图:下图显示了学生登陆系统进行查询时界面:下图显示了进行班级查询时界面:查找班级号为 9 的班级名添加班级号为 10,班级名为信电学院添加前第- 26 - 页添加成功添加后查找排列最前的班级查找最后的班级号查找学号为 200215132 学生的个人信息第- 27 - 页查找排在最后的学生信息5.3 数据库的维护当试运行数据库合格后,数据库开发设计的工作就基本完成了,接下来就是正式运行中的调试,应为该系统比较简单,数据量小,数据库中几乎不会发生什么大的变化,但是还是需要做好数据的备份,在 sqlserver 中我们可以利用备份数据库的功能对已经设计好的数据做备份,如果数据库受到破坏或系统故障,我们便可轻松的利用备份文件恢复数据库的数据。当然也可以利用其他各种方法进行数据维护。六 总结进一步深入理解数据库设计的整个过程,该学生选课系统的需求分析、数据库概念结构设计有关内容等。掌握使用前台程序设计技术 VC 和 SQL Server 结合设计

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报