用VC++制作一个图书出版管理系统.docx
《用VC++制作一个图书出版管理系统.docx》由会员分享,可在线阅读,更多相关《用VC++制作一个图书出版管理系统.docx(56页珍藏版)》请在冰豆网上搜索。
用VC++制作一个图书出版管理系统
用VC++制作一个图书出版管理系统
关键词:
DAO数据源创建 系统集成 消息函数 数据记录导航器制作
3.1 系统设计的目的和意义
出版社图书出版管理是一个庞大的任务,传统方式的图书管理将会造成巨大的人力和物力的浪费,因此能否实现计算机管理呢?
回答是可以的。
本案例将用VC++制作一个图书出版管理系统,他可以基本实现图书出版管理的大部分功能。
在参考文献[1]、[2]中,均有图书管理系统制作的介绍。
参考文献[2]是基于VisualFoxPr06.0实施的,而参考文献[1]则是基于VisualC++6.0制作的。
在参考文献[1]中,仅作了一个单一的界面,而且使用的代码过于复杂,往往令初学者难以接受,因此,本案例将采用简化的过程代码和完整的系统集成技术,并采用DAO数据源创建方法。
在以DAO方式创建数据环境时,采用了与参考文献[1]以及本书中的案例一、案例二完全不同的方式,实现了数据源的引入和应用程序的制作。
在程序中我们利用了消息函数,并自己创建了一组数据记录导航程序和数据修改程序,程序利用了简单的消息映射过程代码,实现了对数据集的导航、浏览、增加和删除的功能,这也是与参考文献[1]中的代码不一样的,他是一种方便快捷的构建应用系统的方法。
3.2 系统功能设计
本系统具有一般系统的数据处理功能,如数据录入、增加、修改、删除等,另外,本系统将涉及多个对话框及对话框之间的相互切换。
3.3 数据库与数据表的设计
本系统将首先创建一个“图书出版管理系统”数据库,并在他之中创建三个数据表,一个是“出版图书基本信息”数据表,一个是“图书分类”表,一个是“图书出售信息”表。
3.3.1 定义数据表结构
数据表是数据库中的“元素”,数据库是数据表的集合。
数据库和数据表是任何数据库应用系统所不可缺少的基本要素,因此我们需要首先创建数据表。
先定义“出版图书基本信息”数据表的结构,如表3.1所示,他专门用于记录出版社出版的图书的基本情况。
表2.1 “出版图书基本信息”数据表结构
字段名称
字段类型
字段大小
索引
必须填写
图书ID
数字
长整型
有(无重复)
是
图书名称
文本
20
是
出版日期
数字
16
是
ISBN
文本
30
是
出版商
文本
26
是
出版地
文本
26
是
价格
货币
默认
是
作者
文本
20
是
类别ID
文本
长整型
是
“图书分类”数据表的结构定义如表3.2所示。
表3.2“图书分类”数据表的结构
字段名称
字段类型
字段大小
索引
必须填写
类别ID
长整型
默认
有(无重复)
是
类别名称
文本
30
是
“图书出售信息”数据表的结构如表3.3所示。
表3.3 “图书出售信息”数据表的结构
字段名称
字段类型
字段大小
索引
必须填写
出售ID
数字
长整型
有(无重复)
是
出售价格
数字
长整型
是
出售数量
数字
长整型
是
图书ID
数字
长整型
有(有重复)
是
3.3.2 数据库与数据表创建过程
利用MicrosoftAccess创建数据库及其数据表的步骤如下:
(1)启动MicrosoftOffice2003中的MicrosoftAccess2003应用程序,出现图3.1所示对话框。
图3.1 新建数据库选择
(2)选择创建一个空数据库,单击“确定”按钮之后出现保存对话框,确定保存数据库的文件位置(创建的数据库保存的位置为D:
\VC++写作案例\CH3\)和创建的数据库名称为“图书出版管理系统”即可,随后出现图3.2所示界面。
图3.2数据库中的数据表操作界面
在数据库操作界面中,用户可以打开已经存在的数据表,并进行数据处理操作,也可以创建新的数据表或删除已经存在的表。
(3)双击“设计”菜单,即可以设计一个新的数据表结构:
图3.3是“图书出版基本信息”数据表结构的创建界面,用户可按表3.1定义的结构进行创建即可。
图3.3 “图书出版基本信息”数据表设计
用同样的方法,可以创建其他两个数据表,这在后面的系统制作中将会用到。
数据表结构一经创建,用户可以打开该数据表,在数据表输入一些基本数据,以在后面的系统设计中体现设计的效果。
3.4 图书出版管理系统应用程序框架
在VC++中创建应用程序,可以通过向导首先创建一个应用程序的框架,应用程序框架为用户提供了一个基本购开发过程。
在这里,首先介绍制作“图书出版管理系统”的基本框架的过程和方法。
其过程如下:
(1)启动VC++程序,出现VC+开发平台。
(2)在VC++主菜单中单击“文件|新建”菜单项,出现工程类型选择对话框,在工程类型选择对话框中选择工程类型为“MFCAppWizard[exe]”。
(3)在“工程”编辑框中输入“图书出版管理系统”。
(4)在“位置”列表框中选择“D:
\VC++写作案例\CH3\”。
(5)选择创建新工作区和适应的Win32平台,如图3.4所示。
图3.4 新工程创建设置
(6)单击“确定”按钮,出现应用程序类型选择对话框,如图3.5所示。
图3.5 设置应用程序类型
(7)在应用程序类型选择对话框中选择“单个文档”、“文档查看体系结构支持”并设置资源语言为“中文”。
(8)单击“下一步”按钮进行进一步的设置;选择包含的数据库,如图3.6所示。
图3.6 选择包含的数据库
(9)选择“查看数据库不使用文件支持”返项。
(10)中击“DataSource”按钮,出现图3.7所示的数据源创建对话框。
在数据源连接方式中选择ODBC方式,并通过开关按钮选样“D:
\VC++写作案例\Ch3\图书出版管理系统.mdb”作为系统制作的数据源,如图3.7所示。
图3.7 数据源连接方式与数据源选择
(11)单击OK按钮,出现“图书出版管理系统”数据库中的“出版图书基本信息”数据表,回到图3.6所示对话框。
(12)在图3.6所示刘话框中单击“完成”按钮,即出现创建应用程序基本框架的全部信息提示:
Applicationtypeof 图书出版管理系统:
SingleDocumentInterfaceApplicationtargeting:
Win32
Classestobecreated:
Application:
CMyAppin 图书出版管理系统.hand图书出版管理系统.cpp
Frame:
CMainFrameinMainFrm.handMainFrm.cpp
Document:
CMyDocin图书出版管理系统Doc.hand图书出版管理系统Doc.Cpp
DaoRecordView:
CMyViewin图书出版管理系统View.hand图书出版管理系统View.cpp
DaoRecordset:
CMySetin图书出版管理系统Set.hand图书出版管理系统Set.Cpp
(connectedtotable‘[基本信息]’indatasource‘D:
\\VC++写作案例\\Ch3\\图书出版管理系统.mdb’)
Features:
+Initialtoolbarinmainframe
+Initialstatusbarinmainframe
+PrintingandPrintPreviewsupportinview
+3DControls
+UsessharedDLLimplementation(MFC42.DLL)
+Databasesupport,withoutfilesupport
+ActvieXControlssupportenabled
+Localizabletextin:
中文[中国]
该信息提示总结了创建应用段序框架全部的设置内容,用户可以浏览该信息,如果与需要的设置不符,则需要重新创建应用程序框架,以满足后面程序开发的需要:
否则,在后面已经制作了一定内容之后再来修改框架,将造成一定的损失。
单击“确定”按钮后即出现新创建的应用程序的工作区,如图3.8所示。
图3.8 工程工作区显示
3.5 开发图书出版基本信息处理对话框
在图书出版管理系统中,图书出版的基本信息处理是一个重要的方面,为此我们首先需要创作这样一个界面。
在工程向导生成的两个对话框中,一个是主界面,一个是About对话框。
我们就需要在主界面中制作图书出版的基本信息处理功能。
3.5.1 在对话框中放入控件并进行属性设置
对话框的制作开发就是对控件进行开发制作,一个对话框只是—个容器,他可以容纳别的控件并产生作用,为此,制作开发对话框,首先需要在对话框中放入必要的控件,操作步骤如下:
(1)删除对话框IDD_MY_FORM中的“TODO:
在这个对话框里设置表格控制”文本提示框。
(2)在对话框中放入一些标签控件、分组框控件、编辑框控件及命令按钮控件,对话框布局如图3.9所示。
图3.9 对话框布局
其中,标签控件的属性如表3.4所示。
表3.4 标签对象的基本属性
ID
标题内容
IDC_STATICDLGCAPTION
图书出版管理系统
IDC_STATICBH
图书编号
IDC_STATICBOOKNAME
图书名称
IDC_STATICAUTHER
作者
IDC_STATICPUBADDR
出版地
IDC_STATICPUBNAME
出版社
IDC_STATICFNH
分类号
IDC_STATICPRICE
售价
两个分组框控件的基本属性如表3.5所示。
表3.5 分组框对象的基本属性
ID
标题内容
IDC_STATICGROUP1
记录编辑区
IDC_STATICGROUP2
记录操作区
编辑框控件的属性设置如表3.6所示。
表3.6 编辑框对象的基本属性
ID
编辑内容
IDC_EDIT_BH
输入图书编号
IDC_EDITFNH
输入图书分类号
IDC_EDITBOOKNAME
输入图书名称
IDC_EDITAUTHER
输入作者名称
IDC_EDITBOOKPRICE
输入图书价格
IDC_EDITBOOKADDRESS
输入图书出版地
IDC_EDITPUBNAME
输入出版社名称
命令按钮控件的基本属性如表3.7所示。
表3.7 命令按钮对象的基本属性
ID
标题内容
IDC_BUTIONADDNEW
增加记录
IDC_BUTIONDELETE
删除记录
IDC_BUTIONPDATE
刷新记录
IDC_BUTIONFIRST
第一条
IDC_BUTIONNEXT
下一条
IDC_BUTIONPREV
前一条
IDC_BUTTONLAST
最后一条
3.5.2 对编辑框进行数据绑定
在以上对话框的控件中,除标签控件用于标示之外,编辑框控件必须与数据集进行数据绑定,命令按钮必须进行过程代码编制才能执行相应的任务。
因此用户需要首先将每一个编辑框控件与工程中引入的数据源中的字段进行数据绑定。
如何进行数据绑定呢?
由于存在多个编辑框控件,因此我们仅以“图书编号”编辑框控件的数据绑定为例加以说明,其他编辑框控件的数据绑定操作可以如法炮制。
首先修改数据源的字段映射的成员变量,其方法如下:
(1)用鼠标选中编辑框IDC_EDIT_BH控件,然后单击鼠标右键,出现一个快捷菜单。
(2)快捷菜单中单击“建立类向导”菜单项,出现一个消息映射对话框。
(3)将消息映射选项卡切换到“成员变量”选项卡,如图3.10所示。
图3.10 “成员变量”选项卡
(4)在“成员变量”选项卡的Classname列表框中选择数据集CmySet,此时将出现创建数据源时产生的数据源字段的全部成员变量。
往往全部字段的成员变量名为自动生成的,而且按自然编号排列,这样在建立编辑框与字段映射时很不方便,因此需要修改其数据集中全部字段的成员变量名称,通常按字段名称的中文拼音字母重新定义字段的成员变量,重新定义字段的成员变量之前,需要先删除原字段成员变量,然后再单击“增加成员变量”按钮定义新的成员变量,其全部字段的成员变量如图3.11所示。
图3.11 重新定义成员变量的结果
接下来,我们就可以为“图书编号”编辑框控件与字段成员变量进行映射。
(5)在图3.11所示的对话框的Classname列表框中选择CmyView,出现对话框全部成员列表,如图3.12所示。
图3.12 成员名称列表
(6)在成员名称列表中选择IDC_EDIT_BH编辑框,然后单击AddVariable按钮,出现选择字段映射成员变量的列表框,在字段映射成员变量列表框中选择“图书编号”字段的成员变量名称即可,如图3.13所示。
图3.13 编辑框控件与字段成员变量的映射
用同样的方法可以完成其他编辑框与相应的字段成员变量之间的映射关系。
这样就将对话框中的编辑控件与数据源中的字段一一对应起来,并可以通过编辑框控件对数据集中的字段进行修改、增加与删除等数据操作。
3.5.3 为每一个命令按钮编制过程代码
命令按钮是用于事务处理的,但没有过程代码是不能进行任何操作的,因此我们需要为每一个命令按钮编制过程代码,我们以“增加记录”命令按钮为例来说明编制过程代码的方法。
(1)用鼠标右键单击“增加记录”命令按钮,出现一个快捷菜单。
(2)在快捷菜单中单击“创建类向导”菜单项,出现消息映射对话框。
(3)在消息映射对话框的第一个页面中选择BN_CLICKED单击事件句柄,并单击“增加函数”按钮,出现“增加记录”按钮的函数定义界面,直接接受系统建议的函数名即可。
(4)单击“编辑代码”按钮,可以为“增加记录”按钮编辑过程代码,其代码如下所示:
voidCMyView:
:
OnButtonaddnew()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_pSet->AddNew();
UpdateData(FALSE);
}
其他几个命令按钮的过程代码编制可采用完全相同的方法,他们的过程代码如下:
“删除记录”命令按钮的过程代码如下所示:
voidCMyView:
:
OnButtondelete()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_pSet->Delete();
m_pSet->MoveNext();
if(m_pSet->IsEOF())
m_pSet->MoveLast();
if(m_pSet->IsEOF())
m_pSet->SetFieldNull(NULL);
UpdateData(FALSE);
}
“刷新记录”命令按钮的过程代码如下所示:
voidCMyView:
:
OnButtonupdate()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData();
m_pSet->Update();
m_pSet->Requery();
//m_pSet->CancelUpdate();
}
注意:
在对话框运行时,只有在有新记录增加、记录删除或记录修改的情况下才能刷新记录,否则会出现信息提示。
“第一条记录”命令按钮的过程代码如下所示:
voidCMyView:
:
OnButtonfirst()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_pSet->MoveFirst();
if(m_pSet->IsBOF())
{
MessageBox(“记录已经在第一条!
”);
m_pSet ->MoveNext();
UpdateData(FALSAE);
return;
}
UpdateData(FALSE);
}
“下一条记录”按钮的过程代码如下所示:
voidCMyView:
:
OnButtonnext()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_pSet->MoveNext();
if(m_pSet->IsEOF()){
MessageBox(“记录已经在最后一条!
”);
m_pSet->MovePrev();
UpdateData(FALSE);
Return;
}
UpdateData(FALSE);
}
“前一条记录”命令按钮的过程代码如下所示:
voidCMyView:
:
OnButtonprev()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_pSet->MovePrev();
if(m_pSet->IsBOF()){
MessageBox(“记录已经在第一条!
”);
m_pSet->MoveNext();
UpdateData(FALSE);
Return;
}
UpdateData(FALSE);
}
“最后一条记录”命令按钮的过程代码如下所示:
voidCMyView:
:
OnButtonlast()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_pSet->MoveLast();
if(m_pSet->IsEOF())
{
MessageBox(“记录已经在最后一条!
”);
m_pSet->MovePrev();
UpdateData(FALSE);
Return;
}
UpdateData(FALSE);
}
这样我们便完成了对话框IDD_MY_FORM的全部制作过程。
编译运行工程,出现该对话框的运行效果,如图3.14所示。
图3.14 对话框运行效果
3.6 制作图书销售处理对话框
在图书出版管理系统中,图书销售管理是一个重要的方面,需要一个专门的对话框来对图书销售进行记录、编辑、增加或删除。
3.6.1 增加新的对话框资源并创建一个新类
要制作进行图书销售处理的对话框,首先需要增加一个新的对记框资源,并为该资源创建一个新类,以便系统按类进行调用。
其操作如下:
(1)在VC++主菜单中单击“插入|资源”菜单项,出现一个资源类型选择列表。
(2)在资源类型列表中选择对话框Dialog,单击“新建”按钮,则在工程中增加一个新的对话框,其自动生成的资源索引号ID为:
IDD_DIALOG1;修改他的标题属性为“图书销售”。
为新的对话框创建一个新的类。
(3)用鼠标右键单击新的对话框IDD_DIALOG1,出现一个快捷菜单,在快捷菜单中单击“建立类向导”,出现一个类创建选择对话框,如图3.15所示。
图3.15 创建类选择
(4)选择创建一个新的类,单击OK按钮,即进入创建新的类设置对话框,在类名设置对话框中设置该对话框的类名称为CMyDlg1,并作如下选择:
FileName:
MyDlg1.cpp //类文件名
BaseClass:
Cdialog //所属基类
DialogID:
IDD_DIALOG1 //索引号
Automation:
None //处理自动化
图3.16 类创建设置
单击OK按钮结束类创建。
3.6.2 对新类进行声明
由于需要通过主控界面的对话框调用新的对话框,因此需要在应用系统的主对话作程序文档中对两个新的对话框资源进行声明,以明确其身份。
声明新类的方法如下:
(1)在资源管理器中切换到FileView页面,如图3.17所示。
图3.17 主对话框视图文档页面
(2)在SourceFile文档中双击“MyDlg.cpp,即出现该文件的开始部分,该部分是对工程中的类进行声明,增加新的声明,如下所示:
//MyDlg.cpp:
implementationfile
#include“stdafx.h”
#include“图书出版管理系统.h”
#include“MyDlg.h”
//开始声明
#include“MyDlg1.h”
//结束声明
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
StaticcharTHIS_FILE[]=_FILE_;
#endif
3.6.3 用主对话框IDD_MY_FORM调用新的对话框IDD_DIALOG1
前面我们已经创建了一个新的对话框资源并创建一个新类,同时对该类进行了声明。
如何通过主对话框IDD_MY_FORM对新的对话框进行调用,这是关键的问题。
为了能够对新的对话模型进行调用,我们光对主对话框进行修改并增加控件,其操作如下:
(1)调整主对话框宽度,以适合系统制作和功能执行的需要。
(2)在主对话框中放入一个分组框控件。
(3)在分组框控件中放入两个选项按钮:
对话框布局如图3.18所示
图3.18 主对话框布局
其中分组框控件和两个选项按钮的基本属性如表3.8所示。
表3.8 分组框与选项按钮的基本属性
ID
标题内容
IDC_STATICGROUP3
查询
IDC_RADIO1
图书销售
IDC_RADIO2
图书分类
选项按钮IDC_RADIO2,即“图书分类”按钮,将用于调用图书分类对话框。
接下来我们为“图书销售”选面按钮编制过程代码。
(4)用鼠标右键单击“图书销售”选项按钮,出现一个快捷菜单。
(5)在快捷菜单中选择“创建类向导”,出现消息映射对话框,如图3.19所示。
图3.19 消息映射对话框