武汉科技大学本科毕业设计
3 数据库的实现
3.1. 创建数据库
1.打开数据库的企业管理器
2.展开服务器组展开服务器组,然后展开服务器。 3.右击\数据库\,然后单击\新建数据库\命令。
4.键入新数据库的名称。用指定的数据库名作为前缀创建主数据库和事务日志文件,例 如:newdb_Data.mdf 和 newwdb_Log.ldf。数据库和事务日志文件的初始大小与为 model 数据库指定的默认大小相同。主文件中包含数据库的系统表。
5.要更改新建主数据库文件的默认值,单击\常规\选项卡。若要更改新建事务日志文件 的默认值,单击\事务日志\选项卡。 6.要更改\文件名\、\位置\、\初始大小 (MB)\和\文件组\(不适用于事务日志)等 列的默认值,单击要更改的适当单元格,再键入新值。
3.2 创建数据库表
设计完数据库后就可创建数据库中将存储数据的表。数据通常存储在永久表中。表存 储在数据库文件中,任何有相应权限的用户都可以对之进行操作,除非它已被删除。
1.确保已连接到要在其中创建表的数据库。右击目标数据库的表节点并选择\新建表\命 令。
2.添加列以及表的其它详细信息。对于所添加的每一列,都有新行出现在表设计器的上 半部分。在该行内,可以编辑列的基本属性。可以在表设计器的下半部分编辑列的其 它属性。只需单击表设计器上半部分内的某行,然后添加或编辑出现在下半部分内的 属性值。
创建项目
根据需求分析和系统的功能,是用Visual C++ 6.0 创建一个基于单文档的MFCAppWizard(exe)项目,项目名为TMS。使用AppWizard配置得到的项目信息如图3.1所示
―12―
武汉科技大学本科毕业设计
图3.1 由AppWizard配置得到的TMS项目信息
创建项目后,Visual C++呈现给使用者的是一个CTMSView视图,本例的主界区其实就是在这个视图的基础上开始设计的。采用切分视图的方法将主界面的客户区分为两个视图,左边的是树视图,左边则根据不同情况可以是列表视图,也可以是一个FormView。
3.3 主框架的设计
(1)新增左边的树视图类CleftTreeView
从菜单栏中选择Insert→New Class 命令,增加一个类,名为“CLeftTreeView”,基类为CTreeView。
(2)新增右边显示各类信息的列表视图CSubListView
从菜单栏中选择Insert→New Class 命令,增加一个类,名为“CSubListView”,基类为CListView。
(3)新增右边显示欢迎界面的FORM视图类CMainItemView
―13―
武汉科技大学本科毕业设计
由于FORM视图类需要FORM资源才能建立,这里先建立一个没有控件的FORM资源,完成类的建立。
从菜单栏中选择Insert→Resource命令,弹出Insert Resource对话框。在Resource Type列表中选择Dialog→IDD_FORMVIEW,如图3.2所示,单击新建按钮插入对话框资源,其ID设为IDD_FORMVIEW_MAINTEM。
图3.2 Insert Resource 对话框
双击IDD_FORMVIEW_MAINTEM对话框资源,或者从菜单栏中选择View→ClassWizard 命令,增加类“CMainItemView”,选择基类为CFormView,对话框资源为IDD_FORMVIEW_MAINTEM。
(4)创建主框架的客户区 ① 定义视图对象
由于右边的视图是不确定的,会根据具体情况在CSubListView和CMainItemView之间切换。所以在类CMainFrame声明前定义2个常量,表示右边视图的类型,并在其后加入声明,具体实现代码入附录A
由于左边的视图是控制区,大部分操作需要调用左边的视图来了解程序所处的状况。所以将其定义为全局变量:
//TMS.cpp CMTSApp theApp
CLeftTreeView *m_pLeftView; //TMS.h
extern CMTSApp theApp
extern CLeftTreeView *m_pLeftView;
―14―
武汉科技大学本科毕业设计
②视图分割
为了将客户区分为左右两部分,需要使用分隔条,于是在CMainFrame类中增加一个CSplitterWnd类型的成员变量m_wndSplitter,访问方式为protected,其代码如下:
Protected:// control bar embedded members CStatusBar m_wndStatusBar; CToolBar m_wndToolBar; CSplitterWnd m_wndSplitter;
通过ClassWizard 为类CMainFrame增加虚函数OnCreateClient,在该函数中创建被分为两部分的客户区。其中左边为CleftTreeView,右边开始设为CMainItemView,其具体实现代码如附录B
③ 视图切换函数SwitchToView
右边的视图是不确定的,会根据具体情况在CMainItemView和
CSubListView之间切换。为了切换方便,为CMainFrame类增减一个public类型的函数SwitchToView,其具体实现代码如附录C
④树项选择函数OnSelchanged
上一步,我们完成了根据主项和子项切换不同的视图。而不同的子项虽然视图相同,但显示的内容却有差别,可完成的功能均有差异。为了区分树中不同的项,加入全局变量SelItemType。
在TMS.cpp中定义如下: CTMSApp.theApp;
CLeftTreeView *m_pLeftView; Int SeiItemType;
通过树项选择函数OnSelchanged,将选择结果记录到全局变量SelItemType中,修改密码除外,选择它时,弹出修改密码对话框。具体实现代码如附录D
3.4 数据库操纵
数据库的操纵包括查询、插入、修改、删除等。为了实现同一借口操作,我们用函数ADOExecute统一所有的操作。
(1)引入ADO动态链接库
在StdAfx.h中加入,具体实现代码附录E (2)定义智能指针对象
在类CTMSApp的头文件中定义,具体实现代码入附录F (3)初始化智能指针
在CTMSApp的Initinstance方法中初始化,具体实现代码如附录E
―15―
武汉科技大学本科毕业设计
这里采用ADO直接连接数据库服务的方式。 (4)统一接口ADOExecute的实现
在CTMSApp中添加新方法,具体实现代码入附录G
―16―