利用C++Builder6.0开发简单的车辆管理系统
添加时间: 2007-4-9 2:30:12 作者: 系统工程师认证参考 阅读次数:189 来源: http://www.d9soft.com
摘要:本文详细介绍了利用C++ Builder6.0 设计开发车辆 管理 系统的过程,涉及到了类的设计,数据库访问技术,对数据库表的操作,Access数据库的设计等
关键词:C++ Builder6.0开发 ADO Access数据库
C++ Builder作为一个快速的可视化开发工具,受到广大编程爱好者的喜爱。利用该工具可以快速地建立各种应用,笔者以开发一个“车辆管理系统”为例来说明如何开发一个管理系统的过程,以及相关的技术。
1 确定需求
对于不同的管理系统有不同的需求模型,我们仅以“车辆管理系统”为例来确定需求。主要有以下系统需求:
(1)管理功能,能够对车辆派遣单(表)等进行添加、删除、修改的操作;
(2) 查询功能,能够对各表单的数据进行查询;
(3) 打印功能,能够按指定的格式生成Word文件,并打印;
(4) 统计分析功能,如统计驾驶员和车辆的行驶公里数等。
涉及到的管理表单主要有车辆派遣单、加油情况单、车辆保养单、行驶卡管理表等。限于篇幅关系本文只讨论满足需求1和2的情况。
2 确定使用的技术
使用C++ Builder6.0作为开发工具,使用Microsoft Access2000作为后台数据库,根据车辆派遣单、加油情况单、车辆保养单、行驶卡管理表建立相应的数据表;访问数据库采用ADO技术等。
3 设计相应的类
a)类TMainFrame,是主框架,是整个系统的基本界面,也是其它界面控件的容器;
b)类TCheliangpaiqian,车辆派遣类,包括有车辆派遣表记录的插入,修改、删除、统计等方法(成员函数);
c)数据库通用访问类TDBAccess,是一个TDataModule类的子类,它的主要功能是为访问各种表单(车辆派遣单、加油情况单、车辆保养单、行驶卡管理表等)提供统一的数据库访问接口,它封装(包含)了TADOConnection,TADOTable,ADOQuery三个ADO数据库类;
d)其它的表单处理类,如加油情况类等;
e)其它辅助类及界面对话框等,如查询对话框,删除确认对话框,修改查看记录对话框等。
4 数据库设计
考虑到系统的简单易用性以及不涉及到 网络 连接的需求,使用Access作为后台数据库。打开Microsoft Access2000,分别创建车辆派遣单(cheliangpaiqian)、加油情况单(jiayouqingkuang)、车辆保养单(cheliangbaoyang)、行驶卡管理表(xingshika)等,如下图:
图1 数据库设计
车辆派遣表主要记录车辆派遣的情况,包括车辆型号、车牌号,到达时间地点,以及何人因何事用车等信息。以此表为例,主要包括的字段为:
从上表可以看出,字段id为该表的主键,它唯一地标识表中的记录。字段jiashiyuanname的内容不可为空。其它表的创建与此表类同,这里不再赘述。
5 程序设计
5.1 程序的界面设计与主框架TMainFrame
首先是程序的界面设计,界面力求简洁美观,利用C++ Builder提供的可视化控件可以很方便快速地设计出系统的界面,但由于C++ Builder提供的可视化控件样式过于单一,界面千篇一律。本系统在设计中采用了第三方的Skin控件,使系统界面更加美观,具有亲和力。在具体控件的布局与选用上,采用了人性化设计的理念。如下图:
图2 车辆管理系统
设计完界面后,为各个按钮添加行为代码。以车辆派遣模块为例,在主框架的头文件MainframeObj.h中加入车辆派遣类TCheliangpaiqian的头文件CheliangpaiqianObj.h,如下所示:
……
#include “CheliangpaiqianObj.h”;
……
这样做就可以在主框架TMainFrame中使用车辆派遣类TCheliangpaiqian的方法(成员函数)。下一步双击“发布派遣单”按钮,添加如下代码:
//定义结构变量TableBus,
TTableBus TableBus;
//判断驾驶员姓名是否为空
if ((name->Text)!="")
{
//如果不为空,给TableBus赋值
TableBus.yongchedanwei=yongchedanwei->Text;
TableBus.yongcheshiyou=yongcheshiyou->Text;
TableBus.chehao=chehao->Text;
TableBus.chexing=chexing->Text;
TableBus.taici=taici->Text;
TableBus.daodadidian=daodadidian->Text;
//调用类TCheliangpaiqian的方法Add,添加记录
Cheliangpaiqian->Add(&TableBus);
//打印该表格
PrtContent(&TableBus);
}
else
{
//如果为空
ShowMessage("驾驶员姓名不可为空!");
}
上面这段代码主要将所填写的车辆派遣单的相关数据写入数据库,并打印出来。其中TTableBus是记录车辆派遣单相关字段内容的一个结构,其定义如下:
typedef struct
{
AnsiString yongchedanwei;
AnsiString yongcheshiyou;
AnsiString chexing;
AnsiString chehao;
……
}TTableBus;
主框架类TMainFrame还有一个Activate事件处理函数:
void __fastcall TMainFrame::FormActivate(TObject *Sender)
{
TTableBus* TableBus;
……
//调用类TCheliangpaiqian的方法GetNum,获得当前的记录数
n=Cheliangpaiqian->GetNum;
if (n>0)
{
……
for (int i=0;i<n;i++)
{
//调用类TCheliangpaiqian的方法GetValue,获得当前记录的内容
TableBus=Cheliangpaiqian->GetValue;
//向当前表格控件输入要显示的数据
bsSkinStringGrid->Cells[1][i+1]= TableBus-> yongchedanwei;
bsSkinStringGrid->Cells[2][i+1]= TableBus-> yongcheshiyou;
……
//如果没有超过记录指针下限,则下移当前记录指针
if (i<n-1) Cheliangpaiqian->GetNext;
//删除TableBus指针,避免内存泄露
delete TableBus;
}
……
}
}
类TMainFrame还有其它几个按钮控件,主要是查看按钮、删除按钮、统计按钮、查询按钮等,在C++ Builder6.0中双击这些按钮添加处理代码,具体内容不再赘述。
5.2 车辆派遣类TCheliangpaiqian
车辆派遣类,主要负责对车辆派遣记录进行 管理 ,对外提供管理表单的接口,主要有车辆派遣表记录的插入,修改、删除、查找、下移指针等方法(成员函数)。
为了能方便地访问数据库,需要将数据库通用访问类TDBAccess的头文件DBAccessObj.h包含进来,在头文件CheliangpaiqianObj.h中添加如下代码:
#include “DBAccessObj.h”
插入函数的内容如下:
void __fastcall TCheliangpaiqian::Add(TTableBus* TableBus)
{
//设置ADOTable控件的TableName为cheliangpaiqian,指向要管理的车辆派遣表
DBAccess->ADOTable->TableName="cheliangpaiqian";
DBAccess->ADOTable->Active=true;
//开始插入新记录
DBAccess->ADOTable->Insert();
//向yongchedanwei字段写入数据
DBAccess->ADOTable->FieldByName("yongchedanwei")->AsString= TableBus->yongchedanwei;
//向yongcheshiyou字段写入数据
DBAccess->ADOTable->FieldByName("yongcheshiyou")->AsString= TableBus-> yongcheshiyou;
……
//提交添加的内容,完成添加操作
DBAccess->ADOTable->Post();
DBAccess->ADOTable->Active=false;
……
}
上面的函数通过输入TTableBus结构的指针获取添加的各字段内容,完成向数据库中写入的操作。其它的成员函数,由于篇幅关系不再详细说明。
5.3 数据库通用访问类TDBAccess
这里的数据库通用访问类是指为车辆派遣类、加油情况类、车辆保养类、行驶卡管理表类等功能模块提供统一通用的数据库访问接口。它封装(包含)了TADOConnection,TADOTable,ADOQuery三个ADO数据库访问类控件。
TADOConnection,封装了ADO连接对象,可以使用这个对象来连接到数据库进行数据存储。单个TADOConnection提供的连接可以给多个TADOTable对象共享,只要设置这些对象的Connection属性即可。
设置TADOConnection的ConnectionString属性以确保该控件指向要连接的Access数据库。通过使用C++ Builder6.0提供的数据库连接向导生成ConnectionString属性的值(连接字符串),在笔者的机器上生成的连接字符串如下(不同的机器可能不同):
Provider=Microsoft.Jet.OLEDB.4.0;User
ID=Admin;Data Source=.cheguan_db.mdb;Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don’t Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False
以上这段字符串指出了Access数据库文件的路径以及连接的相关设置。
TADOTable,使用该控件可以存取指定的单个表格中的数据,设置其Connection属性为ADOConnection,可以共享TADOConnection类对数据库的连接。
ADOQuery,使用该控件可以查询指定的单个表格中的数据,设置其Connection属性为ADOConnection,可以共享TADOConnection类对数据库的连接。
6 调试与发布
程序的所有功能调试无误后,需要从开发用的机器上打包发布到用户的机器上。对于普通的应用程序而言,只需要如下步骤就可以生成可脱离开发环境的应用程序:
a)利用菜单ProjectOptions进入对话框,选择Package,去掉选项“Builder with runtime package”
b)在对话框中进入Linker界面,去掉选项Use Dynamic RTL
c)进入Compiler界面,单击Release按钮使在C++ Builder编译过程中进行优化
d)去掉不必要的Debug选项
e)重新编译整个工程
C++ Builder的可视化开发环境适合快速开发高效的图形化的应用程序。本程序在C++ Builder6.0 / Windows XP系统上编译通过。
上一篇文章: 美国微软公司的知识管理 下一篇文章: 我眼中PCM的六个启示
相关文章:

