VB旅游资源及线路管理系统程序源代码+设计说明

1.选题背景

计算机软件开发在当代已成为一个主要的行业,发展前景越来越好,软件开发需求人员也越来越大,特别是数据库和信息管理方面的开发,更是供不应求。在毕业之即,作为计算机专业的学生,为了适应社会的需要,加强自己的编程能力。在毕业设计选题时,我坚定不移地选择了数据库应用系统开发方面的课题。下面将具体分析:

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以后旅游业成为了更加活跃、竞争更加激烈、发展更加迅速的第三产业的支柱之一。

现在,我国旅行社信息化建设落后,旅行社电脑的用途多数是打打字。线路销售手工操作,效率低下容易出错,客户资料不易整理,大量丢失,这些都是限制我们旅游发展的瓶颈了。而目前市场的旅游管理软件,动辄几万元,远非我们所愿意承受的。旅游业普遍存在着企业规模较小,管理不规范等弱点。因为旅游涉及吃、住、行、游、购、娱等诸多要素,而且这些要素又分散在不同的地域中,一个人不可能全面掌握所有的信息。一旦掌握某方面的信息的人离开企业,就会对企业的经营造成负面影响。

旅游资源及线路管理系统可以把各种旅游资源分类存储管理,通过网络实现资源共享,不仅方便快捷,而且不会因为人员流动影响企业的经营,是旅游社在激烈的市场竞争中的坚强后盾。

1.2 数据库和信息管理系统前景

社会的进步,科学的发达,经济的高速发展,使管理工作越来越离不开信息,信息处理已成为当今世间上一项主要的社会活动。随着微型计算机日益增多,它在各行各业中得到迅速推广和应用,已经深入到社会的各个领域,计算机已经成为现代信息处理的重要工具。随之而来的就是各行各业对计算机应用软件的大量需求。

1.2.1 管理信息系统概念

管理信息系统(MIS,Management Information System),是一个由人、计算机等组成的能进行信息的收集、传送、储存、维护和使用的系统,能够实测企业的各种运行情况,并利用过去的历史数据预测未来,从企业全局的角度出发辅助企业进行决策,利用信息控制企业的行为,帮助企业实现其规划目标。这里给出的定义强调了管理信息系统的功能和性质,也强调了管理信息系统中的计算机对企业管理而言只是一种工具。管理信息系统是信息系统的重要分支之一,经过30多年的发展,已经成为一个具有自身概念、理论、结构、体系和开发方法的覆盖多学科的新学科。

信息管理者

信息源

信息处理

信息用户

图4.2.1 管理信息总体结构图

而数据和信息的结合在现代社会生活中表现出了越来越强大的功能和作用,数据已经渗透到了社会中的每一个角落和行业,与我们的生活息息相关。随着计算机的日益普及和网络的发展,数据库的应用范围越来越广,数据库应用的功能也越来越强。

1.2.2 数据库的基本概念

(1) 数据库

数据库(database,简称DB),即数据的仓库,是存储在计算机内、有组织的、可共享的相关数据的集合。数据库中的数据按一定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和扩展性,并可为各种用户共享。

数据库中的数据是高度结构化的,可以存储大量的数据,并且能够方便地进行数据的查询,另外数据库还具有较好的保护安全和维护数据一致性的措施,能够方便数据的共享。

(2) 数据库管理系统

数据库管理系统(database management system,简称DBMS)是在操作系统支持下,为数据库的建立、使用和维护而配置的软件系统,数据库管理系统是位于用户与操作系统之间的一层数据管理软件,它在操作系统的基础上。对数据库进行管理和控制,利用数据库管理系统提供的一系列命令,用户能够方便地建立数据库和操作数据,比如建表、向表中添加、删除记录等。用户使用的各种数据库命令以及数据库应用程序的运行,都要通过数据库管理系统来实现。另外,数据库管理系统还要保证数据的安全性、完整性、多用户对数据库的并发使用及发生故障后的系统恢复等任务。

(3) 数据库应用程序

数据库应用程序是指用Visual Basic 或 Delphi等开发工具开发的程序,用来实现某种具体的功能,例如旅游资源及线路管理系统,各种信息管理系统等。数据库应用程序 是在操作系统和数据库管理系统的支持下开发和运行的,它利用数据库管理系统提供的各种手段访问一个或多个数据库及数据。

由于旅游业的兴起和快速发展,需要一种高效、快速及方便地系统来管理整个旅游过程中的基本信息和资源,以减少人力、物力、时间等多方面资源的浪费,给企业或公司带来更多的利润,这就使得信息管理和数据库管理系统得到了充分的利用。

本旅游资源及线路管理系统就是计算机信息管理和数据库应用程序开发相结合的产物。

         2.需求分析

2.1 软件的需求分析

软件需求分析是指用户对目标系统在功能、性能、行为、设计约束等方面的期望。

需求分析的任务是确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求。需求分析的结果是系统开发的基础,关系到工程的成败和软件产品的质量。

2.2 需求分析阶段对系统的综合要求有四个方面:

(1) 系统功能要求

应该划分出系统必须完成的所以功能。

(2) 系统性能要求

系统需要的存储容量以及后援存储,重新启动和安全性等方面的考虑都属于性能要求。

(3) 运行要求

这类要求集中表现为对运行时所处环境的要求。

(4) 将来可能提出的要求

应该明确地列出那些虽然不属于当前系统开发范畴,但是据分析将来很可能会提出来的要求。这样做的目的是在设计过程中对系统将来可能的扩充和修改预做,以便一旦需要时能比较容易地进行这种扩充和修改。

通过这些需求分析来确定整个系统的功能模块设计和界面的设置和安排。需求分析在整个软件开发设计中起着十分重要的作用。因此,在实际的工程中,应该接触产品的最终用户或者最终用户代表。缺乏这样的接触,对于许多需求问题,就无法得到可靠的回答。如果缺乏可靠的需求信息,就无法生产出高质量的产品。实际上,使用不可靠的需求信息,产品无疑是不能使用的,而且常常不是用户所想要的。

3.方案论证

3.1 技术可行性

旅游资源及线路管理系统的实现技术有多种,可以采用传统的客户机/服务器(C/S)型的MIS型架构。另外一种采用Web 技术实现。Web技术超越了传统的“客户机/服务器”两层结构,采用三层体系结构:用户界面层/事务层/数据库层。因此Web结构有着更好的安全性。在用户机上不需要安装任何应用程序,应用程序可以安装在事务层所在的计算机上,数据内容存放在数据库服务器上。

C/S模式是一种分布式的处理模式,用Server进行数据处理,用Client运行前端应用软件,具有如下特点:

(1)、系统的可靠性好,可以在网上方便地增加Client或Server,通常增加一个Client ,并不需要增加多少Server的开销。

(2)、C/S模式支持开放的Client接口和开放的Server接口,往往不依赖于硬件及操作系统平台,便于应用程序的移植。

(3)、由于C/S模式采用数据集中,处理分散的模式,主机模式下的DBMS数据完整性得以保留。

(4)、由于充当Client 的PC机,具有良好的图形界面和丰富的应用软件,使得它的表现能力强,访问数据十分容易。

从而,使C/S模式成为信息平台的发展趋势。

3.2 开发工具及开发平台的选择

本系统采用C/S模式(即客户机-服务器模式),用VB 作为应用程序的前端开发工具,与后端的SQL Server2000数据库相结合的方式来完成。再加上VB作为一种面向对象的可视化编程工具,具有简单易学,灵活方便和易于扩充的特点。VB通过配置ODBC数据库连接到SQL Server 2000数据库,再通过ADO、RDO和DAO对这些数据进行访问和操作,这更有便于数据的管理和安全。

3.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时自动启动服务”复选框,即可关现自动启动服务功能。

也可以在“企业管理器”中设置自动启动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”选项卡,进入系统数据源页面。
  2. 单击“添加”按钮,打开“创建新数据源”对话框。
  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.系统总体设计规划

在通过以上的需求分析、方案论证、开发工具及开发平台的选择、服务器与客户端配置,一切开发前的就绪工作做好以后,我们就可以进入系统的总体开发和设计了。下面主要介绍系统的总体设计和规划。

5.1 系统功能描述

本系统所描述的旅游资源及线路管理的主要功能包括:

(1) 地域信息管理功能

◆  地域信息的录入,包括地域名称和地域类型等信息;

◆  地域信息的修改;

◆  地域信息的删除;

  ◆  地域信息的查询。

(2) 景点资源管理功能

  ◆  景点资源的录入,包括景点编号、景点名称、联系人、票价等信息;

  ◆  景点资源的修改; 

  ◆  景点资源的删除;

  ◆  景点资源的查询。

(3) 宾馆资源管理功能

  ◆  宾馆资源的录入,包括宾馆编号、宾馆名称、联系人、报价等信息;

  ◆  宾馆资源的修改;

  ◆  宾馆资源的删除;

  ◆  宾馆资源的查询。

(4) 餐厅资源管理功能

  ◆  餐厅资源的录入,包括餐厅编号、餐厅名称、联系人、报价等信息;

  ◆  餐厅资源信息的修改;

  • 餐厅资源信息的删除;

  ◆  餐厅资源信息的查询。

(5) 娱乐资源管理功能

  ◆  娱乐资源信息的录入,包括娱乐厅编号、娱乐厅名称、联系人、报价等信息;

  ◆  娱乐资源信息的修改;

  ◆  娱乐资源信息的删除;

  ◆  娱乐资源信息的查询。

(6) 交通资源管理功能

  ◆  火车资源信息管理;

  ◆  飞机资源信息公里。

(7) 旅游线路管理功能

  ◆  旅游线路信息的录入,包括线路编号、线路名称、报价等信息;

  ◆  旅游线路信息的修改;

  ◆  旅游线路信息的删除;

  ◆  旅游线路信息的查询。

(8) 系统用户管理功能

  ◆  系统用户信息的录入,包括用户名、密码等信息;

◆  系统用户信息的修改;

◆  系统用户信息的删除;

◆  系统用户信息的查询。

5.2 功能模块划分

从功能描述的内容可以看到,本系统可以实现其完整的功能。根据这些功能,设计出的系统功能模块如下图5.2所示。

旅游资源及线路管理系统

信息管理

景点

资源管理

餐厅

资源管理

娱乐

资源管理

交通

资源管理

旅游

线路管理

系统用户管理

宾馆

资源管理

火车资源管理

飞机资源管理

    图5.2    旅游资源及线路管理系统功能模块示意图

在功能模块示意图的树状结构中,每一个叶结点都是一个最小的功能模块。每一个功能模块都需要针对不同的表完成相同的数据库操作,即添加记录、修改记录、以及查询显示记录信息。

旅游资源及线路管理系统的功能模块之间的关系如图5.2.1所示。

旅游线路管理

地域信息管理

景点资源管理

宾馆资源管理

餐厅资源管理

娱乐资源管理

交通资源管理

线路报价及成本预算

线路地域数据

线路景点数据

线路宾馆数据

线路用餐数据

线路娱乐数据

线路交通数据

其他线路数据

提供数据

        提供数据                   提供数据 

        提供数据                   提供数据

      

        提供数据                   提供数据                                                   

        提供数据                   提供数据

        提供数据                   提供数据

          

          图5.2.1旅游资源及线路管理系统的功能模块关系图

从模块关系图中可以看出,旅游资源信息除了供用户查阅外,不可以为旅游线路管理提供数据。当用户需要生成一条旅游线路时,可以从旅游资源里取到最新的数据。线路报价和成本预算也会随着资源的变化而变化。

5.3 系统流程分析

了解了系统的功能模块划分,以及各模块之间的关系。这是系统总体设计的重要组成部分。如果对系统形成一个完整而全面的认识,还需要进行系统流程分析。

所谓系统流程就是用户在使用系统时的工作过程。多用户系统的工作流程都是从用户登录模块开始,对用户的身份进行认证。身份认证可以分为以下两个过程:

  1. 确认用户是否有效的系统用户;
  2. 确定用户的类型。

第1个过程决定用户能否进入系统。第2个过程根据用户的类型决定用户的操作权限,从而决定用户的工作界面。

本系统的流程分析如图5.3所示。

   开始

圆角矩形:    开始

                            重试

                                        否

退出程序

失败超过3次

菱形: 失败超过3次

用户登录

菱形: 用户登录

                   失败                               是

       

          成功

读取用户类型

                            用户管理模块            旅游资源及线路管理模块

1管理自己的用户信息

2管理普通用户的信息

旅游资源管理

旅游线路管理

            Admin用户

管理自己的用户信息

            

        5.3系统流程分析图

      

从系统流程分析图中可以看到,每个用户有3次机会进行身份认证。如果3次输入的用户名和密码都无法与数据库中的数据匹配,则强制退出系统。

5.4 数据库设计

5.4.1 创建数据库表:

数据库Travel中包含以下16个表:地域信息表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),

 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字段将不能为空,否则在系统的宾馆名称列表中将出现一个空。

(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)

  )

(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

  创建表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),

   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,它的代码如下:

  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)

  )

在查询分析器中打开这些sql文件,然后单击运行图标,就可以在数据库中创建相应的表。

5.5数据库访问

5.5.1 ODBC 数据库访问技术

ODBC(Open Database Connectivity,开放数据库互连)Microsoft公司开放服务结构中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC

一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS(数据库管理系统),不直接与DBMS打交道,所有的数据库操作由对应的DBMSODBC驱动程序完成。也就是说,不论是FoxProAccess还是SQL Server 2000数据库,均可用ODBC API进行访问。由此可见,ODBC的最大优点是能以统一的方式处理所有的数据库。

一个完整的ODBC由下列几个部分组成。

  • 应用程序(Application);
  • ODBC管理器(Administrator)。该程序位于Windows控制面板的32ODBC内,其主要任务是管理ODBC驱动程序和数据库;
  • 驱动程序管理器(Driver Manager)。驱动程序管理起包含在ODBC32.DLL中,对用户是透明的。其任务是管理ODBC驱动程序,是ODBC中最重要的部件;
  • ODBC API
  • ODBC驱动程序。它是一些DLL,提供了ODBC和数据库之间的接口;
  • 数据源。数据源包含了数据库位置和数据库类型等信息,实际上是一种数据连接的抽象。

各部件之间的关系如图5.5所示。

数据源名

  (DNS)

  ODBC

  管理器

  数据源

 Data Source

  ODBC

 驱动程序

驱动程序

   管理器

 ODBC API

   SQL

  应用程序

                                                            应用层

                                                             ODBC

                                                              数据层

 5.5     ODBC各部件关系图

应用程序要访问一个数据库,首先必须用ODBC管理器注册一个数据源,管理器根据数据源提供的数据库位置、数据库类型及ODBC驱动程序等信息,建立起ODBC与具体数据库的联系。这样,只要应用程序将数据源名提供给ODBC就能建立起与相应数据库的连接。

5.5.2 数据库访问控件

在使用Visual Basic开发数据库应用程序的时候,会经常使用数据库访问控件。这些控件包括:

  • Data控件;
  • ADO Data控件;
  • DataList控件/DataCombo控件;
  • DataGrid控件;
  • 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表示要删除的地域编号

 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                     设置主窗体的属性

窗体属性

     设置值

        具体说明

 名称

    FrmMain

  设置窗体名称

 BorderStyle

1-Fixed Single

设置窗体的边框属性

 Caption

旅游资源及线路管理系统

窗体的标题条文本

 MaxButton

False

取消最大化按钮

 MinButton

True

激活最小化按钮

 Picture

Img\Main.jpg

设置窗体背景

StartUpPosition

2-屏幕中心

设置窗体位于屏幕中心

         

本实例的主界面如图5.7.1所示。

5.7.2旅游资源及线路管理系统主界面

5.7.2在主界面中添加代码

因为系统的其他功能还没有实现,所以只能添加退出系统的代码。其他的代码将在相应的功能实现后再添加到窗体中。

当用户单击lblExit按钮时,将执行lblExit_Click()过程,退出系统。代码如下:

Private Sub lblexit_Click()

  DBapi_Disconnect

  End

End Sub

5.8 登录模块设计

用户要使用本系统,首先要同过系统的身份认证,这个过程叫做登录。登录过程需要完成以下任务:

  • 根据用户名和密码来判断是否可能进入系统;
  • 根据用户类型决定用户拥有的权限。

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)

  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

  '登录成功,将当前用户的信息保存在CurUser

  CurUser.GetInfo (MyUser.UserName)

  '关闭自己

  Unload Me

End Sub

5.9 旅游地域资源管理模块设计

地域管理模块可以实现以下功能:

  • 添加地域信息;
  • 修改地域信息;
  • 删除地域信息;
  • 查看地域信息。

5.9.1 设计旅游地域资源编辑窗体

编辑地域信息的窗体可以用来添加和修改地域信息。创建一个新窗体,窗体设置为FrmAreaEdit

窗体FrmAreaEdit的布局如图5.9所示。

     

                   5.9 窗体FrmAreaEdit的布局

下面分析窗体FrmAreaEdit中部分过程的代码。

  1. 全局变量Modify

变量Modify用来标记当前的数据库访问状态。当Modify=True时,表示修改已有的数据,当Modify=False时,表示插入新的数据;变量OriId表示当前编辑地域数据的地域编号;变量OriAreaName表示当前编辑地域数据的原有地域名称;变量OriType表示当前编辑地域数据的原有地域类别。

  1. 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

  '根据变量Modify的值,决定是插入新数据,还是修改已有的数据

  If Modify = False Then

    .Insert

  Else

    .Update (OriId)

  End If

  End With

  '关闭窗体

  Unload Me

End Sub

在上面的程序段中,分别对插入地域数据和修改地域数据两种情况进行处理。插入数据时使用Area.Insert()过程,修改数据时调用Area.Update()过程。

5.9.2 设计旅游地域资源管理窗体

创建一个新窗体,窗体名称设置为FrmAreaMan

         窗体FrmAreaMan的布局如图5.9.2所示。

下面分析窗体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列表框中

      i = i + 1

    Loop

  End If

End Sub

MyArea.Loadarea过程的作用是将地域名称按照类别读取到全局数组d1()d2()d3()中。

  1. 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

  '旅游用餐资源地域数据检查

  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 = 0

End Function

为了维护数据库结构的完整性,在删除数据时,往往需要进行数据库完整性的判断。地域数据是本系统中最基本的数据,与很多表存在联系。所以在删除地域数据时,需要在其他表中进行判断,如果要删除的地域存在于其他表中,则不能删除,因为删除此地域会造成其他表的数据不完整。

  1. Form_Load过程

当装入窗体FrmAreaMan时,将触发Form_Load事件,对应的代码如下: 

Private Sub Form_Load()

  '将当前地域类型设置为本市

  Option1.Value = True

  '装入数据

  Loadarea

End Sub

  1. 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

    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

  '修改后重新装入地域数据

  Loadarea

End Sub

  1. Cmd_Del_Click过程

当用户单击删除按钮时,将触发Cmd_Del_Click事件,对应的代码如下:

Private Sub Cmd_Del_Click()

  '判断是否选择了要删除的地域

  If List1.ListIndex < 0 Then

    MsgBox "请选择要删除的地域"

    Exit Sub

  End If

  '调用DeleteCheck()函数,判断选择的地域是否可以删除

  If DeleteCheck(CurAreaId) = -1 Then

    Exit Sub

  End If

  '询问是否可以删除地域

  If MsgBox("是否删除当前地域?", vbYesNo, "请确认") = vbYes Then

    MyArea.Delete (CurAreaId)

    Loadarea

  End If

End Sub

5.10 景点资源管理模块设计

景点资源管理模块可以实现以下功能:   

  • 添加景点资源信息;
  • 修改景点资源信息;
  • 删除景点资源信息;
  • 查看景点资源信息。

5.10.1 设计景点资源编辑窗体

创建一个新窗体,窗体名称设置为FrmPlaceEdit。窗体FrmPlaceEdit的布局如图6.10所示。

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 If

End Sub

  1. 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)

  .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

End Sub

5.10.2 设计景点资源管理窗体

创建一个新窗体,窗体名称设置为FrmPlaceMan。参照表5.10.2添加并设置控件的属性。

5.10.2                窗体FrmPlaceMan包含的控件及属性

    对象名

       属性

          属性值

Adodc1

ConnectionString

DSN=Travel

Password

Sa

UserName

Sa

RecordSource

SELECT*FROM Place

Visible

False

DataGrid1

DataSource

Adodc1

Cmd_Add

Caption

添加

Cmd_Modi

Caption

修改

Cmd_Del

Caption

删除

Cmd_Close

Caption

关闭

窗体FrmPlaceMan的布局如图5.10所示。

下面分析窗体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.Refresh

End Sub

因为在DataGrid1控件中要显示的数据内容联系到了数据库中的两个表,这就是在数据库中所说地表的连接查询。要选择两个不同的表,需要找到一个两个表都相同的公共部分,这样才能使两个表建立起一定的关系。在本例中,Area表和Place表是通过AreaId字段来建立连接关系的。但我们在操作的时候好象并没有对AreaId进行实际操作。这里用到了前面所说地在创建表的脚本文件时, 使用IDENTITY关键字定义表的标识列,IDENTITY属性可以用于获得自动增加的标识号。然后通过place .AreaId = MyArea.GetId(ComboName)语句把自动获得的标识号赋值到place表中的AreaId字段中。这样就可以使我们在实际应用中减少许多复杂地考虑过程,这种方法在后面的实例中也经常用到。

  1. Cmd_Modi_Click事件

当用户单击“修改”按钮时,将触发Cmd_Modi_Click事件,对应的代码如下:

Private Sub Cmd_Del_Click()

  Dim TmpId As Long

  '判断是否选择了要删除的记录

  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 If

End Sub

Private Sub Cmd_Modi_Click()

  '判断是否选择了记录

  If Adodc1.Recordset.EOF = True Then

    MsgBox "请选择记录"

    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

  FrmPlaceEdit.Show 1

  '修改完成,刷新显示内容

  Refresh_Place

  Adodc1.Recordset.Move p

End Sub

使用DataGrid控件显示数据的一种常用的方法,它的特点是简单直观,一目了然。DataGrid控件只能用来显示数据,数据源由ADO Data控件提供。可以通过Adodc1.Recordeset.Fields(n)读取结果集中的字段数据,n是字段的序号,第1个字段的序号为0

5.11宾馆、餐厅、娱乐资源管理模块设计

由于宾馆资源管理模块、餐厅资源管理模块设计、娱乐资源管理模块设计这三个模块设计的界面和模块功能基本相似。这里就以娱乐资源管理模块设计为例来说明。

娱乐资源管理模块可以实现以下功能:

  • 添加娱乐资源信息;
  • 修改娱乐资源信息;
  • 删除娱乐资源信息;
  • 查看娱乐资源信息。

5.11.1设计娱乐资源编辑窗体

创建一个新窗体,窗体名称设置为FrmAmuseEdit。窗体FrmAmuseEdit的布局入图5.11所示。

       5.11    窗体FrmAmuseEdit的布局

5.11.2设计娱乐项目管理窗体

与景点、宾馆、餐厅等旅游资源不同,娱乐资源包含很多的娱乐项目。如保龄球、台球、游泳等,所以需要有一个娱乐项目管理窗体。创建一个新窗体,窗体名称设置为FrmAitemMan。窗体FrmAitemMan的布局如图5.11.2所示。

5.11.2       窗体FrmAitemMan的布局

下面分析窗体FrmAitemMan中几个主要过程的代码。

  1. 公共变量

在窗体FrmAitemMan中有一个公共变量OriAid,表示当前所编辑的娱乐项目所属的娱乐厅编号。此变量必须在启动窗体FrmAitemMan之前进行设置。

  1. Loaditem()

Loaditem()过程的功能是根据变量OriAid指定的娱乐厅,读取娱乐厅中包含的所有娱乐项目,并把这些娱乐项目显示在列表中。对应的代码如下:

Private Sub Loaditem()

  Dim i As Integer

  '清空娱乐项目列表

  List1.Clear

  '根据当前的娱乐厅编号,读取所有的娱乐项目到数组ArrItem()

  MyAitem.LoadItem_ByAmuse (OriAid)

  '依次把数组ArrItem()中的数据添加到娱乐项目列表List1

  i = 0

  Do While ArrItem(i) <> ""

    List1.AddItem ArrItem(i)

    i = i + 1

  Loop

End Sub

在程序设计中,经常需要把数据库中满足一定条件的数据读取到组合框或列表框中,以便用户选择,可以使用两种方法实现此功能。第一种方法使用DataCombo控件作为组合框,使用DataList控件作为列表框,把需要的数据读取到ADO Data控件中。将DataList控件的RowSource属性设置为ADO Data控件,ListField属性设置为要读取的字段,需要的数据就会自动出现在列表框中(组合框的方法也是一样的)。这种方法比较方便,不需要编写任何代码。第二种方法可以使用ComboBox控件作为组合框,使用ListBox控件作为列表框。编写程序将需要的数据从表中读取到一个(或一组)全局数组中,然后再使用AddItem方法把数组中的元素依次添加到ComboBoxListBBox控件中。这样方法比较灵活,程序员可以控制程序的实现方法,增加一些扩展功能,同时全局数组中的数据不可以提供给其他部分的程序使用。

  1. List1_Click过程

当用户单击娱乐项目列表时,将触发List1_Click事件,对应的代码如下:

Private Sub List1_click()

  '判断是否选择了娱乐项目

  If List1.Text = "" Then

    Exit Sub

  End If

  '把选择的娱乐项目名称显示在右侧的“娱乐项目”编辑框中

  txtItem = List1.Text

  '读取娱乐项目编号,并根据此编号读取娱乐项目的所有信息

  TmpId = MyAitem.GetId(OriAid, txtItem)

  MyAitem.GetInfo (TmpId)

  '把娱乐项目的价格赋值到txtPrice文本框中

  txtPrice = MyAitem.Price

  '把娱乐项目的编辑时间赋值到lblinput_time标签中

  lblInput_time = MyAitem.Input_time

End Sub

5.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

  '读取选择好的娱乐厅娱乐,并赋值到FrmAitemMan.OriAid

  FrmAitemMan.OriAid = MyAmuse.GetId(Trim(Adodc1.Recordset.Fields(1)))

  '打开娱乐项目管理窗体

  FrmAitemMan.Show 1

End Sub

5.12 火车、飞机资源管理模块设计

火车资源管理模块设计和飞机资源管理模块设计的基本思想和结构大体上相似,这里以飞机管理模块设计为例来说明。

飞机资源管理模块可以实现以下功能:

  • 添加飞机资源信息;
  • 修改飞机资源信息;
  • 删除飞机资源信息;
  • 查看飞机资源信息。

5.12.1 设计飞机资源编辑窗体

创建一个新窗体,窗体名称设置为FrmPlaneEdit。窗体FrmPlaneEdit的布局如图5.12所示。

 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

        Check7.Value = 1

    End Select

  Loop

End Sub

  1. 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

  .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

    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

End Sub

程序中使用航班周期字符串来描述航班周期的信息。规定,航班周期字符串由一组数字组成,如果星期一有航班,则航班周期字符串中包含字符“1“:如果星期二有航班,则航班周期字符串中包含字符”2“:以次类推,星期六对应字符”6“,星期日对应字符”7“。

当启动飞机资源编辑窗体,FrmPlaneEdit时,程序将从数据库中读取相应的航班周期字符串,并把它折分成单个的数字,然后通常复选框显示在窗体中。当用户单击“确定“按钮保存飞机资源信息时,程序将把用户选择的航班周期生成航班周期字符串,并保存在数据库中。

5.13 旅游线路管理模块设计

旅游线路管理模块可以实现以下功能:

  • 添加旅游线路信息;
  • 修改旅游线路信息;
  • 删除旅游线路信息;
  • 查看旅游线路信息。

5.13.1 设计旅游线路管理窗体

创建一个新窗体,窗体名称设置为FrmLineMan。窗体FrmLineMan的布局如图5.13所示。

        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

  Loop

End Sub

2)、Form_Load过程

Private Sub Form_Load()

  ComboType.AddItem ("本市")

  ComboType.AddItem ("外埠")

  ComboType.AddItem ("国外")

  '设置地域类型

  ComboType.ListIndex = 0

  '根据指定的地域类型,读取地域名称

  Call Loadarea(1, ComboName)

  If ComboName.ListCount > 0 Then

    ComboName.ListIndex = 0

  End If

  '把所在地域的旅游线路装入列表中

  Xl_refresh

End Sub

添加、修改和删除功能的实现在介绍各旅游资源管理窗体时,已经做了比较详细的介绍,这里不再作介绍说明。

5.13.2 设计旅游线路编辑窗体

创建一个新窗体,窗体名称设置为FrmLineEdit。窗体FrmLineEdit的布局如图5.13所示。

旅游线路信息模块是整个旅游资源及线路管理系统设计的重点部分,它既包括旅游资源管理中的信息,也对旅游中的线路进行了设置和管理。它需要对景点报价、宾馆报价、餐厅报价、娱乐报价、导游费以及其他一些费用进行计算和设置,还要对交通费用进行设置和计算。因为在我们实际旅游过程中,这些都是必须要经过的,也是十分重要的,然而对于对于旅游社和旅游团来说,他们必须对所有的线路和费用了解地十分透彻和清楚,才能在实际的旅游过程中通过成本费用和线路报价之间的差额来获取利润。因此,在本系统中,对这一部分进行了比较详细地说明和设计。

下面分析窗体FrmLineEdit中几个过程的代码。

1)、Check过程

在用户保存线路之前,需要检查录入数据的有效性。这个工作由Check()过程来完成,

应的代码如下:

Public Function Check() As Boolean

  With MyLine

  '检查线路名称

  If Len(Trim(txtName)) = 0 Then

    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

    MsgBox "保险费应大于0"

    txtInsFee.SetFocus

    txtInsFee.SelStart = 0

    txtInsFee.SelLength = Len(Trim(txtInsFee))

    Check = False

    Exit Function

  End If

  End With

  Check = True

End 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)) + "%"

  End If

End 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

  SetPlaceAmt

End Sub

在显示线路景点数据时,需要根据数据库中记录的线路景点信息从景点资源表Place中提取景点价格。如果当前线路是学生线路,则提取学生价格;如果当前线路是成人线路,则提取成人价格。

Refresh_lhote()过程用于显示线路宾馆数据的内容,Refresh_lres()过程用于显示线路用餐数据的内容,Refresh_lres()过程用于显示线路娱乐数据的内容。这些过程的实现方法都与Refresh_lplace()过程相似。

在此,整个旅游资源及线路管理信息系统的基本界面设计完成了。本系统界面设计比较简洁、直观,易懂、易操作。用户根据界面的设计要求很快就可以了解基本的操作和使用方

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 = "newdb"

Public Const DSN As String = "newdb"

Public Const DB_USER_NAME As String = "sa"

Public Const DB_PASSWORD As String = "sa"

只要缺少其中任何一项,都会出现编译错误,都无法连接到数据库。

5.14.2数据库访问控件中无数据的调试

有时候在数据显示控件DataGrid中无任何数据显示。如通过Adod控件来绑定数据有时候只能对单表进行连接,但在大多数情况下,都需要对多个表进行连接。这就需要我们自己进行程序的编写和数据库SQL查询语句的选择。如通过Area表中的AreaId字段和Place表中的AreaId字段进行自然连接,在本例中,假如没有获得自动添加的标识符。则在DataGrid控件中无任何的数据显示。解决的方法如下:

1 在创建数据库表时,在用脚本文件创建表时一定要使用primary key 关键字和IDENTITY关键字结合来获得自动增加的标识号。

2 可以在SQL Server 2000服务器的企业管理器中手动对数据库表进行修改,在选定的表中单击设计表,把要选择的字段设置为主键,在属性中把标识设为“是”,标识递增量设为“1”。

3 为了避免在编写程序时要写许多重复的查询语句代码,我们可以把要连接的表变成视图,在后面的调用中只要直接对这些视图进行调用和操作,比在VB中写查询语句代码要方便得多。

5.14.3 VB中下拉文本框的调试

在界面设计时,为了用户使用的方便,我们在许多界面中都用到了下拉文本框。在这里主要讲解一下ComboBoxDataCombo两种文本框的异同和各自使用的方法及调试时所遇到的一些问题。例如,两者都可以通过ADODC控件来进行绑定,都可以显示出所需要显示的数据字段名称。但所得到的结果却不一样。

1 ComboBox通过ADODC控件绑定所得到的下拉文本框,每次只能显示一条数据,要选择其他的数据必须通过ADODC控件按钮的上一条和下一条选择按钮进行选择时,才能显示所要得到的数据。因此,在实际应用中,如果是要对ComboBox下拉框进行设置时,通常是用户自己定义一个数组,把要选择的数据库内容添加到一个数组中,然后通过ComboBox控件的AddItem属性把数组中的内容依次添加到下拉文本框中。这样就可以显示出全部的数据,这种方法的技巧和灵活性比较强,使用比较多。

2 在选择比较单一的情况下,可以通过DataCombo控件来选择所要显示的字段名称,用它来绑定ADODC,设置其DataFieldRowSource属性。就可以把要显示的数据库表中的一行字段名全部添加到下拉文本框中。这样可以给用户在实际操作过程中带来很大的方便作用。也给程序的编写带来了紧密性。

其他还有很多的问题和很多方法上的技巧,这里不一一阐述了,只是需要在实际应用中发很多的时间去考虑,或者发很多的精力去查阅相关的资料,有时候还要向老师或有经验的同学请教。在解决这些问题的时候往往都是比较兴奋和高兴的事,但解决的过程通常使人筋疲力尽。

5.14.4 系统运行及结果

通过以上的总体方案设计和代码调试后,系统的每个模块基本上都能运行,许多运行结果如主界面设计中的图例说明一样。它们能完成对数据的基本查询、添加、删除、修改等操作,对旅游过程中的每一个比较重要的环节都有一个相应的模块设置。如地域选择、线路选择、景点选择、宾馆选择、餐厅选择等,用户可以根据需要对它们进行设置和操作。

先进的系统设计方法使各模块可独立存在;整个软件易拆分,易组装,灵活方便;运行速度快,操作简便,保证软硬件双重加密,数据安全可靠;良好的系统开放能力和可扩展性,使系统可根据各个不同企事业特点,为其定制增添各类业务模块,同时还可与客户的其它信息系统进行数据互联。

6.总结

时光飞逝,曰月如梭,转眼就到了写毕业论文结束语的时候了,其实也是写大学四年生活结束语的时候,回想起来,真还有不少的回忆,收获和感叹。就拿收获来说吧,毕业论文的“峻工”真的使我强烈的感觉到了。大四的我经过这次毕业论文的设计,确实知道自己知道了一些东西,当然也学到了不少的新东西。整个设计过程是一个充满酸,甜,苦,辣,失败和成功的艰辛旅程,也可以说是“路漫漫其修远兮,吾将是下而求索”的过程。

作为一个即将毕业的大学生,将自己的所学知识很好的应用到实际中去,是决定自己是否学有所成的关键。我感觉自己对所学知识有所遗忘,这次毕业设计正好为我提供了一个这样的机会,进一步地巩固了书本知识;另外我也想利用这个宝贵的机会,学习和了解书本以外的软件开发方面的知识。使自己开阔眼界,提高素质,更好地开展毕业的准备工作。 

这次毕业论文的设计时间为一个学期。开始是老师把任务分配给我们,使我们明白这次设计的大体情况,包括设计的任务,目的,要求,时间安排等,然后我们一组各自行动,“工程”开始启动,一直到工程完毕,这期间要做的事简直是无数,如查找国内外这个研究方向的发展,系统方案的比较,选择,确定,系统的硬件设计,软件设计等等。

这次毕业设计,要用到许多新的知识,我遇到许多新问题,产生许多新思路,要综合运用以前的所学所闻来构成一个系统。自学新知识既是一个痛苦,辛酸,磨练的过程,也是一个惊奇,喜悦,收获的过程。一道一道障碍,一个一个难关,在你的面前,怎么办?于是拿出那种“天生我才必有用”“车到山前必有路”的自信心,逐个攻克,个个击破,最终成为登上顶峰的征服者,领略那种“一览众山小”的绝妙。有时也有些问题想了好几天,好几夜,百思不得其解而突然灵感出现,或不经意间得到那种“山重水尽疑无路,柳暗花明又一村”、“踏破铁鞋无览处,得来全不费功夫”的感觉也末尝不爽。

四年的大学生活就要结束了,我满载而归。不过,我又要离去,开赴新的战场,走向新的起点,迎接新的有挑战,再造新的辉煌。

作为一个软件开发人员,需要较强的实践能力。通过对该系统的设计,本人得到了以下几点心得体会:

(1)、在接到任务后,首先必须进行系统的详细分析,理解系统需要完成的功能和所能达到的要求;然后进行系统功能模块划分,找出模块之间的关系;最后根据要求设计出系统流程结构图。

(2)、在信息管理系统开发中,需要涉及许多数据库文件。能否很好的完成系统功能设计,数据库文件设计十分重要,我们必须详细的考虑到需要那些数据库文件,甚至于每个数据库文件中应包含那些字段、字段类型、字段大小都要仔细考究。最后必须建立起数据库文件之间的连接关系。

(3)、在系统开发中,会遇到很多不同类型的问题,为了避免走弯路,提高工作效率,下面介绍在系统开发中体会到的几点技巧:

●  使用创建表的脚本文件,可以提高创建表结构的速度。

●  多使用类模块,提高程序开发效率。

●  在很难确定数组大小时,使用动态数组。

●  巧妙地利用数据控件,实现数据动态管理。

●  熟练的使用函数功能。

总之,开发信息管理系统软件,不仅要有较强的理论知识,而且要有很强的实践能力,才能很好地满足用户的要求和提高自己的工作效率。

7.致谢

首先感谢计算机系领导和老师对我们这次毕业设计的重视和关心,系部召开几次动员大会来动员和鼓励同学们把毕业设计做好。使我们认识到毕业设计是走入社会前的重要一课,是自己在大学四年所学知识的综合应用,也是锻炼我们自己动手、思考能力综合性最强的一次设计,对以后的工作方向有一定的影响作用。这些都成了我们无穷的动力源泉。

在这里我要特别感谢我的指导老师唐北平老师,唐老师认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我收益匪浅。他无论在理论上还是在实践中,都给与我很大的帮助,使我得到不少地提高,这对于我以后的工作和学习都是一种巨大的帮助,感谢他耐心的辅导和对我们无私无谓的关心和爱护。

同时也感谢计算机机房的老师给我们提供了良好的开发环境和空间,还给我们带来了丰富的网上资源。这对我们的设计有很大的帮助和方便作用。

另外,一些别的指导老师和一些学习成绩好的同学也帮助解决了不少的难点,使得系统能及时开发完成,还有同组的同学同样也给与我不少帮助,在这里衷心地向你们说声感谢。

        此致

敬礼!

8.参考资料及文献

1  《Visual Basic5.0 入门与技巧》  吕丽名编著  人民邮电出版社

2 《Visual Basic 6数据库编程大全》 弗洛克维克(美)电子工业出版社(2000)

3 《Visual Basic 6数据库程序设计高手》 温贤发 科学出版社(2001)

4 《Visual Basic开发指南:SQL Server篇》邱仲潘 电子工业出版社(2000)

5  《Visual Basic编程技巧:网络与数据库篇》 清宏计算机工作室  机械工业出版社(2001)

6 《Visual basic+SQL Server数据库应用系统开发与实例》 人民邮电出版社

7 《Visual Basic.NET数据库开发典型实例》电子工业出版社

8 《数据库系统概论》(第三版)萨师煊  高等教育出版社 2002年

9 《数据库设计与开发教程》 [美]Peter Rob 电子工业出版社 2002年

10 《Visual Basic 数据库开发典型实例》王兴晶 电子工业出版社 2001年

 11 《Visual Basic 6数据库开发人员指南》[美]Roger Jennings 机械工业出版社

目 录

1.选题背景................................................................................................................. 1

1.1 旅游资源前景..................................................................................................... 1

1.2 数据库和信息管理系统前景................................................................................ 2

1.2.1 管理信息系统概念....................................................................................... 2

1.2.2 数据库的基本概念....................................................................................... 3

2.需求分析................................................................................................................. 4

2.1 软件的需求分析................................................................................................. 4

2.2 需求分析阶段对系统的综合要求有四个方面:.................................................... 4

3.方案论证................................................................................................................. 5

3.1 技术可行性........................................................................................................ 5

3.2 开发工具及开发平台的选择................................................................................ 5

3.3 采用SQL Server 2000 数据库的优点.................................................................... 6

4.服务器与客户端配置............................................................................................... 6

4.1启动、暂停和停止SQL Server2000....................................................................... 6

4.2配置ODBC数据源................................................................................................. 7

5.系统总体设计规划................................................................................................... 8

5.1 系统功能描述...................................................................................................... 9

5.2 功能模块划分..................................................................................................... 10

5.3 系统流程分析..................................................................................................... 12

5.4 数据库设计........................................................................................................ 13

5.4.1 创建数据库表:............................................................................................ 13

5.5数据库访问.......................................................................................................... 21

5.5.1 ODBC 数据库访问技术................................................................................. 21

5.5.2 数据库访问控件.......................................................................................... 22

5.6 功能模块规划...................................................................................................... 23

5.6.1添加模块...................................................................................................... 23

5.6.2 添加类模块................................................................................................. 23

5.7 系统主界面设计.................................................................................................. 24

5.7.1设计主界面.................................................................................................. 24

5.7.2在主界面中添加代码.................................................................................... 25

5.8 登录模块设计...................................................................................................... 25

5.8.1 设计登录窗体.............................................................................................. 26

5.8.2 在登录窗体中添加代码................................................................................ 26

5.9 旅游地域资源管理模块设计................................................................................. 28

5.9.1 设计旅游地域资源编辑窗体......................................................................... 28

5.9.2 设计旅游地域资源管理窗体......................................................................... 30

5.10 景点资源管理模块设计...................................................................................... 36

5.10.1 设计景点资源编辑窗体.............................................................................. 36

5.10.2 设计景点资源管理窗体.............................................................................. 39

5.11宾馆、餐厅、娱乐资源管理模块设计.................................................................. 43

5.11.1设计娱乐资源编辑窗体............................................................................... 43

5.11.2设计娱乐项目管理窗体............................................................................... 44

5.11.3 设计娱乐资源管理窗体.............................................................................. 46

5.12 火车、飞机资源管理模块设计............................................................................ 47

5.12.1 设计飞机资源编辑窗体.............................................................................. 47

5.13 旅游线路管理模块设计...................................................................................... 52

5.13.1 设计旅游线路管理窗体.............................................................................. 52

5.13.2 设计旅游线路编辑窗体.............................................................................. 54

5.14 系统调试、运行及结果...................................................................................... 58

5.14.1 VB和数据库连接时的错误调试................................................................... 58

5.14.2数据库访问控件中无数据的调试................................................................. 59

5.14.3 VB中下拉文本框的调试............................................................................. 59

5.14.4 系统运行及结果........................................................................................ 60

6.总结........................................................................................................................ 60

7.致谢........................................................................................................................ 62

8.参考资料及文献...................................................................................................... 63

  • 17
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
《姓名大乐斗》各版本下载:https://github.com/airingursb/nameplayer/releases 姓名大作战 1.0 游戏内容: 输入两个人的姓名,即可进行姓名PK。 有六项属性值: 生命值,攻击,防御,速度,命中,运气。 除了运气,其他5项属性每个姓名都有唯一的属性值相匹配。 目前只支持输入中文名。 有四项特殊技能:九阳神功,降龙十八掌,快速治疗,垂死挣扎 具体内容,大家玩玩就知道啦~ 欢迎各位提出宝贵意见,提交BUG,升级意见欢迎投稿邮箱:[email protected] 另外欢迎联系QQ:361411192 创作日期:2014.4.5 ---------------------------------------------------------------------- 姓名大作战 1.1 更新内容如下: 1.修复了速度属性值可能为0的BUG 2.修复了运气值相等时无法开始游戏的BUG 3.优化了游戏界面 4.增加了调整游戏速度的按钮 5.增加了作弊器 6.增加了复位键 至于增加新的技能,等下个版本再吧!这个版本还是遵循网页传统版本做的,贸然增加新的东西进去不但可能破坏游戏平衡性,还会引来不必要的BUG。 谢谢游戏! 更新日期:2014.4.6 ---------------------------------------------------------------------- 姓名大作战 1.2 更新内容如下: 1.优化了游戏页面,删除了一些多余的按钮 2.修改了战斗先手系统,融入了速度属性值因素 3.修改了游戏速度按钮 4.优化了作弊器 5.降低触发“垂死挣扎”的条件:触发血量上调至15 6.修复了text控件可编辑的BUG 7.发现了“降龙十八掌”中的巨大BUG,删除了此项技能 8.丰富了提示系统,并添加了登录窗口 用户名:Airing 密码:123 9.增强了“快速治疗”回复的最大生命值(由原来的20上调至30) 10.增加了“吸星大法”,可以吸收对方生命值和属性值 此次修改之后游戏算是成型了,新添加“吸星大法”或许有些BT,会在以后慢慢调整的,另外增加恢复HP系统是为了变相削弱攻击力属性。在测试中,发现攻击力过于逆天,有些姓名的攻击可以相差到100点,以至于秒杀,毫无游戏观赏性。伤害计算公式较为合理,所以只能够通过技能来增加伤害。另外,原来的“降龙十八掌”很鸡肋,初期释放过于逆天,后期释放相当于没放,运气成分过大,所以将其删除。今后会就持续游戏做出调整,比如增加姓名的HP、增加防御或者削弱攻击来达到持续战斗的目的。下个版本会融入命中率参数。 有任何新的游戏建议请联系本人,谢谢支持! 更新日期:2014.4.9 ---------------------------------------------------------------------- 姓名大作战 1.3 更新内容如下: 1.优化了登陆窗口,增加了登录系统 系统试用账号:2014612,密码:222222 2.增加了注册系统,用户名与姓名关联,一人一号 3.增加了密码找回系统 4.增加了管理员系统 5.削弱了“吸星大法”,削弱释放几率,限制使用次数 (由原本的47.5%下调为7%,全场限制施放3次) 6.增加了新技能“八门遁甲” 7.增强了“九阳神功”,取消了施放失败的情况,增强了技能威力,释放几率大 幅增加(由原本下降最大属性10点,上调为15点,释放几率由2.5%升为15%) 8.增强了“快速治疗”,释放几率大幅增加(由原本的2.5%上调至10%) 9.增强了普通攻击,基础攻击上调,释放几率增加 (基础攻击最大值由10点上升到30点,释放几率由47.5%上调至60%) 10.修复了连续与同一人作战产生相同作战过程的BUG 12.增加了胜场显示标签 新技能介绍:八门遁甲:增加自身属性值300~400点,自使用起,三个回合未解决战斗,则施放者功力枯竭而死,全场使用次数上限为1次,释放几率为5%。 更新中断了两个月,其实是在弄别的游戏,这次将技能大改动,削弱了上个版本很BUG的吸星大法。吸星大法本身效果BT,然后释放几率高达50%,所以两个人来回吸,你吸我一口我吸你一口,打个三五分钟都无法结束战斗。故本版本从几率和施放上限上削弱了吸星大法。本版本在增加普攻几率的同时,通过增加破甲基本攻击,削弱了高防御属性的姓名。平衡了各个技能的出现几率。最主要的是增加了数据库,做出登录系统,采用一人一号制,为未来的更新打下的基础。 更新日期:2014.6.13 ---------------------------------------------------------------------- 姓名大乐斗 1.4 更新内容如下: 1.《姓名大作战》正式更名《姓名大乐斗》 2.加密了数据库 3.增加了人物等级和技能等级系统 4.增加了金钱系统 4.增加了属性窗口 5.增加了显示失败场次 6.增加了商店系统,并引入新物品:小红药 7.增加了物品系统,加入新物品“小红药”和“复活药” 8.增加了新技能“金蝉脱壳” 9.“垂死挣扎”更名为“回光返照” 10.修复了使用八门遁甲功力枯竭身亡不算失败的BUG 11.修复了一方攻击比另一方防御高的时候,普攻有几率给对方加血的BUG 12.修复了可以输入不规范对手名的BUG 13.将命中属性更名为敏捷属性 14.增加了游客试玩界面(v1.3版本) 15.增加了新副本——试炼之塔 16.增加了乐斗模式 新物品介绍: 小红药:限试炼之塔使用,售价100/个,效果HP+50 复活药:限试炼之塔死亡时使用,目前只有通关试炼之塔才可获得,死亡时原地满状态复活 新技能介绍:金蝉脱壳:HP降为0时有几率以一定血量复活,每人限用1次 Lv1:触发几率5%,复活后血量20 Lv2:触发几率6%,复活后血量30 Lv3:触发几率7%,复活后血量40 新副本介绍:试炼之塔:共十层,守塔人为教技十男子。挑战过程中可以使用物品,挑战过程中状态不会回复,一旦挑战失败便会掉到第一层。通关奖励:金币5000,小红药*10,复活药*1 新模式介绍:乐斗模式:节操无下限,血量无上限!!取消等级系统,所有角色血量上限扩大20倍,八门遁甲释放几率上升为20%,并且取消限制使用次数,使用之后也不会死亡!!!金蝉脱壳触发几率上调为50%,取消限制使用次数,复活血量升为100~300!!九阳神功威力提升三倍!!尽情疯狂的打架吧!! 人物等级介绍: Lv1:胜场0~2 Lv2:胜场3~9 Lv3:胜场10~19 Lv4:胜场20~ 技能等级介绍:(主动技能的释放几率不会随等级变化) 破甲攻击: Lv1:伤害值0~30 Lv2:伤害值5~30 Lv3:伤害值5~35 九阳神功: Lv1:属性下降值1~15 Lv2:属性下降值2~17 Lv3:属性下降值3~20 八门遁甲: Lv1:属性提升值300~400 Lv2:属性提升值320~420 Lv3:属性提升值340~440 快速回复: Lv1:治疗值0~30 Lv2:治疗值10~40 Lv3:治疗值20~50 吸星大法: Lv1:吸收比率10% Lv2:吸收比率11% Lv3:吸收比率12% 回光返照: Lv1:属性提升值0~10,触发血量上限15 Lv2:属性提升值2~15,触发血量上限17 Lv3:属性提升值5~20,触发血量上限20 试炼之塔NPC介绍: 第1层:刘杰容——50,20,10,15,14 第2层:张荣佳——100,50,10,42,41 第3层:赵俊杰——2500,0,0,0,0 第4层:陈谊明——300,100,20,50,50 第5层:黄晓剑——100,300,100,50,50 第6层:赖鹏津——2000,0,500,0,0 第7层:梅震坤——500,200,200,50,50 第8层:缎嘉文——300,200,100,5000,50 第9层:范振威——3000,100,200,50,50 第10层:邓国雄——5000,500,500,500,500 经过几天几夜的更新,终于迎来了《姓名大乐斗1.4》,这次改动是几次来最大的,加入了新技能,副本系统,金钱系统,等级系统,乐斗模式,游客模式,物品系统,商店系统~~哇塞,居然改了这么多!嗯,努力往全球第一发展,争取游戏越做越大,玩家越来越多!!接下来会丰富物品系统和副本,推出越来越多的新模式,加入更多的新技能!!动画版是下一个大目标,在动画版做出来之前先慢慢丰富游戏内容,平衡游戏,增加游戏可玩度!之后的大目标的实现联网PVP对战,相信不久的将来,呈现给大家的是全新的《姓名大乐斗》!谢谢支持! 更新日期:2014.6.15 ---------------------------------------------------------------------- 姓名大乐斗 1.5 更新内容如下: 1.支持联机PVP,所有注册资源共享 2.新增了擂台战模式,只要打赢了擂主就能成为擂主,每次挑战消耗100金币,成为擂主有丰厚奖励!(金币*200,复活药*1) 3.新增了联机对战模式,只要输入对方的ID便能够PK 4.降低了小红药的售价,从200金币/个改为100金币/个 5.试炼之塔进入需要购买门票——100金币/次 6.试炼之塔不再触发八门遁甲 7.提高试炼之塔的奖励制度(第三层之后每层奖励200金币,并且回复300HP,通过之后复活药奖励改为3个) 8.新增了更新检查系统 经过几天几夜的更新,终于迎来了《姓名大乐斗1.5》,这次最重大的改动是可以联网了!!没错,新增的决斗场和擂台战绝对可以让玩家们感受到竞技的乐趣。上个版本关于试炼之塔的BUG已经修复,比如可以无限刷“刘杰容”来刷金币刷等级,莫名其妙触发八门遁甲而死的⋯⋯增加了门票收费制度的同时也丰富了奖励制度。嗯,差不多就是这样。另外新增了更新检查,有更新会提示的,暂时无法做到自动更新,注意关注我的微博,会有更新说明的。另外,招美工,为2.0版本做准备!谢谢支持! 微博:Airing-安灵 更新日期:2014.6.17 ----------------------------------------------------------------------- 更多更新可以关注:https://github.com/airingursb/

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

用数据说话用数据决策

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值