物流单据管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
物流单据管理系统-标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII
物流单据管理系统
一、案例预览
运行该系统,主界面如图一所示,有“开销售单”、“开进货单”、“查看单据”等业务,下面按业务依次说明最后实现的程序界面和操作方法。
图一
(1)开销售单。单击程序主界面的【开销售单】按钮,弹出“销售单据”对话框,如图二所示。填完单据的各项内容后,单击【保持】按钮。如果程序提示保存成功,会返回主界面,单据列表中又增加了一张销售单据。
图二
(2)开进货单。单击程序主界面的【开进货单】按钮,弹出“进货单据”对话框,如图三所示。开单操作和销售单类似。
图三
(3)查看单据。在主界面中,选择要查看的单据,然后单击【查看单据】按钮,弹出对应的单据,如图四所示。此时单据不能被编辑,查看完后单击【关闭】按钮退出查看操作。
图四
二分析与创建数据库
本例采用Access 2002作为数据库,使用ADO方式访问数据库。
首先创建一个数据库,命名为“bills.mdb”,并且将该数据库文件放在本实例应用程序的根目录中,便于访问。
从前面的分析知道。本例需要两个数据表bill和goods。表bill用来保持单据,包括进货单据和销售单据,单据类型用一个数字类型的字段type来区分,0表示进货单,1表示销售单。表goods用来保持单据中填写的流通商品,通过字段billid来对应某张单据,字段index表示在该单据中的表格位置。表结构如图五和图六所示。
图五(bill表)
字段名称数据类型说明
id 文本单据编号
type 数字单据类型(0=进货单,1=销售单)
time 日期/时间制单日期
storage 文本交易时使用的仓库
client 文本交易的客户名称
operator 文本经手人
account 文本交易时使用的银行帐户
comment 文本单据的附加说明
图六(goods表)
三创建VC工程
创建给予对话框的应用程序,从第二步到第六步全部采用默认方式。
四引入控件
1、表格(Grid)控件
在用VC开发关于数据库的项目时,通常使用DataGrid作为数据库表格控件。本例中介绍另外一个共享表格控件CGridCtrl,非常好用,也很美观,进货单据和销售单据显示商品时使用的就是CGridCtrl控件。
CGridCtrl和一般的GRID的不同之处在于,一般的GRID并不适合显示大的数据量,如果一个查询结果有上万条记录的话,如果都要插入到GRID中,这将是个很慢的过程,并且在GRID中移动滚动条的话,它的记录的滚动也是很慢的。而CGridCtrl并不会真正把这些记录的数据全部插入到控件中,当CGridCtrl的滚动条滚动时,它会根据CGridCtrl的显示面积的大小和查询得到的总的记录数计算当前应该显示哪些行,然后会把那几行的记录数据插入到表格中,这样速度当然是很快的,而且没有数据量多少的限制。
将表格控件CGridCtrl引入本例工程中需要如下步骤。
(1)将光盘中的相关文件拷贝到创建的工程目录下,它们位于本例工程的
gridctrl_src目录中。
(2)选择菜单【Project】->【Add To Project】->【Files】,打开“Insert Files into
Project”对话框。选中gridctrl_src目录下的所有文件,单击【OK】按钮,将表格控件CGridCtrlDE 所有相关文件都加入到工程中。
引入表格控件完成后,可以看到新增了数个与该控件相关的类。为了使工作区整洁,增加一个文件夹“grid”,将这些新增的文件拖入其中。如下图所示:
2、位图按钮
VC提供的默认按钮形态比较单调,这里介绍一个共享按钮控件CTrackLookButton。该按钮将图标和文字一起显示,并且呈flat形式。将控件CTrackLookButton引入本例工程中需要如下步骤。
(1)将光盘中的文件TrackLookButton.h和TrackLookButton.cpp拷贝到创建的工程目录中。
(2)选择菜单【Project】->【Add To Project】->【Files】,打开“Insert Files into Project”对话框,将文件TrackLookButton.h和TrackLookButton.cpp加入工程中。五使用ADO连接数据库
(1)VC中通过在程序中使用预编译指令#import来告诉编译器将此指令中指定的动态链接库引入工程中。在应用程序的文件stdafx.h中加入如下语句:
#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
(2)在应用程序类CBillsManagerAPP的头文件中分别声明一个_ConnectionPtr和
_RecordsetPtr类型的指针,访问类型为public。其代码如下:
public:
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;
(3)在CBillsManagerApp::InitInstance()成员函数里,初始化OLE/COM库环境,创建连接对象,打开与数据源的连接,以及创建记录集对象。其代码如下:
BOOL CBillsManagerApp::InitInstance()
{
AfxEnableControlContainer();
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.
#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL #else
Enable3dControlsStatic(); // Call this when linking to MFC statically #endif
//初始化com环境
::CoInitialize(NULL);
//创建连接对象和记录集对象
HRESULT hr;
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection");//创建Connection 对象
if(SUCCEEDED(hr))
{
hr = m_pConnection->Open(
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=bills.mdb",
"","",adModeUnknown);///连接数据库
///上面一句中连接字串中的Provider是针对ACCESS2000环境的,
//对于ACCESS97,需要改为:Provider=Microsoft.Jet.OLEDB.3.51 }
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
m_pRecordset.CreateInstance(__uuidof(Recordset));
CBillsManagerDlg dlg;
m_pMainWnd = &dlg;