数据库课程设计学生成绩管理系统.docx
- 文档编号:30555544
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:35
- 大小:222.61KB
数据库课程设计学生成绩管理系统.docx
《数据库课程设计学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《数据库课程设计学生成绩管理系统.docx(35页珍藏版)》请在冰豆网上搜索。
数据库课程设计学生成绩管理系统
得分:
课程设计报告
学生信息管理系统设计
姓名
李富荣
班级
09网络1班
学号
20090504113
课程名称
数据库原理及应用
指导教师
王建颖
2012年1月3日
一概述…………………………………………………….1
1.1目的与要求……………………………………………….1
1.2设计环境…………………………………………………..1
二需求分析…………………………………………………..1
2.1系统功能要求设计………………………………………….1
2.2系统模块设计…………………………………………………1
2.3数据字典………………………………………………………2
三概念模型设计………………………………………………..4
四逻辑和物理结构设计……………………………………….4
4.1由系统E—R图转化而得到的关系模式………………5
4.2确定关系模型的存取方法………………………………..5
4.3确定数据库的存储结构…………………………………..5
5.1数据库的实施……………………………………………5
五数据库的实施与维护……………………………………..5
5.1数据库的实施………………………………………………6
5.2部分操作截图…………………………………………………25
5.3数据库的维护……………………………………………….27
六总结……………………………………………………………27
学生信息管理系统
一概述
1.1目的与要求
随着科技的发展,基本上所有的具有一定数量数据的机构都开始使用计算机数据库来做管理。
几乎所有学校也都已经在使用计算机管理数据的机制,大大减少了学校学生成绩管理的工作量。
该课程设计要求设计一个学生成绩的数据库管理系统,数据库中要求包含学生的基本信息,学科基本信息,以及学生所学课程的考试成绩。
要方便学生进行成绩查询,通过该课程设计,应该达到把数据库理论知识更加的巩固加深,加强动手能力与实践能力,学以致用,与现实生活中的应用充分的结合起来。
1.2设计环境
① MicrosoftSQLServer2000
② MicrosoftVisualC++6.0
二需求分析
2.1系统功能要求设计
此系统实现如下系统功能:
(1)使得学生的成绩管理工作更加清晰、条理化、自动化。
(2)通过用登录系统,查询学生基本信息,学生所选课程成绩,添加或删除等功能。
容易地完成学生信息的查询操作。
(3)设计人机友好界面,功能安排合理,操作使用方便,并且进一步考虑系统在安全性,完整性,并发控制,备份和恢复等方面的功能要求。
2.2系统模块设计
成绩管理系统大体可以分成二大模块如,一是学生的基本信息模块,里面应该包含学生的各方面的基本信息;再者便是课程管理模块,在该模块中应该包含有对学生成绩信息的查询和处理,如平均成绩、最好成绩、最差成绩以及不及格学生的统计等功能模块;再其次还有教师、课程等相关信息的模块;可以得到系统流程图:
2.3数据字典
数据项是数据库的关系中不可再分的数据单位,下表分别列出了数据的名称、数据类型、长度、取值能否为空。
利用SQLServer2000建立“学生选课”数据库,其基本表清单及表结构描述如下:
数据库中用到的表:
数据库表名
关系模式名称
备注
Student
学生
学生个人信息表
Course
课程
课程基本信息表
Class
班级
班级成绩信息表
SC
学生选课
学生选课信息
SC基本情况数据表,结构如下:
字段名
字段类型
NotNull
说明
SC_sno
Char
Primarykey
学号
Student_Cno
char
Primarykey
课程号
Student_Grade
int
notnull
成绩
Student表信息
Student_Sno
char
Primarykey
学号
Student_Sname
varchar
notnull
姓名
Student_Ssex
char
notnull
性别
Student_Sage
int
notnull
年龄
Student_SClno
char
notnull
班级号
course数据表,结构如下:
字段名
字段类型
约束控制
说明
Course_cno
char
主键(primarykey)
课程号
Course_cname
varchar
reference
课程名
Course_cpno
char
notnull
先修课课号
Course_ccredit
int
notnull
学分
Coursectno
char
notnull
教师号
Class情况数据表,结构如下:
字段名
字段类型
约束控制
说明
Classclno
char
primarykey
班级号
Classclname
varchar
notnull
班级名称
三概念模型设计
由需求分析的结果可知,本系统设计的实体包括:
(1)学生基本信息:
(学号,姓名,性别,年龄,班级号,成绩)。
(2)课程基本信息:
(课程名,课程号,先修课课号,教师号,学分)。
这些实体间的联系包括:
(1)每位学生可以学习多门课程,每门课程可供多位学生学习。
由上述分析可得到系统的E—R图:
四逻辑和物理结构设计
4.1由系统E—R图转化而得到的关系模式如下:
(1)学生(学号,姓名,性别,年龄,班级号)
(2)课程(课程号,课程名,先修课程号,学分,教师号),其中主关键字为课程号;
(3)班级(班级号,班级成绩)其中主关键字为班级号。
可以与学生关系模式合并为:
学生(课程号号,成绩,班级号,班级成绩)。
4.2确定关系模型的存取方法
在将概念模型转换成物理模型之后,我们可以对物理模型进行设计,双击物理模型的关系,可以对该关系的名称、注释等信息进行查询。
可对该关系的属性列进行设计,可分别设置其名称、码、数据类型以及主码、是否为空等。
在实际设计中最常用的存取方法是索引发,使用索引可以大大减少数据的查询时间,在建立索引时应遵循:
在经常需要搜索的列上建立索引; 在主关键字上建立索引;在经常用于连接的列上建立索引,即在外键上建立索引;在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的等规则。
才能充分利用索引的作用避免因索引引起的负面作用。
4.3确定数据库的存储结构
确定数据库的存储结构主要指确定数据的存放位置和存储结构,包括确定关系、索引、日志、备份等的存储安排及存储结构,以及确定系统存储参数的配置。
因为该成绩管理系统的数据量小,,所以我们只用把数据存储在使用的电脑硬盘上,不用作更多的安排。
(1)创建学生基本信息表:
下图显示了学生,课程和成绩三个关系的物理设计其中课程号与学号号分别为关系的主码。
五数据库的实施与维护
5.1数据库的实施:
此阶段主要任务包括创建数据库,加载初始数据,数据库试运行,数据库的安全性和完整性控制数据库的备份与恢复,数据库性能的监督分析和改仅,数据库的重组和重构等。
首先在数据库中建立一个学生成绩管理系统数据库,然后新建一个数据源。
主要代码如下:
voidCDialogSTU:
:
Add()
{
_variant_tvar;
CStringstr;
UpdateData(true);
if(m_StuID.IsEmpty()||atof(m_StuID)==0)
{
AfxMessageBox("请重新输入正确的学生学号");
return;
}
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->MoveNext();
}
if(m_pRecordsetCLA->adoEOF)
{
AfxMessageBox("请重新输入正确的班级号!
");
return;
}
}
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();
}
if(!
m_pRecordset->adoEOF)
{return;
}
else
{
try
{
m_pRecordset->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->Update();
m_pRecordset->MoveFirst();
m_grid.DeleteAllItems();
AddToGrid();
m_pRecordset->MoveLast();
AfxMessageBox("插入成功!
");
}
catch(_com_error*e)
{
AfxMessageBox(e->ErrorMessage());
}
}
}
}
voidCDialogSTU:
:
Modify()
{
_variant_tvar;
CStringstr;
UpdateData(true);
if(m_StuID==""||atof(m_StuID)==0)
{
AfxMessageBox("学号不能为空");
return;
}
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->MoveNext();
}
if(m_pRecordsetCLA->adoEOF)
{
AfxMessageBox("请输入正确的班级号");
return;
}
else
{
try
{
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->Update();
m_pRecordset->MoveFirst();
m_grid.DeleteAllItems();
AddToGrid();
m_pRecordset->MoveLast();
AfxMessageBox("修改成功!
");
}
catch(_com_error*e)
{
AfxMessageBox(e->ErrorMessage());
}
}
}
}
voidCDialogSTU:
:
OnButtonNext()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_pRecordset->MoveNext();
_variant_tvar;
CStringstr;
if(m_pRecordset->adoEOF)
{
MessageBox("已经是末记录!
");
m_pRecordset->MoveLast();
}
try
{
var=m_pRecordset->GetCollect("Sno");
str=(LPCSTR)_bstr_t(var);
m_StuID=str;
var=m_pRecordset->GetCollect("Sname");
str=(LPCSTR)_bstr_t(var);
m_StuName=str;
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());
}
}
BOOLCDialogCOU:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//TODO:
Addextrainitializationhere
m_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.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.CreateInstance(__uuidof(Recordset));
m_pRecordsetCno.CreateInstance(__uuidof(Recordset));
//打开Student表
OpenCOURSES();
catch(_com_error*e)
{
AfxMessageBox(e->ErrorMessage());
}
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
//EXCEPTION:
OCXPropertyPagesshouldreturnFALSE
}
voidCDialogCOU:
:
Add()
{
_variant_tvar;
CStringstr;
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;
}
voidCDialogCOU:
:
Modify()//存在1个问题,当先修课为11,12时会有异常
{
_variant_tvar;
CStringstr,strb;
UpdateData(true);
if(m_CouID==""||atof(m_CouID)==0)
{
AfxMessageBox("课程号不能为空");
return;
}
if(m_TID==""||atof(m_TID)==0)
{
AfxMessageBox("教师号不能为空");
return;
}
if(/*m_CouPno==""||*/atof(m_CouPno)==0)
{
AfxMessageBox("先修课课程号不能为0");
return;
}
if(!
m_pRecordsetTno->adoBOF)
{
m_pRecordsetTno->MoveFirst();
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();
while(!
m_pRecordsetCno->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;
}
else
{
try
{
m_pRecordset->PutCollect("Cno",_variant_t(m_CouID));
m_pRecordset->PutCollect("Cname",_variant_t(m_CouName));
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));
m_pRecordset->Update();
m_pRecordset->MoveFirst();
m_grid.DeleteAllItems();
AddToGrid();
m_pRecordset->MoveLast();
AfxMessageBox("修改成功!
");
}
catch(_com_error*e)
{
AfxMessageBox(e->ErrorMessage());
}
}
}
}
}
voidCDia
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 课程设计 学生 成绩管理系统