旅游资源及线路管理系统的设计与实现_第1页
旅游资源及线路管理系统的设计与实现_第2页
旅游资源及线路管理系统的设计与实现_第3页
旅游资源及线路管理系统的设计与实现_第4页
旅游资源及线路管理系统的设计与实现_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

旅游资源及线路管理系统的设计与实现1引言1.1系统开发背景随着现代科技的发展和飞速的进步,具有效率高、准确率高等特点,对我们的生活和生产有着巨大的影响。许多前沿技术的发展都依赖于计算机技术,例如:计算、数据和图像的处理、医疗、国防等领域。这些都是源于它拥有这处理信息量大和快的特点。计算机技术面向系统的设计,较大程度上提高了系统的性能,让我们在进行程序设计时能够有更大的灵活性,同时也改善了开发系统的效率,让系统的维护变得更加简单。从数据来看,每年的旅游人数都在增加,这与我们人民的生活和收入的不断提高有着密不可分的关系,与此同时人民对高质量的生活有着更大的期盼,这也促使我们迎来了我国旅游业的快速发展以及消费热潮、各种各样地旅游相关的企业也都拔地而起。旅游涉及到人们生活的很多方面,并且包含世界上每一个角落的旅游资源,对资源的管理如果不依赖管理信息系统,将非常困难。1.2研究应用现状随着旅游资源的不断开发和发展,越来越多的旅游资源希望能够被更多的人熟知,而能够很好地实现资源共享的最好的方式之一,莫过于将旅游资源信息化,才能让更多的人能够共享到更多的旅游资源,这样也会极大地推动我国旅游产业的快速发展。在这个机遇前提之下,我们同样面临着许多挑战,对庞大的信息资源的管理就是较为重要的问题之一,合理的信息管理系统就可以很好的推进问题的解决。旅游业与信息化的结合,将作为未来经济中的重要产业。旅游信息化的一个很重要的内容就是旅游信息管理系统的搭建。如果想要科学的管理,必然要与高新技术手段的结合,可以说企业信息技术的应用情况能够直接反应出它的管理水平是否先进高效。在我国乃至全世界的范围内,存在许多已经开发的旅游信息资源,但是这些信息,很多的时候又得不到及时的更新,无法给与游客一个更好的旅行。而旅游业信息化的管理可以成为许多游客的最好的信息服务中介。先进的管理和思维方式凭借着信息和网络技术的发展, 能够为旅游业带来翻天覆地的变化,促进旅游资源国际化的发展。1.3论文研究内容旅游资源及线路管理系统主要服务于旅行供应商对旅游资源的管理和旅客对旅游资源的检索等相关问题,来设计合理的解决方案,以便能够解决资源管理复杂、线路编辑繁琐等问题。在系统的需求分析、设计和实现阶段主要实现功能如下:整体旅游业务管理该系统的设计主要服务于中小旅行社进行日常的旅游资源管理,做出的一系列解决方案。在系统设计和实现过程中,运用面向对象编程技术对关键业务需求进行需求分析、设计和实现。主要包括:地域资源管理、景点资源管理、宾馆资源管理、旅游线路编辑以及报价管理。[1]旅游资源检索该系统的设计主要针对两种用户,第一种用户是上面提及的中小旅行社(商户),第二种是需要寻找旅游资源的用户(用户),该系统为第二种用户提供了旅游资源检索功能,为用户提供了一个能够选择自己喜爱旅游路线的平台。该论文的目的是利用计算机技术能够为商户和游客提供一个平台,商户可以过该系统完成对资源的日常管理,游客可以通过检索平台了解商户们发表的旅游资源信息。系统的开发运用面向对象编程和数据库技术对该系统的各个功能实现。

2系统相关技术2.1面向对象编程技术Java作为一门面向对象的设计语言,最主要的特点就是面向对象,利用核心的三个功能,封装、继承、多态能够很好的编写出逻辑严谨的程序[2]。Java虽然只支持单继承,但是它可以通过实现接口来达到多继承的效果。Java语言同样是一门健壮性较高的语言,尤其是异常处理机制能够很好的捕获异常,并处理异常。2.2MySQL数据库数据库部分是在该系统中的一个核心部分,一个良好的数据库设计不仅能够给用户更好的体验,能够提升开发人员的开发效率,系统的运行效率同样能够得到很大的提升。数据库技术涉及到数据的安全性,该数据库拥有良好的安全机制[3]。数据库设计通常核心的几个阶段包括:需求分析需求分析阶段主要是了解用户的需求,站在用户需求的角度涉及系统。其中包括数据与处理。该过程可能会花费较长的事件,但是做好准确的需求分析,极大地提高系统数据库的质量,从而能够提高整个系统的健壮性,为后期的开发工作和维护工作减少工作量。概念结构设计概念结构设计作为数据库设计中的关键一步,将前期总结的用户需求进行归纳与抽象,形成概念模型。逻辑结构设计阶段(E-R图)逻辑结构设计阶段最主要的工作就是将概念模型转换为数据模型,并完成E-R图的设计,并完成对每个实体和实体间联系的定义。2.3EclipseEclipse[4]是一个开放源代码的、基于Java的可扩展开发平台。尽管Eclipse是使用Java语言开发的,但它的用途并不限于Java语言;其他编程语言的插件都可以使用,它提供的仅仅是框架的集成,便于开发人员的使用,通过插件组件构建开发环境。

3系统概述与需求分析3.1系统总体描述伴随着旅游业的快速发展和人民生活质量的需求提高,旅游成为了人们消费,放松身心的一个很好的选择。更多的人会选择报名参团的方式出行。该系统主要实现用户管理、地域资源管理、景点资源管理、宾馆资源管理、旅游资源检索、旅游线路编辑及报价管理等主要功能模块。用户(旅客):可以实现登录,旅游资源检索、查看景点详情、查看宾馆详情、查看旅游线路。商户(旅行供应商):可以完成旅游资源的录入,录入旅游景点资源、宾馆资源、以及对旅游信息的发布和增删改查。3.2系统数据流程通过对旅行供应商的业务和需求的具体分析与调查,了解到旅游资源及线路管理系统的数据流程的整个过程,下面通过用数据流程图的方式来大致描述整个系统的数据流动。旅游资源及线路管理系统的系统数据流程图如图3-1所示。图3-1系统数据流程图3.3功能需求分析根据实地的调查和测试,最后功能需求分为:用户管理模块、地域资源管理模块、景点资源管理模块、宾馆资源管理模块、旅游线路编辑及报价管理模块、旅游资源检索模块。用户管理模块用户管理模块主要包含用户的注册和登录功能,完成对于不同的两种类型的用户的注册和登录。地域资源管理模块地域资源管理模块服务于旅行供应商,用于完成对旅游信息所属城市的管理,主要操作有增加新的地域资源,删除某地域资源,及查询旅行供应商所发布的旅游信息所在城市。景点资源管理模块景点资源管理模块服务于旅行供应商,用于完成对旅游信息所发布的景点的管理,主要操作包括增加及删除景点资源,查看及修改景点资源。宾馆资源管理模块宾馆资源管理模块服务于旅行供应商,用于完成对旅游信息所发布的宾馆资源的增删改查操作。旅游线路管理模块旅游线路作为该系统的一个核心模块,对于旅行供应商来说,主要是完成对线路的编辑及发布,增加及删除旅游线路。而对于用户旅客来说,主要是对旅游线路的查询,并收藏旅游线路等。旅游资源检索模块旅游资源检索模块主要服务于旅客,用于完成旅客对旅游信息的检索,并为旅客提供了对检索结果按价格升降排序的功能,同时为旅客提供了推荐景点及住宿资源的功能[5]。系统功能图如图3-2所示。图3-2系统功能图

3.4各模块功能描述用户注册登录模块:该模块主要完成用户的注册和登录功能,第一类用户为旅行供应商,第二类用户为旅客。地域资源管理模块:该模块主要是面向旅行供应商的。用于完成旅行供应商在整理发布旅游信息时,选择地域。处理方案是通过创建一棵树来完成对地域资源的管理,管理员可以通过增加或者删除来创建一个地域的子节点。例如:管理员需要发布一则关于北京市的旅游信息,只需要在根节点上点击,输入“北京市”即可完成地理位置的创建。景点资源管理模块:该模块主要是面向旅行供应商的。用于完成旅行供应商在编辑旅游线路的过程中,所涉及的景点资源管理。我的处理方案是通过一个表格来完成线路的编辑功能,表格一共包含五列,分别为时间、行程、景点、住宿、餐饮。在景点一列绑定了鼠标点击事件,触发事件时,弹出景点资源录入界面,输入对应的景点相关的信息,即可完成对景点的录入。宾馆资源管理模块:该模块主要是面向旅行供应商的。用于完成旅行供应商在编辑旅游线路的过程中,对宾馆资源的录入。处理方案是对线路的表格中的住宿一列添加鼠标点击时间,触发时间后,弹出对应的宾馆资源录入界面,输入对应的住宿相关的信息,即可完成对宾馆资源的录入。旅游线路管理模块:该模块作为一个服务于旅行供应商的核心模块。用于完成对整个旅游线路的编辑以及报价等信息的录入。旅游线路的录入,主要是通过一张表格的形式来展示。通过对表格中的时间、行程、景点、住宿、餐饮等所有信息的录入之后,一则旅游信息的整个线路就已经录入完成了。旅游资源检索模块:该模块主要是面向旅客服务的。旅客可以通过该模块完成对旅游资源的检索以及收藏心仪的旅游路线等功能,检索功能主要是根据一些关键字,进行匹配旅行供应商发布的旅游信息。同时在得到检索结果后,提供给旅客根据报价进行升降序排序的功能,并且会根据旅游信息的点击率,为旅客提供较为热门的景点、宾馆等信息。

4系统总体设计4.1系统技术架构根据整个旅游资源及线路管理系统的需求分析,系统的开发采用的事MVC[6]框架进行设计的,具体如下图所示系统总体技术设计图如图4-1所示。图4-1系统总体技术图在上述系统总体技术图中,视图层是实现采用的GUI编程完成的界面,用户能够清晰地看到系统反馈的信息的汇总界面;通过控制层来完成与用户的人机交互,并将用户输入的指令和数据传递给模型层;然后通过模型层与数据库的交互,采用一些相对独立的业务逻辑模块,使系统能够更好地可能不断变化的业务流程,技术上采用的事JDBC实现对数据库的一系列操作。使用MySQL作为后台数据库系统,完成整个系统的设计。系统项目目录图如图4-2所示。图4-2系统结构目录图4.2系统总体功能设计总体功能结构图分为旅行供应商的功能结构、旅客的功能结构图分别如图4-3、4-4所示。图4-3旅行供应商的功能结构图

图4-4旅客功能结构图

4.3系统数据库结构设计4.3.1数据库E-R图分析设计具体如图4-5所示。图4-5系统E-R图4.3.2数据库表设计根据以上E-R图设计了5张表,分别是用户表、旅游信息表、收藏表、旅游路线表、景点/宾馆表。表的结构如表4-1至4-5所示。表4-1用户表字段属性长度注释不为空主键useridvarchar11用户id是是usernamevarchar20用户账号是否passwordvarchar20用户密码是否typevarchar10用户类型是否表4-2旅游信息表字段属性长度注释不为空主键idvarchar11旅游信息id是是locationvarchar128地理位置是否descriptionvarchar256旅游信息描述否否imagesvarchar256旅游信息图片是否priceint11报价是否dayint11旅游天数是否user_idint11所属用户id是否表4-3收藏表字段属性长度注释不为空主键idint11收藏id是是path_idint11路线id是否user_idint11用户id是否

表4-4旅游路线表字段属性长度注释不为空主键idint11旅游路线id是是dayint11路线天数是否pathint128路线行程否否beautyvarchar256路线包含的景点id是否accommodationvarchar256路线包含的宾馆id是否foodvarchar128餐饮信息描述是否scene_idint11旅游信息id是否表4-5景点/宾馆表字段属性长度注释不为空主键idint11景点/宾馆id是是namevarchar128名称是否descriptiontext0描述否否imagesvarchar256图片是否typeint11类型(1:景点,0:宾馆)是否weightint11权值是否path_idint11路线id是否路线表与景点/宾馆表的表间联系说明:路线与景点/宾馆之间的一对多关系,实现方式为分别在路线表的beauty、accommodation字段中存入多个景点/宾馆id。在线路编辑的过程中,添加景点/宾馆信息,这样的实现方式即便景点/宾馆的名称相同,但是id也不同。

5系统详细设计5.1用户管理模块实现该模块可以实现旅客用户注册、登录,以及供应商管理员的登录。5.1.1用户注册功能用户注册功能是对用户的用户名和密码进行注册,申请一个账号。界面如图5-1所示。图5-1用户注册图设计思路如下:页面的布局采用三个标签、三个文本框、两个单选按钮和一个按钮。对必要的一些约束条件,核心的逻辑约束即为密码框和确认密码框的核实,确认密码无误,才可以进行注册操作;还有就是单选按钮两者选其一,是通过将两个单选按钮加入同一个ButtonGroup来实现。对判断用户名是否已经存在的功能实现,这里有两种方法,第一种将注册的用户名和数据库库中记录进行比对,如若相等,则表明用户名已经存在,第二种方法是通过利用数据库的UNIQUE关键字,对用户名资源添加UNIQUE关键字,则表明该资源不允许出现重复,如若在执行插入操作的过程中,数据库中已经存在该值,会导致报错;而java的异常捕获机制能够很好的处理异常,在捕获异常后,给用户提示该用户名已经存在。用户注册核心代码://单击“注册”按钮后,对用户名和密码的逻辑约束进行判断。判断成功后,申请一个User对象,将用户的属性传给User对象。register.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEventarg0){//密码框和确认密码框的值是否一致 if(String.valueOf(jf2.getPassword()).equals(String.valueOf(jf2.getPassword()))){//定义用户类Useruser_temp=newUser();user_temp.setPassword(String.valueOf(jf2.getPassword())); //判断若为旅客类型则为1,旅行供应商则为0 if(user.isSelected()){user_temp.setType(1);}else{user_temp.setType(0); } user_temp.setUsername(jf1.getText()); //调用数据库执行插入操作 intflag=Travel_Service.getInstance().insertUser(user_temp); if(flag==1) JOptionPane.showMessageDialog(null,"注册成功"); else JOptionPane.showMessageDialog(null,"注册失败"); }}});5.1.2用户登录功能用户用注册成功时的用户名和密码进行登录,一种情况是用户若为旅客,则进入旅游信息检索界面,另一种情况是用户若为供应商,则进入旅游资源及线路管理界面。登录界面如图5-2所示。 图5-2用户登录图设计思路如下:首先在JFrame窗体上添加一个JPanel面板,并设置面板的背景为背景图,再加一个面板作为容器面板,设置该容器面板为透明即可看到背景图片,然后往容器面板上添加所需组件,这里包括两个标签、两个文本框、两个单选按钮和两个按钮。登录功能的实现,主要通过为登录按钮绑定一个事件ActionListener,通过触发事件后,完成对登录模块的校验,通过将输入的用户名和密码与数据库中的用户名和密码进行一一比对,如若找到则直接返回真,进入相应的界面。对于用旅客而言,则是进入旅游信息检索界面;对于供应商而言,则是进入旅游资源及线路管理界面。用户登录的核心代码://登录的业务逻辑@Override publicvoidactionPerformed(ActionEventarg0){ //设置User的属性 user.setUsername(main.getJf1().getText().toString()); user.setPassword(String.valueOf(main.getJf2().getPassword())); if(main.getUser().isSelected()) user.setType(1); else user.setType(0); //与数据库中的用户名和密码进行校验 intflag=Travel_Service.getInstance().User_Login(user); if(flag==1) main.login(user); }//与数据库的数据进行校验,然后返回结果。publicintUser_Login(Useruser){ Connectionconn=JdbcUtil.getConnection(); Statementstmt=null; ResultSetrs=null; try{ stmt=conn.createStatement(); rs=stmt.executeQuery("select*fromuser"); while(rs.next()){ intid=rs.getInt("id"); Stringusername=rs.getString("username"); Stringpassword=rs.getString("password"); if(username.equals(user.getUsername())//用户名及密码的校验 &&password.equals(user.getPassword())){ user.setId(id); return1; } } }catch(SQLExceptione){ e.printStackTrace(); }finally{ JdbcUtil.release(rs,stmt,conn); } return0;}5.1.3用户修改密码功能该功能设计是为了满足用户修改面的需求。界面如图5-3所示。图5-3修改密码图设计思路如下:修改密码界面延用用户注册界面的风格,只需将注册按钮移除,添加一个修改按钮。再设置相应的其他组件的编辑状态,例如:用户的类型是不可以修改的等。修改用户密码功能,通过SQL语句中的update关键字来完成。定义修改密码的方法,将修改过后的User对象作为参数传入,即可。核心代码如下:publicintupdateUser(Useruser){ Connectionconn=null; Statementstmt=null; //执行修改SQL语句 Stringsql="updateusersetpassword='"+user.getPassword()+"'whereid="+user.getId(); try{ conn=JdbcUtil.getConnection(); stmt=conn.createStatement(); stmt.executeUpdate(sql); return1; }catch(SQLExceptione){ e.printStackTrace(); }finally{ JdbcUtil.release(null,stmt,conn); } return0;}5.2地域资源管理模块实现该模块能够实现旅行供应商对地域资源的管理。5.2.1增删地域资源功能该模块的设计,作为旅游资源和线路发布中的一个重要模块,在发布一则旅游信息之前,首先必须要选择你所要发布的地域,即你所发布的这则旅游信息,是属于哪个城市的地域资源。地域资源管理界面、添加地域信息界面分别如图5-4(红框部分)、5-5所示。图5-4地域资源管理界面图5-5添加地域信息图设计思路如下:对于地域资源的管理主要是通过树的结构来完成整个模块的设计,首先页面是由树(JTree)、弹出菜单(JPopupMenu)和一个滚动面板(JScrollPane)组成。将树加到一个滚动面板上,这个设计是为以后地域资源可能越来越复杂的情况,提前考虑。弹出菜单则是对每一个子节点的点击事件上触发弹出。对于整个树的操作主要通过弹出菜单来完成,弹出菜单有两个菜单项,添加和删除。当单击添加菜单项时,弹出输入对话框,录入地域资源,则树中会添加一个以输入地域名命名的子节点。删除操作是通过鼠标右击该子节点点击删除,即可。该模块主要是为了旅游资源及线路编辑模块服务的,当选中要发布的地域节点后,才可以点击发布旅游资源信息。地域资源管理核心代码://弹出菜单的事件处理程序(需要实现ActionListener接口)publicvoidactionPerformed(ActionEvente){DefaultMutableTreeNodenode= //获得右键选中的节点 (DefaultMutableTreeNode)tree.getLastSelectedPathComponent(); if(e.getSource()==addItem){//当点击添加菜单项时StringinputValue=JOptionPane.showInputDialog("输入有效城市名"); if(inputValue!=null){ ((DefaultTreeModel)tree.getModel()).insertNodeInto( newDefaultMutableTreeNode(inputValue),node,node.getChildCount()); tree.expandPath(tree.getSelectionPath()); } }elseif(e.getSource()==delItem){//当点击删除菜单项时if(node.isRoot()) return; ((DefaultTreeModel)tree.getModel()).removeNodeFromParent(node); }}5.3景点资源管理模块实现该模块服务于旅行供应商的管理模块,用于完成对旅行供应商已发布的所有的旅游信息中所涉及的所有的景点资源的增删改查的功能。宾馆资源管理模块的功能为对已发布所有旅游信息中的所有宾馆资源管理,同样包含增删改查的功能,实现方式与景点管理模块一致,后不详细赘述。5.3.1查看及修改景点资源功能景点资源管理界面、景点资源修改界面分别如图5-6(红框部分),5-7所示。图5-6景点资源管理图图5-7景点资源修改图设计思路如下:景点资源管理界面,图示中每一景点的信息占据着一行,通过自定义景点资源展示组件,来实现一个类似于表格的效果。每个自定义界面有两个JLabel组件和两个JButton组成。两个JLabel分别用于展示景点的名称和描述信息。两个JButton用于满足旅行供应商对景点的查看和修改功能。查看功能的实现比较简单,直接将景点实体类作为参数传值给景点展示界面即可。修改功能的是对数据库中某个具体的景点资源信息进行重新修改,用SQL语句中的update命令来完成。//核心代码如下://修改景点信息publicvoidupdateBeautyData(Beautybeauty){ Connectionconn=null; Statementstmt=null;//使用UPDATE命令修改数据 Stringsql="updatebeautysetname='"+beauty.getName()+"'," +"description='"+beauty.getDescription()+"'" +",images='"+contactImages(beauty.getImages())+"'" +"whereid="+beauty.getId(); try{ conn=JdbcUtil.getConnection(); stmt=conn.createStatement(); stmt.executeUpdate(sql); }catch(SQLExceptione){ e.printStackTrace(); }finally{ JdbcUtil.release(null,stmt,conn);//释放数据库连接资源 }}//带分页功能的资源面板类 publicResourcePanel(List<Scene>scenes,intpage,inttype){ this.type=type; this.scenes=scenes; s_id=listConvertArray(scenes); beauty_id=Travel_Service.getInstance().getBeautyData(s_id,type); beauties=Travel_Service.getInstance().getBeautyData(beauty_id,type); pageBean.setPage(page); pageBean.setLimit(3); //设置总页数 if(beauties.size()%pageBean.getLimit()==0){ pageBean.setTotalPage(beauties.size()/pageBean.getLimit()); }else{ pageBean.setTotalPage(beauties.size()/pageBean.getLimit()+1); } //利用公式(1)*limit来计算当前查询第多少条数据 beauties=Travel_Service.getInstance().getBeautyDataByPage((1)*pageBean.getLimit(),pageBean.getLimit(),beauty_id,type); initPane();//初始化面板}5.3.2添加及删除景点资源功能景点资源添加界面如图5-8所示,删除界面如旅游线路编辑功能中的图5-8所示。图5-8景点资源添加图设计思路如下:添加界面的设计较为简单,主要有三个标签和三个文本框组成。其中上传图片的文本框触发事件同添加旅游信息功能中的上传图片事件相同,点击添加按钮添加了响应事件。删除功能是通过旅游线路编辑模块中的删除旅游信息的功能来实现的,在旅行供应商删除一条发布的旅游信息时,会同时删除该旅游信息所包含的所有的路线,同时会删除所有路线包含的所有的景点和宾馆资源。核心代码如下://添加按钮监听事件publicvoidactionPerformed(ActionEventarg0){ //封装界面所得数据Beautybeauty=newBeauty(); beauty.setName(beauty_frame.getName1().getText()); beauty.setDescription(beauty_frame.getDescription().getText()); beauty.setImages(beauty_frame.getImage().getText().split(",")); beauty.setType(beauty_frame.getBeauty_type()); //执行插入SQL语句,并返回id intb_id=Travel_Service.getInstance().insertBeautyData(beauty,row); //更新线路表格中数据。 JTabletable=edit.getLine_table(); if(b_id!=0){Stringtext=(String)table.getModel().getValueAt(table.getSelectedRow(),table.getSelectedColumn()); if(text==null) text="";table.getModel().setValueAt(text+beauty.getName()+",",table.getSelectedRow(),table.getSelectedColumn()); if(beauty.getType()==1){ edit.getBeauty_id()[table.getSelectedRow()]+=(b_id+","); }else{edit.getAccommodation_id()[table.getSelectedRow()]+=(b_id+","); } //刷新表格 table.revalidate(); beauty_frame.dispose(); }}//删除旅游信息功能,同时删除旅游信息包含的路线,景点,宾馆资源。publicvoiddeleteData(int[]s_id,List<Beauty>list){ Connectionconn=null; Statementstmt=null; //将list转为数组 int[]b_id=convertArray(list); try{ conn=JdbcUtil.getConnection(); stmt=conn.createStatement();//删除旅游信息stmt.executeUpdate("deletefromscenewhere"+contact("id",s_id)+"");//删除收藏路线stmt.executeUpdate("deletefrommylinewhere"+contact("path_id",s_id)+""); //删除旅游信息所包含路线stmt.executeUpdate("deletefromlinewhere"+contact("scene_id",s_id)+""); //删除路线所包含景点stmt.executeUpdate("deletefrombeautywhere"+contact("id",b_id)+""); ManageFrame.getInstance().updateResourcePane(); }catch(SQLExceptione){ e.printStackTrace(); }finally{ JdbcUtil.release(null,stmt,conn); }}5.4旅游线路管理模块实现该模块作为一个提供给供应商的核心界面,主要是用来完成景点、宾馆、餐饮信息等资源的录入。通过表格完成对旅游线路的编辑。5.4.1添加旅游信息功能该模块是用于完成对旅游信息的录入设计的,供应商在编辑线路前必须先录入旅游信息,主要信息包括:描述,图片,报价,旅游天数等,以及选择需上传图片界面。界面分别如图5-9(红框部分)、5-10所示。图5-9添加旅游信息图图5-10选择图片图设计思路如下:添加旅游信息界面主要包含四个标签、一个文本域、三个文本框、和一个用于实现提交功能的按钮,选择图片界面则采用java语言中自带文件选择器(JFileChooser)来完成。这里的事件主要包含两部分,首先第一部分是上传图片所用的文本框,添加鼠标单击事件,当鼠标点击上传图片的文本框时,弹出选择文本的文本框。选择相应的图片(与该旅游信息相关的)。获取该文件的相对路径,并将其显示到文本框当中。第二部分是提交按钮的提交数据事件,当所有的数据填写完毕,并且无语义错误的时候,就将数据存储到旅游信息表(Scene)中。录入旅游信息核心代码://提交按钮的触发事件submit.addActionListener(newActionListener(){//提交按钮监听事@Override publicvoidactionPerformed(ActionEventarg0){ scene=newScene();//实例化一个旅游信息类,并设置相关属性值 scene.setDay(Integer.parseInt(day.getText())); scene.setPrice(Integer.parseInt(price.getText())); scene.setDescription(description.getText()); scene.setImages(file.getText().split(",")); JTreetree=ManageFrame.getInstance().getTreepane().getTree();DefaultMutableTreeNodenote=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent(); scene.setLocation(note.toString());//获得地域节点上信息 scene.setUser_id(ManageFrame.getInstance().getUser().getId()); //存储到数据库 ints_id=Travel_Service.getInstance().insertSceneData(scene); if(s_id>=1){ scene.setId(s_id); JOptionPane.showMessageDialog(null,"成功添加1条旅游信息"); submit.setEnabled(false); p2.add(add_line);p2.add(remove_line);p2.add(check); p2.updateUI(); initBA(Integer.parseInt(price.getText())); } }});//上传图片文本框,点击触发事件publicvoidmouseClicked(MouseEventarg0){JFileChooserchooser=newJFileChooser();//设置选择器 chooser.setDialogTitle("选择相应图片"); chooser.setMultiSelectionEnabled(true);//设为多选 intreturnVal=chooser.showOpenDialog(field);//是否打开文件选择框if(returnVal==JFileChooser.APPROVE_OPTION){//如果符合文件类型field.setText(field.getText()+"images/"+chooser.getSelectedFile().getName()+",");//相对路径 }}5.4.2旅游线路编辑功能该模块是完成旅游线路编辑的功能,通过表格的直观方式,给用户更加方便便捷的线路编辑体验,同时在编辑的过程中,完成对旅游景点的添加和宾馆资源的添加,以及餐饮信息的添加,最终生成一个完整的旅游信息显示在展示界面上。界面分别如图5-11(红框部分)、5-12(红框部分)所示。图5-11线路编辑图图5-12旅游信息展示图设计思路如下:线路编辑界面主要包括上半部分的三个按钮,和下半部分的一个表格。表格中共有五列,分别为时间,行程,游玩景点,住宿,和用餐。住宿资源录入界面主要包括三个标签、三个文本域、和一个按钮。景点资源录入界面的布局与住宿保持一致。旅游信息展示界面,每一项是自定义的旅游信息面板,旅游信息面板中包含组件则较为复杂。首先时间一列,需要根据上面录入的旅游信息的天数,自动自增,每当点击一次添加按钮,表格会自动生成一行,并且时间自增,每一行则表示一天的旅游线路。其次,在景点和住宿两列分别都添加了鼠标点击事件,当触发事件时,会分别弹出景点录入界面和住宿酒店录入界面,餐饮信息和行程,则可以直接用格式化的语言进行描述,例如:行程可描述为“北京接站,观光游览”,餐饮信息可以描述为“早餐:包含,午餐:无,晚餐:无”。在所有的信息录入,并且无误后,方可点击确认。此时一条完整的旅游资源及线路信息就录入完毕了,并且会显示旅游信息展示界面上。上传图片触发事件,同旅游信息录入模块同。旅游信息展示界面用于展示展示完整生成的每一个自定义旅游信息面板。旅游线路编辑核心代码://表格监听事件line_table.addMouseListener(newMouseAdapter(){@OverridepublicvoidmouseClicked(MouseEventarg0){//根据单击表格列数,选择相应的录入界面if(line_table.getSelectedColumn()==2){newBeautyEditFrame(edit_frame,scene,1); }elseif(line_table.getSelectedColumn()==3){ newBeautyEditFrame(edit_frame,scene,0); } }});//确认按钮事件check.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvente){inti,j;line=newLine[day_index];//定义一个数组。用于存储线路 for(i=0;i<line.length;i++){//for循环获得每一天的线路信息line[i]=newLine(); line[i].setDay(Integer.valueOf(model.getValueAt(i,0).toString()));line[i].setPath(model.getValueAt(i,1).toString());//行程 line[i].setBeauty(beauty_id[i]);//景点ID line[i].setAccommodation(accommodation_id[i]);//住宿ID line[i].setFood(model.getValueAt(i,4).toString());//餐饮信息 line[i].setScene_id(scene.getId()); //旅游信息ID Travel_Service.getInstance().insertLineData(line[i]);//执行SQL } JOptionPane.showMessageDialog(null,"成功添加"+day_index+"条路线"); ManageFrame.getInstance().getMp().addPane(scene);//旅游信息展示 ManageFrame.getInstance().getMp().updateUI(); edit_frame.dispose(); }});5.5旅游资源检索模块实现该模块主要是服务于旅客,其完成的主要功能包括:旅游信息的展示,根据关键字对旅游信息进行检索,收藏路线,为用户推荐热度较高的景点,宾馆等资源,对检索的旅游信息进行排序等功能。5.5.1旅游信息的展示及查看功能该模块作为旅游资源检索的主界面,其主要用于旅游信息的展示,对于每一条旅游信息又提供给用户以查看的功能,通过旅游信息查看界面,用户可以很好地查看该旅游信息具体包含的信息。对于线路的查看功能,通过两种方式进行展示,表格和详情两种方式。界面如图5-13、5-14、5-15所示。图5-13旅游信息检索图图5-14旅游信息查看图图5-15旅游信息行程明细图设计思路如下:旅游信息检索主界面分为以下几个区域,展示区,检索框和右边的侧边栏。展示区又由一系列的主题模块组成,每一个主题模块中,包含着一系列的旅游信息,分类展示,主要按照地区进行分类展示。我这里尚未实现分类显示,我是直接将旅游信息读出来,放在每一个展示面板上。旅游信息查看界面主要由左上角的景点轮播图、右上角的旅游信息详情,和下方的旅游线路展示区组成。旅游线路展示区又有两个界面日历模式和行程详细界面。以上三个界面读取的信息,包含了多张表的信息,主要任务就是将数据库中的信息,通过界面的形式,汇总进行展示。设计的难度主要在于界面的布局问题,设计这样复杂的界面时,应先将实现的目标效果,画个简图,然后再一步一步实现,想最终的效果靠近。要对每一种布局,它的效果是怎样的,做到熟悉。即可完成复杂界面的数据读取和显示。同时为了让用户有更好的浏览体验,必要的事件,实现界面的动态展示。旅游信息的展示及查看功能核心代码://读取旅游信息进行展示publicThemePane(LayoutManagerarg0,Stringtopic){ super(arg0); this.topic=topic; //从数据库读取所有旅游信息 scenes=Travel_Service.getInstance().getSceneData(); scene=newScenePane[scenes.length]; for(inti=0;i<scene.length;i++){//自定义旅游信息面板,只要将旅游信息对象传入即可。 scene[i]=newScenePane(newBorderLayout(),scenes[i]); } initPane();}//行程详细中一天行程的封装类构造方法publicDayDetailPanel(LayoutManagerlayout,Lineline){ super(layout); this.line=line; beauty=ts.getBeautyData(line.getBeauty().split(","), line.getAccommodation().split(","));//执行SQL查询出该路线包含的景点及住宿酒店 InitPane();//出示组件}//旅游信息封装类构造方法publicScenePane(LayoutManagerlayout,Scenes){ super(layout); icon=newImageIcon(s.getImages()[0]);//旅游信息图片第一张作为封面展示 this.s=s; initPane();//初始化组件}5.5.2旅游信息的收藏功能该功能主要为用户提供便利,方便用户在收藏某条旅游信息后,退出后再登录,仍然可以查看收藏的旅游信息,而无需再次寻找。界面如图5-16所示。图5-16路线收藏图设计思路如下:界面的设计,就是一个页签面板(JTabbedPane)中,添加一个滚动面板(JScrollPane)。在旅游信息查看界面中,有一个加入收藏按钮,点击加入收藏。将会向Myline表中添加一条数据,数据中旅游信息ID。然后点击我的路线触发事件,从数据库Myline表中读取数据中的旅游信息ID,然后再根据获取的旅游信息ID查询对应的Scene表得到最终搜藏的旅游信息。这里涉及到两个表的查询,我的解决方案是通过一个数据库的连接查询来完成。旅游信息的收藏功能核心代码://加入收藏按钮监听事件order.addActionListener(newActionListener(){@Override publicvoidactionPerformed(ActionEvente){ //将收藏路线及用户ID插入收藏表 Travel_Service.getInstance().insertMeData( MainFrame.getInstance().getUser(),s.getId()); MainFrame.getInstance().getMp().addPane(s); newMessageFrame("已加入收藏1条路线");//自定义提示框 }});//数据库Scene、Myline表连接查询publicList<Scene>getMylineData(intuser_id){ Connectionconn=null; Statementstmt=null; ResultSetrs=null; List<Scene>list=newArrayList(); try{ conn=JdbcUtil.getConnection(); stmt=conn.createStatement();//连接查询,查询用户收藏的路线 rs=stmt.executeQuery("select*frommylinem,scenes" +"wherem.scene_id=s.idandm.user_id="+user_id); while(rs.next()){ Scenescene=newScene(); scene.setId(rs.getInt(4));//路线ID scene.setLocation(rs.getString(5)); //地域信息 scene.setDescription(rs.getString(6)); //描述 scene.setImages(rs.getString(7).split(","));//图片 scene.setPrice(rs.getInt(8));//价格 scene.setDay(rs.getInt(9));//天数 list.add(scene); } }catch(SQLExceptione){ e.printStackTrace(); }finally{ JdbcUtil.release(rs,stmt,conn); } returnlist;}5.5.3旅游信息的检索及推荐景点功能该功能主要为用户提供根据旅游相关的关键字,检索旅游信息的功能,并为用户提供按价格升降排序,并为用户提供简单的推荐功能,推荐给用户浏览次数较高的景点、宾馆等资源,供旅客参考。界面分别如图5-17、5-18、5-19所示。图5-17旅游信息检索结果图图5-18热门景点住宿推荐图图5-19景点查看图设计思路如下:旅游信息检索结果界面采用了一个分页显示的结构,旅游信息检索结果界面采用了一个页签面板,三个页面分别发表热门景点、热门住宿等资源,景点查看界面则是一个轮播图和一个用于描述景点的文本域组成。检索的功能是通过数据库中模糊查询实现的,对旅游信息表中的Description字段进行模糊查询。景点推荐的功能是,用一个集合HashSet,该容器的特性是不允许有重复的资源,在用户每一次登录系统之后,点击过什么景点,系统将会该景点的ID加入到该集合中,在用户退出登录后。系统将会提交本次用户浏览过的所有景点资源,对数据库中的这些景点的权值加一。表示其热度增加一个单位。旅游信息的检索及推荐景点功能核心代码://数据库模糊查询publicList<Scene>getResultData(Stringkey,intorder){ List<Scene>list=newArrayList(); Connectionconn=null; Statementstmt=null; ResultSetrs=null; Stringsql="select*fromscenewhere" +"descriptionlike'%"+key+"%'";//模糊查询匹配关键字的旅游信息 if(order==1){ sql+="orderbypricedesc";//按价格降序 }else{ sql+="orderbyprice";//按价格升序 } try{ conn=JdbcUtil.getConnection(); stmt=conn.createStatement(); rs=stmt.executeQuery(sql); while(rs.next()){ Scenescene=newScene(); scene.setId(rs.getInt("id")); scene.setLocation(rs.getString("location")); scene.setDescription(rs.getString("description")); scene.setImages(rs.getString("images").split(",")); scene.setPrice(rs.getInt("price")); scene.setDay(rs.getInt("day")); scene.setUser_id(rs.getInt("user_id")); list.add(scene); } }catch(SQLExceptione){ e.printStackTrace(); }finally{ JdbcUtil.release(rs,stmt,conn); } returnlist;}//升序降序监听事件,用数据库Order关键字实现。publicvoidinitListener(){ orderlabel[1].addMouseListener(newMouseAdapter(){//价格降序 @Override publicvoidmouseClicked(MouseEventarg0){ mainFrame.getSr().initResult(key,1); mainFrame.addSearchPane(); } }); orderlabel[2].addMouseListener(newMouseAdapter(){//价格升序 @Override publicvoidmouseClicked(MouseEventarg0){ mainFrame.getSr().initResult(key,0); mainFrame.addSearchPane(); } });}//逻辑分页显示。publicvoidinitResult(Stringkey,intorder){ inti,j=0; this.key=key; scenes=ts.getResultData(key,order);//获取关键字模糊查询结果//计算当前查询结果最大页数 pagepane.setMaxpage(scenes.size()/pagepane.getSingle_page()); if(scenes.size()%pagepane.getSingle_page()!=0) pagepane.setMaxpage(pagepane.getMaxpage()+1); ssp=getSearchScenePane(scenes.size()); pagepane.setCurrentpage(1);//默认当前页为第一页 if(scenes.size()<pagepane.getSingle_page()) j=scenes.size(); el

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论