基于VC++的车辆管理设计与实现.docx
《基于VC++的车辆管理设计与实现.docx》由会员分享,可在线阅读,更多相关《基于VC++的车辆管理设计与实现.docx(36页珍藏版)》请在冰豆网上搜索。
基于VC++的车辆管理设计与实现
车辆管理系统的设计与实现
摘要随着社会的发展,车辆逐渐走进千家万户,从而诞生了一个问题:
车辆管理。
本系统旨在通过计算机技术,实现管理员对车辆信息进行简单的管理。
系统通过用户的管理来实现对车辆信息的新增、修改、删除等管理。
系统采用VisualC++编写,后台采用MicrosoftOfficeAccess作为数据库,使得系统有较好的可靠性和可执行性,对实现车辆信息管理有一定的实用价值。
关键词车辆管理系统;VisualC++;MicrosoftOfficeAcces
第1章绪论
要设计车辆管理系统,就要分析其性能及其可行性和客户需求,只有经过初步的分析、考核,才能明白制作车辆系统的重要性、必要性和可行性。
这样才不会盲目的,达到有利于目前车辆管理系统的改革和发展。
1.1引言
现代社会中车辆对于人们来说不在是简简单单的交通运输工具,在这个时间就是生命,效率就是金钱的高速时代,各种类型的车辆对于人们却是参与时代竞争必不可少的工具。
然而我们不得不面对繁多而难于管理的一个现实。
怎样才可以在一个或几个单位中方便的对所属的车辆进行简单而有效的查询、新购车辆的新增入库以及旧车的报废删除却是急需解决的!
要解决上面的问题就需要我们有一个有效的管理系统,当然我们也可以用最原始的笔墨来进行记录。
但我想没几个人会选择这种方式。
在这信息化的时代,时间是可贵的。
而在工作中如何提高工作效率则成了十分重要的问题。
在电脑普及率如此高的今天,用电脑来进行各种资源的管理是十分常见的。
而电脑管理程序的出现,则更提高了工作的效率。
关于管理系统,种类十分繁多,小到个人财物,大到公司企业都用到了管理系统。
可见管理系统的应用是很广泛的。
现代社会中车辆对于人们来说不在是简简单单的交通运输工具,在这个时间就是生命,效率就是金钱的高速时代,各种类型的车辆对于人们却是参与时代竞争必不可少的工具。
然而我们不得不面对繁多而难于管理的一个现实。
怎样才可以在一个或几个单位中方便的对所属的车辆进行简单而有效的查询、新购车辆的新增入库以及旧车的报废删除却是急需解决的!
要解决上面的问题就需要我们有一个有效的管理系统,当然我们也可以用最原始的笔墨来进行记录。
但我想没几个人会选择这种方式。
在这信息化的时代,时间是可贵的。
而在工作中如何提高工作效率则成了十分重要的问题。
在电脑普及率如此高的今天,用电脑来进行各种资源的管理是十分常见的。
而电脑管理程序的出现,则更提高了工作的效率。
关于管理系统,种类十分繁多,小到个人财物,大到公司企业都用到了管理系统。
可见管理系统的应用是很广泛的。
1.2系统的可行性分析
1.2.1经济
由于此程序是开发于十分成熟的开发环境和系统环境:
WindowsXP,以MicrosoftVisualC++6.0,其使用普及率是非常的高,使用其相当成熟的技术可大大减小经济投入,基本上可以做到人人都可以使用本程序而不需要额外购置其他设备。
同时开发难度也不大,开发者的投入也不大,所以在经济上是可行的。
1.2.2技术
●VisualC++编程工具简介
本课程设计是用MicrosoftVisualC++6.0来完成程序开发的,主要采用MFC的程序设计方法,并在编程过程中运用到了多线程的思想。
在数据库方面用到的相关知识并不是太多,因为这毕竟只是VC++的课程设计并不是数据库的课程设计。
图形的绘制部分则是用到了GDI的绘图方法。
GDI是GraphicsDeviceInterface的缩写,含义是图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。
在Windows操作系统下,绝大多数具备图形界面的应用程序都离不开GDI,我们利用GDI所提供的众多函数就可以方便的在屏幕、打印机及其它输出设备上输出图形,文本等操作。
GDI的出现使程序员无需要关心硬件设备及设备驱动,就可以将应用程序的输出转化为硬件设备上的输出,实现了程序开发者与硬件设备的隔离,大大方便了开发工作。
下面再来就多线程进行相关的说明。
多线程是为了使得多个线程并行的工作以完成多项任务,以提高系统的效率。
线程是在同一时间需要完成多项任务的时候被实现的。
使用线程的好处有以下几点:
使用线程可以把占据长时间的程序中的任务放到后台去处理。
用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度。
程序的运行速度可能加快。
在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。
在这种情况下我们可以释放一些珍贵的资源如内存占用等等。
以上是使用多线程的编程方法所带来的好处,如果能很好地运用的话,其带来的性能是相当地优越的。
当然,也并不是说多线程是十分完美的,我们知道在现实世界中,任何事物都有是具有两面性的,多线程也有其自己的缺点。
以下列出了一些:
如果有大量的线程,会影响性能,因为操作系统需要在他们之间切换。
更多的线程需要更多的内存空间。
线程会给程序带来更多的bug,因此要小心使用。
线程的中止需要考虑其对程序运行的影响。
通常块模型数据是在多个线程间共享的,需要一个合适的锁系统替换掉数据共享。
不过总体上来讲,在本程序中使用多线程所带来的好处是大于其弊端的。
因为程序中使用到线程的地方并不复杂,所以在程序中运用这个编程技术是可行的[1]。
●ODBC技术简介:
本程序采用的ODBC(OpenDatabaseConnectivity,开放数据库互连)链接技术是微软公司开放服务结构(WOSA,WindowsOpenServicesArchitecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。
这些API利用SQL来完成其大部分任务。
ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。
一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。
也就是说,不论是FoxPro、Access,MYSQL还是Oracle数据库,均可用ODBCAPI进行访问。
由此可见,ODBC的最大优点是能以统一的方式处理所有的数据库。
一个完整的ODBC由下列几个部件组成:
应用程序(Application)。
ODBC管理器(Administrator)。
该程序位于Windows95控制面板(ControlPanel)的32位ODBC内,其主要任务是管理安装的ODBC驱动程序和管理数据源。
驱动程序管理器(DriverManager)。
驱动程序管理器包含在ODBC32.DLL中,对用户是透明的。
其任务是管理ODBC驱动程序,是ODBC中最重要的部件。
ODBCAPI。
ODBC驱动程序。
是一些DLL,提供了ODBC和数据库之间的接口。
数据源。
数据源包含了数据库位置和数据库类型等信息,实际上是一种数据连接的抽象。
各部件之间的关系如图下图所示:
图1.1ODBC各部件关系图
应用程序要访问一个数据库,首先必须用ODBC管理器注册一个数据源,管理器根据数据源提供的数据库位置、数据库类型及ODBC驱动程序等信息,建立起ODBC与具体数据库的联系。
这样,只要应用程序将数据源名提供给ODBC,ODBC就能建立起与相应数据库的连接。
在ODBC中,ODBCAPI不能直接访问数据库,必须通过驱动程序管理器与数据库交换信息。
驱动程序管理器负责将应用程序对ODBCAPI的调用传递给正确的驱动程序,而驱动程序在执行完相应的操作后,将结果通过驱动程序管理器返回给应用程序。
在访问ODBC数据源时需要ODBC驱动程序的支持。
用VisualC++5.0安装程序可以安装SQLServer、Access、Paradox、dBase、FoxPro、Excel、Oracle和MicrosoftText等驱动程序.在缺省情况下,VC5.0只会安装SQLServer、Access、FoxPro和dBase的驱动程序.如果用户需要安装别的驱动程序,则需要重新运行VC5.0的安装程序并选择所需的驱动程序。
ODBC使用层次的方法来管理数据库,在数据库通信结构的每一层,对可能出现依赖数据库产品自身特性的地方,ODBC都引入一个公共接口以解决潜在的不一致性,从而很好地解决了基于数据库系统应用程序的相对独立性,这也是ODBC一经推出就获得巨大成功的重要原因之一。
从结构上分,ODBC分为单束式和多束式两类:
单束式驱动程序介于应用程序和数据库之间,像中介驱动程序一样数据提供一个统一的数据访问方式。
当用户进行数据库操作时,应用程序传递一个ODBC函数调用给ODBC驱动程序管理器,由ODBCAPI判断该调用是由它直接处理并将结果返回还是送交驱动程序执行并将结果返回。
由上可见,单束式驱动程序本身是一个数据库引擎,由它直接可完成对数据库的操作,尽管该数据库可能位于网络的任何地方。
多束式驱动程序负责在数据库引擎和客户应用程序之间传送命令和数据,它本身并不执行数据处理操作而用于远程操作的网络通信协议的一个界面。
前端应用程序提出对数据库处理的请求,该请求转给ODBC驱动程序管理器,驱动程序管理器依据请求的情况,就地完成或传给多束驱动程序,多束式驱动程序将请求翻译为特定厂家的数据库通信接口(如Oracle的SQLNet)所能理解的形式并交于接口去处理,接口把请求经网络传送给服务器上的数据引擎,服务器处理完后把结果发回给数据库通信接口,数据库接口将结果传给多束式ODBC驱动程序,再由驱动程序将结果传给应用程序[2]。
●Access2003简介
本程序采用的Access数据库是微软公司推出的基于Windows的桌面关系数据库管理系统(RDBMS),是Office系列应用软件之一。
它提供了表、查询、窗体、报表、页、宏、模块7种用来建立数据库系统的对象;提供了多种向导、生成器、模板,把数据存储、数据查询、界面设计、报表生成等操作规范化;为建立功能完善的数据库管理系统提供了方便,也使得普通用户不必编写代码,就可以完成大部分数据管理的任务。
Access是一种关系型数据库管理系统,其主要特点如下:
存储方式单一
Access管理的对象有表、查询、窗体、报表、页、宏和模块,以上对象都存放在后缀为(.mdb)的数据库文件种,便于用户的操作和管理。
面向对象
Access是一个面向对象的开发工具,利用面向对象的方式将数据库系统中的各种功能对象化,将数据库管理的各种功能封装在各类对象中。
它将一个应用系统当作是由一系列对象组成的,对每个对象它都定义一组方法和属性,以定义该对象的行为和外国,用户还可以按需要给对象扩展方法和属性。
通过对象的方法、属性完成数据库的操作和管理,极大地简化了用户的开发工作。
同时,这种基于面向对象的开发方式,使得开发应用程序更为简便。
界面友好、易操作
Access是一个可视化工具,是风格与Windows完全一样,用户想要生成对象并应用,只要使用鼠标进行拖放即可,非常直观方便。
系统还提供了表生成器、查询生成器、报表设计器以及数据库向导、表向导、查询向导、窗体向导、报表向导等工具,使得操作简便,容易使用和掌握。
集成环境、处理多种数据信息
Access基于Windows操作系统下的集成开发环境,该环境集成了各种向导和生成器工具,极大地提高了开发人员的工作效率,使得建立数据库、创建表、设计用户界面、设计数据查询、报表打印等可以方便有序地进行。
Access支持ODBC(开发数据库互连,OpenDataBaseConnectivity)
利用Access强大的DDE(动态数据交换)和OLE(对象的联接和嵌入)特性,可以在一个数据表中嵌入位图、声音、Excel表格、Word文档,还可以建立动态的数据库报表和窗体等。
Access还可以将程序应用于网络,并与网络上的动态数据相联接。
利用数据库访问页对象生成HTML文件,轻松构建Internet/Intranet的应用[3]。
●开发环境简介
工硬件环境:
硬件平台是指开发与运行所需要的硬件环境,主要包括计算机机型及硬件配置。
由于本系统是一个小型的MIS管理系统,因此对计算机硬件的要求不高,比较经济,只要配备如下表所示的就可以。
内容最低配置建议配置:
主机P/200PII/266以上
内存64MB128MB以上
硬盘10GB20GB以上
显示器VGA以上
本系统在开发时选用了稳定性较强的WindowsXP中文专业版和VisualC++6.0作为开发语言,由于这些软件产品都是Microsoft公司的产品,因此彼此之间的兼容性较好,开发出的应用系统稳定性较高。
一个MIS应有一个调试可集成的系统开发平台。
20世纪90年代以来,MIS平台已经发展成为把操作系统与其外部接口融为一体的集成平台。
其软件系统可以包括操作系统、图形用户系统、网络通信、数据库管理系统和程序设计语言等。
硬件平台可以把CPU与存储管理单元、协处理器、网卡等集成为一体,从而形成支持MIS应用开发与运行临近的一体化开发环境[5]。
1.2.3社会
本程序为绿色软件,没有任何商业行为,也不存在涉及法律的有关事项,同时在信息交换量十分大的现代社会此类软件颇受成功人事和人际交往多的人员亲赖,其使用前景被看好,故在社会方面可行。
1.3系统的功能需求分析
本次课程设计主要是着手于解决实际生活中车辆管理问题,由此我们可以得出下对软件的功能需求:
●管理员登录
用管理员的身份登录管理系统可使系统更加安全,同时也方便资料的录入。
●查询
这里可以不用登录即可查询车主的信息,包括车主姓名、身份证以及其拥有的车辆的车牌号。
●基本资料维护
这里可以对用户、车辆、车主的基本资料进行维护。
●关联车辆信息
这里考虑到一位车主可能不止拥有一辆车,此功能可以让一位车主与多辆车的资料关联。
第2章系统的总体设计
本系统主要完成了管理员登录、基本资料维护、查询以及资料关联等模块。
2.1系统功能模块
根据用户需求本程序有如下功能模块:
●管理员登录
●查询
●基本资料维护
●关联车辆信息
系统总框架图如图2.1:
图2.1系统功能模块结构图
2.2数据模型设计
根据需求分析,完成以下设计。
E-R图为下图所示:
图2.2系统E-R图
这些实体涉及的数据项有:
车辆信息:
车牌、车辆编号、出厂日期、是否年检、厂商。
车主信息:
车主姓名、车主编号、身份证。
用户:
用户帐号、用户姓名、用户密码、身份证。
管理员:
管理员帐号、管理员密码、管理员姓名。
2.3数据库设计
数据库采用了Microsoft推出的Access数据库,这是微软集成到Office中的一个桌面数据库,能够快速方便的和Office的其他套件综合使用。
由于Access具有显著的简易性和有效性,大量的桌面数据库系统都采用Access作为后台数据库。
使用Access的好处还在于,如果你的系统扩展到Client/Server模式的时候,可以使用Microsoft的数据库服务器软件SQLServer,此时,程序只需要简单的修改一下链接(ADO的数据源)就可以,这样,为程序的平滑扩展提供了非常有力的条件。
本系统中所涉及到的主要实体主要有三个数据表:
各表物理结构如下:
用户表结构如表2-3:
表2-3管理员表
字段名称
类型
宽度
小数位
用户帐号
文本
30
用户密码
文本
50
用户姓名
文本
30
身份证
长整型
50
用户编号
长整型
180
管理员结构表如表2-4:
表2-4车主表
字段名称
类型
宽度
小数位
车主姓名
文本
30
车主编号
长整型
50
车主身份证
长整型
180
管理员结构表如表2-4:
表2-5车辆表
字段名称
类型
宽度
小数位
车辆编号
文本
30
车牌号
文本
50
厂商
文本
30
车型
文本
30
出厂日期
日期
30
第3章系统详细设计与实现
针对分析的情况,以及需求情况,数据库的设计是第一步,接着就是根据需求对系统进行总体的设计。
实现符合要求的最终系统。
3.1基本资料维护功能的实现
当用户登录后即可对数据库进行维护,如图所示:
图3.1基本资料维护
为了方便管理,程序中加入用户资料管理,此模块可以对管理用户进行设置,其中包括:
姓名、编号、身份证、密码以及职务。
如图所示:
图3.2用户资料维护
相关代码:
CClerkMDlg:
:
CClerkMDlg(CWnd*pParent/*=NULL*/)
:
CDialog(CClerkMDlg:
:
IDD,pParent)
{
//{{AFX_DATA_INIT(CClerkMDlg)
m_strUserNameQ=_T("");
m_strUserName=_T("");
m_strUserIDQ=_T("");
m_strUserID=_T("");
m_strPassword=_T("");
m_strIDCard=_T("");
//}}AFX_DATA_INIT
}
在此功能模块中,可以方便的对车辆资料进行维护,其中项目有:
车牌、车辆编号、车型、厂商、出厂日期、是否年检,同时还有增加、修改、删除和查询功能。
如图所示:
图3.3车辆资料维护
相关代码:
CBookMDlg:
:
CBookMDlg(CWnd*pParent/*=NULL*/)
:
CDialog(CBookMDlg:
:
IDD,pParent)
{
//{{AFX_DATA_INIT(CBookMDlg)
m_strAuthor=_T("");
m_strBookID=_T("");
m_strBookIDQ=_T("");
m_strBookName=_T("");
m_strBookNameQ=_T("");
m_strFlag=_T("");
m_strPress=_T("");
m_strPressDate=_T("");
//}}AFX_DATA_INIT
}
在此功能模块中,可以方便的对车主资料进行维护,其中项目有:
车主姓名、车主编号、身份证,同时还有增加、修改、删除和查询功能。
如图所示:
图3.4车主资料维护
相关代码:
CReaderMDlg:
:
CReaderMDlg(CWnd*pParent/*=NULL*/)
:
CDialog(CReaderMDlg:
:
IDD,pParent)
{
//{{AFX_DATA_INIT(CReaderMDlg)
m_strReaderIDQ=_T("");
m_strReaderID=_T("");
m_strReaderName=_T("");
m_strReaderNameQ=_T("");
m_strIDCard=_T("");
//}}AFX_DATA_INIT
3.2查询功能的实现
为了方便用户对资料的掌握,查询功能不需要登录也可以用,可以方便的查询车主以及他所拥有的车辆,显示信息包括车主姓名、车主身份证、其拥有车辆的车牌。
如图所示:
图3.5查询功能界面
图3.6输入编号后即可
相关代码:
voidCReaderQryDlg:
:
OnQuery()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_lstBook.DeleteAllItems();
UpdateData(TRUE);
m_strReaderName="";
m_strReaderIDCard="";
UpdateData(FALSE);
if(m_strReaderID=="")
{
:
:
AfxMessageBox("请输入车主ID");
return;
}
m_ReaderSet.m_strFilter="READER_ID='"+m_strReaderID+"'";
m_ReaderSet.Open();
if(m_ReaderSet.IsEOF())
{
AfxMessageBox("此车主ID号码不存在!
");
m_ReaderSet.Close();
return;
}
pContext)
{
//TODO:
Addyourspecializedcodehereand/orcallthebaseclass
returnCDialog:
:
Create(IDD,pParentWnd);
}
intCReaderQryDlg:
:
OnCreate(LPCREATESTRUCTlpCreateStruct)
{
if(CDialog:
:
OnCreate(lpCreateStruct)==-1)
return-1;
//TODO:
Addyourspecializedcreationcodehere
return0;
}
3.3信息关联功能的实现
此功能模块是考虑到车主有可能不止只拥有一辆车,利用此功能可以让一位车主
的资料与多辆车的资料关联,在查询功能中可以查到。
如图所示:
图3.7选择关联车辆信息功能
图3.8关联车辆信息界面
图3.9输入相应的车主与车辆编号即可
相关代码:
CLendOutDlg:
:
CLendOutDlg(CWnd*pParent/*=NULL*/)
:
CDialog(CLendOutDlg:
:
IDD,pParent)
//{{AFX_DATA_INIT(CLendOutDlg)
m_str车主ID=_T("");
m_str车辆ID=_T("");
//}}AFX_DATA_INIT
if(!
mDB.Open(_T("cheliangguanli")))
AfxMessageBox("无法打开数据库!
");
return;
try
{
mDB.ExecuteSQL(mSqlStr);
catch(CDBExceptione)
{
AfxMessageBox("执行错!
");
return;
mDB.Close();
AfxMessageBox("操作成功!
")
第4章性能测试与分析
在完成了系统各方面的设计后,为了保证系统性能的稳定性跟安全性等,对系统做测试和分析。
显示登录界面,登录帐号为王大为,密码为117117,如图所示:
图4.1登录界面
如果密码不正确会有提示。
如图所示:
图4.2登录失败界面
进入主界面后,管理员登录后可以进行所有操作,而没登录只能进行查询操作。
如图所示:
图4.3登录后操作界面
图4.4没登录操作界面
用户资料维护