1、1. 课程设计的目的与要求1.1设计目的设计一个简单的教学管理系统,要求存储学生基本情况、课程基本情况,教师授课情况与学生成绩记录等,提供成绩录入、信息查询等功能以满足日常教学管理需要。对学生的成绩的管理、查询学生的各科成绩的学生成绩管理系统。该系统可以帮助我们更方便的管理学生的成绩,替代了以前的手工操作管理学生的成绩,节约我们珍贵的时间。而且老师和学生可以以不同个的身份登录,获得不同的操作权限,有效的提高教学管理系统的工作效率。1.2设计要求(1)软件开发环境:操作系统:Windows 7;数据库使用软件:Microsoft Office Access 2003开发工具: Microsoft
2、 Visual C+6.0(2) 功能需求按照提供的各表的数据结构和数据创建数据库与表实现学生基本情况、课程基本情况、教师授课表情况及学生成绩的数据录入与编辑、删除等。能够按姓名查询教师授课情况。1.3 系统总体设计的体系结构图 设计系统的体系结构图见下页 教学管理系统 教师管理系统 学生管理系统 学生基本 课程管 信息管理 理系统 课程基本 学生课程 信息管理 成绩管理 图1. 设计系统的体系结构图2. 数据库设计数据库技术是信息资源管理最有效的手段,它是指对于一个给定的应用环境,利用现有的数据库管理系统构造最优的数据库模式,建立数据库及其应用系统,有效存储数据,满足用户信息要求和处理要求。
3、本系统的数据库是采用Microsoft Office Access 2003设计的。数据库设计分为6个阶段:需求分析阶段、概念结构设计阶段、逻辑结构设计阶段、数据库物理设计阶段、数据库实施阶段、数据库运行和维护阶段。数据库应用系统经过调试运行后即可投入正式运行。在数据库系统运行过程中,必须不断地对其进行评价、调整与修改。设计一个完善的数据库应用系统不可能一蹴而就,它往往是上述6个阶段的不断反复。2.1 系统数据库概念结构设计2.1.1 局部E-R图 将需求分析得到的用户需求抽象为信息结构即概念模型的过程就是概念结构设计。它是整个数据库设计的关键所在。它是现实世界的一个真实模型,表达自然、直观,
4、又易于理解。根据学生成绩管理的需求分析建立局部和全局ER图,如下所示。(1)局部ER设计由在系统中描述课程实体的相关信息有专业号,班级号,设计该实体ER图如图2所示。课程课程号课程名 学 时图2 实体课程局部ER图由在系统中描述教师实体的相关信息教师姓名,课程号,授课日期,设计该实体ER图如图3所示:系别教师教师姓名性别图3 实体教师局部ER图 年龄学生学生姓名学号系别 班级 性别由在系统中描述学生实体的相关信息有学号,学生姓名,系别,班级,性别,年龄,设计该实体ER图如图4所示: 图4 实体课程局部ER图 2.1.2 系统全局ER图学生系别图8 全局ER图图8 全局ER图年龄图8 全局ER图
5、图8 全局ER图成绩学号姓名教师姓名性别学生班级讲授教师选修教师系别性别课程课程号学时课程名图6 全局ER图2.2 数据库逻辑设计根据系统的需要还要全局ER图向关系模型的转换,要遵循以下规则: (1)一个实体转换为一个关系模型式。实体的属性就是关系的属性,实体的键就是关系的键。如学生实体可以转换为如下关系模式,其中学号为学生关系键。学生(学号,学生姓名,性别,系别,班级,年龄)同样课程、教师分别转换为一个关系模式,如下:课程(课程号,课程名,学时)教师(教师姓名,教师系别,性别) (2)一个m:n联系转换为一个关系模式。与该联系相连的各实体的键以及联系本身的属性均转换为关系的属性,而关系的键为
6、各实体键的组合。如在成绩联系是一个m:n联系,可以将它转换为如下关系模式,其中学号与课程号为关系的组合键。成绩(学号,课程号,成绩)2.3 创建系统数据库与表创建数据库的过程实际上就是为数据库设计名称,设计所占用的存储空间和存放文件的位置过程等。使用Microsoft Office Access 2003创建数据库,其中数据库中包含了5个表。(1) 打开Microsoft Office Access 2003,单击文件新建。(2) 在右边新建文件夹菜单下,选择“空数据库”菜单选项,单击它,系统会显示新建数据库的位置及名称对话框。(3) 在文件名一栏输入一个数据库名为“JWXT(教学管理系统)”
7、,点击“创建”。(4) 在出现的对话框下选择“对象”“表”“使用设计器创建表”,然后输入所需创建的表的列名、数据类型、长度、是否允许为空、默认值、主键。(5) 然后点击各表名进行数据的添加、修改、删除。 在此系统数据库中设计了6个表,分别是学生信息表(Student)、课程信息表(Course)、 教师信息表(Teacher)、教师授课表(Teachercourse)、学生选课表(Selectcourse)、学生成绩表(Score)。具体数据定义和内容设计如下面表1表14所示。学生信息表(Student)结构:表1列名数据类型长度是否允许为空说明sno(学号)文本5N主键sname(姓名)文本
8、10Nssex(性别)文本2Ysdept(系别)文本10Nsclass(班级)文本2Nsage(年龄)数字4Y 学生信息表(Student)内容:表2snosname sdeptsclassssexsage0001小花电子系01女190002小华电子系01男200003小小电子系01男200004小兰电子系02女210005小许电子系02男20课程信息表(Course)结构:表3 列名数据类型长度是否允许为空说明cno(课程号) 文本3N主键cname(课程名)文本16Nctime(学时)数字Y课程信息表(Course)内容:表4cnocnamectime001电路理论40002信号与系统48
9、003工程磁场56F01电机学72F02管理学32G01电子设计自动化40G02日语入门32教师信息表(Teacher)结构:表5列名数据类型长度是否允许为空说明tname(教师姓名) 文本10N主键tdept(教师系别) 文本10Ytsex(性别) 文本2Y教师信息表(teacher)内容:表6tnametdepttsex安大电力系男柴琴外语系女丁小小电子系女董会电力系女董美美电子系女罗华自动化系男杨梅经管系女教师授课表(Teachercourse)结构:表7列名数据类型长度是否允许为空说明tname(教师姓名) 文本10N主键cno(课程号) 文本5N主键time(授课日期) 文本Y教师授
10、课表(Teachercourse)内容:表8tnamecnotime安大0032014-04-05柴琴G022014-04-06丁小小0012014-03-01董会F012014-04-22董美美0022014-04-12罗华G012014-04-13杨梅F022014-04-18学生选课表(Selectcourse)结构:表9列名数据类型长度是否允许为空说明sno(学号)char5N主键cno(课程号)char5N主键学生选课表(Selectcourse)内容:表10 sno cno00010010001G0100020020002G0200030030003F020004F010005F0
11、2学生成绩表(Score)结构:表13列名数据类型长度是否允许为空说明sno(学号) 文本5N主键cno(课程号) 文本5N主键score(分数) 数字5,2Y学生成绩表(score)内容:表14snocno分数0001001980001G01890002002870002G02860003003900003F02760004F01850005F02932.4 创建数据库关系图图73应用软件的实现在Microsoft Visual C+6.0 中开发系统的第一步就是创建一个该系统的工程,来编写管理系统中的各种资源和代码。3.1 创建工程的步骤(1)打开Microsoft Visual C+6.
12、0 开发环境,在菜单中依次选择“文件”“新建”菜单。(2)在新建对话框窗口选择“工程”菜单下的“MFC AppWizard【exe】”,同时在右边选择存储路径及为工程命名,然后单击“确定”按钮。(3)在接下来出现的MFC应用程序向导步骤1中创建的应用程序类型选择单文档,语言为中文简体,接下来步骤26选择默认设置。 这样,教学管理系统工程就创建完成。3.2 向单文档窗口添加菜单项(1) 在菜单栏中依次添加菜单名“学生”和“老师”以区分学生和老师的功能(2) 在“学生”下添加菜单选项“教师授课情况”,在“教师”下分别添加菜单选项“学生情况”、“课程名基本情况”、“教师授课情况”、“学生成绩”。如图
13、8图9所示 图8图93) 对菜单项“学生情况”设置ID为ID_person,并点击建立类向导,添加单击消息函数响应,添加代码如下: void CMainFrame:Onperson() / TODO: Add your command handler code here CGS m; m.DoModal();并在该类预定义那添加头函数 #includeGS.h。“课程名基本情况”、“教师授课情况”、“学生成绩”、“教师授课查询”菜单消息响应添加同上。 3.3 对话框的设计(1) 对话框界面的设计及实现功能展示ADO数据连接。在RescoureView下打开Dialog插入几个对话框,然后对各个
14、对话框进行控件设置及界面的设计。界面设计及功能实现,如图10图14所示。图10图11(2) 对话框与数据库连接的实现1) 在文件Header File下的stdAfx.h中引入ADO库代码#import c:Program FilesCommon FilesSystemadomsado15.dll no_namespace rename(EOF,adoEOF)2) 初始化COM环境,创建连接对象在对话框类加入成员变量:ConnectionPtr m_pConnection1;并实现初始化,代码如下:CGS:OnInitDialog() AfxOleInit();m_pConnection1.C
15、reateInstance(_uuidof(Connection);m_pConnection1-Open(Provider=Microsoft.Jet.OLEDB.4.0;Data Source=jwxt.mdb,adModeUnknown); 3) 打开记录集,初始化对话框在对话框类加入成员变量:_RecordsetPtr m_pRecordset3;用ClassWizard给窗口中每个编辑框添加成员变量,本对话框添加了:m_sno,m_sname, m_sdept, m_sclass, m_ssex ,sage在对话框初始化函数CGS:OnInitDialog()中添加 m_pRecor
16、dset3.CreateInstance(_uuidof(Recordset);m_pRecordset3-Open(SELECT*FROM Student,m_pConnection1.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); 4) 对对话框中各个按钮添加消息响应函数即功能实现的代码,学生基本情况对话框各种功能的实现代码如下: 显示函数: CGS:DispRecord()/在对话框显示数据_variant_t theValue1; if(!m_pRecordset3-adoEOF) theValue1=m_pRe
17、cordset3-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); theValu
18、e1=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;UpdateDat
19、a(false); void CGS:OnButton5() /前一条函数:可以浏览数据/ TODO: Add your control notification handler code here m_pRecordset3-MovePrevious();if(m_pRecordset3-BOF)m_pRecordset3-MoveFirst();DispRecord(); void CGS:OnButton6() /后一条:可以浏览数据/ TODO: Add your control notification handler code here m_pRecordset3-MoveNext
20、(); if(m_pRecordset3-adoEOF) m_pRecordset3-MoveLast();DispRecord();void CGS:OnButton1() /录入函数:在录入数据前先点击录入/ TODO: Add your control notification handler code here RefreshData();try/ 写入各字段值m_pRecordset3-AddNew();catch(_com_error *e)AfxMessageBox(e-ErrorMessage();CGS:RefreshData()/清空函数 m_sno=;m_sname=;m
21、_sdept=;m_sclass=;m_ssex=男;m_sage=0;UpdateData(FALSE);void CGS:OnButton4() /保存函数:录入数据后,实现保存数据功能/ TODO: Add your control notification handler code hereUpdateData(TRUE); m_pRecordset3-PutCollect(sno,_bstr_t(m_sno); m_pRecordset3-PutCollect(sname,_bstr_t(m_sname); m_pRecordset3-PutCollect(sdept,_bstr_t
22、(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();void CGS:OnButton3() /删除函数:删除不要的数据/ TODO: Add your control notification handler code heretryAfxMes
23、sageBox(删除当前记录); m_pRecordset3-Delete(adAffectCurrent); m_pRecordset3-MoveNext(); if(m_pRecordset3-adoEOF) m_pRecordset3-MoveLast(); DispRecord();catch(_com_error *e)AfxMessageBox(e-ErrorMessage();void CGS:OnButton2() /编辑函数:对数据进行更改/ TODO: Add your control notification handler code hereUpdateData(TRU
24、E); 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-
25、Update(); m_pRecordset3-MoveLast();5) 上述为学生基本情况的对话框实现代码,课程基本情况、教师授课表情况及学生成绩三个个对话框的各功能实现代码与上述代码相似。6) 对于学生查询教师授课情况主要查询功能实现代码如下: void tc:OnButton1() / TODO: Add your control notification handler code here m_pRecordset.CreateInstance(_uuidof(Recordset); UpdateData(true); CString strSql; strSql.Format(SE
26、LECT*FROM Teachercourse WHERE tname=%s,m_tname);m_pRecordset-Open(strSql.AllocSysString(),m_pConnection.GetInterfacePtr(),adOpenDynamic, adLockOptimistic, adCmdText); _variant_t theValue;if(!m_pRecordset-adoEOF) theValue=m_pRecordset-GetCollect(tname); if(theValue.vt!=VT_NULL) m_tname=(char*)_bstr_t
27、(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.实现学生基本情况、课程基本情况、教师授课
28、表情况及学生成绩的数据录入与编辑、删除等。3.能够按姓名查询教师授课情况。以上功能基本实现,由于本人是初次开发软件,在知识、经验方面都存在着不足,因此,设计中必然会存在一些缺陷。但是通过这次的课程设计使我对计算机软件设计与基础这门课程有了更深刻的认识,也让我感受到了计算机软件开发工具功能的强大。这次学习过程由于技术知识与时间的限制,我只是通过基础知识设计了简单的功能,如有机会更深入的学习数据库,我会继续完善它。 课程设计完成了,首先非常感谢学校给我们这次机会,让我们扩大了知识量,弥补了知识的欠缺,进一步完善了自我。衷心的感谢老师在设计过程中对我的问题进行耐心的解答,使我的设计顺利完成。我还要感谢我的同学们,在这一阶段给了我极大的帮助。5. 参考文献1吕兵 曲宝军等编Visual C+从初学到精通,北京:电子工业出版社,2010-6