搜索
设为首页收藏本站在线充值
 找回密码
 立即注册

本文来自

0891旅游

0891旅游

订阅|关注

请添加对本版块的简短描述

精选帖子

基于java的黔南州地区旅游网站的设计与实现

[复制链接]

49

主题

49

帖子

183

积分

注册会员

Rank: 2

积分
183
跳转到指定楼层
楼主
5840 snuupy 发表于 2020-4-24 02:05:01
我们的祖国地大物博,悠久的历史和多民族的特点为中国旅游吸引物构成,提供了得天独厚的优越条件。由此,不少人以为有了这些天赋的国宝,我们的旅游事业就必然会取得成功。然而,天时地利人和都具备的情况下,旅游行业仍然有不少问题亟待解决,市场的垄断,游客的素质文明等都将会使旅游业遭受巨大的打击和损失,为了尽可能的避免这种情况,我们急需要一款约束旅游行业的在线数据管理系统,用它来约束相关规章制度,让大家一起制定相关规范。
1、背景
1.1引言
随着我国高速的发展,万物互联的原则悄然升起,在2017年初,我国互联网经历了神一般的清洗,3G的淘汰,4G的发展,如今5G已经到来,所以随着我国高速的发展,市面上针对于旅游行业的管理软件还处于低水平状态,我国旅游业的三大系统之家(去哪儿,携程,途牛)所研发的系统各有千秋,但是确每每因为各种原因让人心生厌恶和痛恨。因此市面上急需一款让年轻人有所依赖,有所喜欢的旅游行业的管理系统终端,这个系统完全可以解决相关痛点问题。
1.2 国外研究现状
欧洲游成为出境游中的黑马。中国旅游研究院数据表明,2018年,欧洲游占我国出境游洲际市场份额的3.83%,位列第二位。其中包含“一带一路”国家最多的东欧地区,出境人数占比整个欧洲最高,达到36%,增速最快超过20%。凭借着迷人的自然风景,丰富的旅游资源。国外政府主导着旅游产业,大力发展旅游行业。生产总值比重已然超过传统的农牧业和采矿业。
国外网站的建设以专业定制化为主,和国内旅游网站开发模式有所不同,国外网站倾向于专业化做好旅游线路,主要的业务核心在于卖线路,围绕线路的归类、筛选、展示。例如机票、酒店等,都包含在线路里面,而无需专门做“机票预订”、“酒店预订”等服务。但受限于语言和币种等问题,国外的旅游网站往往不能很好的服务国内游客,并且国外的旅游网站色调单一,布局单调,无响应化设计,无国际化标签设计,导致部分中国游客青睐于国内网站。
欧盟在2001年开始实施“创建用户友好的个性化移动旅游服务”项目。重视基础设施的建设和应用推广,并致力于打造一体化市场。在智慧旅游应用方面,欧盟国公司在资助下协作开发智能导游软件,在借助全球定位系统和识别软件的基础上,还原古迹在全盛时期的样貌。旅行路线规划软件也得到了广泛应用。在智慧交通层面,为迎合自助游客需求,北美地区“游客自助导航”已经广泛应用。 在智慧酒店建设方面,北美地区以满足客户智能化、人性化和信息化需求为导向,完善细节服务、优化管理流程、降低管理 运营成本。
1.3国内研究现状
据中国互联网络信息中心(CNNIC)发布第44次《中国互联网络发展状况统计报告》报告显示,截至2019年6月,我国网民规模达8.54亿,较2018年底增长2598万,互联网普及率达61.2%,较2018年底提升1.6个百分点。由此可见,我国的网民数量仍然不断地在增长。互联网普及率越来越高。正是由于互联网信息技术的高速发展,在线旅游网站行业随之兴起。我国第一家旅游网站于1996年创建,经过了十几年的摸索,已拥有具有一定资讯服务实力的旅游网站。
现今,随着电子商务的蓬勃发展,为旅游业的发展注入新活力,开辟了智慧营销新路径,通过建设网络智慧营销服务体系,创新旅游宣传平台,加强智慧旅游运营管理,从而逐步构建起完善的旅游智慧营销模式,不断提高旅游经济效益,促进智慧旅游发展。为地区经济的快速发展带来了明显优势。
旅游电子商务改变了传统的旅游模式,给旅游产业带来了全新的发展模式,也给旅游者带来了更多更优质的服务,为旅游者增加了许多消费渠道,促进旅游企业和旅游者之间的沟通和交流,节约了旅游者大量的经济成本,也节省了时间。旅游者可根据个人需求自主选择旅行内容,享受定制旅游服务。
此外,跟团游依然是旅游的最主要形式,但目的地跟团以及主题游、深度游等的增速也在明显上升,亲子游、家庭游、研学游等新业态也成为供应商们争相发掘的市场。据中国旅游研究院统计显示,2019上半年,全国旅游人数预计30.8亿人次,国内旅游收入2.78万亿元,分别比上年增长8.8%和13.5%。
截止8月1日,中国旅游研究院发布的《中国出境旅游年度报告2019》中指出,2018年,我国的出境旅游市场规模增长到1.49亿人次,同比增长14.7%,出境游客境外消费超过1300亿美元,增速超过13%。而今年上半年出境旅游人数约8129万人次,比上年增长14%。
根据中国文化和旅游部数据显示,2019年上半年,入境旅游人数预计达到7,269万人次,国际旅游收入为649亿美元,同比分别增长5%。
入境旅游上升趋势也是进一步稳固。我国旅游业发展迅速,国内旅游、入境旅游、出境旅游全面发展。截至 2018年10月,我国 5A 级旅游景区达到 249 处,成为世界最大的国内旅游市场和世界第一大国际旅游消费国,旅游经济对国民经济贡献连年提高。
通过以上综述,可以看出,未来几年,旅游行业将会比现在更加热门,所以跻身旅游行业,完成对本系统的开发,将会给旅游业带来质的变化。
1.4黔南州地区特点及风俗文化
黔南布依族苗族自治州是贵州省辖自治州,位于贵州省中南部,东与黔东南州相连,南与广西壮族自治区毗邻,西与安顺市、黔西南州接壤,北靠省会贵阳市;处于贵州高原向广西丘陵过渡的斜坡地带,地势北高南低,地处东亚季风区。全州总面积26197平方千米,辖2个县级市、9个县、1个自治县;2017年常住人口328.09万人。
黔南布依族苗族自治州自古以来就是少数民族先民居住的区域,早在殷、周时期,境内就已有了许多部族活动,并分属于牂牁、夜郎等方国。
唐朝之后,中央政府加强了对少数民族的统治,唐宋元明时期在州境内设立了多个羁縻府、州、县、峒、卫、所。
元代,黔南开始推行土司制度,境内分属于八番顺元等处宣慰都元帅府、都云定云安抚司、新天葛蛮安抚司、播州宣慰司和庆云南丹安抚司,至明代建省前,黔南地域主要设置了卫所军事机构,黔南分属于贵州卫、龙里卫、平越卫、都云卫、新添卫、定番州、广顺州等。
明弘治年间,贵州推行“改土归流” ,部分土司统治地区改设府县,如都匀府、新贵县、贵定县和荔波县等。雍正四年,清政府在黔南境内强行大规模推行“改土归流”,废除土司世袭制度的安抚司、长官司等,而代之以流官统治,撤销了“卫所”等军事地域,将其并入府州厅县等行政地域,黔南地区分属于贵阳府、都匀府、独山州和平越直隶州。
民国三年(1914年),将清代的府州厅县一律改称为县。
民国二十四年(1935年),国民党中央政府入主贵州,改设行政督察区,黔南州地域分属于第一、第七和第十一行政督察区,第一行政督察专员公署驻定番县(今惠水县),辖今惠水、龙里、罗甸、长顺等县,第七行政督察区专员公署设在平越县(今福泉县),辖今福泉、贵定和瓮安等县市,第十一行政督察区专员公署设在独山县,辖今独山、都匀、平塘、荔波和三都等县市。之后几经分合变化。
1949年11月15日,都匀县城解放,随即成立独山专区,专员公署设于都匀县城,辖民国时期的第二行政督察区的12个县,即都匀、独山、平塘、罗甸、三都、荔波、麻江、黎平、榕江、从江、丹寨,当时的瓮安、贵定、龙里、惠水和长顺等县隶属贵阳专区。
1952年,独山专区改称都匀专区,贵阳专区改称贵定专区,专员公署移驻贵定,撤销惠水县,改设惠水县夷族苗族自治区。
1954年,改称惠水县布依族苗族自治区,这是黔南境内设置的第一个民族自治区。同年,罗甸县也改设罗甸县布依族自治区。至黔南布依族苗族自治州成立前夕,都匀、三都、独山、平塘、荔波、福泉六县隶属都匀专区;贵定、龙里、瓮安、长顺、惠水、罗甸六县隶属贵定专区。
1956年8月8日,设立黔南布依族苗族自治州,自治州人民委员会驻都匀县。
1957年1月2日,由三都县及荔波、都匀、榕江、独山等县部分地区合并设立三都水族自治县。
1958年,撤销都匀县,改设都匀市。自治州人民委员会驻都匀市。将惠水县划归贵阳市领导;安龙、镇宁2县划归安顺专区;原属安顺专区的瓮安、贵定2县划入黔南布依族苗族自治州。撤销荔波县,并入独山县;撤销平塘县,并入独山、罗甸2县;撤销紫云县,并入望谟、长顺2县;撤销贞丰县,并入兴仁县;撤销册亨县,并入安龙县。黔南布依族苗族自治州辖1市、6县、1自治县。
1961年,恢复荔波、平塘、紫云、龙里、福等5县。黔南布依族苗族自治州辖1市、11县、1自治县。
1962年,撤销都匀市,恢复都匀县。黔南布依族苗族自治州辖12县、1自治县。
1963年,原属贵阳市领导的惠水县和原属安顺专区的贞丰、册亨(驻者楼)、安龙3县划入黔南布依族苗族自治州。辖16县、1自治县。1965年将安龙、贞丰、册亨、望谟4县划归兴义专区;紫云县划归安顺专区。黔南布依族苗族自治州辖11县、1自治县。
1966年,复设都匀市。黔南布依族苗族自治州人民委员会驻都匀市。辖1市、11县、1自治县。
1996年,撤销福泉县,设立县级福泉市,以原福泉县的行政区域为福泉市的行政区域。
趋势2.1旅游行业的发展
青年正在成长的途中,一切还不确定;而旅行也是在路上,途中充满许多不确定性。正因为如此,旅行对青年充满了吸引力。旅行就是经历和体验,而青年缺乏的恰恰是丰富的经历和体验,青年如果因其年轻而纵向的经历有限,那么,横向的经历——出游,则弥补了其纵向经历的不足。因此,旅行不但是在开阔青年的视野,而且是在促成青年的成长。
根据Talking Data调查数据,2017年,国内旅游群体中,19-25岁年龄群体占23.1%,2018年,19-25岁年龄群体占23.2%。2018年,25岁以下年龄群体占36%,较2017年提升0.5个百分点。国人旅游呈年轻化趋势。
2.2旅游业待解决的问题
根据《“十三五”旅游业发展规划》,“十三五”期间,我国旅游总收入年均增长11%以上,处于黄金发展期。不过,旅游业的发展也面临不少挑战:旅游业发展与综合执法的要求不适应、旅游基础设施和公共服务明显滞后、游客和从业人员文明素质亟待提升,这些问题都需要在“十三五”期间重点加以解决。
开发工具简介3.1 eclipse与jdk简述
Jdk是Java Development Kit 的简称,是由SunMicrosystems针对Java开发员的产品,提供了开发语言环境和开发语言工具包。它在1997-09-12发布了第一个版本,给它命名为Sparkler(宝石),接下来的每一年都会有一个新版本发布,直到今天的jdk13版本。
Jdk每个版本都有自己的特性,由于jdk在1.8版本之后,不在是免费授权,所以本次开发,我们采用jdk1.8版本的免费授权版本来作为我们的开发工具。Jdk1.8是目前主流公司非常推荐的版本之一,它具有以下特点:
Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可。
新增lambda表达式。
提供函数式接口。
Java 8 允许你使用关键字来传递方法或者构造函数引用。
我们可以直接在lambda表达式中访问外层的局部变量。
所以本次开发中,我们采用jdk1.8版本来进行开发。
Eclipse是基于jdk的代码编辑器,它也是一个开发工具,主要用于我们的代码编写,错误纠错,错误语法提醒以及代码高亮显示等功能。Eclipse从2006年起,Eclipse基金会每年都会安排同步发布(simultaneous release)。至今,同步发布主要在6月进行,并且会在接下来的9月及2月释放出SR1及SR2版本。从2018年9月开始,Eclipse每3个月发布一个版本,并且版本代号不再延续天文星体名称,直接使用年份跟月份。
3.2 tomcat的快速使用
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
诀窍是,当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。目前Tomcat最新版本为9.0.27。
tomcat的使用非常简单,首先我们需要从其官网【http://tomcat.apache.org/】进行下载相对应的版本软件,然后解压到我们的磁盘目录中,进入到bin目录,双击start.bat进行启动,等待启动完成,然后打开我们的浏览器输入http:localhost:8080 就可以了。
如图所示:
图(1)tomcat首页
3.3 数据库选择方案与对比
目前市面上主要的数据库包含了关系型数据库和非关系型数据库,其中关系型数据库包含了mysql、sqlserver、oracle、sqllite等;非关系型数据库主要有redis、mongdb这两种。
在本次开发中,我们将选择采用关系型数据库mysql来作为我们的数据存储方案,采用非关系型数据库redis来作为我们的缓存存储方案。
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。
Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。
4、需求分析与代码编写
4.1系统详细需求说明书构建
为了开发需要,我们需要构建详细的需求说明书来构建我们的系统,所以下表将会针对具体的需求做出说明和介绍。
表(1)

4.2 系统数据库设计方案
4.2.1数据库命名规范
数据库命名要做到见名知义,不能以中文或者中文拼音来命名,数据库编码格式均采用utf-8amp4编码,其他编码不适合中文。如一个英文单词不能表达其意思,可以下划线分割多个单词,最长不超过50个字符。
4.2.2数据表命名规范
数据表的命名规则。同数据库命名规则相同,但仍需保持一定的原则,如某一个字段能用smallint,绝不用int,能用char绝不用varchar,原则保持存储空间最小原则命名。一张数据表至少包含一个主键,不得少于两个字段,存储引擎均采用innodb引擎。
4.2.3 数据表设计
表(2)

表(3)

表(4)

表(5)

表(6)

4.3 核心代码汇总
4.3.1 基本配置信息汇总
undertow.devMode=truejboot.server.type=undertowundertow.host=localhostundertow.port=8083undertow.session.timeout=1800undertow.session.hotSwap=trueundertow.gzip.enable=trueundertow.gzip.level=-1undertow.gzip.minLength=1024undertow.resourcePath=classpath:templatejboot.cache.type=redisjboot.cache.redis.host= 172.30.213.192jboot.cache.redis.password=jboot.cache.redis.port=6379jboot.cache.redis.database=10jboot.datasource.druid.name=druidjboot.datasource.factory=druidjboot.datasource.filters=stat,wall,log4jjboot.datasource.driverClassName=com.mysql.cj.jdbc.Driverjboot.datasource.encryptionType=encryptionjboot.datasource.publicKey=jboot.datasource.name=tourjboot.datasource.type=mysqljboot.datasource.user= rootjboot.datasource.password= rootjboot.datasource.url=jdbc:mysql://172.30.213.192:3306/tour?characterEncoding=utf8&useSSL=true&serverTimezone=UTC
4.3.2 系统登录功能逻辑代码汇总
package com.rjnetwork.controller;import java.util.ArrayList;import java.util.List;import java.util.Map;import com.jfinal.kit.Kv;import com.jfinal.plugin.activerecord.Db;import com.jfinal.plugin.activerecord.Record;import cn.hutool.core.util.StrUtil;import cn.hutool.json.JSONObject;import cn.hutool.json.JSONUtil;import io.jboot.Jboot;import io.jboot.web.controller.JbootController;import io.jboot.web.controller.annotation.RequestMapping;@RequestMapping("/login/api")public class LoginController extends JbootController {public JSONObject result = new JSONObject(); /** 系统后台登录 ***/ public void adminLogin() {  String userName = getPara("userName");  String passWord = getPara("passWord");  if (StrUtil.isAllBlank(userName)) {   result.put("code", -1);   result.put("msg", "用户名不能为空");   renderJson(result);   return;  }  if (StrUtil.isAllBlank(passWord)) {   result.put("code", -1);   result.put("msg", "密码不能为空");   renderJson(result);   return;  }  String sql = "select * from tour_admin_info where 1=1 and name=#para(userName) and pwd =#para(passWord) and flag=0  ";  Record re = Db.templateByString(sql, Kv.by("userName", userName).set("passWord", passWord)).findFirst();  if (re == null || re.getColumns().size() == 0) {   result.put("code", -1);   result.put("msg", "此用户尚未被启用或者此用户不存在");   renderJson(result);   return;  }  result.put("code", 0);  result.put("msg", "获取成功");  result.put("data", re);  Jboot.getCache().put("adminList", re.getStr("id"), re);// 把当前登录用户封装到缓存中  renderJson(result); } /***** 系统前端登录 ********/ public void frontLogin() {  String userName = getPara("userName");  String passWord = getPara("passWord");  if (StrUtil.isAllBlank(userName)) {   result.put("code", -1);   result.put("msg", "用户名不能为空");   renderJson(result);   return;  }  if (StrUtil.isAllBlank(passWord)) {   result.put("code", -1);   result.put("msg", "密码不能为空");   renderJson(result);   return;  }  String sql = "select * from tour_admin_info where 1=1 and name=#para(userName) and pwd =#para(passWord) and flag=1  ";  Record re = Db.templateByString(sql, Kv.by("userName", userName).set("passWord", passWord)).findFirst();  if (re == null || re.getColumns().size() == 0) {   result.put("code", -1);   result.put("msg", "此用户尚未被启用或者此用户不存在");   renderJson(result);   return;  }  result.put("code", 0);  result.put("msg", "获取成功");  result.put("data", re);  Jboot.getCache().put("clientUserList", re.getStr("id"), re);// 把当前登录用户封装到缓存中  renderJson(result); } /******** 系统前端注册 **********/ public void frontRegedit() {  String userName = getPara("userName");  String passWord = getPara("passWord");  if (StrUtil.isAllBlank(userName)) {   result.put("code", -1);   result.put("msg", "用户名不能为空");   renderJson(result);   return;  }  if (StrUtil.isAllBlank(passWord)) {   result.put("code", -1);   result.put("msg", "密码不能为空");   renderJson(result);   return;  }  String sql = "select * from tour_admin_info where 1=1 and name=#para(userName)   and flag=1  ";  Record re = Db.templateByString(sql, Kv.by("userName", userName)).findFirst();  if (re != null) {   result.put("code", -1);   result.put("msg", "用户名已存在,请登录");   renderJson(result);   return;  }  sql = "insert into tour_admin_info (name,pwd,status,flag,create_time) "    + "values (#para(userName),#para(passWord),1,1,now()) ";  int code = Db.templateByString(sql, Kv.by("userName", userName).set("passWord", passWord)).update();  if (code == 1) {   result.put("code", 0);   result.put("msg", "注册成功,登录账户" + userName + ";登录密码" + passWord);   renderJson(result);   return;  } else {   result.put("code", 0);   result.put("msg", "注册失败,请重试");   renderJson(result);   return;  } } public void update() {  String json = getRawData();  JSONObject jsonObj = JSONUtil.parseObj(json);  String sql = "update tour_admin_info set ";  sql += "name=#para(name),pwd=#para(pwd),email=#para(email),phone=#para(phone),havor=#para(havor)  where 1=1 and id = #para(id)";  Db.templateByString(sql,    Kv.by("id", jsonObj.getStr("id")).set("name", jsonObj.getStr("name")).set("pwd", jsonObj.getStr("pwd"))      .set("email", jsonObj.getStr("email")).set("phone", jsonObj.getStr("phone"))      .set("havor", jsonObj.getStr("havor")))    .update();  Record re = Db.templateByString("select * from tour_admin_info where 1=1 and id = #para(id)",    Kv.by("id", jsonObj.getStr("id"))).findFirst();  result.put("code", 0);  result.put("data", re);  result.put("msg", "更新成功");  renderJson(result); } public void getList() {  String sql1 = "select * from tour_admin_info  where 1=1 and `flag`=#para(flag) limit #para(page),#para(pagesize)";  String sql2 = "select count(*) from tour_admin_info where 1=1  and `flag`=#para(flag)  limit #para(page),#para(pagesize)";  int page = getParaToInt("page");  int pagesize = getParaToInt("limit");  int flag = getParaToInt("flag");  page = (page - 1) * pagesize;  List li = new ArrayList();  List lis = Db.templateByString(sql1, Kv.by("page", page).set("pagesize", pagesize).set("flag", flag))    .find();  int count = Db.templateByString(sql2, Kv.by("page", page).set("pagesize", pagesize).set("flag", flag))    .queryInt();  for (Record re : lis) {   Map m = re.getColumns();   li.add(m);  }  result.put("code", 0);  result.put("msg", "获取成功");  result.put("total", count);  result.put("data", li);  renderJson(result); } public void del() {  String json = getRawData();  JSONObject jsonObj = JSONUtil.parseObj(json);  String sql = "delete from tour_admin_info where 1=1 and id = #para(id) ";  Db.templateByString(sql, Kv.by("id", jsonObj.getStr("id"))).update();  result.put("code", 0);  result.put("msg", "删除成功");  renderJson(result); }}

4.3.3 系统控制器逻辑代码汇总
package com.rjnetwork.controller;import java.util.List;import com.jfinal.kit.Kv;import com.jfinal.plugin.activerecord.Db;import com.jfinal.plugin.activerecord.Record;import cn.hutool.json.JSONObject;import cn.hutool.json.JSONUtil;import io.jboot.web.controller.JbootController;import io.jboot.web.controller.annotation.RequestMapping;@RequestMapping("/front/api")public class FrontController extends JbootController {public JSONObject result = new JSONObject(); public void getSences() {  String sql = "select * from tour_context_info  where 1=1 and `type`='0'";  List lis = Db.templateByString(sql).find();  result.put("data", lis);  renderJson(result); } public void getJd() {  String sql = "select * from tour_context_info  where 1=1 and `type`='1'";  List lis = Db.templateByString(sql).find();  result.put("data", lis);  renderJson(result); } public void getCs() {  String sql = "select * from tour_context_info  where 1=1 and `type`='2'";  List lis = Db.templateByString(sql).find();  result.put("data", lis);  renderJson(result); } public void goBuy() {  String json = getRawData();  JSONObject jsonObj = JSONUtil.parseObj(json);  String sql = "insert into tour_order_info (name,flag,pay_time,create_time,foreign_context_id,user_id,num,prices,ydsj) "    + "values (#para(name),#para(flag),now(),now(),#para(foreignId),#para(userId),#para(num),#para(prices),#para(ydsj))";  Db.templateByString(sql,    Kv.by("name", jsonObj.getStr("name")).set("flag", jsonObj.getStr("flag"))      .set("foreignId", jsonObj.getStr("foreignId")).set("userId", jsonObj.getStr("userId"))      .set("num", jsonObj.getStr("num")).set("prices", jsonObj.getStr("prices"))      .set("ydsj", jsonObj.getStr("ydsj")))    .update();  result.put("code", 0);  result.put("msg", "支付成功");  renderJson(result); } public void getJdInfoById() {  String json = getRawData();  JSONObject jsonObj = JSONUtil.parseObj(json);  String sql = "select * from tour_context_info  where 1=1 and `type`='1' and id = #para(id)";  String sql1 = "select p.*,GROUP_CONCAT(k.content) as ct,GROUP_CONCAT(k.server_value) as serverValue,GROUP_CONCAT(k.hj_value) as hjValue,GROUP_CONCAT(k.name) as userName,GROUP_CONCAT(k.havor) as havor from tour_hotour_info p "    + "left join (select m.*,a.name,a.havor from tour_pj_info m left join tour_admin_info a on m.user_id=a.id where 1=1 and m.flag='1') k on p.id=k.foreign_id  where 1=1 and p.foreign_id=#para(id)  group by p.id";  List fjList = Db.templateByString(sql1, Kv.by("id", jsonObj.get("id"))).find();  Record re = Db.templateByString(sql, Kv.by("id", jsonObj.get("id"))).findFirst();  result.put("data", re);  result.put("fjList", fjList);  renderJson(result); } public void getOrder() {  String json = getRawData();  JSONObject jsonObj = JSONUtil.parseObj(json);  String sql = "select * from tour_order_info where 1=1 and user_id = #para(userId) ";  List fjList = Db.templateByString(sql, Kv.by("userId", jsonObj.get("userId"))).find();  result.put("data", fjList);  renderJson(result); } public void writePj() {  String json = getRawData();  JSONObject jsonObj = JSONUtil.parseObj(json);  String sql = "insert into tour_pj_info (content,server_value,hj_value,foreign_id,flag,create_time,user_id) values ("    + "#para(content),#para(serverValue),#para(hjValue),#para(foreignId),#para(flag),now(),#para(userId))";  String sql1 = "update tour_order_info set sfpj='T' where 1=1 and id=#para(orderId)";  Db.templateByString(sql1, Kv.by("orderId", jsonObj.get("orderId"))).update();  Db.templateByString(sql,    Kv.by("content", jsonObj.get("content")).set("serverValue", jsonObj.get("serverValue"))      .set("foreignId", jsonObj.get("foreignId")).set("userId", jsonObj.get("userId"))      .set("hjValue", jsonObj.get("hjValue")).set("flag", jsonObj.get("flag")))    .update();  result.put("code", 0);  result.put("msg", "评价成功");  renderJson(result); } public void getPjByFjId() {  String json = getRawData();  JSONObject jsonObj = JSONUtil.parseObj(json);  String sql = "select p.*,a.* from tour_pj_info p left join tour_admin_info a on p.user_id=a.id where 1=1 and p.flag='1' and p.foreign_id=#para(foreignId) ";  List data = Db.templateByString(sql, Kv.by("foreignId", jsonObj.get("foreignId"))).find();  result.put("data", data);  renderJson(result); }}
5、测试与上线
5.1编写测试用例
表(7)

5.2系统存在的问题
经过这一系列的开发,系统还是存在一定的缺陷和问题,还有很多技术层面的功能尚未实现。本系统功能还有待完善,针对当前功能测试用例还不够完善,功能缺陷比较明显,无法投入实际生产线上进行使用。
系统在设计之初,未考虑相关综合性问题,比如并发问题,数据一致性问题,以及线程死锁问题,都需要进行系统性的测试和开发,方可使用。
5.3 系统发布上线流程图
图(2)系统发布流程图
6、总结
通过本次开发和研究,发现了自己的知识的欠缺,于此同时也学到了很多相关经验,在遇到问题时,可以根据现有情况来查找资料,这让我学会了人生的第一课,学会利用手中的工具来得到自己的答案。也非常感谢我的老师和同学,在我最无助的时候援助了我,给我于帮助,完成了本次论文,我相信,在人生的道路上,仍会会有很多坎坷等着我,仍然会有很多的艰难险阻等着我,但是,我相信,经过本次的实践,使我有勇气面对未来的挫折。
本次论文所实现的的程序功能还有很多不足,缺陷也有很多,但是却让我学到了相关的知识,如html、js、css等前端页面绘制的语言,还有后台java、servlet等相关的动态语言,使我对未来的程序发展之路更加顺畅。
7、致谢
在此要感谢我的指导老师对我悉心的指导,感谢老师给我的帮助。在设计过程中,我通过查阅大量有关资料,与同学交流经验和自学,并向老师请教等方式,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。
在整个设计中我懂得了许多东西,也培养了我独立工作的能力,树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。而且大大提高了动手的能力,使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。
虽然这个设计做的也不太好,但是在设计过程中所学到的东西是这次毕业设计的最大收获和财富,使我终身受益。大学四年就会在这最后的毕业设计总结划上一个圆满的句号.我曾经以为时间是一个不快不慢的东西,但现在我感到时间过的是多么的飞快,三年了,感觉就在一眨眼之间结束了我的大学生涯.毕业,最重要的一个过程,最能把理论知识运用到实践当中的过程就数毕业设计了,这也是我们从一个学生走向社会的一个转折,另一个生命历程的开始。
8、参考文献
李泽群.旅游电子商务网站评价体系研究[D].海口:海南大学, 2016.刘颖异.我国旅游经济与电子商务融合刘发展[J/OL].长春:长春信息技术职业学院张馨.在线旅游网站大数据营销探究[J].中国市场,2019(22):130-131.国务院.国务院关于促进旅游业改革发展的若干意见(国发〔2014〕31 号)[Z]. 中国政府网,2014-8-9郭英.“互联网+”背景下旅游电子商务发展策略探析[J].中国市场,2019(30):182-183.汪美.“互联网+”背景下旅游规划网站的设计与开发[J].电脑知识与技术,2019,15(10):76-77.韩小乔. 出境游,增进中外文化交流[N]. 安徽日报,2018-10-07(001).魏宝祥,王亚林.近十年旅游电子商务研究综述[J].江苏商论,2017(08):43-50+54.中国互联网络信息中心《中国互联网络发展状况统计报告》桂路芬,吴菲,魏霞.基于java的旅游管理系统设计[J].通讯世界,2015(22):232.魏玲.基于JAVA的旅游网站设计与实现[J].山西电子技术,2016(02):55+66.刘京华. Java Web整合开发王者归来[M]. 北京:清华大学出版社,2010张孝祥. 深入Java Web开发内幕——核心基础[M]. 北京:电子工业出版社. 2006孙卫琴,李洪成. Tomcat 与 Java Web 开发技术详解[M]. 电子工业出版社,2003.6:1-205萨师煊,王珊. 数据库系统概论[M]. 高等教育出版社,2002.2:3-460Bruce Eckel. Thinking in Java[M]. Upper Saddle River, New Jersey, USA: Prentice Hall, 2006LEE ANNE PHILLIPS. 巧学活用HTML4[M].电子工业出版社,2004.8:1-319











您目前使用的是【试用版】,很多功能受到限制!!如果试用此插件之后满意,对您产生了帮助,请购买正式版支持一下辛苦的开发者,插件的持续发展离不开正式版用户的支持,优秀的应用得益于您的捐助,点击下面的链接去Discuz官方应用中心购买正式版永久授权


https://addon.dismall.com/?@csdn123com_todaynews.plugin
正式版后续更新升级免费,一次购买,终身使用!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则





0891拉萨网X

0511.net镇江网 分享生活 温暖你我

0511.net镇江网|镇江大小事,尽在镇江网! 镇江网由镇江亿速网络科技有限公司组建。镇江网汇集了镇江本地新闻信息,视频专题、国内外新闻、民生资讯、社会新闻、镇江论坛等。镇江网是镇江地区最具影响力的综合性门户网站,是镇江人浏览本地新闻的首选网站。...

点击查看详情 
快速回复 返回顶部 返回列表
友情链接