第三章 数据库结构的实现 copyright paper51.com Access2000 就是关系数据库开发工具,数据库能汇集各种信息以供查询、存储和检索。Access 的优点在于它能使用数据表示图或自定义窗体收集信息。数据表示图提供了一种类似于 Excel 的电子表格,可以使数据库一目了然。另外,Access 允许创建自定义报表用于打印或输出数据库中的信息。Access也提供了数据存储库,可以使用桌面数据库文件把数据库文件置于网络文件服务器,与其他网络用户共享数据库。Access 是一种关系数据库工具,关系数据库是已开发的最通用的数据库之一。如上所述,Access 作为关系数据库开发具备了许多优点,可以在一个数据包中同时拥有桌面数据库的便利和关系数据库的强大功能。经前面的系统需求分析和概念结构设计以后,得到数据库逻辑结构。现在就可以在access 2000,实现上面设计的数据库逻辑结构,然后转化为access97.下面给出创建这些表格的清单。 copyright paper51.com 3.1 创建系统用户表格 user_info copyright paper51.com 用户名称 用户密码 内容来自www.paper51.com 3.2 创建物资基本信息表格 material copyright paper51.com 物资编号 物资名称 物资规格 类别 计量单位 paper51.com 3.3创建入库物资信息表格 msave 内容来自论文无忧网 www.paper51.com 入库编号 入库物资编号物资名称 规格型号 种类 单位 数量 单价 金额 入库时间 经办人 保管人 仓库 备注 copyright paper51.com 3.4 创建出库物资信息表格 muse 内容来自论文无忧网 www.paper51.com
出库编号 出库物资编号 物资名称 规格型号 种类 单位 数量 单价 金额 入库时间 领用人 经办人 仓库 备注 内容来自www.paper51.com 3.5创建物资余额信息表格 msurplus paper51.com
物资编号 物资名称 规格型号 类别 计量单位 数量 金额 仓库 备注 http://www.paper51.com 第四章 物资管理信息系统主窗体的创建 内容来自论文无忧网 www.paper51.com
microsoft visual c++6.0提供了良好的集成开发环境,在这一环境下用户可以输入自己的程序,调试并运行.为了方便用户快速开发程序, visual c++不仅编译代码,而且产生代码.可以在几分钟之内就可以生成一个windows应用程序,所要做的只是告诉appwizard生成一个具有模板代码的"起始应用程序".appwizard是一个非常有效的辅助开发工具,能生成许多种应用程序,但对于大多数的人来说,想要的是可执行程序.appwizard不仅能够生成可执行程序,而且它还生成了每个程序所必要的模板代码-类,对象和函数.(1)appwizard提供了三种可选择的应用程序类型,并为每一种类型生成不同的代码和类.三种可选择的程序类型如下:1,单文档界面应用程序逻辑 这种应用程序一次只能打开一个文档:当选择file菜单的open或new时,当前打开的文件在新文件打开或建立前被关闭.在windows中notepad应用程序就是这种文档的典型代表.2 多文档界应用程序 多文档应用程序一次可以打开多个文档(通常是多个文件),在菜单栏上有Windows菜单并且在File菜单上有close先项.同时打开的多个文档可以通过close命令进行有选择地关闭.在Windows中如果希望一个文档有多个视图,则必须建立多文档视图.Windows中的Word或Excel都是多文档的例子.3基于对话框的应用程序 在这一种应用程序中,它没有文档也没有菜单,整个程序看起来就是一个对话框.Windows的磁盘扫描应用程序就是一个基于对话框的应用程序例子.(2)AppWizard允许用户选择是否需要文档/视图结构支持.如果需要AppWizard就在应用程序中自动生成了基于CDocument类的文档/视图结构,否则生成没有文档/视图结构的应用程序(在这种情况下,多一个磁盘文件打开一个文档视图时将不包含MFC支持). (3)AppWizard生成可执行应用程序允许用户选择是否支持数据库(在后面的任务中将详细介绍对数据库的支持).有关数据库支持的选项一共有四个. 4 None 不是编写数据库应用程序. 5 Header files only 不从CForm View 派生自己的视图或有一个Record菜单. 6 Database iew without file support 从CFormView 派生自己的视图并有一个Record菜单,但不需要对文档进行序列化,从而可以借助CRecordset类更新数据库记录.7 Database iew with file support 从CFormView 派生自己的视图并有一个Record菜单,同时又需要对文档进行序列化.(4)AppWizard提供了确定应用程序界面外观的选项.影响界面外观的选项有:8 Docking Toolbar AppWizard为用户创建了工具栏,用户在以后可以利用Resource View 对它进行编辑.如:删除不要的按钮,增加新的按钮.9Initial status bar AppWizard生成了初始状态栏以显示菜单提示和其它消息,用户可以在以后对状态栏进行编程以显示自己所需要显示的信息.用户要以在状态栏上增加指示器或其它组件. 下面开始使用visual c++6.0来编写数据库系统的客户端程序。 http://www.paper51.com 4.1创建工程项目-material_mis paper51.com 启动visual c++6.0后,从“file”菜单中选“new”命令,然后,单击“new”对话框中的“projects”选项卡,选择工程模板中的“mfc appwizard(exe)”选项,并在“project_name”中输入工程的名称:material_mis,在location中选择保存这个工程的位置:c:\vc,其他使用系统提供的默认选项,单击“OK”按钮,就会进入mfc appwizard,这个向导一共有6步,step1对话框中选中“single document”选项。单击“next”按钮,进入step 2 of 6对话框,这一步要选择需要的数据库,因为涉及到数据库的使用,所以在这里选中“header files only”选项,意思是在这个实例中只使用头文件种类所包含的数据库。单击“next”按钮,进入step 3 of 6对话框,这里保持系统给定的默认值。单击“next”按钮,进入 step 4 of 6对话框,在这里选中“3dcontrols”和“initial status bar”选项,其他选项都不需要选中。单击“next”按钮进入下一步,这里保持系统给定的默认值. 单击“next”按钮进入下一步,进入mfc向导的最后一步,在该对话框中,保证base class的下拉列表中选择的是cview,其他的保持系统提供的默认值。单击“finish”按钮,会出现一个“new project information”对话框,确认信息无误后,单击“ok”按钮,完成创建material_mis工程。 内容来自www.paper51.com 4.2创建主窗体菜单 http://www.paper51.com 完成上面的工作后,在“workspace”中选择“recourceview”命令,然后双击menu文件夹,再双击“idr_mainframe”项目,单击右边窗口中的“文件”菜单,双击“文件”或者敲enter键,就会出现“menuitem properties”对话框,在这个对话框中更改菜单项的内容,更改后的内容如图2示,第一级菜单的设置都和图3中的设置方法相同,二级菜单的设置方法如图3. copyright paper51.com 图2 http://www.paper51.com 图3 paper51.com 使用上面所讲述的设置方法,最终创建出如表4的菜单结构。 内容来自论文无忧网 www.paper51.com 表4 paper51.com 菜单结构 内容来自www.paper51.com 菜单名称 id http://www.paper51.com 系统 内容来自论文无忧网 www.paper51.com 修改密码 ID_MAINMENU_CHANGEPWD paper51.com 添加用户 ID_MAINMENU_APPENDACCOUNT 内容来自www.paper51.com 退出系统 ID_APP_EXIT 内容来自www.paper51.com 物资基本信息管理 http://www.paper51.com 添加物资基本信息管理 ID_MENU_ADDBASICINFO copyright paper51.com
修改物资基本信息管理 ID_MENU_ALTERBASICINFO paper51.com 删除物资基本信息管理 ID_MENU_DELBASICINFO copyright paper51.com 查询物资基本信息管理 ID_MENU_SEARCHBASICINFO 内容来自论文无忧网 www.paper51.com 物资入库信息管理 http://www.paper51.com 添加物资入库信息 ID_MENU_ADDININFO paper51.com
修改物资入库信息 ID_MENU_ALTERININFO http://www.paper51.com 删除物资入库信息 ID_MENU_DELININFO 内容来自论文无忧网 www.paper51.com 查询物资入库信息 ID_MENU_SEARCHININFO copyright paper51.com 物资出库信息管理 内容来自论文无忧网 www.paper51.com 添加物资出库信息 ID_MENU_ADDOUTINFO copyright paper51.com 修改物资出库信息 ID_MENU_ALTEROUTINFO 内容来自www.paper51.com
删除物资出库信息 ID_MENU_DELOUTINFO 内容来自论文无忧网 www.paper51.com
查询物资出库信息 ID_MENU_SEARCHOUTINFO paper51.com
物资余额信息管理 内容来自论文无忧网 www.paper51.com 查询物资余额信息 ID_MENU_SEARCHSURPLUSINFO 内容来自www.paper51.com 帮助 paper51.com 关于 http://www.paper51.com
4.3创建公用模块 内容来自论文无忧网 www.paper51.com 在这个系统中,频繁地使用到了对数据库的访问,修改等操作,所以把针对数据库的一些公共操作集中起来,可以使代码更加规范和容易维护。在classview中,利用鼠标右键单击“cmaterial_misapp”项目,选择“add member variable”选项,然后依次添加这个工程中要使用到的变量: http://www.paper51.com public: 内容来自www.paper51.com
CString m_sCurrentUser; copyright paper51.com int m_iLoginCount; 内容来自论文无忧网 www.paper51.com _RecordsetPtr m_pADOSet; 内容来自论文无忧网 www.paper51.com private: http://www.paper51.com _ConnectionPtr ADOConn; //定义ado数据库连接对象指针 copyright paper51.com
选择 add member function添加函数 内容来自论文无忧网 www.paper51.com
bool ADOExecute(_RecordsetPtr&ADOSet,_variant_&strSQL); 内容来自论文无忧网 www.paper51.com 最后手工添加一个外部变量的声明: http://www.paper51.com
extern Cmaterial_MISApp theApp; copyright paper51.com 在visual c++中进行数据库操作一定要引进ado类,所在把下面这段代码添加到这个工程中的stdafx.h中,才能对记录集进行操作。 内容来自论文无忧网 www.paper51.com #import "C:\Program files\commonfiles\System\ado\msado15.dll" no_namespace \ copyright paper51.com rename("EOF","EndOfFile") \ paper51.com rename("LockTypeEnum","newLockTypeEnum")\ http://www.paper51.com
rename("DataTypeEnum","newDataTypeEnum")\ 内容来自www.paper51.com rename("FieldAttributeEnum","newFieldAttributeEnum")\ 内容来自www.paper51.com
rename("EditModeEnum","newEditModeEnum")\ copyright paper51.com rename("RecordStatusEnum","newRecordStatusEnum")\ paper51.com rename("ParameterDirectionEnum","newParameterDirectionEnum")在cmaterial_misapp类的initistance()函数中添加如下代码: 内容来自论文无忧网 www.paper51.com m_iLoginCount= 0; 内容来自www.paper51.com // 创建ADO连接对象 copyright paper51.com if(FAILED(::CoInitialize(NULL)) ) 内容来自论文无忧网 www.paper51.com { paper51.com AfxMessageBox("ADO Initfailed"); paper51.com returnfalse; copyright paper51.com } 内容来自论文无忧网 www.paper51.com try http://www.paper51.com { copyright paper51.com { http://www.paper51.com
ADOConn.CreateInstance(__uuidof(Connection)); paper51.com ADOConn->Open(_bstr_t("Provider=Microsoft.Jet.OLEDB.4.0;DataSource="+GetCurDir()+"ylz.mdb"),_bstr_t(""),_bstr_t(""),adModeUnknown); 内容来自www.paper51.com } 内容来自论文无忧网 www.paper51.com
// 捕捉例外 paper51.com catch(_com_error&e) paper51.com { paper51.com
CStringerr; copyright paper51.com err.Format("%s",(char*)(e.Description()) ); paper51.com
AfxMessageBox(err); copyright paper51.com } 内容来自www.paper51.com
catch(...) paper51.com { copyright paper51.com AfxMessageBox("UnknownError..."); 内容来自www.paper51.com } copyright paper51.com // 初始化ADO记录集 copyright paper51.com 添加以上代码后,就完成了打开数据库的工作,同时添加下面的代码,来设置窗口的名称: paper51.com m_pMainWnd->SetWindowText(_T("物资管理信息系统")); copyright paper51.com 在函数中bool ADOExecute(_RecordsetPtr &ADOSet, _variant_t &strSQL)中添加如下代码: http://www.paper51.com bool CMaterial_MISApp::ADOExecute(_RecordsetPtr&ADOSet, _variant_t &strSQL) copyright paper51.com { 内容来自www.paper51.com if (ADOSet->State == adStateOpen) ADOSet->Close(); paper51.com try http://www.paper51.com { 内容来自www.paper51.com
ADOSet->Open(strSQL,ADOConn.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdUnknown); 内容来自论文无忧网 www.paper51.com return true; 内容来自论文无忧网 www.paper51.com
} paper51.com catch(_com_error&e) copyright paper51.com { copyright paper51.com CStringerr; copyright paper51.com err.Format("ADO Error:%s",(char*)e.Description()); paper51.com AfxMessageBox(err); copyright paper51.com return false; copyright paper51.com
} 内容来自论文无忧网 www.paper51.com } 内容来自论文无忧网 www.paper51.com 最后添加关闭数据库连接的函数。选择ADD Virtual Function添加一个虚函数,重载系统提供的ExitInstance()函数,填写代码如下: copyright paper51.com int CMaterial_MISApp::ExitInstance() 内容来自www.paper51.com { http://www.paper51.com // TODO: Addyour specialized code here and/or call the base class 内容来自www.paper51.com //释放ADO连接对象 paper51.com
if(adStateOpen == ADOConn->State ) ADOConn->Close(); copyright paper51.com ADOConn.Release(); http://www.paper51.com
内容来自www.paper51.com // 释放ADO记录集 内容来自论文无忧网 www.paper51.com if(adStateOpen==m_pADOSet->State) m_pADOSet->Close(); copyright paper51.com m_pADOSet.Release(); 内容来自www.paper51.com returnCWinApp::ExitInstance(); 内容来自论文无忧网 www.paper51.com } copyright paper51.com 通过以上的编写,完成了对数据库的基本操作,为下面的工作提供了最基本的功能。 内容来自论文无忧网 www.paper51.com copyright paper51.com |