文档库 最新最全的文档下载
当前位置:文档库 › 出差记录管理系统

出差记录管理系统

毕业论文题目:出差记录管理系统

目录

一、中文摘要 (3)

二、英文摘要 (3)

三、综述 (4)

四、正文 (5)

第一章出差记录系统需求分析 (5)

第二章开发系统的选择 (5)

第三章建立数据库 (7)

第四章系统的具体实现 (8)

第五章登录模块 (19)

第六章录入模块 (25)

第七章查询模块 (27)

第八章结束语 (28)

五、参考文献 (29)

六、致谢 (29)

中文摘要

C++作为一种编程语言,有许多编程产品,Visual C++ 作为一个功能非常强大的可视化应用程序开发工具,是计算机界公认的最优秀的开发工具之一。Microsoft 的基本类库MFC使得开发WINDOWS应用程序比以往任何时候都要易。

关键词:票据,报销,出差,部门, 控件, 列表框

Abstract

C++ be used as a kind of program language, have many program language product, Visual C++ be used as a good applied procedure development tool, is one of the generally accepted tool in programming field. The Microsoft basic library MFC makes develop the WINDOWS Application more easily and efficiently.

Key word: Bill,Write off,Evection, Department

Control,List box

综述

基于计算机技术的迅速发展,各行各业都在努力开发出适应该领域的软件。各种应用软件相继问世,基于MFC框架,根据出差记录管理流程,设计出的出差记录管理系统,能使管理出差记录更加方便而有效率。

第一章出差记录管理系统需求分析

3.1 出差记录管理系统需求分析

根据软件工程知识,当要开发一个信息系统时,首先要对要开发信息系统进行需求分析,深入描述软件的功能和性能,定义数据流图与数据字典,并确定要制定软件的接口维护及相关细节。获得当前欲开发系统的处理流程。

因为要开发的系统是出差记录管理系统,面向的是中小型公司的出差记录管理流程。在做了充分的调查之后,我定义了一般功能描述。

1.登录系统:连接登录数据库,当用户输入名字,和密码的时候,如果该名字和密码都正确,则把该用户下所有的记录显示

出来。若没有该用户名和密码,则提示是否创建该用户。

2.进入系统后可进行记录的注销、添加、修改、删除、查询等一系列操作。

第二章开发系统的选择

2.1开发环境的选择

根据系统需求分析,待开发的软件系统对数据库要求数据库并不高,并且该软件涉及中小企业单位的应用,综合考虑选择以

下开发环境。

操作系统:Windows 2000

开发工具:Visual C++ 6.0

数据库服务器:Access 2000

2.2 中文版 Visual C++ 6.0及AppWizard简介

Microsoft Visual C++ 6.0提供动态开发环境,以便使用 C++ 开发语言创建基于 Microsoft Windows 和基于 Microsoft MFC 的应用程序、动态 Web 应用程序和 XML Web services。Visual C++ 包括具有工业标准的活动模板库 (ATL) 和 Microsoft 基础类库 (MFC)、高级语言扩展以及强大的集成开发环境 (IDE) 功能,这些功能使开发人员能够高效地编辑和调试源代码。

它为开发者提供面向对象的可靠语言,通过AppWizard开发向导可以生成功能强大同时注重性能的应用程序。通过高级模板功能、低级别平台访问和优化编译器,Visual C++ 6.0可提供生成健壮的应用程序和组件的出众功能。该产品使开发人员能够生成各种解决方案,基于 Microsoft Windows 的应用程序和用于瘦客户端与智能客户端设备的解决方案。

首先要介绍的是Appwizard工具,这个工具有助于帮助我们一步一步的生成一个新的应用程序,并且自动生成应用程序所需要的基本代码。

AppWizard即应用程序向导,它是Visual Studio开发环境中强大的编程工具之一,用它可以创建各种不同类型的程序。比如Win32应用、ATL、

MFC应用等等。在Windows的术语中,向导(wizard)一词指得是一个应用程序,它的一个主要特点就是提供一系列对话框引导用户进行必要的选择来完成给定的任务。VC中的应用程序向导——AppWizard提供一系列特定工程类型对话框来让程序员定义各种类型的新工程。其中每一个对话框都显示一些用来指定工程类型的选项。

根据程序员所填充的对话框,AppWizard会自动创建构造工程所需的框架文件,它们包括:工程文件、工作间文件、源代码文件、头文件、资源文件等等。AppWizard是Visual Studio开发环境中使用最多的工具之一。在创建类似的多个工程时,AppWizard显得特别有用。例如你创建的工程都是SDI,并且都支持自动化(automation),那么你就可以创建一个自己定制的 AppWizard,将SDI自动化设为默认选项。这样可以提高工作效率。此外,利用AppWizard也可以创建具有个性化的工程。例如你想要所有工程都有一个“关于”对话框,并且在这个对话框中显示个人信息或者公司的标徽及其它专有信息,每个源代码文件中都加上自己的专门注释。那么通过创建一个AppWizard很容易实现这个需求。你甚至可以定义并显示自己定制的对话框来收集工程类型所需的信息和选项。最终我们将创建一个在实际编程中非常实用的AppWizard。并提供全部源代码。

第三章建立数据库

3.1 数据库结构

由于系统设计需求的明确,设计该数据库应尽量力求简单,可减少数据冗余,增加软件的易用性,几翻推敲之后整个数据库只分为 alluser 和

cc 两个表,其中两个表仅name键关联。

出差管理系统所需要的表结构为:

1.登录文件(alluser):

使用者姓名 name TEXT

使用者密码 pwd TEXT

2.报销文件(cc):

是否已报销 staus TEXT

用户名称 name TEXT

开始日期 date1 DATE

结束日期 date2 DATE

部门 adr MEMO

科室 ks MEMO

事由 whatdo MEMO

备注 dome MEMO

插入日期时间 insertdate DATE

第四章系统的具体实现

4.1生成新工程

1.单击File菜单中的New项,在系统谈出的对话框Project标签上选择MFC AppWizard,输入要创建的项目名cc,选择好路径,点击OK按钮。

2.在接下来的AppWizard 向导中选择Dialog based

3. 选择Finish 就生成该工程。

4.2设计系统的界面

根据系统的功能绘制主界面如6.2所示。

4.2系统的主界面

由图所示主界面主要是由三个Radio Button,一个List Box,和五个Button控件组成。其中“登录“按钮主要完成用户登录,在用户未登录之前,该系统无法进行记录的查看、添加、修改等一系列操作。

4.3连接数据库

4.3.1 ADO技术

ADO(ActiveX Data Object) 是Microsoft为最新和最强大的数据访问范例 OLE DB 而设计的,是一个便于使用的应用程序层接口。ADO 使您能够编写应用程序以通过 OLE.DB 提供者访问和操作数据库服务器中的数

据。ADO 最主要的优点是易于使用、速度快、内存支出少和磁盘遗迹小。ADO 在关键的应用方案中使用最少的网络流量,并且在前端和数据源之间使用最少的层数,所有这些都是为了提供轻量、高性能的接口。之所以称为 ADO,是用了一个比较熟悉的暗喻,OLE 自动化接口。

OLE DB是一组”组件对象模型” (COM) 接口,是新的数据库低层接口,它封装了ODBC的功能,并以统一的方式访问存储在不同信息源中的数据。OLE DB是Microsoft UDA(Universal Data Access)策略的技术基础。OLE DB 为任何数据源提供了高性能的访问,这些数据源包括关系和非关系数据库、电子邮件和文件系统、文本和图形、自定义业务对象等等。也就是说,OLE DB 并不局限于 ISAM、Jet 甚至关系数据源,它能够处理任何类型的数据,而不考虑它们的格式和存储方法。在实际应用中,这种多样性意味着可以访问驻留在 Excel 电子数据表、文本文件、电子邮件、目录服务甚至邮件服务器,诸如 Microsoft Exchange 中的数据。但是,OLE DB 应用程序编程接口的目的是为各种应用程序提供最佳的功能,它并不符合简单化的要求。您需要的API 应该是一座连接应用程序和 OLE DB 的桥梁,这就是ActiveX Data Objects (ADO)。

总的来说,ADO模型包括了下列对象:连接(Connection)、命令(Command)、记录集 (Recordset)、字段 (Field)、参数 (Parameter)、错误 (Error)、属性 (Property)、集合、事件.它们之间的关系如下图:

(1)我们最常用的主要是Connection、Recordset 及Command这三个对象.

(2)对于访问一个数据库来说,我们一般先建立一个ADO连接.

(3)ADO连接可以直接执行SQL语句来操纵数据库,但如果我们要对数据在应用程序和数据源之间进行存取的话,就需要用到记录集对象。一个ADO连接可以有多个ADO连接,但一个ADO连接一般只能对应一个且必须对应一个ADO 连接.

(4)另外如果你可进行更高级别的访问的话,还可能要用到命令对象。例如要调用存储过程等。

(5)一个记录集包含有一个字段集,一个字段集则包含有多个字段对象。

(6)同样一个命令对象也包含一个参数集,一个参数集则包含有多个参数对象。

(7)连接对象也有一个错误集并包含有多个错误对象。

这就是ADO各对象之间大致的关系.

3. ADO接口简介

ADO只需要9个对象和4个集合就能完成数据库操作的几乎全部功能。由于ADO是基于COM的,因此我们在使用ADO时也应该从它提供的借口出发寻找访问数据库的方法。ADO库提供三个基本接口:

__ConnectionPtr接口

__CommandPtr接口

__RecordsetPtr接口

__ConnectionPtr接口:

__ConnectionPtr接口返回一个记录集或一个空指针。通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。用__ConnectionPtr接口返回一个记录集不是一个好的使用方法。通常同CDatabase一样,使用它创建一个数据连接,然后使用其它对象执行数据输入输出操作。

__ConnectionPtr接口:

__CommandPtr接口返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。在使用__CommandPtr接口时,可以利用全局__ConnectionPtr接口,也可以在__CommandPtr接口里直接使用连接串。如果只执行一次或几次数据访问操作,后者是比较好的选择。但如果要频繁访问数据库,并要返回很多记录集,那么,应该使用全局

__ConnectionPtr接口创建一个数据连接,然后使用__CommandPtr接口执行存储过程和SQL语句。

__RecordsetPtr接口:

__RecordsetPtr是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定,游标控制等。同__CommandPtr接口一样,它不一定要使用一个已经创建的数据连接,可以用一个连接串代替连接指针赋给__RecordsetPtr的connection成员变量,让它自己创建数据连接。如果要使用多个记录集,最好的方法是同Command对象一样使用已经创建了数据连接的全局—ConnectionPtr接口,然后使用__RecordsetPtr 执行存储过程和SQL语句。

4.使用__ConnectionPtr接口

__ConnectionPtr是一个连接接口,它类似于CDatabase和CDaoDatabase。首先创建一个__ConnectionPtr接口实例,接着指向并打开一个ODBC数据源或OLE DB数据提供者(Provider)。以下代码分别创建一个基于DSN和非DSN的数据连接。

//使用__ConnectionPtr(基于DSN)

__ConnectionPtr MyDb;

MyDb.CreateInstance(__uuidof(Connection));

MyDb-〉Open("DSN=samp;UID=admin;PWD=admin","","",-1);

//使用—ConnectionPtr (基于非DSN)

__ConnectionPtr MyDb;

MyDb.CreateInstance(__uuidof(Connection));

MyDbOpen("Provider=SQLOLEDB;

SERVER=server;

DATABASE=samp;

UID=admin;

PWD=admin",

"","",-1);

5.使用__RecordsetPtr接口

__RecordsetPtr接口的使用方法和CDaoDatabase类似,通过以下代码的比较,你会发现使用—RecordsetPtr接口非常简单(以下代码使用上面已经创建的数据连接):

//使用CDaoDatabase执行SQL语句

CDaoRecordset MySet = new CDaoRecordset(MyDb);

MySet-〉Open(AFX__DAO__USE__DEFAULT__TYPE,

"SELECT * FROM t__samp");

Now using ADO:

//使用__RecordsetPtr执行SQL语句

__RecordsetPtr MySet;

MySet.CreateInstance(__uuidof(Recordset));

MySet-〉Open("SELECT FROM some__table",

MyDb.GetInterfacePtr(),

adOpenDynamic,

adLockOptimistic,

adCmdText);

现在我们已经有了一个数据连接和一个记录集,接下来就可以使用数据了。从以下代码可以看到,使用ADO的__RecordsetPtr接口,就不需要像DAO那样频繁地使用大而复杂的数据结构VARIANT,并强制转换各种数据类型了,这也是ADO的优点之一。假定程序有一个名称为m__List的ListBox控件,下面代码我们用__RecordsetPtr接口获取记录集数据并填充这个ListBox控件:

//使用ADO访问数据

__variant__t Holder

try{while(!MySet-〉adoEOF)

{ Holder = MySet-〉GetCollect("FIELD__1");

if(Holder.vt!=VT__NULL)

m__List.AddString((char )__bstr__t(Holder));

MySet-〉MoveNext();} }

catch(__com__error e)

{ CString Error = e-〉ErrorMessage();

AfxMessageBox(e-〉ErrorMessage());

} catch(...)

{ MessageBox("ADO发生错误!");}

必须始终在代码中用try和catch来捕获ADO错误,否则ADO错误会使你的应用程序崩溃。当ADO发生运行错误时(如数据库不存在),OLE DB数据提供者将自动创建一个__com__error对象,并将有关错误信息填充到这个对象的成员变量。

6.使用__CommandPtr接口

__CommandPtr接口返回一个Recordset对象,并且提供了更多的记录集控制功能,以下代码示例使用__CommandPtr接口的方法:

//使用__CommandPtr接口获取数据

__CommandPtr pCommand;

__RecordsetPtr MySet;

pCommand.CreateInstance(__uuidof(Command));

pCommand-〉ActiveConnection=MyDb;

pCommand-〉CommandText="select from some—table";

pCommand-〉CommandType=adCmdText;

pCommand-〉Parameters-〉Refresh();

MySet=pCommand-〉Execute(NULL,NULL,adCmdUnknown);

__variant__t TheValue = MySet-〉GetCollect("FIELD__1");

CString sValue=(char )__bstr__t(TheValue);

4.3.2使用ADO接口步骤

1.引入ADO库文件

使用ADO前必须在工程的 stdafx.h 文件里用直接引入符号#import,引入ADO库文件,以使编译器能正确编译。代码如下所示:

#import "c:\program files\common files\system\ado\msado15.dll" no_namespaces rename("EOF" ,adoEOF")

这行语句声明在工程中使用ADO,但不使用ADO的名字空间,并且为了避免冲突,将EOF改名为adoEOF。

2.初始化OLE/COM库环境

必须注意的是,ADO库是一组COM动态库,这意味应用程序在调用ADO前,必须初始化OLE/COM库环境。在MFC应用程序里,一个比较好的方法是在应用程序主类的InitInstance成员函数里初始化OLE/COM库环境。

//初始化OLE/COM库环境

BOOL CADOApp::InitInstance()

{

if(!AfxOleInit())

{

AfxMessageBox("OLE初始化出错!");

return FALSE;

}

......

}

函数AfxOleInit在每次应用程序启动时初始化OLE/COM库环境。

4.4 连接数据库

按照上面的叙述在StdAfx.h中添加msado15.dll并添加接口变量后,

在InitInstance()下输入连接数据库代码,连接已经建立好的数据库power.mdb,并且用了一个try…catch来捕捉异常。以下是主要代码://以下是连接access2000数据库。。。

try

{

hr = m_pConnection.CreateInstance("ADODB.Connection");

//创建Connection对象

if(SUCCEEDED(hr))

{

m_pConnection->ConnectionTimeout=3;//设置超时时间为3秒hr=m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;

Data Source=power.mdb;","","",adModeUnknown);//连接数据库

}

}catch(_com_error e)//捕捉异常

{

CString temp;

temp.Format("连接数据库错误信息:%s",e.ErrorMessage());

::MessageBox(NULL,temp,"提示信息",NULL);

return false;

}

第五章登录模块

5.1 登录模块的实现

在资源视图中插入对话框资源命名为IDD_DIALOG_LOGON,做为系统登录对话框设计成如6.1所示

5.1登录对话框

添加继承自CDialog的基类,命名为CLogon类。在主对话框视图上的“登录“按钮添加BN_CLICKED消息。下面是OnButtonLogon()中的主要代码:

if(title=="登录")

{

CLogon dlglogon;

if(dlglogon.DoModal()==IDOK)//

{

CString sql="SELECT * FROM cc where

name='"+https://www.wendangku.net/doc/2514294902.html,+"'";

//使其它控件有效

GetDlgItem(IDC_BUTTON_ADD)->EnableWindow();

GetDlgItem(IDC_BUTTON_EDIT)->EnableWindow();

GetDlgItem(IDC_BUTTON_DEL)->EnableWindow();

GetDlgItem(IDC_BUTTON_SEARCH)->EnableWindow();

GetDlgItem(IDC_RADIO4)->EnableWindow();

GetDlgItem(IDC_RADIO5)->EnableWindow();

相关文档
相关文档 最新文档