目 录
一、系统概述…………………………………………………………...3
1.1 目的………………………………………………………………………….3 1.2 背景………………………………………………………………………….3 1.3 范围………………………………………………………………………….3
二、需求说明…………………………………………………………...3
2.1功能分析……………………………………………………………………..3 2.2工作流图……………………………………………………………………..4 2.3数据流图……………………………………………………………………..5 2.4数据字典……………………………………………………………………..5 2.5概念模型设计(E-R图).........................................8 2.6逻辑设计……………………………………………………………………..8
三、系统设计…………………………………………………………...9
3.1软件模块结构设计............................................9 3.2 数据库设计.................................................16
四、系统的功能………………………………………………………..20
4.1 系统的主界面...............................................20 4.2 学生管理模块...............................................20 4.3 教师管理模块...............................................23 4.4 成绩管理模块...............................................25
五、全文总结与体会…………………………………………………..28 参考文献
一、系统概述
1.1 目的
往往管理学生档案信息是非常繁琐和极为重要的工作.我们在学习和工作中作出的努力怎样才能得到很好地保存与管理已经是我们所关心的问题了。为此,通过ASP+SQL技术来编写一部管理学生信息的程序来方便学生和老师。
1.2 背景
21世纪以高科技为核心的知识经济将占主导地位,国家的综合国力和国际竞争力将越来越取决于科学技术创新水平。教育作为知识创新、传播和应用的基础,已经成为经济发展和社会进步的基础。在信息爆炸时代,传统教学管理面临着诸多挑战。
1.3 范围
系统包括的范围:系统结构流程、前台结构、后台结构。
二、需求说明
2.1功能分析
教学管理系统包括学生信息、教师信息、成绩信息,具体功能如下:
(1) 学生消息的添加、查询、删除、修改。学生信息包括学生学号、姓名、性
别、年龄。实现了学生基本信息的录入,实现了按学号、姓名、系名称查询学生基本信息以及对学生基本信息的更新。
(2) 教师信息的添加、查询、删除、修改。教师信息包括老师所教课程、教师
姓名、教师性别,老师所在系名、学历。实现了教师基本信息的添加,实现了按姓名、系名称查询教职工基本信息以及对教师基本信息的更新。 (3) 成绩信息的添加、查询、删除、修改。成绩信息包括学号、姓名、课程编
号、课程名称、成绩。实现了成绩信息的录入,运用连接查询实现了按学号、学生姓名、课程号、课程名称、教师姓名查询学生成绩,按课程号、课程名称查询不及格学生学号、姓名,也实现了对成绩信息表的更新。 (4) 退出系统。实现了关闭系统的功能。
2
教学管理系统功能模块示意图:
2.2工作流图
3
2.3数据流图
2. 4 数据字典
2.4.1 数据结构卡片为:
(1) 数据结构名:学生基本信息 别名: 描述:这是教学管理系统的主要数据结构,定义了一个学生的基本信息 组成:学号,姓名,专业,性别,年龄 (2) 数据结构名:教师基本信息
别名:教职工基本信息
描述:这是教学管理系统的一个
重要数据结构,定义了一个教师
的基本信息
组成:编号、教师姓名、性别、
备注
4
(3) 数据结构名:成绩基本信息 别名:成绩信息 描述:这是教学管理系统的一个 重要数据结构,记录了每一个学 生的每一门考试的成绩的基本 信息 组成:学号、课程名称、成绩
2.4.2 数据项卡片: 选择其中一个数据结构卡片给出数据项卡片(选择第一个数据结构卡片)
(1) (2)
数据项名:学号 数据项名:姓名
别名:学生编号 别名:名字
描述:唯一标识每个学生 描述:标示每个学生的代号
定义:字符型 定义:字符型
位置: 位置:
取值范围:0——10个字符 取值范围:0——10个字符
取值含义:顺序编号 取值含义:自己定
(4) (3)
数据项名:性别 数据项名:系名
别名: 别名:专业名
描述:说明每个学生是男生还是描述:说明每个学生所学专业
女生 定义:字符型
定义:字符型 位置:
位置: 取值范围:0——15个字符
取值范围:0——2个字符 取值含义:由专业定
取值含义:男或者女
5
(5)
数据项名:年龄
别名:年纪
描述:说明每个学生的大小
定义:整型
位置:
取值范围:0——4
取值含义:按照每个学生大小而
定
2.4.3 数据存储卡片(选择第一个数据结构卡片分析):
数据存储名:查询结果
别名:
描述:查询学生基本信息所得的
结果
数据流来源:学生基本信息表
数据流去向:学校管理者
组成:学号,姓名,专业,性别,
年龄
2.4.4数据流卡片(选择第一个数据结构卡片分析)
数据流名:学生基本信息表
别名:学生登记表
描述:用来录入学生基本信息
定义:学生基本信息表=学号+姓名
+专业+性别+年龄
流入数据流:
流出数据流:
存取方式:随机
6
2.5概念模型设计(E-R图)
系名 姓名 学号 性别 年龄 教师姓名 系名 学历 学 生 1 m 选修 1 成绩 课 程 讲授 教 师 n 课程名称 课程编号 版本 先修 学分 2.6逻辑设计
(1)Students(学号[主键],姓名,系名,性别,年龄); (2)Teacher(编号[外键],教师姓名[主键],系名,学历); (3)Grade(学号[外键],课程名称[外键],,成绩)(学号和课程名称作为主键);
综合上述关系模式可得,3个关系模式都只有一个主键,每个关系模式中的所有非主属性对候选键均没有部分函数和传递函数依赖,也没有主属性对候选键的部分函数依赖和传递函数依赖,故可以认为3个关系模式均达到BC范式,满足数据库的开发要求,无需再对每一个关系模式进行分解。 1) 学生信息表 字段名称 数据类型 字段大小 必填字段 编号 char 10 是 姓名 char 10 是 性别 int 2 否 年龄 char 4 否 专业 char 15 否
7
2)成绩表
字段名称 数据类型 课程编号 char 课程名称 char 前置课程 char 学分 int 3)教师信息表
字段名称 数据类型 教师编号 int 教师姓名 char 性别 char 教授课程 char 备注 char
字段大小 5 20 5 4 必填字段 是 是 否 否 字段大小 4 10 2 10 10 必填字段 否 是 否 否 否 三、系统设计
3.1软件模块结构设计
3.1.1创建一个新的MFC工程,如图所示
8
3.1.2在对话框添加按钮,摆出各个部件的位置
下图为学生管理的界面示意图:
3.1.3给每个按钮做个新的对话框,如登记对话框如下图:
9
3.1.4以此类推,将所有的模块的界面及上面的部件全部摆出来,最后所有的素材如下图:
3.1.5实现对话框与对话框之间的跳转
例如要实现点击学生管理界面上的登记按钮跳到学生登记的界面
10
点击登记按钮跳转到下图
首先需要给学生登记界面对话框建立一个名为MyDlg_Stu_Reg的类,然后在双击学生管理界面上的登录按钮,添加下列代码: void MyDlg_Stu::OnButton1() {
MyDlg_Stu_Reg stuDlg;//建立学生登记类的一个对象 stuDlg.cCid = \"\";
if (stuDlg.DoModal() == IDOK)//生成学生登录对话框,并检测是否按下确定按钮,若按下则刷新学生管理界面的数据表 {
RefreshData(); } }
其他所有按钮跳转均为上述方法可以实现。
3.1.6实现从界面对话框上输入数据并写入数据库
个人认为这个是整个软件的核心部分,也是最难的部分。就还是拿学生登录对话框举例,从学生登录对话框输入学生的基本信息,然后点击确定,然后写入学生管理对话框。
11
首先应建立一个名为Student的类,该类的声明如下
class Student {
private:
int StuNum;
CString StuNam; CString StuSex; int StuAge; public:
Student();
virtual ~Student();
CStringArray a_StuNum; CStringArray a_StuNam; CStringArray a_StuSex; CStringArray a_StuAge; //读取和设置成员变量 int GetStuNum();
void SetStuNum(int iStuNum); CString GetStuNam();
void SetStuNam(CString cStuNam); CString GetStuSex();
void SetStuSex(CString cStuSex); int GetStuAge();
void SetStuAge(int iStuAge);
//数据库操作
int HaveName(CString cStuNam);
void sql_insert(); //向数据库中插入一行 void sql_findSno(CString cCid); //以学号查询 void sql_findSname(); //以姓名查询
void sql_update(CString b); //修改数据库 void sql_delete(CString a); //删除数据库 };
说明:该类具有四个私有变量StuNum,StuNam,StuSex,StuAge,分别记录学生的学号,姓名,性别,年龄。由于私有函数不能直接访问,故需要编写对应的成员函数,void SetStuNum(int iStuNum),SetStuNam(CString cStuNam),SetStuSex(CString cStuSex),SetStuAge(int iStuAge),并把从外界获得的数据赋给私有变量。
还需要编写关于数据库操作的函数,例如数据库的插入函数void sql_insert(); //数据库插入
12
void Student::sql_insert() {
//连接数据库
ADOConn m_AdoConn;
m_AdoConn.OnInitADOConn(); //设置INSERT语句 _bstr_t vSQL;
CString strStuNum;
strStuNum.Format(\"%d\
CString strStuAge;
strStuAge.Format(\"%d\
vSQL = \"INSERT INTO Students (Cid, Cname, Csex, Cage, Cdept) VALUES(\" + strStuNum + \
+ StuNam + \"','\" + StuSex + \"', \" + strStuAge + \计算机')\"; //执行INSERT语句
m_AdoConn.ExecuteSQL(vSQL); //断开与数据库的连接 m_AdoConn.ExitConnect(); }
说明:这个函数可以把Student类中的私有变量对应加到数据库之中。
现在还需要把对话框中用户输入的数据通过后台传入类Student中的私有变量,应该先给对话框中的编辑框建立类向导,如下图:
13
并给编辑框加上对应的变量名
现在需要给学生登记对话框中的确定按钮加上如下代码: void MyDlg_Stu_Reg::OnOK() {
// TODO: Add your control notification handler code here UpdateData(TRUE); // int StuNum,StuAge; // CString StuNam,StuSex; Student stu;
stu.SetStuNum(m_Cid); stu.SetStuAge(m_Cage); stu.SetStuNam(m_Cname); stu.SetStuSex(m_Csex);
if (m_Cname == \"\") {
MessageBox(\"请输入学生姓名\"); return; }
if (cCid == \"\") //插入数据
if (stu.HaveName(m_Cname) == 1) {
MessageBox(m_Cname);
MessageBox(\"当前顾客已经存在,请重新输入顾客姓名\"); return; } else
stu.sql_insert(); else //更新数据
if (m_Cname != cCname && stu.HaveName(m_Cname) == 1) {
MessageBox(\"当前顾客已经存在,请重新输入顾客姓名\"); return; } else
stu.sql_update(cCid); //关闭对话框
CDialog::OnOK(); }
到此为止即可以实现从对话框向数据库中增加数据,其他所有功能,添加,删除,
14
修改,查询的处理方法与这个大同小异,就不多做叙述了。 3.2 数据库设计
3.2.1 建立一个新的数据库
打开SQLserver2000的企业管理器,在数据库里增添一个新的数据库,如下图:
3.2.2 建立一个新的表
设计表的属性,如下图:
15
填写表的内容,如下图:
3.2.3 数据库的链接
本程序采用ADO接口来实现数据库和MFC的链接
首先需要给工程中添加新的关于ADO的组件,添加方法为:
工程——添加到工程——Components and Controls,并添加下面三个控件: Microsoft DataCombo Control,version 6.0 (OLEDB) Microsoft DataGrid Control,version 6.0 (OLEDB) Microsoft DataList Control,version 6.0 (OLEDB) 如下图所示:
16
添加成功后,控件工具条会新增四个工具,如下图
需要再添加一个名为ADOConn.cpp和ADOConn.h的文件,并在ADOConn.h中添加下列代码:
#import \"c:\\Program Files\\Common Files\\System\\ado\\msado15.dll\" no_namespace rename(\"EOF\点击ADODC控件的属性,链接数据库,如下图:
17
18
四、系统的功能
4.1系统的主界面
19
主界面代码详见:计算机学生管理系统Dlg.cpp
4.2 学生管理模块
4.2.1 学生登记界面
20
4.2.2 学生查询界面
21
4.2.3 学生删除界面
22
4.3 教师管理模块
4.3.1 教师登记界面
23
4.3.2 教师查询界面
24
4.3.3 教师删除界面
4.4 成绩管理模块
25
4.4.1 成绩登记界面
4.4.2 成绩查询界面
26
4.4.3 成绩删除界面
27
五、全文总结与体会
一周的课设感觉每天的都过的特别的充实,记得课设的第一天,我基本上是一头雾水,根本不知道如何下手,看着老师给的例子和书上的例子,那无数张表,无数个对话框,还有那写密密麻麻的代码,我头皮发麻,不知道自己在短短的一周内真的能做完这么多不,万事开头难,我硬着头皮去一点点的研究,去翻书,去查资料,去问王老师。开始不断的自己尝试,一个功能一个功能的实现。我记得我首先实现的功能是在MFC上显示一张数据库里的表,当我把表成功的显示了时,我心里充满了成绩感,下决心一定要靠自己的能力把这个做完。下面就是实现对话框之间的跳转,现在想想,这个应该是最简单的了,可是当时就是不会,就到处的问别人。当我看到王老师一两分钟就帮我实现了这个功能,我不由得心升无限敬佩之情。记得在实现从对话框中添加数据到数据库这一功能时,是最困难的,参考例子上的代码,放到我这里就是不对,后来仔细的看代码,一行一行的看,一行一行的改,最后终于成功的加入到数据库中了,可是还有个严重的问题,就是软件界面上的表不能即时刷新,这个问题纠缠了我好久,就是解决不了,问了好多同学,也在网上搜了好多解决方案,都不行。最后经过我不懈的努力,终于在有一次成功,我当时激动的站起来了,把周围人吓了一跳,我想这就是课设的魅力所在吧。成功的做好了一个模块,所有原理都会了,后面的工作基本就是完全的重复工作了,做起来就得心应手了,等到全做好后,发现自己好了不起,做成了一个软件了都。
当然这都需要十分的感谢王老师不耐其烦的指导,还有周围同学们无私的帮助。自己从中受益匪浅,锻炼了自己的动手能力,也培养了耐心,更充实了自己。没有大家的帮助,就没有这个作品,谢谢你们。
参考文献
1. 《数据库原理及其应用教程》 黄德才 科学出版社
2. 《SQL Server 2000管理、开发及应用实例详解》 陈世洪 人民邮电出版社 3. 《VC6.0数据库系统开发实例导航》 吴继刚 人民邮电出版社 4. 《数据库原理及应用》
周佩德
电子工业出版社 李光明
冶金工业出版社
5. 《Visual Basic 6.0编程实例大制作》
28
评 语
29
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo6.com 版权所有 湘ICP备2023023988号-11
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务