(ソースコード付き) springboot 観光ウェブサイト管理システム - コンピューター一式 060954

スプリングブーツ観光ウェブサイト管理システム

目次

まとめ1

1はじめに1

1.1研究の意義1

1.2研究状況1

1.3システム開発技術の特徴1

1.4論文構成と章の配置1

2観光サイト管理システムのシステム分析3

2.1実現可能性分析3

2.2システムフロー解析3

2.2.1データ追加処理3

2.3.2データ変更処理4

2.3.3データ削除手順4

2.3システム機能分析4

2.3.1機能分析4

2.3.2非機能分析5

2.4システムのユースケース分析6

2.5この章の概要7

3観光ウェブサイト管理システムの全体設計8

3.1システムアーキテクチャ設計8

3.2システム機能モジュールの設計8

3.2.1全体的な機能モジュール設計9

3.2.2ユーザーモジュールの設計9

3.2.3コメント管理モジュールの設計10

3.3データベース設計10

3.3.1データベースの概念構造設計10

3.3.2データベースの論理構造設計14

3.4章の概要17

4観光ウェブサイト管理システムの詳細設計と導入18

4.1ユーザー機能モジュール18

4.1.1フロントページのインターフェース18

4.1.2ユーザーログインインターフェース18

4.1.3ユーザー登録インターフェース21

4.1.4掲示板インターフェース23

4.1.5ニュースインターフェース24

4.1.6ホテル情報詳細インターフェース25

4.2管理者機能モジュール26

4.2.1ユーザー管理インターフェース26

4.2.2メッセージ管理インターフェイス28

4.2.3サイト管理インターフェイス29

4.2.4その他の管理インターフェイス30 _

5システムテスト32

5.1システムテストの目的32

5.2システムテストケース32

5.3システムテスト結果33

結論34

参考資料35

ありがとう36  

まとめ

情報化社会においては、ターゲットを絞った情報入手経路が求められますが、基本的には経路の拡大が人々の目指す方向であり、視点の偏りにより、得られる情報の種類が異なることが多くなり、それもまた問題です。克服するのが最も難しいテクノロジーのトピックです。観光Webサイトの課題に着目し、観光Webサイトの調査・分析を行い、課題解決に向けた観光Webサイト管理システムの開発・設計を行います。

観光ウェブサイト管理システムの主な機能モジュールには、ユーザー管理、エリア管理、景勝地管理、ホテル管理、ルート管理、景勝地のチケット購入、ホテル予約、ルート予約、ソフトウェア開発とハードウェアのオブジェクト指向開発モードの採用が含まれます。実際の使用のニーズを十分に満たし、対応するソフトウェアのセットアップとプログラムのコーディング作業を完璧にし、バックグラウンドデータの主なストレージユニットとしてMysqlを採用し、ビジネスシステムのコーディングと開発にJavaテクノロジーとAjaxテクノロジーを使用して、これを実現します。システムの完全な機能。この報告書はまず研究の背景、機能、意義を分析し、研究作業の合理性の基礎を築きます。観光ウェブサイト管理システムのさまざまな要件と技術的問題を分析し、システムの必要性と技術的実現可能性を証明し、その後、デザインシステムで使用する必要がある技術ソフトウェアと設計アイデアの基本を紹介し、最終的に実現します。観光ウェブサイト管理システムと導入実行はそれを使用します。

キーワード:スプリングブートテクノロジー、MYSQL、観光ウェブサイト管理システム

概要

情報化社会においては、対象を絞った情報アクセスが求められていますが、アクセスの拡大は基本的に人々の努力の方向です。視点のズレにより、人は異なる種類の情報を取得することが多くなりますが、これはテクノロジーが克服するのが最も難しい課題でもあります。観光ウェブサイトの問題を目指して,本論文は,観光ウェブサイトを研究及び分析し,次に,問題を解決するための観光ウェブサイト管理システムを開発及び設計する。

観光ウェブサイト管理システムの主な機能モジュールには、ユーザー管理、エリア管理、景勝地管理、ホテル管理、ルート管理、景勝地のチケット購入、ホテルの予約、ルート予約が含まれます。ソフトウェア開発とハードウェア構築にはオブジェクト指向開発モードが採用されており、実際の使用ニーズを十分に満たし、対応するソフトウェア構築とプログラムコーディングを改善し、バックグラウンドデータの主記憶装置としてMySQLを採用し、JavaテクノロジーとAjax技術を利用して業務システムをコーディング・開発することで、システムのすべての機能が実現されます。この報告書はまず、研究作業の合理性の基礎を築く研究の背景、機能、意義を分析します。本稿では、観光ウェブサイト管理システムのさまざまな要件と技術的問題を分析し、システムの必要性と技術的実現可能性を証明し、その後、システムの設計に必要な技術ソフトウェアと設計思想について基本的に紹介します。最後に、観光ウェブサイト管理システムを実現し、展開します。

キーワード:  Springboot テクノロジー; MYSQL;観光ウェブサイト管理システム

1 はじめに

1.1研究の意義

 開発の初期段階では、我が国の観光ウェブサイトのほとんどは、観光産業とネットワーク運営に対する包括的な理解が不足していたため、入り口を特定できず、観光ウェブサイトには特徴や「セールスポイント」が欠けていました。完成後は他の観光サイトの既製品をコピーすることも多く、欧米などインターネット先進国のサイトの中国語版、あるいは大手サイトの代表格となっている。 。その結果、バージョンのデザインや内容が類似しており、重複構築の問題が深刻であり、一定規模のビジネスモデルを形成しておらず、また、オンラインでのプロモーションや予約の高い成功率にも達しておらず、観光産業全体における電子商取引の売上高は、情けないほど小さいです。観光商品取引におけるセキュリティ問題は、観光ウェブサイト開発のボトルネックとなっている。観光商品の取引プロセス全体がダイナミックでオープンな観光 Web サイト上で安全に完了できるかどうかは、観光客が Web サイトで観光商品を購入することを選択する際の最初の考慮事項の 1 つです。しかし、私の国の旅行ウェブサイトのほとんどは、オンライン決済方法が不健全で、統一された標準システムが欠如しており、オンライン取引のセキュリティはさらに懸念されています。悪意のある注文や取引エラーは珍しくないため、消費者は観光商品のオンライン取引に高い信頼を持っていません。したがって、取引の安全性の問題は、観光ウェブサイトの開発における最大の障害となっています。

したがって、このウェブサイトで改善する必要があるのは、観光ポータルの人気と評判を強化および拡大し、ネットワークマーケティングでうまく機能することです。観光ウェブサイトは、人気と評判を拡大し、観光ポータルサイトの特徴的なブランドを構築するために、観光ウェブサイトの信頼性、安全性、対称性を確保するための評判システムの構築を強化する必要があります。合理的かつ科学的な管理運営基準を策定し、ウェブサイトの指導と規制を強化します。ウェブサイトの適切な運営システムを積極的に指導、管理、構築し、広告情報の知名度と強度を拡大します。

1.2 研究状況

我が国の観光電子商取引の開始は諸外国に比べてやや遅く、1996 年に観光専門サイトが登場し始め、その後、観光電子商取引は急速に発展し、2000 年に第一次絶頂期を迎えました。 2001年の世界の観光産業は、全体的なマイナス成長状況の影響を受け、今年中国の観光産業は一定の困難を経験し、成長率が低下し、それ以来、観光電子商取引ブームの波は新たな「加速発展期」に入った。現在、我が国には、一定の観光情報機能を備えたウェブサイトが 5,000 以上あります。その中には、主に地域ウェブサイト、専門ウェブサイト、ポータルウェブサイトの旅行チャネルなど、300社以上の専門観光会社が存在します。   

しかし、観光電子商取引はまだ初期段階にあり、先進国と比べると大きな差があり、旅行サイトにログインしたことのある国内ネットユーザーはネットユーザー総数に占める割合が低く、ネットユーザーの割合はまだ低い。オンラインで旅行を予約した人はさらに少ないです。私の国の観光アプリケーションシステムの全体的な開発レベルは非常に低く、情報サービス能力は限られており、ネットワークマーケティングは単なる流行であり、消費者の育成、観光電子商取引ソフトウェアおよびハードウェア環境の成熟、および政府政策の構築規制は緊急であり、未解決の問題です。豊かな観光資源を有する大国である我が国には、高度な情報技術を活用して観光産業が急速な成長を遂げ、さらなる飛躍を遂げることが期待されています。

1.3 システム開発技術の特徴

(1) 観光 Web サイト管理システムの Web バックグラウンド管理のバックエンドは、古い jsp+javabean+servlet テクノロジーを使用しなくなり、現在の主流の springboot フレームワークを使用して、Java 構成コードを削減し、プログラミング コードを簡素化します。多くの企業に選ばれているフレームワークの一つでもあります。

(2) 観光ウェブサイト管理システムにおけるウェブバックグラウンド管理のフロントエンドは JavaScript フレームワークを使用しており、ajax[8] と jquery[9] を使用してページデザインを美しくすることができます。

(3) 観光サイト管理システムのデータベースには実行効率の高いMysql5.7を採用しています。

1.4 論文構成と章の配置

論文は抽象的な謝辞と参考文献を除いて階層的に構成され、本文では Web サイトの要件も分析し、一般的な設計と実装された機能を説明し、最後にいくつかの試運転記録をリストします。次のように:

第1章;序章。第 1 章では、主に対象研究の背景、システム開発の現状、本稿の研究状況と主な業務を紹介します。

第 2 章: システム要件の分析。第 2 章では、主にシステムの利用者と機能の側面から需要分析を行います。

第 3 章: システム設計。第 3 章では主にシステムフレーム、システム機能モジュール、データベースの機能設計を進めます。

第 4 章: システムの実現。第 4 章では主にシステムフレームワークの構築とシステムインターフェースの実現について紹介します。

第 5 章: システムのテスト。第 5 章では主にシステムのいくつかのインターフェイスをテストし、主要な機能をテストします。

第 6 章: 概要。

2 観光サイト運営システムの分析

システム分析はプロジェクト開発の前提条件であり、システム分析を通じてシステムの主要ユーザーの基本的なニーズを十分に理解することができ、これがプロジェクト開発の理由でもあります。さらに、システム開発に関しては、通常、技術的実現可能性、経済的実現可能性などを含めた実現可能性分析が行われます。実現可能性分析は、プロジェクト全体の観点からの分析でもあります。次に、プロジェクトの特定のニーズを分析します。分析の手段は通常、ユーザーのユース ケース図を通じて実現されます。以下に詳しくご紹介します。

2.1実現可能性の分析

(1) 経済性:

プロジェクトで使用されるツールのほとんどは現在一般的なオープンソースで無料であるため、開発の初期段階ではプロジェクトに使用される資金が大幅に削減され、ソフトウェアの開発は開発期間中の資金の影響を受けません。プロジェクトの立ち上げ時期にあるため、経済的にはまだ実現可能です。ユーザーのニーズを満たすために、最小限のコストを使用するようにしてください。人件費や設備費に充てるための資金を節約します。ペーパーレス化と高効率化の道はますます進んでいきます。

したがって、経済的存続可能性については何の疑問もありません。

(2) 運用可能性:

このプロジェクトの設計では、このモードでの Web サイトのいくつかの開発事例を参照し、その操作インターフェイスを分析し、多くの事例を組み合わせて、基本的なコンピューターの知識を持つ人がこのプロジェクトを操作できるように、人間中心の操作と簡素化された操作を強調しています。

したがって操作性には問題ありません。

(3) 技術的な実現可能性:

技術的実現可能性とは、フレームワークの構築の実現可能性、より優れた技術が登場した場合のシステム技術のアップグレードの受け入れ可能性、および開発時間とコストの比率を指します。

既存の Springboot テクノロジーは、あらゆる電子商取引システムの構築に対応できます。この観光ウェブサイト管理システムを開発する際には、springboot+MYSQL を使用してプログラム全体を実行しました。

結論から言えば、技術的な実現可能性には問題はない。

(4) 法的実現可能性:

開発者の観点から見ると、springboot と MYSQL はオープンソースでオンラインで無料であり、知的財産権に関して法的な紛争は発生しません。

ユーザー利用の観点からは、システム上で密輸品が販売されない限り、システム上で条約が締結され、違法な支払いは排除されます。

要約すると、法的な実現可能性に疑問はありません。

2.2 システムフロー解析

ビジネス プロセスは、特定の記号や線を使用して、ユーザーによるシステムの使用プロセスを示すものです。システム分析を実行する際、ビジネス プロセスは、開発者がビジネスをより深く理解し、エラーを発見し、システムを改善するのに役立ちます。

2.2.1 データ追加処理

ユーザーがシステムに正常にログインした、データを追加する操作が実現できます。追加するデータの数はシステムによって生成される特定の数であり、ユーザーが任意に入力することはできません。その数以外は、ユーザーが自由に入力できます。その他の追加情報をご自身で入力し、入力された情報がシステムによって検証され、正当であることが確認されます。合格はデータの追加が成功したことを示します。逆は、追加が成功しませんでした。図 2-1 は、データの追加が成功したことを示します。データを追加しています。

 

図 2-1 データ追加のフローチャート

2.2.2 データ変更プロセス

図 2-2に示すように、データ変更のプロセスは、上で説明したデータ追加のプロセスと同様です

 

図 2-2 データ変更のフローチャート

2.2.3 データ削除プロセス

システム内に不要なデータが存在する場合管理担当者はこれらのデータを削除することもできます (図2-3にデータ削除のフローチャートを示します)。

 

図 2-3 データ削除のフローチャート

2.3 システム機能の分析

2.3.1 機能分析

観光サイト管理システムの役割に応じて、登録ユーザー管理モジュール、加盟店管理モジュール、一般管理者管理モジュールの3つに分けました。

ユーザー管理モジュール:

(1) ユーザー登録とログイン:ユーザーは観光サイト管理システムにユーザー登録しログインし、個人データやパスワード変更などの個人情報の追加、削除、変更、確認を行います。

(2)観光ウェブサイト管理システムのホームページ情報を確認する:観光ウェブサイト管理システムのホームページ情報には、ホームページ、お知らせ、ニュース、観光スポット情報、ホテル情報、ルート情報、マイ(マイアカウント、マイお気に入り、パーソナルセンター)が含まれます。 ))待ってください。

(3) お知らせ: ユーザーは、[お知らせ] メニューでユーザーが送信した投稿を表示、公開し、コメントすることができます。

(4) ニュース:ユーザーはニュースを読んだり、管理者が発表したニュース情報を確認したりします。

( 5 ) 私のお気に入り: 「私の」では、「私のお気に入り」情報を表示および管理でき、お気に入りを表示したり、お気に入り情報を削除したりすることもできます。

(6) マイアカウント: ユーザーが右上隅の「マイ」ボタンをクリックすると、サブメニューが表示されます。「マイアカウント」をクリックして、システムにログインするための個人情報とパスワードを設定します。

(7) パーソナル センター: ユーザーが右上隅の「マイ」ボタンをクリックすると、情報管理の対応する背景に入ります。

管理者管理モジュール:

(1) ログイン:管理者のアカウントはデータテーブルに直接設定および生成され、登録は必要ありません。

(2) サイト管理: 「サイト管理」メニューをクリックすると、カルーセル マップ + 掲示板の 2 つのサブメニューが表示され、これら 2 つのモジュールの追加、削除、変更、確認ができます。

(3) ユーザー管理: 「ユーザー管理」メニューをクリックすると、管理者+登録ユーザー + 販売者の3 つのサブメニューが表示され、これら 3 つのモジュールを追加、削除、変更、確認できます。

(4) コンテンツ管理: 「コンテンツ管理」メニューをクリックすると、ニュース管理 + ニュース分類の2 つのサブメニューが表示され、ユーザーがフロントデスクで送信したニュースを管理し、同時に管理することができます。フロントに表示されるニュース一覧情報の追加・削除・変更・確認操作。

( 5 ) 詳細管理: 「詳細」メニューをクリックすると、エリア管理 + 景勝地管理 + ホテル管理 + ルート管理 + 景勝地チケット購入 + ホテル予約 + ルート予約 の7 つのサブメニューが表示されます追加、削除、これら7 つのモジュールを変更およびクエリします。

2.3.2 非機能分析

観光ウェブサイト管理システムのセキュリティ、信頼性、パフォーマンス、拡張性など、観光ウェブサイト管理システムの非機能要件。具体的には、次の表 3-1 で表すことができます。

3-1観光ウェブサイト管理システムの機能要件表

安全性

主に観光ウェブサイト管理システムデータベースのインストールを指し、データベースの使用とパスワードの設定は規範に準拠する必要があります。

信頼性

信頼性とは、観光ウェブサイト管理システムがユーザーの指示に従ってインストールおよび操作できることを意味し、テストの結果、信頼性は90%以上です。

パフォーマンス

観光サイト管理システムが市場を占有するためには、パフォーマンスが必須の条件であるため、最高のパフォーマンスが得られます。

スケーラビリティ

たとえば、データベースは、システムの非機能要件を確実に満たすために、インターフェイスの使用などの複数の属性を予約します。

使いやすさ

利用者は観光サイト管理システムのページ表示内容に従うだけで操作できます。

保守性

観光サイト管理システムの開発は保守性が非常に重要ですが、テスト後は保守性に問題はありません

2.4システムのユースケース分析

2.3 の機能の分析を通じて、観光ウェブサイト管理システムのユースケース図が得られます。

図 2-3 は、ユーザーの役割の例を示しています。

 

図 2-3 観光 Web サイト管理システムにおけるユーザーの役割のユースケース図

Web バックグラウンド管理の管理者は、観光 Web サイト管理システム全体のすべてのデータ情報を維持します。図 2-4 は、管理者の役割の例を示しています。

 

図 2-4観光ウェブサイト管理システムにおける管理者の役割のユースケース図

2.5 この章の概要

本章では、主に観光Webサイト管理システムの実現可能性分析、プロセス分析、機能要件分析、システムユースケース分析を通じて、観光Webサイト管理システム全体で実現すべき機能を決定します。同時に、観光ウェブサイト管理システムのコード実装とテストのための標準も提供します。

3 観光サイト運営システムの全体設計

この章では主に観光サイト管理システムの機能モジュール設計とデータベースシステム設計について説明します。

3.1システムアーキテクチャ設計

観光ウェブサイト管理システムは、アーキテクチャ的にプレゼンテーション層(UI)、ビジネスロジック層(BLL)、データ層(DL)の3層に分かれています。

図 3-1 観光 Web サイト管理システムのシステムアーキテクチャ設計図

 

プレゼンテーション層 (UI): UI 層とも呼ばれ、主に観光 Web サイト管理システムの UI インタラクション機能を完成させます。優れた UI は、ユーザーのユーザー エクスペリエンスを向上させ、観光 Web サイト管理システムを使用する際のユーザーの快適さを向上させることができます。UI インターフェイスのデザインは、良好な互換性を実現するために、観光 Web サイト管理システムのさまざまなバージョンやさまざまなサイズの解像度にも適応する必要があります。UI インタラクション機能の要件は合理的であり、ユーザーはインタラクティブ操作を実行するときに一貫したインタラクション結果を取得する必要があります。これには、プレゼンテーション層とビジネス ロジック層の間の適切な接続が必要です。

ビジネス ロジック層 (BLL): 主に観光ウェブサイト管理システムのデータ処理機能を完成させます。ユーザーがプレゼンテーション層から送信したデータは処理されてビジネスロジック層を介してデータ層に渡され、システムがデータ層から読み出したデータは処理されてビジネスロジック層を介してプレゼンテーション層に渡されます。

データ層(DL):この観光ウェブサイト管理システムのデータはサーバー側のmysqlデータベースに配置されるため、サービス層に属する部分はビジネスロジック層に直接統合できるため、データベースのみが存在します。データ層では、主に観光ウェブサイト管理システムのデータ保存と管理機能が完成します。

3.2システム機能モジュールの設計

3.2.1 全体的な機能モジュール設計

前章では、システムの機能要件と非機能要件を主に分析し、要件に従って観光ウェブサイト管理システムのユースケースを分析しました。次に、観光ウェブサイト管理システムのアーキテクチャ、主要機能、データベースの設計を開始します。観光ウェブサイト管理システムは、前章の要件分析に従って得られ、その全体的な設計モジュール図を図 3-2 に示します。

図 3-2観光ウェブサイト管理システムの機能モジュール図

 

3.2.2ユーザーモジュールの設計

バックグラウンド管理者は、フロントデスクに登録されているユーザーの追加、削除、変更、照会を行うことができます。ユーザーモジュールの構造図は次のとおりです。

 

図 3-3 ユーザーモジュールの構成図

3.2.3コメント管理モジュールの設計

観光ウェブサイト管理システムはコミュニケーションのためのオープンプラットフォームであり、ユーザーと管理者はプラットフォーム上の情報にコメントすることができ、ユーザー間の交流を促進します。しかし同時に、コメントの内容をより適切に規制し、管理者に不適切なコメントを削除する機能を提供するには、コメント管理モジュールを特別に設計する必要があり、具体的な構造図は次のとおりです。

 

図 3-4 コメントモジュールの構造図

3.3 データベース設計

データベースの設計は、一般に要件分析、概念モデル設計、データベーステーブル構築の 3 つの主要なプロセスから構成されます。要件分析については前章で説明しましたが、概念モデル設計は概念モデルと論理構造設計の 2 つの部分に分かれます。

3.3.1データベースの概念的な構造設計

以下は、観光ウェブサイト管理システム全体の主要なデータベース テーブルの ER エンティティ関係図です。

図 3-6 観光ウェブサイト管理システム全体の ER 関係図

 

観光ウェブサイト管理システムのデータベースの全体的な ER 関係図によると、観光ウェブサイト管理システムには多くの ER 図が必要であると結論付けることができ、いくつかの主要なデータベース ER モデル図がここにリストされています。

 

図 3-7 登録ユーザー ER 関係図

 

図3-8 経路予約のER関係図

 

図 3-9 アトラクション情報の ER 関係図

 

図 3-10 景勝地チケット購入の ER 関係図

3.3.2 データベースの論理構造設計

前セクションの観光ウェブサイト管理システムの ER 関係図によると、多くのデータ テーブルを作成する必要があると結論付けることができます。ここでは主に、いくつかの主要なデータベース テーブル構造設計をリストします。

scenic_spot_ticket_purchase表:

名前

タイプ

長さ

nullではない

主キー

ノート

scenic_spot_ticket_purchase_id

整数

11

はい

はい

アトラクションチケットID

アトラクション番号

可変長文字

64

いいえ

いいえ

アトラクション番号

景勝地エリア

可変長文字

64

いいえ

いいえ

アトラクションエリア

営業時間

可変長文字

64

いいえ

いいえ

営業時間

予約_電話

可変長文字

16

いいえ

いいえ

予約ライン

詳細な住所

可変長文字

64

いいえ

いいえ

住所

チケットの金額

整数

11

いいえ

いいえ

チケットの金額

出版社

整数

11

いいえ

いいえ

出版社

ユーザー

整数

11

いいえ

いいえ

ユーザー

予定番号

整数

11

いいえ

いいえ

予定数

総費用

可変長文字

64

いいえ

いいえ

総費用

スケジュールされた時間

日にち

0

いいえ

いいえ

予定時間

支払い州

可変長文字

16

はい

いいえ

支払い状況

支払いの種類

可変長文字

16

いいえ

いいえ

支払いの種類

お勧め

整数

11

はい

いいえ

インテリジェントな推奨事項

作成時間

日付時刻

0

はい

いいえ

作成時間

更新時間

タイムスタンプ

0

はい

いいえ

更新時間

絶景スポット情報表:

名前

タイプ

長さ

nullではない

主キー

ノート

景観スポット情報id

整数

11

はい

はい

アトラクション情報ID

アトラクション番号

可変長文字

64

はい

いいえ

アトラクション番号

絶景スポットの名前

可変長文字

64

いいえ

いいえ

アトラクション名

景勝地エリア

可変長文字

64

いいえ

いいえ

アトラクションエリア

営業時間

可変長文字

64

いいえ

いいえ

営業時間

風景スポットカバー

可変長文字

255

いいえ

いいえ

アトラクションのカバー

予約_電話

可変長文字

16

いいえ

いいえ

予約ライン

詳細な住所

可変長文字

64

いいえ

いいえ

住所

出版社

整数

11

いいえ

いいえ

出版社

チケットの金額

整数

11

いいえ

いいえ

チケットの金額

チケット数

整数

11

いいえ

いいえ

チケットの枚数

風景スポットの詳細

長文

0

いいえ

いいえ

アトラクション詳細

ヒット

整数

11

はい

いいえ

ヒット

賞賛レン

整数

11

はい

いいえ

いいね!

お勧め

整数

11

はい

いいえ

インテリジェントな推奨事項

作成時間

日付時刻

0

はい

いいえ

作成時間

更新時間

タイムスタンプ

0

はい

いいえ

更新時間

route_pre表:

名前

タイプ

長さ

nullではない

主キー

ノート

ルート事前ID

整数

11

はい

はい

ルート予約ID

ルート番号

可変長文字

64

いいえ

いいえ

路線番号

ルート名

可変長文字

64

いいえ

いいえ

路線名

出発点

可変長文字

64

いいえ

いいえ

出発点

行き先

可変長文字

64

いいえ

いいえ

行き先

ルート_価格

可変長文字

64

いいえ

いいえ

路線価

距離_キロメートル

可変長文字

64

いいえ

いいえ

キロメートル

出版社

整数

11

いいえ

いいえ

出版社

ユーザー

整数

11

いいえ

いいえ

ユーザー

スケジュールされた時間

日にち

0

いいえ

いいえ

予定時間

支払い州

可変長文字

16

はい

いいえ

支払い状況

支払いの種類

可変長文字

16

いいえ

いいえ

支払いの種類

お勧め

整数

11

はい

いいえ

インテリジェントな推奨事項

作成時間

日付時刻

0

はい

いいえ

作成時間

更新時間

タイムスタンプ

0

はい

いいえ

更新時間

route_information表:

名前

タイプ

長さ

nullではない

主キー

ノート

ルート情報id

整数

11

はい

はい

路線情報ID

ルート番号

可変長文字

64

はい

いいえ

路線番号

ルート名

可変長文字

64

いいえ

いいえ

路線名

出発点

可変長文字

64

いいえ

いいえ

出発点

行き先

可変長文字

64

いいえ

いいえ

行き先

ルートカバー

可変長文字

255

いいえ

いいえ

ルートカバー

ルート_価格

可変長文字

64

いいえ

いいえ

路線価

距離_キロメートル

可変長文字

64

いいえ

いいえ

キロメートル

出版社

整数

11

いいえ

いいえ

出版社

ルートの詳細

長文

0

いいえ

いいえ

ルート詳細

ヒット

整数

11

はい

いいえ

ヒット

賞賛レン

整数

11

はい

いいえ

いいね!

お勧め

整数

11

はい

いいえ

インテリジェントな推奨事項

作成時間

日付時刻

0

はい

いいえ

作成時間

更新時間

タイムスタンプ

0

はい

いいえ

更新時間

registered_user表:

名前

タイプ

長さ

nullではない

主キー

ノート

登録ユーザーID

整数

11

はい

はい

登録ユーザーID

備考

可変長文字

64

いいえ

いいえ

述べる

検査状態

可変長文字

16

はい

いいえ

承認状況

お勧め

整数

11

はい

いいえ

インテリジェントな推奨事項

ユーザーID

整数

11

はい

いいえ

ユーザーID

作成時間

日付時刻

0

はい

いいえ

作成時間

更新時間

タイムスタンプ

0

はい

いいえ

更新時間

地域管理テーブル:

名前

タイプ

長さ

nullではない

主キー

ノート

地域管理ID

整数

11

はい

はい

リージョン管理ID

領域

可変長文字

64

いいえ

いいえ

エリア

お勧め

整数

11

はい

いいえ

インテリジェントな推奨事項

作成時間

日付時刻

0

はい

いいえ

作成時間

更新時間

タイムスタンプ

0

はい

いいえ

更新時間

hotel_reservation表:

名前

タイプ

長さ

nullではない

主キー

ノート

ホテル予約ID

整数

11

はい

はい

ホテル予約ID

ホテル番号

可変長文字

64

いいえ

いいえ

ホテル番号

hotel_name

varchar

64

酒店名称

hotel_area

varchar

64

酒店地区

reservation_telephone

varchar

16

预定电话

location_details

varchar

64

位置详情

room_price

int

11

房间价格

publisher

int

11

发布商家

user

int

11

用户

scheduled_time

date

0

预定时间

scheduled_number

int

11

预定数

total_cost

varchar

64

合计费用

pay_state

varchar

16

支付状态

pay_type

varchar

16

支付类型

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

hotel_information表:

名称

类型

长度

不是null

主键

注释

hotel_information_id

int

11

酒店信息ID

hotel_number

varchar

64

酒店编号

hotel_name

varchar

64

酒店名称

hotel_area

varchar

64

酒店地区

hotel_cover

varchar

255

酒店封面

reservation_telephone

varchar

16

预定电话

location_details

varchar

64

位置详情

room_price

int

11

房间价格

number_of_rooms

int

11

房间数

publisher

int

11

发布商家

hotel_details

longtext

0

酒店详情

hits

int

11

点击数

praise_len

int

11

点赞数

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

business表:

名称

类型

长度

不是null

主键

注释

business_id

int

11

商家ID

merchant_qualification

varchar

255

商家资质

remarks

varchar

64

备注

examine_state

varchar

16

审核状态

recommend

int

11

智能推荐

user_id

int

11

用户ID

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

3.4本章小结

整个旅游网站管理系统的需求分析主要对系统总体架构以及功能模块的设计,通过建立E-R模型和数据库逻辑系统设计完成了数据库系统设计。

4旅游网站管理系统详细设计与实现

旅游网站管理系统的详细设计与实现主要是根据前面的旅游网站管理系统的需求分析和旅游网站管理系统的总体设计来设计页面并实现业务逻辑。主要从旅游网站管理系统 界面实现、业务逻辑实现这两部分进行介绍。

4.1用户功能模块

4.1.1 前台首页界面

当进入旅游网站管理系统的时候,首先映入眼帘的是系统的导航栏,下面是轮播图以及系统内容,其主界面展示如下图4-1所示。

 

图4-1 前台首页界面图

4.1.2用户登录界面

旅游网站管理系统中的前台上注册后的用户是可以通过自己的账户名和密码进行登录的,当用户输入完整的自己的账户名和密码信息并点击“登录”按钮后,将会首先验证输入的有没有空数据,再次验证输入的账户名+密码和数据库中当前保存的用户信息是否一致,只有在一致后将会登录成功并自动跳转到旅游网站管理系统的首页中;否则将会提示相应错误信息,用户登录界面如下图4-2所示。

 

图4-2用户登录界面图

登录关键代码如下所示。

/**

     * 登录

     * @param data

     * @param httpServletRequest

     * @return

     */

    @PostMapping("login")

    public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {

        log.info("[执行登录接口]");

        String username = data.get("username");

        String email = data.get("email");

        String phone = data.get("phone");

        String password = data.get("password");

        List resultList = null;

        Map<String, String> map = new HashMap<>();

        if(username != null && "".equals(username) == false){

            map.put("username", username);

            resultList = service.select(map, new HashMap<>()).getResultList();

        }

        else if(email != null && "".equals(email) == false){

            map.put("email", email);

            resultList = service.select(map, new HashMap<>()).getResultList();

        }

        else if(phone != null && "".equals(phone) == false){

            map.put("phone", phone);

            resultList = service.select(map, new HashMap<>()).getResultList();

        }else{

            return error(30000, "账号或密码不能为空");

        }

        if (resultList == null || password == null) {

            return error(30000, "账号或密码不能为空");

        }

        //判断是否有这个用户

        if (resultList.size()<=0){

            return error(30000,"用户不存在");

        }

        User byUsername = (User) resultList.get(0);

        Map<String, String> groupMap = new HashMap<>();

        groupMap.put("name",byUsername.getUserGroup());

        List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();

        if (groupList.size()<1){

            return error(30000,"用户组不存在");

        }

        UserGroup userGroup = (UserGroup) groupList.get(0);

        //查询用户审核状态

        if (!StringUtils.isEmpty(userGroup.getSourceTable())){

            String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();

            String res = String.valueOf(service.runCountSql(sql).getSingleResult());

            if (res==null){

                return error(30000,"用户不存在");

            }

            if (!res.equals("已通过")){

                return error(30000,"该用户审核未通过");

            }

        }

        //查询用户状态

        if (byUsername.getState()!=1){

            return error(30000,"用户非可用状态,不能登录");

        }

        String md5password = service.encryption(password);

        if (byUsername.getPassword().equals(md5password)) {

            // 存储Token到数据库

            AccessToken accessToken = new AccessToken();

            accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));

            accessToken.setUser_id(byUsername.getUserId());

            tokenService.save(accessToken);

            // 返回用户信息

            JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));

            user.put("token", accessToken.getToken());

            JSONObject ret = new JSONObject();

            ret.put("obj",user);

            return success(ret);

        } else {

            return error(30000, "账号或密码不正确");

        }

}

4.1.3用户注册界面

不是旅游网站管理系统中正式用户的是可以在线进行注册的,如果你没有本旅游网站管理系统的账号的话,添加“注册”,当填写上自己的账号+密码+确认密码+昵称+邮箱+手机号等后再点击“注册”按钮后将会先验证输入的有没有空数据,再次验证密码和确认密码是否是一样的,最后验证输入的账户名和数据库表中已经注册的账户名是否重复,只有都验证没问题后即可用户注册成功。其用用户注册界面展示如下图4-3所示。

 

图4-2用户注册界面图

注册关键代码如下所示。

/**

     * 注册

     * @param user

     * @return

     */

    @PostMapping("register")

    public Map<String, Object> signUp(@RequestBody User user) {

        // 查询用户

        Map<String, String> query = new HashMap<>();

        query.put("username",user.getUsername());

        List list = service.select(query, new HashMap<>()).getResultList();

        if (list.size()>0){

            return error(30000, "用户已存在");

        }

        user.setUserId(null);

        user.setPassword(service.encryption(user.getPassword()));

        service.save(user);

        return success(1);

}

/**

     * 用户ID:[0,8388607]用户获取其他与用户相关的数据

     */

    @Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    @Column(name = "user_id")

    private Integer userId;

    /**

     * 账户状态:[0,10](1可用|2异常|3已冻结|4已注销)

     */

    @Basic

    @Column(name = "state")

    private Integer state;

    /**

     * 所在用户组:[0,32767]决定用户身份和权限

     */

    @Basic

    @Column(name = "user_group")

    private String userGroup;

    /**

     * 上次登录时间:

     */

    @Basic

    @Column(name = "login_time")

    private Timestamp loginTime;

    /**

     * 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时

     */

    @Basic

    @Column(name = "phone")

    private String phone;

    /**

     * 手机认证:[0,1](0未认证|1审核中|2已认证)

     */

    @Basic

    @Column(name = "phone_state")

    private Integer phoneState;

    /**

     * 用户名:[0,16]用户登录时所用的账户名称

     */

    @Basic

    @Column(name = "username")

    private String username;

    /**

     * 昵称:[0,16]

     */

    @Basic

    @Column(name = "nickname")

    private String nickname;

    /**

     * 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成

     */

    @Basic

    @Column(name = "password")

    private String password;

    /**

     * 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时

     */

    @Basic

    @Column(name = "email")

    private String email;

    /**

     * 邮箱认证:[0,1](0未认证|1审核中|2已认证)

     */

    @Basic

    @Column(name = "email_state")

    private Integer emailState;

    /**

     * 头像地址:[0,255]

     */

    @Basic

    @Column(name = "avatar")

    private String avatar;

    /**

     * 创建时间:

     */

    @Basic

    @Column(name = "create_time")

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

    private Timestamp createTime;

    @Basic

    @Transient

    private String code;

}

4.1.4公告栏界面

当点击导航栏上的“公告栏”的时候,就会进入对应的界面查看公告信息,公告栏界面如下图4-4所示。

 

图4-4公告栏界面图

4.1.5新闻资讯界面

当访客点击旅游网站管理系统中导航栏上的“新闻资讯”后将会进入到该“新闻资讯”列表的界面,然后选择想要看的新闻资讯,点击进入到详细界面,新闻资讯界面如下图4-5所示。

 

图4-5新闻资讯界面图

4.1.6酒店信息详情界面

当访客点击了任意酒店后将会进入该酒店的详情界面,可以了解到该酒店的酒店编号、酒店名称、酒店地区、预定电话、位置详情、房间价格、房间数、发布商家等,同时可以对该酒店进行收藏+点赞+评论,酒店详情展示页面如图4-6所示。

 

图4-6酒店信息详情界面图

4.2管理员功能模块

4.2.1 用户管理界面

旅游网站管理系统中的管理人员是可以对前台注册的用户、商家进行管理的,也可以对管理员进行管控。界面如下图4-7所示。

 

图4-7用户管理界面图

用户管理关键代码如下所示。

public String encryption(String plainText) {

        String re_md5 = new String();

        try {

            MessageDigest md = MessageDigest.getInstance("MD5");

            md.update(plainText.getBytes());

            byte b[] = md.digest();

            int i;

            StringBuffer buf = new StringBuffer("");

            for (int offset = 0; offset < b.length; offset++) {

                i = b[offset];

                if (i < 0)

                    i += 256;

                if (i < 16)

                    buf.append("0");

                buf.append(Integer.toHexString(i));

            }

            re_md5 = buf.toString();

        } catch (Exception e) {

            e.printStackTrace();

        }

        return re_md5;

    }

4.3.2留言管理界面

旅游网站管理系统中的管理人员是可以对前台用户发布的留言进行管控的,界面如下图4-8所示。

 

图4-8留言管理界面图

4.3.3站点管理界面

旅游网站管理系统中的管理人员在“站点管理”这一菜单中是可以对前台显示的轮播图以及公告栏进行管控。界面如下图4-9所示。

 

图4-9站点管理界面图

站点管理关键代码如下所示。

  @PostMapping("/add")

    @Transactional

    public Map<String, Object> add(HttpServletRequest request) throws IOException {

        service.insert(service.readBody(request.getReader()));

        return success(1);

    }

    @Transactional

    public Map<String, Object> addMap(Map<String,Object> map){

        service.insert(map);

        return success(1);

}

    public Map<String,Object> readBody(BufferedReader reader){

        BufferedReader br = null;

        StringBuilder sb = new StringBuilder("");

        try{

            br = reader;

            String str;

            while ((str = br.readLine()) != null){

                sb.append(str);

            }

            br.close();

            String json = sb.toString();

            return JSONObject.parseObject(json, Map.class);

        }catch (IOException e){

            e.printStackTrace();

        }finally{

            if (null != br){

                try{

                    br.close();

                }catch (IOException e){

                    e.printStackTrace();

                }

            }

        }

        return null;

}

    public void insert(Map<String,Object> body){

        StringBuffer sql = new StringBuffer("INSERT INTO ");

        sql.append("`").append(table).append("`").append(" (");

        for (Map.Entry<String,Object> entry:body.entrySet()){

            sql.append("`"+humpToLine(entry.getKey())+"`").append(",");

        }

        sql.deleteCharAt(sql.length()-1);

        sql.append(") VALUES (");

        for (Map.Entry<String,Object> entry:body.entrySet()){

            Object value = entry.getValue();

            if (value instanceof String){

                sql.append("'").append(entry.getValue()).append("'").append(",");

            }else {

                sql.append(entry.getValue()).append(",");

            }

        }

        sql.deleteCharAt(sql.length() - 1);

        sql.append(")");

        log.info("[{}] - 插入操作:{}",table,sql);

        Query query = runCountSql(sql.toString());

        query.executeUpdate();

    }

4.2.4更多管理界面

旅游网站管理系统中的管理人员在“更多管理”这一菜单下是可以对旅游网站管理系统内的地区管理、景点管理、酒店管理、路线管理、景点购票、酒店预定、路线预定进行管控的,其管理界面如下图4-10所示。

 

图4-10更多管理界面图

更多管理关键代码如下所示。

@RequestMapping(value = "/del")

    @Transactional

    public Map<String, Object> del(HttpServletRequest request) {

        service.delete(service.readQuery(request), service.readConfig(request));

        return success(1);

}

    @Transactional

    public void delete(Map<String,String> query,Map<String,String> config){

        StringBuffer sql = new StringBuffer("DELETE FROM ").append("`").append(table).append("`").append(" ");

        sql.append(toWhereSql(query, "0".equals(config.get(FindConfig.GROUP_BY))));

        log.info("[{}] - 删除操作:{}",table,sql);

        Query query1 = runCountSql(sql.toString());

        query1.executeUpdate();

    }

5系统测试

5.1系统测试的目的

系统开发到了最后一个阶段那就是系统测试,系统测试对软件的开发其实是非常有必要的。因为没什么系统一经开发出来就可能会尽善尽美,再厉害的系统开发工程师也会在系统开发的时候出现纰漏,系统测试能够较好的改正一些bug,为后期系统的维护性提供很好的支持。通过系统测试,开发人员也可以建立自己对系统的信心,为后期的系统版本的跟新提供支持。

5.2 系统测试用例

系统测试包括:用户登录功能测试、酒店展示功能测试、酒店添加、酒店搜索、密码修改功能测试,如表5-1、5-2、5-3、5-4、5-5所示:

用户登录功能测试:

表5-1 用户登录功能测试表

用例名称

用户登录系统

目的

测试用户通过正确的用户名和密码可否登录功能

前提

未登录的情况下

测试流程

1) 进入登录页面

2) 输入正确的用户名和密码

预期结果

用户名和密码正确的时候,跳转到登录成功界面,反之则显示错误信息,提示重新输入

实际结果

实际结果与预期结果一致

酒店查看功能测试:

表5-2 酒店查看功能测试表

用例名称

酒店查看

目的

测试酒店查看功能

前提

用户登录

测试流程

点击酒店列表

预期结果

可以查看到所有酒店信息

实际结果

实际结果与预期结果一致

管理员添加酒店界面测试:

表5-3 管理员添加酒店界面测试表

用例名称

酒店发布测试用例

目的

测试酒店发布功能

前提

用户正常登录情况下

测试流程

1)点击酒店信息管理就,然后点击添加后并填写信息。

2)点击进行提交。

预期结果

提交以后,页面首页会显示新的酒店信息 

实际结果

实际结果与预期结果一致

酒店搜索功能测试:

表5-4酒店搜索功能测试表

用例名称

酒店搜索测试

目的

测试酒店搜索功能

前提

测试流程

1)在搜索框填入搜索关键字。

2)点击搜索按钮。

预期结果

页面显示包含有搜索关键字的酒店

实际结果

实际结果与预期结果一致

密码修改功能测试:

表5-5 密码修改功能测试表

用例名称

密码修改测试用例

目的

测试管理员密码修改功能

前提

管理员用户正常登录情况下

测试流程

1)管理员密码修改并完成填写。

2)点击进行提交。

预期结果

使用新的密码可以登录

实际结果

实际结果与预期结果一致

5.3 系统测试结果

通过编写旅游网站管理系统的测试用例,已经检测完毕用户登录模块、酒店查看模块、酒店添加模块、酒店搜索模块、密码修改功能测试,通过这5大模块为旅游网站管理系统的后期推广运营提供了强力的技术支撑。

结论

至此,旅游网站管理系统已经结束,在开发前做了许多的准备,在本系统的设计和开发过程中阅览和学习了许多文献资料,从中我也收获了很多宝贵的方法和设计思路,对系统的开发也起到了很重要的作用,系统的开发技术选用的都是自己比较熟悉的,比如Web、springboot技术、MYSQL,这些技术都是在以前的学习中学到了,其中许多的设计思路和方法都是在以前不断地学习中摸索出来的经验,其实对于我们来说工作量还是比较大的,但是正是由于之前的积累与准备,才能顺利的完成这个项目,由此看来,积累经验跟做好准备是十分重要的事情。

当然在该系统的设计与实现的过程中也离不开老师以及同学们的帮助,正是因为他们的指导与帮助,我才能够成功的在预期内完成了这个系统。同时在这个过程当中我也收获了很多东西,此系统也有需要改进的地方,但是由于专业知识的浅薄,并不能做到十分完美,希望以后有机会可以让其真正的投入到使用之中。

参考文献

[1]邢剑飞,翁晶晶,李晓,孙菲,郭云天,吕韦琰. 一种基于物联网的乡村智慧旅游管理系统[P]. 浙江省:CN114422541A,2022-04-29.

[2]侯猛,李莉莉. 一种智慧物联旅游管理系统[P]. 重庆市:CN111035160B,2022-04-22.

[3]于建韬.智慧旅游管理系统的分析与应用[J].佳木斯职业学院学报,2022,38(03):155-157.

[4]Guo Wenru,Ahmed Syed Hassan. Safety Risk Assessment of Tourism Management System Based on PSO-BP Neural Network[J]. Computational Intelligence and Neuroscience,2021,2021.

[5]Huang, Xiaofei,Jagota, Vishal,Espinoza Muñoz, Einer,Flores Albornoz, Judith. Tourist hot spots prediction model based on optimized neural network algorithm[J]. International Journal of System Assurance Engineering and Management,2021(prepublish).

[6]Sun Wanxin,Tsai Sang-Bing. Research on the Construction of Smart Tourism System Based on Wireless Sensor Network[J]. Mathematical Problems in Engineering,2021,2021.

[7]邓永涛,胡文文,潘涛,张颖,陈欢.基于JavaEE和微信公众号的微信矩阵旅游管理系统[J].电子测试,2021(08):77-78+47.DOI:10.16520/j.cnki.1000-8519.2021.08.032.

[8]郑清兰.“互联网+”旅游管理系统的设计与实现[J].攀枝花学院学报,2021,38(02):55-61.DOI:10.13773/j.cnki.51-1637/z.2021.02.010.

[9]周巧凤.浅谈智慧旅游管理系统提高景区绩效水平[J].中国管理信息化,2020,23(18):107-108.

[10]张文正.RBF神经网络的旅游管理系统安全风险评价[J].现代电子技术,2020,43(13):65-68.DOI:10.16652/j.issn.1004-373x.2020.13.016.

[11]杨雪.旅游管理信息化探析[J].旅游纵览(下半月),2020(08):60-61.

[12]刘旸,丁仲德.基于旅游管理系统理论的青岛市导游素质提升策略研究[J].中共青岛市委党校.青岛行政学院学报,2019(06):85-89.DOI:10.13392/j.cnki.zgqd.2019.06.016.

[13]黄强,林宏贵,张鹏飞,裴玮.基于北斗位置服务的GIS可视化旅游管理系统设计与实现——以四姑娘山为例[J].技术与市场,2018,25(12):19-23.

[14]朱娜.大数据时代下《旅游管理信息系统》教学改革初探[J].现代营销(经营版),2018(12):213-214.DOI:10.19921/j.cnki.1009-2994.2018.12.173.

[15]张舒瑶.基于我国旅游管理信息化问题的探讨[J].现代经济信息,2018(22):357.

[16]. 论贵州“旅普”基础数据在旅游管理中的应用[C]//.贵州省旅游资源大普查地学旅游研究论文集.,2017:344-350.

[17]周子涵. 大连森林动物园旅游管理系统的设计与实现[D].大连理工大学,2016.

致  谢

逝者如斯夫,不舍昼夜。转眼间,大用户用户活便已经接近尾声,人面对着离别与结束,总是充满着不舍与茫然,我亦如此,仍记得那年秋天,我迫不及待的提前一天到了学校,面对学校巍峨的大门,我心里充满了期待:这里,就是我新生活的起点吗?那天,阳光明媚,学校的欢迎仪式很热烈,我面对着一个个对着我微笑的同学,仿佛一缕缕阳光透过胸口照进了我心里,同时,在那天我认识可爱的室友,我们携手共同度过了这难忘的两年。如今,我望着这篇论文的致谢,不禁又要问自己:现在,我们就要说再见了吗?

感慨莫名,不知所言。遥想当初刚来学校的时候,心里总是想着工科学校会过于板正,会缺乏一些柔情,当时心里甚至有一点点排斥,但是随着我对学校的慢慢认识与了解,我才认识到了她的美丽,她的柔情,并且慢慢的喜欢上了这个校园,但是时间太快了,快到我还没有好好体会她的美丽便要离开了,但是她带给我的回忆,永远不会离开我,也许真正离开那天我的眼里会满含泪水,我不是因为难过,我只是想将她的样子映在我的泪水里,刻在我的心里。最后,感谢我的老师们,是你们教授了我们知识与做人的道理;感谢我的室友们,是你们陪伴了我如此之久;感谢每位关心与支持我的人。

少年,追风赶月莫停留,平荒尽处是春山。

请关注点赞+私信博主,免费领取项目源码

おすすめ

転載: blog.csdn.net/ID3461074420/article/details/131184509