MFC综合开发案例分析1.docx
《MFC综合开发案例分析1.docx》由会员分享,可在线阅读,更多相关《MFC综合开发案例分析1.docx(21页珍藏版)》请在冰豆网上搜索。
MFC综合开发案例分析1
前言
21世纪最激烈的竞争当属人才的竞争,一个具有多学科知识的复合性人才或许是一个企业发展壮大所不可或缺的重要因素。
因此,企业人事管理工作的好坏不但可以直接影响到企业的人力资源管理,而且会间接的影响到企业整体管理。
随着社会的发展,科技的进步,计算机的应用在社会各领域中都得到了普及,越来越多的人都感受到利用计算机进行各类管理的科学和便捷;认识到管理信息系统对于管理工作的重要性。
利用计算机对企业人事进行管理是必然趋势,人事管理系统是企业管理工作中不可缺少的。
所以在这次课程设计中,我选择开发人事管理系统。
人事管理系统的功能主要有增加记录,删除记录,筛选记录,排序记录。
这就要求它应该能够为用户提供有好美观的窗口界面、充足可靠的信息数据、简单方便的维护手段和灵活多变的查询方式以及快捷而准确的查询结果。
所以,对于人事管理系统的设计主要包括数据库的建立、维护以及应用程序的开发两个方面。
对于前者而言要求建立起数据一致性及完整性强、数据安全性好的数据库。
对于后者而言则要求具备应用程序功能全,易使用等,运行稳定等特点。
因此,拟选用的开发软件是Microsoft公司出品的VisualC++6.0MFC平台进行系统的开发。
1课题综述
人事管理系统是一个数据库应用系统,员工的所有信息都是保存在数据库中。
本案例将主要实现如下一些功能:
增加记录功能、修改记录功能、删除记录功能以及刷新记录功能等等。
作为人事管理系统,我们将它作为一个数据库应用系统来进行开发制作。
数据库应用系统开发的前提是首先开发数据库和数据库中的数据表,数据库和数据表是数据库应用系统中进行不可缺少的工具,一切的开发工作都是围绕数据库和数据表的操作进行的,数据表可被VC++的数据工程和其他工程进行引用。
1.1人事管理信息系统来源
随着计算机技术的飞速发展,计算机在企业管理中应用的普及,利用计算机实现企业人事管理势在必行。
对于大中型企业来说,利用计算机支持企业高效率完成劳动人事管理的日常事务,是适应现代企业制度要求、推动企业劳动人事管理走向科学化、规范化的必要条件;计算机管理所无法比拟的优点检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
1.2人事管理系统的意义
管理信息系统(ManagementInformationSystem,以下简称为MIS),是一个将企业生产和经营中的各种内、外部信息进行收集、加工、整理、传递,并有序地存储,以用于管理和决策,是企业增效的信息系统。
它能够使企业更加及时、准确、全面、详实的了解所需的信息数据。
同时管理信息系统对各种信息数据的进一步加工,能使企业领导层的生产、经营、管理决策依据更加充分,更具有合理性、科学性;从而为社会创造出更多的价值,为企业的发展创造出更多的机会。
对于企、事业单位的人事管理系统来说,不需要大型的数据库系统。
只需要一个操作方便,功能实用,能满足本中心对数据的管理及需求的系统,能够提高人事管理的效率。
1.3预期目标
我们的目标就是在于开发一个功能实用、操作方便,简单明了的人事管理系统.能够录入人事的基本资料,在操作上能够完成诸如添加、修改、删除、按条件进行查询,基本满足人事日常业务的需要。
本人独立完成了此课题的研究与开发,包括调研、分析、设计、编码、测试、文档编写等内容。
1.4面对的问题
这次课题主要的问题就是数据库的结构设计。
这里所说的数据库结构设计是指数据库中各个表结构的设计,包括信息保存在哪些表格中,各个表的结构如何以及各个表之间的关系。
人事管理虽然只有一个数据表,但仍然要进行数据链接,这其中也就带来了各成员之间的绑定问题。
1.5需解决的关键技术等
人事管理系统需解决的关键技术是与数据源进行链接,MicrosoftAccess的使用以及MFC的使用等。
2人事管理系统分析
人事管理系统主要进行对企业的人员管理,使企业的管理更加科学化、合理化、制度化、规范化;为企业的管理水平跨上新台阶;为企业持续、健康、稳定的发展奠定坚实基础。
进行人事管理系统需要Windows2000以上的操作系统及VisualC++6.0语言环境。
2.1涉及的基础知识
2.1.1MFC编程
1)MFC简介
MFC是MicrosoftFoundationClassLibrary(微软基础类库)的缩写形式。
它是C++的类集,提供面向对象框架,利用这个框架,程序员可以轻松地创建Windows应用程序。
MFC还提供应用程序开发模型。
此模型被称为文档/视图模型。
文档/视图模型是将应用程序数据与用户界面元素分离的一种应用程序方法。
它允许这两部分程序独立存在,这样一来,程序员在更改其中一部分时,就无须大量更改另一部分。
MFC为程序员提供了更友好的C++类,使之更易于使用。
在很多情况下,MFC在幕后执行一些复杂操作,而向开发人员提供更简单的编程界面,并可以掩盖WindowsAPI的一些缺点。
2)AppWizard向导开发应用程序
图2-0New对话框
从File菜单中单击New(新建),显示New对话框的Projects(项目)选项卡,其中列出了VisualC++中的向导。
选择标有MFCAppWizard(exe)的图标,如图2-0所示,为项目输入一个名字。
在Location文本框中指定一个路径。
直到选择列表中的一个图标,并输入一个项目名后,OK按钮才能用。
单击OK。
步骤1
程序界面如图2-1所示。
图2-1AppWizard的第一步
AppWizard的第一步要求用户指定应用程序的类型,选择单文档界面(SDI)、多文档界面(MDI)或基于对话框的界面。
要创建不需要文档对象从磁盘文件中读取数据的简单的Windows应用程序,把标为Document/ViewArchitectureSupport(文档/视图结构支持)复选项禁用即可。
步骤2
在图2-2中所在的AppWizard的第二步中,要求提供项目所需要的数据库支持种类。
我们选择None,有使用数据库,Next(下一步)按钮跳过这一步,进到步骤3。
图2-2AppWizard的第二步
步骤3
在AppWizard的第三步(图2-3)中,设置程序的OLE和ActiveX支持类型。
对话框上半部分的五个单选按钮控制着AppWizard添加到程序中的复合文档支持的类型。
我们仍然选择None,单击Next按钮进到步骤4。
图2-3AppWizard的第三步
步骤4
在图2-4中所示的AppWizard的第四步中,可以控制AppWizard为程序创建哪些用户界面元素。
图2-4AppWizard的第四步
AppWizard自动为程序主窗口的菜单系统、工具栏及状态栏生成代码和数据。
Normal(常规)InternetExplorerRebars单选按钮为应用程序的工具栏提供两种不同的风格。
激活Context-SensitiveHelp(上下文相关)复选项,会告诉AppWizard希望所创建的程序提供在线帮助。
这些说明清晰完整不需要再做更多的工作只需要说明那些自己添加到程序中的命令以加强帮助文件。
在AppWizard第四步的对话框的右下角有一个Advanced(高级)按钮,单击它,将显示一个标题为AdvancedOptions(高级选项)的包含两个选项卡的对话框。
步骤5
图2-5所示的 AppWizard的第五步询问想创建的程序的风格、是否需要附加的源代码注释,及希望程序如何链接到MFC库。
图2-5AppWizard的第五步
步骤6
AppWizard的第六步列举了AppWizard将为项目创建的类,如图2-6。
图2-6AppWizard的第六步
单击Finish按钮后,AppWizard显示一个摘要表,其中列出了所选的项目特征。
单击OK会使AppWizard在摘要表底部所列的目录下创建项目。
2.1.2数据库的设计
VC有一个专门用于数据库和数据表的开发制作的数据库工程(DatabaseProject),可以为用户提供一个开发数据库和数据表的工具。
用DatabaseProject创建数据库工程的步骤如下:
1)启动VC,单击“文件|新建”菜单项,如图2-0所示。
在VC++的工程类型选项卡中,有一个数据库工程(DatabaseProject)类型,该数据库工程是专门为应用系统开发创建数据库和数据表的工程类型,因此用户可以利用它创建数据库和数据表。
2)在工程类型选项卡中选择DatabaseProject工程类型。
3)在“工程”文本框中输入工程文件名称并选择工程保存位置。
4)单击“确定”按钮,出现数据源选择对话框,在数据源选择对话框中将选项卡切换到“机器数据源”,如图2-7所示。
在数据源的列表框中,列出了VC++可以使用的一切数据源类型。
5)单击New按钮,进入新的数据源类型创建选择面板,在数据源类型选择面板中选择用户数据类型即可。
图2-7数据源类型
6)单击“下一步”按钮,出现数据源的驱动程序类型选择对话框,如图2-8所示。
图2-8数据源驱动程序选择
在该对话框中列出了许多支持VC++的数据库驱动程序类型。
在VC++中,用户可以根据不同数据库开发的需要,选择不同的数据库驱动程序。
其中,有一种基本的数据库驱动程序,它就是MicrosoftAccessDriver(*.mdb),这与MicrosoftBasic和其他一些微软的开发平台所使用的驱动程序是一致的,这样的数据库驱动程序对于制作本地中小型的数据库应用系统是足以胜任的。
7)单击“下一步”按钮,出现数据库设置信息界面,信息内容如下所示:
8)单击“完成”按钮,则完成数据源创建的全部设置,并出现如图2-9所示的对话框。
图2-9数据创建对话框
9)单击Create按钮即可创建一个新的数据库,首先出现数据保存位置与数据库名称命名对话框,如图2-10所示。
在对话框中键入数据库名称,并选择保存数据库的位置。
图2-10数据库存放位置与命名
10)单击OK按钮,出现一个创建数据库成功的信息,然后回到图2-9所示对话框。
11)单击OK按钮,回到图2-7所示的对话框。
12)单击“确定”按钮,回到数据工程窗体,显示数据库创建的结果,如图2-11所示。
图2-11人事管理数据工程创建结果
在数据库中利用设计器创建表,先定义表的结构,再输入表的数据。
2.2解决问题的基本思路
建立数据库及数据表,并进行选择与之相适应的数据源。
MFC设计过程中相应的对话框中的控件进行数据绑定和对一些控件代表的编写。
2.3总体方案
使用在基础知识中数据库的设计先设计数据库和数据表。
用MFC设计应用程序框架,在创建MFC时,进入框架设计的第2步,应选择“查看数据库而不使用文件支持”,在“DataSource”里添加已经创建的数据库和数据表,即可完成。
然后制作人事管理主窗体,在里面最主要的是进行控件与数据表字段的绑定。
最后为系统实现增加、删除、排序与查询功能。
2.4功能模块框图
根据系统功能的要求,可以将系统分解成几个功能模块,它如图2-12所示。
图2-12人事管理系统功能模块图
3人事管理系统设计
人事管理系统设计主要进行四个功能:
增加记录、删除记录、排序记录、查询记录。
3.1部署连接(图)
MFC对ODBC的封装(如图3-1所示):
图3-1硬件连接
3.2算法描述
◆增加记录的功能描述(如图3-2所示):
获取指向数据库的指针->确认对数据库的任何修改均已保存->获取新的ID值->通过AddNew函数来添加新记录->把新的ID值设置为新增记录中的ID字段值->调用Requery函数更新记录->游标移到最后一条记录。
◆删除记录的功能描述(如图3-3所示):
删除记录->游标移到下一条记录->如果游标在文件尾,将它移到最后一条记录->如果游标在文件头,则内容为空->更新表单。
◆排序的功能描述(如图3-4所示):
在CRecordset类中有数据成员m_strSort,可以通过设置该成员排序。
将游标指向m_strSort->刷新数据库->更新表单。
◆筛选的功能描述(如图3-5所示):
为了编写查找功能的代码,增加菜单项“按员工编号查找”(ID_Search),映射的COMMAND消息处理函数为OnSearch()。
接收查询字符串->关闭原来的表单->将查询条件赋给过滤器->打开经过过滤的表单->计算满足条件的记录数->如果没有找到相关记录,就会打开全为空的表单->不论任何情况,都更新表单。
3.3详细流程图
图3-2增加记录的流程图图3-3删除记录的流程图
图3-4排序记录的流程图
图3-5筛选记录的流程图
4代码编写
4.1增加记录的代码
voidCMyView:
:
OnButtonaddnew()
{
CRecordset*pSet=OnGetRecordset();//获取指向数据库的指针
if(pSet->CanUpdate()&&!
pSet->IsDeleted())
//确认对数据库的任何修改均已保存
{pSet->Edit();
if(!
UpdateData())return;
pSet->Update();
}
longm_lNewID=m_pSet->GetMaxID()+1;//获取新的ID值
m_pSet->AddNew();//添加一个新记录
m_pSet->m_ZGBH=m_lNewID;//设置新的ID标识
m_pSet->Update();//保存新的记录
m_pSet->Requery();//刷新数据库
m_pSet->MoveLast();//游标移到最后一条记录
UpdateData(FALSE);//更新表单
}
4.2删除记录的代码
voidCMyView:
:
OnButtondelete()
{
if(MessageBox("真的要删除吗?
","删除记录",MB_YESNO|MB_ICONQUESTION)==IDYES)
m_pSet->Delete();//删除记录
m_pSet->MoveNext();//游标移到下一条记录
if(m_pSet->IsEOF())//如果游标在文件尾,将它移到最后一条记录
m_pSet->MoveLast();
if(m_pSet->IsBOF())//如果游标在文件头,则内容为空
m_pSet->SetFieldNull(NULL);
UpdateData(FALSE);//更新表单
}
4.3排序记录的代码
voidCMyView:
:
OnSORTRECO()
{
m_pSet->m_strSort="职工编号";//指定排序字段
m_pSet->Requery();//刷新数据库
UpdateData(FALSE);//更新表单
}
4.4筛选记录的代码
voidCMyView:
:
OnFILTERECO()
{
CDlgQueryDlgquery;
CStringvalue;
intrecCount=Dlgquery.DoModal();
if(recCount==IDOK)
{
value="职工编号="+Dlgquery.m_query+"";//接收查询字符串
m_pSet->Close();//关闭原来的表单
m_pSet->m_strFilter=value;//将查询条件赋给过滤器
m_pSet->Open();//打开经过过滤的表单
intrecCount=m_pSet->GetRecordCount();//计算满足条件的记录数
if(recCount==0)//如果没有找到相关记录
{MessageBox("没有匹配的记录!
","查找",MB_ICONWARNING);
m_pSet->Close();//关闭原来的表单
m_pSet->m_strFilter="";//将过滤结果给过滤器
m_pSet->Open();//打开经过过滤的表单
}
else
{CStringstr1;
str1.Format("havearecord!
",recCount);
MessageBox(str1);
}
m_pSet->Requery();//刷新数据库
UpdateData(FALSE);//不论任何情况,都更新表单
}
}
}
5运行与测试
编译并连接源程序,执行程序后
1)初始界面(如图5-1所示)
2)增加记录的运行图(如图5-2所示)
图5-1初始界面
图5-2增加记录的运行图
3)删除记录的运行图(如图5-3所示)
4)排序记录的运行图(如图5-4所示)
5)筛选记录的运行图(如图5-5所示)
图5-3删除记录的运行图
图5-4排序记录的运行图
图5-5筛选记录的运行图