课程设计教学管理系统.docx
《课程设计教学管理系统.docx》由会员分享,可在线阅读,更多相关《课程设计教学管理系统.docx(21页珍藏版)》请在冰豆网上搜索。
课程设计教学管理系统
1.课程设计的目的与要求
1.1设计目的
设计一个简单的教学管理系统,要求存储学生基本情况、课程基本情况,教师授课情况与学生成绩记录等,提供成绩录入、信息查询等功能以满足日常教学管理需要。
对学生的成绩的管理、查询学生的各科成绩的学生成绩管理系统。
该系统可以帮助我们更方便的管理学生的成绩,替代了以前的手工操作管理学生的成绩,节约我们珍贵的时间。
而且老师和学生可以以不同个的身份登录,获得不同的操作权限,有效的提高教学管理系统的工作效率。
1.2设计要求
(1)软件开发环境:
操作系统:
Windows7;
数据库使用软件:
MicrosoftOfficeAccess2003
开发工具:
MicrosoftVisualC++6.0
(2)功能需求
按照提供的各表的数据结构和数据创建数据库与表
实现学生基本情况、课程基本情况、教师授课表情况及学生成绩的数据录入与编辑、删除等。
能够按姓名查询教师授课情况。
1.3系统总体设计的体系结构图
设计系统的体系结构图
见下页
教学管理系统
教师管理系统学生管理系统
学生基本课程管
信息管理理系统
课程基本学生课程
信息管理成绩管理
图1.设计系统的体系结构图
2.数据库设计
数据库技术是信息资源管理最有效的手段,它是指对于一个给定的应用环境,利用现有的数据库管理系统构造最优的数据库模式,建立数据库及其应用系统,有效存储数据,满足用户信息要求和处理要求。
本系统的数据库是采用MicrosoftOfficeAccess2003设计的。
数据库设计分为6个阶段:
需求分析阶段、概念结构设计阶段、逻辑结构设计阶段、数据库物理设计阶段、数据库实施阶段、数据库运行和维护阶段。
数据库应用系统经过调试运行后即可投入正式运行。
在数据库系统运行过程中,必须不断地对其进行评价、调整与修改。
设计一个完善的数据库应用系统不可能一蹴而就,它往往是上述6个阶段的不断反复。
2.1系统数据库概念结构设计
2.1.1局部E-R图
将需求分析得到的用户需求抽象为信息结构即概念模型的过程就是概念结构设计。
它是整个数据库设计的关键所在。
它是现实世界的一个真实模型,表达自然、直观,又易于理解。
根据学生成绩管理的需求分析建立局部和全局ER图,如下所示。
(1)局部E—R设计
由在系统中描述课程实体的相关信息有专业号,班级号,设计该实体ER图如图2所示。
图2实体课程局部ER图
由在系统中描述教师实体的相关信息教师姓名,课程号,授课日期,设计该实体ER图如图3所示:
图3实体教师局部ER图
由在系统中描述学生实体的相关信息有学号,学生姓名,系别,班级,性别,年龄,设计该实体ER图如图4所示:
图4实体课程局部ER图
2.1.2系统全局ER图
图6全局ER图
2.2数据库逻辑设计
根据系统的需要还要全局ER图向关系模型的转换,要遵循以下规则:
(1)一个实体转换为一个关系模型式。
实体的属性就是关系的属性,实体的键就是关系的键。
如学生实体可以转换为如下关系模式,其中学号为学生关系键。
学生(学号,学生姓名,性别,系别,班级,年龄)
同样课程、教师分别转换为一个关系模式,如下:
课程(课程号,课程名,学时)
教师(教师姓名,教师系别,性别)
(2)一个m:
n联系转换为一个关系模式。
与该联系相连的各实体的键以及联系本身的属性均转换为关系的属性,而关系的键为各实体键的组合。
如在成绩联系是一个m:
n联系,可以将它转换为如下关系模式,其中学号与课程号为关系的组合键。
成绩(学号,课程号,成绩)
2.3创建系统数据库与表
创建数据库的过程实际上就是为数据库设计名称,设计所占用的存储空间和存放文件的位置过程等。
使用MicrosoftOfficeAccess2003创建数据库,其中数据库中包含了5个表。
(1)打开MicrosoftOfficeAccess2003,单击文件—>新建。
(2)在右边新建文件夹菜单下,选择“空数据库”菜单选项,单击它,系统会显示新建数据库的位置及名称对话框。
(3)在文件名一栏输入一个数据库名为“JWXT(教学管理系统)”,点击“创建”。
(4)在出现的对话框下选择“对象”—>“表”—>“使用设计器创建表”,然后输入所需创建的表的列名、数据类型、长度、是否允许为空、默认值、主键。
(5)然后点击各表名进行数据的添加、修改、删除。
在此系统数据库中设计了6个表,分别是学生信息表(Student)、课程信息表(Course)、教师信息表(Teacher)、教师授课表(Teachercourse)、学生选课表(Selectcourse)、学生成绩表(Score)。
具体数据定义和内容设计如下面表1——表14所示。
学生信息表(Student)结构:
表1
列名
数据类型
长度
是否允许为空
说明
sno(学号)
文本
5
N
主键
sname(姓名)
文本
10
N
ssex(性别)
文本
2
Y
sdept(系别)
文本
10
N
sclass(班级)
文本
2
N
sage(年龄)
数字
4
Y
学生信息表(Student)内容:
表2
sno
sname
sdept
sclass
ssex
sage
0001
小花
电子系
01
女
19
0002
小华
电子系
01
男
20
0003
小小
电子系
01
男
20
0004
小兰
电子系
02
女
21
0005
小许
电子系
02
男
20
课程信息表(Course)结构:
表3
列名
数据类型
长度
是否允许为空
说明
cno(课程号)
文本
3
N
主键
cname(课程名)
文本
16
N
ctime(学时)
数字
Y
课程信息表(Course)内容:
表4
cno
cname
ctime
001
电路理论
40
002
信号与系统
48
003
工程磁场
56
F01
电机学
72
F02
管理学
32
G01
电子设计自动化
40
G02
日语入门
32
教师信息表(Teacher)结构:
表5
列名
数据类型
长度
是否允许为空
说明
tname(教师姓名)
文本
10
N
主键
tdept(教师系别)
文本
10
Y
tsex(性别)
文本
2
Y
教师信息表(teacher)内容:
表6
tname
tdept
tsex
安大
电力系
男
柴琴
外语系
女
丁小小
电子系
女
董会
电力系
女
董美美
电子系
女
罗华
自动化系
男
杨梅
经管系
女
教师授课表(Teachercourse)结构:
表7
列名
数据类型
长度
是否允许为空
说明
tname(教师姓名)
文本
10
N
主键
cno(课程号)
文本
5
N
主键
time(授课日期)
文本
Y
教师授课表(Teachercourse)内容:
表8
tname
cno
time
安大
003
2014-04-05
柴琴
G02
2014-04-06
丁小小
001
2014-03-01
董会
F01
2014-04-22
董美美
002
2014-04-12
罗华
G01
2014-04-13
杨梅
F02
2014-04-18
学生选课表(Selectcourse)结构:
表9
列名
数据类型
长度
是否允许为空
说明
sno(学号)
char
5
N
主键
cno(课程号)
char
5
N
主键
学生选课表(Selectcourse)内容:
表10
sno
cno
0001
001
0001
G01
0002
002
0002
G02
0003
003
0003
F02
0004
F01
0005
F02
学生成绩表(Score)结构:
表13
列名
数据类型
长度
是否允许为空
说明
sno(学号)
文本
5
N
主键
cno(课程号)
文本
5
N
主键
score(分数)
数字
5,2
Y
学生成绩表(score)内容:
表14
sno
cno
分数
0001
001
98
0001
G01
89
0002
002
87
0002
G02
86
0003
003
90
0003
F02
76
0004
F01
85
0005
F02
93
2.4创建数据库关系图
图7
3.应用软件的实现
在MicrosoftVisualC++6.0中开发系统的第一步就是创建一个该系统的工程,来编写管理系统中的各种资源和代码。
3.1创建工程的步骤
(1)打开MicrosoftVisualC++6.0开发环境,在菜单中依次选择“文件”—>“新建”菜单。
(2)在新建对话框窗口选择“工程”菜单下的“MFCAppWizard【exe】”,同时在右边选择存储路径及为工程命名,然后单击“确定”按钮。
(3)在接下来出现的MFC应用程序向导步骤1中创建的应用程序类型选择单文档,语言为中文简体,接下来步骤2~6选择默认设置。
这样,教学管理系统工程就创建完成。
3.2向单文档窗口添加菜单项
(1)在菜单栏中依次添加菜单名“学生”和“老师”以区分学生和老师的功能
(2)在“学生”下添加菜单选项“教师授课情况”,在“教师”下分别添加菜单选项“学生情况”、“课程名基本情况”、“教师授课情况”、“学生成绩”。
如图8——图9所示
图8
图9
3)对菜单项“学生情况”设置ID为ID_person,并点击建立类向导,添加单击消息函数响应,添加代码如下:
voidCMainFrame:
:
Onperson()
{
//TODO:
Addyourcommandhandlercodehere
CGSm;
m.DoModal();
}
并在该类预定义那添加头函数#include"GS.h"。
“课程名基本情况”、“教师授课情况”、“学生成绩”、“教师授课查询”菜单消息响应添加同上。
3.3对话框的设计
(1)对话框界面的设计及实现功能展示
ADO数据连接。
在RescoureView下打开Dialog插入几个对话框,然后对各个对话框进行控件设置及界面的设计。
界面设计及功能实现,如图10——图14所示。
图10
图11
(2)对话框与数据库连接的实现
1)在文件HeaderFile下的stdAfx.h中引入ADO库代码
#import"c:
\ProgramFiles\CommonFiles\System\ado\msado15.dll"no_namespacerename("EOF","adoEOF")
2)初始化COM环境,创建连接对象
在对话框类加入成员变量:
ConnectionPtrm_pConnection1;
并实现初始化,代码如下:
CGS:
:
OnInitDialog()
{
AfxOleInit();
m_pConnection1.CreateInstance(_uuidof(Connection));
m_pConnection1->Open("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=jwxt.mdb","","",adModeUnknown);
3)打开记录集,初始化对话框
在对话框类加入成员变量:
_RecordsetPtrm_pRecordset3;
用ClassWizard给窗口中每个编辑框添加成员变量,本对话框添加了:
m_sno,
m_sname,m_sdept,m_sclass,m_ssex,sage
在对话框初始化函数CGS:
:
OnInitDialog()中添加
{
m_pRecordset3.CreateInstance(_uuidof(Recordset));
m_pRecordset3->Open("SELECT*FROMStudent",m_pConnection1.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
4)对对话框中各个按钮添加消息响应函数即功能实现的代码,学生基本情况对话框各种功能的实现代码如下:
显示函数:
CGS:
:
DispRecord()//在对话框显示数据
{
_variant_ttheValue1;
if(!
m_pRecordset3->adoEOF)
{
theValue1=m_pRecordset3->GetCollect("sno");
if(theValue1.vt!
=VT_NULL)
m_sno=(char*)_bstr_t(theValue1);
theValue1=m_pRecordset3->GetCollect("sname");
if(theValue1.vt!
=VT_NULL)
m_sname=(char*)_bstr_t(theValue1);
theValue1=m_pRecordset3->GetCollect("sdept");
if(theValue1.vt!
=VT_NULL)
m_sdept=(char*)_bstr_t(theValue1);
theValue1=m_pRecordset3->GetCollect("sclass");
if(theValue1.vt!
=VT_NULL)
m_sclass=(char*)_bstr_t(theValue1);
theValue1=m_pRecordset3->GetCollect("ssex");
if(theValue1.vt!
=VT_NULL)
m_ssex=(char*)_bstr_t(theValue1);
theValue1=m_pRecordset3->GetCollect("sage");
if(theValue1.vt!
=VT_NULL)
m_sage=theValue1.iVal;
}
UpdateData(false);
}
voidCGS:
:
OnButton5()//前一条函数:
可以浏览数据
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_pRecordset3->MovePrevious();
if(m_pRecordset3->BOF)
m_pRecordset3->MoveFirst();
DispRecord();
}
voidCGS:
:
OnButton6()//后一条:
可以浏览数据
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_pRecordset3->MoveNext();
if(m_pRecordset3->adoEOF)
m_pRecordset3->MoveLast();
DispRecord();
}
voidCGS:
:
OnButton1()//录入函数:
在录入数据前先点击录入
{
//TODO:
Addyourcontrolnotificationhandlercodehere
RefreshData();
try
{
//写入各字段值
m_pRecordset3->AddNew();
}
catch(_com_error*e)
{
AfxMessageBox(e->ErrorMessage());
}
}
CGS:
:
RefreshData()//清空函数
{
m_sno="";
m_sname="";
m_sdept="";
m_sclass="";
m_ssex="男";
m_sage=0;
UpdateData(FALSE);
}
voidCGS:
:
OnButton4()//保存函数:
录入数据后,实现保存数据功能
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(TRUE);
m_pRecordset3->PutCollect("sno",_bstr_t(m_sno));
m_pRecordset3->PutCollect("sname",_bstr_t(m_sname));
m_pRecordset3->PutCollect("sdept",_bstr_t(m_sdept));
m_pRecordset3->PutCollect("sclass",_bstr_t(m_sclass));
m_pRecordset3->PutCollect("ssex",_bstr_t(m_ssex));
m_pRecordset3->PutCollect("sage",long(m_sage));
m_pRecordset3->Update();
m_pRecordset3->MoveLast();
}
voidCGS:
:
OnButton3()//删除函数:
删除不要的数据
{
//TODO:
Addyourcontrolnotificationhandlercodehere
try
{
AfxMessageBox("删除当前记录");
m_pRecordset3->Delete(adAffectCurrent);
m_pRecordset3->MoveNext();
if(m_pRecordset3->adoEOF)
m_pRecordset3->MoveLast();
DispRecord();
}
catch(_com_error*e)
{
AfxMessageBox(e->ErrorMessage());
}
}
voidCGS:
:
OnButton2()//编辑函数:
对数据进行更改
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(TRUE);
m_pRecordset3->PutCollect("sno",_bstr_t(m_sno));
m_pRecordset3->PutCollect("sname",_bstr_t(m_sname));
m_pRecordset3->PutCollect("sdept",_bstr_t(m_sdept));
m_pRecordset3->PutCollect("sclass",_bstr_t(m_sclass));
m_pRecordset3->PutCollect("ssex",_bstr_t(m_ssex));
m_pRecordset3->PutCollect("sage",long(m_sage));
m_pRecordset3->Update();
m_pRecordset3->MoveLast();
}
5)上述为学生基本情况的对话框实现代码,课程基本情况、教师授课表情况及学生成绩三个个对话框的各功能实现代码与上述代码相似。
6)对于学生查询教师授课情况主要查询功能实现代码如下:
voidtc:
:
OnButton1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_pRecordset.CreateInstance(_uuidof(Recordset));
UpdateData(true);
CStringstrSql;
strSql.Format("SELECT*FROMTeachercourseWHEREtname='%s'",m_tname);
m_pRecordset->Open(strSql.AllocSysString(),m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
_variant_ttheValue;
if(!
m_pRecordset->adoEOF)
{
theValue=m_pRecordset->GetCollect("tname");
if(theValue.vt!
=VT_NULL)
m_tname=(char*)_bstr_t(theValue);
theValue=m_pRecordset->GetCollect("cno");
if(theValue.vt!
=VT_NULL)
m_cno=(char*)_bstr_t(theValue);
theValue=m_pRecordset->GetCollect("time");
if(theValue.vt!
=VT_NULL)
m_time=(char*)_bstr_t(theValue);
}
UpdateData(FALSE);
}
4.课程设计的心得体会
在本次的课程设计中我负责实现的部分是:
1.按照提供的各表的数据结构和数据创建数据库与表
2.实现学生基本情况、课程基本情况、教师授课表情况及学生成绩的数据录入与编辑、删除等。
3.能够按姓名查询教师授课情况。
以上功能基本实现,由于本人是初次开发软件,在知识、经验方面都存在着不足,因此,设计中必然会存在一些缺陷。
但是通过这次的课程设计使我对计算机软件设计与基础这门课程有了更深刻的认识,也让我感受到了计算机软件开发工具功能的强大。
这次学习过程由于技术知识与时间的限制,我只是通过基础知识设计了简单的功能,如有机会更深入的学习数据库,我会继续完善它。
课程设计完成了,首先非常感谢学校给我们这次机会,让我们扩大了知识量,弥补了知识的欠缺,进一步完善了自我。
衷心的感谢老师在设计过程中对我的问题进行耐心的解答,使我的设计顺利完成。
我还要感谢我的同学们,在这一阶段给了我极大的帮助。
5.参考文献
[1]吕兵曲宝军等编VisualC++从初学到精通,北京:
电子工业出版社,2010-6