资源描述:
《vb旅游管理系统设计毕业论文》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
摘要:旅行社管理系统是面向现实需求的一个实用系统。其设计的目的是为游客和旅行社提供一个友好的、直接的交流平台。本系统主要分为六大模块:导游基本信息、游客基本信息、游客信息查询、景点信息、特价路线信息以及权限管理。该系统的主要功能:提供给管理者一个简单的界面,可以合理计划安排导游的工作和及时了解游客的要求和信息;提供给游客一个清新的界面选择自己向往的旅游胜地。本系统采用VisualBasic6.0进行开发,结合MicrosoftAccess2000来创建数据库和程序跟踪与管理信息。本系统的设计过程完全按照软件工程的要求开发的,主要分为以下几个步骤:首先进行可行性研究;第二步进行详细调查,需求分析;第三步进行系统总体结构设计,完成系统所需的数据库设计;第四步进行系统详细设计,最后进行软件编码和系统测试。关键词:总体设计;数据库设计;详细设计;VisualBasic6.0;MicrosoftAccess2000AbstractTravelAgencymanagementsystemisanactuality-orientedsystem.It’sdesigngoalistosupplytouristandagencymanagementafriendlyanddirectedplatformtocommunicate.Thissystemisdividedintosixmajormodulesmainly:thebasicinformationoftouristguide,thebasicinformationoftourist,thequeryoftourist,thebasicinformationofresort,theinformationoftouristtrackonspecial,andauthoritymanagement.Themainfunctionofthissystem:offerthemanagerasimpleplatform.Forthat,themanagercanplanthetouristguides’jobinreasonandrealizethedemandandinformationoftouristintime.Thesystemcanalsoofferthetouristaspankingplatformtochoosetheresortstheylike.WedevelopthissystemwithVisualBasic6.0andMicrosoftAccess2000,whichcancreatedatabaseandprogramtraceandinformationmanagement.Thedesignprocessofthissystemistotallydevelopmentattherequestofsoftproject,dividedintothe followingseveralmeasuresmainly:Carryonfeasibilitystudyatfirst;secondcarryondetailedinvestigation,requirementanalysis;Thirdcarryonsystematicensemblearchitecturedesigned,finishthedesignofstorehouseofdatumthatthesystemtake;Fourthcarryonsystemdesignindetail,carryonsoftwarecodeandsystemtestingfinally.Keywords:Designoverall;Databasedesigning;Detaildesigning;VisualBasic6.0;MicrosoftAccess2000毕业设计(论文)网www.56doc.comQQ:306826066优秀毕业设计网www.2bysj.cn计算机毕业设计网www.papersay.com毕业设计资料网www.doc163.com毕业设计论文网www.think58.com 目录Abstract3第一章背景介绍6VisualBasic软件介绍72.1VisualBasic6.0介绍72.2ADO技术概述92.3Access简介10第三章项目定义123.1系统分析123.2问题定义133.3可行性分析153.4需求分析16第四章系统开发174.1系统设计174.2详细设计194.2.1、E-R模型简介214.2.2、本系统的E-R图及数据库表的结构224.2.3模块功能实现27第五章软件编码与测试355.1程序编码355.2安装说明385.3软件测试38第六章问题解决过程及体会40第七章致谢41附录1文献翻译41附录2源代码63 第一章背景介绍随着社会发展、工业进步,近年来人民的生活水平日益提高,消费结构也发生了巨大的变化。人们的生活不再只局限于简单地满足温饱,越来越多的人开始注重生活的质量,即身体素质和精神文化素质的同步提高。同时,国家也积极鼓励人们利用节假日外出旅游,游览各地的美丽景色,了解那里的人文地理和风土人情。这样一方面可以锻炼和提高全民素质,一方面还可以增加国家旅游财政方面的收入,利国利民。伴着蓬勃发展的旅游业,各地的旅行社也应运而生。它们的产生为人们的出游提供了很多方便,只要游客提出要求,旅行社会尽量为他们考虑,合理安排好各条路线和相关行程。当然,新兴的行业虽然有很强的生命力,但是在上述的服务中仍存在很多的不足。计算机科学日渐成熟,它已进入人类社会的各个领域并发挥着越来越重要的作用,用手工统计数据资料的工作方式正逐步离我们远去。丰富多彩的旅游景点需要一个合适的管理系统来规范,使得各项工作都能有条有理地进行。本旅行社管理系统正是想改善那些原有的不足,更好的为游客和旅行社提供直接交流的平台,使双方更好地协调不同的意见。它能提供给管理者一个简单的界面可以合理计划安排导游的工作和及时了解游客的要求和信息;它还能提供给游客一个清新友好的界面选择自己向往的旅游胜地。 VisualBasic软件介绍2.1VisualBasic6.0介绍VisualBasic(简称VB)是近年来得到迅速推广和应用的计算机高级语言,它适用于面向对象程序设计。人们可以在图形界面的Windows平台上开发应用程序。VB是在原有Basic 语言基础上的进一步发展,它包含了数百条语句、函数和关键词,其中很多和WindowsGUI有直接的关系。VB语言具有简单易学的特性,只要稍有语言基础就可以很快掌握并进而精通。可视化的用户界面设计功能,把程序设计人员从烦琐复杂的界面设计中解脱出来;可视化编程环境的“所见即所得”功能,使界面设计如积木游戏一般,从而使编程成为一种享受;强大的多媒体功能可轻而易举地开发出集声音、图画、影象和图片于一体的多媒体应用程序;新增的网络功能提供了编写Internet程序的能力。VB的基本特点和优点:1、可视化的设计平台VisualBasic提供的可视化设计平台,把Windows界面设计的复杂性“封装”起来,开发人员不必为界面的设计而编写大量程序代码,只需按照设计的要求,用系统提示的工具在屏幕中画出各种对象即可。VisualBasic自动产生界面设计代码,程序员只需要实现程序功能的那部分代码,从而大大的提高了程序设计的效率。2、事件驱动的编程机制,VB没有传统意义上的主程序,程序执行的基本方法是由“事件”来驱动子程序的运行。在图形用户界面的应用程序中,是由用户的动作即事件掌握着程序运行的流向,每个事件都能驱动一段程序的运行。程序员只需编写响应用户动作的代码,各个动作之间不一定有联系,使得程序既易于编写又易于维护。3、VB提供可视化的编程工具(用VB开发应用程序包括两部分工作:一是设计用户界面;二是编写程序代码。在程序设计时可以自由从存放多种控件的工具箱中直接拖放到指定的位置,而无须为此编写程序)在程序设计时可供了易学易用的应用程序集成开发环境,在VB6。0集成开发环境中,用户可设计界面、编写代码、调试程序,及把应用程序编译成可执行文件。 4、4、构化的程序设计语言,具有丰富的数据类型和结构化程序结构,而且简单易学。VB还有许多独到之处:a)a) 强大的数值和字符串处理功能。b)b) 丰富的图形指令。c)c) 提供静态和动态数组,有利于简化内存管理。d)d) 过程可递归调用。e)e) 支持随机文件和顺序文件访问。f)f) 提供了一个可供应用程序调用的包含多种类型的图标库。g)g) 具有完善的运行出错处理。5、5、持多种数据库系统的访问,如:MicrosoftAccess、Btrieve、MicrosoftFoxpro和Paradox等,也可访问MicrosoftExcel、Lotusl1-2-3等多种电子表格。6、6、持动态数据交换(DDE)、动态链接库(DLL)和对象的链接与嵌入(OLE)技术。动态数据交换(DDE)的编程技术,使VB开发应用程序能与其他Windows应用程序之间建立数据通信。通过VB的动态连接库技术(DLL),在VB程序中可方便地调用C语言或汇编语言编写的函数,也可调用Windows应用程序接口(API)函数,以实现SDK所能实现的功能。VB的核心是其对对象的链接与嵌入技术(OLE)的支持,它是访问所有对象的一种方法。利用OLE技术,VB将其他应用软件视为一个对象嵌入到VB应用程序中进行各种操作,也可将基于WINDOWS的应用程序嵌入到VB应用程序,实现声音、图像、动画等多媒体功能。7、7、完备的Help联机帮助功能,用户可利用帮助菜单和F1 功能键随时方便的得到所需的帮助信息。VB6。0帮助窗口中显示了有关的示例代码,通过复制、粘贴操作可获取大量的示例代码,为用户学习和使用提供了极大的方便。 2.2ADO技术概述ADO是Microsoft处理关系数据库和非关系数据库中信息的最新技术(关系数据库管理系统用表来操作信息,但并非所有的数据源都遵从这一模式)。ADO没有完全取代现有的DAO,但是它确实把DAO的编程扩展到了新的领域。ADO基于微软最新的被称为OLEDB的数据访问模式。它是专门为了给大范围的商业数据源提供访问而设计的,包括传统的关系数据库表、电子邮件系统、图形格式、Internet资源等。ADO比DAO所需的内存更少,所以它更适合于大量和大事务的网络计算机系统。ADO顶层有三个对象Connection、Command、Recordset:●Connection对象可以指定数据源,建立与数据的连接,隔离特定的连接;●Command对象对数据源执行指定的命令。它可以接受SQL语句、表的名称和存储过程的名称,执行SQL查询、更新数据、插入记录等;●Recordset对象表示的是来自表或命令执行结果的记录全集,操作来自提供者的几乎所有数据。同时,ADO的四个集合:●每个对象都有Properties(属性)集合;●Error(错误)集合包含连接数据库失败时产生的所有Error对象;●Parameters(参数)集合包含Command对象的所有Parameters 对象;●● Fields(字段)集合包含Recordset对象的所有Fields对象。 2.3Access简介Access97在因特网和内部网的应用,VBA集成开发环境,共享MSOffice可编程功能和数据访问对象值得关注。且稳定性和性能也得到了很大的改进。而Access2000比Access95、Access97又有更大的改观,主要体现在以下一个方面:一、“数据库”窗口的新增功能1、使用“数据库”窗口工具栏:创建、打开或管理数据库对象的快速查找命令。2、使用“对象”栏:在“对象”栏中查看数据库对象—竖直方位更易于使用。3、将数据库对象组织为组:单击“组”栏查看组,其中包含对不同类型数据库对象的快捷方式。4、使用新的对象快捷方式:在“数据库”窗口中,使用向导快速创建新的数据库对象,或是在设计视图中打开一个新的数据库对象。5、自定义在“数据库”窗口中选择及打开对象的方式:如果选择,更改默认行为,并将光标置于其上以选中数据对象,单击以打开该对象。6.键入名称以选中该对象:例如,查看表对象列表时,键入“Sh”,可选择“Shippers”表二、使用数据和数据库设计的新增功能a)使用记录级锁定MicrosoftAccess数据库除支持页面级锁定(锁定4K页面上的所有记录),还支持记录级锁定。可使用新的数据库选项:“ 使用记录级别锁定可打开数据库”(“工具”菜单,“选项”命令,“升级”选项卡),启用锁定级别。实际使用的级别依据Access数据库编程的方式而定。b)查找和替代可在“查找和替代”对话框和视图或窗口中的数据之间自由移动。c)查看子数据表中的相关数据使用子数据表查看或编辑表、查询或窗体数据表关系或联接数据,或来自同一视图的子窗体。例如,在“罗斯文”示例数据库中,“供应商”表与“产品”表是一对多关系;因此,对于“数据表”视图中“供应商”表中的每一行,在子数据表中的“产品”表中可查看或编辑其若干相关行。d)自动更正字段重命名产生的错误“名称自动更正”自动更正在为窗体、报表、表、查询、字段、文本框或其他控件重命名时产生的副作用。e)使用Unicode支持用Unicode支持的任何一种语言的字符支持数据。使用Unicode压缩抵消Unicode的增加的存储空间需求的作用。利用双字体支持—除使用默认字体,还可指定可用的替代字体以便恰当显示数据中的所有字符。f)打印关系在Access数据库中打印出现在“关系”窗口中的关系的报表。g)通过键盘处理关系通过键盘创建、编辑及删除关系和连接。h)使用MicrosoftActiveX数据对象(ADO)通过任何OLEDB提供者,使用MicrosoftActiveX数据对象(ADO)访问和处理数据库服务器中的数据。三、有关数据库安全机制、维护和转换的新增功能1.使用VisualBasicforApplications密码保护代码模块与窗体和报表中的模块受在“VisualBasic编辑器”中创建的VisualBasicApplications(VBA)密码的保护;而不再受安全机制的保护。 2.使用改良的压缩工具使用改良的工具,压缩MicrosoftAccess数据库和MicrosoftAccess项目,这种工具将压缩和修复合为一个过程,使用起来更安全,更有效。3.自动压缩选择“关闭时压缩”,可在关闭时,自动压缩MicrosoftAccess数据库或MicrosoftAccess项目。4.将数据库转换为MicrosoftAccess97格式将Access2000数据库转换为Access97文件格式。 第三章项目定义3.1系统分析系统工程介绍计算机系统工程是指与构造基于计算机系统有关的过程、方法和技术。它是一种问题求解活动。计算机系统工程师从用户定义的目标和约束条件出发,给出系统功能、性能、接口、设计约束条件和信息结构的描述,并将它们分配到各系统要素予以实现。在开始构造一个基于计算机的新系统时,系统工程师必须做大量的调查、研究和论证工作,真挚建造系统或系统某一部分的原型,以便尽早确定系统的功能和性能。然后,系统工程师将系统功能和性能分配到系统各要素之中,如软件、硬件、人,等等。多数场合,一个功能可用多种方法实现。系统工程师必须善于根据系统设计目标和约束条件设计并选择最佳方案,为系统各要素指派功能和性能。方案的选和指派必须按照一定的原则进行。例如,在成本、时间、软硬件支撑环境、人员的技术水平和经验、方案的复杂性、系统的安全性和可靠性、系统的可重用性、使用的方便性和人员培训的难易程度等方面进行取舍和折中。 3.2问题定义问题定义是整个软件开发的第一步,在这个阶段主要问题是:“要解决的项目问题是什么?”只有弄懂了要解决问题,才能够合理的分析和解决问题,并为以后的总体设计和详细设计打下坚实的基础。根据软件工程,前期的问题定义占软件开发很大部分,是很重要的环节。软件项目定义阶段的任务有四项。1、制定软件项目规划。包括:描述软件的工作范围、进行风险分析、提出开发软件所需资源清单、估算软件项目的成本和进度,并易成本和进度估算为基础对软件项目进行可行性论证。最后,生成经过项目管理组织评审的软件项目规划。2、软件需求分析和定义。确定软件的功能和性能,详细定义软件系统要素。定义软件需求有两种方法。一种是采用形式化的信息分析方法。建立信息流和信息结构模型,然后将这些模型扩展为软件规格说明。另一种是为软件开发原型,软件工程师和用户一起对原型进行评审和修改,从二获得用户满意的需求定义信息。3、确定软件性能和资源约束,这对软件设计特性会产生直接的影响。4、为软件要素定义验收标准,它也是制定软件测试计划的基础。(一)、设计目的和任务v面向现实需求实现通用旅行社管理系统设计出的旅行社管理系统可以满足绝大多数旅行社的需求,而不仅仅局限于某一个旅行社的使用。v学习和掌握VB6.0开发工具,深刻体会面向对象编程的方法和思想能熟练使用VisualBasic6.0,并成功编出毕业设计项目。依靠其可视化的面向对象编程以及大量的控件来设计旅行社管理系统的界面和实现各种功能。 v掌握软件开发环境和操作系统本软件的开发是在WINDOWS98、WINDOWS2000的环境下进行的。能够熟练操作和使用WINDOWS操作系统和VisualBasic6.0编程工具,以及简单处理在使用中遇到的问题。v熟悉软件开发的流程按照软件工程的思想和方法,进行旅行社管理系统的需求分析、系统设计、详细设计、编码、测试和维护等等。同时参考和学习软件工程新途径:面向对象方法学引论、分析、设计、实现等。以便学习跟上和了解计算机编程的心思想和新潮流。v用户界面友好、清晰、易学易用,易于维护(二)、设计要求1、合理设定用户,控制用户使用权限。2、管理人员可以随时根据实际情况修改数据库中的数据资料,使信息的更新及时、准确;3、游客的个人资料和旅游信息可以方便地增加、删除和修改。并且景点信息和游客信息之间可以随意切换;4、提供的特价路线信息让游客可以一目了然;5、查找功能方便管理人员了解各条路线的游客统计,便于统一管理;本设计是一个旅行社管理系统,要求简单的信息添加、删除、修改等,及时进行数据的查询和管理。该软件以Windows环境,VisualBasic工具和MicrosoftAccess数据库设计。3.3可行性分析 开发任何一个基于计算机的系统,都会受到时间和资源上的限制。因此,在接受项目之前必须根据客户可能提供的时间和资源条件进行可行性研究。它可以避免人力、物力和才力上的浪费。可行性研究与风险分析在许多方面是互相关联的。项目风险越大,开发高质量软件的可行性就越小。可行性研究包括经济可行性、技术可行性、法律可行性和开发方案的选择性。以下从四个方面对旅行社管理系统进行可行性分析:技术可行性、经济可行性、操作可行性和法律可行性。Ø技术可行性为了确定现有技术能否实现目标系统。VB6.0自带的工具和控件、MicrosoftAccess拥有的表操作(建立、修改、删除等)以及MicrosoftExcel协调操作完全可以实现本系统要求达到的各种功能。旅行社管理系统把导游和游客的信息贮存在数据库里,然后经过数据的抽取和分类,显示在需要的窗口内。基本信息录入 数据库导游信息表游客信息表景点信息表 Ø经济可行性为了确定待开发的系统的经济效益能否超过开发成本。旅行社管理系统是一个不会直接产生经济效益的投资,但是能够节省人员资源的消耗和浪费,从而节约成本,提高效率。从成本效益角度来观察,这个系统的开发成本不是很高,在使用后,能够起到的作用也是十分可观的。Ø操作可行性旅行社管理系统是基于VB6.0平台开发的,VB 系列是被广泛应用于数据库开发和操作的一套成熟的软件平台,而且它对于一个小型的数据库处理具有不可比拟的优点和简单方便。所以丛操作可行性方面是可行的。开发出来的界面也是十分容易使用,具有简单,容易上手的特点。Ø法律可行性本系统完全是本人在指导老师的指导下独立完成的,故不存在侵权行为或者由于本系统带来的法律纠纷等问题,所以在法律上是可行的。所以从上面四点出发,可以确定系统分析是可行的。3.4需求分析需求分析是介于系统分析和软件设计阶段之间的重要桥梁。一方面,需求分析以系统规格说明和项目规划作为分析活动的基本出发点,并从软件角度对他们进行检查和调整。另一方面,需求规格说明又是软件设计、实现、测试,直至维护的主要基础。需求分析是在可行性研究的基础上进行的,可行性研究实质上是一次完整的分析和设计过程,只不过是在抽象的层次上进行的大大压缩和简化的分析和设计过程。需求分析的结果是软件开发的基础,必须仔细验证它的正确性,开发人员必须和用户取得完全一致的意见,需求分析的文档应该被用户所确认。为了更准确、更具体地确定用户的需求,往往需要构造出目标系统的原型,供用户试用以取得实践。良好的分析活动有助于避免或尽早剔除早期错误,从而提高软件生产率,降低开发成本,改进软件质量。 u需求分析的基本任务是确定目标系统必须具备那些功能,准确完整的体现用户的要求。uu旅行社管理系统的需求分析:1、1、采用VB开发工具; 1、2、合理设定用户,控制用户使用权限。让系统可以分辨出非用户和用户,普通用户和超级用户(即管理员)。2、3、管理人员可以随时根据实际情况修改数据库中的数据资料,使信息的更新及时、准确;3、4、导游的资料可以由管理人员添加和删除,普通用户只可以查看。4、5、景点信息里某些新线路的开发,或旧线路的修改和删除由管理人员按实际要求处理。5、6、游客的个人资料可以方便地增加、删除和修改。并且景点信息和游客信息之间可以随意切换;6、7、提供的特价路线信息让游客可以一目了然,清楚了解最新讯息;7、8、查找功能方便管理人员了解各条路线的游客统计,便于统一管理,及时调整;第四章系统开发4.1系统设计总体设计的基本目的就是回答“概括地说,系统应该如何实现?”这个问题,因此,总体设计又称为概要设计或初步设计。本设计阶段的基本目的是用比较抽象概括的方式确定系统如何完成预定的任务,也就是说,总体设计阶段主要由两个小阶段组成。首先需要进行系统设计,从数据流图出发设想完成系统功能的若干种合理的物理方案,分析员应该仔细分析比较这些方案,并且和用户共同选定一个最佳方案。然后进行软件结构设计,确定软件由那些模块组成以及这些模块之间的动态调用关系。层次图和结构图是描绘软件结构的常用工具。在进行软件结构设计时,应该遵循的最主要的原理是模块独立原理,也就是说,软件应该由一组完成相对独立的子功能的模块组成,这些模块彼此之间的接口关系应该尽量简单。 在进行软件结构设计时一种有效的方法是,由抽象到具体地分析和构造出软件的层次结构。自顶而下逐步求精是进行软件结构设计的常用途径;但是,如果已经有了详细的数据流图,也可以使用面向数据流的设计方法,用形式化的方法由数据流图影射出软件结构。数据库设计是建立数据库及其应用系统的技术,是信息系统开发和建设中的核心技术,具体说,数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)。通过这个阶段的工作将划分出组成系统的物理元素—程序,文件,数据库,人工过程和文档等。耦合:是对一个软件结构内不同模块之间互连程度的度量。内聚:标志一个模块内各个元素彼此结合的紧密程度,它是信息隐蔽和局部化概念的自然扩展。一、本系统的总体设计u1、旅行社管理系统的开发首先需要设计数据库。根据需求分析得到的结果,用MicrosoftAccess表设计器设计好结构表后添加到数据库中。为了使用方便,共创建了4个数据表。uu2、为了完成用户的需求,共设计8个窗口(登录窗口、主窗口、导游信息窗口、游客信息窗口、特价路线信息窗口、景点信息窗口、用户权限窗口和游客信息查询窗口)。二、程序设计图输入用户和密码1)登录系统错验证进入主界面 登录界面主界面导游信息游客信息景点信息特价信息用户权限2)系统模块 4.2详细设计具体分析是软件生命周期的一个重要阶段,它最根本的任务是确定为了满足用户的需要系统必须做什么。具体地说,应该确定系统必须具有的功能和性能,系统要求的运行环境,并且预测系统发展的前景;必须仔细分析系统中的数据,既要分析系统中的数据流又要分析长期使用的数据存储。通过仔细分析应该得出用数据流图、ER图、数据字典和简洁的算法描述所定义的详细的系统逻辑模型。图形工具比文字叙述能更好地表达重要的细节,数据流图能够极好地概括描述一个系统的信息。ER图能直观、准确地描绘系统的数据需求。数据字典也是重要的,数据是把一个系统的各个组成元素连接在一起的“黏合剂” ,为了成功地把所有系统元素连接起来,这些元素必须共享公共的数据定义,数据字典正是这些数据定义的集合算法同样是重要的,分析的目的是确定系统必须做什么,广义地说,任何一个计算机系统的基本功能都是把输入数据转变成输出信息,算法定义了转变的规则。因此,没有对算法的了解就不能确切知道系统必须做什么。此外,在需求分析阶段还应该根据对目标系统的更深入更具体的认识,修正开发目标系统的计划。详细设计阶段的根本目标是确定应该怎么具体地实现所要求的系统,也就是说,经过这个阶段的设计工作,应该得出对目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。Ø为了满足旅行社管理系统的使用要求,本系统用MicrosoftAccess2000创建有4张表,分别是密码表、导游表、游客表以及旅游路线表。密码表的作用是验证登录时的用户名和密码,并判断用户的使用权限来启动或关闭某些按钮的操作;导游表的作用是存放导游的基本资料,便于及时查看;游客表的作用也是存放资料信息,随时可以添加记录,方便旅行社的记录管理;旅游路线表中存放线路的具体信息,管理员可以根据具体的情况选择线路添加、修改和删除,游客可以通过自己的选择,迅速查处相关旅游胜地的路线资料。Ø建立一张Excel表,及时更新每星期推出的特价路线信息。利用VB里的控件OLE使Excel表与特价路线窗口直接相连。Ø用户应用顺序为:登录窗口——>主窗口——>——>导游信息窗口 ——>景点信息窗口——>游客信息窗口——>游客信息窗口——>游客信息查询窗口——>特价路线窗口 ——>用户权限窗口 4.2.1、E-R模型简介数据库设计中常用E-R图来描绘数据库的结构。E-R模型中包含“实体”、“联系”和“属性”等三个基本成分,下面介绍这三个基本成分:1、实体实体是客观世界中存在的且可相互区分的事物。实体可以是人也可以是物;可以是具体事物也可以是抽象概念。例如,员工、原料、商品、定单等都是实体。在E-R图中用矩形代表实体。2、联系客观世界中的事物彼此间往往是有联系的。例如,客户与企业间有“卖”这种联系;企业与供应商之间存在“买”这种联系。联系可分为三类:(1)一对一联系(1:1)例如,一个公司只有一个总经理,而每个总经理只在一个公司任职,则公司与总经理之间的联系是一对一的。(2)一对多联系(1:N)例如,公司与员工之间存在一对多的联系“雇佣”,即每个公司雇佣了多名员工。(3)多对多联系(M:N)例如,客户与公司之间存在的联系(“买”)是多对多的,即每个客户可以向多家公司购买商品,而每个公司也可以向多家客户出售产品。在E-R图中,用连接相关实体的菱形框来表示联系。3、属性属性是实体或联系所具有的性质。通常一个实体由若干个属性来刻画。例如,“公司”实体有名称、类别、地址、电话等属性;“员工”实体有姓名、性别、职位、家庭住址等属性。“定单”实体有定单号、定货日期、截止日期、商品、数量、定金等属性。在E-R图中用椭圆形来表示实体(或联系)的属性,并用无向边把实体(或联系)与其属性连接起来。 人们通常就是用实体、联系和属性三个概念来理解现实问题的,因此,E-R模型比较接近人的习惯思维方式。此外,E-R模型使用简单的图形符号来表达系统分析员对问题的理解,不熟悉计算机技术的用户也能理解它,因此,E-R模型可以作为用户与分析员之间有效的交流工具。4.2.2、本系统的E-R图及数据库表的结构1、1、各实体的属性图用户=用户名+密码+权限导游=导游号+姓名+年龄+性别+职位+掌握语种+熟悉路线+带队日期游客=身份证号码+姓名+年龄+性别+联系电话+旅游日期+参加的团队+导游号+备注路线=路线+旅游信息+发团日期+价格+属性+终点+中点站 ①、用户实体及属性用户用户名密码权限 ②导游实体及属性 导游姓名导游号带队日期年龄职位掌握语种熟悉路线性别 ③游客实体及属性 游客姓名年龄性别联系电话备注导游号参加的团队旅游日期日期身份证号码 ④路线实体及属性路线价格发团日期旅游信息路线中点站终点属性 N2M2N1M12导游带队游客制定路线游览m1 1、2、表结构 数据库设计是建立数据库及其应用系统的技术,是信息系统开发和建设中的核心技术,具体说,数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)。根据系统的需要和实际操作的要求,本系统用MicrosoftAccess共建有4张表,详细如下:导游信息表:导游游客信息表:游客景点信息表:路线登录用户:密码 下面是这些表的详细说明:●导游信息表:导游主键:导游号字段名称数据类型字段大小必填字段允许为空导游号数字长整型是否职位文本20否是姓名文本30否是性别文本8否是年龄数字长整型否是掌握语种文本50否是熟悉路线文本50否是本月带队日期文本30否否 ●游客信息表:游客主键:身份证号码字段名称数据类型字段大小必填字段允许为空身份证号码文本50是否姓名文本30是否性别文本8否是年龄数字长整型否是联系电话文本50是否参加团队名文本50是否日期文本20否是导游号数字长整型否是备注文本50否是 ●景点信息表:路线主键:路线字段名称数据类型字段大小必填字段允许为空旅游信息文本20是否路线文本50是否旅游天数文本20否是发团日期文本20否是属性文本20是否终点文本20是否中点站1文本20否是中点站2文本20否是 价格数字长整型否是 ●用户权限表:密码主键:用户字段名称数据类型字段大小必填字段允许为空用户文本20是否权限数字长整型是否密码文本20是否 1、3、系统部分流程图重填有错有错Select?权限管理密码修改删除用户添加用户Frame1Frame2Frame3验新密码修改成功重填验旧密码是否存在?出错提示添加成功添加成功验证密码删除成功返回主界面权限管理窗口 重填出错提示 4.2.3模块功能实现1、系统登录窗口当用户输入完用户名和密码后,系统就开始判断用户名是否存在。用户名不存在时,提示出错信息,不能使用本系统;用户名存在而密码不匹配时,提示出错信息;只有当用户名和密码都正确且匹配时,进入主界面,使用旅行社管理系统。 进入系统的同时,系统判断该用户是普通用户还是超级用户。普通用户就关闭导游信息添加删除功能,以及线路新建和修改功能;而超级用户享有一切权力。本窗口中的系统提示信息全部在label中显示。2、主界面主界面提供了很多的按钮,只要你点击想要查看的窗口,就可以随意进入,其中的更改用户可以让你回到登录界面重新登录,重新判断用户的权限。 窗口中的星期和日期按钮可以让你查看系统时间,通过选择城市的名称也可以看到当地的时间。本功能是运用了Clock控件实现的。3、导游基本信息窗口此窗口中的导游信息添加,修改和删除都是只能由管理人员(即权限值为1的用户)使用,一般用户只能查看翻阅基本资料。游客可以看到自己团队导游的基本信息,了解他们的特长,管理者也可以合理地分配他们工作,并根据实际修改他们信息。 本窗体中的员工总数按钮可以帮你统计旅行社工作人员的总人数。4、景点基本信息窗口此窗口是本系统最核心的设计,它提供给游客路线的选择和详细资料。你可以通过属性(如:一日游,二日游,三日游,多日游(西部游,边境游,海外游))来选择,还可以通过旅游信息(如:踏青路线,魅力西部,边境风情,海外之旅)来选择。如果游客想更快地查到自己向往的旅游地点,也可以直接输入城市的名称,即可完成路线查找。若没有游客希望的旅游路线,旅行社可以根据游客的要求,并结合导游、景点情况以及开发的前景预测适当新增或修改路线,尽量完成游客的愿望。当然,如果有的路线开发不合理,经过一段时间的试运营后可以删除。此模块通过“游客添加”按钮直接和游客基本信息窗口相连;通过 “团队人数”按钮与游客查找窗口中的团队查找、统计人数相连,只要你输入需要查询的团队名即可知道目前最新的参加人数统计。本窗口中设计了一个Text显示框,显示MSHFlexGrid表中选中的字符,这样便于使用人员在游客添加或查询时直接拷贝路线名称,而不需每次都输入,可以节省时间,避免麻烦和错误。5、游客基本信息窗口和游客查询游客通过了解景点信息窗口中的路线,作出自己的选择,就可以把个人基本信息告诉旅行社以便统一管理和相互的联系。在查询窗口中,旅行社可以通过游客的姓名, 查找到游客的基本信息资料,随时与旅客保持联系;也可以通过游客参加的团队名作出统计,查出相应的游客资料和团队报名的情况,若发现某条线路报名的人数太少,无法组成一个团,那么,旅行社就可以及时与游客取得联系,商量响应处理地方法。旅游信息窗口中使用添加信息功能,必须准确填写姓名、身份证号码、联系电话和参加的团队;ADO控件的最左端按钮可以起到信息存储的功能。游客查询窗口中用一个label控件显示某个团队的参加人数。 6、特价路线窗口本窗口提供给游客最优惠的选择,旅行社每段时间都会推出特价路线便于工薪阶层的选择。本窗口使用OLE(ObjectLinkingandEmbedding的缩写,中文译为对象的链接与嵌入)连接一个Excel表,便于管理人员的修改。管理人员可以双击OLE部分,就可以直接进入Excel表进行修改、打印或其他操作。7、用户权限设定窗口在系统登录的时候,系统已经通过权限判断出该用户是普通用户还是超级用户。普通用户进入该窗口后只拥有修改本身密码的权利,而超级用户就可以享有新建、删除用户以及修改密码的所有权利。 本窗口由3个frame控件的visible属性控制不同的按钮显示不同的界面。当用户的权限为1时,点新建用户按钮,显示frame1即新建用户界面;点击修改密码按钮,显示frame2即修改密码界面;点击删除用户按钮,显示frame3即删除用户界面。 第五章软件编码与测试所谓编码就是把软件设计的结果翻译成计算机可以“理解”的形式—用某种程序设计语言书写的程序。编码的目的是实现人和计算机的通信,指挥计算机按人的意志正确工作。5.1程序编码本系统较有特色的部分就是景点信息窗口和用户权限窗口,其中根据字段的长度来改变MSHFlexGrid中单个网格的长度能使界面更和谐。以下分别为关键的代码:Dimtxt2AsStringDimMyrecAsADODB.RecordsetDimMycnnAsADODB.ConnectionPrivateSubCombo1_Click()grid2.Visible=TrueIfCombo1.Text="踏青路线"OrCombo1.Text="魅力西部"OrCombo1.Text="边境风情"OrCombo1.Text="海外之旅"Then-------------------游客可以通过选择给定选项查找相关信息--------------------sql="select路线,旅游信息from路线where属性='"&Trim(Combo1.Text)&"'"EndIfMyrec.Opensql,Mycnn,adOpenDynamic,adLockOptimistic,adCmdTextAdodc2.RecordSource=sqlAdodc2.RefreshSetgrid2.DataSource=Adodc2grid2.Refresh SelectCaseCombo1.TextCase"踏青路线"Image1.Picture=LoadPicture("E:ProgramFiles毕业设计踏青.jpg")Case"魅力西部"Image1.Picture=LoadPicture("E:ProgramFiles毕业设计旷野中的小屋.jpg")Case"边境风情"Image1.Picture=LoadPicture("E:Program Files毕业设计云中峭壁.jpg")Case"海外之旅"Image1.Picture=LoadPicture("E:ProgramFiles毕业设计约塞米蒂山谷.jpg")EndSelectEndSub PrivateSubCombo1_KeyPress(KeyAsciiAsInteger)IfKeyAscii=13Thengrid2.Visible=True-------------------游客可以自己输入城市名查找相关信息-------------------------sql="select路线,旅游信息from路线where终点='"&Trim(Combo1.Text)&"'or中点站1='"&Trim(Combo1.Text)&"'or中点站2='"&Trim(Combo1.Text)&"'"Myrec.Opensql,Mycnn,adOpenDynamic,adLockOptimistic,adCmdTextAdodc2.RecordSource=sqlAdodc2.RefreshSetgrid2.DataSource=Adodc2Ifcellwidth>grid2.ColWidth(0)Thengrid2.ColWidth(0)=TextWidth(grid2.Text)+500EndIfgrid2.RefreshIfgrid2.Rows=1ThenMsgBox"对不起,我们尚未开通此条线路",vbExclamation,"系统提示"EndIfEndIfEndSub----------------------删除某条线路----------------------------PrivateSubCommand9_Click()Me.grid.Col=1txt2=Me.grid.TextIftxt2=""ThenMsgBox"请选择需要删除的线路"ExitSubEndIfIftxt2<>""ThenSetMyrec=NewADODB.Recordset sql="select*from路线where路线='"&Trim(txt2)&"'"Myrec.Opensql,Mycnn,adOpenDynamic,adLockOptimistic,adCmdTextIfMsgBox("确认删除此条路线吗?",vbYesNo,"系统确认提示")=vbYesThenMyrec.DeleteadAffectCurrentMyrec.CloseMsgBox"此线路已经成功被删除",vbExclamation,"系统提示"EndIfEndIfEndSub-------------------------调整网格大小--------------------------Subchange()'列表框中选中的表赋给记录源Fori=0To7'根据字段名大小调整网格单元宽度grid.ColWidth(i)=TextWidth(grid.Text)+300NextiAdodc3.RefreshAdodc3.Recordset.MoveLastgrid.Rows=Adodc3.Recordset.RecordCount+1Adodc3.Recordset.MoveFirstgrid.Row=0DoWhileNotAdodc3.Recordset.EOFgrid.Row=grid.Row+1Fori=0To7grid.Col=iIfIsNull(Adodc3.Recordset(i).Value)Thengrid.Text=""Elsegrid.Text=Adodc3.Recordset(i).ValueEndIfcellwidth=TextWidth(grid.Text)+400Ifcellwidth>grid.ColWidth(i)Thengrid.ColWidth(i)=cellwidthEndIfNexti Adodc3.Recordset.MoveNextLoopEndSub-----------------------权限窗口------------------------------’Frame1显示新建用户控件,Frame2显示修改密码控件,Frame3显示删除用户控件PrivateSubCommand1_Click()Frame1.Visible=TrueFrame2.Visible=FalseFrame3.Visible=FalseEndSub以上为关键部分的代码。详细代码见附录部分。 5.2安装说明硬件:PC机CPUPⅢ以上,内存128M以上,显卡64M,硬盘20G以上等等。软件:1.Windows2000Server版2.Office97/2000简体中文企业版;3.VisualBasic6.0简体中文版系统运行的软件环境操作系统:Window98/2000数据库:Access2000运行环境:E:ProgramFiles毕业设计 5.3软件测试 无论怎样强调软件的测试的重要性和它对软件可靠性的影响都不过分。测试的目的就是在软件投入生产性运行之前,尽可能多得发现软件中的错误。目前软件测试仍然使保证软件质量的关键步骤,它是对软件规格说明、设计和编码的最后复审。测试的目标或定义:(1)(1) 测试是为了发现程序中的错误而执行程序的过程;(2)(2) 好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;成功的测试是发现了至今为止尚未发现的错误的测试。在旅行社管理系统的很多测试中,我不断地发现自己设计中错误和不完善的地方,然后通过系统的提示再作相应的修改和完善。测试的确是软件开发人员设计的好帮手。 第六章问题解决过程及体会在旅行社管理系统的设计过程中,我遇到了不少的难题。其中一些是因为缺少编程经验而出现的简单错误。而其中也有较为复杂的,通过自己的钻研和同学的帮助得到绝大部分的解决,这对我在编程有一定的帮助和积累经验作用。在旅行社管理系统的完成过程中,首先遇到的就是数据库的建立问题。怎样合理地建表,设定几个字段名称,数据类型以及其他属性需要根据运行功能不断修改完善。其中的路线表原先只有路线,旅游信息,发团日期以及价格。后来,为了实现游客通过输入城市名快速查找相应路线和通过选择旅游属性范围查找相关路线,添加了属性,中点站和终点站字段。还有就是游客表中原先没有备注字段,因为没考虑太多复杂的情况(游客应预先告诉旅行社自己的身体状况和注意事项,这样,在遇到突发事件时才不至于惊慌引起不良的后果)。第二个问题时由于时间的仓促,很多信息的输入没有做好有效字符的限定设置,就显得没有那么地正规。这些问题虽然解决了不少,但我也发现了自身存在的很多问题:首先就是一个系统的需求分析阶段时,数据库的设计占有很重要的位置,要考虑地详细周全就要作好充分的调查,一个设计比较好的数据库可以减少数据的冗余,简化查询的过程和代码,方便查询,还可以提供较好的维护手段。这些在我以后的工作中都很有启发的价值。其次,就是程序设计的模块化的问题,一个好的软件,都将一些较为常用的功能模块化,使用于整个工程,很方便地实现调用,不但减少了代码的重复性,还使程序简洁易懂。这些都是我的程序中有待改善的地方。 第七章致谢本次毕业设计是我第一次独立开发一套比较完整的软件程序,在开发过程中,陈学进老师给了我悉心的指导,让我对面向对象软件设计有了一个较深的认识。在设计的过程中,针对课题,我将四年所学得基础知识及专业知识有机的结合起来,并且在实践中加以应用。程序的设计过程并非一帆风顺,每每出现这样或那样问题时,陈学进老师都会尽力帮助我,使我的设计进程不被打断。在此,我由衷的向陈学进老师表示感谢.同时,还有很多同学也一直帮助我解决不少难题,在此,我对他们也表示最诚挚的谢意。 附录1文献翻译IntroductiontoNetwork SecurityMattCurtinMarch1997ReprintedwiththepermissionofKentInformationServices,Inc.(AlsoavailableinPostscriptandPDFformatsforthosewhoprefer,andnicerhardcopy.)Abstract:Networksecurityisacomplicatedsubject,historicallyonlytackledbywell-trainedandexperiencedexperts.However,asmoreandmorepeoplebecome“wired”,anincreasingnumberofpeopleneedtounderstandthebasicsofsecurityinanetworkedworld.Thisdocumentwaswrittenwiththebasiccomputeruserandinformationsystemsmanagerinmind,explainingtheconceptsneededtoreadthroughthehypeinthemarketplaceandunderstandrisksandhowtodealwiththem.Somehistoryofnetworkingisincluded,aswellasanintroductiontoTCP/IPandinternetworking.Wegoontoconsiderriskmanagement,networkthreats,firewalls,andmorespecial-purposesecurenetworkingdevices.Thisisnotintendedtobea“frequentlyaskedquestions”reference,norisita“hands-on”documentdescribinghowtoaccomplishspecificfunctionality.Itishopedthatthereaderwillhaveawiderperspectiveonsecurityingeneral,andbetterunderstandhowtoreduceandmanageriskpersonally,athome,andintheworkplace.RiskManagement:TheGameofSecurityIt'sveryimportanttounderstandthatinsecurity,onesimplycannotsay``what'sthebestfirewall?''Therearetwoextremes:absolutesecurityandabsoluteaccess.Theclosestwecangettoanabsolutelysecuremachineisoneunpluggedfromthenetwork,powersupply,lockedinasafe,andthrownatthebottomoftheocean.Unfortunately,itisn'tterriblyusefulinthisstate.Amachinewithabsoluteaccessisextremelyconvenienttouse:it'ssimplythere,andwilldowhateveryoutellit,withoutquestions,authorization,passwords,oranyothermechanism.Unfortunately,thisisn'tterriblypractical,either:theInternetisabadneighborhood now,anditisn'tlongbeforesomeboneheadwilltellthecomputertodosomethinglikeself-destruct,afterwhich,itisn'tterriblyusefultoyou.Thisisnodifferentfromourdailylives.Weconstantlymakedecisionsaboutwhatriskswe'rewillingtoaccept.Whenwegetinacaranddrivetowork,there'sacertainriskthatwe'retaking.It'spossiblethatsomethingcompletelyoutofcontrolwillcauseustobecomepartofanaccidentonthehighway.Whenwegetonanairplane,we'reacceptingthelevelofriskinvolvedasthepriceofconvenience.However,mostpeoplehaveamentalpictureofwhatanacceptableriskis,andwon'tgobeyondthatinmostcircumstances.IfIhappentobeupstairsathome,andwanttoleaveforwork,I'mnotgoingtojumpoutthewindow.Yes,itwouldbemoreconvenient,buttheriskofinjuryoutweighstheadvantageofconvenience.Everyorganizationneedstodecideforitselfwherebetweenthetwoextremesoftotalsecurityandtotalaccesstheyneedtobe.Apolicyneedstoarticulatethis,andthendefinehowthatwillbeenforcedwithpracticesandsuch.Everythingthatisdoneinthenameofsecurity,then,mustenforcethatpolicyuniformly.TypesAndSourcesOfNetworkThreatsNow,we'vecoveredenoughbackgroundinformationonnetworkingthatwecanactuallygetintothesecurityaspectsofallofthis.Firstofall,we'llgetintothetypesofthreatsthereareagainstnetworkedcomputers,andthensomethingsthatcanbedonetoprotectyourselfagainstvariousthreats.Denial-of-ServiceDoS(Denial-of-Service)attacksareprobablythenastiest,andmostdifficulttoaddress.Thesearethenastiest,becausethey'reveryeasytolaunch,difficult(sometimesimpossible)totrack,anditisn'teasytorefusetherequestsoftheattacker,withoutalsorefusinglegitimaterequestsforservice.ThepremiseofaDoSattackissimple:sendmorerequeststothemachinethanitcanhandle.Therearetoolkitsavailableintheundergroundcommunitythatmakethisasimplematterofrunningaprogramandtellingitwhichhosttoblastwithrequests.Theattacker'sprogramsimplymakesaconnectiononsomeserviceport,perhapsforgingthepacket'sheaderinformationthatsayswherethepacketcamefrom,andthendroppingtheconnection.Ifthehostisabletoanswer20requestspersecond,andtheattackerissending 50persecond,obviouslythehostwillbeunabletoservicealloftheattacker'srequests,muchlessanylegitimaterequests(hitsonthewebsiterunningthere,forexample).Suchattackswerefairlycommoninlate1996andearly1997,butarenowbecominglesspopular.Somethingsthatcanbedonetoreducetheriskofbeingstungbyadenialofserviceattackinclude·Notrunningyourvisible-to-the-worldserversataleveltooclosetocapacity·Usingpacketfilteringtopreventobviouslyforgedpacketsfromenteringintoyournetworkaddressspace.Obviouslyforgedpacketswouldincludethosethatclaimtocomefromyourownhosts,addressesreservedforprivatenetworksasdefinedinRFC1918 [4],andtheloopbacknetwork(127.0.0.0).·Keepingup-to-dateonsecurity-relatedpatchesforyourhosts'operatingsystems.UnauthorizedAccess``Unauthorizedaccess''isaveryhigh-leveltermthatcanrefertoanumberofdifferentsortsofattacks.Thegoaloftheseattacksistoaccesssomeresourcethatyourmachineshouldnotprovidetheattacker.Forexample,ahostmightbeawebserver,andshouldprovideanyonewithrequestedwebpages.However,thathostshouldnotprovidecommandshellaccesswithoutbeingsurethatthepersonmakingsucharequestissomeonewhoshouldgetit,suchasalocaladministrator.ExecutingCommandsIllicitlyIt'sobviouslyundesirableforanunknownanduntrustedpersontobeabletoexecutecommandsonyourservermachines.Therearetwomainclassificationsoftheseverityofthisproblem:normaluseraccess,andadministratoraccess.Anormalusercandoanumberofthingsonasystem(suchasreadfiles,mailthemtootherpeople,etc.)thatanattackershouldnotbeabletodo.Thismight,then,bealltheaccessthatanattackerneeds.Ontheotherhand,anattackermightwishtomakeconfigurationchangestoahost(perhapschangingitsIPaddress,puttingastart-upscriptinplacetocausethemachinetoshutdowneverytimeit'sstarted,orsomethingsimilar).Inthiscase,theattackerwillneedtogainadministratorprivilegesonthehost. ConfidentialityBreachesWeneedtoexaminethethreatmodel:whatisitthatyou'retryingtoprotectyourselfagainst?Thereiscertaininformationthatcouldbequitedamagingifitfellintothehandsofacompetitor,anenemy,orthepublic.Inthesecases,it'spossiblethatcompromiseofanormaluser'saccountonthemachinecanbeenoughtocausedamage(perhapsintheformofPR,orobtaininginformationthatcanbeusedagainstthecompany,etc.)Whilemanyoftheperpetratorsofthesesortsofbreak-insaremerelythrill-seekersinterestedinnothingmorethantoseeashellpromptforyourcomputerontheirscreen,therearethosewhoaremoremalicious,aswe'llconsidernext.(Additionally,keepinmindthatit'spossiblethatsomeonewhoisnormallyinterestedinnothingmorethanthethrillcouldbepersuadedtodomore:perhapsanunscrupulouscompetitoriswillingtohiresuchapersontohurtyou.)DestructiveBehaviorAmongthedestructivesortsofbreak-insandattacks,therearetwomajorcategories.DataDiddling.Thedatadiddlerislikelytheworstsort,sincethefactofabreak-inmightnotbeimmediatelyobvious.Perhapshe'stoyingwiththenumbersinyourspreadsheets,orchangingthedatesinyourprojectionsandplans.Maybehe'schangingtheaccountnumbersfortheauto-depositofcertainpaychecks.Inanycase,rareisthecasewhenyou'llcomeintoworkoneday,andsimplyknowthatsomethingiswrong.Anaccountingproceduremightturnupadiscrepancyinthebooksthreeorfourmonthsafterthefact.Tryingtotracktheproblemdownwillcertainlybedifficult,andoncethatproblemisdiscovered,howcananyofyournumbersfromthattimeperiodbetrusted?Howfarbackdoyouhavetogobeforeyouthinkthatyourdataissafe?DataDestruction.Someofthoseperpetrateattacksaresimplytwistedjerkswholiketodeletethings.Inthesecases,theimpactonyourcomputingcapability--andconsequentlyyourbusiness--canbenothinglessthanifafireorotherdisastercausedyourcomputingequipmenttobecompletelydestroyed. WhereDoTheyComeFrom?How,though,doesanattackergainaccesstoyourequipment?Throughanyconnectionthatyouhavetotheoutsideworld.ThisincludesInternetconnections,dial-upmodems,andevenphysicalaccess.(Howdoyouknowthatoneofthetempsthatyou'vebroughtintohelpwiththedataentryisn'treallyasystemcrackerlookingforpasswords,dataphonenumbers,vulnerabilitiesandanythingelsethatcangethimaccesstoyourequipment?)Inordertobeabletoadequatelyaddresssecurity,allpossibleavenuesofentrymustbeidentifiedandevaluated.Thesecurityofthatentrypointmustbeconsistentwithyourstatedpolicyonacceptablerisklevels.LessonsLearnedFromlookingatthesortsofattacksthatarecommon,wecandivinearelativelyshortlistofhigh-levelpracticesthatcanhelppreventsecuritydisasters,andtohelpcontrolthedamageintheeventthatpreventativemeasureswereunsuccessfulinwardingoffanattack.HopeyouhavebackupsThisisn'tjustagoodideafromasecuritypointofview.Operationalrequirementsshoulddictatethebackuppolicy,andthisshouldbecloselycoordinatedwithadisasterrecoveryplan,suchthatifanairplanecrashesintoyourbuildingonenight,you'llbeabletocarryonyourbusinessfromanotherlocation.Similarly,thesecanbeusefulinrecoveringyourdataintheeventofanelectronicdisaster:ahardwarefailure,orabreakinthatchangesorotherwisedamagesyourdata.Don'tputdatawhereitdoesn'tneedtobeAlthoughthisshouldgowithoutsaying,thisdoesn'toccurtolotsoffolks.Asaresult,informationthatdoesn'tneedtobeaccessiblefromtheoutsideworldsometimesis,andthiscanneedlesslyincreasetheseverityofabreak-indramatically.AvoidsystemswithsinglepointsoffailureAnysecuritysystemthatcanbebrokenbybreakingthroughanyonecomponentisn'treallyverystrong.Insecurity,adegreeofredundancyisgood,andcanhelpyouprotectyourorganizationfromaminorsecuritybreachbecomingacatastrophe. StaycurrentwithrelevantoperatingsystempatchesBesurethatsomeonewhoknowswhatyou'vegotiswatchingthevendors'securityadvisories.Exploitingoldbugsisstilloneofthemostcommon(andmosteffective!)meansofbreakingintosystems.WatchforrelevantsecurityadvisoriesInadditiontowatchingwhatthevendorsaresaying,keepaclosewatchongroupslikeCERTandCIAC.Makesurethatatleastoneperson(preferablymore)issubscribedtothesemailinglistsHavesomeoneonstaffbefamiliarwithsecuritypracticesHavingatleastonepersonwhoischargedwithkeepingabreastofsecuritydevelopmentsisagoodidea.Thisneednotbeatechnicalwizard,butcouldbesomeonewhoissimplyabletoreadadvisoriesissuedbyvariousincidentresponseteams,andkeeptrackofvariousproblemsthatarise.Suchapersonwouldthenbeawiseonetoconsultwithonsecurityrelatedissues,ashe'llbetheonewhoknowsifwebserversoftwareversionsuch-and-suchhasanyknownproblems,etc.Thispersonshouldalsoknowthe``dos''and``don'ts''ofsecurity,fromreadingsuchthingsasthe``SiteSecurityHandbook.''[5]FirewallsAswe'veseeninourdiscussionoftheInternetandsimilarnetworks,connectinganorganizationtotheInternetprovidesatwo-wayflowoftraffic.Thisisclearlyundesirableinmanyorganizations,asproprietaryinformationisoftendisplayedfreelywithinacorporateintranet(thatis,aTCP/IPnetwork,modeledaftertheInternetthatonlyworkswithintheorganization).Inordertoprovidesomelevelofseparationbetweenanorganization'sintranetandtheInternet,firewallshavebeenemployed.Afirewallissimplyagroupofcomponentsthatcollectivelyformabarrierbetweentwonetworks.Anumberoftermsspecifictofirewallsandnetworkingaregoingtobeusedthroughoutthissection,solet'sintroducethemalltogether. Bastionhost.Ageneral-purposecomputerusedtocontrolaccessbetweentheinternal(private)network(intranet)andtheInternet(oranyotheruntrustednetwork).Typically,thesearehostsrunningaflavoroftheUnixoperatingsystemthathasbeencustomizedinordertoreduceitsfunctionalitytoonlywhatisnecessaryinordertosupportitsfunctions.Manyofthegeneral-purposefeatureshavebeenturnedoff,andinmanycases,completelyremoved,inordertoimprovethesecurityofthemachine.Router.Aspecialpurposecomputerforconnectingnetworkstogether.Routersalsohandlecertainfunctions,suchasrouting,ormanagingthetrafficonthenetworkstheyconnect.AccessControlList(ACL).Manyroutersnowhavetheabilitytoselectivelyperformtheirduties,basedonanumberoffactsaboutapacketthatcomestoit.Thisincludesthingslikeoriginationaddress,destinationaddress,destinationserviceport,andsoon.Thesecanbeemployedtolimitthesortsofpacketsthatareallowedtocomeinandgooutofagivennetwork.DemilitarizedZone(DMZ).TheDMZisacriticalpartofafirewall:itisanetworkthatisneitherpartoftheuntrustednetwork,norpartofthetrustednetwork.But,thisisanetworkthatconnectstheuntrustedtothetrusted.TheimportanceofaDMZistremendous:someonewhobreaksintoyournetworkfromtheInternetshouldhavetogetthroughseverallayersinordertosuccessfullydoso.ThoselayersareprovidedbyvariouscomponentswithintheDMZ.Proxy.Thisistheprocessofhavingonehostactinbehalfofanother.AhostthathastheabilitytofetchdocumentsfromtheInternetmightbeconfiguredasaproxyserver,andhostontheintranetmightbeconfiguredtobeproxyclients.Inthissituation,whenahostontheintranetwishestofetchthe webpage,forexample,thebrowserwillmakeaconnectiontotheproxyserver,andrequestthegivenURL.Theproxyserverwillfetchthedocument,andreturntheresulttotheclient.Inthisway,allhostsontheintranetareabletoaccessresourcesontheInternetwithouthavingtheabilitytodirecttalktotheInternet.TypesofFirewallsTherearethreebasictypesoffirewalls,andwe'llconsidereachofthem.ApplicationGatewaysThefirstfirewallswereapplicationgateways,andaresometimesknownasproxygateways.Thesearemadeupofbastionhoststhatrunspecialsoftwaretoactasaproxyserver.ThissoftwarerunsattheApplicationLayerofouroldfriendtheISO/OSIReferenceModel,hencethename.Clientsbehindthefirewallmustbeproxitized(thatis,mustknowhowtousetheproxy,andbeconfiguredtodoso)inordertouseInternetservices.Traditionally,thesehavebeenthemostsecure,becausetheydon'tallowanythingtopassbydefault,butneedtohavetheprogramswrittenandturnedoninordertobeginpassingtraffic.Figure5:Asampleapplicationgateway Thesearealsotypicallytheslowest,becausemoreprocessesneedtobestartedinordertohavearequestserviced.Figure 5showsaapplicationgateway.PacketFilteringPacketfilteringisatechniquewherebyroutershaveACLs(AccessControlLists)turnedon.Bydefault,arouterwillpassalltrafficsentit,andwilldosowithoutanysortofrestrictions.EmployingACLsisamethodforenforcingyoursecuritypolicywithregardtowhatsortsofaccessyouallowtheoutsideworldtohavetoyourinternalnetwork,andviceversa.Thereislessoverheadinpacketfilteringthanwithanapplicationgateway,becausethefeatureofaccesscontrolisperformedatalowerISO/OSIlayer(typically,thetransportorsessionlayer).Duetotheloweroverheadandthefactthatpacketfilteringisdonewithrouters,whicharespecializedcomputersoptimizedfortasksrelatedtonetworking,apacketfilteringgatewayisoftenmuchfasterthanitsapplicationlayercousins.Figure 6showsapacketfilteringgateway.Becausewe'reworkingatalowerlevel,supportingnewapplicationseithercomesautomatically,orisasimplematterofallowingaspecificpackettypetopassthroughthegateway.(Notthatthepossibilityofsomethingautomaticallymakesitagoodidea;openingthingsupthiswaymightverywellcompromiseyourlevelofsecuritybelowwhatyourpolicyallows.)Thereareproblemswiththismethod,though.Remember,TCP/IPhasabsolutelynomeansofguaranteeingthatthesourceaddressisreallywhatitclaimstobe.Asaresult,wehavetouselayersofpacketfiltersinordertolocalizethetraffic.Wecan'tgetallthewaydowntotheactualhost,butwithtwolayersofpacketfilters,wecandifferentiatebetweenapacketthatcamefromtheInternetandonethatcamefromourinternalnetwork.Wecanidentifywhichnetworkthepacketcamefromwithcertainty,butwecan'tgetmorespecificthanthat.HybridSystemsInanattempttomarrythesecurityoftheapplicationlayergatewayswiththeflexibilityandspeedofpacketfiltering,somevendorshavecreatedsystemsthatusetheprinciplesofboth.Figure6:Asamplepacketfilteringgateway Insomeofthesesystems,newconnectionsmustbeauthenticatedandapprovedattheapplicationlayer.Oncethishasbeendone,theremainderoftheconnectionispasseddowntothesessionlayer,wherepacketfilterswatchtheconnectiontoensurethatonlypacketsthatarepartofanongoing(alreadyauthenticatedandapproved)conversationarebeingpassed.Otherpossibilitiesincludeusingbothpacketfilteringandapplicationlayerproxies.ThebenefitshereincludeprovidingameasureofprotectionagainstyourmachinesthatprovideservicestotheInternet(suchasapublicwebserver),aswellasprovidethesecurityofanapplicationlayergatewaytotheinternalnetwork.Additionally,usingthismethod,anattacker,inordertogettoservicesontheinternalnetwork,willhavetobreakthroughtheaccessrouter,thebastionhost,andthechokerouter.ConclusionsSecurityisaverydifficulttopic.Everyonehasadifferentideaofwhat``security''is,andwhatlevelsofriskareacceptable.Thekeyforbuildingasecurenetworkistodefinewhatsecuritymeanstoyourorganization.Oncethathasbeendefined,everythingthatgoesonwiththenetworkcanbeevaluatedwithrespecttothatpolicy.Projectsandsystemscanthenbebrokendownintotheircomponents,anditbecomesmuchsimplertodecidewhetherwhatisproposedwillconflictwithyoursecuritypoliciesandpractices.Securityiseverybody'sbusiness,andonlywitheveryone'scooperation,anintelligentpolicy,andconsistentpractices,willitbeachievable.References 1TheNewLexiconWebster'sEncyclopedicDictionaryoftheEnglishLanguage.NewYork:Lexicon.2R.T.Morris,1985.AWeaknessinthe4.2BSDUnixTCP/IPSoftware.ComputingScienceTechnicalReportNo.117,AT&TBellLaboratories,MurrayHill,NewJersey.3S.M.Bellovin.SecurityProblemsintheTCP/IPProtocolSuite.ComputerCommunicationReview,Vol.19,No.2,pp.32-48,April1989.4Y.Rekhter,R.Moskowitz,D.Karrenberg,G.deGroot,E.Lear,``AddressAllocationforPrivateInternets.''RFC1918.5J.P.Holbrook,J.K.Reynolds.``SiteSecurityHandbook.''RFC1244.6M.Curtin,``SnakeOilWarningSigns:EncryptionSoftwaretoAvoid.''USENETFrequentlyAskedQuestionsFile. 对网络安全的介绍随着肯特信息Services公司的批准重印(在为愿意和好的为作硬拷贝的那些附言和PDF格式中也可用.)摘要:网络安全是一复杂科目,在历史上仅由受过良好训练并且有经验的专家处理。但是,当更越来越多人们变得"有线的"时,需要懂得在世界联网中安全基础设备的人数在不断增加。这文件为基础电脑用户和信息系统经理写作,解释那些读完在市场中天花乱坠的广告宣传、懂得风险和怎样处理他们时需要的概念。一些把联网的历史以及一对TCP/IP和internetworking的介绍被包括。我们接着又考虑风险管理,网络威胁,防火墙和更多特殊目的安全网络化装置。 这个作为经常问问题的参考资料,也不是有关描绘怎样完成特有功能的人手文件。总体上说,希望读者将有关安全更广泛透视,在家里和在工作场所中更好些懂得怎样单独减少和管理危险。风险管理:安全对策了解安全,并不能简单说什么是最好的防火墙,这点是非常重要的吗。有二极端:绝对安全和绝对接入。我们能得到的绝对安全机器是从网络,电源除去阻碍,锁在保险柜中和扔到海洋的底部。不幸得是,它在这状态中不是非常的有用。一台绝对接入机器是极其方便使用:将做你告诉他的任何事而不会提出问题,授权,密码或者任何另一机械装置的问题。不幸的是,这个也不是很实际:现在,因特网是一个坏邻居,不久一些笨蛋告诉电脑做自毁之类的事。在那个以后它对你就不是非常有用了。这个和我们日常生活不同.我们不断作对我们愿意接受的风险作出决定。当我们坐进一辆小汽车和驾驶去工作的时候,我们就存在某些风险。某样东西完全失去控制而使我们成为部分在公路上事故将是可能的。当我们上了一架飞机的时候,我们接受风险的水平涉及的是方便的价格.但是,绝大部分人们有一可接受风险的精神描述是和将不在绝大部分情况下超出。如果我恰好是家在楼上的并想要动身去工作,我将不从窗户里面跳.是的,它将是更方便,但是伤害的风险超过方便的优势重.每一个组织需要为自己定义,在总安全和总接入两极端之间哪里才是他们需要是的。政策需要清晰地说出这个然后下定义怎样将那个练习加强。一切以安全名义做的事必须始终如一地实施政策。 网络威胁的类型和来源现在,我们已包括充足关于网络化的背景信息,我们事实上能进入这个安全方面的。首先,我们要知道联网电脑受到的威胁的类型。然后就能够实施某些措施保护自己免受各种各样威胁的伤害的。拒绝服务DoS(拒绝服务)攻击大概是最具威胁性和最困难跟踪地址的。他们具有威胁性,因为他们是非常容易开始,很难(有时不可能)跟踪,它不容易拒绝攻击者的请求,也无法拒绝合理请求服务。一次DoS攻击的前提很简单:发送过多请求使机器无法处理。在社区获得的这些工具使运行一个程序和告诉它响应哪一个作主机的要求成为件简单的事。攻击者的程序由简单一些服务港口连接起来,或许多半伪造含有数据包从何而来的数据包标题信息,然后就断开连接。如果主机能每秒回答20个请求,那么攻击者每秒发送50个请求,显然主机将是不能响应攻击者的全部请求,合法请求少更得多的(在那里例如跑步网站上一击)。这样攻击在1996后期和1997年早期很普遍,但是现在变得不那么流行。减少拒绝服务攻击危险的事项包括:利用数据包过滤器去阻隔明显伪造的数据包,使其不能进入你的网络地址空间。明显伪造的数据包包括要求按照RFC1918[4]和loopback网络(127.0.0.0)定义从你自己的主机服务个人网络的地址。保证你的主机操作系统上有关安全的补丁是最近最新的。非授权访问 非授权访问是一非常高水平的术语,涉及许多不同类型的攻击。这些攻击的目标是要访问一些你的机器不应该提供给攻击者的资源。例如,一个主机可以是一网络服务器,应该为任何人提供请求的网页。但是,主机不应该提供外壳命令访问而不确定提出请求的人是否如本地管理人员那样是应该得到它的人。非法地执行命令显然一个不知名和不能信任的人能执行在你的服务器机器上命令是令人讨厌的。安全问题主要分两类:正常用户访问和管理人员访问。一个正常用户在系统里能做许多攻击者不能做的事(例如阅读文件,和他们通信等等),一个攻击者不应该对能能的做.然后,这个或许是一个攻击者需要的所有访问;另一方面,攻击者希望配置改变一台主机(也许交换它的IP地址,也许适当加入个启动设置当机器每次启动时就马上关闭,或者其他类似的事).在这个情况中,攻击者将需要获得在主机上管理人员特权。机密体制违反我们需要检查威胁模式:什么才是你设法保护你自己免受什么的伤害该防范的东西?有确定信息,如果它落入一个竞争者,一个敌人或者公众的人手,是很有破坏性的。在这些情况中,在机器上一个正常用户帐户的妥协足够造成破坏(也许是在PR或者公司信息的形式中的损坏)是可能的。在很多这些种非法闯入的犯罪者仅仅是刺激的搜寻者,他们只对在他们的屏幕上看见你电脑的一个外壳提示符有兴趣。接下来我们将考虑含有恶意的攻击(另外,牢记在一般情况下是对更比激动更多没有什么有兴趣某人能被说服做更多的是可能的: 也许一个不择手段竞争者是愿意的雇佣这样一人伤害你)有破坏性行为在有破坏性类型的非法闯入和攻击中间,有二重要项目.数据欺骗数据欺骗是可能最糟糕的类型,因为非法闯入的事实不会立即是显现出来。也许他在玩弄你的空白表格程序中数,或者在你的预测和计划中改变日期,或许他改变了你汽车存款支票的帐号。不管怎样,工作时很容易就知道某些东西是错误的情况是很少的。会计在帐簿中发现错误的事实大概也在三四个月之后了。试图追查问题将会很困难,而问题一旦被发现,那段时间内,你的所有数据如何能够受信任呢?数据破坏那些闯入的攻击是喜欢删除东西。在这些情况中,对你的计算性能和此后的工作的冲击不比一场大火或者另一灾难造成你的设备破坏来得小。它们从哪里来得呢?情况怎样,尽管,一个攻击者通过你与外界的任何连接可以获得访问你的装备的权利吗?这个包含因特网连接,调制解调器拨号上网,甚至是物理访问。(你是怎么知道你请来帮助数据登录的临时雇员不是真正的能找到密码,数据电话号码,系统脆弱性和其他任何东西进入你电脑系统的解密高手)为了能确保地址安全,所有可能的入口地方必须验证和评估,入口点的安全必须和你可接受风险水平所设定的规则一致。需要了解的知识从一般攻击的种类来看, 我们能预想相对说来高水平练习的短清单,这些高水平实践能够帮助我们阻止安全灾难和在不能成功避免一次攻击的时候控制损坏的程度。希望你有备份这个从安全的角度来看不仅仅是一个好想法,操作上的要求应该提出备份方针,应该协调好灾难防御计划,就像某天晚上一架飞机撞进你的工作大楼,你将能继续在另一场所进行你的生意。同样,备份在硬件失败或者非法闯入者改变或破坏你的数据等电子灾难后恢复数据方面是有用的。不在不需要的地方存放数据虽然这个应该不成问题,大多数人也都不会发生。但是,有时候不需要从外部世界访问信息,因为这样就戏剧性增加了非法闯入的机会。避免因单个错误而引起系统失败任何安全系统不是非常强大,它们会因为任何一个模块备攻破而被破坏。冗余度在安全保护也是好的,它可以帮助你的组织避免因为一个小的破坏而演变成一个大的灾难。保证即使更新有关操作系统的补丁保证要看销售商安全报告,发掘缺陷也是一个最普通(最有效)闯入系统的方法。留心有关的安全报告此外,注意销售商说的东西,密切注意像CERT(计算机网络紧急响应队)和CIAC组。确保至少一人(最好地更多)在这些邮件名单列表上签名。维护人员熟悉安全实例 保证至少有一人能跟上安全技术的发展是一个好的想法。他不需要是一个技术奇才,但是他应该能确定单独读懂许多相关程序员的咨询期刊,和继续了解出现的各种各样的问题。这样一个人以后将成为处理安全相关问题的高手。因为他将成为一个了解如果网络服务器软件版本出现某些问题的人,只要这些问题是已发现的。这个人应该从阅读完全安全手册这样的东西解释为安全的"dos"和"don'ts".[5]防火墙当我们已经进入因特网和相似网络的讨论时就提供把一组织连接到因特网的双向通信业务内联网是任意时,很多组织明确地表示不满(也就是说TCP/IP网络,仅在企业内部起作用的内特网模型)防火墙被使用是为了提供某些企业内联网和因特网之间分开的界线,防火墙是些处在两网络之间的汇集形成一个屏障的简单元件组。许多防火墙和网络的特别术语将在文本中被运用,那么让我们来一一介绍它们。堡垒机一台多用途的电脑过去经常控制在内部(私有)网络(企业网)和因特网(或者任何另一不受信任的网络)之间访问。典型地,这些主机运行的是Unix操作系统的一个衍生系统,系统为了支持它的功能所需要的东西由于为了减少它的操作幸而由顾客的具体要求自定义。为了提高机器的安全功能,很多多用途的特征被很多情况下被移除。路由器 一台特殊目的电脑为了把联网连接起来,路由器也处理某些例如路由选择或者控制有关连接网络的通信业务功能。访问控制列表(ACL)很多路由器现在有选择地完成它们运行的能力,这些能力建立在接收到的数据包的基础上的。数据包包含的是像发源地址、目的地地址、目的地服务端口等等之类。这些能被应用于限制已被允许接收和发出信息的已知网络的数据包的种类。非军事区(DMZ)非军事区是一防火墙的关键部分:它既不属于不受信任的网络也不属于受信任的网络的一个网络,但是这个网络连接着不受信任和受信任的网络。非军事区的重要性是巨大的:某各通过因特网闯入你的网络的人必须通过好多层才能成功闯入,那些层由非军事区以内各种各样成分提供代理这个是主机代表另一台机器运行的过程,含有从因特网发送文件能力的主机被配置为一代理服务器,有关企业内联网的主机被配置为代理客户。在这个环境中,当内联网中的一台主机希望读取网页的时候,例如,浏览器将建立与代理服务器的连接,然后请求需要的URL。代理服务器将访问文件,把结果返回客户。这样,内联网上的所有主机不需要有直接从因特网上读取资料的能力页能访问因特网上的资源。防火墙的类型有三种基本类型的防火墙,我们将一一介绍它们。应用网关 第一道防火墙是应用网关有时候也称作代理网关。这些是由运行特殊软件的堡垒机构成的代理服务器。这个软件在我们的老朋友ISO/OSI参考模型的应用层上运行,因此得名。为了发挥因特网服务,在防火墙后面客户一定是了解代理机的(也就是说知道怎样使用代理机和如何被配置那样)。传统地来看,这些已经很安全了,因为它们不允许默认任何通路,但是,为了开始通过通信业务需要编写和打开程序。这些很明显是最慢的。因为更多过程开始应该是为了请求服务。图5展示应用网关。数据包过滤数据包过滤是一项技术,它通过路由器打开访问控制列表。一个路由器将缺省通过向所有的通信线路发送和将没有任何限制那样做。使用访问控制列表是一种能加强你的安全策略的方法,它涉及允许外面世界访问你内部网络的种类和通行证。数据包过滤比应用网关的开销小,因为存储控制的特征在ISO/OSI中的最低层被履行,(典型说是传输层或会话层)。由于较低的开销和数据包过滤需要和路由器共同工作的事实作为有关于网络任务优化方面的专用计算机,数据包过滤网关经常比它的应用层兄弟速度快得多。图6显示一数据包过滤网关。因为我们钻研处在较低水平,支援新的应用不是自动到来就是允许一个特殊数据包类型通过网关,这样,简单的事(不是说某些东西的可能性自动使它成为一个好想法)这种方式打开东西可能很容易在你的政策允许下泄露你安全的级别水平。这种方法尽管有问题。但记住,TCP/IP 完全没有办法确保来源地址确实是它声称的那个。因此,为了局部通信业务,我们不得不使用数据包过滤层。我们不能跟踪到所有的真实主机,但是,经过两层数据包过滤器,我们能区分该数据包,是来自因特网还是来自我们的内部网络。我们能辨认出数据包确定来自哪一个网络但是我们不能再知道些更具体的了。混合系统试图把应用层网关的安全性和灵活性同数据包过滤器速度结合起来,一些销售商已建立使用两者的原则的系统。在这些系统中,新的连接必须得到应用层的肯定和验证。一旦通过以后,连接的剩下部分就被往下传到会话层。会话层数据包过滤器注意连接,保证仅数据包被通过,它们是部分(已经得到肯定和验证了的)的通信。其它可能性包含同时使用数据包过滤和应用层代理。这里好处包含提供一个避免你的机器损害的保护措施,其向因特网提供服务(例如一公共网服务器),而且提供面向内部网络应用层网关的安全。此外,使用这方法,一个为了得到内部网络服务的攻击者将不得不闯过访问路由器,堡垒主机和扼流路由器。结论安全问题是一个非常难的主题。每个人对安全和可接受的风险水平都有不同的见解。建立一个安全网络的关键是要要求什么样的安全适合你的组织。一旦它已经被定义,一切与网络有关的都会根据那个定义被评价,然后工程和系统被分为它们的成分,它将更简单地确定是否被建议的东西会与你的安全策略和实践产生冲突。安全是每个人的事情,只有人与人之间合作,加上高明的政策和始终如一地实施,才能使它完成。 附录2源代码1.1.登录窗口PublicpowerAsIntegerDimMycnnAsADODB.ConnectionDimMyrecAsADODB.RecordsetDimstrAsStringDimsqlAsString PrivateSubCom退出_Click()UnloadMeEndSub PrivateSubForm_Load()str="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=E:ProgramFiles毕业设计clue.mdb;PersistSecurityInfo=False" SetMycnn=NewADODB.ConnectionMycnn.Openstr'初始化EndSub PrivateSubLabel3_Click()sql="select用户from密码"SetMyrec=NewADODB.RecordsetMyrec.Opensql,Mycnn,adOpenDynamic,adLockOptimistic,adCmdText DimflagAsIntegerflag=0DoWhileNotMyrec.EOFIfTrim(Myrec!用户)=Tex用户.TextThenflag=1EndIfMyrec.MoveNextLoopMyrec.Close'判断用户是否存在IfTex用户.Text=""OrTex密码.Text=""ThenLabel4.Caption="输入完整信息"ExitSubEndIf Ifflag<>1Then Label4.Caption="用户不存在"Tex用户.Text=""Tex密码.Text=""Tex用户.SetFocusExitSubEndIf Myrec.Open"select*from密码where用户='"&Trim(Tex用户.Text)&"'",Mycnn,adOpenDynamic,adLockOptimistic,adCmdTextIfMyrec!密码=Tex密码.TextThenpower=Val(Myrec!权限)Ifpower=0Thenquanxian.Command1.Enabled=Falsequanxian.Command8.Enabled=Falsedaoyou.c添加.Enabled=Falsedaoyou.c删除.Enabled=Falsedaoyou.Frame1.Enabled=Falsedaoyou.Frame2.Enabled=Falsedaoyou.Command5.Caption="第一位导游"jingdian.Command3.Enabled=Falsejingdian.Command6.Enabled=Falsejingdian.Command9.Enabled=Falsetejia.OLE1.Enabled=FalseElsequanxian.Command1.Enabled=True quanxian.Command8.Enabled=Truedaoyou.c添加.Enabled=Truedaoyou.c删除.Enabled=Truedaoyou.Frame1.Enabled=Truedaoyou.Frame2.Enabled=Truedaoyou.Command5.Caption="保存"jingdian.Command3.Enabled=Truejingdian.Command6.Enabled=Truejingdian.Command9.Enabled=Truetejia.OLE1.Enabled=TrueEndIfmain.ShowUnloadMeMyrec.CloseElseLabel4.Caption="密码错误,请重新输入"Tex密码.Text=""Tex密码.SetFocusEndIf'判断用户与密码是否吻合EndSub PrivateSubTex密码_KeyPress(KeyAsciiAsInteger)IfKeyAscii=13ThenLabel3_ClickEndIf EndSub2、主界面PrivateSubclock(dt)t$=Time$hr=Val(Left(t$,2))+dtIfhr>=24Thenhr=hr-24t1$=str$(hr)t2$=Mid$(t$,3,6)Label1.Caption=t1$+t2$EndSubPrivateSubForm_Load()Combo1.AddItem"北京"Combo1.AddItem"东京"Combo1.AddItem"纽约"Combo1.AddItem"伦敦"Y$=Year(Now)m$=Month(Now)d$=Day(Now)Label2.Caption="今天是"+Y$+"年"+m$+"月"+d$+"号"EndSub PrivateSubLabel4_Click()UnloadMeUnloadjingdianstart.Show EndSub PrivateSubopt1_Click()w$=Weekday(Now-1)Label2.Caption="今天是星期"+w$IfLabel2.Caption="今天是星期7"ThenLabel2.Caption="今天是星期天"EndIfEndSub PrivateSubopt2_Click()Y$=Year(Now)m$=Month(Now)d$=Day(Now)Label2.Caption="今天是"+Y$+"年"+m$+"月"+d$+"号"EndSub PrivateSubTimer1_Timer()SelectCaseCombo1.TextCase"芜湖"clock(0)Case"北京"clock(0)Case"东京"clock(1) Case"纽约"clock(11)Case"伦敦"clock(16)CaseElseCombo1.Text="芜湖"EndSelectEndSub3.导游窗口DimuserrecAsADODB.RecordsetDimuserconAsADODB.ConnectionDimusercnnAsString PrivateSubCommand1_Click()Unloaddaoyoudaoyou.HideLoadmainmain.ShowEndSub PrivateSubCommand2_Click()Text4.Text=Adodc1.Recordset.RecordCountEndSubPrivateSubCommand3_Click()IfNotAdodc1.Recordset.BOFThen Adodc1.Recordset.MovePreviousEndIfIfText1.Text=""ThenAdodc1.Recordset.MoveFirstEndIfEndSub PrivateSubCommand4_Click()IfNotAdodc1.Recordset.EOFThenAdodc1.Recordset.MoveNextEndIfIfText1.Text=""ThenAdodc1.Recordset.MoveLastEndIfEndSub PrivateSubCommand5_Click()Adodc1.Recordset.MoveFirstEndSubPrivateSubCommand6_Click()Adodc1.Recordset.MoveLastEndSub PrivateSubc删除_Click()DimykAsADODB.Recordset Setyk=Adodc1.RecordsetIfText4.Text=""AndText5.Text=""AndText6.Text=""ThenExitSubElseIfMsgBox("确定删除这条记录吗?",36,"删除记录")=6Thenyk.Deleteyk.MoveNextIfyk.EOFThenyk.MovePreviousEndIfEndIfEndIfEndSubPrivateSubc添加_Click()Setuserrec=Adodc1.RecordsetIfText1.Text=""OrText3.Text=""OrText5.Text=""OrText6.Text=""ThenMsgBox("请输入完整数据!")Elsestr1$="输入新内容"str2$=MsgBox(str1$,vbOKCancel,"添加导游资料")Ifstr2$=vbOKThenText1.SetFocususerrec.AddNewEndIf EndIfEndSub PrivateSubForm_Load()Combo1.AddItem"男"Combo1.AddItem"女"Combo1.Text="男"Ifpower=0Thendaoyou.c添加.Enabled=Falsedaoyou.c删除.Enabled=Falsedaoyou.Frame1.Enabled=Falsedaoyou.Frame2.Enabled=Falsedaoyou.Command5.Caption="第一位导游"Elsedaoyou.c添加.Enabled=Truedaoyou.c删除.Enabled=Truedaoyou.Frame1.Enabled=Truedaoyou.Frame2.Enabled=Truedaoyou.Command5.Caption="保存"EndIfEndSub4.游客窗口DimuserrecAsADODB.RecordsetDimuserconAsADODB.ConnectionDimusercnnAsString PrivateSubCommand1_Click()Setuserrec=Adodc1.RecordsetIfText1.Text=""OrText4.Text=""OrText5.Text=""OrText6.Text=""ThenMsgBox("请输入完整数据!")Elsestr1$="输入新内容"str2$=MsgBox(str1$,vbOKCancel,"添加游客资料")Ifstr2$=vbOKThenText1.SetFocususerrec.AddNewEndIfEndIfEndSub PrivateSubCommand2_Click()DimykAsADODB.RecordsetSetyk=Adodc1.RecordsetIfText4.Text=""AndText5.Text=""AndText6.Text=""ThenExitSubElseIfMsgBox("确定删除这条记录吗?",36,"删除记录")=6Thenyk.Deleteyk.MoveNext Ifyk.EOFThenyk.MovePreviousEndIfEndIfEndIfEndSub PrivateSubCommand3_Click()UnloadyoukeLoadyoukechazhaoyoukechazhao.ShowEndSub PrivateSubCommand4_Click()Unloadyoukeyouke.HideLoadmainmain.ShowEndSub PrivateSubCommand6_Click()UnloadyoukeLoadjingdianjingdian.ShowEndSub PrivateSubForm_Load()Combo1.AddItem"男"Combo1.AddItem"女"Combo1.Text="女"EndSub PrivateSubText2_KeyPress(KeyAsciiAsInteger)IfKeyAscii<>45ThenIfKeyAscii<48OrKeyAscii>57ThenMsgBox("联系电话输入错误")EndIfEndIfEndSub PrivateSubText4_KeyPress(KeyAsciiAsInteger)IfKeyAscii<48OrKeyAscii>57ThenMsgBox("身份证号输入错误")EndIfEndSub5.景点窗口Dimtxt2AsStringDimMyrecAsADODB.RecordsetDimMycnnAsADODB.Connection PrivateSubCombo1_Click()grid2.Visible=TrueIfCombo1.Text="踏青路线"OrCombo1.Text="魅力西部"OrCombo1.Text="边境风情"OrCombo1.Text="海外之旅"Thensql="select路线,旅游信息from路线where属性='"&Trim(Combo1.Text)&"'"EndIfAdodc2.CursorLocation=adUseClientAdodc2.CursorLocation=adUseClientAdodc2.LockType=adLockReadOnlyAdodc2.CommandType=adCmdTextAdodc2.CursorType=adOpenDynamicAdodc2.RecordSource=sqlAdodc2.RefreshSetgrid2.DataSource=Adodc2 Ifcellwidth>grid2.ColWidth(0)Thengrid2.ColWidth(0)=TextWidth(grid2.Text)+500EndIfgrid2.Refresh SelectCaseCombo1.TextCase"踏青路线"Image1.Picture=LoadPicture("E:ProgramFiles毕业设计踏青.jpg")Case"魅力西部" Image1.Picture=LoadPicture("E:ProgramFiles毕业设计旷野中的小屋.jpg")Case"边境风情"Image1.Picture=LoadPicture("E:ProgramFiles毕业设计云中峭壁.jpg")Case"海外之旅"Image1.Picture=LoadPicture("E:ProgramFiles毕业设计约塞米蒂山谷.jpg")EndSelectEndSub PrivateSubCombo1_KeyPress(KeyAsciiAsInteger)IfKeyAscii=13Thengrid2.Visible=Truesql="select路线,旅游信息from路线where终点='"&Trim(Combo1.Text)&"'or中点站1='"&Trim(Combo1.Text)&"'or中点站2='"&Trim(Combo1.Text)&"'"Adodc2.CursorLocation=adUseClientAdodc2.CursorLocation=adUseClientAdodc2.LockType=adLockReadOnlyAdodc2.CommandType=adCmdTextAdodc2.CursorType=adOpenDynamicAdodc2.RecordSource=sqlAdodc2.RefreshSetgrid2.DataSource=Adodc2Ifcellwidth>grid2.ColWidth(0)Then grid2.ColWidth(0)=TextWidth(grid2.Text)+500EndIfgrid2.RefreshIfgrid2.Rows=1ThenMsgBox"对不起,我们尚未开通此条线路",vbExclamation,"系统提示"EndIfEndIfEndSub PrivateSubCommand1_Click()UnloadjingdianLoadyoukeyouke.ShowEndSub PrivateSubCombo3_click()Dimi,cellwidthAsInteger,luAsStringlu=Combo3.TextSetMyrec=NewADODB.Recordset sql="select*from路线where旅游信息='"&Trim(lu)&"'"Myrec.Opensql,Mycnn,adOpenDynamic,adLockOptimistic,adCmdTextAdodc3.RecordSource=sqlAdodc3.RefreshSetgrid.DataSource=Adodc3 Callchangegrid.RefreshMyrec.CloseEndSub PrivateSubCommand2_Click()Unloadjingdianjingdian.HideLoadmainmain.ShowEndSub PrivateSubl打印_Click()DimiAsIntegerDimwAsIntegerDimx1appAsExcel.ApplicationDimx1bookAsExcel.WorkbookDimx1sheetAsExcel.WorksheetSetx1app=CreateObject("excel.application")x1app.Visible=TrueSetx1book=x1app.Workbooks.AddSetx1sheet=x1book.Worksheets(1)Fori=0Togrid.Rows-1grid.Row=iForw=0Togrid.Cols-1 grid.Col=wIfIsNull(grid.Text)=FalseThenx1sheet.Cells(i+1,w+1)=grid.TextEndIfNextwNextiSetxlsheet=NothingSetxlbook=NothingSetxlapp=NothingEndSubPrivateSubCommand3_Click()Combo2.ClearCombo2.AddItem"踏青路线"Combo2.AddItem"魅力西部"Combo2.AddItem"边境风情"Combo2.AddItem"海外之旅"Me.grid.Col=1txt2=Me.grid.TextMe.Command4.Enabled=TrueMe.Command4.Visible=TrueMe.Command8.Enabled=FalseMe.Command8.Visible=FalseIftxt2=""ThenMsgBox"请选择修改线路"ExitSub EndIfIftxt2<>""ThenMe.grid.Visible=FalseFrame1.Visible=TrueSetMyrec=NewADODB.Recordsetsql="select*from路线where路线='"&Trim(txt2)&"'"Myrec.Opensql,Mycnn,adOpenDynamic,adLockOptimistic,adCmdTextText1.Text=Myrec!旅游信息Text2.Text=Myrec!路线Text3.Text=Myrec!发团日期Text4.Text=Myrec!价格Text5.Text=Myrec!终点Combo2.Text=Myrec!属性IfMyrec!中点站1<>""ThenText7.Text=Myrec!中点站1EndIfIfMyrec!中点站2<>""ThenText8.Text=Myrec!中点站2EndIfMyrec.CloseEndIfEndSub PrivateSubCommand4_Click() Me.grid.Visible=TrueFrame1.Visible=FalseSetMyrec=NewADODB.Recordsetsql="select*from路线where路线='"&Trim(txt2)&"'"Myrec.Opensql,Mycnn,adOpenDynamic,adLockOptimistic,adCmdTextMyrec.DeleteadAffectCurrentMyrec.UpdateMyrec.Close'删除此记录SetMyrec=NewADODB.Recordsetsql="select*from路线"Myrec.Opensql,Mycnn,adOpenDynamic,adLockOptimistic,adCmdTextMyrec.AddNewMyrec!旅游信息=Text1.TextMyrec!路线=Text2.TextMyrec!发团日期=Text3.TextMyrec!价格=Val(Text4.Text)Myrec!终点=Text5.TextMyrec!属性=Combo2.TextMyrec!中点站1=Text7.TextMyrec!中点站2=Text8.TextMyrec.UpdateMyrec.Close MsgBox"修改成功",vbExclamation,"提示"'修改SetMyrec=NewADODB.RecordsetMyrec.Opensql,Mycnn,adOpenDynamic,adLockOptimistic,adCmdTextsql="select*from路线where旅游信息='"&Trim(Combo3.Text)&"'"Me.Adodc3.RecordSource=sqlMe.Adodc3.RefreshCallchangeSetMe.grid.DataSource=Me.Adodc3Me.grid.RefreshMyrec.CloseEndSub PrivateSubCommand5_Click()Me.grid.Visible=TrueFrame1.Visible=FalseEndSub PrivateSubCommand7_Click()UnloadjingdianLoadyoukechazhaoyoukechazhao.Showyoukechazhao.opt1.Enabled=Falseyoukechazhao.opt2.Enabled=True EndSub PrivateSubCommand6_Click()Text6.Text=""Combo2.ClearCombo2.AddItem"踏青路线"Combo2.AddItem"魅力西部"Combo2.AddItem"边境风情"Combo2.AddItem"海外之旅"Me.grid.Col=1txt2=Me.grid.TextDimiAsIntegerIftxt2=""ThenMsgBox"请选择添加旅游信息"ExitSubEndIfIftxt2<>""ThenMe.grid.Visible=FalseFrame1.Visible=TrueText1.Text=Combo3.TextText2.Text=0Text5.Text=0Combo2.Text=0EndIf Me.Command8.Enabled=TrueMe.Command8.Visible=TrueMe.Command4.Enabled=FalseMe.Command4.Visible=FalseEndSub PrivateSubCommand8_Click()SetMyrec=NewADODB.Recordsetsql="select*from路线"Myrec.Opensql,Mycnn,adOpenDynamic,adLockOptimistic,adCmdTextMyrec.AddNewMyrec!旅游信息=Text1.TextMyrec!路线=Text2.TextMyrec!发团日期=Text3.TextMyrec!价格=Val(Text4.Text)Myrec!终点=Text5.TextMyrec!属性=Combo2.TextMyrec!中点站1=Text7.TextMyrec!中点站2=Text8.TextMyrec.UpdateMyrec.CloseMsgBox"新建成功",vbExclamation,"提示"'修改SetMyrec=NewADODB.Recordset Myrec.Opensql,Mycnn,adOpenDynamic,adLockOptimistic,adCmdTextsql="select*from路线where旅游信息='"&Trim(Combo3.Text)&"'"Me.Adodc3.RecordSource=sqlMe.Adodc3.RefreshCallchangeSetMe.grid.DataSource=Me.Adodc3Me.grid.RefreshMyrec.CloseEndSubPrivateSubCommand9_Click()Me.grid.Col=1txt2=Me.grid.TextIftxt2=""ThenMsgBox"请选择需要删除的线路"ExitSubEndIfIftxt2<>""ThenSetMyrec=NewADODB.Recordsetsql="select*from路线where路线='"&Trim(txt2)&"'"Myrec.Opensql,Mycnn,adOpenDynamic,adLockOptimistic,adCmdTextIfMsgBox("确认删除此条路线吗?",vbYesNo,"系统确认提示")=vbYesThenMyrec.DeleteadAffectCurrent Myrec.CloseMsgBox"此线路已经成功被删除",vbExclamation,"系统提示"EndIfEndIfEndSub PrivateSubForm_Load()DimstrAsStringSetMycnn=NewADODB.Connectionstr="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=E:ProgramFiles毕业设计clue.mdb;PersistSecurityInfo=False"Mycnn.OpenstrCombo1.AddItem"踏青路线"Combo1.AddItem"魅力西部"Combo1.AddItem"边境风情"Combo1.AddItem"海外之旅"Combo3.ClearCombo3.AddItem"一日游"Combo3.AddItem"二日游"Combo3.AddItem"三日游"Combo3.AddItem"西部游"Combo3.AddItem"边境游"Combo3.AddItem"海外游"cellwidth=TextWidth(grid.Text)+1500Ifcellwidth>grid.ColWidth(1)Then grid.ColWidth(1)=cellwidthEndIfgrid2.Visible=FalseImage1.Picture=LoadPicture("E:ProgramFiles毕业设计旷野中的小屋.jpg")Ifpower=0Thenjingdian.Command3.Enabled=Falsejingdian.Command6.Enabled=Falsejingdian.Command9.Enabled=FalseElsejingdian.Command3.Enabled=Truejingdian.Command6.Enabled=Truejingdian.Command9.Enabled=TrueEndIfEndSub PrivateSubgrid_Click()Text6.Text=Me.grid.TextEndSub Subchange()'列表框中选中的表赋给记录源Fori=0To7'根据字段名大小调整网格单元宽度grid.ColWidth(i)=TextWidth(grid.Text)+300NextiAdodc3.Refresh Adodc3.Recordset.MoveLastgrid.Rows=Adodc3.Recordset.RecordCount+1Adodc3.Recordset.MoveFirstgrid.Row=0 DoWhileNotAdodc3.Recordset.EOFgrid.Row=grid.Row+1Fori=0To7grid.Col=iIfIsNull(Adodc3.Recordset(i).Value)Thengrid.Text=""Elsegrid.Text=Adodc3.Recordset(i).ValueEndIfcellwidth=TextWidth(grid.Text)+400Ifcellwidth>grid.ColWidth(i)Thengrid.ColWidth(i)=cellwidthEndIfNextiAdodc3.Recordset.MoveNextLoopEndSub6.特价信息窗口PrivateSubCommand1_Click()Loadmain main.ShowEndSub PrivateSubForm_Load()Ifpower=0ThenMe.OLE1.Enabled=FalseElseMe.OLE1.Enabled=TrueEndIfEndSub7.游客查找窗口DimuserrecAsADODB.RecordsetDimuserconAsADODB.ConnectionDimusercnnAsStringPrivateSubCommand1_Click()Ifopt1.Value=FalseAndopt2.Value=FalseThenExitSubElseIfopt1.Value=TrueThenTitle1$=opt1.Caption+"输入框"message1$=ch$+ch$+ch$+ch$+opt1.Captiontemp1$=InputBox(massage1$,Title1$)sql="select*from游客where姓名like'%"&Trim(temp1$)&"%'"Adodc1.CursorLocation=adUseClientAdodc1.CursorLocation=adUseClient Adodc1.LockType=adLockReadOnlyAdodc1.CommandType=adCmdTextAdodc1.CursorType=adOpenDynamicAdodc1.RecordSource=sqlAdodc1.RefreshEndIfIfopt2.Value=TrueThenTitle2$=opt2.Caption+"输入框"message2$=ch$+ch$+ch$+ch$+opt2.Captiontemp2$=InputBox(massage2$,Title2$)sql="select*from游客where参加团队名like'%"&Trim(temp2$)&"%'"Adodc1.CursorLocation=adUseClientAdodc1.LockType=adLockReadOnlyAdodc1.CommandType=adCmdTextAdodc1.CursorType=adOpenDynamicAdodc1.RecordSource=sqlAdodc1.RefreshLabel2.Caption="本团队现已经报名"&str(grid.Rows-1)&"人"EndIfEndIfcellwidth=TextWidth(grid.Text)+1200Ifcellwidth>grid.ColWidth(4)Orcellwidth>grid.ColWidth(3)Thengrid.ColWidth(4)=cellwidthgrid.ColWidth(3)=cellwidthEndIf Fori=0To8Ifi=0Ori=1Ori=2Ori=7ThenIfcellwidth>grid.ColWidth(i)Thengrid.ColWidth(i)=TextWidth(grid.Text)+250EndIfEndIfNextiIfcellwidth>grid.ColWidth(6)Thengrid.ColWidth(5)=TextWidth(grid.Text)+350EndIfIfcellwidth>grid.ColWidth(5)Thengrid.ColWidth(5)=TextWidth(grid.Text)+2200EndIfIfcellwidth>grid.ColWidth(8)Thengrid.ColWidth(8)=TextWidth(grid.Text)+1500EndIfEndSub PrivateSubCommand2_Click()Unloadyoukechazhaoyoukechazhao.HideLoadyoukeyouke.ShowEndSub8.权限 DimMycnnAsADODB.ConnectionDimMyrecAsADODB.RecordsetDimstrAsStringDimsqlAsString PrivateSubCommand1_Click()Frame1.Visible=TrueFrame2.Visible=FalseFrame3.Visible=FalseEndSubPrivateSubCommand10_Click()UnloadquanxianLoadquanxianquanxian.ShowEndSub PrivateSubCommand2_Click()Frame2.Visible=TrueFrame1.Visible=FalseFrame3.Visible=FalseEndSub PrivateSubCommand3_Click()UnloadquanxianLoadquanxian quanxian.ShowEndSub PrivateSubCommand5_Click()UnloadquanxianLoadmainmain.ShowEndSub PrivateSubCommand8_Click()Frame3.Visible=TrueFrame1.Visible=FalseFrame2.Visible=FalseEndSub PrivateSubCommand7_Click()sql="select*from密码"SetMyrec=NewADODB.RecordsetMyrec.Opensql,Mycnn,adOpenDynamic,adLockOptimistic,adCmdTextDimflagAsIntegerDoWhileNotMyrec.EOFIfText2.Text=Myrec!用户Thenflag=1EndIfMyrec.MoveNext LoopMyrec.Close'判断用户是否存在Ifflag=1ThenMyrec.Open"select*from密码where用户='"&Trim(Text2.Text)&"'",Mycnn,adOpenDynamic,adLockOptimistic,adCmdTextIfMsgBox("确认删除此用户吗?",vbYesNo,"系统提示")=vbYesThenMyrec.DeleteadAffectCurrentMyrec.CloseMsgBox"此用户已经成功被删除",vbExclamation,"系统提示"Text2.Text=""EndIfElseMsgBox"用户不存在!",vbCritical,"系统提示"Text2.Text=""Text2.SetFocusEndIfEndSub PrivateSubCommand4_Click()IfTex用户.Text=""OrTex原密码.Text=""OrTex新密码.Text=""OrTex确认新密码.Text=""ThenMsgBox"请输入完整信息",vbExclamation,"提示"ExitSubEndIf sql="select*from密码"SetMyrec=NewADODB.RecordsetMyrec.Opensql,Mycnn,adOpenDynamic,adLockOptimistic,adCmdTextDimflagAsIntegerflag=0DoWhileNotMyrec.EOFIfMyrec!用户=Tex用户.TextThenflag=1EndIfMyrec.MoveNextLoopMyrec.Close'判断用户是否存在sql="select密码from密码where用户='"&Trim(Tex用户.Text)&"'"SetMyrec=NewADODB.RecordsetMyrec.Opensql,Mycnn,adOpenDynamic,adLockOptimistic,adCmdTextIfflag=0ThenMsgBox"用户不存在!",vbCritical,"系统信息"Tex用户.Text=""ExitSubEndIf IfTex原密码<>Myrec!密码ThenMsgBox"原密码有误!",vbCritical,"系统信息" Tex原密码.Text=""ExitSubEndIfIfTex新密码=""OrTex确认新密码=""ThenMsgBox"您键入的密码不匹配。请在文本框内重新键入该用户的密码并确认。",vbExclamation,"系统信息"ExitSubEndIfIfTex新密码=Tex确认新密码ThenMyrec!密码=Tex新密码Myrec.UpdateMyrec.CloseMsgBox"密码修改成功!",vbExclamation,"系统信息"Tex用户.Text=""Tex原密码.Text=""Tex新密码.Text=""Tex确认新密码.Text=""ElseMsgBox"您键入的密码不匹配。请在文本框内重新键入该用户的密码并确认。",vbExclamation,"系统信息"EndIf'确定新密码EndSubPrivateSubCom退出_Click() UnloadquanxianLoadquanxianquanxian.ShowEndSub PrivateSubCom确定_Click()sql="select*from密码"SetMyrec=NewADODB.RecordsetMyrec.Opensql,Mycnn,adOpenDynamic,adLockOptimistic,adCmdTextDimflagAsIntegerfalg=0DoWhileNotMyrec.EOFIfMyrec!用户=Text2.TextThenflag=1EndIfMyrec.MoveNextLoop'判断用户是否存在Ifflag=0ThenMyrec.AddNewElseMsgBox"用户已经存在!",vbExclamation,"系统提示"Tex用户名.Text=""ExitSubEndIf IfTex用户名.Text<>""ThenMyrec!用户=Tex用户名.TextElseMsgBox"请输入用户名!",vbExclamation,"系统提示"ExitSubEndIfIfTex密码.Text=""OrTex确认密码.Text=""ThenMsgBox"您键入的密码不匹配。请在两个文本框内键入用户名的密码。",vbCritical,"系统提示"ExitSubEndIfIfTex密码.Text=Tex确认密码.TextThenMyrec!密码=Tex密码.TextIfOpt普通用户.Value=TrueThenMyrec!权限=0ElseMyrec!权限=1EndIfMyrec.UpdateMsgBox"新用户添加成功!",vbExclamation,"系统提示"Text2.Text=""Tex密码.Text=""Tex确认密码="" Myrec.CloseElseMsgBox"您键入的密码不匹配。请在两个文本框内键入用户名的密码。",vbCritical,"系统提示"EndIf'判断用户的新密码,并决定用户的权限EndSub PrivateSubForm_Load()Ifpower=0Thenquanxian.Command1.Enabled=Falsequanxian.Command8.Enabled=FalseElsequanxian.Command1.Enabled=Truequanxian.Command8.Enabled=TrueEndIfstr="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=E:ProgramFiles毕业设计clue.mdb;PersistSecurityInfo=False"SetMycnn=NewADODB.ConnectionMycnn.OpenstrFrame2.Visible=FalseFrame1.Visible=FalseFrame3.Visible=FalseEndSub 参考文献①<<软件工程导论>>张海藩编著北京:清华大学出版社2001.5②<<数据库系统概论>>萨师煊编著北京:高等教育出版社2002.2③<>谭浩强,薛淑斌,袁玫编著北京:清华大学出版社2000.7④<>伍俊良编著北京:清华大学出版社2002.8⑤<>张显库编著大连:大连理工大学出版社1997.10⑥<>清宏计算机工作室编著北京:机械工业出版社2001.1⑦<>PatriciaL.SullivanOregon:Franklin,Beedle&Associates,Incorporated,c1998 袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈 羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袈聿蚇蒂膇肈莇螇肃肇葿薀罿肆薂螆袅肅芁薈螁膅莃螄聿膄蒆薇羅膃蚈螂羁膂莈蚅袇膁蒀袀螃膀薂蚃肂腿节衿羈腿莄蚂袄芈蒇袇螀芇蕿蚀聿芆艿蒃肅芅蒁螈羁芄薃薁袆芃芃螆螂芃莅蕿肁节蒈螅羇莁薀薈袃莀艿螃蝿荿莂薆膈莈薄袁肄莇蚆蚄羀莇莆袀袆羃蒈蚂螂羂薁袈肀肁芀蚁羆肁莃袆袂肀薅虿袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈葿螈聿蒄葿袁羁莀蒈羃膇芆蒇蚃羀膂蒆螅膅蒁薅袇羈莇薄罿膄芃薃虿羆艿薃袁节膅薂羄肅蒃薁蚃芀荿薀螆肃芅蕿袈芈膁蚈羀肁蒀蚇蚀袄莆蚇螂肀莂蚆羅袂芈蚅蚄膈膄蚄螇羁蒂蚃衿膆莈蚂羁罿芄螁蚁膄膀螁螃羇葿螀袅膃蒅蝿肈羆莁螈螇芁芇莄袀肄膃莄羂艿蒂莃蚂肂莈蒂螄芈芄蒁袆肀膀蒀罿袃薈