本科毕业__论文

本科毕业__论文

ID:43709402

大小:1.48 MB

页数:103页

时间:2019-10-13

上传者:U-7604
本科毕业__论文_第1页
本科毕业__论文_第2页
本科毕业__论文_第3页
本科毕业__论文_第4页
本科毕业__论文_第5页
资源描述:

《本科毕业__论文》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

毕业设计(论文)说明书学院一计算机学院专业计算机科学与技术年级姓名宗人指导教师 2011年06月18日 毕业设计(论文)任务书题目:汽车租赁管理系统的开发与实现学生姓名学院名称计算机科学与技术学院专业计算机科学与技术学号指导教师职称副教授 、原始依据1.工作基础随着汽车工业的发展和汽车的普及,汽车租赁成为近年来兴起的一个新兴行业。使用汽车租赁管理系统可以规范企业的管理和经营行为,减少企业的经营成本,提高工作效率。后台数据库使用Access,前台开发工具使用VisualBasic<>木系统采用目前比较流行的ADO数据访问技术,并将每个数据库表的字段和操作封装到类中,从而成功地将面向对象的程序设计思想应用到数据库应用程序设计中。这也是木系统的特色和优势。2.研究条件渔阳汽车租赁信息管理系统是基于单机结构的数据库应用系统,界面用当前优秀的开发工具VisualBasic开发,采用Access2003來设计后•台数据库。3.应用环境应用于中小规模汽车租赁公司。4.工作目的学生通过木课题,不仅可以扎实口己的基础知识,还可以锻炼口学能力,学习当代IT业的先进技术,加强理论与实践的紧密结合,同时对于公司来说,可以提高工作效率,方便人员管理。二、参考文献[1]陈艳峰,高文姬,邵蕴ft.VisualBasic数据库项目案例导航[M]・北京:清华大学出版社,2004.[2]刘文涛.VisualBasic+Access数据库开发与实例[M].北京:清华大学出版社,2006.[3]王VisualBasic数据库开发经典案例解析[M].北京:清华大学出版社,2006.[4]刘化果.VisvalBasic开发实例完全剖析[M]・北京:中国电力出版社,2006.[5]罗VisvalBasicW彩编程实例集锦[M]・北京:中国水利水电出版社,2006.[6]管曙亮,姜大庆,李鹏祥.VisualBasic应用基础[M].北京:高等教育出版社,2004.[7]刘方鑫.数据库原理与技术[M].北京:电子工业出版社,2002.[8]其名工作室.VisualBasic+Access数据库应用系统开发与实例[M]・北京:人民邮电出版社,2004.三、设计(研究)内容和要求1.设计内容该系统为单机结构,前台用当前优秀的开发工具一一VisualBasic发,后台采用Access2003來设计后台数据库,包扌舌如下功能模块:(1)系统管理模块 该模块可以完成修改用户密码、设置密码、增加新的用户,以及用户的删除和退出系统的操作。(2)基础数据管理模块1)车辆和保险类型:该模块的功能为汽车的类型及其保险类型的增加、删除、修改2)汽车销售商管理:该模块用于汽车销售商的查询,增加、删除、修改以及对当下汽车租赁情况的查看,以及对汽车车辆进行管理。3)保险公司管理:该模块用于对保险公司的查看、增加,删除、修改和被保险车辆的查看。4)车辆管理:该模块通过车牌号对车辆的增、删、改进行实时的管理。(3)客户会员管理1)客户管理:通过该模块,用户可以增加新的会员,同时也可以对错误的信息进行修改,对于要求退出的会员可以进行删除操作,必要时可以通过会员号查看会员信息。2)会员管理:该模块的功能是会员进行口主注销和修改个人信息。3)会员类型管理:会员可分为一般会员、vip会员、超级会员,本模块就是针对不同的会员对会员进行优惠管理。(4)日常业务管理1)汽车出租管理:该模块的功能是全方位的监管汽车的租赁情况,包括汽车的出租,出租审核,续租,续租审核,租赁时间,租车费用,租车押金等。2)汽车租赁归还管理:该模块的功能是对于归还的汽车进行审核。1.设计要求界面设计首先考虑标准化,在标准化的基础上进行界面的美工设计。界面设计要求简单易用、简洁明了、用户界面友好、兼容性好。指导教师(签字)年刀日审题小组组氏(签字)年月日天津大学本科生毕业设计(论文)开题报告课题名称汽车租赁管理系统的开发与实现 学院名称计算机学院专业名称计算机科学与技术学生姓名宗人指导教师马明•、课题來源及意义汽车租赁的概念就相对新的多,几乎成为最时髦的概念之一。全国各地都在筹建汽车租赁中心,巨大的产业格局正在形成,第三方汽车租赁方面的讨论,社会分工理论又一次支持我们细分新的产业。在这里我们所要理解的是汽车租赁所产生背景,汽车租赁原本是由自己管理的问题,当规模或影响足够大时,才产生出对第三方汽车租赁的需求,因此分析生产的汽车租赁,能让我们更清楚理解在处理汽车租赁时那些是需要关注的问题,对第三汽车租赁的要求到底是什么。作为计算机应用的一部分,使用计算机对汽车租赁进行管理,具冇着手工管理所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。二、国内外发展状况我国汽车租赁业在1989年起源于北京,当时主要目的是为了迎合1990年在北京举行的亚运会上国外记者及相关人士在华工作中对交通的便捷、机动、私密性的需求,因此建立了第一家汽车租赁公司——北京福斯特汽车租赁公司(注:福斯特一FIRST谐音)。随后,又分别成立了北京首汽租赁公司、上海安吉租赁公司等。在1996〜1998年形成第二轮汽车租赁发展高峰,比如北京今口新概念的创立等。进入2001年前后,又掀起了第3轮汽车租赁企业发展高峰,此轮高峰几乎遍及国内各大城市。三、研究目标和内容该课题的研究目标:设计并实现一个基于VisualBasic技术的信息管理系统。该课题的研究内容:(1)系统管理该模块可以完成修改用户密码、设置密码、增加新的用户,以及用户的删除和退出系统的操作。(2)基础数据管理模块1)车辆和保险类型:该模块的功能为汽车的类型及其保险类型的增加、删除、修改2)汽车销售商管理:该模块用于汽车销售商的查询,增加、删除、修改以及对当下汽车租赁情况的查看。3)保险公司管理:该模块用于对保险公司的查看、增加,删除、修改和 被保险车辆的查看4)车辆管理:该模块通过车牌号对车辆的增、删、改进行实时的管理。(3)客户会员管理1)客户管理:通过该模块,用户可以增加新的会员,同时也可以对错误的信息进行修改,对于要求退出的会员可以进行删除操作,必要时可以通过会员号杳看会员信息。2)会员管理:该模块的功能是会员进行自主注销和修改个人信息。3)会员类型管理:会员可分为一般会员、vip会员、超级会员,木模块就是针对不同的会员对会员进行优惠管理。(4)0常业务管理1)汽车出租管理:该模块的功能是全方位的监管汽车的租赁情况,包括汽车的出租,出租审核,续租,续租审核,租赁时间,租车费用,租车押金等。2)汽车租赁归述管理:该模块的功能是对于归述的汽车进行审核,以及对木记录进行删改。四、研究方法与手段本系统的设计与实现主要包括后台数据库的建立和维护以及前端应用程序的开发两个方而。对于前者要求建立起数据一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序功能完备,用户界面友好且易操作、易维护等特点。经过分析,木系统的设计与实现拟采用Microsoft公司的VisualBasic开发工具,利用其提供的各种面向对象的开发工具;数据库采用Access2003进行设计;开发环境是WindowsXP,基本上应能实现了预期目标。五、可行性分析和具备条件机动车租赁管理是汽车租赁公司开展口常运营活动的必须的环节。传统的手工管理方式不但浪费人力、时间,而且管理复杂,易出差错。基于计算机技术的完备的机动车租赁管理系统把一些繁琐的数据计算、信息处理化为简单的指令操作。完全实现数据信息的电算化管理,彻底把人从手工管理小解放出来。这套系统有利于提高汽车租赁公司的劳动生产率,节约生产成本,增加经济效益。本系统开发要求比较简单:硬件:PC机一台。软件:WindowsXP系统环境;VisualBasic6.0发工具;采用Access2003 数据库。六、进度安排2010.12.18—2011.03.072011.03.08—2011.03.152011.03.16—2011.03.222011.03.23—2011.04.052011.04.06—2011.04.272011.04.28—2011.05.102011.05.11—2011.06.012011.06.02—2011.06.10搜集资料及完成开题报告系统调杳和初步分析可行性分析和系统分析系统设计和详细设计编写代码、调试系统测试书写论文及外文翻译修改论文,准备答辩七、参考文献[1]陈艳峰,高文姬,邵蕴秋.VisualBasic数据库项目案例导航[M].北京:清华大学出版社,2004.⑵刘文涛.VisualBasic+Access数据库开发与实例[M].北京:清华大学出版社,2006.⑶王M.VisualBasic数据库开发经典案例解析[M|.北京:清华大学出版社,2006.[4]刘化果.VisvalBasic开发实例完全剖析[M].北京:中国电力出版社,2006.[5]罗斌.VisvalBasic精彩编程实例集锦[M]・北京:中国水利水电出版社,2006.[6]管曙亮,姜大庆,李鹏祥.VisualBasic应用基础[M]・北京:高等教育出版社,2004.[7]刘方鑫•数据库原理与技术[M].北京:电子工业出版社,2002.⑻其名工作室.VisualBasic+Access数据库应用系统开发与实例[M].北京:人民邮电出版社,2004.选题是否合适:是口否口课题能否实现:能口不能口指导教师(签字)年月FI选题是否合适:是口否口课题能否实现:能口不能口审题小组组长(签字)年月日随着汽车工业的发展和汽车的普及,汽车租赁成为近年来兴起一个新兴行业。传统的手工管理方式不但浪费人力、时间,而且管理复杂,易出差错。为了 有效地减轻企业各类工作人员的工作负担,规范企业的管理和经营行为,减少企业的经营成木,提高工作效率,开发了汽车租赁管理系统软件。汽车租赁系统采用VB作为前台开发工具,Access2003作为后台数据库。本系统是典型的管理信息系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。本系统的功能包括四大模块:基本信息管理,客户会员管理,租赁业务管理和系统用户管理.可以对基木信息添加,修改,删除,查询;可以对客户会员添加,修改,删除,查询和查看客户会员信息,可以对汽车租赁业务进行管理主要包括汽车租赁、续赁、归还等到操作。关键字:信息管理;汽车租赁;管理系统 ABSTRACTWiththeautoindustrydevelopmentandthepopularityofcars,carleasingastheriseofanewlineinrecentyearsIndustryTraditionalmanualmanagementisnotonlyawasteofmanpower,time,andmanagecomplex,error-prone.Inordertoeffectivelyreducethecorporatecategoriesofstaffworkload,regulatethemanagementandoperationofenterprises,reducebusinessoperatingcosts,improveefficiency,developacarrentalmanagementsystemsoftware.CarrentalsystemuseVBasafrontdevelopmenttool,Access2003databaseasabackground.Thissystemisatypicalmanagementinformationsystem(MIS),whichmainlyincludestheestablishmentandmaintenanceofthebackgrounddatabaseandfront-endapplicationdevelopmentaspects.Thesystemfeaturesincludefourmodules:basicinformationmanagement,customermembershipmanagement,leasingmanagement,andsystemusermanagement.Basicinformationcanadd,modify,delete,query;customermembercanadd,modify,delete,queryandviewcustomermembershipinformation,canbemanagedonthecarrentalbusinessincludescarrental,leaserenewal,thereturnuntiltheoperation.Keywords:Informationmanagement;CarRental;Managementsystem 第一章绪论11.1课题背景及意义11.2可行性分析11.3系统需求分析21.4设计工具21.5系统功能介绍3第二章系统分析与设计42.1系统设计思想42.2系统功能模块划分42.3开发设计环境52.4系统特点介绍52.5数据库设计5第三章系统实现123.1创建工程123.2创建模块123.4创建登录窗体模块183.5创建主窗体模块19第四章系统测试604.1测试原则、目标及方法604.2测试内容61 第五章系统使用说明书645.1系统登录645.2系统功能65第六章总结67参考文献68附录69外文资料中文译文致谢 第一章绪论1.1课题背景及意义现代科学的发展,使计算机进入了几乎一切领域。从科学研究到工农业生产,从企业生产管理到家庭生活,各行各业都广泛地使用着计算机。当今社会的数据信息管理离不开计算机技术的支持。如何实现对数据信息快捷、有效、实用的管理,是软件开发业追求的目标。今天,随着社会生产的发展,人民生活水平的提高,机动车租赁己成为一个极具市场潜力的行业,面对飞速发展的租赁市场,传统的人工租赁管理方式在进行繁多的业务信息处理时显得极不适应,因此,人们对于运用计算机来辅助协调和管理租赁工作的需求正在逐步提高。随着社会物质条件的改善,生产生活节奏的加快,人们越来越意识到时间的重要性,在工作中,生活中越来越注重如何节省吋间,提高效率。因为工作和生活的缘故,在必要的时候向汽车出租公司提出租赁车辆的服务要求,己成为大众广为认可和接受的行为和选择。在这种社会需求的强力带动下,机动车租赁市场出现了前所未有的一片繁荣景象。各个汽车租赁公司门庭若市,业务激增。然而在繁忙的景象背后,却也暴館出机动车租赁公司在处理业务信息时以人工方式为主所带來的诸如:效率低下,管理混乱,失误增多等诸多弊端。在实践中,汽车租赁行业的业主们逐渐意识到在租赁行业中借助计算机引入信息管理的重要性,并开始不断提高自身的素质和高科技在工作中的投入,以改善信息的管理,提高服务效率。机动车租赁管理就是对车辆信息和客户信息的管理,主要包括车辆的出租状态、车辆的基本信息、车辆的投保情况、车辆的出厂情况、客户信息的管理等。由于这些过程间的关系复杂,有一对一的关系,一对多的关系,也有多对多的关系,所冇这些工作使机动车管理工作变得量大而又复杂,以前包括现在还冇很多租赁公司采用人工管理,直接导致了错误的产生,服务质量的低下。机动车租赁管理系统的开发使得这一状况得到了根本的改善。这套管理系统包括涵盖了车辆租赁业务的各个方面。使得机动车租赁服务可以快速、规范地完成,节省了人力物力,提高了服务质量和经济效益。1.2可行性分析可行性研究的目的即用最小的代价在尽可能短的时间内确定问题是否能够解决,是否值得去解决。可行性研究实质上是要进行一次大大压缩简化了的系统分析和设计过程,也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。技术可行性分析:汽车租赁管理系统使用VisualBasic6.0作为开发工具,它提供了强大、方便、快捷的编程环境,实现了编程的高度自动化,编写为数不多的代码就可以完成大量工作。VB是Microsoft推出的一种通用程序设计语言,是口前Windows平台上设计应用程序最为快捷的工具之一。后台数据库使用Access2003 数据库,以保证数据的安全和执行高效。系统所需的硬件和软件能够满足企业提岀的要求。经济可行性分析:开发本系统只耍一台可用作浏览器的电脑,一些数据和相关软件。从投入的人力、物力和财力方面来讲是非常小的。由此可见,开发汽车租赁管理系统貝有可行性。1.3系统需求分析需求分析是软件开发工作开始的重要步骤,形成的需求规格说明书是软件开发设计的目标(要解决用户的问题,目标软件系统必须做什么),也是软件交付使用验收审查的标准,所以应予以高度重视。用户很清楚他们所从事的工作和要解决的问题,知道必须做什么和怎么做。当他们表达时,计算机专业人员不一定就能很快完全准确地理解,而且他们的表达也不一定就完全准确;而计算机专业人员了解计算机方面的情况,但是对特定用户的特定需求并不完全清楚。在该阶段系统分析员要和用户密切配合,充分和互交流,以得出经过用户确认的系统逻辑模型。通常用数据流图、数据字典和简要的算法表示系统逻辑模型。系统逻辑模型必须准确完整地体现用户的要求,最终要用正式文档准确记录用户对目标软件系统的需求,该文档通常称为需求规格说明书。汽车租赁管理系统主要是实现统一友好的操作界面,能保证系统的易用性。规范、完善的基础信息设置,灵活的报表设计及打卬功能,实现货物巾请、审核、调度的全过程,全方位的信息查询功能和相应的报表导出功能,保证系统数拯的安全性。1.4设计工具VisualBasic6.0是Microsoft推出的一种通用程序设计语言,是目询Windows平台上设计应用程序最为快捷的工具之一。无论是对专业开发人员还是计算机初学者,它都比较适合,容易学握和使用。“Visual”是指采用的是可视化图形用户界面。在创建用户界面时一般不需要编写大量代码去描述界面对象的外观和位置,而只需要将需要的控件绘制或拖放到需要的位置,然后再做相应的一些属性设置即可,方便、快捷、高效。VB是Basic语言发展而來的,当然与以前的版本相比,VisualBasic6.0的变化是非常大的。VB提供了强大、方便、快捷的编程环境,实现了编程的高度自动化,编写为数不多的代码就可以完成大量的工作,当然这不能理解成不用费什么力气就能解决问题,特别是较复杂的问题。同时它也提供了强大的数据库操作访问功能,这使得采用VB开发以数据库为屮心的数据库管理系统或信息系统变得方便而行Z有效。1.5系统功能介绍在实际开发中,系统功能分析需要系统设计人员与用户进行全面、深入的交流,以切实了解用户对整个系统功能的期望,并分析用户使用的特点,与用户共同决定系统应具有哪些功能。功能分析: 下面是整个系统具有的主要功能:(1)系统管理该模块可以完成修改用户密码、设置密码、增加新的用户,以及用户的删除和退出系统的操作。(2)基础数据管理1)车辆和保险类型:该模块的功能为汽车的类型及其保险类型的增加、删除、修改2)汽车销售商管理:该模块用于汽车销售商的查询,增加、删除、修改以及对当下汽车租赁情况的查看,以及对汽车车辆进行管理。3)保险公司管理:该模块用于对保险公司的查看、增加,删除、修改和被保险车辆的查看。4)车辆管理:该模块通过车牌号对车辆的增、删、改进行实时的管理。(3)客户会员管理1)客户管理:通过该模块,用户可以增加新的会员,同时也可以对错误的信息进行修改,对于要求退出的会员可以进行删除操作,必要时可以通过会员号杳看会员信息。2)会员管理:该模块的功能是会员进行自主注销和修改个人信息。3)会员类型管理:会员可分为一般会员、vip会员、超级会员,木模块就是针对不同的会员对会员进行优惠管理。(4)日常业务管理1)汽车出租管理:该模块的功能是全方位的监管汽车的租赁情况,包括汽车的出租,出租审核,续租,续租审核,租赁时间,租车费用,租车押金等。2)汽车租赁归还管理:该模块的功能是对于归还的汽车进行审核,以及对木记录进行删改。 第二章系统分析与设计系统设计乂称为物理设计,是根据新系统的逻辑模型來构造物理模型,即根据新系统的逻辑功能要求,结合实际条件,进行总体设计和详细设计,解决系统“怎么样做?”的问题。系统设计的任务就是根据逻辑模型设计出满足用户要求的高质量的系统。根据管理系统的特点,系统设计所追求的目标就是系统的可靠性,可维护性,用户界面的友好性,工作的效率性和合法性。2.1系统设计思想机动车租赁管理是汽车租赁公司开展F!常运营活动的必须的环节。基于计算机技术的完备的机动车租赁管理系统把一些繁琐的数据计算、信息处理化为简单的指令操作。完全实现数据信息的电算化管理,彻底把人从手工管理中解放出來。经过艰苦的努力,我终于实现了预期的设计FI标,开发出这套具有一定实用价值的机动车租赁管理系统,使用这套系统冇利于提高汽车租赁公司的劳动生产率,节约生产成本,增加经济效益。渔阳汽车租赁公司主要为蓟县客户提供城市间各种车辆的出租业务,总经理办公室下设有业务部、营运部、技术部等部门。为提高客户的满意程度,拓展公司的业务范围,使客户可以通过网络快捷的完成汽车租赁,需设计开发一个智能管理系统。2.2系统功能模块划分本系统具体分为以下几个模块:业务管理模块、信息查询报表模块、系统管理模块、业务管理、信息查询报表模块,主要的系统模块如图2・1所示。汽乍租赁管理系统基木信息管理客户会员管理租赁业务管理系统用、尸管理汽车类型管理会员类型管理保险类型管理销伟商管理保险公司筲理图2-1汽午租赁管理系统模块 下面是整个系统具有的主要功能:1.运行系统后,首先会看到登录窗体,对用户的身份进行认证。如果需要对普通用户进行管理,则使用Admin用户登录;否则建议使用Users用户登录。2.如果还要创建其他用户,可以在用户管理模块中创建和管理。在本系统小,应该首先增加基本信息和客户会员信息,Z后才能增加汽车租赁信息。3.基本信息模块包括汽车类型信息、保险类型信息、会员类型信息、销售商信息和保险公司信息等。4.客户会员管理模块可以添加、修改、删除和查看客户会员信息。5.在汽车租赁业务管理模块中,可以对汽车信息管理、汽车租赁管理、汽车续租管理和汽车归述管理等操作2.3开发设计环境操作系统:Windows2000/NT/XP/ME开发工具:VisualBasic6.0数据库:Access2003硬件配置:CPU:600MHz以上的处理器内存:64MB,推荐128MB以上硬盘:100MB以上磁盘空间分辨率:最低800x600像素,建议1024x768像素颜色:256色2.4系统特点介绍1.适用于中小型企业的租赁管理。2.程序操作流程清晰。3•操作界面美观、标准、专业、统一,操作方法简单、方便。4.车辆信息和客户信息管理。5.能在Word表格中显示合同信息。6.实现汽年销售信息和年辆信息的增加、编辑、查询和删除操作。2.5数据库设计数据库应用系统设计屮的一个核心问题就是如何设计一个能够满足用户当前与可预见的未来的各项应用要求、性能良好的数据库。数据库设计是从用户的数据需求、处理要求及建立数据库的环境条件(软、硕件特性和其他限制)出发,把给定的应用环境(现实世界)存在的数据合理地组织起来,逐步抽彖成已经选定的某个数据库管理系统能够定义和描述的具体的数据结构的过程。 2.5.1数据库需求分析现在要设计的数据库系统要应用于汽车租赁管理系统,所以必须充分满足订单提交和审核以及调度要求。系统还要记录每个用户的每次请求,以便系统管理员能查看所有用户的操作丿力史记录。1.数据表概要说明如图2-2所示的即为木系统中数据库中的数据表结构图,该数据库结构图包含系统所有数据表。可以清晰的反应数据库信息。User-xE:2003|pn~ir><~|图2-2数据库结构图I二衣1査询页宏槓块组使用设计器刨逢表使用冋导创逢養通过输入数掲创建表Cax-sCompadStateOpenThenMsgBox”数据库连接失败”EndEndIfIsConnect=TrueEndSubEndFunction1.GenearlFunc模块的创建PublicFunctionIn_Single(KeyAsciiAsInteger)AsBooleanDimCh_Accept_Single(20)AsStringEndSub2.Variable模块的建立PublicSqlStmtAsStringPublicConnAsStringPublicCurUserAsNewUsers3.3类模块设计在通常情况下,类的成员变量与对应的表中的字段名相同。由于绝大多数的成员函数的编码格式都是非常相似的,只是所使用的SQL语句不同。1.Type类下面对其中儿个函数进行说明PublicIdAsLongPublicTypeNameAsStringPublicSubDelete(ByValTmpldAsLong)SqlStmt="DELETEFROMTypesWHEREId=n+Trim(TmpId) SQLExt(SqlStmt)EndSubEndFunction表3TType表的结构函数名具体说明Init初始化成员变量Dclct删除指定的类型记录。参数Tmpld表示婆删除的类型编号Gctlnfo读取指定的类型记录。参数Tmpld表示要删除的类型编号In_DB判断指定的种类下的所有分类信息,TmpTid表示种类编号GetlnfoByTypeld读取指定类型下的所冇分类信息,TmpTypeld表示类型种类编号Insert插入新的类型记录Update修改指定的类型记录。参数Tmpld表示要修改的类型编号通过调用自定义过程QueryExternal()可以执行SELECT语句,将结果集返回到Recordset对象rs中。使用rsFields0函数口J以从结果集中读取数据。如果结果集为空,则对类Types初始化。'读取指定种类编号下的类型信息PublicSubGetInfoByTypeId(ByValTmpTypeldAsInteger)DimrsAsNewADODB.Recordset'定义结果集对象DimiAsLong'对数组进行初始化EraseArr_TypeReDimArr_Type(0)EraseArr_IdReDimArr_Id(0)'设置SQL语句SqlStmt="SELECT*FROMTypesWHERETypeld=n+Trim(TmpTypeld)'将结果集读取到rs中Setrs=QueryExt(SqlStmt)i=0'依次把读取的数据赋值到数组中WhileNotrs.EOF ReDimPreserveArr_Id(i+1)ReDimPreserveArr_Type(i+1)Arr_Id(i)=rs.Fields(O)Arr_Type(i)=rs.Fields(l)i=i+1rs.MoveNextWendEndSub'返回指定类型编号的类型名称此函数的功能是返回指定种类编号的类型信息PublicFunctionGetTypeNames(ByValTmpTypeldsAsString)AsStringDimrsAsNewADODB.Recordset'定义结果集对象DimiAsIntegeri=0GetTypeNames=返回值初始化'设置SQL语句SqlStmt="SELECT*FROMTypesWHEREIdIN(M+Trim(TmpTypelds)+”)”'将结果集读取到rs中Setrs=QueryExt(SqlStmt)WhileNotrs.EOFIfi=0Then'第一次添加到字符审GetTypeNames=rs.Fields(l)Else'用逗号分隔类型名称GetTypeNames=GetTypeNames++rs.Fields(l)EndIfi=i+1rs.MoveNextWendEndFunction根据参数TmpTypelds屮的类型编号返回对应的类型名称的字符串,此函数将根据选定的多个保险类型的编号出的对应的所有的类型名称。1.MembersTypes类MembersTypes类用来管理表MemberType的数据操作,它保存为MembersTypes.cisoMemberType类的成员函数如卜表。 表3-2MembersTypes表的结构函数名具体说明Init初始化成员变量)Delet删除指定的会员类型记录。Tmpld表示要删除的会员类型编号。Getlnfo读取指定的会员类型记录oTmpEmpId表示耍读取的会员类型编号。In_DB判断指定的类型是否在数据库小。TmpTypeldName表示类型名称Insert插入新的会员类型记录,会员类型编号山系统自动牛成Update修改指定的会员类型记录。参数Tmpld表示要修改的会员类型编号Delete()过程的代码如下:'删除会员类型信息PublicSubDelete(ByValTmpldAsLong)SqlStmt=HDELETEFROMMemberTypeWHEREId=n+Trim(TmpId)SQLExt(SqlStmt)EndSubo1.Company类Company类用来管理表Company的数据库操作,它保存为Company.clsoCompany类的成员函数如卜•表表3-3Company表的结构函数名具体说明Init初始化成员变量Delet删除指定的记录。参数Tmpld表示记录编号Getlnfo读取指定的记录。参数TmpEmpId表示记录编号Insert插入新记录Update修改指定记录。参数Tmpld表示记录编号 天津人学2011届本科生毕业设计(论文)4.Customer类CustomerCustome匸cis。类用来管理表Customer的数据库操作,它保存为Customer类的成员函数如下表所示。表3-4Customer表的结构函数名具体说明Init初始化成员变量Delet删除指定的记录。参数Tmpld表示客户编号Gctlnfo读取指定的记录。参数TmpEmpId表示客户编号In_DB判断指定的客户信息是否已经在数据库中。Tmpld表示客户编号Insert插入新记录Update修改指定的记录。参数Tmpld表示客八编号UpdateToMembers修改客户的状态为会员。参数Tmpld表示客户编号5.Cars类Cars类用來管理Cars的数据库操作,它保存为Car.clsoCars类的成员函数如下表所示。表3-5Cars表的结构函数名具体说明Init初始化成员变量Delet删除指定的车辆记录。参数TmpCarNo表示要删除的车牌号Getlnfo读取指定的车辆记录。参数TmpCarNo表示车牌编号In_DB判断指定的车牌号是否已经在数据库中。参数TmpCarNo表示车牌编号Insert插入新的车辆记录 6.LeaseCars类LeaseCar类用来管理表LeaseCar的数据库操作,它保存为LeaseCars.cal.LeaseCars类的成员函数如卜表表3~6LeaseCars表的结构函数名具体说明Init初始化成员变量Dclct删除指定的记录。参数Tmpld表示要删除的合同编号Gctlnfo读取指定的记录。参数TmpCNo表示合同编号In_DB判断指定的客户信息是否己经在数据库中。Tmpld表示合同编号Insert插入新的租赁记录Update修改指定的记录。参数Tmpld表示客户编号UpdateAddStatus修改续租值。参数TmpCNo表示合同编号UpdatcScttlcAccount修改租赁结算信息。参数Tmpld表示客户编号7.Users类Users类用來管理表Users的数据库操作,它保存为Users.cls。Users类的成员函数如表表3-7Users表的结构函数名具体说明Init初始化成员变量Delet删除指定的记录。参数TmpUser表示要删除的用户名Getlnfo读取指定的记录。参数TmpUser表示要数据的用户In_DB判断指定的客户信息是否已经在数据库中。参数Tmpld表示客户名Insert插入新的用户记录Update修改指定的用户记录UpdateToMembers修改指定的用户记录。参数TmpUser表示要修改的用户名3.4创建登录窗体模块使用本系统的用户,首先必须通过系统的身份认证,这个过程叫做登陆。登陆窗体的名称为FrmLogin,它的界面布局如图所示。 图3-1“汽车租赁管理系统”登陆窗口3.5创建主窗体模块主窗口是工程的启动对象,可以再系统菜单中选择“工程”/”属性“,打开属性窗口设置启动对象。主窗体名为FrmMaino代开主窗体的设计窗口,选择“工具“菜单项中的”菜单编辑器“,对菜单内容进行编辑。设置菜单项的属性如下表。表3・8菜单项的属性表的结构标题名称基本信息m_Info类型管理m_Types销售商管理m_Sales保险公司管理m_Insur车辆管理m_Cars退出系统m_Exit客户会员管理m_Cust客户信息管理m_Customcr会员信息管理m_Member会员类型管理m_MemberType日常业务管理m_Work汽车租赁管理m_Lease汽车归还管理m_Return 菜单设计器如下图标题Q):權毛名称(M):|m_In£o取消亲引(X):「帮助上下文IDQ0:[0r-复选(£)p有效②)快捷诞0):|QTone)协调位置Q):|0-NoneR可见①)F-显示窗口列表辿)>|—|*|•|下一个◎)]入(X)Stu甯商公纂首信魏WHS頤|退会in•••••••••••Bh;J名I图3-4菜单编辑器图3-5汽车租赁管理系统主界面在主窗体FrmMain屮添加如下代码PrivateSubForm_Load()DimPicPathAsStringPicPath=App.Path+"Imglease.jpg"'图片相对地址Picture=LoadPicture(PicPath)'载入图片'设置数据库连接字符串Conn=HProvider=Microsoft.Jet.OLEDB.4.0;DataSource二"&_App.Path+”"+DATABASE+n;PersistSecurityInfo=False" '系统登录界而TrmLogin.Show1EndSub当主窗体启动时,首先打开“登陆“对话框。如果不能通过身份验证,则不能进入系统。当选择”退出系统“菜单项是,触发m_Exit_Click事件,代码如下:PrivateSubm_Exit_Click()DBapi_DisconnectEndEndSub主页而窗体的属性如下表:表3-9主页窗体的属性表窗体属性设置值具体说明名称FrmMain设置窗体名称BordcrStylc1-FixedSingle设置窗体的边框属性Caption汽车租赁管理系统窗体的标题条文本MaxButtonFalse取消最人化按钮MinButtonTrue激活最小化按钮tartUpPosition2-屏幕中心设置窗体弹出时,位置3.6类型管理模块设计类型管理模块可以添加、修改、删除和查看类型记录,它包含汽车类型和保险分类管理两部分。3.6.1设计类型编辑窗体编辑类型信息的窗体可以用来添加和修改类型信息。创建一个新窗体。窗体名称设置为FrmTypeEdit.图3-6窗体FrmTypeEdit的布局 窗体FrmTypeEdit包含的控件及其属性如卜-表所示:表3-10FrmTypeEdit控件及其属性表对象名属性属性值lblTypeldNamelblTypeld(用于显示所属类型)txtTypeNametxtDep(用于编辑类型名称)txtDescribesNametxtDescribes(用來编辑类型的功能描述)txtDescribesMultiLineTme(多行输入)txtDescribesScrollbar2-Vertical(垂直滚动条)Cmd_OkCaption确定Cmd_CancelCaption取消下面分别分析窗体FrmTypeEdit中部分过程的代码。1.全局变量定义窗体中定义了4个变量,代码如下PublicModifyAsBooleanPublicnTidAsInteger'种类编号1-汽车;2-保险PublicnldAsInteger'分类编号PublicsTNameAsString'旧的分类名称(1)变量Mdify用来标记当前的数据库访问状态。当Modify=True时,表示修改已有的数据;当Modify=False时,表示插入新的数据。(2)变量nTid用来标记当前编辑的类型种类,当nTid二1时,表示编辑汽车分类信息;当nTid二2吋,表示编辑保险分类信息。(3)变量nld用来标记当前编辑的类型的编号。(4)变量sTName用來记录修改询的类型名称。2.Cmd_Ok_Click()当用户单击“确定“按钮时,触发Cmd_Ok_Click事件,对应的程序代码如下:PrivateSubCmd_OK_Click()'检查用户录入数据的有效性IfTrim(txtType)=""ThenMsgBox〃请输入分类名称〃 ExitSubEndIf'将新输入的数据保存到类变量小WithMyType.TypeName=MakeStr(txtType)・Description=MakeStr(txtDescribe).Typeld=nTid'根据变量Modify决定是插入新数据,还是修改已有的数据EndWith'刷新分类设置窗口FrmType.Adodc1.RecordSource="SELECT*FROMTypesWHERETypeld二"+Trim(nTid)FrmType.Adodc1.RefreshFrmType.DataListl.ReFill'关闭窗口UnloadMeEndSub在上而得程序段屮,分别对插入类型数据和修改类型数据两种情况进行处理。出入数据是使用TypesInsertO过程,修改数据是调用Types.Update()过程。3.6.2设计类型管理窗体创建一个新窗体,读者可以参照前面的方法设置窗体属性。窗体名称设置为FrmTypeo类型管理窗体的布局如下图所示:e汽车类型r保险类型-1口1修改I册J除I图3-7类型管理窗体的布局&类型设置特纳萨塔达利帕篥捷夏返回|下而分析窗体FrmType屮部分过程的代码。 1.DataRefresh过程DataRefresh过程的功能是根据种类编号显示列表小的信息,对应的代码如下:PrivateSubDataRefresh()Adodc1.ConnectionString=Conn,设置连接字符串Adodcl.RecordSource="SELECT*FROMTypesWHERETypeId=H+Trim(nTypeld)Adodcl.RefreshSetDataList1.RowSource=Adodc1,设置数据源DataListl.ListField=nTypeNameH,设置显示字段DataListl.BoundColumn=nIdH,设置绑定字段EndSub其中变量nTypeld用来标记类型种类,当nTypeId=l时,表示汽车类型信息;当nTypeId=2时,表示保险类型信息。2.Form_Load过程当装入窗体FrmType时,触发Form_Load事件,对应的代码如F:PrivateSubForm_Load()'设置汽车类型为默认项OptSel(O).Value=TruenTypeld=1'表示种类,用来区分汽车和保险类型'添加汽车类型到DataList中DataRefreshEndSub此过程中将根据类型种类的不同决定显示的类型名称,首先显示汽车分类名称。3.Cmd_Add_Click当用户单击“添加”按钮式,触发Cmd_Add_Click事件,对应的代码如F:PrivateSubCmd_Add_Click()'初始化FrmTypeEdit窗体的显示信息FrmTypeEdit.nTid=nTypeldIfnTypeld=1ThenEndSub4.OptSeLClick过程当用户在汽车类型和保险类型单选按钮Z间切换时,触发OptSel_Click 事件,对应的代码如门PrivateSubOptSel_Click(IndexAsInteger),设置nTypeld值nTypeld=Index+1,索引值加1DataRefresh根据类型种类值刷新类型名称EndSub1.Cmd_Modi_Click过程当用户单击“修改”按钮式,触发Cmd_Modi_Click事件,对应代码如下:PrivateSubCmd_Modi_Click()IfTrim(DataListl.Text)=””ThenExitSubEndIf'将当前类型的信息赋值到编辑类型信息的窗IIFrmTypeEdit.nTid=nTypeld,设置类型种类值IfnTypeld=1ThenFrmTypeEdit.lblTypeld二”汽车类型”ElseFrmTypeEdit.lblTypeld二”保险类型”EndIfBh=DataListl.BoundText,类型编号FrmTypeEdit.nld=BhEndSub2.Cmd_Del_Click过程当用户单击“删除”按钮式,触发Cmd_Del_Click事件,对应的代码如下:PrivateSubCmd_Del_Click()'删除类型CallCurType.Delete(DataList1.BoundText)刷新DataListlDataRefreshEndSub 3.6.3设计选择类型窗体为了方便用户在其他模块中选择保险种类,需要设计一个选择保险种类的窗体,窗体名为FrmTypeSelo它的布局如图所示。图3-8保险种类选择窗体布局“选择保险种类”窗体中使用了ListView空间来显示类型名称,并且类型名称为多选项。其属性如下表:表3-11保险种类表的属性结构对象名属性属性值ListView1NameListView1ListView1CheckboxestrueCmd_SelectedCaption选择Cmd_CancelCaption取消下面介绍窗体中的两个主要过程。1・Form_Load过程当窗体载入时,将提取所冇保险种类数据放在ListView1控件中,对应的代码如下:PrivateSubForm_Load()'获取所有保险种类信息,放入公共变量数组Arr.Id和Arr_Type中MyType.GetlnfoByTypeld(2)DimiAsIntegerDimitmXAsListitem,将保险种类信息放入ListViewFori=0ToUBound(Arr_Id)-1SetitmX=ListView1.Listitems.Add(i+1,”0"+Str(Arr_Id⑴),Arr_Type(i)) NextEndSub数组Arr_Id和Arr_Type是在Variable模块中定义的两个公共变量,Arr_Id 小保存了类型编号,Arr.Type中保存了类型名称数据。2.Cmd_Selected_Click程当用户单击“选择”按钮时,触发Cmd_Selected_Click事件,对应的代码如下:PrivateSubCmd_Selected_Click()'初始化公共变量slnsultems=slnsuKeys='定义变量i为循环变量,n为保险种类选小个数DimiAsIntegerDimnAsIntegeri=0n=0循环ListView,查看是否选中,将选中字符申和关键字放入变量Fori=1ToListView1.Listltems.CountIfListView1.ListItems(i).CheckedThen,选中n=n+1Ifn=lThen如果为第一个则而面没有逗号slnsultems=Trim(ListView1.Listltems(i).Text)slnsuKeys=Str(Val(ListView1.Listltems(i).Key))Elseslnsultems=slnsultems+",”+ListView1.ListItems(i).TextslnsuKeys=slnsuKeys++Str(Val(ListView1.Listltems(i).Key))EndIfEndIfNextUnloadMeEndSub变量slnsultems和slnsuKeys同样是在Variable模块屮定义的两个公共变量,分别用來保存所有选中的类型编号和类型名称,并且用逗号分隔。3.6.4在主界面中增加类型设置代码当选择“类型设置”菜单项时,触发m_Types_Click事件,代码如卜PrivateSubm_Types_Click()FrmType.Show1'类型设置 EndSub3.7销售商和保险公司管理模块设计销售商管理和保险公司管理这两个模块可以添加、修改、删除、和查看记录,它们访问数据库同一个表Company中的数据,其在功能的实现上时完全一样的。3.7.1设计公司信息编辑窗体乍肖售商和保险公司信息的编辑都是使用同一个窗体FrmCompanyEdito创建―个新窗体,读者口J以参考前面的方法设置窗体属性。窗体FrmCompanyEdit的布局如下图:图6T窗体FrmCompanyEdit的布局下面分别分析窗体FrmCompanyEdit中各个过程的代码。1.全局变量窗体中定义了3个全局变量,对应的代码如下:PublicModifyAsBoolean,插入二false,修改=truePublicnldAsInteger公司编号PublicnTidAsInteger啖别编号,1■汽年销售商;2■保险公司变量Modify用來标记当询的数据库访问状态。当Modify=True吋,表示修改己有的数据;当Modify=False时,表示插入新的数据。变量nld用来保存公司编号。变量nTid用來标记当前编辑的公司的类别。当nTid=l时,表示编辑销售商信息;当nTid=2时,表示编辑保险公司信息。2.Cmd_OK_Click过程当用户单击“确定”按钮式,触发Cmd_OK_Click事件,对应的代码如下:PrivateSubCmd_OK_Click()'检查用户录入数据的冇效性IfLen(Trim(txtCompany))=0ThenMsgBox”请输入公司名称!” txtCompany.SetFocusExitSubEndIfIfLen(Trim(txtTelephone))=0ThenMsgBox”请输入联系电话”txtTelephone.SetFocusExitSubEndIf'把用户录入的数据赋值到数据库对象变量小WithMyCompanyEndWith'关闭窗口UnloadMeEndSub3.7.2设计销售商管理窗体销售商管理窗体的名称为FrmSaleso在窗体FrmSales中,使用DataGrid和Adodc控件來显示销售商数据。表3-11销售商管理窗体包含的控件及其属性对象名属性属性值Adodc1CmmandType8-adCmdUnknowntxtCNameNametxtCNameDataListlBoundColumnEmpldCmd_SearchCaption查询Cmd_AddCaption添加Cmd_ModiCaption修改Cmd_DelCaption删除Cmd_ViewCarsCaption查看销售汽车Cmd_BackCaption返回销售商管理窗体的布局如下图 图6-2窗体FrmCompanyEdit的布局下面分别分析窗体FrmSales中的各个过程的代码。1.变量定义SchCnd变量用来保存查询条件2・GridRefresh过程GridRefresh过程是在Adodc控件的结果集发牛改变是,刷新DataGrid控件中的数据,对应的代码如下:PrivateSubGridRefresh()'设置查询条件IfTrim(txtCName)=,M,ThenSchCnd=,n,ElseSchCnd="ANDCompanyLIKE'%”+Trim(txtCName)+n%H,EndIfAdodc1.ConnectionString=Conn"设置数据库连接字符串Adodc1.RecordSource="SELECTIdAS编号,CompanyAS销售商名称,TelephoneAS联系电话,”_+"FaxAS传真,AddressAS地址,ZipCodeAS邮编,EmailAS电子邮件,ContactAS联系人+u,CommentAS说明FROMCompanyWHERETypeld=lH+SchCnd+”ORDERBYId" Adodcl.RefreshSetDataGrid1.DataSource=Adodc1,设置数据源DataGridl.Columns(O).Width=500,设置列宽度DataGrid1.Columns(1).Width=2000DataGridl.Columns(2).Width=800DataGridl.Columns(3).Width=800DataGridl.Columns(4).Width=2000DataGridl.Columns(5).Width=800DataGrid1.Columns(6).Width=1000DataGridl.Columns(7).Width=1000DataGridl.Columns(8).Width=1200EndSub1.Form_Load过程当装入窗体FrmSale时,触发Form_Load事件,对应的代码如F:'启动窗体PrivateSubForm_Load()GridRefreshEndSub2.Cmd_Add_Click过程当用户单击“添加”按钮式,触发Cmd_Add_Click事件,对应的代码如下:PrivateSubCmd_Add_Click()'将Modify变量设置为False,表示当前状态为插入新记录FrmCompanyEdit.Modify=FalseFrmCompanyEdit.nTid=1,表示添加汽车销售商信息FrmCompanyEdit.Show1'启动编辑窗体GridRefresh,刷新DataGrid表格的内容EndSub3.Cmd_Modi_Click过程当用户单击“修改”按钮时,触发Cmd_Modi_Click事件,对应的代码如F:PrivateSubCmd_Modi_Click()IfAdodcl.Recordset.EOF=TrueThenMsgBox"请选择记录”ExitSubEndIf'将Modify变量设置为Tme,表示当前状态为修改新记录 FrmCompanyEdit.Modify=TrueFrmCompanyEdit.nTid=1,表示编辑汽车销售商信息初始化FrmCompanyEdit信息FrmCompanyEdit.nld=Adodc1.Recordset.Fields(O),设置当而编辑的公司编号GridRefresh'刷新DataGrid表格的内容EndSub6・Cmd_Del_Click过程当用户单击“删除”按钮时,触发Cmd_Del_Click事件,对应的代码如下:PrivateSubCmd_Del_Click()IfAdodc1.Recordset.EOF=TrueThenMsgBox”请选择记录”ExitSubEndIfIfMsgBox(H是否确定要删除",vbYesNo,”请确认”)二vbNoThenExitSubEndIfMyCompany.Delete(Adodc1.Recordset.Fields(O))删除公司信息GridRefresh删除后刷新记录EndSub7.Cmd_ViewCars_Click过程当用户单击“查看销售汽车”按钮时,可以查看此销售的所销售的汽车的列表,并触发Cmd_ViewCars_ClickV件,对应的代码如卜:PrivateSubCmd_ViewCars_Click()IfAdodc1.Recordset.EOF=TrueThenMsgBox”请选择记录”ExitSubEndIf'杳看销售的车辆EndSub8.Cmd_Search_Click过程当用户单击“查询”是,触发Cmd_Search_Click事件,对应的代码如下: PrivateSubCmd_Search_Click()GridRefresh'根据条件查询销售商信息EndSub3.7.3设计查看销售汽车窗体查看销售汽车窗体为FrmSaleCars,它和保险公司查看保险汽车的窗体为同一个,只是在设计时设置不同的变量就可以看到不同的结果。窗休FrmSaleCars的布局卜图。图6-3窗体FrmSaleCars的彳j局下而介绍窗体FrmSaleCars的全局变量和记录刷新过程。1.变量定义窗体屮的定义的3个变量为数据刷新时设置条件捉供了参数,代码如下:PublicsSaleNameAsString'名称PublicnSaleldAsLong,编号PublicnTypeAsInteger种类;1表示销售商;2表示保险公司2.GridRefresh过程当窗休被加载时,调用了GridRefresh过程,代码如下:PrivateSubGridRefresh()Adodc1.ConnectionString=Conn,设置数据库连接字符串IfnType=1Then'汽车销售商Adodc1.RecordSource=”SELECTc.CarNoAS车牌号,c.StatusAS状态,”—EndIfAdodcl.Refresh SetDataGrid1.DataSource=Adodc1,设置数据源IfnType=2Then'如果为保险公司则增加显示字段DataGridl.Columns(6).Width=1200DataGridl.Columns(7).Width=1200DataGridl.Columns(8).Width=1200EndIfEndSub程序小根据变量nType的值来区分耍显示的记录类型,由于销售商和保险公司显示的数据字段名称和个数不同,因此还需要为保险公司增加相应字段设置。3.7.4设计保险公司管理窗体保险公司管理窗体为Frmlnsurance,窗体Frmlnsurance的布局如卜图图6-4窗体Frmlnsurance的布局保险公司管理窗体屮的设计方法和销售商管理窗体的设计完全相同3.8车辆管理模块设计车辆管理模块可以添加、修改、删除和查看车辆基本信息。3.8.1设计车辆编辑窗体车辆管理模块为FrmCarEdit,窗体的布局如图所示 图7T窗体FrmCarEdit的布局下面介绍儿个主要的过程1・DataSetUp过程DataSetUp过程的功能是载入窗体所需的数据信息,数据包括汽车类型、销售商和保险公司信息。DataSetUp过程对应的代码如下:PrivateSubDataSetupO'设置数据源:汽车类型AdodcType.ConnectionString=ConnAdodcType.RecordSource=”SELECT*FROMTypesWHERETypeid=lHSetdco_Type.RowSource=AdodcTypedco_Type.ListField="TypeName"dco_Type.BoundColumn="Id"'销售商名称AdodcSales.ConnectionString=ConnAdodcSales.RecordSource="SELECT*FROMCompanyWHERETypeid=lHSetdco_Sale.RowSource=AdodcSalesdco_Sale.ListField="Company"dco_Sale.BoundColumn="Id"'保险公司名称AdodcInsurance.ConnectionString=ConnAdodclnsurance.RecordSource="SELECT*FROMCompanyWHERETypeid=2HSetdco_Insu.RowSource=Adodclnsurancedco_Insu.ListField="Company"dco_Insu.BoundColumn=HIdnEndSub 1.Cmd_Select_Click过程当用户单击“选择”按钮时,触发Cmd_Select_Click事件,对应的代码下:PrivateSubCmd_Select_Click()FrmTypeSel.Show1'将选111的保险种类放入文本域txtlnsurType=Trim(slnsultems)Ilkeys=Trim(sInsuKeys)EndSub变量likeys用来保存保险种类的类型编号。3.8.2设计车辆管理模块窗体车辆管理窗休为FrmCar,窗体的布局如下图所示。图7~2窗体FrmCar的布局车辆管理窗体屮的饿“添加”、“删除”、“查询”和“退出”按钮的功能和实现方法,与销售商管理窗体的实现方式类似,这里主要介绍“修改”按钮的实现过程。当用户单击“修改”按钮时,触发Cmd_Modi_Click事件,对应的代码如F:'修改车辆信息PrivateSubCmd_Modi_Click()IfAdodcl.Recordset.EOF=TrueThenMsgBox”请选择记录,,ExitSubEndIf,将Modify变量设置为False,表示当而状态为编辑记录FrmCarEdit.Modify=True 初始化FrmCarEdit信息FrmCarEdit.sCarNo=Trim(Adodc1.Recordset.Fields(O)),车牌号FrmCarEdit.txtCarNo=Trim(Adodc1.Recordset.Fields(O))'显示车牌号IfMyCar.GetInfo(Trim(Adodc1.Recordset.Fields(O)))=TrueThen,读取车辆信息'汽车类型信息IfMyType.Getlnfo(MyCar.Typeld)=TrueThenElseFrmCarEdit.dco_Insu.Text=""EndIf'根据保险类型编号取得保险名称FrmCarEdit.txtlnsurTypeTrim(MyType.GetTypeNames(Trim(MyCar.InsurType)))'设置保险类型和编号公共变量slnsultems=Trim(MyType.GetTypeNames(Trim(MyCar.InsurType)))slnsuKeys=Trim(MyCa匚1nsurType)EndIfFrmCarEdit.txtCarNo.Enabled=False'编辑时车牌不允许更改FrmCarEdit.Show1'启动编辑窗体GridRefresh涮新DataGrid表格的内容EndSub修改车辆信息时需要从数据库屮多个表里读取相关信息,例如,从公司表Company中读取销售商和保险公司信息,从类型表Types中读取汽车类型和保险种类信息。程序中还要把选择的保险种类字段中的类型编号转换为保险种类名称,并且写入公共变量slnsultems和slnsuKeys小保存,否则当用户再次进入选择保险种类界面后,将无法显示已选择的数据。3.9客户会员管理模块设计客户会员管理中包含3个部分:1.客户管理:可以添加、修改、删除和查看客户记录,并口加入会员。 1.会员管理:可以修改、注销和查看会员记录。2.会员类型管理:可以添加、修改、删除和杳看会员类型记录。3.9.1设计客户会员信息编辑窗体客户会一员信息编辑窗体的名称为FrmCustomerEdit他的布局如卜•图图8-1窗体FrmCustomerEdit的布局在编辑客户信息的窗体屮,会员信息是隐藏的,只冇当客户加入会员时才显示。下而介绍窗体屮的主要代码。1.公共变量这里主要介绍IsMember变量,它用来判断客户是否为会员,代码如下:PublicIsMemberAsBoolean*是否为会员,true:是;false:否2.DataSetUp过程当窗体启动时,触发Form_Load过程,它将调用DataSetUp过程,载入会员信息,对应的代码如下:PrivateSubDataSetupOAdodc1.Connectionstring=Conn,设置数据库连接字符串Adodc1.RecordSource="SELECT*FROMMemberTypeORDERBYId"Adodcl.Refresh'设置数据源'设置显示字段'设置绑定字段Setdco_MemType.RowSource=Adodc1dco_MemType.ListField="TypeName"dco_MemType.BoundColumn="Id"EndSub3・dco_MemType_Click过程当用户单击“会员类型”下拉框时,触发dco_MemType_Click事件,代码如下:PrivateSubdco_MemType_Click(AreaAsInteger)'选择会员类别后,将折扣数据录入EndIf EndSub当用户选择了客户的会员类型,此会员类型对应的折扣信息同时显示出來。1.Cmd_OK_Click过程当用户单击“确定”按钮式,触发Cmd_OK_Click事件,代码如下:PrivateSubCmd_OK_Click()'检杳用户录入数据的有效性IfLen(Trim(txtId))=0ThenMsgBox(”请输入客户编号Jtxtld.SetFocusExitSubEndIfEndSub在保存数据时,需要检查主要域是否输入了信息。插入的信息只能是客户数据,而更新数据时才需要区分客户和会员。3.9.2设计客户信息管理对话框客户信息管理的名称为FrmCustomer,窗体布局如下图图8-2窗体FrmCustomer的布局用户可以按照客户姓名查找客户记录。下面介绍儿个主要的过程。1・Cmd」oinMember过程当用户单击“加入会员”按钮时,触发Cmd_JionMember事件,将客户信息重新读取到FrmCustomerEdit窗体屮,并将公共变量IsMember设置为True,表明当前用户为会员,同时显示会员信息。2.GridRefresh过程 GridRedfeshhL程根据指定的条件刷新DataGrid中的记录,代码如b:PrivateSubGridRefresh()IfLen(Trim(txtName))=0Then,客户名称为空SchCnd=nnElseSchCnd=nANDNameLike%’+Trim(txtName)+"%n,泼置查询条件EndIfAdodc1.ConnectionString=Conn,数据库连接字符串Adodcl.RecordSource="SELECTIdAS编号,NameAS姓名,SexAS性别,”-+"AgeAS年龄,LicenseNoAS驾驶证编号,DriverAgeAS驾龄,"—+"GetDateAS登记日期FROMCustomerWHEREFlag=()”_+SchCnd+”ORDERBYIdnAdodcl.RefreshEndSub程序使用Select语句从表Customer中读取种类编号为0的客户信息。3.9.3设计会员管理窗体会员管理窗体的名称为FrmMembers,窗体布局如下图:图8-3窗体FrmMembers的布局会员管理小显示的是表Customer中利啖编号为1的会员信息,用户可以重新修改客户信息,并可以注销客户的会员资格。当用户单击“注销会员”按钮时,触发Cmd_OffMember_Click事件,对应的代码如下:PrivateSubCmd_OffMember_Click() IfAdodc1.Recordset.EOF=TrueThenMsgBox”请选择记录”ExitSubEndIfIfMsgBox(H是否确定要注销会员资格",vbYesNo,”请确认”)=vbNoThenExitSubEndIf'更新记录MyCustomer.Typeld=0MyCustomer.UpdateToMember(Trim(Adodc1.Recordset.Fields(O))),刷新DataGrid表格的内容GridRefreshEndSub注销会员的过程就是将此客户的会员类型置为Oo3.9.4设计会员管理窗体会员类型编辑窗体为FrmMemberTypeEdit,窗体的布局如下图:图8-4窗体FrmMemberTypeEdit的布局3.9.5设计会员类型管理窗体会员类型管理窗体为FrmMemberType窗体的布局如下图 图8-5窗体FrmMemberType的布局显示小数时需耍转换数据库农MemberType中折扌II字段的格式,GridRefresh过程的代码如下:PrivateSubGridRefresh()'因为SQL执行是非同步的。查询比插入记录更快*CallSleep(600)*600就是0.6秒,以毫秒为单位Adodc1.ConnectionString=Conn,连接字符串Adodc1.RecordSource="SELECTIdAS编号,TypeNameAS会员类型,"_+TormatCRate/O.##*)AS折扣FROMMemberTypeORDERBYIdDESC“Adodc1.RefreshSetDataGridl.DataSource=Adodc1,数据源DataGridl.Columns(O).Width=1200DataGridl.Columns(l).Width=1600DataGridl.Columns(2).Width=1200EndSub3.10汽车租赁管理模块设计汽车租赁管理模块可以添加、修改、删除、审核和杳看汽车租赁信息,并可实现汽车续租,审核续租以及打印汽车租赁合同的功能。3.10.1设计编辑汽车租赁信息的窗体编辑汽车租赁信息窗体的名称为Frm1LeaseEdit,窗体布局如下图 图9-1窗体FrmLeaseEdit的布局表3-12窗体控件的属性表对象名属性属性值AdoCarNameAdoCar(作为车辆信息数据库)DataGrid1NameDataGrid1(用來显示车辆数据)AdoPriceNameAdoPrice(作为租金信息数据源)DataGrid2NameDataGrid1(用来显示车辆数据)AdoCustomerNameAdoPrice(作为租金信息数据源)DataGrid3NameDataGrid2(用来显示租金书据)AdoCustomerNameAdoCustomcr(作为客户信息数据源)DataGrid3CaptionDataGrid3(用来显示客户数据)Cmd_SearchCarCaption杏找Cmd_SchMemberCaption查找Cmd_OKCaption确定Cmd_CancelCaption取消下面介绍汽车租赁窗体中的主要代码。1.变量定义窗体中定义了5个变量,代码如下: PublicModifyAsBoolean'False:插入;true:修改PublicContractNoAsString'合同编号PublicsCarNoAsString,车牌号PublicsCustldAsString'客户编号PublicsLTimeAsString,租赁时间(小时、分钟和秒数)DimICostAsLong,总费用DimnCntAsInteger'I作R数量或周个数或月个数DimnECntAsInteger'周末个数变量Modif用来标记当前的数据库访问状态。当Modify=True时,表示修改已有的数据:当Modify=False时,表示插入新的数据。变量ContractNo用来标记当前租赁合同的编号。变量sCarNo用来标记租赁的汽车的车牌号。变量sCustld用来标记租赁客户的编号。变量sLTime用来标记租赁的时间。变量ICost用来标记没有折扣前的租赁的总费用。变量nCnt用来标记工作日数量或周个数或月个数。变量nEcnt用来标记日租赁模式下的周末个数。1.刷新数据过程窗体中包含3个数据源,分别提供3种不同的数据。过程CarRefresh.CarpriceRefresh和CustomerRefresh用来刷新表格中的数据。CarRefresh过程从表Cars和Types屮读取汽车基本信息数据。CarPriceRefresh过程从表Cars中读取汽车租赁价格数据。CustomerRefesh过程从表Customer和MembersTypes11〔读取客户基本信息数据。2.Cmd_SearchCar_Click过程当用户单击“杳找”按钮时,触发Cmd_SearchCar_Click事件,对应的代码如下:PrivateSubCmd_SearchCar_Click()'按照输入的车牌号,得到车辆信息IfLen(Trim(txtCarNo))=0ThenMsgBox(”请输入车牌号“)txtCarNo.SetFocusExitSubEndIf'判断是否存在此车牌号以及相关信息 EndSub要出租的汽车必须是处于待命状态的,所以程序小要判断数据库表Cars>|«是否存在次车牌号和状态值。如果找到了出租的车辆信息,需要在表格中显示当前的车辆信息和租赁价格。4・Cmd_SchMember_Click过程当用户单击“查找”按钮时,触发Cmd_SchMember_Click事件,对应的代码如K:PrivateSubCmd_SchMember_Click()'按照输入的客户号,得到客户信息IfLen(Trim(txtCustId))=0ThenMsgBox(”请输入客户号“)txtCustld.SetFocusExitSubEndIfEndSub5・cob_Mode_Click过程当用户更换租赁模式时,触发cob_Mode_Click过程,重新计算租赁总费用金额和归述时间。表3-13按租赁模式计算费用和时间表赁模模式对应控件控件属性属性值说明按口txtWorkDaysName工作H个数按口Label13Caption工作日按口txtWcckEndCountName周末个数按日txtWeekEndCountCaptionTrue按日Label19EnabledTrue按FILabel20EnabledTrue按周txtWorkDaysName周个数按周Label13Caption周数按周xtWeekEndCountEnableFlase按周Label19EnableFlase按周Label20CaptionFlase按月txtWorkDaysName月个数赁模模式对应控件控件属性属性值说明按月Label13Caption刀份数 按月xtWeekEndCountEnableFlase按月Label19EnableFlasc按月Label20EnableFlase6.txtWeekEndCount_Change()过程当用户更改txtWeekEndCount文本框小的内容时,触发txtWeekEndCount_ChngexL程。此文木框只是在租赁模式为按口时才有效,所以在程序小需要同时更改按日租赁时的租赁费用和归述时间,对应代码如下:PrivateSubtxtWeekEndCount_Change()IfsCarNo=””OrsCustld=,u,ThenMsgBox(”请先选择车辆和客户信息“)ExitSubEndIf'更改时间同时计算租车的总费用,查看租赁模式,如果为日,则按天价格计算总费用,否则不变nCnt=Val(txtWorkDays)nECnt=Val(txtWeekEndCount)IfTrim(cob_Mode.Text)二”日”ThenlCost=Val(AdoPrice.Recordset.Fields(l))*nCnt+Val(AdoPrice.Recordset.Fields(2))*nECnttxtReturnTime=Trim(DateAdd(ndH,nCnt+nECnt*2,CDate(txtLeaseTime)))EndIf'总体消费金额述要乘以折扣,不是会员只能乘以1txtCost=ICost*Val(AdoCustomer.Recordset.Fields(5))EndSub7.txtWorkDays_Change过程当用户更改txtWorkDays文本框屮的内容时,触发txtWorkDays_Changes过程。此时需要根据租赁模式重新计算租赁总费用和归还时间。PrivateSubtxtWorkDays_Change()IfsCarNo二””OrsCustld=ThenMsgBox(”请先选择车辆和客户信息“)ExitSubEndIf nCnt=Val(txtWorkDays),租赁的工作日个数或周个数或月个数nECnt=Val(txtWeekEndCount),租赁的周末个数IfTrim(cob_Mode.Text)二”日”Then'总费用二工作□租赁价格*工作日个数+周末租金*周末个数lCost=Val(AdoPrice.Recordset.Fields(l))*nCnt4-Val(AdoPrice.Recordset.Fields(2))*nECnt'以□为单位将工作日+周末个数*2二天数添加到租赁日期而计算返回时间txtReturnTime^rimCDateAddC'd'^nCnt+nECnt*2,CDate(txtLeaseTime)))ElselfTrim(cob_Mode.Text)=”周”Then'总费用二周租金*周数ICost=Val(AdoPrice.Recordset.Fields(3))*nCnt'以日为单位将周个数*7二天数添加到租赁日期而计算返回时间txtReturnTime=Trim(DateAdd(nd",nCnt*7,CDate(txtLeaseTime)))ElselfTrim(cob_Mode.Text)二”月”Then'总费用二月租金*月个数ICost=Val(AdoPrice.Recordset.Fields(4))*nCnt'以月为单位将月个数添加到租赁H期而计算返回时间txtReturnTime=Trim(DateAdd(,'mn,nCnt,CDate(txtLeaseTime)))EndIf'总体消费金额还要乘以折扣,不是会员只能乘以1txtCost=ICost*Val(AdoCustomer.Recordset.Fields(5))EndSub8・Cmd_OK_Click过程当用户单击“确定”按钮时,触发CnKLOk_Click过程,在此过程中耍执行的操作如下:验证指定的域中输入的内容是否满足要求。判断当租赁模式为按日租赁时是否输入了租赁工作日或周末个数,当按周或按月租赁时是否输入了周个数后月个数。如果要插入新纪录,则需要判断输入的合同编号是否重复。保存数据时,按照租赁模式将租赁价格(工作日、周和月租金)和租赁天和月数存入表Lease和WordDays字段屮,血周末租金价格和个数存入Price2heWeekEndCount字段〔11。 对应的代码如门PrivateSubCmd_OK_Click()'域校验过程,验证合同编号、车牌号、客户号、租赁模式、租赁时间是否输入正确IfLen(Trim(txtContractNo))=0ThenMsgBoxC请输入合同编号JtxtContractNo.SetFocusExitSubEndIfEndSub3.10.2设计编辑汽车续租信息的窗体编辑汽车续租信息窗体的名称为FrmLeaseAddEdit,窗体布局如图图9-2窗体FrmLeaseAddEdit的布局在车辆的续租过程中,续租的各种价格继续使用租赁时的价格,不能更改,租赁模式也不允许更改,如果要更改租赁模式,只能归还车辆后重新办理租赁手续。在续租中,只允许更改租赁的Fl(周、月)数,同时系统自动重新计算租赁总费用和应归还时间。3.10.3设计汽车租赁管理窗体汽车租赁管理窗体的名称为FrmLease,窗体的布局如下图: 图9~3窗体FrmLease的彳j局下而介绍窗体FrmLease小的主要代码。1・GridRefresh过程GridRefresh过程用来更新ADOData控件的记录源,从血更新DataGrid控件中显示的内容。窗体FrmLease中提取的租赁记录是数据库表Lease中状态值不等于“归述”和“结算审核“的数据。GridRefreshid程的代码如门PrivateSubGridRefresh()'按照选择的租赁状态查找记录IfTrim(cob_Status.Text)=OrTrim(cob_Status.Text)=”全部"ThenSchCnd=nnElseSchCnd二=HANDStatus』”+Trim(cob_Status.Text)+nn,EndIfAdodc1.ConnectionString=Conn,设置连接字符串Adodc1.RecordSource="SELECTContractNoAS合同编号,CarNoAS车牌号EndSub2.Form_Load过程当窗体Form_Load被加载时,触发Form_Load过程,对应代码如H;PrivateSubForm_Load()GridRefresh,刷新数据'加载状态名称EndSub3.DataGrid1_RowcolChange过程当用户单击DataGrid表格屮记录时,触发DataGridl_RowColChange事件, 根据租赁记录的状态判断按钮是否可用,具体说明如下表:表3-14窗体FrmLease中包含的部分按钮设置记录状态修改删除和•赁审核续租续租审核打印合同出租可用可用可用不可用不可用不可用出租审核不可用不可用不可用可用不可用可用续租不可用不可用不可用可用可用不可用续租审核不可用不可用不可用可用不可用可用归还不可用不可用不可用不可用不可用不可用归还审核不可用不可用不可用不可用不可用可用2.Cmd_Add_Click过程当用户单击“添加“按钮时,触发Cmd_Add_Click事件,过程执行了下面儿个操作:将汽车租赁编辑窗体中部分参数置空,例如车牌号、客户编号等。将汽车租赁编辑窗体中部分文木框置空或者0.将当前时间设置为租赁时间,并传递到汽车租赁编辑窗体中,为归还时间提供参考。将汽车租赁编辑窗体中部分文本框为不可用,例如工作日个数文本域。刷新汽车租赁编辑窗体中的表格数据。5・Cmd_Cont_Click过程当用户单击“续租“按钮时,触发Cmd_Cont_Click事件,载入汽车续租编辑窗体FrmLeaseAddEdit,并限定在汽车续租是合同编号不允许更改。对应代码如下:PrivateSubCmd_Cont_Click()IfAdodcl.Recordset.EOF=TrueThenMsgBox”请选择记录”ExitSubEndIf'只有在出租审核后才可以续租FrmLeaseAddEdit.sContractNo=Trim(Adodc1.Recordset.Fields(O))1合同编号FrmLeaseAddEdit.txtContractNo=Trim(Adodc1.Recordset.Fields(O))*合同编号'根据合同编号提取所有租赁信息IfMyLease.GetInfo(Trim(Adodc1.Recordset.Fields(O)))=TrueThen EndIfEndIf'根据车牌号码提取车辆信息FrmLeaseAddEdit.CarRefresh'根据客户号提取客户信息FrmLeaseAddEdit.CustomerRefresh'修改时不能更改合同编号FrmLeaseAddEdit.txtContractNo.Enabled=FalseFrmLeaseAddEdit.Show1GridRefreshEndSub6.审核过程当用户单击“租赁审核“或”续租审核“按钮时,将更改租赁记录的状态值,并且不能在编辑租赁记录。租赁审核过程对应的代码如2PrivateSubCmd_ContCheck_Click()IfAdodcl.Recordset.EOFThenMsgBox(”请选择记录”)ExitSubEndIfIfMsgBox(H是否审核确认了续租合同n,vbYesNo,”请确认”)=vbNoThenExitSubEndIfWithMyLease.Status二”续租审核”.UpdateStatus(Trim(Adodc1.Recordset.Fields(O)))EndWithGridRefresh,更改记录状态EndSub7・Cmd_Print_Click过程当用户单击“打印合同“按钮时,触发Cmd_Print_Click事件,此过程将启动Word应用程序,把合同数据输入懂啊同一口录下的文档Contract.doc部分代码如下:PrivateSubCmd_Print_C1ick() IfAdodcl.Recordset.EOF=TrueThenMsgBox”请选择打印的合同“ExitSubEndIf按照指定格式打印合同文档Contract.docwordfile="Contract.doc",文档名称IfDir(wordfile)=,M,Then学lj断文件是否存在MsgBox”打印文件Contract.doc丢失,请与管理员联系”ExitSubEndIf'启动应用程序Setwdoc=CreateObject("Word.Application")wdoc.Visible=True,打印过程可见,打开Contract.doc文件Callwdoc.Documents.Open(App.Path+"V+wordfile,ReadOnly:=True,Revert:=True)'定义第一个表格对象Setmytable=wdoc.ActiveDocumenLTables(1)"读取租赁信息MyLease.Getlnfo(Trim(Adodc1.Recordset.Fields(O)))'读写合同编号mytable.Cell(25l).Range.Deletemytable.Cell(2,1).Range.lnsertAfteru:"+Trim(Adodc1.Recordset.Fields(O))'合同打印时间mytable.Cell(2,2).Range.Deletemytable.Cell(2,2).Range.InsertAfter"打印时间:"+Trim(Str(Now))'合同甲方mytable.Cell(3,2).Range.Deletemytable.Cell(3,2).Range.lnsertAfter”汽车租赁公司”'打印合同文档wdoc.ActiveDocument.PrintOutMsgBox-打印作业已提交,打印完成后按确定结束“wdoc.Quit(0),退出Word Setwdoc=Nothing清空内存EndSub只有经过审核后的合同才可以打印。3.11汽车归还管理模块设计汽车归还管理模块对出租审核和续租审核后的租赁信息办理归还和归还审核手续。3.11.1设计编辑汽车归还信息的窗体编辑汽车归还信息窗体的名称为FrmReturnEdit,窗体布局如图所示图10-1窗体FrmReturnEdit的布局下面介绍汽车介绍汽车归还窗体中的主要代码。1.Cmd_SchContract_Click过程当用户单击“查找"按钮时,触发Cmd_SchContract_Click事件,执行过程如下:判断是否输入了租赁合同编号。判断是否存在此合同编号的租赁信息。判断此租赁合同是否已经审核,只能归述审核后的租赁合同。IfInStr(Trim(MyLease.Status),”审核”)<=0ThenMsgBox("合同必须审核了才可以办理归述结算手续“)ExitSub EndIf读取租赁数据放入指定文木域,设置实际归还时间为当前时间。和应归述时间比较,计算超时的小时个数,从而得到超时费用,如果没有超时费用为0,代码如2nDiff=DateDiff(nhH,CDate(Trim(txtRetumTime)),CDate(Trim(txtRealRTime)))'如果没有超时,则超时费用为0IfnDiff<=0ThentxtOTCost=0ElsetxtOTCost=Val(txtOTPrice)*nDiff超时费二超时价格*超时小时数EndIf按照租赁模式设置标签显示文字信息、文木框中的数据,并重新计算租赁费用,并计算租赁费用,代码如下:IfTrim(MyLease.LeaseMode)="□"ThentxtWorkDays=MyLease.WorkDaystxtWeekEndCount=MyLease.WeekEndCountLabel13.Caption=”工作FTtxtCost=MyLease.WorkDays*MyLease.Pricel+MyLease.WorkDaysEndIf计算合同的总费用,包括租赁费用、超时费用和其他费用。对代码如下:txtTotal=(Val(txtCost)+Val(txtOTCost)+Val(txtOKMCost))*Val(txtRate)/10+Val(txtOtherCost)计算应付费用,等于总费用减去已付押金金额。对应代码如下:txtRealPay=Val(txtTotal)・Val(txtDeposit)按照提供的客户编号和车牌号刷新数据记录,代码如2'根据车牌号码提取车辆信息CarRefresh'根据客户号提取客户信息CustomerRefresh查找合同信息的其他代码请根据注释理解。2.txtOtherCost_Change过程当用户更改其他费用金额是,触发txtOtherCost_Change事件,更改和同总 费用值和应付金额,对应的代码如下:PrivateSubtxtOtherCost_Change()'更改费用总额txtTotal=(Val(txtCost)+Val(txtOTCost)+Val(txtOKMCost))*Val(txtRate)/10+Val(txtOtherCost)txtRealPay=Val(txtTotal)-Val(txtDeposit)EndSub2.txtRealRTime_LostFocus过程当用户修改了实际归述时间,并失去焦点时,将触发txtRealRTime.LostFocus事件,重新计算应归还时间的差值,并更改超时费用值、总费用金额和应付金额,对应的代码如下:PrivateSubtxtRealRTime_LostFocus()'更改实际归述时间后重新计算超时小时nDiff=DateDiff("hn,CDate(Trim(txtRetumTime)),CDate(Trim(txtRealRTime)))'如果小时数为负数,则超时费用为0'只有租车费用上乘以折扣,其他费用不乘以折扣txtTotal=(Val(txtCost)+Val(txtOTCost)+Val(txtOKMCost))*Val(txtRate)/10+Val(txtOtherCost)txtRealPay=Val(txtTotal)・Val(txtDeposit)EndSub3.txtReturnKM_Change过程当用户更改返回公里数时,触发txtReturnKM_Change事件,需要计算的项口如下:实际租赁天数二实际归还时间■开始租赁时间。规定可使用的最大公里数二实际租赁天数*H限天数。实际使用公里数二归还时公里数■出车时公里数。超公里数二实际使用公里数■规定可使用的最大公里数。对应代码如卜‘:PrivateSubtxtReturnKM_Change()'计算超公里数和超公里费用'计算日期相茅的天数DimnDAsInteger DimnLAsLong'规定公里总数DimnRAsLong「实际归述的公里数nD=DateDiffC'd'*,CDate(Trim(txtLeaseTime)),CDate(Trim(txtRealRTime)))'实际归述的公里数和规定公里数nL=Val(txtDayKM)*nDnR=Val(txtReturnKM)-Val(txtOutKM)IfnR>nLThentxtOKMCost=Val(txtOKMPrice)*(nR・nL)ElsetxtOKMCost=0EndIf'更改费用总额txtTotal=(Val(txtCost)+Val(txtOTCost)+Val(txtOKMCost))*Val(txtRate)/10+Val(txtOtherCost)txtRealPay=Val(txtTotal)-Val(txtDeposit)EndSub3.11.2设计汽车归还管理窗体汽车归还管理窗体的名称为FrmReturn,窗体的布局如下图:图10-2窗体FrmReturn的布局下面介绍窗体FrmReturn中的主耍代码.1・Form_Load过程当窗体载入吋,触发Form_Load事件,对应的代码如下:PrivateSubForm_Load()GridRefresh,刷新数据 '加载状态名称cob.Status.Addltem”出租”,0cob_Status.AddItem”出租审核”,1cob_Status.Additem"续租”,2cob_Status.AddItem”续租审核”,3cob_Status.Additem"归还”,4cob_Status.Additem"归还审核”,5'设置部分按钮不可用EndSub2.DataGrid1_RowColChange过程当用户选择DataGrid表格中的数据记录是,触发DataGrid1_RowColChange事件,对应的代码如下:PrivateSubDataGridl_RowColChange(LastRowAsVariant,ByVaiLastColAsInteger)IfTrim(Adodc1.Recordset.Fields(6))二”出租”ThenElselfTrim(Adodc1.Recordset.Fields(6))二“出租审核”ThenEndSub按照用户选择的记录的状态值判断按钮是否可用。3.Cmd_Return_Click过程当用户选择“归述“按钮时,触发Cmd_Return_Click事件。4・Cmd_Modi_Click过程当用户选择“修改“按钮时,触发Cmd_Modi_Click事件,这里需要计算超时费用、超公里费用、合同总费用金额以及应付金额,此时合同编号不允许更改,”查找“按钮不可用。5・Cmd_RntCheck_Click过程当用户选择“归述审核“按钮时,触发Cmd_RntCheck_Click事件3.12用户管理模块设计汽车租赁管理系统中用户管理模块的功能很简单,只有系统管理员一种用户。系统管理员可以可以添加、删除和查看用户名信息,并修改口己的用户密码。3.12.1用户管理模块设计编辑用户信息的窗体可以用來添加和修改用户信息,窗体名称为FrmUserEdit,ffl体布局如下图 图11T窗体FrmUserEdit的布局当用户单击“确定“按钮时,触发Cmd_OK_Click事件,对应的代码如下:PrivateSubCmd_OK_Click()IfTrim(txtUserName)="”ThenMsgBox”请输入用户名”txtUserName.SetFocusExitSubEndIfEndIfWithMyUserIfModify=FalseOrOriUser<>Trim(txtUserName)ThenEndIf.UserName=MakeStr(txtUserName).UserPwd=MakeStr(txtPass)IfModify=FalseThen.InsertMsgBox”添加完成”Else・Update(OriUser)MsgBox“修改完成”EndIfEndWithUnloadMeEndSub程序将判断用户名是否已经存在,密码和确认密码是否相同、以及密码长度 是否大于或等于6等。如果输入的数据完全满足条件,则保存到数据库小。3.12.2设计用户管理窗体用户管理窗休的名称为FrmUserMan,窗休的布局如图11~2下面介绍窗体FrmUserMan中的主要代码。1・DataRefresh过程当装入窗体时,调用DataRefresh事件,代码如下:PrivateSubDataRefresh()AdoUserList.ConnectionString=Conn喽攵据库连接字符串AdoUserList.RecordSource="SELECT*FROMUsers"AdoUserList.RefreshSetDataListl.RowSource=AdoUserList"设置数据源DataList1.ListField="UserName"'显示字段DataListl.BoundColumn=”UserName”,设置绑定字段EndSub2・Cmd_Del_Click过程当用户单击“删除“按钮时,触发Cnid_Del_Click事件,代码如下:PrivateSubCmd_Del_Click()IfDataListl.Text二””ThenMsgBox”请选择要删除的用户“ExitSubEndIfIfMyUser.UserName="Admin"ThenMsgBox”此用户不能删除”ExitSubEndIf'确认删除IfMsgBox(”是否删除当前用户u,vbYesNo,”请确认”)=vbYesThenMyUser.Delete(DataListl.Text)MsgBox”成功删除”DataRefreshEndIf EndSub不允许删除Adimn用户。图11・2窗体FrmUserMan的彳j局A->r弟系统测试在开发大型软件系统的漫长过程中,面对着极其错综复杂的问题,人的主观认识不可能完全符合客观现实,与项目密切相关的各类人员之间的通信和配合也不可能完美无缺,因此,在软件生命周期的每个阶段都不可避免的会产生茅错。我们力求在每个阶段结束之前通过严格的技术审查,尽可能早的发现并纠正错谋,但是,经验表明审杳并不能发现所有错谋。此外,在编码过程中还不可避免的会引入新的错误。如果在软件投入生产性运行之前,没冇发现并纠正软件中的大部分弟错,则这些差错迟早会在生产过程中暴露出来,那时不仅改正这些错误的代价更高,而且往往会造成很恶劣的后果。测试的目的就是在软件投入生产性运行Z前,尽可能多地发现软件中的错谋。冃前软件测试仍然是保证软件质量的关键步骤,它是对软件规格说明、设计和编码的最后复审。4.1测试原则、目标及方法4.1.1测试原则1.测试工作应避免有原开发软件的个人或者小组承担。所谓“当局者迷”,从心理上讲,软件开发人员对自己的成果有所偏爱,有-•种不愿意否定自己成果的心理,另一方面,如果开发人员对软件的功能冇理解性错误,由本人去找不容易找出错误。2.设计测试方案时,不仅要包括确定的输入数据,而且应包括从系统功能出发预期的测试结果。3.测试用例不仅要包括合理、有效的输入数据,还要包括无效的或不合理的输入数据。4.软件中仍存在错误的概率和已经发生的错误的个数是成止比的。 4.1.2测试目标1.尽可能的查找出系统所包含的错误并修改Z。2•让系统减少错误的发生,在使用的过程中方便、精确、可靠。4.1.3测试方法怎样对程序进行测试呢?测试任何产品都有两种方法:如果已经知道了产品应该具冇的功能,可以通过测试來检验是否每个功能都能正常使用;如果知道产品内部工作过程,叮以通过测试来检验产品内部动作是否按照规格说明书的规定正常进行。前一个方法称为黑盒测试,后一个方法称为白盒测试。此系统用黑盒测试的方法。4.2测试内容4.2.1系统功能测试1.类型模块的增加测试在程序菜单栏屮依次选择“类型管理”一“汽车类型”-“添加”就会弹出摆弄及分类信息窗II,在模块的编辑框中直接添加信息,但是如果框中信息为空将会弹出信息提示说明“请输入分类名称”弹出图5-1。完成添加操作。图4-1弹岀提示2.会员信息管理的测试 在程序菜单栏小选择“客户会员管理”一“客户信息管理“,就会弹出”客户管理“对话框,然后单击“添加”按钮就会弹出图5-2o图4-2客户信息添加1.已经审核订单进行续租测试在程序菜单栏屮选择“汽车租赁”—“汽车出租管理”一“续租“,如果在窗格中选择一项记录是经过审核的,然后单击“续租”按钮就会弹出图4-3。图4-3续租编辑显不2.汽车续租管理模块的测试 在程序菜单栏小依次选择“汽车租赁”一“汽车出租管理”一“续租”,就会弹出汽车类型窗口,如图4—3,当单击“续租审核”按钮时,该窗体就变为图4-4,完成添加操作。图4-4汽车续租审核1.汽车归还结算模块的测试在程序菜单栏屮依次选择“汽车归述”一“归还”,用户在合同编号输入框中指定一个合同号,然后单击“归还”按钮,就弹出了如图4—5对话框,单击是按钮即可完成订单的审核。图4-5汽车归还2.退岀测试在程序菜单栏屮选择“退出”按钮,则系统自动关闭。 第五章系统使用说明书5.1系统登录(1)双击桌面上汽车租赁管理信息系统.exe文件,弹出系统登录界面,在“用户名”处输入“ghx”,在“密码”处输入“123456”,如图5-1所示。图5-1登录界面(2)单击“确定”按钮,即可以该操作员的身份进入运输公司管理系统,主界面如图5-2所示。图5-2汽车租赁管理系统主界面 5.2系统功能运输公司管理系统前台了系统主要包扌舌“基木信息管理”、“销售商管理”、“保险公司管理”、“客户信息管理”等功能。5.2.1基本信息管理选择菜单栏中的“基本信息管理”,弹出下拉菜单,包括类型管理子菜单。如图5-3所示。此模块主要用于汽车类型、保险类型、会员信息的增、删、改以及查询工作。客基本信息管理G)类型管理销售商管理保险公司管理车辆管理退出系统四汽车出現业务管图5-3基本信息管理5.2.2公司车辆信息查询选择工具栏屮的“销售商管理”,显示窗口,如图6-4所示。该模块的主要作用是对公司车辆信息进行查询,以便用户对这些信息根据自己的需求做进一步处理。 图5-4车辆信息查询 5.2.3出租汽车查询选择菜单栏中的“汽车租赁”一“租赁状态”,弹出下拉菜单,包括出租、岀租审核、续租、续租审核、归还、归还审核。如图5-5所示。该模块的主要作用是浏览和查询车辆信息,并以Excel表格的形式显示出來,已便浏览和综合把握。1汽车岀租管理租贷状态全部2dL合同編号Ltl租审核►S009续租?cl23续租申孩归还归还审核5S0053S004S001京AS11UC001S002京asllllcOOl图6-5汽车出租报表在选择某一个子菜单后,则弹出相应的窗口,供用户进行不同的操作。5.2.4用户信息查询选择工具栏中的“系统用户管理”,弹出窗口,如图6-6所示。此模块的主要作用是对系统用户信息查询、修改。图6-6用户信息查询窗口5.2.5退岀系统在菜单栏屮选择“退出”,则自动关闭本系统。 第六章总结此系统经过一系列的针对性的测试,对于各种非法数据输入,系统都给出了错误的窗口警告,提示用户使用正确的数据进行输入操作,从而使用户的操作符合要求,以免产生错误,造成利益损失。同时,此系统的系统逻辑功能较好,新添加、删除或修改的合法数据能够做到真正的实现,查询结果能正确的统计出来,而且能够有选择的进行打印。在涉及到数据的计算时能够和人工计算结果做到一致、统一,能够进行简捷、方便的操作。在整个系统测试的过程中,比较顺利,口结果正确,但由于时间紧张,所以在进行测试的过程屮,只能证明这个系统的功能是比较完备的,系统性是比较完全的,并不能完全证明程序的动态特性是否符合要求。所以在本系统的测试过程屮,也可能会有不合理或不全面的测试结果出现,还请谅解。事实上,系统要进行t期的、不断的测试才能不断的发现新问题并将其解决。所以在今后的使用过程屮,应该不断的修改和进行长期不间断的维护,才可以使系统发挥更好的功效,并t期不会因为功能不完善而被淘汰。系统的维护主要分为纠错性维护、适应性维护、完善性维护和预防性维护。纠正性维护是由于系统测试不可能揭露系统中存在的所有错误,所以当系统运行到一定吋期后会暴露出系统内隐藏的错误,这吋候要及吋纠正。适应性维护是指为了使系统更好的适应环境的变化而进行的维护工作,一方面由于计算机技术的飞速发展,原来的系统不能适应新的软硬件,另一方面,应用的对象也在不断的发生变化,将导致系统不能适应新的应用环境,因此,有必要对系统进行调整,以保证系统吋吋都能满足用户的要求。完善性维护要根据用户不断提出的新要求来不断扩充原有的系统功能。预防性维护是指把维护工作由被动变主动,来延长系统的使用寿命。据统计,完善性维护占所有维护工作总数的50%左右,可见,系统维护工作中,一半以上的工作是对系统的完善。由于吋间仓促,木系统还有很多待于完善的地方,还有-•些其它未发现的问题只能靠用户在使用中不断的发现与改善,望请谅解。参考文献[1]张徳强.VisualBasic案例开发[M]・北京:中国水利水电出版社,2005.50-85.[2]刘瑞新.VisualBasic程序设计教程[M].北京:电子工业出版社,2002.1-30.[3]季海娟.VisualBasic基础教程[M].北京:清华大学出版社,2005.1-50.[4]王福成.VisualBasic数据库开发指南[M]・北京:清华大学出版社,2004.25-78.[5]董国平,颜志军,万丽.VisualBasic数据库开发[M].北京:电子工业出版社,2006.12-55.[6]陈明.软件工程学教程[M].北京:科学出版社,2002.20-53.⑺陈松乔,任胜兵,王国军•现代软件工程[M].北京:清华大学出版社,2004.92-125.[8]良松,刘海岩,陆丽娜.软件工程[M].西安:西安电子科技大学出版社,2004.83-93.[9侏昆,李严.SQLServer数据库开发实例解析[M].北京:机械工业出版社,2006.12-15. [10]师煩.数据库系统概论[M]・北京:高等教育出版社,2000.22-23.[11]于红光.VisualBasic程序设计教程[M]・上海:上海交通大学出版社,2006.44-90.[12]姜继红.Access2003中文版实用教程[M].北京:人民邮电出版社,2010.10-30.[13]杨志姝,李光海.SQL应用与开发[M].北京:清华大学出版社,2006.23-76.[14]朱子江.Access2003数据库应用技术[M]・北京:水利水电出版社,2006.45-60.[⑸刘佳.Access2003数据库实例教程[M]・北京:机械工业出版社,2008.55-67. 附录PrivateSubGridRefresh()IfLen(Trim(txtName))=0ThenSchCnd=,n,ElseSchCnd=nANDNameLike+Trim(txtName)+EndIfAdodc1.ConnectionString=ConnAdodcl.RecordSource=''SELECTIdAS编号,NameAS姓名,SexAS性别,“_+"AgeAS年龄,LicenseNoAS驾驶证编号,DriverAgeAS驾龄,”—+"GetDateAS登记日期FROMCustomerWHEREFlag=0"_+SchCnd+”ORDERBYId”Adodc1.RefreshSetDataGridl.DataSource=AdodclDataGrid1.Columns(O).Width=800DataGrid1.Columns(1).Width=1200DataGrid1.Columns(2).Width=800DataGrid1.Columns(3).Width=800DataGridl.Columns(4).Width=1200DataGrid1.Columns(5).Width=800DataGridl.Columns(6).Width=1200EndSubPrivateSubCmd_Exit_Click()UnloadMeEndSubPrivateSubCmd_OffMember_Click()IfAdodc1.Recordset.EOF=TrueThenMsgBox”请选择记录”ExitSubEndIfIfMsgBox("是否确定要注销会员资格",vbYesNo,”请确认”)二vbNoThenExitSub EndIfMyCustomer.Typeld=0MyCustomer.UpdateToMember(Trim(Adodc1.Recordset.Fields(O)))MsgBox”注销会员成功",vblnformationGridRefreshEndSubPrivateSubCmd_Modi_Click()IfAdodc1.Recordset.EOF=TrueThenMsgBox”请选择记录”ExitSubEndIfFrmCustomerEdit.Modify=TrueFrmCustomerEdit.IsMember=TrueIfMyCustomer.GetInfo(Trim(Adodc1.Recordset.Fields(O)))=TrueThenFrmCustomerEdit.Orild=Trim(Adodc1.Recordset.Fields(O))FrmCustomerEdit.txtld=Trim(Adodc1.Recordset.Fields(O))FrmCustomerEdit.txtName=Trim(MyCustome匚Name)FrmCustomerEdit.cob_Sex.Text=Trim(MyCustomer.Sex)FrmCustomerEdit.txtAge=Val(MyCustomer.Age)FrmCustomerEdit.txtldCard=Trim(MyCustomer.IdCard)FrmCustomerEdit.txtTelephone=Trim(MyCustome匸Telephone)FrmCustomerEdit.txtWorkPlace=Trim(MyCustomeEWorkplace)FrmCustomerEdit.txtZipCode=Trim(MyCustome匚ZipCode)FrmCustomerEdit.txtAddress=Trim(MyCustome匚Address)FrmCustomerEdit.txtEmail=Trim(MyCustome匚Email)FrmCustomerEdit.txtLNo=Trim(MyCustome匚LicenseNo)FrmCustomerEdit.cob_LType.Text=Trim(MyCustomer.LicenseType)FrmCustomerEdit.txtDriverAge=Val(MyCustomeEDriverAge)FrmCustomerEdit.txtGetDate=Trim(MyCustomer.GetDate)FrmCustomerEdit.txtExpiredDate=Trim(MyCustomer.ExpiredDate)FrmCustomerEdit.Frame3.Visible=TrueFrmCustomerEdit.dco_MemType.BoundText=Val(MyCustomer.Typeld)FrmCustomerEdit.cob_Cert.Text=Trim(MyCustome「Certificate)FrmCustomerEdit.txtWName=Trim(MyCustomer.Warrantor)FrmCustomerEdit.txtWIdCard=Trim(MyCustomer.WIdCard)FrmCustomerEdit.txtWWorkPlace=Trim(MyCustomer.WWorkPlace)If MyMemberType.Getlnfo(MyCustomer.Typeld)=TrueThenFrmCustomerEdit.txtRate=Format(MyMemberType.Rate,"O.##")EndIfEndIfFrmCustomerEdit.Show1GridRefreshEndSubPrivateSubCmd_Search_Click()GridRefreshEndSubPrivateSubForm_Load()GridRefreshEndSubPublicFunctionExecSql(strSqlAsString)AsADODB.Recordset 外文资料ViewsourceforDevelopment:SettingupEclipse[http://www.eclipse.org/]isanIDEoriginallydesignedforJava,butnowwithpluginsformanylanguagesincludingPHRIthaslotsofverypowerfulfeatures,anditistheeditorthatsomeMoodledevelopersliketouse.Other(more)popularchoicesarevimandemacs.However,Eclipseisnottheeasiestprogramintheworldtogetstartedwith,soFmgoingtotakeyouthroughitstepbystep.TheseinstructionsassumeEclipse3.2,thecurrentversionatthetimeofwriting.Itshouldnotchangemuchbetweenreleases.Thisarticlestartedoffasabrain-dumpby[[User:TimHuntlTimHunt]].Sincethen,severalotherpeoplehaveworkedthroughitandmadecorrections,sotheinformationhereshouldbeprettyaccurate.Sincethispagewaswritten,Eclipse3.3and3.4havebeenrelease,alongwithanewPHPplugincalledPDT,whichisbetter,butusesmorememory.Youcandownloadanall-in-oneEclipse+PDTfromhttp://www.eclipse.org/pdt/•Thefollowinginstructions,fromthesection[[#SettingthepreferencesforMoodledevelopment]]mostlystillapplyafteryouhavedonetheinstall,butsomeofthedetailsareabitdifferent.—[[User:TimHuntITimHunt]]07:30,31January2009(CST)==Prerequisites==EclipseiswritteninJava,soIrecommendgettingthelatestJavaruntimeenvironmentfromhttp://java.com/formaximumspeedandreliability.Eclipseisquitebig,soIrecommendlotsofmemoryinyourcomputer.IhaveuseditonWindows,MacOSXandLinux,ineachcasewith1GBofmemory,andthatisplenty.==InstallingEclipse==Gotohttp://www.eclipse.org/downloads/•Clickonthelinkcorrespondingtoyouroperatingsystemwhereitsays"'EclipseClassic”'•ChooseaMirror,andwaitforthe〜100MBdownload.Youwillnoticethatwhatyouhavegotisazipfile(unlessyoursystemautomaticallydecompressesitforyou).OnWindows,unzipitintoH,C:ProgramFiles"*(allthefilesgointoan"’Eclipse”'folderthere)•ThenlookintheEclipsefolderanddragEclipse.exetotheStartmenu/Desktop/Quicklaunchbartomakeashortcutforstartingit-OnMacOS,unzipandcopytheEclipsefolderintoApplications.GointotheEclipsefolderanddragtheEclipseapptotheDockforeaseoflaunching. OnLinux,unzipsomewheresuitable,andmakeaneasywaytolaunchit.==ThefirsttimeyourunEclipse==ThefirsttimeyoulaunchEclipseitdoesabitofsetupstuff,forinstance,itcreatesan,workspacetn.Thisiswhereitstoresthethingsyouareworkingon.Thedefaultlocationissensibleonallplatforms,sousethat.Forsomereason,everytimeyoustartEclipse,itasksyouwhichworkspaceyouwanttouse.Ihaveneverseentheneedtohavemorethanone,soIrecommendturningonthecheckboxthatsays"Usethisasthedefaultanddonotaskagain11.AnotherthingthathappensthefirsttimeyourunEclipseisthatyouarriveatawelcomescreen.Thishaslinkstovariousbitsofhelp,whichyoucanreadifyoulike,butyouprobablydonftneedtoifyouarefollowingtheseinstructions.SofindthebuttononthewelcomepagethatclosesitandgetsyoutothemainEclipsescreen.==Installingthenecessaryplugins==Bydefault,EclipsecomeswiththeJavatools.Foreverythingelseyouwillneedtoinstallsomeplugins.Ifyouaresittingbehindawebproxy,fromthe"'Window®menuchoose"'PreferencesChoosefnInstall/Update,nfromthetreeviewontheleft,andentertheproxyinformationintheboxesontheright.Ifyouaren'tbehindaproxy,ignorethisstep.(OnEclipse3.4.0onOSXthisisin"Eclipse>Preferences>General>NetworkConnections^)Fromthe,nHelp,nmenuchoose"SoftwareUpdates->FindandInstall111.Onthefirstscreenofthewizard,makesurethat"Searchfornewfeaturestoinstall"isselected,thenclick"'Next>*".Thenextscreenisalistofupgradesitestocheck・Youneedtoaddonetothelist,soclickthe"NewRemoteSite…山Button.Inthepop-updialog,givetheremotesiteanamelikernPHPeclipseUpdateSiteH,;settheURLtohttp://update.phpeclipse.net/update/nightly;thenclick,nOKnl.Under,nPHPEclipseStableBuilds”;checkM,PHPeclipse,n"Note,thereisnowalsoanotherPHPeditorforEclipse・TheupdateURLishttp://download.eclipse.org/.Iamjusttryingit—[[User:TimHuntITimHunt]]11:39,7November2010(CSTfBackinthewizard,turnonjusttwothingsintheboxnSitestoincludeinsearchn:*Yournewlycreated,nPhpeclipseUpdateSite111;*theonecalledH,EuropaDiscoverySite"'(orpossibly"CallistoDiscoverySite®.Thenclick”Finish”: Itgoesoffseeswhatupdatesareavailableatthosesites.Asitdoesso,itmayoccasionallypopupadialogaskingyoutochooseamirror.Eachtime,selectasensibleone.Eventually,yougettoanewwizardforselectingandinstallingtheupdatesyouwant.Theonesyouwant(youmayhavetosearchthetreestructure)are,,"PHPeclipseu,(fromyournewlycreatedPHPEclipseUpdateSite)andallthe"'WebStandardTools(WST),n(usuallyunderCallistoDiscoverySite—>WebandJ2EEDevelopment).Next,andveryimportantly,youmustclickthe"'SelectRequiredH,buttonwhichshouldresolvedependenciesandremovethewarningmessageyouareprobablyworryingabout.Thenyoucanclickthe"Next>H,button.Readandagreetoallthelicenseagreements.ThenclickH,Next>u,.Click"Finish”;andwaitforthepluginstodownload.Oncethedownloadshavefinished,awarningwillpop-uptellingyouthatallthepluginsyoudownloadedarenotdigitallysigned・TheEclipseFoundationbuilddigitalsigningofpluginsintotheirarchitectureasasecuritymeasure,andthendidnotsignanyoftheirownplugins!Anyway,clickthe"'InstallAlFnbutton.Finally,awindowwillpopupaskingyoutorestartEclipse.Doso.==SettingthepreferencesforMoodledevelopment==Nowgototheu,Window,umenu,andchoose,nPreferences...n,(,nEclipsetnmenuonMacOSX).TheEclipsepreferencesareimmense,withatreeviewontheleft,whichselectswhichscreentodisplayontheright.Donftpanic,we'llguideyouthroughit.===Generalsettings===Ifyouhavestrongfeelingsaboutfonts(IwouldhatetoeditcodeananythingexceptAndaleMono),chooseHtGeneral->Appearance->ColorsandFonts®fromthetreeontheleft.Thenontherightlookunder,uBasicn,andchange"TextFontnAlltheothereditorfontsettingswillinheritfromthis,sothisisprobablytheonlyoneyouhavetochange.Under"'General->ContentTypes'",selectPHPSourceFile,andadd叫.html”'totheboxatthebottom.Under"General->Editors->FileAssociations111,ifitisnotalreadythere,add”'*.php”'tothetopbox.With”'*.php”‘selectedinthetopbox,makesure"PHPEditor111issettodefaultinthebottombox.With,n*.htmrHselectedinthetopbox,select"'PHPEditor'"inthebottomboxandclickthe"'Default'"buttontochangeit,becauseinMoodle,mostHTMLfilesactuallycontainPHPcode.Ifyouuseawebproxy,enterthedetailsunder"Internet->ProxySettings".(Yes,I knowyouhaveenteredthemsomewhereelsebefore.Nowyouhavetoenterthemagainhere.Idon'tknowwhy.Youjustdo.)===PHPSettings===Theseareallhiddenunderthen,PHPeclipseWebDevelopment^bitofthetree.Under,HPHPeclipseWebDevelopment->BrowserPreviewDefaults111,turnoffbothcheckboxes.UnderIHPHPecIipseWebDevelopment->PHP”;onthe,nAppearancenitab,set"'Displayedtabwidth'"to4.Under,nPHPeclipseWebDevelopment->PHP*",onthe'"Appearance'"tab,check"'Showlinenumbers"todisplaylinenumbersintheleftmargin(optional).NOTE.-WhenyouareeditingaPHPfile,youcouldleft-clickintheleftmarginandtickthe"ShowLineNumbers®lineinthecontextualmenu.However,thistoggleonlyappliestoplaintextfiles,"not"toHTMLorPHPfiles.Theonlyplacewhereyoucantogglelinenumberson/offforsuchfilesisinthePHP/Appearancemenu.Under'"PHPeclipseWebDevelopment->PHP",onthe"'Typing'"tab,turnoffalltheoptionsexcept"'Pastingforcorrectindentation111,,nInsertspacesfortab"'and"'ClosePHPdocsandcomments”'and,HRemovetrailingspacesoneditorsaveMItwouldbenicetoturnonmoreoftheseoptions,butmostoftherestdon'tworkverywell.Under"'PHPeclipseWebDevelopment・>PHP->Formatter"*,onthe"'NewLines®tab,turnon,nClearallblanklines111.Under"'PHPeclipseWebDevelopment->PHP->Formatter'n,onthe"'Style”'tab,turnoff^IndentationisrepresentedbyatabMl.Thatis,asimpledebugmessagewithastacktrace,andanewlanguagestring.Thereisareallystupidbug.Undern,PHPeclipseWebDevelopment->ProjectDefaults";youwouldliketoaddtothe"'IncludePaths”;butyoucan'tusingtheGULYouwillhavetoeditoneoftheEclipseconfigfilesbyhand.So#NotedownthepathtoyourEclipseprofile•OnWindowsitwillbesomethinglike"Documentsandsettings/XXXX/workspacenandonUnixysystemssomethinglike小〜/workspace®.#CloseEclipse.#Openthefile,Hnet.sourceforge.phpeclipse.ui.prefstMthatisinthedirectory,n(yourworkspace)/.metadata/.plugins/org.eclipse.core.runtime/.settings,Hinatextedito匚#LookforalineinthefilethatstartsHI_php_include_paths=fMIfitisnotthere,additattheend・ #Changethislinetosayn,_php_include_paths=.n,#RunEclipseagain.===SSH2===InformationaboutgeneratingSSH2keysforthepurposeofconnectingtocvs.moodle.orgcanbefoundhereathttp://docs.moodle.org/en/,butpleasefinishreadingthissectionbeforereadingthatmaterial.TheEclipseinstallationhasitsownSSHclientpluginsoyoudonothavetouseaseparatesshclientinconnectionwithyouruseofEclipse(thisisonereasonyouwillbeusingextsshbelow,insteadofjustext,however,ifyouwishyoumayaltertheconfigurationtouseanexternalclientbutpleasepostnewsofyoursuccessandconfiguration).See,http://wwwjcraft.com/eclipse-cvsssh2Aforadditionalinformationonthisplugin."SinceEclipse3.0M6theCVSSSHpluginisincorporatedintoEclipse,[http://www.jroller.comas"extssh"insteadofHextssh2H]-~[[User:OlliSavolainenlOlliSavolainen]]07:54,23June2008(CDT)"PleasenotethatEclipseisfullyequippedtogeneratessh2rsaanddsakeysaswellasimportkeys.Youmayencounterissueswithpassphrasesthataretoolong(abugreportedlyfixedbutwhichmaystillinfactbepresent)andsomeissueswithusingkeypairsgeneratedbyotherapplicationshavebeenseen,soitmaybebesttogenerateakeypairwithEclipse.Additionaldetailsonhowtodothiswillbeadded.Sourceforge,athttp://sourceforge.net/docs/F02/,providesinstructionsonhowtocreateaSSHkeyforifsCVS(remember,MoodledoesnotusesourceforgeforitsCVSnowandyouwillneedtogeneratekeysforcvs.moodle.org,notsourceforge).Thisismentionedbywayofgeneralexplanation,notforthepurposesofprovidinginstructionsonhowtogenerateyourkeysforEclipse.Tomakeuseofthepublickey,logintoMoodle.organdadditviatheUpdateMyDeveloperInformationtabunderCVSDevelopers(http://moodle.org/cvs).Remember,publickeysprovidedtoMoodlemustbeintheOpensshformat.===CVSSettings===Thesearealmostallhiddenunderthen,Team,nbitofthetree.UnderM,General->NetworkConnections->SSH2->KeyManagement111,youcansetupapublic/privatekeypair.Ifyoudothis,youwonthavetokeeptypingyourpasswordwhendoingCVSoperations.Therestoftheonesinthissectionarepersonalpreferences,butIrecommendthembecausethedefaultsettingsareveryirritating.Under,nTeam,n,set”’Perspectives”'to”None”'. Under'"Team->CVS"1,onthe'"FilesandFolders'"tab,set'"Defaulttextmode"'to"ASCIIwithkeywordexpansion(-kkv),u.Under'"Team->CVS->Annotate'"set'"UseQuickDiffannotatemodeforlocalfileannotations111tornYesHand"'Openperspectiveaftera'ShowAnnotations1operationH,ton,No,H.Under'"Team->CVS->LabelDecorations”',switchtothe'"IconDecorations1"tabandturnonallthesettings,andthenonthe"TextDecorations®tabchangeboth'"FileDecoration'"and'"FolderDecoration"*tobejust"'{name}'M.===WebandXMLsettings===ForeachXXXinCSS,HTML,Javascript,XML:Under"'WebandXML->XXXFiles->XXXSource”;choose"'Indentusingspaces"and"indentationsize1114.==CheckingouttheMoodlecode==FromtheinFiletnmenu,choose'"New->ProjectInthewizardthatpopsup,choose,nCVS・>ProjectsfromCVS";thenclick”Next>n,.SelectH,Createanewrepositorylocation";thenclick"Next>H,.OnthenextscreenoftheWizard,choosen,Useanexistingmodule111.Waitamoment,thenselect"'moodle"'fromthelist.Click'"Next>"*.Onthenextscreen,makesuretheoption"'CheckoutasaprojectconfiguredusingtheNewProjectWizardH,isselected,thenclick,uNext>n,.Click"'RefreshTags";thenchoosethebranchyouwant.Fornowleaveitsetto,nHEADn,.Click“'Finish”'.Nowyouwillfindyourselfbackatthestartofthe"NewProject111Wizard.Thisisbecauseoftheoptionyouchosethreeparagraphsago.Thistimeyoushouldselect”'PHP->PHPProject”;thenclick”Next>M,.Makeupaprojectname.H,moodle,Hwouldbesensible.Click"'Finish”;andwaitwhileallthemoodlefilesarecheckedoutofCVS.Onceithasfinished,itwillprobablyaskyouifyouwanttoswitchtothePHPperspective.Answern,YestH.Ifyoualsoneedanotherbranch(1.6,1.7,1・&•••)repeatalltheotherstepswithafewchanges: *Thistimeyoucanchoosen,Useanexistingrepositorylocation^insteadoftypingallthesourceforgeCVSdetailsagain.*Selecttheappropriatebranch.Ifyoudon'tseethebranchyouwant,see[http://docs.moodle.org/:SettingupEclipse#ResettingthebranchinformationthisTroubleshootingtip].*Useadifferentprojectname(e.g.moodle16,moodle17,etc.).==Letyourdevelopmentwebserverknowwhereyourfilesare==Eitherbyeditingyouwebserversconfigfiles,orusingasymboliclink.MakesureyourwebservercanseeyournewworkingsetoffilesatasensibleURL,soyoucantestthecodeyouareworkingon.==Quicktourofsomecoolfeatures,andremainingconfigurationchanges==Ifindthedefaultworkbenchsetupisprettygood.Hereisaquickguidetosomeofthebits.===Navigator===Totheleftisthe,nNavigatorM,.Thisisatreeviewofallyourfiles.Ifyoudouble-clickonafile,itopensintheeditorinthemiddle.Tryopening,Hcourse/lib.phpn,now.Youwillnoticethatitcomesupnicelysyntax-hightlighted.===Errorhighlighting===Inthemiddleofthefile,justtypeanyoldtext,forexampleTlikeEclipse11.Obviously,thisisnotvalidPHPsyntax,andEclipsewillnoticethis,andputaredunderlineunderit.Also,bythescrollbarisarulerwitharedmarkinittoshowtheerror.Youwillseesomeyellowmarkslowerdowntheruler.Therearewarnings.Clickonone,andyouwillbetakentowherethatwarningisinthefile.Hoveryourmouseoverthewarning,andyouwillgetatooltipexplainingwhattheproblemmightbe.Savetheeditedfile.(Don'tworrythatitisbroken,wellcleanupthemesslater.)Noticethatarederrormarkerisaddedtothefileinthenavigator,soyoucanseethatthereisaproblem・Also,errormarkersareaddedtothecoursefolder,andthewholeproject,soyoucouldseetherewasanerrorevenifthenavigatortreewascollapsed.Youwillprobablyfindlotsofwarningsthattheconfig.phpfilecanrtbefound.Inthenavigator,findthefileu,config-dist.phpu,.Do"Copy®then"Paste®andchoosetocallthenewfileu,config.phpHl.Editthisnewconfig.phpasnormal.Youshouldfinethatmostoftheincludefilewarningshavegonenow.Noticealsothatthereisanothermarkeroneachfileicon.Alittleyellowcylinderonmostfiles,butawhite-on-brownstarontheoneyouhaveedited・ThisistellingyoutheCVSstatusofeachfile.Thebrownstarsarechangesyouhavemadebutnotcheckedinyet. ===Outline===OvertotherightistheOutlineview・Thisshowsalistoffunctionsandclassesdefinedinthisfile.Bydefault,theyarelistedinthesameorderasinthefile,butifyouclickonthe,naz,Htoolbarbutton,theyaresortedintoalphabeticalorder.Clickonthefunctionname,nadd_course_moduleHfintheOutline•Youwillseethattheeditorscrollstothedefinitionofthatfunction.===Codenavigation===Inthatfunction,hoverthemousepointeroverthefunctionname,ninsert_recordul.Afterawhile,thedocumentationforthatfunctionwillappearinabigtooltip.HolddownCTRL,movethemousepointeroverthefunctionname,ninsert_recordnthenclick.Eclipseshouldloadntdmllib.phpnandscrollyoutowherethisfunctionisdefined.InthemainEclipsetoolbar,thereareforwardandbackarrowslikeinawebbrowser.Clickbacknowtogetbackto,ncourse/lib.phpn===Openresource===FromtheinNavigatefHmenu,choose"OpenResource...tH.Inthedialogthatpopsup,starttypingafilenameforinstancetype,nmoodlern.Intheboxinthemiddleofthedialog,youwillseeitlistallthefilesintheprojectwhosenamesstartthatway.Atthebottomisaboxwhichliststhedifferentfoldersthatcontainafilewiththatname.Thiscanbeaveryquickwayofopeningfileswithfairlyuniquenameslikemoodlelib.php,withouthavingtoclickthroughthelevelsofthenavigatortree.Ofcourse,itisnotsousefulforanindex.phpfile!ClickOKnowtoopenmoodlelib.php.(ItwouldactuallyworkifyoujustdidCTRL+Shift+R,moodlel,Enter.)===Multi-filesearch===Scrolldownmoodlelibalittlebit,anddoubleclickonthenameoftheconstant"MOODLE_INTERNALn,whereitisdefined,sothatthetextisselected.Then,fromthe"'Search'”menu,choose"'Search...'".Noticethatthe'"Containingtext*"boxhasalreadybeenfilledinforyouwiththetextyoujustselected・Ofcourseyoucanjusttypetextintothisboxwithoutselectingitfirst.Noticethatyoucandoregularexpressionsearches,butleavethatturnedofffornow.IntheH,Filenamepatterns”'boxtypef*・css,*・html,*.inc,*・js,*.php,*.xml'".(Thisisthemostusefulgeneralsettingforworkingonmoodle.Eclipsewillrememberthissetting,soyouonlyhavetoenteritonce.)Click"'Search”'.Thesearchresultswillappearinanewviewunderneaththeeditor.Thatviewhasatoolbarwithyellowupanddownarrows.Clickthedownarrowafewtimesanditwilltake youtothefirstfewmatchesinthecode,openingtherelevantfilesasnecessary. 中文译文查看源代码(基于设置Eclipse开发)你因为以下原因而没有权限编辑网页:你请求的行为只限于木组的使用者。你可以查看并拷贝木页的源代码。fhttp://www.eclipse.org/lfe初是专为Java语言设计的种集成电路设备,但现在配备很多语言的插件(包括PHP语言)。它有许多强大的功能,同时也是一些模块开发者喜欢使用的编辑器。其他比较流行的编辑器如Vim和Emaco然而,Eclipse并非枇界上最容易学习的程序语言,因此我会循序渐进的带你学习。到木文截稿时,当前最流行的版木为Eclipse3.2O这种版木在当前发布的儿个版木Z间并没有发生太多的改变。木文起初是由用户TimHunt转载的,后来其他用户开始关注它,并做了一些收集,所以这里面的信息应该是十分精确的。从这个网页完成以来,Eclipse3.3and3.4这两个版木就一-直在发布,随之而來的是一种叫做PDT的PHP插件,该插件较好,但消耗较多内存。你可以从http://www.eclipse.org/。网站上面下载Eclipse+PDT组合包。当安装完该软件Z后,來口(构建Moodle开发环境)的一些指令将会得到应用,但其中一些细节会有些不同…[[用户:TimHuntITimHuntH2009年,1月31号,07:30o=前提条件==Eclipse是用java语言编写的,因此我推荐从http://www.java.com/上面下载最新的Java运行环境以让系统高效工作。Eclilpse很大,因此你的计算机上应该有足够的内存,我在Windows,MacOSX和Linux等系统上运行了该程序,每个系统都需要1GB的内存。==安装Eclipse==转到http://www.eclipse.Org/downloads/p击相应的链接,你的操作系统会显示"EclipseClassicn。选择一种镜像,等待~100MB流量下载。你会注意到下载的是-个压缩文件(除非你的系统会自动解压该文件)。在Windows系统中,将刚才下载的文件解压到“C:ProgramFiles”目录文件夹下(所有的文件都放到一个叫“Eclipse”的折叠文件夹下)。然后查看这个文件夹并且拖动可执行文件Eclipse.exe到开始菜单/桌面/快速启动栏,稍后启动它。在MacOS操作系统中,解压并拷贝Eclipse文件夹到应用程序中,进入Eliplse文件夹中并拖动Eclipse程序到图标栏以便启动该程序。在Linux系统屮,找到合适的位置解压该文件,用一•种简单的方法启动它。 ==第一次运行Eclipse==当你第一次启动Eclipse时,需要安装一些程序,例如,它会需耍一些“空间”,在那里面储存着你工作时需耍的东西。这种程序在所有平台的默认位置都是有用的,所以应该使用它们。由于某种原因,每次当你启动Eclipse时,它都会向你索取—•些空间。对于这种情况,我见过不止一次,因此我推荐填选一个名为“使用此项为默认设置,不再询问”复选框。在你初次运行Eclipse时碰到的另一种情况是你看到一个欢迎屏幕。它会链接各种帮助信息,你可以读一些需要的信息,但是如果按照如下指令你可能并不需要这些帮助。找到欢迎页的按钮关闭它,转到Eclipse的主屏幕。二二安装一些必要要的插件二二在默认情况下,Eclipse会携带一些Java组件,如果你所需要其他的-•些程序,就需要安装一些插件。如果你设置了Web代理服务器Z后,从Window菜单屮选取“预置”。从左边的树状试图中选择“安装/更新”,回车在右边的框中会看到代理信息。如果你没有设置代理服务器,就忽略这一步(关于对OSX版的Eclipse3.4.0在“Eclipse〉预置〉通用〉网络连接”中)。从“帮助”菜单屮选择“软件更新・>发现并且安装”在压缩文档的第一个界面上,勾选“找到新的功能就安装”项,然后单击“下一步”在下一个屏幕上会列出一系列需要检查的站点,你需要增加一个站点到这个清单上,然后点击“新的远程站点”按钮。在弹出的对话框中,给远程站点取一个像“PHPeclipse更新站点”的名称,设置网址为http://update.phpeclipse.net/;然后点击“OK”。在"稳定版本PHPEclipse中”,检查“PHPeclipse”插件。“注意,对于Eclipse而言,也有另一种PHP编辑器”。该编辑器最新版本所在的网址为http://download.eclipse.org/tools/pdt/updates/。我正在使用它[[用户:TimHuntITimHunt]]2010年11月7日11:39(美国中部标准时间)”在安装文件的后面,打开“站点包含在搜索引擎里而”框述有两项:*新创建的"PHPeclipse更新站点”*述有一项叫做“欧洲探索发现站点”(或者是“Callisto发现站点”)。然后点击"完成"O在那些站点上面看到一些更新是不言而喻的。因此,偶尔会出现一个对话框,询问你是否选择一个镜像。每次,选择一个有用的镜像。最后,你会得到一个新的压缩文件,用來选取并安装一些你想耍的更新。你想要的一些(你可能必须选择树状结构)是"PHPeclipse"插件(来H你创建的PHPEclipse站点)并且所有的“标准Web工具”(WST)(通常在Callisto探索发现站点WebandJ2EE 发展这个选项下)。卜•一步,是非常重要的,你必须点击“选择需要”按钮,该按钮会解决依赖关系并消除你可能担心警告消息。然后单击“下一步”按钮。阅读并同意所有的许可协议,然后点击“卜一步〉”点击“完成”按钮,等待下载的插件。一旦下载完成,会突然弹出一条警告信息,告诉你所有下载的插件都没有经过数字签名。Eclipse基金会把建立插件的数字签名纳入其体系结构作为一种安全防护措施,并没有签署任何他们自己的插件!无论如何,点击“全部安装”按钮。最后,一个Window窗口会突然弹岀,让你重新启动Eclipse,照做。二二为Moodle开发设置预置二二现在进入“Window”菜单,并选择“预置”(BPMacOSX操作系统里面的“Eclipse”菜单)。Eclipse预置功能是非常强大的,在左边有一颗树状视图,在屏幕的右侧会显示所选。别惊慌,我们会引导你去做的。===一般设置==二如果你对字体有着浓厚的兴趣(除了字体AndaleMono,我讨厌与代码有关的任何东西),从左边的树状结构中选择“普通・>外观・>颜色和字体”。使得“基本信息”处在合适的位置并改变“文本字体”。所有其他的字体设置都是固定不变的,所以这项操作可能是你唯一需要改变的。在“通用〉内容类型”中,选择PHP源代码文件,将附加到底部边框处。在“一般・>编辑・>文件关联”下而,如果已经不在那里,增加“.php”到顶部的框架中。在顶部边框中选择“*.php”。确定“PHP编辑器”在底部边框采用默认的设置。对于顶部边框中选择的”代码,在边框底部选择“PPHEditor”并单击“默认设置”按钮改变它,因为在Moodle中,大多数HTML文件确实包括PHP代码。如果使用Web代理服务器,点击“因特网〉代理服务器设置”了解详情(是,我知道你在一些其他的地方了解了一些)。现在你必须再次进入,我不知道为什么,照做就是了。===PHP设置==这些全部隐藏在树状结构中的“PHPeclipseWeb开发”项的卜•面了。在“PHPeclipseWcb开发・>浏览器默认预览”设置屮,关闭那两个复选框。在“PHPeclipseweb开发—>PHP”,在“外观”标签卜•面,设置“显示标签宽度”为4。在“PHPeclipseweb开发一>PHP”,在“外观”标签下面,检查“核实行号”在左边的页面上显示行号(可选)。注意■当你编辑一个php文件的时候,你可能会在左侧页面屮单击并且勾选内容菜单,然而,这一切只适用于纯文本文件,而非html或者php文件。你只能在PHP/外观菜单中为某些文件切换行号。 在"PHPeclipseWeb发・才刖”下而,点击“打字”标签,关闭除了“粘贴止确缩进”,“插入空间标签”,“关闭PHPdocs和评论”,“删除编辑保存屮的尾随空格”所有可选项,点击这些选项可能会有用,但是大多数剩余选项都不会很好的运作。在“PHPeclipseWeb开发・>PHP・>格式化”下而,点击“新行号”标签,打开“清除所有的空白行”。在“PHPeclipseWeb开发・>PHP・>格式化”下面,点击“样式”标签,关闭“由一个标签代表的缩进”项。在"PHPeclipseWeb开发->PHP->模板”,我想定义一个新的模板以帮助调试:;Name:dump[Description:DumpaPHPvariable;Pattern

print_object(${word_selection}${cursor});//DONOTCOMMIT
Youcandootherusefulthingswithtemplatestoo.HerearetwomoreIuse:
debugging("'${word_selection}${cursor}"');//DONOTCOMMIT
$$string[r${word_selection}${cursor}1]=\
Thatis,asimpledebugmessagewithastacktrace,andanewlanguagestring.Thereisareallystupidbug.UndernrPHPeclipseWebDevelopment->ProjectDefaults111,youwouldliketoaddtothe"IncludePaths”:butyoucantusingtheGULYouwillhavetoeditoneoftheEclipseconfigfilesbyhand.So#NotedownthepathtoyourEclipseprofile.OnWindowsitwillbesomethinglike,HC:/Documentsandsettings/XXXX/workspacenandonUnixysystemssomethinglike小〜/workspace”'•#CloseEclipse.#Openthefileninet.sourceforge.phpeclipse.ui.prefs,MthatisinthedirectoryHl(yourworkspace)/.metadata/.plugins/org.eclipse.core.runtime/.settingsH,inatexteditor.#Lookforalineinthefilethatstarts,"_php_include_paths=,"Ifitisnotthere,additattheend.#Changethislinetosay,,'_php_include_paths=.n'#RunEclipseagain.===SSH2服务器=二关于生成SSH2密钥从而链接到cvs.moodle.org的信息在 http://docs.moodle.Org/:SSH_key就能够找到,但是在阅读那篇文章Z前请先阅读木部分。Eclipse安装有自己的SSH客户端插件,这样您就不必使用一个单独的SSH客户机用于连接Eclipse(这是使用extssh而不是ext的一个原因,然后如杲你愿意你可以改变一个配置来使用外部客户,但应该提取成功配置的信息)可以参考,http://www.jcraft.com/eclipse-cvsssh2/这个网站提供了关丁•这个插件的其他信息。自从Eclipse3.0M6theCVSSSH插件被纳入至I」EclipseZ后,[http://www.jroller.com/prane/entry/as“extssh”代替"extssh2”]…[[用户:OlliSavolainenlOlliSavolainen]]2008年6月23日07:54(美国中部标准时间)”。请注意Eclipse被充分应用从而产生ssh2公开密钥加密算法和冃录系统密钥记忆重要的密钥。你可能会遇到一些与密码有关的问题是密码太长(一个bug可能暂时的修复)由其他应用程序产生的密钥一直都在解决这个问题,所以用Eclipse生成一个钥匙对,可能是解决问题的非常好的方式。其他关于怎样解决密钥的问题将会待续。开源项口,在http://sourceforge.net/网站上面,提供了有关如何创建-一个SSH密钥为它的CVS服务器(记住Moodle现在并不是用开源项目作为它的CVS服务器,你需要为cvs.moodle.org而不是开源项口生成一个密钥)。这是通过一般解释所涉及的,而不是为了Eclipse提供如何产生密钥的指令。充分利用公共密钥,登录到Moodle.org并且通过在CVS开发者(http://moodle.org/cvs)更新开发者信息。请记住,公共密钥必须在Openssh格式卜•才会提供Moodle□===CVS服务器设置二二二这些设置几乎全部隐藏在“团队”树状结构Z下。在“一般・>网路连接->SSH2->密钥管理”,您可以建立一个公/私密钥对。如果你这样做的话,在CVS服务器运作时,没有必要一直输入密码。其他的一些操作屈于个人预先设置的,但这是我所推荐的,因为系统的一些默认设置是令人十分厌烦的。在“团队”下,设置“透视”为“无”。在“Team・>CVS”下,点击“文件和文件夹”标签,设置“默认文本模式”为“带有ASCII的关键扩展关键字”。在“团^->CVS->诠释”设置“使用快速区分注释模式本地文件说明”为“是”,并且将“显示透视图操作后打开透视图”设置为“否”。在“团队〉服务器・>标签装饰”下,转换到“图标装饰”标签并且使所有的设置生效,设置“文本装饰”标签改变“文件装饰”和“文件夹装饰”为合适的名字。===web和XML设置==在WebandXML->XXX文件・>XXX资源”下,选择“使用空格缩进”并且“缩进4个字节”。 二二检查Moodle代码==在“文件”菜单中,选择“新建・>工程…•”在这个压缩文件中,弹出“CVS服务器・>来白CVS服务器的工程”选项,然后点击“卜一步选择“创建一个新的存储位置S然后点击“下一步〉”O然后单击“下一步〉”在压缩文件的下一个屏幕上,选择“使用现存的Module"。稍等片刻,然后从清单上选择“moodle”。单击“下一步〉”。在下一个屏幕上,确定选项“核杳使用新项目向导作为项目配置”勾选,然后单击“下一步〉”单击“刷新标签”,然后选择你想要的分支。现在将其设置为“头文件”。单击“完成”按钮。现在你会发现自己回到了“新建工程”压缩文件的初始位置了。这是由于你以前选择了3段。这次你该选择“PHP・>PHP工程”,然后点击“下一步〉”o制作一个名为“moodle”的工程可能是很有用的。单击“完成”按钮,稍等片刻所有的Moodle文件都会从CVS中检杳出来。一旦检杳完成,它会问你是否转换为PHP透视图,回答“是”。如果你也需要另一个分支(1.6,1.7,1.8,...)重复所有其他步骤但其中有一些变化:*现在你可以选择“使用现存位置”不用再次键入所有开源代码CVS细节了。*选择合适的分支。如果你不理解所选择的分支,可以参考[http://docs.moodle.Org/:Setting_up_Eclipse#Resetting_the_bnmch_information网址有疑难解答提示]。*使用不同的工程名(例如。moodle16,moodle17,等等)。=让web开发服务器知道文件存放的位置二二或者通过编辑web服务器的配置文件,或者使用彖征性的链接。确信您的web服务器能够通过一个网址在上面看到您的新工作组文件,这样你就能够测试代码运行情况了。二二快速浏览一些很酷的功能,其他的配置变化二二我发现默认的工作台配置十分不错,这里有一些与Z相关的快速指南。==导航器===左边显示的是导航器。这是包括所有文件屮的一个树状视图。如果你双击该文件,就会在文件中部打开编辑器。现在试图打开“course/lib.php”。你会注意到它开始使用非常好的语法了。==错谋加亮提示=== 在这个文件的中部,只需耍键入任何III文本,例如“我喜欢Eclipse"。很明显,这不是有效的PHP语法,并且Eclipse会注意到这一点,将一条红色的下划线放在卜•血。在滚动条卜•方是一个带有红色标记的标尺來显示错误。在标尺的下面你会看到一些红色的标记。在其屮一条警告上单击,会转到信息所在的文件。将鼠标定义在这个警告条中,你会看到一个用来解释问题的提示信息。保存编辑文件。(别担心这会遭到破坏,我们会在后期清理这些垃圾的。)注意一个红色的错谋标签被加到了导航条的文件屮,所以你可以看到有一个问题。同时,错谋制造者被添加到课程文件夹和整个工程中,所以即使导航树遭到破坏你仍然可以看到错谋。你将会发现许多警告信息在“config.php”文件中是找不到的。在导航器中,找到文件“config_dist.php"。“拷贝”,然后“粘贴"并选择一个名为“config.php”的文件。像止常情况下一样编辑新的“config.php”文件。你会发现大多数包含文件屮的警告信息都已经消失了。注意每种文件图标上血都有另一个标记。在多数文件中都会有一个黄颜色的小柱而,但在你编辑的文件屮会有一个白棕色的星状条。这是在告诉你每个文件的CVS状态。棕色条是一些你做的修改,但是没有经过核查。==大纲===在右边的是大纲视图。这会显示定义在这个文件屮的一些函数和类。在默认情况卜•,他们会以相同的顺序在文件夹中列出,但如果你点击“az”工貝条按钮,它们会以字母的顺序排列。在大纲小单击名为“增加课程模块”的功能函数。你会看到编辑器滚动到了函数定义的位置。==代码导航==在这个函数中,将鼠标指针停留在名为“插入记录”函数上。过一会,那个函数对应的文档会出现在一个大的提示框小。按住CTRL健,移动鼠标指针到“插入记录”标签,然后点击Eclipse会加载“dmllib.php”,并且滚动到函数定义的位置。在Eclipse主工具条中,有一个像web浏览器一样的前后浮动的箭头。点击“向后”方向的箭头回到“course/lib.php”。在“导航”菜单中,选择“开源…项。突然弹出一个对话框,开始定义一个形如“moodlel"的文件名。在对话框屮部的边框屮,你会看到项口屮所有文件,而他们的文件名都是那样命名的。在底部的边框中列出了包含那类名字的不同类型的文件夹。这是打开像modlelib.php这样的独特文件的TF•常快的方式, 不是非要通过点击导航树上的类才能打开。当然,对于index.php文件这种方式是非常有用的。点击OK按钮打开moodlelib.php(如果你只是按住CTRL+Shift+R,moodlei,回车组合键,也可以运行该程序)。==多文件杳询==慢慢的滚动moodlelib,在名为“MOODLE_INTERNAL被定义的位置双击鼠标,以便选中文本。然后,从“查询”菜单中选择“杳询..…”o注意“包含文本”边框已经被放在了你所选择的文档屮了。当然你也可以把文档定义在先前没有定义的边框中。注意你可以寻找一些特定的字符串样式,但是现在离开并且关闭。在"文件名样式”边框里面,"*.css,*.html,*.inc,*.js,*.php,*.xml”边框类型对于止在运行的moodle是非常有用的。Eclipse会记住这些设置,所有你只需要回车确认一次。)点击“查询”按钮。查询结果会出现在编辑器卜•血一个新的视图中。这个视图有一个上下箭头的黄色工具条。点击几次该工具条,你会看到一些匹配的信息出现在代码中,打开所需要的一些相关文件。致谢四年本科的学习和生活即将结束,在此论文完成之际,首先想到的是要感谢那些帮助和关怀过我的老师和同学们。我首先要感谢我的指导教师马老师。他在论文的选题、研究思路的确定、资料的收集到论文的撰写、修改以及最后的定稿这一-过程中,都对我严格要求,悉心指导,并给予了切实的建议,让我受益匪浅。他渊博的知识、严谨的治学态度给我留下了深刻的印象,他在学术研究上的经验和热心助人的精神,也使我深受教益。此外,我还要感谢让算机教研室的许多其他老师,在我四年的本科学习期间,正是他们辛勤的传授、不倦的教诲,才为我最终完成毕业论文打下坚实的基础。最后感谢各位评委老师对我毕业论文的审评。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭