旅游资源及线路管理系统.doc

毕设资料-VB旅游资源及线路管理系统

收藏

资源目录
跳过导航链接。
毕设资料-VB旅游资源及线路管理系统.zip
毕设资料-VB旅游资源及线路管理系统
VB旅游资源及线路管理系统033
旅游资源及线路管理系统.doc---(点击预览)
旅游资源及线路管理系统
旅游资源及线路管理系统.rar
压缩包内文档预览:(预览前20页/共65页)
预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图
编号:67366859    类型:共享资源    大小:1.34MB    格式:ZIP    上传时间:2020-04-05 上传人:独** IP属地:江苏
20
积分
关 键 词:
资料 VB 旅游资源 线路 管理 系统
资源描述:
毕设资料-VB旅游资源及线路管理系统,资料,VB,旅游资源,线路,管理,系统
内容简介:
旅游资源及线路管理系统第 页11选题背景计算机软件开发在当代已成为一个主要的行业,发展前景越来越好,软件开发需求人员也越来越大,特别是数据库和信息管理方面的开发,更是供不应求。在毕业之即,作为计算机专业的学生,为了适应社会的需要,加强自己的编程能力。在毕业设计选题时,我坚定不移地选择了数据库应用系统开发方面的课题。下面将具体分析:1.1 旅游资源前景旅游业是当今国际国内发展最快的产业之一,也是世界各国相互了解、交流、 ,从而促进经济全球化的重要手段,所以各国政府都非常重视旅游业的发展。我国现代旅游业只有短短20 年历史,但已经取得了举世瞩目的成绩:1992 年国内旅游人次为 3.3 亿人次,收入 250 亿元;1999 年达到 7.19 亿人次,收入 2831 亿元;2001 年再创新高,达到 7.44 亿人次,收入3522.26 亿元。1999 年,我国国内国际旅游总收入超过了 4000 亿元人民币,创汇 140 亿美元,比 1978 年增长 48 倍。2000 年,我国旅游人数和收入已经从 1978 年的世界第 41 位跃至前 10名之列。在制定“十五”(2001 至 2005 年)计划和 2015 年跨世纪发展规划中,中国有二十四个省把旅游作为在经济结构调整中优先发展的支柱产业、重点产业。按照规划,预计到 2020年,中国旅游业总收入将超过 3.3 万亿元人民币,相当于国内生产总值的百分之八,真正成为国民经济的支柱产业。加入 WTO 以后旅游业成为了更加活跃、竞争更加激烈、发展更加迅速的第三产业的支柱之一。现在,我国旅行社信息化建设落后,旅行社电脑的用途多数是打打字。线路销售手工操作,效率低下容易出错,客户资料不易整理,大量丢失,这些都是限制我们旅游发展的瓶颈了。而目前市场的旅游管理软件,动辄几万元,远非我们所愿意承受的。旅游业普遍存在着企业规模较小,管理不规范等弱点。因为旅游涉及吃、住、行、游、购、娱等诸多要素,而且这些要素又分散在不同的地域中,一个人不可能全面掌握所有的信息。一旦掌握某方面的信息的人离开企业,就会对企业的经营造成负面影响。旅游资源及线路管理系统可以把各种旅游资源分类存储管理,通过网络实现资源共享,不仅方便快捷,而且不会因为人员流动影响企业的经营,是旅游社在激烈的市场竞争中的坚旅游资源及线路管理系统第 页2强后盾。1.2 数据库和信息管理系统前景社会的进步,科学的发达,经济的高速发展,使管理工作越来越离不开信息,信息处理已成为当今世间上一项主要的社会活动。随着微型计算机日益增多,它在各行各业中得到迅速推广和应用,已经深入到社会的各个领域,计算机已经成为现代信息处理的重要工具。随之而来的就是各行各业对计算机应用软件的大量需求。1.2.1 管理信息系统概念管理信息系统(MIS,Management Information System) ,是一个由人、计算机等组成的能进行信息的收集、传送、储存、维护和使用的系统,能够实测企业的各种运行情况,并利用过去的历史数据预测未来,从企业全局的角度出发辅助企业进行决策,利用信息控制企业的行为,帮助企业实现其规划目标。这里给出的定义强调了管理信息系统的功能和性质,也强调了管理信息系统中的计算机对企业管理而言只是一种工具。管理信息系统是信息系统的重要分支之一,经过 30 多年的发展,已经成为一个具有自身概念、理论、结构、体系和开发方法的覆盖多学科的新学科。 信息管理者信息源信息处理信息用户图 4.2.1 管理信息总体结构图而数据和信息的结合在现代社会生活中表现出了越来越强大的功能和作用,数据已经渗透到了社会中的每一个角落和行业,与我们的生活息息相关。随着计算机的日益普及和网络的发展,数据库的应用范围越来越广,数据库应用的功能也越来越强。旅游资源及线路管理系统第 页31.2.2 数据库的基本概念(1) 数据库数据库(database,简称 DB) ,即数据的仓库,是存储在计算机内、有组织的、可共享的相关数据的集合。数据库中的数据按一定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和扩展性,并可为各种用户共享。数据库中的数据是高度结构化的,可以存储大量的数据,并且能够方便地进行数据的查询,另外数据库还具有较好的保护安全和维护数据一致性的措施,能够方便数据的共享。(2) 数据库管理系统数据库管理系统(database management system,简称 DBMS)是在操作系统支持下,为数据库的建立、使用和维护而配置的软件系统,数据库管理系统是位于用户与操作系统之间的一层数据管理软件,它在操作系统的基础上。对数据库进行管理和控制,利用数据库管理系统提供的一系列命令,用户能够方便地建立数据库和操作数据,比如建表、向表中添加、删除记录等。用户使用的各种数据库命令以及数据库应用程序的运行,都要通过数据库管理系统来实现。另外,数据库管理系统还要保证数据的安全性、完整性、多用户对数据库的并发使用及发生故障后的系统恢复等任务。(3) 数据库应用程序数据库应用程序是指用 Visual Basic 或 Delphi 等开发工具开发的程序,用来实现某种具体的功能,例如旅游资源及线路管理系统,各种信息管理系统等。数据库应用程序 是在操作系统和数据库管理系统的支持下开发和运行的,它利用数据库管理系统提供的各种手段访问一个或多个数据库及数据。由于旅游业的兴起和快速发展,需要一种高效、快速及方便地系统来管理整个旅游过程中的基本信息和资源,以减少人力、物力、时间等多方面资源的浪费,给企业或公司带来更多的利润,这就使得信息管理和数据库管理系统得到了充分的利用。本旅游资源及线路管理系统就是计算机信息管理和数据库应用程序开发相结合的产物。旅游资源及线路管理系统第 页42需求分析2.1 软件的需求分析软件需求分析是指用户对目标系统在功能、性能、行为、设计约束等方面的期望。需求分析的任务是确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求。需求分析的结果是系统开发的基础,关系到工程的成败和软件产品的质量。2.2 需求分析阶段对系统的综合要求有四个方面:(1) 系统功能要求应该划分出系统必须完成的所以功能。(2) 系统性能要求系统需要的存储容量以及后援存储,重新启动和安全性等方面的考虑都属于性能要求。(3) 运行要求这类要求集中表现为对运行时所处环境的要求。(4) 将来可能提出的要求应该明确地列出那些虽然不属于当前系统开发范畴,但是据分析将来很可能会提出来的要求。这样做的目的是在设计过程中对系统将来可能的扩充和修改预做,以便一旦需要时能比较容易地进行这种扩充和修改。通过这些需求分析来确定整个系统的功能模块设计和界面的设置和安排。需求分析在整个软件开发设计中起着十分重要的作用。因此,在实际的工程中,应该接触产品的最终用户或者最终用户代表。缺乏这样的接触,对于许多需求问题,就无法得到可靠的回答。如果缺乏可靠的需求信息,就无法生产出高质量的产品。实际上,使用不可靠的需求信息,产品无疑是不能使用的,而且常常不是用户所想要的。旅游资源及线路管理系统第 页53方案论证3.1 技术可行性旅游资源及线路管理系统的实现技术有多种,可以采用传统的客户机/服务器(C/S)型的 MIS 型架构。另外一种采用 Web 技术实现。Web 技术超越了传统的“客户机/服务器”两层结构,采用三层体系结构:用户界面层/事务层/数据库层。因此 Web 结构有着更好的安全性。在用户机上不需要安装任何应用程序,应用程序可以安装在事务层所在的计算机上,数据内容存放在数据库服务器上。CS 模式是一种分布式的处理模式,用 Server 进行数据处理,用 Client 运行前端应用软件,具有如下特点:(1)、系统的可靠性好,可以在网上方便地增加 Client 或 Server,通常增加一个 Client ,并不需要增加多少 Server 的开销。(2)、CS 模式支持开放的 Client 接口和开放的 Server 接口,往往不依赖于硬件及操作系统平台,便于应用程序的移植。(3)、由于 CS 模式采用数据集中,处理分散的模式,主机模式下的 DBMS 数据完整性得以保留。(4)、由于充当 Client 的 PC 机,具有良好的图形界面和丰富的应用软件,使得它的表现能力强,访问数据十分容易。从而,使 CS 模式成为信息平台的发展趋势。3.2 开发工具及开发平台的选择本系统采用 C/S 模式(即客户机-服务器模式),用 VB 作为应用程序的前端开发工具,与后端的 SQL Server2000 数据库相结合的方式来完成。再加上 VB 作为一种面向对象的可视化编程工具,具有简单易学,灵活方便和易于扩充的特点。VB 通过配置 ODBC 数据库连接到 SQL Server 2000 数据库,再通过 ADO、RDO 和 DAO 对这些数据进行访问和操作,这更有便于数据的管理和安全。旅游资源及线路管理系统第 页63.3 采用 SQL Server 2000 数据库的优点SQL 可用于所有用户的 DB 活动模型,包括系统管理员、数据库管理员、应用程序员、决策支持系统人员及许多其它类型的终端用户。基本的 SQL 命令只需很少时间就能学会,最高级的命令在几天内便可掌握。SQL 为许多任务提供了命令,其中包括: 查询数据 在表中插入、修改和删除记录 建立、修改和删除数据对象 控制对数据和数据对象的存取 保证数据库一致性和完整性以前的数据库管理系统为上述各类操作提供单独的语言,而 SQL 将全部任务统一在一种语言中。4服务器与客户端配置要以 SQL Server2000 为后台数据库开发应用程序,首先要对服务器与各户端进行配置。本节将简单地介绍如何配置 SQL Server2000 服务器和 ODBC 数据源。4.1 启动、暂停和停止 SQL Server2000在缺省情况下,SQL Server2000 安装完成后,“服务管理器”会自动地添加到系统的“启动”文件夹中,即在系统启动后,自动运行 SQL Server2000 服务管理器,可以在系统任务栏中看到它的图标。双击图标,打开 SQL Server2000 服务管理器。在服务管理器,可以选择服务器所在的计算机和 SQL Server2000 服务,同时可以很轻松地控制 SQL Server2000 服务。选中“当启动 OS 时自动启动服务”复选框,即可关现自动启动服务功能。旅游资源及线路管理系统第 页7也可以在“企业管理器”中设置自动启动 SQL Server2000 服务。单击“开始”按钮,依次选择“程序”/“SQL Server2000”/“企业管理器”,打开 SQL Server2000 企业管理器。企业管理器可以帮助用户完成以下工作: 定义 SQL Server 实例组; 将个别服务器注册到组中; 为每个已注册的服务器配置所有 SQL Server 选项; 在每个已注册的服务器中创建并管理所有 SQL Server 数据库、对象、登录、用户和权限; 在每人已注册的服务器上定义并执行所有 SQL Server 管理任务; 通过唤醒调用 SQL 查询分析器,交互地设计并测试 SQL 语句、批处理和脚本; 唤醒调用 SQL Server 定义的各种向导。4.2 配置 ODBC 数据源本书所介绍的应用程序实例都是通过配置 ODBC 数据源连接到 SQL Server2000 数据库的。数据源是一个存储定义,它可以记录以下信息: 连接到数据源所使用的 ODBC 驱动程序。 ODBC 驱动程序连接到数据源所使用用的信息; 连接所使用的驱动程序特有的选项。例如,SQL Server ODBC 数据源可以记录要使用的 SQL_92 选项,或者驱动程序是否应记录性能统计。客户端上的每个 ODBC 数据源都有一个唯一的数据源名称(DSN)。SQL ServerODBC 驱动程序的 ODBC 数据源包含用于连接到 SQL Server 实例的全部信息以及任何基本选项。SQL Server 使用 ODBC 数据源 ODBC 数据源。在“控制面板”中,选择“管理工具”下的“数据源(ODBC)”,启动 ODBC 数据源管理器。单击“驱动程序”选项卡,可以看到系统统安装的所有 ODBC 驱动程序,从中可以找到 SQL Server 的信息,并查看 SQL Server2000 的版信息。我们可以按照以下方式将 SQL Server2000 数据库添加到 ODBC 数据源中。1 单击“系统 DSN”选项卡,进入系统数据源页面。旅游资源及线路管理系统第 页82 单击“添加”按钮,打开“创建新数据源”对话框。3 在驱动程序列表中,选择 SQL Server,然后单击“完成”按钮,打开“创建数据源向导”窗口。输入数据源名称、说明和 SQL Server 服务器。4 单击“下一步”,打开设置身份验证窗口,根据数据库的具体设置选择身份验证方式,通常需要选择“使用用户输入登录的 SQL Server 验证”,然后手动地输入登录ID(例如 sa)和密码。5 单击“下一步”按钮,打开设置数据库选项对话框。在选择的 SQL Server 数据库上,存在多个数据库,默认的数据库是 master,用户可以选择自怀创建的数据库,如newdb.用户还可以在指定服务器中添加数据库,选中“附加数据库文件名称”复选框,为可附加的数据库指定主文件名。这个数据库被附加并用作数据源的默认数据库。请指定主文件的完全路径名和文件名,并在“更改默认的数据库为”框中指定的数据库名字,用作附加数据库的名字。6 单击“下一步”按钮,进入数据源向导的下一个窗口。在这个窗口中,用户可以批暄用于 SQL Server 消息的语言、字符设置转换和 SQL Server 驱动程序是应当使用区域设置。还可以控制运和运行时间较长的查询和驱动程序统计设置的记录。7 单击“完成”按钮,数据源向导会弹出一个总结报告,汇总此数据源的所有信息,包括 SQL ServerODBC 驱动程序版本、数据源名称、数据源描述、服务器名称、数据库、语言、是否转换字符数据、日志驱动程序、使用集成安全机制、使用区域设置、预定义的语句选项、使用备用服务器、使用 ANSI 的空值,填充和警告以及数据加密等。8 单击“测试数据源”按钮,可以栓查数据源配置是否成功。5系统总体设计规划在通过以上的需求分析、方案论证、开发工具及开发平台的选择、服务器与客户端配置,一切开发前的就绪工作做好以后,我们就可以进入系统的总体开发和设计了。下面主要介绍系统的总体设计和规划。旅游资源及线路管理系统第 页95.1 系统功能描述本系统所描述的旅游资源及线路管理的主要功能包括:(1) 地域信息管理功能 地域信息的录入,包括地域名称和地域类型等信息; 地域信息的修改; 地域信息的删除; 地域信息的查询。(2) 景点资源管理功能 景点资源的录入,包括景点编号、景点名称、联系人、票价等信息; 景点资源的修改; 景点资源的删除; 景点资源的查询。(3) 宾馆资源管理功能 宾馆资源的录入,包括宾馆编号、宾馆名称、联系人、报价等信息; 宾馆资源的修改; 宾馆资源的删除; 宾馆资源的查询。(4) 餐厅资源管理功能 餐厅资源的录入,包括餐厅编号、餐厅名称、联系人、报价等信息; 餐厅资源信息的修改;餐厅资源信息的删除; 餐厅资源信息的查询。(5) 娱乐资源管理功能 娱乐资源信息的录入,包括娱乐厅编号、娱乐厅名称、联系人、报价等信息; 娱乐资源信息的修改; 娱乐资源信息的删除;旅游资源及线路管理系统第 页10 娱乐资源信息的查询。(6) 交通资源管理功能 火车资源信息管理; 飞机资源信息公里。(7) 旅游线路管理功能 旅游线路信息的录入,包括线路编号、线路名称、报价等信息; 旅游线路信息的修改; 旅游线路信息的删除; 旅游线路信息的查询。(8) 系统用户管理功能 系统用户信息的录入,包括用户名、密码等信息; 系统用户信息的修改; 系统用户信息的删除; 系统用户信息的查询。5.2 功能模块划分从功能描述的内容可以看到,本系统可以实现其完整的功能。根据这些功能,设计出的系统功能模块如下图 5.2 所示。旅游资源及线路管理系统第 页11 图 5.2 旅游资源及线路管理系统功能模块示意图在功能模块示意图的树状结构中,每一个叶结点都是一个最小的功能模块。每一个功能模块都需要针对不同的表完成相同的数据库操作,即添加记录、修改记录、以及查询显示记录信息。旅游资源及线路管理系统的功能模块之间的关系如图 5.2.1 所示。旅游资源及线路管理系统地域信息管理景点资源管理餐厅资源管理娱乐资源管理交通资源管理旅游线路管理系统用户管理宾馆资源管理火车资源管理飞机资源管理旅游资源及线路管理系统第 页12提供数据 提供数据 提供数据 提供数据 提供数据 提供数据 提供数据 提供数据 提供数据 提供数据 提供数据 图 5.2.1 旅游资源及线路管理系统的功能模块关系图从模块关系图中可以看出,旅游资源信息除了供用户查阅外,不可以为旅游线路管理提供数据。当用户需要生成一条旅游线路时,可以从旅游资源里取到最新的数据。线路报价和成本预算也会随着资源的变化而变化。5.3 系统流程分析了解了系统的功能模块划分,以及各模块之间的关系。这是系统总体设计的重要组成部分。如果对系统形成一个完整而全面的认识,还需要进行系统流程分析。所谓系统流程就是用户在使用系统时的工作过程。多用户系统的工作流程都是从用户登录模块开始,对用户的身份进行认证。身份认证可以分为以下两个过程:(1) 确认用户是否有效的系统用户;(2) 确定用户的类型。 旅游线路管理地域信息管理景点资源管理宾馆资源管理餐厅资源管理娱乐资源管理交通资源管理线路报价及成本预算线路地域数据线路景点数据线路宾馆数据线路用餐数据线路娱乐数据线路交通数据其他线路数据旅游资源及线路管理系统第 页13第 1 个过程决定用户能否进入系统。第 2 个过程根据用户的类型决定用户的操作权限,从而决定用户的工作界面。本系统的流程分析如图 5.3 所示。 重试 否 失败 是 成功 用户管理模块 旅游资源及线路管理模块 Admin 用户 5.3 系统流程分析图 从系统流程分析图中可以看到,每个用户有 3 次机会进行身份认证。如果 3 次输入的用户名和密码都无法与数据库中的数据匹配,则强制退出系统。5.4 数据库设计5.4.1 创建数据库表:数据库 Travel 中包含以下 16 个表:地 开始用户登录失败超过 3次退出程序读取用户类型1 管理自己的用户信息2 管理普通用户的信息管理自己的用户信息旅游资源管理旅游线路管理旅游资源及线路管理系统第 页14域信息表 Area、景点资源信息表 Place、宾馆资源信息表 Hotel、餐厅资 源信息表Restaurant、娱乐厅资源 信息表 Amusement、娱乐项目资源信息表 AmuseItem、火车资源信息表 Train、飞机资源信息表 Plane、线路基本信息表 tline、线路景点信息表 lplace、线路宾馆信息表 lHotel、线路用餐信息表 lRes、线路娱乐信息表 lamuse、线路火车信息表ltrain、线路飞机信息表 lplane、用户信息表 Users.在本系统中因为要用到标识符自动增加,在这里我们不使用企业管理器来创建表,而使用脚本文件创建数据表,这对后面的设计有很大的帮助和方便作用。(1) 创建表 Area创建表 Area 的脚本文件为 Area.sql,它的代码如下: create table Area (AreaId int primary key identity, AreaName varchar(40) not null, AreaType smallint not null)在使用 create talbe 指令创建表时,应该注意使用 Primary key 关键字定义表的主键。表中每一行的主键都有唯一值,可以使用主键惟一地标识一行数据。(2) 创建表 Place创建表 Place 的脚本文件为 Place.sql,它的代码如下: create table place (Pid int primary key identity, Pname varchar(200) not null, Contact varchar(100), Phone varchar(100), Address varchar(100), Postcode varchar(10), Adult_price Decimal(10,2), Child_price Decimal(10,2),旅游资源及线路管理系统第 页15 AreaId int, Input_time char 17)在使用 create table 指令创建表时,应该注意使用 identity 关键字定义表的标识列。Identity 属性可以用于获得自动增加的标识号。例如,表 place 中的 Pid 字段是标识列,对于新插入表中的记录,它的 Pid 字段将获得一个自动分配的整型值。对于很多表中都使用的惟一编号列,通常可以使用 identity 定义。(3) 创建表 Hotel创建表 Hotel 的脚本文件为 Hotel.sql,它的代码如下: create table Hotel (Hid int primary key identity, Hname varchar(200) not null, Hlevel varchar(40), Contact varchar(100),Phone varchar(100), Address varchar(100), Postcode varchar(100), Price1 Decimal (10,2), Price2 Decimal (10,2), Price3 Decimal (10,2), Price4 Decimal (10,2), AreaId int, Input_time char 17 )在使用 create table 指令创建表时,应该注意使用 not null 关键字定义表的末空字段。使用 not null 定义的字段将不允许为空,这样就可以避免表中出现无效的数据,影响系统运行。例如,表 Hotel 中的 Hname 字段将不能为空,否则在系统的宾馆名称列表中将出现一个空。旅游资源及线路管理系统第 页16(4) 创建表 Restaurant 创建表 Restaurant 的脚本文件 Restaurant.sql,它的代码如下: create table Restaurant (Rid int primary key identity, Rname varchar(200) not null, Rlevel varchar(40), Contact varchar(100), Phone varchar(100), Address varchar(100), Postcode varchar(10), Breakfast decimal(10,2), Dinner decimal(10,2), AreaId int, Input_time char(17) )(5) 创建表 Amusement创建表 Amusement 的脚本文件为 Amusement.sql,它的代码如下: create table Amusement (Aid int primary key identity, Aname varchar(200) not null, Contact varchar(100), Phone varchar(100), Address varchar(100), Postcode varchar(10), AreaId int, Input_time char(17)旅游资源及线路管理系统第 页17 )(6) 创建表 AmuseItem 创建表 AmuseItem 的脚本文件为 AmuseItem.sql,它的代码如下: create table AmuseItem (Iid int primary key identity, Aid int, Item varchar(50) not null, Price decimal(10,2), Input_time char(17) )(7) 创建表 Train 创建表 Train 的脚本文件为 Train.sql,它的代码如下: create table Train (Tid int primary key identity, Tno varchar(20) not null, Sstation varchar(40), Estation varchar(40), Stime varchar(40), Etime varchar(40), PriceYz decimal(7,2), PriceRz decimal(7,2), PriceYw decimal(7,2), PriceRw decimal(7,2), Input_time char(17) )(8) 创建表 Plane旅游资源及线路管理系统第 页18 创建表 Plane 的脚本文件为 Plane.sql,它的代码如下: create table Plane (Pid int primary key identity, AirCom varchar(50) not null, Pno varchar(20) not null, SairPort varchar(40), EaiPort varchar(40), Stime varchar(40), Etime varchar(40), Price1 decimal(7,2), Price2 decimal(7,2), Cycle char(7), Input_time char(17) )(9) 创建表 tline 创建表 tline 的脚本文件为 tline.sql,它的代码如下: create table tline (lid int primary key , lname varchar(50), lday smallint, ltype smallint, insCom varchar(40), insFee decimal(8,2), oterCost decimal(8,2), tourPay decimal(8,2), benefit decimal(8,2),旅游资源及线路管理系统第 页19 AreaId int )(10) 创建表 lplace 创建表 lplacee 的脚本文件为 lplace.sql,它的代码如下: create table lplace (lid int not null, Pid int not null )(11) 创建表 lhotel 创建表 lhotel 的脚本文件为 lhotel.sql,它的代码如下: create table lhotel (lid int not null, hid int not null, rType tinyint, rdays tinyint )(12) 创建表 lres 创建表 lres 的脚本文件为 lres.sql,它的代码如下: create table lres (lid int not null, rid int not null, rType tinyint, rTimes tinyint )(13) 创建表 lamuse 创建表 lamuse 的脚本文件为 lamuse.sql,它的代码如下:旅游资源及线路管理系统第 页20 create table lamuse (lid int not null, Iid int not null, aTimes tinyint )(14) 创建表 ltrain 创建表 ltrain 的脚本文件为 ltrain.sql,它的代码如下: create table ltrain (lid int not null, direct int not null, tid tinyint not null, rType tinyint )(15) 创建表 lplane 创建表 lplane 的脚本文件为 lplane.sql,它的代码如下: create table lplane (lid int not null, direct tinyint not null, pid int not null )(16) 创建表 Users 创建表 Users 的脚本文件为 Users.sql,它的代码如下: create table Users (UserName varchar(40) primary key, Pwd varchar(40) not null, EmpName varchar(40)旅游资源及线路管理系统第 页21 )在查询分析器中打开这些 sql 文件,然后单击运行图标,就可以在数据库中创建相应的表。5.5 数据库访问5.5.1 ODBC 数据库访问技术ODBC(Open Database Connectivity,开放数据库互连)是 Microsoft 公司开放服务结构中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准 API(应用程序编程接口) 。这些 API 利用 SQL 来完成其大部分任务。ODBC 本身也提供了对 SQL 语言的支持,用户可以直接将 SQL 语句送给 ODBC。一个基于 ODBC 的应用程序对数据库的操作不依赖任何 DBMS(数据库管理系统) ,不直接与 DBMS 打交道,所有的数据库操作由对应的 DBMS 的 ODBC 驱动程序完成。也就是说,不论是 FoxPro、Access 还是 SQL Server 2000 数据库,均可用 ODBC API 进行访问。由此可见,ODBC 的最大优点是能以统一的方式处理所有的数据库。一个完整的 ODBC 由下列几个部分组成。应用程序(Application);ODBC 管理器(Administrator) 。该程序位于 Windows 控制面板的 32 位 ODBC 内,其主要任务是管理 ODBC 驱动程序和数据库;驱动程序管理器(Driver Manager)。驱动程序管理起包含在 ODBC32.DLL 中,对用户是透明的。其任务是管理 ODBC 驱动程序,是 ODBC 中最重要的部件;ODBC API;ODBC 驱动程序。它是一些 DLL,提供了 ODBC 和数据库之间的接口;数据源。数据源包含了数据库位置和数据库类型等信息,实际上是一种数据连接的抽象。各部件之间的关系如图 5.5 所示。旅游资源及线路管理系统第 页22 应用层 ODBC 层 数据层 图 5.5 ODBC 各部件关系图应用程序要访问一个数据库,首先必须用 ODBC 管理器注册一个数据源,管理器根据数据源提供的数据库位置、数据库类型及 ODBC 驱动程序等信息,建立起 ODBC 与具体数据库的联系。这样,只要应用程序将数据源名提供给 ODBC 就能建立起与相应数据库的连接。5.5.2 数据库访问控件在使用 Visual Basic 开发数据库应用程序的时候,会经常使用数据库访问控件。这些控件包括:Data 控件;ADO Data 控件;DataList 控件/DataCombo 控件;数据源名 (DNS) ODBC 管理器 数据源 Data Source ODBC 驱动程序驱动程序 管理器 ODBC API SQL 应用程序旅游资源及线路管理系统第 页23DataGrid 控件;MSChart 控件。5.6 功能模块规划窗体、模块和类模块是 Visual Basic 的重要资源。它们在程序设计中具有不可替代的作用。设计好它们之间的功能,使用它们能够协调合作,对于开发数据库应用程序是非常重要的。窗体是 Visual Basic 程序中比不可少的资源。它可以实现工程的外观显示,添加程序代码,实现需要的功能。窗体文件通常直接存放在应用程序的目录下。模块可以用来管理全局常量、变量和用户自定义函数等。用户可以在类模块中创建自定义类。本实例中约定,数据库的每个表都对应一个类模块。类的成员变量对应表中的每个列,类的成员函数则是对表的各种操作。5.6.1 添加模块根据 Visual Basic 功能模块的划分原则,我们将分别创建以下几个模块。Const 用来管理工程中的常量。DbFunc 用来管理工程中与数据库操作相关的声明、变量和函数。GeneralFunc 用来管理工程中一些通用的自定义函数。Variable 用来管理工程中的全局变量。5.6.2 添加类模块根据 Visual Basic 功能模块的划分原则,为每一个表创建一个类模块,将对此表的所有数据库操作封装在类中。在通常情况下,类的成员变量与对应的表中的字段名相同。由于绝大多数成员函数的编码格式都是非常相似的,只是所使用的 SQL 语句不同,所以只说明类中成员函数的功能,并不对所有的成员函数进行具体的代码分析。下面就 Area 类来说明类模块成员函数。 Area 类的成员函数函数名 具体说明 Init初始化成员变量 Delete删除指定的地域记录。参数 TmpId 表示要删除的地域编号旅游资源及线路管理系统第 页24 GetId根据指定的地域名读取地域编号。参数 TmnName 表示要读取的地域名称 GetInfo读取指定的地域记录。参数 TmpId 表示要读取的地域编号 In_DB判断指定的地域名称是否已经在数据库中。参数 TmpName 表示指定地域名 Insert插入新的地域记录 Load_Area将所有的地域数据读取到数组中。为了便于使用,此过程按照地域的分类将地域分别装入到数组 d1()、d2()、d3()中 Update修改指定的地域记录。参数 TmpId 表示要修改的地域编号具体的模块代码和类模块成员函数的代码不一一说明。5.7 系统主界面设计5.7.1 设计主界面图 5.7.2 参照表 5.7.1 设置主界面窗体的属性。表 5.7.1 设置主窗体的属性 本实例的主界面如图 5.7.1 所示。窗体属性 设置值 具体说明 名称 FrmMain 设置窗体名称 BorderStyle1-Fixed Single设置窗体的边框属性 Caption旅游资源及线路管理系统窗体的标题条文本 MaxButtonFalse取消最大化按钮 MinButtonTrue激活最小化按钮 PictureImgMain.jpg设置窗体背景StartUpPosition2-屏幕中心设置窗体位于屏幕中心旅游资源及线路管理系统第 页25图 5.7.2 旅游资源及线路管理系统主界面5.7.2 在主界面中添加代码因为系统的其他功能还没有实现,所以只能添加退出系统的代码。其他的代码将在相应的功能实现后再添加到窗体中。当用户单击 lblExit 按钮时,将执行 lblExit_Click()过程,退出系统。代码如下:Private Sub lblexit_Click() DBapi_Disconnect EndEnd Sub5.8 登录模块设计用户要使用本系统,首先要同过系统的身份认证,这个过程叫做登录。登录过程需要完成以下任务:旅游资源及线路管理系统第 页26根据用户名和密码来判断是否可能进入系统;根据用户类型决定用户拥有的权限。5.8.1 设计登录窗体创建一个新窗体,设置窗体名为 FrmLogin。登录窗体的布局如图 5.8 所示。5.8.2 在登录窗体中添加代码其中的 Cmd_Ok 按钮的代码如下:Private Sub Cmd_OK_Click() Dim j As Single 数据有效性检查 If txtUser = Then MsgBox 请输入用户名 txtUser.SetFocus Exit Sub End If If txtPwd = Then MsgBox 请输入密码 txtPwd.SetFocus Exit Sub End If NameKey = MakeStr(txtUser)旅游资源及线路管理系统第 页27 PasswordKey = MakeStr(txtPwd) 判断用户是否存在 If MyUser.In_DB(NameKey) = False Then MsgBox 用户名不存在 Try_times = Try_times + 1 If Try_times = 3 Then MsgBox 您已经三次尝试进入本系统,均不成功,系统将关闭 DBapi_Disconnect End Else Exit Sub End If End If 判断密码是否正确 MyUser.GetInfo (NameKey) If MyUser.Pwd PasswordKey Then MsgBox 密码错误 Try_times = Try_times + 1 If Try_times = 3 Then MsgBox 您已经三次尝试进入本系统,均不成功,系统将关闭 DBapi_Disconnect End Else Exit Sub End If End If旅游资源及线路管理系统第 页28 登录成功,将当前用户的信息保存在 CurUser 中 CurUser.GetInfo (MyUser.UserName) 关闭自己 Unload MeEnd Sub5.9 旅游地域资源管理模块设计地域管理模块可以实现以下功能:添加地域信息;修改地域信息;删除地域信息;查看地域信息。5.9.1 设计旅游地域资源编辑窗体编辑地域信息的窗体可以用来添加和修改地域信息。创建一个新窗体,窗体设置为FrmAreaEdit。窗体 FrmAreaEdit 的布局如图 5.9 所示。 图 5.9 窗体 FrmAreaEdit 的布局旅游资源及线路管理系统第 页29下面分析窗体 FrmAreaEdit 中部分过程的代码。1 全局变量 Modify变量 Modify 用来标记当前的数据库访问状态。当 Modify=True 时,表示修改已有的数据,当 Modify=False 时,表示插入新的数据;变量 OriId 表示当前编辑地域数据的地域编号;变量 OriAreaName 表示当前编辑地域数据的原有地域名称;变量 OriType 表示当前编辑地域数据的原有地域类别。2 Cmd_OK_Click 过程当用户单击“确定”按钮时,将触发 Cmd_Ok_Click 事件,对应的程序代码如下:Private Sub Cmd_OK_Click() 检查用户输入的地域数据是否有效 If Check = False Then Exit Sub End If With MyArea 把用户输入的地域数据赋值到 MyArea 对象的成员变量中 .AreaName = MakeStr(txtAreaName) .AreaType = CurType 判断地域名称是否存在 If Modify = False Or OriAreaName Trim(txtAreaName) Then If .In_DB(MakeStr(txtAreaName) = True Then MsgBox 地域名称已经存在,请重新输入 txtAreaName.SetFocus txtAreaName.SelStart = 0 txtAreaName.SelLength = Len(txtAreaName) Exit Sub End If End If旅游资源及线路管理系统第 页30 根据变量 Modify 的值,决定是插入新数据,还是修改已有的数据 If Modify = False Then .Insert Else .Update (OriId) End If End With 关闭窗体 Unload MeEnd Sub在上面的程序段中,分别对插入地域数据和修改地域数据两种情况进行处理。插入数据时使用 Area.Insert()过程,修改数据时调用 Area.Update()过程。5.9.2 设计旅游地域资源管理窗体创建一个新窗体,窗体名称设置为 FrmAreaMan。 窗体 FrmAreaMan 的布局如图 5.9.2 所示。旅游资源及线路管理系统第 页31下面分析窗体 FrmAreaMan 中部分过程的代码。1 Loadarea 过程Loadarea 过程的功能是从数据库中读取不同类型的地域数据,并根据用户的选择把指定类别的地域名称添加到 List1 中。对应的代码如下:Private Sub Loadarea() Dim i As Integer List1.Clear MyArea.Load_Area 本市地域 If Option1.Value = True Then Do While d1(i) List1.AddItem d1(i) 把本市地域添加到 List1 列表框中 i = i + 1 Loop End If 外埠地域 If Option2.Value = True Then Do While d2(i) List1.AddItem d2(i) 把外埠地域添加到 List1 列表框中 i = i + 1 Loop End If 国外地域 If Option3.Value = True Then Do While d3(i) List1.AddItem d3(i) 把国外地域添加到 List1 列表框中旅游资源及线路管理系统第 页32 i = i + 1 Loop End IfEnd SubMyArea.Loadarea 过程的作用是将地域名称按照类别读取到全局数组 d1()、d2()和 d3()中。2 DeleteCheck 过程当用户要删除地域数据时,程序将调用 DeleteCheck()函数,判断当前选择的地域是否可以删除,对应的代码如下:Private Function DeleteCheck(ByVal TmpId As Long) As Integer Dim TmpName As String 旅游娱乐厅资源地域数据检查 TmpName = MyPlace.AreaInPlace(CurAreaId) If TmpName Then DeleteCheck = -1 MsgBox 当前地域信息在娱乐厅 - + TmpName + - 中使用,为保证数据的完整性,不允许删除此地域。 Exit Function End If 旅游宾馆资源地域数据检查 TmpName = MyHotel.AreaInHotel(CurAreaId) If TmpName Then DeleteCheck = -1 MsgBox 当前地域信息在宾馆 - + TmpName + - 中使用,为保证数据的完整性,不允许删除此地域。 Exit Function End If旅游资源及线路管理系统第 页33 旅游用餐资源地域数据检查 TmpName = MyRes.AreaInRes(CurAreaId)If TmpName Then DeleteCheck = -1 MsgBox 当前地域信息在餐厅 - + TmpName + - 中使用,为保证数据的完整性,不允许删除此地域。 Exit Function End If 旅游娱乐资源地域数据检查 TmpName = MyAmuse.AreaInAmuse(CurAreaId) If TmpName Then DeleteCheck = -1 MsgBox 当前地域信息在娱乐厅 - + TmpName + - 中使用,为保证数据的完整性,不允许删除此地域。 Exit Function End If 旅游线路地域数据检查 TmpName = MyLine.AreaInLine(CurAreaId) If TmpName Then DeleteCheck = -1 MsgBox 当前地域信息 -在线路- + TmpName + - 中使用,为保证数据的完整性,不允许删除此地域。 Exit Function End If 通过检查,可以删除当前地域 DeleteCheck = 0End Function旅游资源及线路管理系统第 页34为了维护数据库结构的完整性,在删除数据时,往往需要进行数据库完整性的判断。地域数据是本系统中最基本的数据,与很多表存在联系。所以在删除地域数据时,需要在其他表中进行判断,如果要删除的地域存在于其他表中,则不能删除,因为删除此地域会造成其他表的数据不完整。3 Form_Load 过程当装入窗体 FrmAreaMan 时,将触发 Form_Load 事件,对应的代码如下:Private Sub Form_Load() 将当前地域类型设置为“本市” Option1.Value = True 装入数据 LoadareaEnd Sub4 Cmd_Modi_Click 过程当用户单击“修改”按钮时,将触发 Cmd_Modi_Click 事件,对应的代码如下:Private Sub Cmd_Modi_Click() 判断是否选择了要修改的地域 If List1.ListIndex 0 Then MsgBox 请选择要修改的地域 Exit Sub End If 修改本市地域 If Option1.Value = True Then FrmAreaEdit.CurType = 1 FrmAreaEdit.lblAreaType = 本市 End If 修改外埠地域 If Option2.Value = True Then旅游资源及线路管理系统第 页35 FrmAreaEdit.CurType = 2 FrmAreaEdit.lblAreaType = 外埠 End If 修改国外地域 If Option3.Value = True Then FrmAreaEdit.CurType = 3 FrmAreaEdit.lblAreaType = 国外 End If 将变量 Modify 设置设置为 False,表示插入新数据 FrmAreaEdit.Modify = True 设置全局变量 FrmAreaEdit.OriAreaName = List1.Text FrmAreaEdit.txtAreaName = List1.Text FrmAreaEdit.OriId = CurAreaId 启动编辑地域信息的窗体 FrmAreaEdit.Show 1 修改后重新装入地域数据 LoadareaEnd Sub5 Cmd_Del_Click 过程当用户单击“删除”按钮时,将触发 Cmd_Del_Click 事件,对应的代码如下:Private Sub Cmd_Del_Click() 判断是否选择了要删除的地域 If List1.ListIndex 0 Then MsgBox 请选择要删除的地域 Exit Sub旅游资源及线路管理系统第 页36 End If 调用 DeleteCheck()函数,判断选择的地域是否可以删除 If DeleteCheck(CurAreaId) = -1 Then Exit Sub End If 询问是否可以删除地域 If MsgBox(是否删除当前地域?, vbYesNo, 请确认) = vbYes Then MyArea.Delete (CurAreaId) Loadarea End IfEnd Sub5.10 景点资源管理模块设计景点资源管理模块可以实现以下功能: 添加景点资源信息;修改景点资源信息;删除景点资源信息;查看景点资源信息。5.10.1 设计景点资源编辑窗体创建一个新窗体,窗体名称设置为 FrmPlaceEdit。窗体 FrmPlaceEdit 的布局如图 6.10 所示。旅游资源及线路管理系统第 页37图 5.10 窗体 FrmPlaceEdit 的布局下面分析窗体 FrmPlaceEdit 中各个过程的代码。1 Form_Load 过程当 FrmPlaceEdit 窗体启动时,将触发 Form_Loade 事件,对应的代码如下:Private Sub Form_Load()ComboType.AddItem (本市)ComboType.AddItem (外埠)ComboType.AddItem (国外) ComboType.ListIndex = OriType - 1 Call Loadarea(OriType, ComboName) If InCombo(OriAreaName, ComboName) = True Then ComboName.Text = OriAreaName End IfEnd Sub2 Cmd_Ok_Click()过程当用户单击“确定”按钮时,将触发 Cmd_OK_Click 事件,对应的代码如下:Private Sub Cmd_OK_Click() 检查用户输入的地域数据是否有效 If Check = False Then Exit Sub End If With MyPlace 把用户输入的地域数据赋值到 MyPlace 对象的成员变量中 .Pname = MakeStr(txtPlace) .Contact = MakeStr(txtContact)旅游资源及线路管理系统第 页38 .Phone = MakeStr(txtPhone) .Address = MakeStr(txtAddress) .Postcode = MakeStr(txtCode) .Adult_price = Val(txtAdult) .Child_price = Val(txtChild) .AreaId = MyArea.GetId(ComboName) 判断景点名称是否存在 If Modify = False Or OriPlaceName Trim(txtPlace) Then If .In_DB(MakeStr(txtPlace) = True Then MsgBox 景点名称已经存在,请重新输入 txtPlace.SetFocus txtPlace.SelStart = 0 txtPlace.SelLength = Len(txtPlace) Exit Sub End If End If 根据变量 Modify 的值,决定是插入新数据,还是修改已有的数据 If Modify = False Then .Insert Else .Update (OriId) End If End With 关闭窗体 Unload Me旅游资源及线路管理系统第 页39End Sub5.10.2 设计景点资源管理窗体创建一个新窗体,窗体名称设置为 FrmPlaceMan。参照表 5.10.2 添加并设置控件的属性。表 5.10.2 窗体 FrmPlaceMan 包含的控件及属性 对象名 属性 属性值ConnectionStringDSN=TravelPasswordSaUserNameSaRecordSourceSELECT*FROM PlaceAdodc1VisibleFalseDataGrid1DataSourceAdodc1Cmd_AddCaption添加Cmd_ModiCaption修改Cmd_DelCaption删除Cmd_CloseCaption关闭窗体 FrmPlaceMan 的布局如图 5.10 所示。旅游资源及线路管理系统第 页40下面分析窗体 FrmPlaceMan 中几个过程的代码。1 Refresh_Place 过程Refresh_Place()过程的功能是为 Adodc1 控件设置数据源,从而决定在 DataGrid1 控件显示的数据内容,对应的代码如下:Private Sub Refresh_Place() 设置数据源 Adodc1.RecordSource = SELECT a.AreaName 所在地域, p.Pname As 景点名称, _ + p.Contact As 联系人, p.Phone As 联系电话, p.Address As 通信地址, _ + p.Postcode As 邮政编码, p.Adult_Price As 成人票价, _ + p.Child_Price As 儿童票价, p.Input_time As 录入时间 _ + FROM Place p, Area a WHERE p.AreaId=a.AreaId _ + And a.AreaName= + Trim(ComboName.Text) + Adodc1.RefreshEnd Sub因为在 DataGrid1 控件中要显示的数据内容联系到了数据库中的两个表,这就是在数据库中所说地表的连接查询。要选择两个不同的表,需要找到一个两个表都相同的公共部分,这样才能使两个表建立起一定的关系。在本例中,Area 表和 Place 表是通过 AreaId 字段来建立连接关系的。但我们在操作的时候好象并没有对 AreaId 进行实际操作。这里用到了前面所说地在创建表的脚本文件时, 使用 IDENTITY 关键字定义表的标识列,IDENTITY 属性可以用于获得自动增加的标识号。然后通过 place .AreaId = MyArea.GetId(ComboName)语句把自动获得的标识号赋值到 place 表中的 AreaId 字段中。这样就可以使我们在实际应用中减少许多复杂地考虑过程,这种方法在后面的实例中也经常用到。2 Cmd_Modi_Click 事件当用户单击“修改”按钮时,将触发 Cmd_Modi_Click 事件,对应的代码如下: Private Sub Cmd_Del_Click() Dim TmpId As Long 判断是否选择了要删除的记录旅游资源及线路管理系统第 页41 If Adodc1.Recordset.EOF = True Then MsgBox 请选择记录 Exit Sub End If 确定当前选择记录的位置 p = Adodc1.Recordset.AbsolutePosition 读取当前行的景点编号,因为要以此编号做为删除景点的关键字 TmpId = MyPlace.GetId(Trim(Adodc1.Recordset.Fields(1) 判断当前记录是否出现在线路中 If Mylplace.PlaceInLine(TmpId) 0 Then MsgBox 此景点在线路中使用,不能删除 Exit Sub End If 确认删除 If MsgBox(是否删除当前行?, vbYesNo, 确认) = vbYes Then MyPlace.Delete (TmpId) Refresh_Place If p - 1 0 Then Adodc1.Recordset.Move p - 1 End If End IfEnd SubPrivate Sub Cmd_Modi_Click() 判断是否选择了记录 If Adodc1.Recordset.EOF = True Then MsgBox 请选择记录旅游资源及线路管理系统第 页42 Exit Sub End If 确定当前选择记录的位置 p = Adodc1.Recordset.AbsolutePosition 地域信息 FrmPlaceEdit.OriAreaName = ComboName.Text FrmPlaceEdit.OriType = ComboType.ListIndex + 1 景点编号 FrmPlaceEdit.OriId = MyPlace.GetId(Adodc1.Recordset.Fields(1) 景点名称 FrmPlaceEdit.OriPlaceName = Trim(Adodc1.Recordset.Fields(1) FrmPlaceEdit.txtPlace = Trim(Adodc1.Recordset.Fields(1) 联系人 FrmPlaceEdit.txtContact = Trim(Adodc1.Recordset.Fields(2) 联系电话 FrmPlaceEdit.txtPhone = Trim(Adodc1.Recordset.Fields(3) 通信地址 FrmPlaceEdit.txtAddress = Trim(Adodc1.Recordset.Fields(4) 邮政编码 FrmPlaceEdit.txtCode = Trim(Adodc1.Recordset.Fields(5) 成人报价 FrmPlaceEdit.txtAdult = Trim(Adodc1.Recordset.Fields(6) 儿童报价 FrmPlaceEdit.txtChild = Val(Adodc1.Recordset.Fields(7) 把变量 Modify 设置为 True,表示当前状态为修改已有记录 FrmPlaceEdit.Modify = True旅游资源及线路管理系统第 页43 FrmPlaceEdit.Show 1 修改完成,刷新显示内容 Refresh_Place Adodc1.Recordset.Move pEnd Sub使用 DataGrid 控件显示数据的一种常用的方法,它的特点是简单直观,一目了然。DataGrid 控件只能用来显示数据,数据源由 ADO Data 控件提供。可以通过Adodc1.Recordeset.Fields(n)读取结果集中的字段数据,n 是字段的序号,第 1 个字段的序号为0。5.11 宾馆、餐厅、娱乐资源管理模块设计由于宾馆资源管理模块、餐厅资源管理模块设计、娱乐资源管理模块设计这三个模块设计的界面和模块功能基本相似。这里就以娱乐资源管理模块设计为例来说明。娱乐资源管理模块可以实现以下功能:添加娱乐资源信息;修改娱乐资源信息;删除娱乐资源信息;查看娱乐资源信息。5.11.1 设计娱乐资源编辑窗体创建一个新窗体,窗体名称设置为 FrmAmuseEdit。窗体 FrmAmuseEdit 的布局入图 5.11所示。旅游资源及线路管理系统第 页44 图 5.11 窗体 FrmAmuseEdit 的布局5.11.2 设计娱乐项目管理窗体与景点、宾馆、餐厅等旅游资源不同,娱乐资源包含很多的娱乐项目。如保龄球、台球、游泳等,所以需要有一个娱乐项目管理窗体。创建一个新窗体,窗体名称设置为FrmAitemMan。窗体 FrmAitemMan 的布局如图 5.11.2 所示。图 5.11.2 窗体 FrmAitemMan 的布局下面分析窗体 FrmAitemMan 中几个主要过程的代码。1 公共变量在窗体 FrmAitemMan 中有一个公共变量 OriAid,表示当前所编辑的娱乐项目所属的娱乐厅编号。此变量必须在启动窗体 FrmAitemMan 之前进行设置。2 Loaditem()Loaditem()过程的功能是根据变量 OriAid 指定的娱乐厅,读取娱乐厅中包含的所有娱乐项目,并把这些娱乐项目显示在列表中。对应的代码如下:Private Sub Loaditem() Dim i As Integer 清空娱乐项目列表 List1.Clear 根据当前的娱乐厅编号,读取所有的娱乐项目到数组 ArrItem()中 MyAitem.LoadItem_ByAmuse (OriAid)旅游资源及线路管理系统第 页45 依次把数组 ArrItem()中的数据添加到娱乐项目列表 List1 中 i = 0 Do While ArrItem(i) List1.AddItem ArrItem(i) i = i + 1 LoopEnd Sub在程序设计中,经常需要把数据库中满足一定条件的数据读取到组合框或列表框中,以便用户选择,可以使用两种方法实现此功能。第一种方法使用 DataCombo 控件作为组合框,使用 DataList 控件作为列表框,把需要的数据读取到 ADO Data 控件中。将 DataList 控件的RowSource 属性设置为 ADO Data 控件,ListField 属性设置为要读取的字段,需要的数据就会自动出现在列表框中(组合框的方法也是一样的) 。这种方法比较方便,不需要编写任何代码。第二种方法可以使用 ComboBox 控件作为组合框,使用 ListBox 控件作为列表框。编写程序将需要的数据从表中读取到一个(或一组)全局数组中,然后再使用 AddItem 方法把数组中的元素依次添加到 ComboBox 或 ListBBox 控件中。这样方法比较灵活,程序员可以控制程序的实现方法,增加一些扩展功能,同时全局数组中的数据不可以提供给其他部分的程序使用。1.List1_Click 过程当用户单击娱乐项目列表时,将触发 List1_Click 事件,对应的代码如下:Private Sub List1_click() 判断是否选择了娱乐项目 If List1.Text = Then Exit Sub End If 把选择的娱乐项目名称显示在右侧的“娱乐项目”编辑框中 txtItem = List1.Text 读取娱乐项目编号,并根据此编号读取娱乐项目的所有信息旅游资源及线路管理系统第 页46 TmpId = MyAitem.GetId(OriAid, txtItem) MyAitem.GetInfo (TmpId) 把娱乐项目的价格赋值到 txtPrice 文本框中 txtPrice = MyAitem.Price 把娱乐项目的编辑时间赋值到 lblinput_time 标签中 lblInput_time = MyAitem.Input_timeEnd Sub5.11.3 设计娱乐资源管理窗体创建一个新窗体,窗体名称设置为 FrmAmuseMan。窗体的布局如图 5.11.3 所示 图 5.11.3 窗体 FrmAmuseMan 的布局当用户单击“娱乐项目”按钮时,将触发 Cmd_Item_Click 事件,对应的代码如下:Private Sub Cmd_Item_Click() 要进入娱乐项目管理界面,必须首先选择一个娱乐厅 If Adodc1.Recordset.EOF = True Then MsgBox 请选择记录 Exit Sub End If旅游资源及线路管理系统第 页47 读取选择好的娱乐厅娱乐,并赋值到 FrmAitemMan.OriAid 中 FrmAitemMan.OriAid = MyAmuse.GetId(Trim(Adodc1.Recordset.Fields(1) 打开娱乐项目管理窗体 FrmAitemMan.Show 1End Sub5.12 火车、飞机资源管理模块设计火车资源管理模块设计和飞机资源管理模块设计的基本思想和结构大体上相似,这里以飞机管理模块设计为例来说明。飞机资源管理模块可以实现以下功能:添加飞机资源信息;修改飞机资源信息;删除飞机资源信息;查看飞机资源信息。5.12.1 设计飞机资源编辑窗体创建一个新窗体,窗体名称设置为 FrmPlaneEdit。窗体 FrmPlaneEdit 的布局如图 5.12 所示。旅游资源及线路管理系统第 页48 图 5.12 窗体 FrmPlaneEdit 的布局窗体 FrmPlaneEdit 中增加了“航班周期“的处理,下面介绍一下 FrmPlaneEdit 中的主要代码。1 Form_Load 过程当 FrmPlaneEdit 窗体启动时,将触发 Form_Load 事件,对应的代码如下:Private Sub Form_Load() Dim TmpCycle As Integer 将航班周期字符串折分单个字符,并保存在变量 TmpCycle 中 然后根据变量 TmpCycle 的值,决定航班周期的显示 Do While OriCycle TmpCycle = Val(Left(OriCycle, 1) OriCycle = Right(OriCycle, Len(OriCycle) - 1) Select Case TmpCycle Case 1 Check1.Value = 1 Case 2 Check2.Value = 1 Case 3 Check3.Value = 1 Case 4 Check4.Value = 1 Case 5 Check5.Value = 1 Case 6 Check6.Value = 1 Case 7旅游资源及线路管理系统第 页49 Check7.Value = 1 End Select LoopEnd Sub2 Cmd_Ok_Click 过程当用户单击“确定“按钮时,将触发 Cmd_Ok_Click 事件,对应的代码如下:Private Sub Cmd_OK_Click() Dim TmpCycle As String 检查用户输入数据的有效性 If Trim(txtAirCom) = Then MsgBox 请输入航空公司 txtAirCom.SetFocus Exit Sub End If If Trim(txtSairport) = Then MsgBox 请输入起飞机场 txtSairport.SetFocus Exit Sub End If If Trim(txtEairport) = Then MsgBox 请输入抵达机场 txtEairport.SetFocus Exit Sub End If 把用户输入的数据赋值到 MyPlane 对象的成员变量中 With MyPlane旅游资源及线路管理系统第 页50 .AirCom = MakeStr(txtAirCom) .Pno = MakeStr(txtPno) .Sairport = MakeStr(txtSairport) .Eairport = MakeStr(txtEairport) .Stime = MakeStr(txtStime) .Etime = MakeStr(txtEtime) .Price1 = Val(txtPrice1) .Price2 = Val(txtPrice2) TmpCycle 用来保存飞机的航班周期字符串 TmpCycle = If Check1.Value = 1 Then TmpCycle = TmpCycle + 1 End If If Check2.Value = 1 Then TmpCycle = TmpCycle + 2 End If If Check3.Value = 1 Then TmpCycle = TmpCycle + 3 End If If Check4.Value = 1 Then TmpCycle = TmpCycle + 4 End If If Check5.Value = 1 Then TmpCycle = TmpCycle + 5 End If If Check6.Value = 1 Then旅游资源及线路管理系统第 页51 TmpCycle = TmpCycle + 6 End If If Check7.Value = 1 Then TmpCycle = TmpCycle + 7 End If MyPlane.Cycle = TmpCycle 判断飞机信息是否已经在数据库中存在 If Modify = False Or OriPno Trim(txtPno) Or _ OriSairport Trim(txtSairport) Or OriEairport Trim(txtEairport) Then If .In_DB(MakeStr(txtPno), MakeStr(txtSairport), MakeStr(txtEairport) = True Then MsgBox 当前数据已经存在,请重新输入 txtPno.SetFocus txtPno.SelStart = 0 txtPno.SelLength = Len(txtPno) Exit Sub End If End If 根据变量 Modify 决定是插入数据,还是修改数据 If Modify = False Then .Insert Else .Update (OriId) End If End With 关闭窗体 Unload Me旅游资源及线路管理系统第 页52End Sub程序中使用航班周期字符串来描述航班周期的信息。规定,航班周期字符串由一组数字组成,如果星期一有航班,则航班周期字符串中包含字符“1“:如果星期二有航班,则航班周期字符串中包含字符”2“:以次类推,星期六对应字符”6“,星期日对应字符”7“。当启动飞机资源编辑窗体,FrmPlaneEdit 时,程序将从数据库中读取相应的航班周期字符串,并把它折分成单个的数字,然后通常复选框显示在窗体中。当用户单击“确定“按钮保存飞机资源信息时,程序将把用户选择的航班周期生成航班周期字符串,并保存在数据库中。5.13 旅游线路管理模块设计旅游线路管理模块可以实现以下功能:添加旅游线路信息;修改旅游线路信息;删除旅游线路信息;查看旅游线路信息。5.13.1 设计旅游线路管理窗体创建一个新窗体,窗体名称设置为 FrmLineMan。窗体 FrmLineMan 的布局如图 5.13 所示。旅游资源及线路管理系统第 页53 图 5.13 窗体 FrmLineMan 的布局下面分析窗体 FrmLineMan 中几个主要过程的代码。(1) 、Xl_refresh 过程Xl_refresh()过程的作用是根据用户选择的地域,把所在地域的所有旅游线路都读取到局数组 ArrLind()中,然后再依次添加到 List1 列表里,对应的代码如下:Private Sub Xl_refresh() Dim i As Integer Dim TmpId As Long 根据用户的选择,读取地域编号 TmpId = MyArea.GetId(ComboName.Text) 根据地域编号 TmpId,读取指定地域的所有线路 MyLine.Loadline_ByArea (TmpId) List1.Clear i = 0 把读取的所有线路添加到列表中 Do While ArrLine(i) List1.AddItem ArrLine(i) i = i + 1 LoopEnd Sub(2) 、Form_Load 过程Private Sub Form_Load() ComboType.AddItem (本市) ComboType.AddItem (外埠) ComboType.AddItem (国外)旅游资源及线路管理系统第 页54 设置地域类型 ComboType.ListIndex = 0 根据指定的地域类型,读取地域名称 Call Loadarea(1, ComboName) If ComboName.ListCount 0 Then ComboName.ListIndex = 0 End If 把所在地域的旅游线路装入列表中 Xl_refreshEnd Sub添加、修改和删除功能的实现在介绍各旅游资源管理窗体时,已经做了比较详细的介绍,这里不再作介绍说明。5.13.2 设计旅游线路编辑窗体创建一个新窗体,窗体名称设置为 FrmLineEdit。窗体 FrmLineEdit 的布局如图 5.13 所示。旅游资源及线路管理系统第 页55旅游线路信息模块是整个旅游资源及线路管理系统设计的重点部分,它既包括旅游资源管理中的信息,也对旅游中的线路进行了设置和管理。它需要对景点报价、宾馆报价、餐厅报价、娱乐报价、导游费以及其他一些费用进行计算和设置,还要对交通费用进行设置和计算。因为在我们实际旅游过程中,这些都是必须要经过的,也是十分重要的,然而对于对于旅游社和旅游团来说,他们必须对所有的线路和费用了解地十分透彻和清楚,才能在实际的旅游过程中通过成本费用和线路报价之间的差额来获取利润。因此,在本系统中,对这一部分进行了比较详细地说明和设计。下面分析窗体 FrmLineEdit 中几个过程的代码。(1) 、Check 过程在用户保存线路之前,需要检查录入数据的有效性。这个工作由 Check()过程来完成,应的代码如下:Public Function Check() As Boolean With MyLine 检查线路名称 If Len(Trim(txtName) = 0 Then旅游资源及线路管理系统第 页56 MsgBox 请输入线路名称 txtName.SetFocus Check = False Exit Function End If 检查行程天数 If Val(txtDays) = 0 Then MsgBox 请输入行程天数 txtDays.SetFocus txtDays.SelStart = 0 txtDays.SelLength = Len(Trim(txtDays) Check = False Exit Function End If 检查团队类别 If ComboType.ListIndex 0 Then MsgBox 请设置团队类别 ComboType.SetFocus Check = False Exit Function End If 检查保险 If Val(txtInsFee) 0 Then旅游资源及线路管理系统第 页57 MsgBox 保险费应大于 0 txtInsFee.SetFocus txtInsFee.SelStart = 0 txtInsFee.SelLength = Len(Trim(txtInsFee) Check = False Exit Function End If End With Check = TrueEnd Function(2) 、SetAmt 过程SetAmt()过程的功能是根据用户录入的线路数据计算并显示线路的成本、线路报价和利润率。对应的代码如下:Public Sub SetAmt() 成本景点费用共计宾馆费用共计娱乐费用共计用餐费用共计交通费用共计其他费用导游费 lblCostAmt = Val(lblplaceAmt) + Val(lblHotelAmt) + Val(lblamuseAmt) _ + Val(lblResAmt) + Val(lblTrafAmt) + Val(txtOthers) _ + Val(txtTour) 线路报价成本利润 lblPrice = Val(lblCostAmt) + Val(txtBenefit) 计算利润率 If Val(lblPrice) = 0 Then lblBrate = 0 Else lblBrate = Trim(Round(Val(txtBenefit) * 100 / Val(lblPrice), 2) + %旅游资源及线路管理系统第 页58 End IfEnd Sub(1) 、Refresh_lplace 过程Refresh_lplace()过程的功能是为 Adodc1 控件设置数据源,从而决定在 DataGrid1 控件中显示的线路景点数据内容,对应的代码如下:Private Sub Refresh_lplace() If ComboType.ListIndex = 0 Then 学生线路 Adodc1.RecordSource = SELECT a.AreaName As 所在地域, p.Pname As 景点名称, _ + p.Child_Price As 票价 FROM Place p, lplace l, Area a WHERE l.lid= _ + Trim(MyLine.lid) + And l.pid=p.pid And a.AreaId=p.AreaId Else 成人线路 Adodc1.RecordSource = SELECT a.AreaName As 所在地域, p.pName As 景点名称, _ + p.Adult_Price As 票价 FROM Place p, lplace l, Area a WHERE l.lid= _ + Trim(MyLine.lid) + And l.pid=p.pid And a.AreaId=p.AreaId End If Adodc1.Refresh SetPlaceAmtEnd Sub在显示线路景点数据时,需要根据数据库中记录的线路景点信息从景点资源表 Place 中提取景点价格。如果当前线路是学生线路,则提取学生价格;如果当前线路是成人线路,则提取成人价格。Refresh_lhote()过程用于显示线路宾馆数据的内容,Refresh_lres()过程用于显示线路用餐数据的内容,Refresh_lres()过程用于显示线路娱乐数据的内容。这些过程的实现方法都与Refresh_lplace()过程相似。旅游资源及线路管理系统第 页59在此,整个旅游资源及线路管理信息系统的基本界面设计完成了。本系统界面设计比较简洁、直观,易懂、易操作。用户根据界面的设计要求很快就可以了解基本的操作和使用方5.14 系统调试、运行及结果在系统界面和程序编写后,接下来的工作便是调试、运行过程。因为任何程序开发人员都不能保证在编写程序后就一定是正确无误的,程序的初步编写只是按照系统设计和用户的需求要求,基本实现要达到的功能,很多的细节和我们没有考虑到的地方都需要通过程序调试和运行过程表现出来。因此,程序调试和运行过程在整个软件开发过程中是十分重要的一个部分。下面就有关我自己在系统调试和运行过程中所遇到的问题和解决方法作一些简要描述。5.14.1 VB 和数据库连接时的错误调试在编译和调试的过程中,有很多的时候都是由于 VB 和数据库连接时的错误。这种错误在本系统中往往会出现如下的提示:无法获得连接句柄无法获得连接句柄!、数据库访问语句执行失败数据库访问语句执行失败 无无法连接法连接 ODBC!等一系列的错误提示。解决的方法如下:1在 Windows 98 的控制面板中找到 ODBC Data Sources 选项,在 ODBC Data Sources Administrator 中,把在数据库中建立的数据库表添加到 System DSN 中,在登录 SQL Server 2000 服务器时,用户名和密码一定要和 SQL Server 2000 在 创建时的用户名和密码一样,否则无法连接到数据库。2 类模块中定义数据库信息常量时,如下的四项缺一不可。Public Const DATABASE As String = newdbPublic Const DSN As String = newdbPublic Const DB_USER_NAME As String = saPublic Const DB_PASSWORD As String = sa只要缺少其中任何一项,都会出现编译错误,都无法连接到数据库。5.14.2 数据库访问控件中无数据的调试有时候在数据显示控件 DataGrid 中无任何数据显示。如通过 Adod 控件来绑定数据有时候只能对单表进行连接,但在大多数情况下,都需要对多个表进行连接。这就需要我们自己进行程序的编写和数据库 SQL 查询语句的选择。如通过 Area 表中的 AreaId 字段和 Place 表旅游资源及线路管理系统第 页60中的 AreaId 字段进行自然连接,在本例中,假如没有获得自动添加的标识符。则在 DataGrid控件中无任何的数据显示。解决的方法如下:1 在创建数据库表时,在用脚本文件创建表时一定要使用 primary key 关键字和IDENTITY 关键字结合来获得自动增加的标识号。2 可以在 SQL Server 2000 服务器的企业管理器中手动对数据库表进行修改,在选定的表中单击设计表,把要选择的字段设置为主键,在属性中把标识设为“是”,标识递增量设为“1”。3 为了避免在编写程序时要写许多重复的查询语句代码,我们可以把要连接的表变成视图,在后面的调用中只要直接对这些视图进行调用和操作,比在 VB 中写查询语句代码要方便得多。5.14.3 VB 中下拉文本框的调试在界面设计时,为了用户使用的方便,我们在许多界面中都用到了下拉文本框。在这里主要讲解一下 ComboBox 和 DataCombo 两种文本框的异同和各自使用的方法及调试时所遇到的一些问题。例如,两者都可以通过 ADODC 控件来进行绑定,都可以显示出所需要显示的数据字段名称。但所得到的结果却不一样。1 ComboBox 通过 ADODC 控件绑定所得到的下拉文本框,每次只能显示一条数据,要选择其他的数据必须通过 ADODC 控件按钮的上一条和下一条选择按钮进行选择时,才能显示所要得到的数据。因此,在实际应用中,如果是要对 ComboBox 下拉框进行设置时,通常是用户自己定义一个数组,把要选择的数据库内容添加到一个数组中,然后通过ComboBox 控件的 AddItem 属性把数组中的内容依次添加到下拉文本框中。这样就可以显示出全部的数据,这种方法的技巧和灵活性比较强,使用比较多。2 在选择比较单一的情况下,可以通过 DataCombo 控件来选择所要显示的字段名称,用它来绑定 ADODC,设置其
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:毕设资料-VB旅游资源及线路管理系统
链接地址:https://www.renrendoc.com/p-67366859.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!