案例五-用VC++制作一个商品交易系统_第1页
案例五-用VC++制作一个商品交易系统_第2页
案例五-用VC++制作一个商品交易系统_第3页
案例五-用VC++制作一个商品交易系统_第4页
案例五-用VC++制作一个商品交易系统_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

案例五--用VC++制作一个商品交易系统A、课程设计实施步骤同学们可按下列步骤完成所选题目的设计并写出设计报告。第一步:问题分析在对所选题目进行调研的基础上,明确课题背景及该选题要做什么。依据调查结果,进一步分析和表达用户的需求。(1)系统的功能需求:围绕选题,明确系统的主要功能;(2)用户操作需求:系统应以怎么的方式与用户进行交互。第二步:总体设计(1)系统的功能划分:主要给出系统的功能结构图;(2)系统流程:主要给出系统工作流程示意图。第三步:详细设计与实现(1)类设计:给出系统中设计的类的功能、结构等的说明;(2)系统的主要代码:类的实现及程序主要代码及其说明;第四步:测试以运行结果的形式给出程序的测试过程,需要运行界面截图与文字说明,缺一不可。第五步:形成设计报告对设计结果的合理性、规范程度和实际运行的结果以报告的形式进行提交。B、课程设计报告要求课程设计报告有四个方面的要求:1.问题描述。包括此问题的理论和实际两个方面。2.解决方案。包括:(1)总体设计:应合理划分系统功能模块,系统工作流程合理、符合实际;(2)详细设计与实现:类的设置是问题域中客观存在事物的放映和抽象,代码符合程序编写规范;(3)测试:对系统应进行全面的功能测试,以保证系统的可靠运行。3.报告撰写格式要规范,具体参见样例。案例五用VC++制作一个商品交易系统

关键词:系统封面

数据库与数据表

创建并声明类

资源文件编译5.1

课程设计的目的和意义在现代社会中,商品交易是一种经常性的经济活动,商品交易管理系统在百货超市、杂货店中是一种广泛需要的管理系统,因此学习和掌握制作商品交易系统的制作有非常重要的意义。同时该系统的制作也是数据库应用系统的代表,它体现了数据库管理系统开发的一些基本过程和制作中的一些用户需求,该系统的制作对于大家学习掌握VC++和一般的应用系统制作有一定的启发作用。5.2

系统功能设计本系统将建立一个比较完善的系统模型,如系统封面的制作,系统主菜单的制作,其中,最主要的是商品交易界面的制作。在该系统的制作中,还将制作商品信息数据界面的处理,它用于处理该商店所有存在的商品的记录,还将制作供货商管理界面。其商品交易系统的系统封面如图5.1所示。信息数据表,它们分别用于对商品信息、商品交易和商品供货商的相关记录进行处理。5.3.1

“商品交易管理数据库”与相关数据表的设计数据库是数据表的集合,系统开发首先应该开发一个数据库,它用于存放系统中的数据表,本章仍采用MicrosoftOffice2000中的MicrosoftAccess2000来进行数据库与数据表的创建工作。为此我们先定义数据库中的3个数据表的结构。1.“商品交易”数据表的结构的定义根据商品交易的特点,我们特设计“商品交易”数据表的结构如图5.1所示。

表5.1

“商品交易”数据表的结构字段名称字段类型字段大小小数位数索引必须填写商品编号文本10

是商品名称文本50

是交易日期日期/时间默认

是价格货币默认大小

是件数数字整型

“商品交易”数据表一经创建,可以在其中输入一些数据记录,以在后面的对话框制作中显示对话框制作的数据操作效果。其数据输入要参考表5.2所示内容(注:表中的所有数据并不是真正的业务处理数据,仅用于演示,可不考虑其真实性)。

表5.2

“商品交易”表中的数据内容价格件数交易日期小计商品编号商品名称50202-4-10¥400.000002刮胡刀200202-4-11¥400.000003按摩器400302-4-15¥1,200.000004稳压器200202-4-15¥400.000002刮胡刀300402-4-1¥1,200.000001电脑桌2002002-4-13¥4,000.000004电吹风

2.“商品信息表”数据表的结构定义商品信息主要反映一个超市或零售商店的入库的商品信息内容,根据商品信息的构成要素,特设计“商品信息表”的结构如表5.3所示。

表5.3

“商品信息表”数据表的结构字段名称字段类型字段大小索引必须填写商品编号文本10

是商品名称文本50

是种类文本20

是进价货币默认

是售价货币默认

是折扣货币默认

是库存整型默认

是进货日期日期默认

是商品供应商号整型默认

是创建完成后可以在数据表中输入一些数据,以在后面的对话框中体现对话框制作的效果,其数据可以参考表5.4所示内容。表5.4

“商品信息表”数据表的数据参考商品编号商品名称种类进价售价折扣库存进货日期商品供应商号0001电脑桌一类¥300.00¥350.00¥0.801002-1-1110002刮胡刀二类¥100.00¥150.00¥10.0010002-4-1120003按摩器二类¥200.00¥250.00¥0.0010002-6-1130004重庆火锅底料三类¥10.00¥15.00¥0.00100002-6-1140005昆明火腿三类¥100.00¥130.00¥0.0010002-6-1150006稳压器二类¥400.00¥550.00¥0.002002-6-1163.“供货商信息”表的结构的定义往往在商品交易管理系统中,供货商的信息是需要掌握的,因此应该在系统中存在这样一个管理模块,从而需要先定义并制作一个“供货商信息”的数据表,其结构如表5.5所示。表5.5

“供货商信息”数据表的结构字段名称字段类型字段大小索引必须填写供货商编号文本10关键、惟一是供货商名称文本30

是地址文本50

是联系人文本20

是联系电话文本13

是电子邮件文本50

同样,在创建“供货商信息”数据表之后,用户可以输入几条用于演示的记录,如表5.6所示。表5.6

“供货商信息”数据表的数据供货商名称供货商编号地址联系人联系电话电子邮件昆明火腿公司5昆明市张春明067888822qmht@263.net重庆火锅大王4重庆市张长春0236788868cqhg@163.net上海刮胡刀大王2上海市春西路李岂丰23232323223shkfd@163.net5.3.2

商品交易管理数据库的创建利用MicrosoftAccess2003创建数据库及其数据表的步骤如下:(1)启动MicrosoftOffice2003中的MicrosoftAccess应用程序,出现图5.3所示对话框。利用该对话框可以创建一个新的数据库或打开一个已经存在的数据库。(2)选择创建新数据库,即选择“空Access数据库”选项。(3)单击“确定”按钮之后出现保存对话框,确定保存数据库的文件位置(D:\VC++写作案例\CH5\),将数据库命名为:商品交易管理数据库;然后出现图5.4所示界面。

图5.3

数据库创建选择

图5.4

数据库中的数据表设计界面

在数据表设计界面中,用户可以打开已经存在的数据表,也可以创建新的数据表。(4)单击“设计”菜单项,出现数据表设计器,用户可以设计一个新的数据表结构,如图5.5所示。图5.5

数据表设计器

在MicrosoftAccess2000数据表设计器中,用户可以定义数据表的字段名称、字段类型、字段大小等数据表结构的内容,根据前面定义的3个数据表的结构,创建3个数据表。数据表结构一经确定,用户可以打开该数据表,在数据表中输入一些基本数据,以在后面的系统设计中体现设计的效果,可参考前面提供的数据表中的相关数据。系统会将创建的数据表自动保存在“D:\VC++写作案例\CH5\商品交易管理数据库”中。

5.4

制作一个系统封面的位图文件在本案例中,我们将介绍一个应用系统封面的制作与应用。应用系统封面是一个Splash画面,它柱往在系统启动时加以显示。系统封面的作用主要有:①说明系统名称:②说明系统的归属,即版权;③说明系统制作时间;④修饰应用系统。这些内容不是固定的,它可以根据用户的需要和爱好加以制作。一个SPLASH画面可以以一个位图文件的方式加以制作,然后根据需要加入到工程的资源之中。这里我们制作的系统封面可参考图5.1。5.5

创建数据源文件在这一案例之中,我们将采用ODBC数据源文件的方法创建应用系统的数据集,与案例一一样,首先用户可以采用操作系统的控制面板中的“ODBC数据源(32位)”应用程序加以创建,如图5.6所示。图5.6

ODBC数据源创建程序

由于该过程比较冗长,因此建议大家参考案例一的过程。创建的数据源“商品管理数据源”文件将会加入到ODBC数据源管理器之中,如图5.7所示,该数据源将是本案例中应用系统引用的数据源。图5.7

商品管理数据源显示5.6

创建“商品交易管理系统”应用程序基本框架在前面我们已经创建了数据库、数据表,制作了系统封面的位图文件,并为应用系统创建了数据源文件,也就是作好了系统开发的一切工作,因此我们可以着手应用系统的界面的制作了。在VC++中,往往将应用程序的界面称作对话框,应用程序界面的制作往往就是对对话框的应用开发。要使用创建的数据源文件,在VC++中,除ADO数据访问控件和一些ActiveX控件可以自动引入数据源之外,往往需要借助于应用程序框架对数据源进行引用。为此在本案例中,我们仍然需要首先创建一个应用程序框架,然后再进行数据控件的加入,与数据源进行绑定,并进行对话框的修改与加工。创建“商品交易管理系统”应用程序框架的步骤如下:(1)结束数据库的创建并启动VC++,出现VC++主控界面。(2)在VC++主控界面中单击“文件|新建…”菜单项出现新建工程类型选择对话框,在工程类型对话框中选择MFCAppWizmd(EXE)工程类型。(3)输入工程名称为“商品交易管理系统”并选择Win32平台类型。(4)单击“确定”按钮,进入文档类型设置对话框。(5)选择单文档类型,即创建一个单文档界面的应用程序,设置资源使用的语言为中文,选择文档/查看体系结构支持。(6)单击“下一步”按钮,进入框架设置的第2步,出现图5.8所示对话框。在该对话框中,需要用户对数据库的应用作一些相关的选择。图5.8

程序框架设置的第2步

(7)选择“查看数据库不使用文件支持”;这时候DataSource按钮处于可用状态(或激活状态);在这一种选择下,VC++将为应用系统引入数据环境,即数据源,该数据源就是我们在前面创建的“商品管理数据源”,而不使用其他类型数据的文件支持。数据源在系统制作中的引入需要用一定的驱动程序为之进行。(8)单击DataSource按钮,出现图5.9所示的选择数据源类型的对话框。图5.9

选择数据源

注意,在ODBC数据源文件列表中,我们已经创建了一个ODBC数据源文件,即“商品管理数据源”,因此在其中直接选择引用即可。(9)单击OK按钮,出现数据源中的数据表列表,目前我们要创建的第一个对话框,即主对话框,是要处理商品交易信息的对话框,因此,在数据表的列表中选择“商品交易”数据表,如图5.10所示。图5.10

数据表列表(10)单击OK按钮,选定该数据表,然后返回到图5.8所示对话框。(11)在图5.8所示对话框中单击“完成”按钮,即完成应用程序的框架的生成工作,出现工程框架创建的全部信息。该信息将提示用户所创建的应用程序框架包括的内容,如:应用系统名称、界面类型、适合的操作系统、类文档的创建和系统特色等,如下所示:Applicationtypeof商品交易管理系统:SingleDocumentInterfaceApplicationtargeting:

Win32

Classestobecreated:Application:CMyAppin商品交易管理系统.hand商品交易管理系统.cppFrame:CMainFrameinMainFrm.handMainFrm.cppDocument:CMyDocin商品交易管理系统Doc.hand商品交易管理系统Doc.cppRecordView:CMyViewin商品交易管理系统View.hand商品交易管理系统View.cppRecordset:CMySetin商品交易管理系统Set.hand商品交易管理系统Set.cpp

(connectedtotable'[商品交易]'indatasource'商品管理数据源')

Features:+Initialtoolbarinmainframe+Initialstatusbarinmainframe+PrintingandPrintPreviewsupportinview+3DControls+UsessharedDLLimplementation

(MFC42.DLL)+Databasesupport,withoutfilesupport+ActiveXControlssupportenabled+Localizabletextin:中文[中国]在确认信息后,系统进入框架的集成开发环境之中,用户可以在该环境中制作开发所需要的内容。5.7

为工程添加新的SPLASH工程并改造SPLASH画面在前面的案例中,一些对话框、菜单等等均是以工程的资源方式进行添加的,但在VC++中,SPLASH画面是以一个工程的方式加入的,即VC++已经为用户制作了一个简单的SPLASH工程,用户只需要在自己的工程中加以引用(必要时对此工程进行修改)即可。5.7.1

添加SPLASH工程添加SPLASH工程的方法如下:(1)在集成开发环境中单击VC++主菜单中的“工程|添加工程|ComponentandControlsGallery”菜单项,出现一个工程选择的对话框,如图5.11所示。图5.11

工程选择对话框

(2)在工程选择对话框中选择“Splashscreen”。(3)单击“结束”按钮,系统会提示用户为该对象创建一个新的类,直接接受系统建议的类名,即可完成添加SPLASH画面的操作。此后可以发现,在工程的视图管理选项卡中增加了一个新的位图文档,该文档包含了增添的SPLASH对象,如图5.12所示。图5.12

SPLASH位图文档的增加

VC++创建的SPLASH工程只是一个简单的框架,它往往不能满足一切用户的需要,为此,用户可以改造该SPLASH工程。(4)双击“IDB_SPLASH”文档,即出现IDB_SPLASH画面,如图5.13所示。图5.13

SPLASH画面显示5.7.2

修改SPLASH画面可以看出,在SPLASH画面中,建议用户输入需要的工程名称、版本号和版权声明等等。用户可以根据需要加以修改,也可以将该SPLASH画面全部删除,然后粘贴上自己制作的位图文件图片即可,如图5.14所示。图5.14

用户的SPLASH画面

编译运行工程,可以发现,SPLASH画面在系统启动时首先出现。

5.8

制作“商品交易处理”对话框为在VC++应用程序框架创建的过程中,数据源主要就是为主对话框引入的,而其他对话框往往不能使用该数据源。如果需要使用该数据源,则需要使用其他的ActiveX控件或编制数据集引用的过程代码才能对数据源加以引用。因此,在“商品交易处理”对话框的制作中,我们将同时运用数据源和数据源控件两种方法进行制作。5.8.1

控件加入与对话框布局制作一个对话框的内容大致分为三个方面,即在对话框中加入所需要的控件、对对话框及对话框中的控件进行布局、给一些控件编制必要的过程代码。因此,我们首先在窗体中加入必要的控件并进行布局。(1)在主对话框IDD_MY_FORM中将提示文本框“TODO:在这个对话框里设置表格控制。”删除。(2)在主对话框IDD_MY_FORM中放入各种需要的控件,如标签控件、编辑框控件、命令按钮控件,其对话框布局如图5.15所示。图5.15

商品交易处理对话框

注意,在对话框中,左边部分使用ActiveX控件进行数据源的引入,与数据“绑定”。右边部分则采用工程向导创建工程框架时自动引入的数据源,相信大家对左边和右边部分的制作应该是比较熟悉了。其中,各个控件的属性设置如表5.7~表5.12所示。

表5.7

标签对象的基本属性ID标题内容IDC_STATICCAPTION商品交易处理IDC_STATICJG价格IDC_STATICJS件数IDC_STATICJYPQ交易日期IDC_STATICSPBH商品编号IDC_STATICSPMC商品名称IDC_STATICCXJ小计

表5.8

编辑框控件的基本属性和编辑内容ID编辑内容IDC_EDITJG价格IDC_EDITJS件数IDC_EDITJYRQ交易时期IDC_EDITSPBH商品编号IDC_EDITSPMC商品名称IDC_EDITSJ小计

表5.9

命令按钮对象的基本属性ID标题内容IDC_BUTIONADDNEW新交易IDC_BUTTONOK确认交易

表5.10

分组框控件对象的基本属性ID标题IDC_STATICNEWTRAD新交易

表5.11

ADODC控件对象的基本属性属性属性内容IDIDC_ADODC1显示YES标题浏览交易记录ConnectionStringProvider=MSDASWL.1;PersistSecurityInfo=False;DataSource=商品管理数据源RecordSource商品交易CommandType2-TableCommandType

表5.12

DataGrid控件的基本属性属性属性内容IDIDC_DATAGRID1显示YES标题请进行数据处理DataSourceIDC_ADODC1AllowAddNewTrueAllowArrowsTrueAllowDeleteTrueAllowUpdateTrue

关于以上控件的属性设置过程,我们不再重复,尤其是对于ADODC1控件和DataGrid控件的属性设置,前面已有多处进行过介绍,这里就不再说明了。5.8.2

编制命令按钮的过程代码在为控件编制过程代码时,往往需要为控件创建新类,建立消息映射,生成函数,并编制过程代码,鉴于前面内容已经对此有详细的介绍,这里不再重复,仅列出工程的实现文件,大家可以查询每一命令按钮的过程代码。其工程实现文件的内容如下所示://商品交易管理系统View.cpp:implementationoftheCMyViewclass#include"stdafx.h"#include"商品交易管理系统.h"#include"商品交易管理系统Set.h"#include"商品交易管理系统Doc.h"#include"商品交易管理系统View.h"

#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif//////////////////////////////////////////////////////////////CMyView

IMPLEMENT_DYNCREATE(CMyView,CRecordView)

BEGIN_MESSAGE_MAP(CMyView,CRecordView)//{{AFX_MSG_MAP(CMyView)ON_BN_CLICKED(IDC_BUTTONADDNEW,OnButtonaddnew)ON_BN_CLICKED(IDC_BUTTONOK,

OnButtonok)ON_EN_UPDATE(IDC_EDITSJ,OnUpdateEditsj)//}}AFX_MSG_MAP//StandardprintingcommandsON_COMMAND(ID_FILE_PRINT,

CRecordView::OnFilePrint)ON_COMMAND(ID_FILE_PRINTDIRECT,

CRecordView::OnFilePrint)ON_COMMAND(IDFILEPRINTPREVIEW,

CRecordView::OnFilePrintPreview)END_MESSAGE_MAP()

//////////////////////////////////////////////////////////////CMyViewconstruction/destruction

CMyView::CMyView()

:CRecordView(CMyView::IDD){//{{AFX_DATA_INIT(CMyView)m_pSet=NULL;//}}AFXDATA_INIT//TODO:addconstructioncodehere}CMyView::~CMyView(){}voidCMyView::DoDataExchange(CDataExchange*pDX){CRecordView::DoDataExchange(pDX);//{{AFX_DATA_MAP(CMyView)DDX_FieldText(pDX,IDC_EDITJG,m_pSet->m_JG,m_pSet);DDX_FieldText(pDX,IDC_EDITJS,m_pSet->m_JS,m_pSet);DDX_FieldText(pDX,IDC_EDITSPBH,m_pSet->m_SPBH,m_pSet);DDX_FieldText(pDX,IDC_EDITSPMC,m_pSet->m_SPMC,m_pSet);DDX_FieldText(pDX,IDC_EDITSJ,m_pSet->m_SJ,m_pSet);//}}AFX_DATA_MAP}

BOOLCMyView::PreCreateWindow(CREATESTRUCT&cs){//TODO:ModifytheWindowclassorstylesherebymodifying//theCREATESTRUCTcsreturnCRecordView::PreCreateWindow(cs);}

voidCMyView::OnInitialUpdate(){m_pSet=&GetDocument()->m_mySet;CRecordView::OnInitialUpdate();GetParentFrame()->RecalcLayout();ResizeParentToFit();}

//////////////////////////////////////////////////////////////CMyViewprinting

BOOLCMyView::OnPreparePrinting(CPrintInfo*pInfo){//defaultpreparationreturnDoPreparePrinting(pInfo);}

voidCMyView::OnBeginPrinting(CDC*/*pDC*/,

CPrintInfo*

/*pInfo*/){//TODO:addextrainitializationbeforeprinting}

voidCMyView::OnEndPrinting(CDC*/*pDC*/,

CPrintInfo*/*pInfo*/){

//TODO:addcleanupafterprinting}//////////////////////////////////////////////////////////////CMyViewdiagnostics

#ifdef_DEBUGvoidCMyView::AssertValid()

const{CRecordView::AssertValid();}

voidCMYView::Dump(CDumpContext&dc)const{CRecordView::Dump(dc);}

CMyDoc*CMyView::GetDocument()

//non-debugversionisinline{ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDoc)));return(CMyDoc*)m_pDocument;

}

#endif//DEBUG

////////////////////////////////////////////////////////////

//CMyViewdatabasesupport

CRecordset*CMyView::OnGetRecordset()

{

returnm_pSet;}//////////////////////////////////////////////////////////////CMyViewmessagehandlers

最后检验“商品交易处理”对话框的运行效果,如图5.16所示。图5.16

“商品交易处理”对话框的演示效果

另外,大家创建完“商品交易处理”对话框之后,可以查询其工程的设置文件。在该设置文件中,列出了相关的数据集的字段交换内容和ADODC控件的设置内容,其文件内容如下所示://商品交易管理系统Set.cpp:implementationoftheCMySetclass#include"stdafx.h"#include"商品交易管理系统.h"#include"商品交易管理系统Set.h"

#ifdef

DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif//////////////////////////////////////////////////////////////CMySetimplementation

IMPLEMENT_DYNAMIC(CMySet,CRecordset)CMySet::CMySet(CDatabase*pdb):CRecordset(pdb)//记录数据集初始化设置{

//{{AFX_FIELD_INIT(CMySet)

m_JG=0.0f;

m_JS=0;

m_SPBH=_T("");

m_SPMC=_T("");

m_SJ=_T("");

m_nFields=6;

//}}AFX_FIELD_INIT

m_nDefaultType=snapshot;

}

CStringCMySet::GetDefaultConnect(){return_T("ODBC;DSN=商品管理数据源'');

//ADODC数据源设置}

CStringCMySet::GetDefaultSQL(){

return_T("[商品交易]");}

voidCMySet::DoFieldExchange(CFieldExchange*pFX){

//数据字段交换//{{AFX_FIELD_MAP(CMySet)pFX->SetFieldType(CFieldExchange::outputColumn);RFX_Single(pFX,T("[价格]"),m_JG);RFX_Int(pFX,_T("[件数]"),m_JS);RFX_Date(pFX,_T("[交易日期]"),

m_TIME);RFX_Text(pFX,_T("[商品编号]"),m_SPBH);RFX_Text(pFX,_T("[商品名称]"),m_SPMC);RFX_Text(pFX,_T("[小计]"),m_SJ);//}}AFX_FIELD_MAP

}//////////////////////////////////////////////////////////////CMySetdiagnostics

#ifdef_DEBUGvoidCMySet::AssertValid()

const{CRecordset::AssertValid();}voidCMySet::Dump(CDumpContext&dc)const{

CRecordset::Dump(dc);}#endif

//_DEBUG

5.9

制作“商品信息”对话框“商品信息”对话框是用于对用户库存商品信息进行查询、搜索的对话框。5.9.1

插入一个新的对话框商品信息内容的管理,我们采用一个专用的对话框来进行,因此需要一个新的对话框,即需要在工程中加入一个新的对话框资源。插入新对话框的过程如下:(1)在工程中单击“插入|资源”菜单项,出现一个资源类型选择对话框,在资源类型选择对话框中选择“对话框”,即在工程中增加一个新的对话框IDD_DIALOGl。(2)将新的对话框IDD_DIALOGl中的Cancel按钮删除,并调整对话框布局。(3)设置新对话框IDD_DIALOGl的标题属性为:“商品信息”。5.9.2

为新的对话框创建数据源和数据表作为任何一个进行数据处理的对话框,数据源是不可缺少的,因此需要为新的对话框引入一个数据源。为新的对话框引入数据源的过程如下:(1)在新的对话框中插入一个ActiveX控件ADODCl,并设置其基本属性,如表5.13所示。

表5.13

ADODC1控件对象的基本属性属性属性内容IDIDC_ADODC1显示YES标题浏览商品信息记录ConnectionStringProvider=MSDASQL.1;PersistSecurityInfo=False;DataSource=商品管理数据源;InitialCatalog=D:\VC++写作案例\ch5\商品交易管理数据库RecordSource商品信息表CommandType2-TableCommandType

关于ADODCl控件的属性设置过程,需要涉及大量篇幅,请参考前面相关内容(案例二23页)。(2)为了能够显示、浏览和编辑商品信息,我们仍需要在新的对话框中放入一个数据表格控件,并设置其表格控件的基本属性,如表5.14所示。

表5.14

DataGrid控件的基本属性属性属性内容IDIDC_DATAGRID1显示YES标题商品信息处理表DataSourceIDC_ADODOC1AllowAddNewTrueAllowArrowsTrueAllowDeleteTrueAllowUpdateTrue

数据表格控件的关键属性是数据源绑定属性,即DataSource属性,关于这一属性的设可以直接通过属性框选择数据绑定对象,即IDCADODCl。其对话框布局如图5.17。图5.17

“商品信息”对话框布局5.9.3

为新的对话框IDD_D1ALOGl创建新类并进行声明作为一个新引入的对话框资源,它不属于工程中的一个类,必须为之创建一个新类,以便成为工程中的一个成员,为此需要为对话框创建新类。其创建过程可参考前面章节的内容,设置其新类名为CmyDlgl,然后在主对话框的工程实现文件中进行声明。其声明过程内容如下所示://商品交易管理系统View.cpp:implementationoftheCMyViewclass#include"stdafx.h"#include"商品交易管理系统.h"

#include"商品交易管理系统Set.h"#include"商品交易管理系统Doc.h"#include”商品交易管理系统View.h

//开始声明#include"MyDlgl.h"

//结束声明

#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif5.9.4

用主对话框调用“商品信息”对话框通过向导创建的对话框需要用过程进行调用,其调用过程的执行者仍为一定的控件,因此,需要在主对话框中放入新的控件并进行重新布局,其方法如下:(1)在主对话框IDD_MY_FORM中放入一个分组框控件。(2)在分组框控件中放入两个选项按钮控件,分别用于调用“商品信息”对话框和后面即将制作的“客户信息”对话框;其对话框布局如图5.18所示。图5.18

制作“客户信息”对话框

在主对话框中新增加的分组框控件和选项按钮控件的属性设置如表5.15所示。表5.15

分组框控件与选项按钮控件的基本属性控件对象索引标题分组框IDC_STATIC查询选项按钮IDC_RADIO1商品信息

IDC_RADIO2客户信息在两个选项按钮中,对于“客户信息”按钮,我们将在下一节使用,因此现在我们仅需要对“商品信息”选项按钮编制过程代码,即选择消息映射类型、创建函数名称和编制过程代码,其过程代码如下所示:最后编译运行工程,并检验对话框调用和编辑效果,如图5.19所示。图5.19

对话框调用与编辑效果显示5.10

制作“客户信息”对话框“客户信息”对话框是用户进行商品交易过程中与客户联系的相关信息的对话框,它主要用于编辑、修改和查询客户信息,因此其作用与“商品信息”对话框基本一致,这样就决定了它们的制作过程也基本一致,为此我们作一个大致的介绍。5.10.1

插入新的对话框资源在这一节,我们将增加一个新的对话框IDD_DIALOG2。增加对话框IDD_DIALOG2的过程如下:(1)在工程中单击“插入,资源”菜单项,出现一个资源类型选择对话框,在资源类型选择对话框中选择“对话框”,即在工程中增加一个新的对话框IDD_DIALOG2。(2)将新的对话框IDD_DIALOG2中的Cancel按钮删除,并调整对话框布局。(3)设置新对话框IDD_DIALOG2的标题属性为:“客户信息”。5.10.2

为新的对话框创建数据源和数据表与对话框IDD_DIALOGl一样,作为一个进行数据处理的对话框,数据源是不可缺少的,因此需要为新的对话框引入一个数据源。为新的对话框引入数据源的过程如下:(1)在新的对话框中插入一个ActiveX控件ADODCl,并设置其基本属性,如表5.16所示。表5.16

ADODCl控件对象的基本属性属性属性内容IDIDC_ADODC1显示YES标题编辑、浏览、查询客户信息ConnectionStringProvider=MSDASQL.1;PersistSecurityInfo=False;DataSource=商品管理数据源;InitialCatalog=D:\VC++写作案例\ch5\商品交易管理数据库RecordSource供货商信息CommandType2-ableCommandType(2)为了能够显示、浏览和编辑商品信息,我们仍需要在新的对话框中放入一个数据表格控件,并设置其表格控件的基本属性,如表5.17所示。表5.17

DataGrid控件的基本属性属性属性内容IDIDC_DATAGRID1显示YES标题客户信息数据表DataSourceIDC_ADODC1AllowAddNewTrueAllowArrowsTrueAllowDeleteTrueAllowUpdateTrue数据表格控件的关键属性是数据源绑定属性,即DataSource属性,关于这十属性的设置方法,可以直接通过属性框选择数据绑定对象,即IDC_ADODCl。其对话框布局如图5.20所示。图5.20

“客户信息”对话框布局5.10.3

为新的对话框IDD_DIALOG2创建新类并进行声明同样,对于新插入的对话框IDD_DIALOG2,它不属于工程中的一个类,必须为之创建一个新类,以便成为工程中的一个成员,为此需要为对话框创建新类。其创建过程可参考前面章节的内容,设置其新类名为CMyDIg2,然后在主对话框的工程实现文件中进行声明。其声明过程内容如下所示://商品交易管理系统View.cpp:implementationoftheCMyViewclass#include"stdafx.h"#include"商品交易管理系统.h"

#include"商品交易管理系统Set.h"#include"商品交易管理系统Doc.h"#include"商品交易管理系统View.h"

//开始声明#include"MyDlgl.h"#include"MyDlg2.h"

//结束声明#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif5.10.4

用主对话框调用“客户信息”对话框调用对话框IDD_DIALOG2的方法与调用对话框:IDD_DIALOGl的一样,需要用一定的控件来作为行为的执行者。在前面的主对话框中我们已经放置了一个选项按钮IDC_RADIO2,它专门用于调用对话框IDD_DIALOG2。其调用的过程代码如下所示:最后检验对话框IDD_DIALOG2的调用和对客户信息的编辑浏览效果,如图5.21所示。图5.21

对话框IDD_DIALOG2的调用与信息显示5.11

源文件(资源文件)的编译与文档分析作为本案例的结束,我们将说明资源文件的单独编译方法,并介绍两个资源的资源文件,一个是SPLASH资源文件,另一个是工程设置文件。大家可以通过分析文件,了解工程的一些运行机制和工程生成的基本结构,从而逐步从资源文件的构成深入了解VC++的一些知识。5.11.1

资源文件的单独编译在前面的案例中,我们一般采用的是对工程的全部资源进行编译运行并对工程进行检验的,这样可以从总体检验整个工程的效果。但任何总体均是由局部所构成的,因而,如果先对局部进行编译,则往往可以减少工程的编译难度和编译错误的冗余程度。一个资源可以作为一个独立的单元进行编译,这样可以从局部对工程进行检验,其方法如下:(1)在工程视图选项卡中双击资源文档,出现全部资源文件列表,如图5.22所示。图5.22

资源文件列表

(2)在资源文件列表中选择一个欲编译的资源文件,并单击鼠标右键,出现一个快捷菜单,如图5.23所示。(3)在快捷菜单中单击“Compile…”菜单项,即可以编译该文件,如架无任何错误信息,则表明在工程中该单元无错误代码,从而可以减少工程编译错误时对本单元的怀疑,而进行其他单元的检验。在VC++中有一个32位的编译器,全部编译过程和编译信息显示在编译器信息显示栏中,其信息通常如下所示:图5.23

快捷菜单

----------Configuration:商品交易管理系统

-Win32Debug------------Compiling...Skipping...(norelevantchangesdetected)Mydlg.cpp

Mydlg.obj-0error(s),0warning(s)5.11.2

SPLASH资源文件任何一个资源一经加入到工程,系统自动为它生成一个资源文件,该文件将记录该资源的构成、资源在工程牛的运行方式等等。SPLASH资源主要是作为系统启动封面,对制作的系统进行说明,同时也体现了系统制作的规范性。SPLASH资源在工程运行中,主要经历资源的调用、闪烁和释放过程,这些过程均将从SPLASH资源文件中得到说明。SPLASH资源文件内容如下所示://CG:ThisfilewasaddedbytheSplashScreencomponent.该文件是一个增//加SPLASH画面控件的文件//Splash.cpp:implementationfile说明文件

//

#include"stdafx.h"

//e.g.stdafx.h头文件声明#include"resource.h"

//e.g.resource.h

#include"Splash.h"

//e.g.splash.h#ifdef

_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharBASED_CODETHIS_FILE[]=__FILE___;#endif/////////////////////////////////////////////////////////////////////////////////////////////////SplashScreenclass

//SPLASH画面类变量说明

BOOLCSplashWnd::c_bShowSplashWnd;CSplashWnd*CSplashWnd::c_pSplashWnd;CSplashWnd::CSplashWnd(){}

CSplashWnd::~CSplashWnd(){//Clearthestaticwindowpointer.ASSERT(c_pSplashWnd==this);c_pSplaphWnd=NULL;}

BEGIN_MESSAGE_MAP(CSplashWnd,CWnd)//{{AFX_MSG_MAP(CSplashWnd)ON_WM_CREATE()ON_WM_PAINT()ON_WM_TIMER()//}}AFX_MSG_MAPEND__MESSAGE__MAP()

voidCSplashWnd::EnableSplashScreen(BOOLbEnable

/*=TRUE*/){c_bShowSplashWnd=bEnable;}

voidCSplashWnd::ShowSplashScreen(CWnd*pParentWnd/*=NULL*/){if(!c_bShowSplashWnd||

c_pSplashWnd!=NULL)

return;//Allocateanewsplashscreen,andcreatethewindow.

定位新的画面并创建窗口c_pSplashWnd=newCSplashWnd;if(!c_pSplashWnd->Create(pParentWnd))

deletec_pSplashWnd;else

c_pSplashWnd->UpdateWindow();

//更新窗口}BOOLCSplashWnd::PreTranslateAppMessage(MSG*pMsg){if(cpSplashWnd==NULL)

returnFALSE;//Ifwegetakeyboardormousemessage,hidethesplashscreen.if(pMsg->message==WM_KEYDOWN||pMsg->message==WM_SYSKEYDOWN||pMsg->message==WM_LBUTTONDOWN||pMsg->message==WM_RBUTTONDOWN||pMsg->message==WM_MBUTTONDOWN||pMsg->message==WM_NCLBUTTONDOWN||pMsg->message==WM_NCRBUTTONDOWN||pMsg->message==WM_NCMBUTTONDOWN){

c_pSplashWnd->HideSplashScreen();

//隐去SPLASH画面

returnTRUE;

//messagehandledhere}

returnFALSE;

//messagenothandled}BOOLCSplashWnd::Create(CWnd*pParentWnd/*=NULL*/){

if(!m_bitmap.LoadBitmap(IDB_SPLASH))

//调用位图文件

returnFALSE;BITMAPbm;m_bitmap.GetBitmap(&bm);

//获取位图returnCreateEx(0,AfxRegisterWndClass(0,AfxGetApp()->LoadStandardCursor(IDC_ARROW)),NULL,WS_POPUP|WS_VISIBLE,

0,

0,bm.bmWidth,bm.bmHeight,pParentWnd->GetSafeHwnd(),NULL);}voidCSplashWnd::HideSplashScreen(){//Destroythewindow,andupdatethemainframe.//释放窗口更新主界面DestroyWindow();AfxGetMainWnd()->UpdateWindow();}voidCSplashWnd::PostNcDestroy(){//FreetheC++class.

//释放C++类对象deletethis;

}intCSplashWnd::OnCreate(LPCREATESTRUCTlpCreateStruct){

if

(CWnd::OnCreate(lpCreateStruct)==-1)

return-1;//Centerthewindow.

//窗口居中CenterWindow();//Setatimertodestroythesplashscreen.

//设置画面闪烁时间SetTimer(1,

750,

NULL);return0;}voidCSplashWnd::OnPaint(){CPaintDCdc(this);CDCdcImage;if(!dcIma

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论