版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGE摘要随着经济的发展,人们生活水平和生活质量不断提高,作为奢侈消费品的私家车也开始普及化。私家车保有量大幅的提高,为新建小区的车位设计提出了更高要求。本论文根据小区车位的管理工作需要,设计了一个简洁、稳定、实用的小区车位管理系统。相对一些现有的小区车位管理系统来说,本系统在实用性、易操作性等方面具有一定特色。本软件共分三大模块:车位图模块,车位管理模块,车主和缴费信息模块。本人负责车位管理模块的设计与开发,系统应当能够显示车位车主的基本信息,并对其进行添加、修改、查询。对于车位的车主,应当有其完整的车位信息:车位编号,车位属性,车主姓名,地址,电话,手机,车牌号,车型。这些信息在售出车位时由管理人员通过添加功能录入,添加后,车位信息及时更新,当要对车位车主信息进行修改时,要用到修改功能;当需要知道具体的车主信息时,可以根据姓名与车位编号进行查询。车位车主信息显示、添加、修改、查询功能由系统的固定模块实现。开发工具选择MicrosoftVisualC++6.0,数据库选择SQLServer2008。关键词:小区车位管理系统车位管理模块设计与开发MicrosoftVisualC++6.0SQLServer2008AbstractWitheconomicdevelopment,people'slivingstandardandqualityofliferisingpopularityofprivatecarsasaluxuryconsumergoods.Privatecarownershipissignificantlyimproved,ahigherdemandforthedesignofthenewresidentialparkingspaces.Thisthesisisbasedonthemanagementoftheresidentialparkingspacesneedtodesignasimple,stable,practicalresidentialparkingmanagementsystem.Comparedtosomeoftheexistingresidentialparkingmanagementsystem,thesystemhascertainfeaturesinthepracticality,ease.Thissoftwareconsistsofthreemodules:managementsystemsforresidentialparkingspaces-parkingmapmodule,residentialparkingmanagementsystem-parkingmanagementmodule,theresidentialparkingmanagementsystem-ownersandpaymentinformationmodule.Iamresponsibleforthedesignanddevelopmentofparkingmanagementmodule,thesystemshouldbeabletodisplaybasicinformationofcarowners,andcarriesontheadd,modify,query.Forcarowners,shouldhaveitscompleteparkinginformation:Parkingnumber,parkingproperty,ownername,address,telephone,mobilephone,licenseplatenumber,vehicle.Theinformationintheparkingspacessoldbymanagersbyaddingfunctioninput,add,theparkinginformationupdate,whentomodifythecarownerinformation,usedtomodifyfunction;whentheneedtoknowthespecificownerinformation,canbequeriedaccordingtothenameandthenumberofthecar.Carownersinformationdisplay,add,modify,queryfunctionoftherealizationofthefixedmoduleofthesystem.DevelopmenttooltoselectMicrosoftVisualC++6.0,SQLserver2008databaseselectioncombinationwillbeabletocompletethedevelopmentofthissystem.Keywords:communityparkingmanagementsystemparkingdiagramMicrosoftVisualC++6.0SQLServer2008目录TOC\o"1-3"\h\u132181.系统概述 1194391.1开发背景 1214511.2开发环境 1163452.需求分析 2202192.1系统需求分析 2197502.1.1需要对小区车位进行属性划分 380982.1.2车位信息显示、添加、修改、查询功能 346402.1.3缴费信息显示、添加、修改、查询功能 3189462.1.4车位图显示功能 4196442.1.5数据库技术 4317802.2可行性分析 4253692.3数据描述 5150733.概要设计 523053.1数据库的设计 5276253.2主要数据表结构 6128714.详细设计 6197424.1设计目标 6166924.2设计思想 7112104.3系统主要功能模块设计 765144.4系统窗体设计 76254.4.1主窗体设计 7171544.4.2车位管理窗口(查询、添加、修改、删除)设计 867374.4.3、车位信息查询窗体设计 10261884.4.4、车位信息添加窗体设计 12301634.4.5、车位信息修改窗体设计 13290024.4.6、车位信息删除窗体设计 14131675.系统测试 15305485.1测试原则 15217205.2测试计划 15102755.3测试结果 16298056.总结与展望 1624571致谢 178736参考文献 188736附录A 191.系统概述1.1开发背景近年来中国经济的高速发展,各地区的车辆数量增长迅速,由此各地的小区的机动车档案资料增加迅速。随着档案资料的增加,工作人员劳动强度增大,档案资料的存储、查询等工作与办公高效率的要求矛盾日渐突出。本论文所介绍的便是一个小区车辆管理系统,以规范对车辆信息的管理,提高管理效率。在小区车辆管理过程中,涉及车位管理的信息化、车主管理的信息化、缴费信息管理的信息化,做好信息化工作利于提高小区车辆的管理效率,维护小区车辆的秩序。要维护小区车辆的秩序,既要有好的硬件环境,同时也要有好的客户服务,而要实现这些目标的办法就是信息化。本选题,针对小区车辆管理过程中的一些信息,对其进行信息化处理。当前,在小区车辆管理过程中,有许多信息需要处理和管理。甚至尚未使用计算机进行信息处理。根据调查得知,他们以前对信息管理的主要方式是基于文本、表格等纸介质的手工处理,对于管理过程中的很多信息都是用人工计算、手抄进行。数据信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找。总的来说,缺乏系统,规范的信息管理手段。数据处理手工操作,工作量大,出错率高,出错后不易更改。基于这此问题,我认为有必要建立一个停车场管理系统,使停车场管理工作规范化,系统化,程序化,避免停车场管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改停车场情况。在小区车辆管理过程中,主要涉及公共车位信息、私有车位信息、出租车位信息、车主信息、车主缴费信息,通过对以上各个环节的信息化,提高档案的规范化管理,为以后的查询、统计作下基础。1.2开发环境前台应用程序开发使用的是MicrosoftVisualC++6.0,后台数据库的建立和维护使用的是SQLServer2008。(1)MicrosoftVisualC++6.0特点VisualC++6.0,简称VC或者VC6.0,是微软推出的一款C++编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序。VisualC++是一个功能强大的可视化软件开发工具。自1993年Microsoft公司推出VisualC++1.0后,随着其新版本的不断问世,VisualC++已成为专业程序员进行软件开发的首选工具。虽然微软公司推出了VisualC++.NET(VisualC++7.0),但它的应用的很大的局限性,只适用于Windows2000、WindowsXP和WindowsNT4.0。所以实际中,更多的是以VisualC++6.0为平台。VisualC++6.0不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrateddevelopmentenvironment,IDE)。VisualC++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导ClassWizard等开发工具。这些组件通过一个名为DeveloperStudio的组件集成为和谐的开发环境。(2)SQLServer2008SQL是英文StructuredQueryLanguage的缩写,意思为结构化查询语言。SQL语言的主要功能就是同各种数据库建立联系,进行沟通。按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。SQL语句可以用来执行各种各样的操作,例如更新数据库中的数据,从数据库中提取数据等。目前,绝大多数流行的关系型数据库管理系统,如Oracle,Sybase,MicrosoftSQLServer,Access等都采用了SQL语言标准。SQLServer2008为我们带来了一些更强大的审计功能;或许其中最重要的一个就是变更数据捕获(CDC)。使用CDC,你能够捕获和记录发生在你数据库中的任意INSERT、UPDATE或DELETE等操作。一旦你为一个数据库启用了CDC功能,你可以对该数据库中的一个表进行跟踪记录。SQLServer会记录对这些表进行修改的信息,并将其写到启用CDC功能的数据库的某些系统表中。当一个用户针对你的数据表运行INSERT、UPDATE或UPDATE操作时,相关操作事务和相关数据就会被记录下来。对于INSERT来说,插入的数值会被记录,而对于DELETE来说,被删除的值同样也会被记录。UPDATE的操作略微有点不同。更新前后的数据都会被记录。通过使用CDC功能,你不仅可以知道对数据进行了何种操作,你还可以恢复因误操作或错误的程序所造成的丢失数据。这是SQLServer非常强大的一个新增功能,它为数据审计提供了一个非常有用的功能,在此以前,我们一般要借助于第三方工具来实现这一功能。MicrosoftSQLServer2008为加密和密钥管理提供了一个全面的解决方案。为了满足不断发展的对数据中心的信息的更强安全性的需求,公司投资给供应商来管理公司内的安全密钥。MicrosoftSQLServer2008通过支持第三方密钥管理和硬件安全模块(HSM)产品为这个需求提供了很好的支持。这个平台有以下特点:可信任的——使得公司可以以很高的安全性、可靠性和可扩展性来运行他们最关键任务的应用程序。高效的——使得公司可以降低开发和管理他们的数据基础设施的时间和成本。智能的——提供了一个全面的平台,可以在你的用户需要的时候给他发送观察和信息。2.需求分析2.1系统需求分析随着国家经济间建设的不断发展,国有综合实力的不断提高,小汽车已经逐步走进千家万户。面对汽车时代的来临,住宅小区对于智能停车场要求也将进入一个全新的物业管理模式。小区停车场设施的建设、管理是住宅小区规划管理者日益面临的一个重要课题。为了满足小区有车位管理的需求,我们尝试着设计了一个简洁稳定实用的小区车位管理系统。2.1.1需要对小区车位进行属性划分系统应当能够显示车位车主的基本信息,并对其进行添加、修改、查询。对于车位的车主,应当有其完整的车位信息:车位编号,车位属性,车主姓名,地址,电话,手机,车牌号,车型。这些信息在售出车位时由管理人员通过添加功能录入,添加后,车位信息及时更新,当要对车位车主信息进行修改时,要用到修改功能;当需要知道具体的车主信息时,可以根据姓名与车位编号进行查询。车位车主信息显示、添加、修改、查询功能由系统的固定模块实现。2.1.2车位信息显示、添加、修改、查询功能系统应当能够显示车位车主的基本信息,并对其进行添加、修改、查询。对于车位的车主,应当有其完整的车位信息:车位编号,车位属性,车主姓名,地址,电话,手机,车牌号,车型。这些信息在售出车位时由管理人员通过添加功能录入,添加后,车位信息及时更新,当要对车位车主信息进行修改时,要用到修改功能;当需要知道具体的车主信息时,可以根据姓名与车位编号进行查询。车位车主信息显示、添加、修改、查询功能由系统的固定模块实现。2.1.3缴费信息显示、添加、修改、查询功能系统应当根据车位车主信息,记录其缴费信息。小型数据库(车位信息表、车主信息表、缴费信息表)的设计,表格形式可修改、添加、查询车位信息和车位业主信息:车位编号、车位属性、显示车位业主简要信息等。车主和缴费信息模块主要以表格形式显示出车位业主信息:姓名、住址、电话、手机、车牌号、车型等并可修改、添加、查询,以及显示缴费信息:开始时间、每季度是否缴费、缴费总数等。车主和缴费信息显示、添加、修改、查询功能由系统的固定模块实现。2.1.4车位图显示功能系统应当能够显示小区平面图,当鼠标左键点击某个车位时,应当显示出该车位的车主和缴费信息,主要显示车位图、车位编号、车位属性、车位业主信息等,并连接到小型数据库。系统应当根据需求对小区车位进行属性划分。首先应将小区车位划分为私家车位、公共车位和出租车位三部分。私家车位的特点是使用者固定,交费采用季度制。公共车位又可以称为公用车位,它的特点是使用者不固定,针对临时性散客服务。出租车位指私家车位车主向其他人租赁自己的车位。私家车位的车辆总是停放在自己的车位上,而不停放在公共车位和出租车位上。车位中的私家车位和公共车位数目一般情况下是固定不变的。此功能由系统的固定模块实现。2.1.5数据库技术数据库技术是现代信息科学与技术的重要组成部分,是计算机数据处理与车位管理系统的核心。系统应当能够存储车位信息和缴费信息,此功能由数据库实现。2.2可行性分析目前国内外有许多这种类型的软件,小区规划不一,软件的功能却大同小异。公共车位又可以称为公用车位,它的特点是使用者不固定,针对临时性散客服务。出租车位指私家车位车主向其他人租赁自己的车位。私家车位的车辆总是停放在自己的车位上,而不停放在公共车位和出租车位上。车位中的私家车位和公共车位数目一般情况下是固定不变的。对于小区业主,有私家车的,如果停放在小区那么必须购买车位。软件系统记录车位的属性:出租车位、公共车位、私有车位;记录车位的信息:车主姓名、地址、车牌号等;记录缴费信息:开始缴费时间、最后缴费时间、缴费总数等。系统必须可以对相应数据进行添加、查询、修改。因此,车位信息和缴费信息是必须包含的。大学课程中学习了VC编程软件,MicrosoftVisualC++6.0软件能够实现车位信息和缴费信息的列表显示。通过对数据库的操作,能够实现数据的添加,修改,查询。所以本软件系统的开发是必要的,可行的。2.3数据描述由上述分析和根据对系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程的分析,可画数据流图2-1所示。车位及车主车位及车主用户车位图车主及缴费添加显示车位车主及缴费信息查询添加修改查询3.概要设计3.1数据库的设计数据库作为系统的基础,在信息管理系统中占有非常重要的地位,首先要保证其设计的合理性,一个设计合理的数据库,可以提高数据的存储效率,是对数据有效管理的前提条件,保证数据的完整和一致,也是系统设计的关键。拥有设计合理的数据库往往可以起到事半功倍的效果。数据库如果设计不当,系统运行当中会产生大量的冗余数据,从而造成数据库的极度膨胀,影响系统的运行效率。3.2主要数据表结构表3.1车主信息表列名数据类型允许null值idVarchar(50)√nameVarchar(50)√addressVarchar(50)√telVarchar(50)√phoneVarchar(50)√carIDVarchar(50)√cartypeVarchar(50)√表3.2车位信息表列名数据类型允许null值idinttypeVarchar(50)√numberintownerVarchar(50)√表3.3缴费信息表列名数据类型允许null值useridintstartVarchar(50)totalVarchar(50)√ispayVarchar(50)√4.详细设计4.1设计目标本系统小区车辆管理系统,必须要满足使用灵活、操作方便等设计要求。本系统在设计时应达到以下目标:1、系统界面要美观友好,操作简单方便。2、信息查询灵活、方便、快捷、准确。3、系统要实现易安装性、易维护性和易操作性。4、系统运行稳定、安全可靠。5、提高工作效率、降低成本。6、减少工作人员沉重、繁琐的工作量。7、数据计算自动完成,尽量减少人工干预。4.2设计思想小区车辆管理系统采用三层结构的设计思想,其程序逻辑结构分为用户界面层、业务逻辑处理层和数据存储层。整个系统在三层结构之上分模块进行分解,利用当今流行的C++语言,基于WindowsXP、Access2000、VC6.0为开发环境进行开发。用户界面层主要处理用户的操作;业务逻辑层主要处理用户操作和数据库之间的连接;数据层主要针对数据库信息的处理。在系统中将车位、车主及缴费信息等都封装成相应的类,同时每个类都有自己对应的集合类和操作类,从而再次提高了对数据库操作的安全性和程序的可扩展性。4.3系统主要功能模块设计本系统应用有如下功能模块:(1)小区车位管理系统——车位管理模块设计与开发(2)小区车位管理系统——业主信息和缴费信息模块(3)小区车位管理系统——车位图模块设计与开发该论文主要关于小区车位管理系统——车位管理模块设计与开发,车位管理模块具有以下功能:对车位进行管理,通过设计软件对车位表进行表格显示;在车位表中进行修改,查询和添加车位信息。以上操作都要连接数据库,实现可视化的对数据库的增加、删除和修改,方便小区管理车辆。小型数据库车位信息包括车位编号、车位属性、姓名、住址、电话、手机、车牌号、车型,车位状态。4.4系统窗体设计4.4.1主窗体设计(1)运行程序进入主界面,窗口如下图图4-1系统主界面(2)代码设计代码主要实现功能:连接所建的小型数据库,单击击车位图中的车位号时显示车位的具体状态,包括车位信息(车位编号、车位属性、姓名、住址、电话、手机、车牌号、车型),缴费信息(开始时间、最后缴费时间、欠费时间总数、欠费总数)。点击车位管理,会显示车位信息表,包括车位编号、车位属性、姓名、住址、电话、手机、车牌号、车型、车位状态。点击缴费管理,会显示车主及缴费信息表。包括车位编号、车位属性、姓名、住址、电话、手机、车牌号、车型、开始时间、最后缴费时间、欠费时间总数、欠费总数所有信息。4.4.2车位管理窗口(查询、添加、修改、删除)设计(1)通过车位图主界面的车位管理菜单进入此窗口,窗口显示包括车位编号、车位属性、姓名、住址、电话、手机、车牌号、车型、车位状态等具体信息。由此界面中的各个按钮可以对数据库中的车位表进行添加、修改、删除、查询。具体窗口如下图图4-2车位管理窗体(2)代码设计:voidCParkDlg::DoDataExchange(CDataExchange*pDX){}BOOLCParkDlg::OnInitDialog(){ } UpdateData(false); returnTRUE;//returnTRUEunlessyousetthefocustoacontrol //EXCEPTION:OCXPropertyPagesshouldreturnFALSE}//搜索车位和业主信息voidCParkDlg::OnSearchPark(){ }//当点击表格某一行时,触发的事件,用于确定新增,修改,删除按钮是否可用voidCParkDlg::OnClickTable(NMHDR*pNMHDR,LRESULT*pResult){}通过此代码实现车位管理功能。详细代码见附录A中的车位管理代码。4.4.3、车位信息查询窗体设计(1)通过搜索按钮进行信息的查询,在输入框输入所要查询的内容(可以选择搜索方式或者关键字搜索)就可以显示出想要查询的内容。窗口如下图图4-3车位信息查询窗体(2)代码设计CDatabase::CDatabase(){}CDatabase::~CDatabase(){ }//查询所有车位信息_RecordsetPtrCDatabase::searchCarParking(){ }//查询业主信息_RecordsetPtrCDatabase::searchOwners(CStringid){}//根据条件查询,按照车位或者车牌号查询_RecordsetPtrCDatabase::searchCarParking(CStringkeyword,intcondition){ }//根据车位ID查询车位,用于判断当前车位是有用户boolCDatabase::searchParingById(CStringid){ }通过此代码实现车位管理的查询功能。详细代码见附录A中的车位信息查询代码。4.4.4、车位信息添加窗体设计(1)点击车位管理中的添加按钮,进入添加窗口。在窗口中填入所要填的各种信息,然后保存就可以实现添加。窗口如下图图4-4车位信息添加窗体(2)代码设计//给对应车位添加车组信息voidCParkDlg::OnAdd(){ //获取选中行中的车位号。 //获取选中行的车位类型 //获取选中行号 //跳转到新增车主的界面,同时设置界面需要显示的车位号和车位类型 //关闭当前窗口,并刷新数据 }通过此代码实现车位管理的添加功能。详细代码见附录A中的车位信息添加代码。4.4.5、车位信息修改窗体设计(1)点击车位管理中的修改按钮,进入修改窗口。在窗口中填入所要改的各种信息,然后保存就可以实现修改功能。窗口如下图图4-5车位信息修改窗体(2)代码设计//修改对应车位的车主信息所触发的事件voidCParkDlg::OnModify(){ //获取选中的行 //判断是否选中列表中的值 //跳转到车主的界面,同时设置界面需要显示的车位号和车位类型 //关闭当前窗口,并刷新数据 }通过此代码实现车位管理的修改功能。详细代码见附录A中的车位信息修改代码。4.4.6、车位信息删除窗体设计(1)在车位管理中选中一行信息,点击删除按钮就会跳出是否删除的提示框,点击确定就能删除想要删除的信息。图4-5车位信息删除窗体(2)代码设计//删除按钮响应的事件voidCParkDlg::OnDelete(){ //获取选中的行 //判断是否选中列表中的值 //关闭当前窗口,并刷新数据 }通过此代码实现车位管理的删除功能。详细代码见附录A中的车位信息删除代码。5.系统测试5.1测试原则通过单元测试和集成测试,仅能保证软件开发的功能得以实现。但不能确认在实际运行时,它是否满足用户的需要,是否大量存在实际使用条件下会被诱发产生错误的隐患。为此,对完成开发的软件必须经过规范的系统测试。换个角度说,开发完成的软件仅仅是实际投入使用系统的一个组成部分,需要测试它与系统其他部分配套运行的表现,以保证在系统各部分协调工作的环境下也能正常工作。系统测试应该尽量搭建与用户实际使用环境相同的测试平台,应该保证被测系统的完整性,对临时没有的系统设备部件,也应有相应的模拟手段。系统测试时,对应描述的对象、属性和各种服务,检测软件是否能够完全“再现”问题空间。系统测试不仅是检测软件的整体行为表现,从另一个侧面看,也是对软件开发设计的再确认。这里说的系统测试是对测试步骤的抽象描述。它体现的具体测试内容包括:①功能测试:测试是否满足开发要求,是否能够提供设计所描述的功能,是否用户的需求都得到满足。功能测试是系统测试最常用和必须的测试,通常还会以正式的软件说明书为测试标准。②强度测试:测试系统的能力最高实际限度,即软件在一些超负荷的情况,功能实现情况。如要求软件某一行为的大量重复、输入大量的数据或大数值数据、对数据库大量复杂的查询等。③性能测试:测试软件的运行性能。这种测试常常与强度测试结合进行,需要事先对被测软件提出性能指标,如传输连接的最长时限、传输的错误率、计算的精度、记录的精度、响应的时限和恢复时限等。④安全测试:验证安装在系统内的保护机构确实能够对系统进行保护,使之不受各种非常的干扰。安全测试时需要设计一些测试用例试图突破系统的安全保密措施,检验系统是否有安全保密的漏洞。⑤恢复测试:采用人工的干扰使软件出错,中断使用,检测系统的恢复能力,特别是通讯系统。恢复测试时,应该参考性能测试的相关测试指标。⑥可用性测试:测试用户是否能够满意使用。具体体现为操作是否方便,用户界面是否友好等。⑦安装/卸载测试等等。5.2测试计划1.此小区车辆管理系统是在老师和自己的努力下完成的。2.此项目是为了节省政府的时间,提高工作效率,以创造出更大的利益而设计的。3.此项目在测试的时候采用的是手动的方法.5.3测试结果通过以上的测试,最后结果证明此车辆管理信息管理系统可用,可以为小区车辆管理节省大量的人力物力。6.总结与展望经过冯永老师耐心细致的指导,及同学们的帮助,同时翻阅了大量的资料(包括网上资料,书本及学校的一些相关资料)经过近一个月的努力,设计最终告一段落。通过这个课题也使我深深的理解了软件设计的思想懂得如何运用所学的知识建立一个系统。在初步完成代码的编写工作后我通过单步调试,反反复复,最终解决了这些问题。在这一段时间里,我实现了从构思到编程,到各种功能的具体运行,整个过程是艰辛的,但也是快乐的。通过这次毕业设计,我体会到了很多,首先要把大学这四年所学的东西全部学以致用,在有限的时间内,一个人完成一个独立的项目,的确是一个极大的挑战。但是在这个挑战中我学习到了很多,不会的就到图书管翻阅资料、或者去网上搜索,或者请教老师和同学,特别是老师和同学们,给予了我很大的帮助。在程序的设计中遇到了很多问题,印象深刻的就是开始的时候数据库连接,怎么也连接不上,以为是连接字符串的问题,但是改来改去也没能解决问题,后来尝试性的改了DSN的服务器,才发现是服务器连接错误,改了之后就运行起来了。毕业设计给我带来的不仅仅是挑战,更是机遇,他教会我如何去发现问题,然后如何解决问题,教我不能放弃,要一直的努力才能得到最后的胜利。通过毕业设计我不仅仅知道了更多的软件方面的知识,也学会了一些新的思考方式。我认为本系统有如下优缺点:优点:本系统具有较强的直观性,设计完整,能较好的体现系统的设计构思;缺点:设计的有些方面有点简单,只解决了主要问题,实现了主要功能,还有很多地方需进一步分析改进。致谢毕业论文是对学生大学阶段学习成绩的总结,也是对学生分析问题、解决问题能力的综合考察。在本次毕业设计中,我从冯永老师身上学到了很多东西。老师认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我受益匪浅。无论在理论上还是在实践中,都给与我很大的帮助,在冯老师的帮助下,我的专业知识和专业能力达到了质的飞跃。这对于我以后的工作和学习都有一种巨大的帮助,感谢老师在此,我在这里再次忠心的感谢冯老师在系统开发过程中给予我的大力帮助,使我有信心解决难题,一步步的完成毕业设计,使得系统能及时开发完成。同时还要向给予我无微不至的关心和帮助的学校各级领导和教师以及同学表达最诚挚的谢意。衷心感谢各位评审的批评和指导。参考文献[1]冯博琴等著。《面向对象分析与设计》,机械工业出版社,2003[2]孙晨霞主编,《数据库应用技术》,北京邮电大学出版社,2010.8[3]周桂红主编,《数据结构》,北京邮电大学出版社,2010.8[4]李旗编著,《C#.NET程序设计》,机械工业出版社,2008.1[5]谭浩强著,《C语言程序设计》,清华大学出版社,2006[6]明日科技著,《SQLServer》从入门到精通,清华大学出版社,2012.9[7]谢勇.《VisualC++6.0》实例精通.北京:科学出版社,2000年[8]丁宝康:《数据库实用教程》,北京:清华大学出版社,2004年。[9]周佩德.《数据库原理及应用》.北京:电子工业出版社。2005年[10](美)CJDate.《AnIntroductiontoDATABASESYSTEMS》.北京:机械工业出版社,2002年。[11]特别感谢百度知道、CSDN、MSDN、豆丁网等论坛给予的帮助。附录A(1)车位管理代码//ParkDlg.cpp:implementationfile//#include"stdafx.h"#include"CarMangement.h"#include"ParkDlg.h"#include"Database.h"#include"AddOwnerDlg.h"#include"ModifyParkDlg.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////CParkDlgdialogCParkDlg::CParkDlg(CWnd*pParent/*=NULL*/):CDialog(CParkDlg::IDD,pParent){ //{{AFX_DATA_INIT(CParkDlg) m_condition=-1; m_keyword=_T(""); //}}AFX_DATA_INIT}voidCParkDlg::DoDataExchange(CDataExchange*pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CParkDlg) DDX_Control(pDX,IDC_BUTTON3,m_delete); DDX_Control(pDX,IDC_BUTTON2,m_modify); DDX_Control(pDX,IDOK,m_add); DDX_Control(pDX,IDC_LIST1,m_parkList); DDX_Radio(pDX,IDC_RADIO1,m_condition); DDX_Text(pDX,IDC_EDIT1,m_keyword); //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CParkDlg,CDialog)//{{AFX_MSG_MAP(CParkDlg)ON_BN_CLICKED(IDC_BUTTON1,OnSearchPark)ON_NOTIFY(NM_CLICK,IDC_LIST1,OnClickTable)ON_BN_CLICKED(IDOK,OnAdd) ON_BN_CLICKED(IDC_BUTTON2,OnModify) ON_BN_CLICKED(IDC_BUTTON3,OnDelete) ON_WM_PAINT() //}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CParkDlgmessagehandlersBOOLCParkDlg::OnInitDialog(){ CDialog::OnInitDialog(); DWORDstyles=m_parkList.GetExtendedStyle(); m_parkList.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT); m_parkList.InsertColumn(0,"车位编号",LVCFMT_LEFT,70,0); m_parkList.InsertColumn(1,"车位属性",LVCFMT_LEFT,70,1); m_parkList.InsertColumn(2,"姓名",LVCFMT_LEFT,60,2); m_parkList.InsertColumn(3,"住址",LVCFMT_LEFT,80,3); m_parkList.InsertColumn(4,"电话",LVCFMT_LEFT,80,4); m_parkList.InsertColumn(5,"手机",LVCFMT_LEFT,80,5); m_parkList.InsertColumn(6,"车牌号",LVCFMT_LEFT,80,6); m_parkList.InsertColumn(7,"车辆类型",LVCFMT_LEFT,77,7); CDatabasem_database; _RecordsetPtrresult=m_database.searchCarParking(); intm_returnCount=0; _variant_tparkID,parkType,owner,name,address,tel,phone,carID,carType; while(!result->adoEOF) { //得到结果集中的数据值 parkID=result->GetCollect("number"); parkType=result->GetCollect("type"); owner=result->GetCollect("owner"); //将从数据库中读出的数据插入到list中 m_parkList.InsertItem(m_returnCount,""); m_parkList.SetItemText(m_returnCount,0,(LPCTSTR)(_bstr_t)parkID); m_parkList.SetItemText(m_returnCount,1,(LPCTSTR)(_bstr_t)parkType); CStringstrowner; if(owner.vt==VT_NULL||owner.vt==VT_EMPTY) { strowner=""; } else { strowner=(LPCTSTR)(_bstr_t)owner; } //如果对应的车位用户不是空,这需要查询业主的信息 if(!strowner.IsEmpty()) { //查询业主信息 _RecordsetPtrresultowner=m_database.searchOwners((LPCTSTR)(_bstr_t)strowner); //从结果集中获取对应值 name=resultowner->GetCollect("name"); address=resultowner->GetCollect("address"); tel=resultowner->GetCollect("tel"); phone=resultowner->GetCollect("phone"); carID=resultowner->GetCollect("carID"); carType=resultowner->GetCollect("carType"); //将数据插入到对应的表格中 m_parkList.SetItemText(m_returnCount,2,(LPCTSTR)(_bstr_t)name); m_parkList.SetItemText(m_returnCount,3,(LPCTSTR)(_bstr_t)address); m_parkList.SetItemText(m_returnCount,4,(LPCTSTR)(_bstr_t)tel); m_parkList.SetItemText(m_returnCount,5,(LPCTSTR)(_bstr_t)phone); m_parkList.SetItemText(m_returnCount,6,(LPCTSTR)(_bstr_t)carID); m_parkList.SetItemText(m_returnCount,7,(LPCTSTR)(_bstr_t)carType); } m_returnCount++; result->MoveNext(); } UpdateData(false); returnTRUE;//returnTRUEunlessyousetthefocustoacontrol //EXCEPTION:OCXPropertyPagesshouldreturnFALSE}//搜索车位和业主信息voidCParkDlg::OnSearchPark(){ UpdateData(); //清空列表中的数据 m_parkList.DeleteAllItems(); if(m_condition==-1) { AfxMessageBox("请选择检索条件"); } else { //初始化数据库 CDatabasesearch; //调用数据库接口查询车位信息 _RecordsetPtrresult=search.searchCarParking(m_keyword,m_condition); intm_returnCount=0; _variant_tparkID,parkType,name,owner,address,tel,phone,carID,carType; while(!result->adoEOF) { //得到结果集中的数据值 parkID=result->GetCollect("number"); parkType=result->GetCollect("type"); owner=result->GetCollect("owner"); //将从数据库中读出的数据插入到list中 m_parkList.InsertItem(m_returnCount,""); m_parkList.SetItemText(m_returnCount,0,(LPCTSTR)(_bstr_t)parkID); m_parkList.SetItemText(m_returnCount,1,(LPCTSTR)(_bstr_t)parkType); //判断是否是空 CStringstrowner; if(owner.vt==VT_NULL||owner.vt==VT_EMPTY) { strowner=""; } else { strowner=(LPCTSTR)(_bstr_t)owner; } //如果对应的车位用户不是空,这需要查询业主的信息 if(!strowner.IsEmpty()) { //查询业主信息 _RecordsetPtrresultowner=search.searchOwners((LPCTSTR)(_bstr_t)strowner); while(!resultowner->adoEOF) { //从结果集中获取对应值 name=resultowner->GetCollect("name"); address=resultowner->GetCollect("address"); tel=resultowner->GetCollect("tel"); phone=resultowner->GetCollect("phone"); carID=resultowner->GetCollect("carID"); carType=resultowner->GetCollect("carType"); //将数据插入到对应的表格中 m_parkList.SetItemText(m_returnCount,2,(LPCTSTR)(_bstr_t)name); m_parkList.SetItemText(m_returnCount,3,(LPCTSTR)(_bstr_t)address); m_parkList.SetItemText(m_returnCount,4,(LPCTSTR)(_bstr_t)tel); m_parkList.SetItemText(m_returnCount,5,(LPCTSTR)(_bstr_t)phone); m_parkList.SetItemText(m_returnCount,6,(LPCTSTR)(_bstr_t)carID); m_parkList.SetItemText(m_returnCount,7,(LPCTSTR)(_bstr_t)carType); resultowner->MoveNext(); } } m_returnCount++; result->MoveNext(); } result->Close(); if(m_returnCount==0) { AfxMessageBox("没有搜索到相关内容!"); } } }//当点击表格某一行时,触发的事件,用于确定新增,修改,删除按钮是否可用voidCParkDlg::OnClickTable(NMHDR*pNMHDR,LRESULT*pResult){ CStringparkingID; intcur; //获取选中的行 for(inti=0;i<m_parkList.GetItemCount();i++) { if(m_parkList.GetItemState(i,LVIS_SELECTED)==LVIS_SELECTED) { //获取选中行中的车位号。 parkingID=m_parkList.GetItemText(i,0); //获取选中行号 cur=i; } } CDatabasesearch; boolresult=true; if(!parkingID.IsEmpty()) { result=search.searchParingById(parkingID); } else { return; } if(result) { m_add.EnableWindow(false); m_modify.EnableWindow(true); m_delete.EnableWindow(true); } else { m_modify.EnableWindow(false); m_delete.EnableWindow(false); m_add.EnableWindow(true); }}车位信息查询代码//Database.cpp:implementationoftheCDatabaseclass.////////////////////////////////////////////////////////////////////////#include"stdafx.h"#include"CarMangement.h"#include"Database.h"#ifdef_DEBUG#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#definenewDEBUG_NEW#endif////////////////////////////////////////////////////////////////////////Construction/Destruction//////////////////////////////////////////////////////////////////////CDatabase::CDatabase(){ //CoInitialize是Windows提供的API函数,用来告诉Windows以单线程的方式创建com对象。 //应用程序调用com库函数(除CoGetMalloc和内存分配函数)之前必须初始化com库。 ::CoInitialize(NULL); HRESULThr; hr=m_pConnection.CreateInstance(_uuidof(Connection)); if(FAILED(hr)) { ::AfxMessageBox("Connection实例失败!"); } m_pCommand.CreateInstance(_uuidof(Command)); m_pRecord.CreateInstance(_uuidof(Recordset)); try { _bstr_tstr="Provider=SQLOLEDB.1;IntegratedSecurity=SSPI;DataSource=PC-20130725DTRH;InitialCatalog=CarMangement;uid=sa;pwd=hutao19901105"; hr=m_pConnection->Open(str,"","",adModeUnknown); } catch(_com_errore) { ::AfxMessageBox(e.Description()); }}CDatabase::~CDatabase(){ }//查询所有车位信息_RecordsetPtrCDatabase::searchCarParking(){ _bstr_tsearchSql="select*fromparking"; m_pRecord=m_pConnection->Execute(searchSql,NULL,adCmdText); returnm_pRecord;}//查询业主信息_RecordsetPtrCDatabase::searchOwners(CStringid){ _bstr_tsearchSql="select*fromownerswhereid='"+id+"'"; m_pRecord=m_pConnection->Execute(searchSql,NULL,adCmdText); returnm_pRecord;}//根据条件查询,按照车位或者车牌号查询_RecordsetPtrCDatabase::searchCarParking(CStringkeyword,intcondition){ _bstr_tsearchSql="select*fromparkingwhereidlike'%"+keyword+"%'"; if(condition==1) { searchSql="select*fromparkingwheretypelike'%"+keyword+"%'"; } m_pRecord=m_pConnection->Execute(searchSql,NULL,adCmdText); returnm_pRecord;}//根据车位ID查询车位,用于判断当前车位是有用户boolCDatabase::searchParingById(CStringid){ boolisExist; //构造sql语句 _bstr_tsearchSql="select*fromparkingwhereid='"+id+"'"; m_pRecord=m_pConnection->Execute(searchSql,NULL,adCmdText); _variant_towner; owner=m_pRecord->GetCollect("owner"); //判断车位是又有对应的业主 if(owner.vt==VT_EMPTY||owner.vt==VT_NULL) { isExist=false; } else isExist=true; returnisExist;}车位信息添加代码//给对应车位添加车组信息voidCParkDlg::OnAdd(){ CStringparkingID,parkingType; intcur; //获取选中的行 for(inti=0;i<m_parkList.GetItemCount();i++) { if(m_parkList.GetItemState(i,LVIS_SELECTED)==LVIS_SELECTED) { //获取选中行中的车位号。 parkingID=m_parkList.GetItemText(i,0); //获取选中行的车位类型 parkingType=m_parkList.GetItemText(i,1); //获取选中行号 cur=i; } } //判断是否选中列表中的值 if(parkingID.IsEmpty()) { AfxMessageBox("没有选择行"); } else { //跳转到新增车主的界面,同时设置界面需要显示的车位号和车位类型 CAddOwnerDlgaddOwnerdlg; addOwnerdlg.m_parkingID=parkingID; addOwnerdlg.m_parkingType=parkingType; addOwnerdlg.DoModal(); //关闭当前窗口,并刷新数据 EndDialog(IDD_DIALOG_CARMAN); CParkDlgnewDlg; newDlg.DoModal(); }车位信息修改代码//修改对应车位的车主信息所触发的事件voidCParkDlg::OnModify(){ CStringparkingID,parkingType,name,address,tel,phone,carID,carType; intcur; //获取选中的行 for(inti=0;i<m_parkList.GetItemCount();i++) { if(m_parkList.GetItemState(i,LVIS_SELECTED)==LVIS_SELECTED) { //获取选中行中的车位号。 parkingID=m_parkList.GetItemText(i,0); //获取选中行的车位类型 parkingType=m_parkList.GetItemText(i,1); name=m_parkList.GetItemText(i,2); address=m_parkList.GetItemText(i,3); tel=m_parkList.GetItemText(i,4); phone=m_parkList.GetItemText(i,5); carID=m_parkList.GetItemText(i,6); carType=m_parkList.GetItemText(i,7); //获取选中行号 cur=i; } } //判断是否选中列表中的值 if(parkingID.IsEmpty()) { AfxMessageBox("没有选择行"); } else { //跳转到新增车主的界面,同时设置界面需要显示的车位号和车位类型 CModifyParkDlgmodifydlg; modifydlg.m_parkingID=parkingID; modifydlg.m_parkingType=parkingType; modifydlg.m_name=name; modifydlg.m_address=address; modifydlg.m_tel=tel; modifydlg.m_phone=phone; modifydlg.m_carID=carID; modifydlg.m_carType=carType; modifydlg.DoModal(); //关闭当前窗口,并刷新数据 EndDialog(IDD_DIALOG_CARMAN); CParkDlgnewDlg; newDlg.DoModal(); } }车位信息删除代码//删除按钮响应的事件voidCParkDlg::OnDelete(){ CStringparkingID,parkingType; intcur; //获取选中的行 for(inti=0;i<m_parkList.GetItemCount();i++) { if(m_parkList.GetItemState(i,LVIS_SELECTED)==LVIS_SELECTED) { //获取选中行中的车位号。 parkingID=m_parkList.GetItemText(i,0); //获取选中行的车位类型 parkingType=m_parkList.GetItemText(i,1); //获取选中行号 cur=i; } } //判断是否选中列表中的值 if(parkingID.IsEmpty()) { AfxMessageBox("没有选删除的信息"); } else { MessageBox("确定删除?","确认信息框",MB_OKCANCEL); //初始化数据库对象 CDatabasem_dataBase; boolresult=m_dataBase.delOwnerInfo(parkingID); if(result) { MessageBox("删除成功","提示信息框",MB_OK); //m_parkList.DeleteItem(cur); //关闭当前窗口,并刷新数据 EndDialog(IDD_DIALOG_CARMAN); CParkDlgnewDlg; newDlg.DoModal(); } else { MessageBox("删除失败","提示信息框",MB_OK); } } }voidCParkDlg::OnPaint(){ // //给窗体添加背景 // CPaintDCdc(this); CRectrc; GetClientRect(&rc); CDCdcMem; dcMem.CreateCompatibleDC(&dc); CBitmapbmpBackground; bmpBackground.LoadBitmap(IDB_BITMAP2); BITMAPbitmap; bmpBackground.GetBitmap(&bitmap); CBitmap*pbmpPri=dcMem.SelectObject(&bmpBackground); dc.StretchBlt(0,0,rc.Width(),rc.Height(),&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);}基于C8051F单片机直流电动机反馈控制系统的设计与研究基于单片机的嵌入式Web服务器的研究MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究基于模糊控制的电阻钎焊单片机温度控制系统的研制基于MCS-51系列单片机的通用控制模块的研究基于单片机实现的供暖系统最佳启停自校正(STR)调节器单片机控制的二级倒立摆系统的研究基于增强型51系列单片机的TCP/IP协议栈的实现基于单片机的蓄电池自动监测系统基于32位嵌入式单片机系统的图像采集与处理技术的研究基于单片机的作物营养诊断专家系统的研究基于单片机的交流伺服电机运动控制系统研究与开发基于单片机的泵管内壁硬度测试仪的研制基于单片机的自动找平控制系统研究基于C8051F040单片机的嵌入式系统开发基于单片机的液压动力系统状态监测仪开发HYPERLINK"/detail.h
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 踩高跷幼儿园教案
- 保护牙齿教案反思小班
- 汉真有趣说课稿
- 航空航天履约管理办法
- 塑料大棚建设安装协议
- 临时医疗电源租赁合同
- 电信业不合格服务管理
- 航空航天设施保温施工协议
- 脊椎病诊断与治疗
- 研发项目保密规则
- 自由基溶液聚合工艺——丙烯腈的溶液聚合
- 附件1-江西省病原微生物实验室备案登记表.doc-附件1
- 柴油发电机组技术规范书
- 陶瓷工艺学4陶瓷成型
- qc_降低设备故障率(ppt)
- D702-1~3 常用低压配电设备及灯具安装(2004年合订本)_(高清版)
- 山西经济出版社小学信息技术第一册全册教案
- 空调系统试运转调试记录填写范例
- 儿科常见疾病护理诊断和护理措施
- 特种作业人员台账.doc
- 图书室开放时间表(精编版)
评论
0/150
提交评论