網(wǎng)站建站圖片網(wǎng)站流量排行
項(xiàng)目描述
臨近學(xué)期結(jié)束,還是畢業(yè)設(shè)計(jì),你還在做java程序網(wǎng)絡(luò)編程,期末作業(yè),老師的作業(yè)要求覺得大了嗎?不知道畢業(yè)設(shè)計(jì)該怎么辦?網(wǎng)頁功能的數(shù)量是否太多?沒有合適的類型或系統(tǒng)?等等。這里根據(jù)疫情當(dāng)下,你想解決的問題,今天給在家介紹一篇基于Springboot的旅游網(wǎng)站設(shè)計(jì)與實(shí)現(xiàn)。
功能需求
隨著我國人民生活水平的不斷提高,旅游已成為人們生活的重要活動(dòng),通過旅游網(wǎng)站進(jìn)行旅游景點(diǎn)查詢,旅游線路預(yù)訂等,可以為游客出行提供極大的方便。
旅游網(wǎng)站的設(shè)計(jì)是面向現(xiàn)實(shí)需求的一個(gè)實(shí)用系統(tǒng),本課題的目標(biāo)是為游客和旅游網(wǎng)站提供一個(gè)友好的、便捷的交流平臺(tái)。能實(shí)現(xiàn)網(wǎng)站前端的相關(guān)旅游信息的查詢與展示以及后端的數(shù)據(jù)庫增刪改查功能,能滿足一般用戶的旅游攻略需求。
具備以下功能:
本旅游網(wǎng)站基于MVC模式開發(fā),分為前端和后端。前端是一個(gè)信息展示網(wǎng)站,可以給用戶提供基本的旅游信息查詢功能,主要分為五個(gè)模塊:旅游咨詢模塊,旅游線路模塊,線路查詢模塊,熱點(diǎn)線路模塊;后端是管理模塊,可以實(shí)現(xiàn)對(duì)前端網(wǎng)站的模塊管理、內(nèi)容管理和用戶管理等功能。
- 旅游咨詢模塊
地點(diǎn)查詢:搜索地名關(guān)鍵字會(huì)顯示景點(diǎn)。
酒店查詢:通過所示酒店名,顯示其價(jià)格。
線路查詢:搜索地名,顯示路線。 - 旅游線路模塊
線路查詢功能:輸入地名可以查找到不同路線圖。
線路刪除功能:刪除已有的線路。
線路添加功能:輸入地名,插入對(duì)應(yīng)路線圖。
線路修改功能:修改添加錯(cuò)誤的路線名及路線圖。 - 線路查詢模塊
用戶通過輸入地名,可以查詢到對(duì)應(yīng)地點(diǎn)的路線圖。 - 熱點(diǎn)線路模塊
熱點(diǎn)路線查詢功能:點(diǎn)擊到熱點(diǎn)路線板塊,會(huì)顯示熱點(diǎn)路線地名。
熱點(diǎn)路線刪除功能:對(duì)已存在的熱點(diǎn)路線進(jìn)行刪除。 - 后端管理模塊
管理人員能夠?qū)φ麄€(gè)的系統(tǒng)進(jìn)行管理包含:用戶管理、旅行社管理、酒店管理、路線管理,預(yù)定支付管理、留言管理。
用戶管理:管理員能夠?qū)τ脩暨M(jìn)行查看和刪除。
旅行社管理:對(duì)旅行社的信息進(jìn)行增添、改正、刪除。
系統(tǒng)設(shè)計(jì)
部分效果圖
登錄注冊(cè)界面:
用戶首頁
后端功能截圖
開發(fā)架構(gòu)
B/S架構(gòu)即瀏覽器/服務(wù)器結(jié)構(gòu),Browser指的是Web瀏覽器,很少數(shù)的事務(wù)邏輯是在前端中實(shí)現(xiàn)的,主要的事務(wù)邏輯是在服務(wù)器端中實(shí)現(xiàn),B/S架構(gòu)的系統(tǒng)不需要特別的安裝,有Web瀏覽器就可以。
B/S架構(gòu)的分層:
與C/S架構(gòu)的兩層不同,B/S架構(gòu)有三層,分別為:表現(xiàn)層、邏輯層和數(shù)據(jù)層。
(1)表現(xiàn)層:完成用戶和后臺(tái)的交互實(shí)現(xiàn)最終查詢結(jié)果的輸出。
(2)邏輯層:利用服務(wù)器實(shí)現(xiàn)客戶端的應(yīng)用邏輯。
(3)數(shù)據(jù)層:接受客戶端請(qǐng)求后獨(dú)立的進(jìn)行各種計(jì)算。
B/S架構(gòu)圖如下圖2.2所示。
圖2.2 B/S架構(gòu)圖
B/S架構(gòu)的優(yōu)點(diǎn):
(1)客戶端上免安裝,有Web瀏覽器即可。
(2)可直接放在廣域網(wǎng)上,實(shí)現(xiàn)多用戶訪問的目的,交互性強(qiáng)。
(3)BS架構(gòu)不用升級(jí)客戶端,升級(jí)服務(wù)器就行。
B/S架構(gòu)的缺點(diǎn):
(1)在跨瀏覽器上,B/S架構(gòu)不太優(yōu)秀。
(2)在速度以及安全性上需花費(fèi)巨額設(shè)計(jì)成本。
(3)BS的交互是請(qǐng)求-響應(yīng)模式,需要刷新頁面。
部分代碼
public Result login(SysUser sysUser, HttpServletResponse response) {SysUser sysUserByUsrname = sysUserRepository.findSysUserByUsername(sysUser.getUsername());if (sysUserByUsrname == null) {return ResultGenerator.genFailResult("用戶名錯(cuò)誤!");} else {if (sysUser.getPassword().equals(sysUserByUsrname.getPassword())) {CookieUitl.set(response, "sysUsername", sysUser.getUsername(), 3600);return ResultGenerator.genSuccessResult();} else {return ResultGenerator.genFailResult("密碼錯(cuò)誤");}}}public void logout(HttpServletRequest request, HttpServletResponse response) {Cookie cookie = CookieUitl.get(request, "sysUsername");if (cookie != null) {CookieUitl.set(response, "sysUsername", null, 0);}}public Page<User> getUserPage(Pageable pageable) {Page<User> userPage = userRepository.findAll((root, query, cb) -> {List<Predicate> predicates = new ArrayList<>();query.where(predicates.toArray(new Predicate[]{}));query.orderBy(cb.desc(root.get("id")));return null;}, pageable);return userPage;}@Transactional(rollbackFor = Exception.class)public Result saveUser(User user) {System.out.println(user.getId());if (StringUtils.isEmpty(user.getId())) {//沒有id的情況user.setId(IdGenerator.id());} else {User oldUser = getUserById(user.getId());user.setUsername(oldUser.getUsername());user.setName(oldUser.getName());oldUser.setPassword(user.getPassword());}userRepository.saveAndFlush(user);return ResultGenerator.genSuccessResult();}public User getUserById(String id) {User user = userRepository.findById(id).orElseThrow(() -> new ServiceException("用戶ID錯(cuò)誤"));return user;}public Page<Hotel> getHotelPage(Pageable pageable) {Page<Hotel> hotelPage = hotelRepository.findAll((root, query, cb) -> {List<Predicate> predicates = new ArrayList<>();query.where(predicates.toArray(new Predicate[]{}));query.orderBy(cb.desc(root.get("createDate")));return null;}, pageable);return hotelPage;}@Transactional(rollbackFor = Exception.class)public Result saveHotel(Hotel hotel) {if (StringUtils.isEmpty(hotel.getId())) {//沒有id的情況hotel.setId(IdGenerator.id());hotel.setStatus(StatusEnum.DOWM_STATUS.getCode());hotel.setCreateDate(new Date());int i = random.nextInt(100);hotel.setImage("MY_kezhan_0" + (i % 8 + 1));} else {//有id的情況Hotel oldHotel = getHotelById(hotel.getId());hotel.setStatus(oldHotel.getStatus());hotel.setCreateDate(oldHotel.getCreateDate());hotel.setImage(oldHotel.getImage());}hotelRepository.saveAndFlush(hotel);return ResultGenerator.genSuccessResult();}public Hotel getHotelById(String id) {Hotel hotel = hotelRepository.findById(id).orElseThrow(() -> new ServiceException("酒店ID錯(cuò)誤!"));return hotel;}public Result updateStatus(String id) {Hotel hotel = getHotelById(id);if (hotel.getStatus().equals(StatusEnum.DOWM_STATUS.getCode())) {//改變狀態(tài)hotel.setStatus(StatusEnum.UP_STATUS.getCode());} else {hotel.setStatus(StatusEnum.DOWM_STATUS.getCode());}hotelRepository.saveAndFlush(hotel);return ResultGenerator.genSuccessResult();}public Page<Attractions> getAttractionsPage(Pageable pageable) {Page<Attractions> attractionsPage = attractionsRepository.findAll((root, query, cb) -> {List<Predicate> predicates = new ArrayList<>();query.where(predicates.toArray(new Predicate[]{}));query.orderBy(cb.desc(root.get("createDate")));return null;}, pageable);return attractionsPage;}public Attractions getAttractionsById(String id) {Attractions attractions = attractionsRepository.findById(id).orElseThrow(() -> new ServiceException("景點(diǎn)ID錯(cuò)誤"));return attractions;}public Result updateAttractionsStatus(String id) {Attractions attractions = getAttractionsById(id);if (attractions.getStatus().equals(StatusEnum.DOWM_STATUS.getCode())) {//改變狀態(tài)attractions.setStatus(StatusEnum.UP_STATUS.getCode());} else {attractions.setStatus(StatusEnum.DOWM_STATUS.getCode());}attractionsRepository.saveAndFlush(attractions);return ResultGenerator.genSuccessResult();}
安裝部署需求
eclipse、idea運(yùn)行啟動(dòng)
系統(tǒng)部署
系統(tǒng)開發(fā)后,在生產(chǎn)環(huán)境配置項(xiàng)目運(yùn)行環(huán)境,具體步驟如下:
安裝linux或者windows10操作系統(tǒng);
安裝JDK1.8并配置環(huán)境變量;
安裝MySQL5.7版本以上版本數(shù)據(jù)庫,創(chuàng)建數(shù)據(jù)庫并執(zhí)行腳本創(chuàng)建表;
在IDEA中編輯進(jìn)行打包;
下載并配置Tomcat8.0服務(wù)器,配置系統(tǒng)服務(wù),上傳項(xiàng)目打包文件
本項(xiàng)目用到的技術(shù)和框架
(1)開發(fā)工具:ideal、tomcat
(2)使用的語言:Java、JSP、Javascript、html、CSS
(3)操作系統(tǒng):windows操作系統(tǒng)
(4)數(shù)據(jù)庫:Mysql
本項(xiàng)目中的關(guān)鍵點(diǎn)
此系統(tǒng)的開發(fā)采用java語言開發(fā),基于B/S結(jié)構(gòu),這些開發(fā)環(huán)境使系統(tǒng)更加完善。使用到的工具和技術(shù)都是開源免費(fèi)的。
環(huán)境工具
開發(fā)工具 Eclipse/IDEA
語言 JDK1.8 、jsp、Springboot 、mybatis
硬件:筆記本電腦;
軟件:Tomcat8.0 Web服務(wù)器、Navicat數(shù)據(jù)庫客戶端、MySQL;
操作系統(tǒng):Windows 10;
其它軟件:截圖工具、常用瀏覽器;