まとめ
周口は伏渓の古都であり老子の故郷であり、「中国文化発祥の地」です。周口には千近くの遺跡と文物があり、有名な歴史的文化的名所がたくさんあります。周口のトップ10の有名な景勝地には、老子の故郷の観光地、陸儀太清宮跡、太豪伏羲陵、関帝廟、中国槐園、独秀園などが含まれます。
周口観光百科事典 WeChat アプレットの主な機能モジュールには、ホームページ、ニュース情報、通知とアナウンス、観光スポット情報、チケット予約などが含まれます。ソフトウェア開発とハードウェアのインストールにはオブジェクト指向開発モデルが採用されており、ニーズに十分対応できます。ニーズに応じて、対応するソフトウェア構築とプログラムコーディング作業が改善され、システムはバックグラウンドデータの主記憶装置としてMysqlを使用し、ソフトウェアエンジニアリング原則と開発手法を使用し、SSMテクノロジーを使用して管理を構築しますこのシステムのすべての機能を実現するシステム。
キーワード: 周口観光、SSM フレームワーク、MySQL データベース
抽象的な
周口は伏渓の古都であり老子の故郷であり、「中国文化発祥の地」として知られています。周口には千近くの遺跡や文物があり、多くの有名な歴史文化名所があります。周口の有名な観光スポットのトップ 10 には、老子故郷観光地、陸渭の太清宮跡、太豪伏羲陵、関帝廟、中国槐園、独秀園などがあります。
周口観光コレクションの WeChat ミニ プログラムの主な機能モジュールには、ホームページ、ニュース情報、通知アナウンス、景勝地情報、チケット予約などが含まれます。ソフトウェア開発とハードウェアのインストールはオブジェクト指向開発モードで実行され、実際の使用ニーズを効果的に満たします。対応するソフトウェアのインストールとプログラムのコーディング作業が改善され、システムはバックエンド データの主記憶装置として MySQL を採用し、ソフトウェア エンジニアリングの原則と SSM テクノロジーを使用した開発手法を使用して構築された管理システムが、このシステムのすべての機能を実現しました。
キーワード: 周口観光; SSM フレームワーク、MySQL データベース
1はじめに
1.1研究の背景
都市観光ブランドとは、都市が独自の都市観光イメージを推進する過程で、都市の観光開発戦略的位置付けに基づいて一般に発信し、社会に認知される中心的なコンセプトです。時代のスピードが加速し、競争がますます激化する中、都市の観光産業が足場を築き、発展し、ブランドを構築し、中核となる競争力を強化することは避けられない傾向となっています。強力なブランドの形成は、ブランド システムの構築、導入、推進を含む複雑な作業であり、長期的かつ継続的なプロセスであり、一度限りのものではないことは事実が証明しています。我が国には特色ある都市がないわけではありませんが、都市観光ブランドの正確な位置付けと持続的な創造が不足しています。もう一つの問題は、都市観光ブランドシステムの構築における関連作業と実践レベルへの変換が不足していることであり、ブランドシステムの構築は紙切れではなく、実践レベルに変換する必要がある。ブランドシステムのアウトプットと実装を実現し、それに応じた結果をもたらすブランドメリット。
1.2 研究の意義
現在、インターネットの普及や情報技術の急速な発展により、社会のあらゆる分野が時代に合わせて常に革新と変革を続けており、これまで手作業で行われていた情報データの処理から、現在のコンピュータ 情報データの知的処理は、「面倒」「時間がかかる」「漏洩しやすい」「保存しにくい」といったデメリットを、「高速動作」「時間と労力の節約」「機密性の高さ」「保存の容易さ」といったメリットに変えています。これにより、社会のすべての人々があらゆる分野で恩恵を受けることができました。
Internet+ 時代の到来と e コマースの急激な台頭により、オンライン ショッピングは一時非常に人気になりましたが、現在ではオンライン ショッピングの人気がさらに高まっています。現在では、さまざまな業界もビジネスの拡大、企業の認知度の向上、業績の向上を目的としてオンライン ショッピングを利用しており、ユーザーはオンラインで旅行情報を閲覧したり、景勝地を予約したり、最新のコンピューター技術を利用してオンライン ショッピングと同様の旅行サービスを提供したりできます。関連企業向けに安全で信頼性の高い専門的な情報管理システムを構築することで、管理プロセスの利便性が向上し、人的資源の投入量が削減され、効率が大幅に向上し、ユーザーに高品質のサービスが提供されます。
1.3 論文構成と章の配置
この記事は 6 つの章に分かれており、章の構成は次のとおりです。
第 1 章は序章であり、このシステムが設計・実装された背景、状況、意義について詳しく考察・説明するとともに、論文全体の枠組みの構造を簡単に紹介します。
第 2 章はシステム要件分析です。この章で行われる主な作業は、システムの技術的、経済的、および運用上の実現可能性を分析することです。また、システムの全体的な機能要件とユースケースも分析します。
第 3 章はシステムの設計であり、主にシステムの機能構造を設計し、システム データベースの概念構造と物理構造設計を分析します。
第 4 章はシステムの実装に関するもので、システムの機能分割に応じて、システムが実装する必要があるフロントエンドの顧客機能とバックエンドの管理者機能をそれぞれ分析して説明します。
第 5 章: システムのテスト。主にシステムの一部のインターフェースをテストし、主要な機能をテストします
第 6 章: 概要。
1.4 WeChat開発者ツール
WeChat 開発者ツールは現在、ミニ プログラム開発チームによって開発および実行されていますが、現在も WeChat 開発者ツールは継続的に改善されており、ミニ プログラムを開発する際には常に更新する必要があることがよくあります。WeChat を使用して QR コードをスキャンし、開発者ツールにログインできます。開発者ツールは、この WeChat アカウントの情報を使用して小規模なプログラムの開発とデバッグを行います。
モデルの選択: ミニ プログラムは、スマートフォンの画面サイズをデザイン基準として使用して画像をカットします。
プレビュー インターフェイス: ビュー レイアウトを作成した後、[コンパイル] をクリックしてビュー インターフェイスを更新します。
コンソール: デバッグや出力情報の印刷に便利です。
コードのアップロード: Tencent サーバーにアップロードし、レビューのために送信します。コードをアップロードするときに、バージョン番号と注釈情報を入力できます。
リソース ファイル: 通常、プロジェクトに対応するファイル ディレクトリのブレークポイント デバッグはリソース ファイル内で実行できます。
リモート デバッグの表示: モバイル開発ツールと PC 開発ツールの共同デバッグは、ユーザーにとって非常に実用的です。
ローカル データ ストレージ: ローカルに保存されたデータを表示します。
デバッグの表示: デバッグを容易にするために、ターゲット コンポーネントは子と親の階層構造で表示されます。
2 周口観光百科事典 WeChat ミニプログラム システム分析
システム要件分析はシステム開発における重要なリンクであり、システムの設計と実装を結び付ける役割を果たします。システム要件分析とは、構築すべきシステムの要件を掘り出すことであり、分析が正確であれば、現実に発生する問題を正確に解決することができます。分析が適切に行われていない場合、後のシステムの実装に影響します。システムの優秀さの中で要求分析が占める割合も非常に大きく、要求分析ができていないとその後のシステム設計はナビゲーションから外れた設計になってしまいます。
2.1 実現可能性の分析
システム実現可能性分析は、システムの実現可能性についての議論です。制度の実現可能性を議論する際には、主に技術的実現可能性、経済的実現可能性、法的実現可能性の3つの観点から分析し、この3つのレベルをクリアすれば、比較的実現可能であると考えています。
2.1.1技術的実現可能性分析
周口観光百科事典 WeChat アプレットの設計と実装は、WeChat アプレットに基づく周口市の観光情報クエリおよびチケット予約プラットフォームです。このシステムの実装に使用する技術ソリューションは、Java ベースの Web 実装ソリューションと SSM フレームワークです。フレームワークと Java は、1997 年の誕生以来、急速な成長を遂げています。Java は、電気通信、銀行業務、電子商取引など、さまざまな分野で非常に成熟したソリューションを提供してきました。SSM は、プロジェクト全体をスピードアップできる、すぐに使える技術ソリューションのもう 1 つのセットです。したがって、SSM に基づいてこのシステムを実装することは、非常に成熟したシンプルな技術ソリューションです。技術的な実現可能性という点では非常に実現可能です。
2.1.2 経済的実現可能性分析
経済的な実現可能性の観点から、このプロジェクトでは、開発段階では開発用 PC が必要であり、本番段階では Web サーバーとデータベース サーバーが必要です。経済的な観点から見ても、個人用の PC はそれほど問題にはならず、その後のシステム導入や生産を考えると、サーバーへの投資もそれほど高額ではなく、経済的な観点からも比較的実現可能です。
2.1.3 法的実現可能性の分析
法的な観点から見ると、このシステムにはサードパーティとの間にその他の法的問題はありません。システム データベースは Mysql オープン ソース コミュニティ データベースを使用し、フレームワークはオープン ソース SSM を使用します。システム情報および関連コンテンツも合法です。ソースコードはgitオープンソースで管理されているため、合法的に実行可能です。
2.2 システム機能の分析
2.2.1 機能分析
周口旅行百科事典 WeChat アプレットをユーザー管理モジュールと管理者モジュールの 2 つの部分に分割しました。
ユーザー管理モジュール:
(1) ユーザー登録とログイン:訪問者はいつでもシステムにアクセスし、システム内の情報を閲覧することができますが、コミュニケーションや予約を行う場合には、本システムのアカウントが必要です。ユーザーは、アカウントを利用して関連情報を閲覧できる会員ユーザーとして登録することができると同時に、「登録」ボタンから個人情報や業務情報の管理も行うことができます。
(2) 周口観光百科事典 WeChat アプレットのホームページ情報を表示する: 周口観光百科事典 WeChat アプレットのホームページ情報には、ホームページ、お知らせ、ニュース情報、観光スポット情報などが含まれます。
(3) 観光スポット:観光スポットを閲覧したり、キーワードを入力して関連する観光スポットを検索したり、観光スポットの具体的な内容を閲覧したり、観光スポットに対して「いいね!」をしたり、収集したり、コメントしたりすることができます。
(4) ニュース情報:ニュース情報をクリックしてニュース情報を閲覧することができると同時に、ニュース情報に対して「いいね」をしたり、収集したり、コメントしたりすることができます。
(5) チケット予約:オンラインでアトラクションのチケットを予約し、注文内容の照会や支払いなどの操作が可能です。
管理者管理モジュール:
(1) カルーセル画像とお知らせアナウンスの管理 システムフロントに表示されるカルーセル画像やお知らせを管理者が追加・削除・修正・確認することで、利用者が閲覧しやすくすることができます。
(2) システムユーザー管理: 管理者は、周口旅行百科 WeChat アプレットで管理者と一般ユーザーを追加、削除、変更、確認することができます。
(3) 情報管理: 管理者は、周口観光百科事典 WeChat アプレットのフロントに表示されるニュース情報と情報分類欄を管理できます。
(4) 観光スポット管理: 「観光スポット」ボタンをクリックすると、公開されているすべての観光スポット情報が表示されます。新しい観光スポットを追加する場合は、「追加」ボタンをクリックして、画面の指示に従って観光スポット情報を入力し、 「送信」をクリックして観光スポット情報を入力し、インターフェースを表示することも、特定の観光スポットを直接削除することもできます。また、ユーザーが投稿したコメントを制御するコメントの閲覧および管理機能もあります。
(5) チケット注文: 「チケット注文」をクリックすると、ユーザーのアトラクションチケット注文の詳細が表示されます。
2.2.2 非機能分析
周口旅行百科事典 WeChat ミニ プログラムの非機能要件には、周口旅行百科事典 WeChat ミニ プログラムのセキュリティ、信頼性、パフォーマンス、拡張性などが含まれます。詳細は次の 3-1 表で表すことができます。
表3-1周口旅行百科事典 WeChat ミニ プログラムの非機能要件表
安全性 |
これは主に周口観光百科事典 WeChat アプレット データベースのインストールを指し、データベースの使用とパスワード設定は標準に準拠する必要があります。 |
信頼性 |
信頼性とは、周口旅行名簿 WeChat アプレットがユーザーの指示に従って動作できることを意味し、テスト後の信頼性は 90% 以上です。 |
パフォーマンス |
周口旅行百科事典 WeChat アプレットが市場を占めるにはパフォーマンスが必須条件であるため、パフォーマンスが良いことが最善です。 |
スケーラビリティ |
たとえば、データベースは、システムの非機能要件を確実に満たすために、インターフェイスの使用などの複数の属性を予約します。 |
使いやすさ |
ユーザーは、周口観光百科事典 WeChat アプレットのページに表示されるコンテンツに従うだけで済みます。 |
保守性 |
周口観光百科事典 WeChat アプレット開発は保守性が非常に重要ですが、テスト後は保守性に問題はありません。 |
2.3システムのユースケース分析
Zhoukou Travel Encyclopedia WeChat アプレットの完全な UML ユースケース図は、それぞれ図 2-1、図 2-2、図 2-3 です。
図 2-1 は、ユーザーの役割の使用例を示しています。
図 2-1 周口旅行ディレクトリ WeChat アプレットのユーザー役割の使用例図
図 2-2 は、管理者の役割の使用例を示しています。
図 2-2 周口旅行ディレクトリ WeChat ミニ プログラム管理者の役割のユースケース図
2.4 システムプロセス分析
2.4.1データの流れ
周口観光百科事典 WeChat アプレット開発の主な目的の 1 つは、ユーザーが景勝地のチケットを予約できるようにすることです。図 2-3 は、システムのデータ フロー図です。
図2-3 アトラクションチケット予約業務の拡大図
2.4.2ビジネスプロセス
周口観光百科事典 WeChat アプレットのデータ フローを分析した後、システムのビジネス プロセスを見てみましょう。図 2-4 はビジネス フローチャートです。
2.5 この章の概要
この章では主に、実現可能性分析、機能要件分析、システムユースケース分析、システムプロセス分析を通じて、周口観光百科事典WeChatアプレット全体で実現すべき機能を決定します。同時に、周口観光百科事典 WeChat アプレットのコード実装とテストの標準も提供します。
3 周口観光百科事典 WeChat アプレットの全体設計
この章で説明する主な内容には、周口観光百科事典 WeChat アプレットの機能モジュール設計とデータベース システム設計が含まれます。
3.1システム機能モジュールの設計
3.1.1 全体的な機能モジュール設計
前の章では、システムの機能要件と非機能要件を主に分析し、周口旅行百科事典 WeChat アプレットのユースケースを要件に基づいて分析しました。次のステップは、周口旅行百科事典 WeChat アプレットのアーキテクチャ、主要機能、データベースの設計を開始することです。周口観光百科事典 WeChat アプレットは、前章の需要分析に基づいて作成されており、その全体的な設計モジュール図を図 3-1 に示します。
図 3-1 周口観光百科事典 WeChat アプレットの機能モジュール図
3.1.2ユーザーモジュールの設計
本システムの利用者には管理者と利用者がいます. 2つの利用者モジュールの機能は基本的に同じです. 利用者は管理者に比べて登録機能が1つ多いため, 分析例として利用者モジュールの構造図を使用します.モジュール構造図は分析の例として使用されます。以下に示すように:
図 3-2 ユーザーモジュールの構成図
3.1.3コメント管理モジュールの設計
周口観光百科事典 WeChat ミニ プログラムは、コミュニケーションのための公開プラットフォームであり、ユーザーはプラットフォームにコメントを投稿することで、ユーザー間の交流を促進します。しかし同時に、コメントの内容をより標準化し、管理者に不適切なコメントを削除する機能を提供するには、コメント管理モジュールを特別に設計する必要があり、具体的な構造図は次のとおりです。
図3-3 コメント管理モジュールの構成図
3.1.4観光スポット情報管理モジュールの設計
周口観光百科事典 WeChat アプレットは多くの観光スポット情報を保存する必要があり、そのモジュール機能構造、具体的な構造図は次のとおりです。
図 3-4 観光スポット情報モジュールの構成図
3.1.5 予約管理モジュールの設計
周口旅行百科 WeChat アプレットの最も重要な機能の 1 つは予約であり、そのモジュール機能構造は次のとおりです。
図 3-5 予約情報モジュールの構成図
3.2 データベース設計
データベースの設計は、一般に需要分析、概念モデル設計、データベーステーブル作成の3つの大きなプロセスから構成されますが、需要分析については前章で説明しましたが、概念モデル設計は概念モデルと論理構造設計の2つに分かれます。
3.2.1データベースの概念構造設計
以下は、周口観光百科事典 WeChat アプレット全体の主要なデータベース テーブルの主要な ER エンティティ関係図です。
図 3-6 周口観光百科事典 WeChat ミニ プログラム全体の ER 関係図
3.2.2 データベースの論理構造設計
前のセクションの周口観光百科事典 WeChat アプレットの全体的な ER 関係図から、合計で多くのデータ テーブルを作成する必要があると結論付けることができます。ここでは主に、いくつかの主要なデータベース テーブル構造設計をリストします。
テーブルattraction_information (アトラクション情報)
シリアルナンバー |
名前 |
データの種類 |
長さ |
小数位 |
Null値を許可する |
主キー |
デフォルト値 |
説明する |
1 |
アトラクション情報id |
整数 |
10 |
0 |
N |
Y |
アトラクション情報ID |
|
2 |
絶景スポットの名前 |
可変長文字 |
64 |
0 |
Y |
N |
アトラクション名 |
|
3 |
絶景スポットの写真 |
可変長文字 |
255 |
0 |
Y |
N |
アトラクションの写真 |
|
4 |
絶景スポット情報 |
可変長文字 |
64 |
0 |
Y |
N |
アトラクション情報 |
|
5 |
アトラクションの種類 |
可変長文字 |
64 |
0 |
Y |
N |
アトラクションタイプ |
|
6 |
風景スポットの特徴 |
可変長文字 |
64 |
0 |
Y |
N |
アトラクションの特徴 |
|
7 |
チケットの金額 |
整数 |
10 |
0 |
Y |
N |
0 |
チケットの金額 |
8 |
絶景スポットの場所 |
可変長文字 |
64 |
0 |
Y |
N |
アトラクションの場所 |
|
9 |
アトラクション詳細 |
文章 |
65535 |
0 |
Y |
N |
アトラクション詳細 |
|
10 |
ヒット |
整数 |
10 |
0 |
N |
N |
0 |
クリック数 |
11 |
賞賛レン |
整数 |
10 |
0 |
N |
N |
0 |
いいね数 |
12 |
推薦する |
整数 |
10 |
0 |
N |
N |
0 |
インテリジェントな推奨事項 |
13 |
所在地_住所 |
可変長文字 |
64 |
0 |
Y |
N |
現在位置 |
|
14 |
location_lng |
可変長文字 |
64 |
0 |
Y |
N |
現在地経度 |
|
15 |
location_lat |
可変長文字 |
64 |
0 |
Y |
N |
現在地の緯度 |
|
16 |
作成時間 |
日付時刻 |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
作成時間 |
17 |
更新時間 |
タイムスタンプ |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間 |
お知らせ(お知らせ)
シリアルナンバー |
名前 |
データの種類 |
長さ |
小数位 |
Null値を許可する |
主キー |
デフォルト値 |
説明する |
1 |
通知ID |
中程度の |
8 |
0 |
N |
Y |
お知らせID: |
|
2 |
タイトル |
可変長文字 |
125 |
0 |
N |
N |
タイトル: |
|
3 |
コンテンツ |
長文 |
2147483647 |
0 |
Y |
N |
文章: |
|
4 |
作成時間 |
タイムスタンプ |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
作成時間: |
5 |
更新時間 |
タイムスタンプ |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間: |
テーブル registered_users (登録済みユーザー)
シリアルナンバー |
名前 |
データの種類 |
長さ |
小数位 |
Null値を許可する |
主キー |
デフォルト値 |
説明する |
1 |
登録ユーザーID |
整数 |
10 |
0 |
N |
Y |
ユーザーIDを登録する |
|
2 |
ユーザー名 |
可変長文字 |
64 |
0 |
Y |
N |
ユーザー名 |
|
3 |
ユーザーの性別 |
可変長文字 |
64 |
0 |
Y |
N |
ユーザーの性別 |
|
4 |
ユーザー年齢 |
整数 |
10 |
0 |
Y |
N |
0 |
ユーザーの年齢 |
5 |
検査状態 |
可変長文字 |
16 |
0 |
N |
N |
合格した |
承認状況 |
6 |
推薦する |
整数 |
10 |
0 |
N |
N |
0 |
インテリジェントな推奨事項 |
7 |
ユーザーID |
整数 |
10 |
0 |
N |
N |
0 |
ユーザーID |
8 |
作成時間 |
日付時刻 |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
作成時間 |
9 |
更新時間 |
タイムスタンプ |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間 |
テーブル スライド (カルーセル)
シリアルナンバー |
名前 |
データの種類 |
長さ |
小数位 |
Null値を許可する |
主キー |
デフォルト値 |
説明する |
1 |
スライドID |
整数 |
10 |
0 |
N |
Y |
カルーセル画像 ID: |
|
2 |
タイトル |
可変長文字 |
64 |
0 |
Y |
N |
タイトル: |
|
3 |
コンテンツ |
可変長文字 |
255 |
0 |
Y |
N |
コンテンツ: |
|
4 |
URL |
可変長文字 |
255 |
0 |
Y |
N |
リンク: |
|
5 |
画像 |
可変長文字 |
255 |
0 |
Y |
N |
カルーセル画像: |
|
6 |
ヒット |
整数 |
10 |
0 |
N |
N |
0 |
クリック数: |
7 |
作成時間 |
タイムスタンプ |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
作成時間: |
8 |
更新時間 |
タイムスタンプ |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間: |
テーブル ticket_orders (チケット注文)
シリアルナンバー |
名前 |
データの種類 |
長さ |
小数位 |
Null値を許可する |
主キー |
デフォルト値 |
説明する |
1 |
チケット注文ID |
整数 |
10 |
0 |
N |
Y |
チケット注文ID |
|
2 |
絶景スポットの名前 |
可変長文字 |
64 |
0 |
Y |
N |
アトラクション名 |
|
3 |
絶景スポット情報 |
可変長文字 |
64 |
0 |
Y |
N |
アトラクション情報 |
|
4 |
アトラクションの種類 |
可変長文字 |
64 |
0 |
Y |
N |
アトラクションタイプ |
|
5 |
チケットの金額 |
整数 |
10 |
0 |
Y |
N |
0 |
チケットの金額 |
6 |
チケット発行ユーザー |
整数 |
10 |
0 |
Y |
N |
0 |
チケット購入者 |
7 |
チケット購入時間 |
日付 |
10 |
0 |
Y |
N |
チケット購入時間 |
|
8 |
購入したチケット数 |
整数 |
10 |
0 |
Y |
N |
0 |
購入したチケットの枚数 |
9 |
合計金額 |
可変長文字 |
64 |
0 |
Y |
N |
合計金額 |
|
10 |
チケット購入状況 |
可変長文字 |
64 |
0 |
Y |
N |
チケット購入状況 |
|
11 |
支払い州 |
可変長文字 |
16 |
0 |
N |
N |
未払い |
支払い状況 |
12 |
支払いの種類 |
可変長文字 |
16 |
0 |
Y |
N |
支払いタイプ: WeChat、Alipay、オンライン バンキング |
|
13 |
推薦する |
整数 |
10 |
0 |
N |
N |
0 |
インテリジェントな推奨事項 |
14 |
作成時間 |
日付時刻 |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
作成時間 |
15 |
更新時間 |
タイムスタンプ |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間 |
3.3 この章の概要
周口観光百科事典 WeChat アプレット全体の需要分析は、主にシステム全体のアーキテクチャと機能モジュールの設計に焦点を当て、データベース システム設計は、ER モデルとデータベース ロジック システム設計を確立することで完了しました。
4 周口観光百科事典 WeChat アプレットの詳細な設計と実装
周口旅游大全微信小程序的详细设计与实现主要是根据前面的周口旅游大全微信小程序的需求分析和周口旅游大全微信小程序的总体设计来设计页面并实现业务逻辑。主要从周口旅游大全微信小程序界面实现、业务逻辑实现这两部分进行介绍。
4.1 用户功能模块
4.1.1 前台首页界面
当进入周口旅游大全微信小程序的时候,系统以上中下的布局进行展示,首先映入眼帘的是系统的导航栏,下面是轮播图,再往下是通知公告,其主界面展示如下图4-1所示。
图4-1 前台首页界面图
前台首页的逻辑代码如下所示。
public List selectBaseList(String select) {
List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);
List<E> list = new ArrayList<>();
for (Map<String,Object> map:mapList) {
list.add(JSON.parseObject(JSON.toJSONString(map),eClass));
}
return list;
}
4.1.2 用户注册界面
旅游信息管理系统的游客和景区管理者时可以进行注册登录,当用户右上角“注册”按钮的时候,当填写上自己的账号+密码+确认密码+昵称+邮箱+手机号等后再点击“注册”按钮后将会先验证输入的有没有空数据,再次验证密码和确认密码是否是一样的,最后验证输入的账户名和数据库表中已经注册的账户名是否重复,只有都验证没问题后即可会员注册成功。其用会员注册界面展示如下图4-2所示。
图4-2注册界面图
用户登录的逻辑代码如下所示。
/**
* 注册
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(HttpServletRequest request) throws IOException {
// 查询用户
Map<String, String> query = new HashMap<>();
Map<String,Object> map = service.readBody(request.getReader());
query.put("username",String.valueOf(map.get("username")));
List list = service.selectBaseList(service.select(query, new HashMap<>()));
if (list.size()>0){
return error(30000, "用户已存在");
}
map.put("password",service.encryption(String.valueOf(map.get("password"))));
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){
E entity = JSON.parseObject(JSON.toJSONString(body),eClass);
baseMapper.insert(entity);
log.info("[{}] - 插入操作:{}",entity);
}
4.1.3 用户登录界面
周口旅游大全微信小程序中的前台上注册后的用户是可以通过自己的账户名和密码进行登录的,当会员输入完整的自己的账户名和密码信息并点击“登录”按钮后,将会首先验证输入的有没有空数据,再次验证输入的账户名+密码和数据库中当前保存的用户信息是否一致,只有在一致后将会登录成功并自动跳转到周口旅游大全微信小程序的首页中;否则将会提示相应错误信息,用户登录界面如下图4-3所示。
图4-3用户登录界面图
用户登录的逻辑代码如下所示。
/**
* 登录
* @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;
QueryWrapper wrapper = new QueryWrapper<User>();
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}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.selectBaseList(userGroupService.select(groupMap, new HashMap<>()));
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());
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, "账号或密码不正确");
}
}
public String select(Map<String,String> query,Map<String,String> config){
StringBuffer sql = new StringBuffer("select ");
sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");
sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");
}
if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){
sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");
}
if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){
int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;
int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;
sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);
}
log.info("[{}] - 查询操作,sql: {}",table,sql);
return sql.toString();
}
public List selectBaseList(String select) {
List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);
List<E> list = new ArrayList<>();
for (Map<String,Object> map:mapList) {
list.add(JSON.parseObject(JSON.toJSONString(map),eClass));
}
return list;
}
4.1.4 公告通知界面
当点击导航栏上的“公告通知”的时候,就会进入对应的界面查看公告通知列表,公告通知界面如下图4-4所示。
图4-4公告通知界面图
公告通知关键代码如下所示。
@RequestMapping("/get_list")
public Map<String, Object> getList(HttpServletRequest request) {
Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
return success(map);
4.1.5 新闻资讯界面
当访客点击周口旅游大全微信小程序中导航栏上的“新闻资讯”后将会进入到该“新闻资讯”列表的界面,然后选择想要看的新闻资讯,点击进入到详细界面,在详细界面可以收藏+点赞赞+评论等操作,新闻资讯界面如下图4-5所示。
图4-5新闻资讯界面图
4.1.6 旅游景点详情界面
当访客点击“旅游景点”后就可以看到所有的景点信息,可以输入景点名称或者景点类型进行搜索查询,选择你想要了解的景点后将会进入该景点的详情界面,可以了解到该景点的景区、景点名称、门票价格等,同时可以对点击下方的“点赞”、“收藏”进行相关操作,也可以在下方评论区输入想要评论的内容进行评论,景点详情展示页面如图4-6所示。
图4-6 景点详情界面图
景点信息关键代码如下所示。
@RequestMapping("/get_obj")
public Map<String, Object> obj(HttpServletRequest request) {
List resultList = service.selectBaseList(service.select(service.readQuery(request), service.readConfig(request)));
if (resultList.size() > 0) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("obj",resultList.get(0));
return success(jsonObject);
} else {
return success(null);
}
}
4.1.7 门票预订
当用户点击的“景点信息”链接后就进入门票预订的界面,点用户可以进行在线购票。预订界面如下图4-7所示。
图4-7门票预订界面图
门票预订关键代码如下所示。
@RequestMapping("/get_list")
public Map<String, Object> getList(HttpServletRequest request) {
Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
return success(map);
4.2管理员功能模块
4.2.1 系统用户管理界面
周口旅游大全微信小程序中的管理人员在“系统用户”这一菜单是中可以对注册的游客用户管理员进行管控。界面如下图4-8所示。
图4-8用户管理界面图
用户管理关键代码如下所示。
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
this.addMap(paramMap);
return success(1);
}
@Transactional
public Map<String, Object> addMap(Map<String,Object> map){
service.insert(map);
return success(1);
}
4.2.2 轮播图界面
管理员可以对系统前台展示的轮播图以进行增删改查,方便用户进行查看,界面如下图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);
}
4.2.3 新闻资讯管理界面
在后台点击“新闻资讯”按钮会显示所有的新闻资讯信息,如果想要添加新的新闻资讯,点击“添加”按钮根据提示输入新闻资讯信息,点击“提交”后在新闻资讯界面就可以显示了,也可以直接删除某一新闻资讯,同时设有查看管理评论的功能,对用户提交的评论进行管控。界面如下图4-10所示。
图4-10新闻资讯管理界面图
4.2.4 订单管理界面
点击“门票订单”按钮会显示出订单的所有的信息,支持对订单信息的查询。门票订单界面如下图4-11所示。门票订单界面如下图4-12所示。
图4-10 门票订单管理界面图
门票订单管理关键代码如下所示。
@RequestMapping("/get_obj")
public Map<String, Object> obj(HttpServletRequest request) {
List resultList = service.selectBaseList(service.select(service.readQuery(request), service.readConfig(request)));
if (resultList.size() > 0) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("obj",resultList.get(0));
return success(jsonObject);
} else {
return success(null);
}
}
4.2.5 旅游景点管理界面
在后台点击“旅游景点”按钮会显示所有的旅游景点信息,如果想要添加新的旅游景点,点击“添加”按钮根据提示输入旅游景点信息,点击“提交”后在旅游景点界面就可以显示了,也可以直接删除某一旅游景点,同时设有查看管理评论的功能,对用户提交的评论进行管控。界面如下图4-11所示。
图4-11 旅游景点管理界面图
旅游景点管理关键代码如下所示。
@PostMapping("/upload")
public Map<String, Object> upload(@RequestParam(value = "file",required=false) MultipartFile file,HttpServletRequest request) {
log.info("进入方法");
if (file.isEmpty()) {
return error(30000, "没有选择文件");
}
try {
//判断有没路径,没有则创建
String filePath = request.getSession().getServletContext().getRealPath("\\") +"upload\\";
// String filePath = System.getProperty("user.dir") + "\\target\\classes\\static\\upload\\";
File targetDir = new File(filePath);
if (!targetDir.exists() && !targetDir.isDirectory()) {
if (targetDir.mkdirs()) {
log.info("创建目录成功");
} else {
log.error("创建目录失败");
}
}
// String path = ResourceUtils.getURL("classpath:").getPath() + "static/upload/";
// String filePath = path.replace('/', '\\').substring(1, path.length());
String fileName = file.getOriginalFilename();
int lastIndexOf = fileName.lastIndexOf(".");
//获取文件的后缀名 .jpg
String suffix = fileName.substring(lastIndexOf);
fileName = IdWorker.getId()+suffix;
File dest = new File(filePath + fileName);
log.info("文件路径:{}", dest.getPath());
log.info("文件名:{}", dest.getName());
file.transferTo(dest);
JSONObject jsonObject = new JSONObject();
jsonObject.put("url", "/api/upload/" + fileName);
return success(jsonObject);
} catch (IOException e) {
log.info("上传失败:{}", e.getMessage());
}
return error(30000, "上传失败");
}
5系统测试
5.1 系统测试用例
系统测试包括:用户登录功能测试、新闻资讯展示功能测试、旅游景点添加、旅游景点搜索、密码修改、门票预订测试,如表5-1、5-2、5-3、5-4、5-5、5-6所示:
表5-1 用户登录功能测试表
用例名称 |
用户登录系统 |
目的 |
测试用户通过正确的用户名和密码可否登录功能 |
前提 |
未登录的情况下 |
测试流程 |
1) 进入登录页面 2) 输入正确的用户名和密码 |
预期结果 |
用户名和密码正确的时候,跳转到登录成功界面,反之则显示错误信息,提示重新输入 |
实际结果 |
实际结果与预期结果一致 |
新闻资讯查看功能测试:
表5-2 新闻资讯查看功能测试表
用例名称 |
新闻资讯查看 |
目的 |
测试新闻资讯查看功能 |
前提 |
用户登录 |
测试流程 |
点击新闻资讯列表 |
预期结果 |
可以查看到所有新闻资讯信息 |
实际结果 |
实际结果与预期结果一致 |
景区管理者添加旅游景点界面测试:
表5-3 旅游景点界面测试表
用例名称 |
添加旅游景点测试用例 |
目的 |
测试旅游景点添加功能 |
前提 |
景区管理者用户正常登录情况下 |
测试流程 |
1)管理员点击旅游景点,然后点击添加后并填写信息。 2)点击进行提交。 |
预期结果 |
提交以后,页面首页会显示新的景点信息 |
实际结果 |
实际结果与预期结果一致 |
景点搜索功能测试:
表5-4景点搜索功能测试表
用例名称 |
景点搜索测试 |
目的 |
测试景点搜索功能 |
前提 |
无 |
测试流程 |
1)在搜索框填入搜索关键字。 2)点击搜索按钮。 |
预期结果 |
页面显示包含有搜索关键字的景点 |
实际结果 |
实际结果与预期结果一致 |
密码修改搜索功能测试:
表5-5 密码修改功能测试表
用例名称 |
密码修改测试用例 |
目的 |
测试管理员密码修改功能 |
前提 |
管理员用户正常登录情况下 |
测试流程 |
1)管理员密码修改并完成填写。 2)点击进行提交。 |
预期结果 |
使用新的密码可以登录 |
实际结果 |
实际结果与预期结果一致 |
预订功能测试:
表5-6门票预定功能测试表
用例名称 |
门票预定测试用例 |
目的 |
测试用户门票预定功能 |
前提 |
用户正常登录情况下 |
测试流程 |
1)搜索查看门票信息,点击预订。 2)填写预订信息,点击进行提交。 |
预期结果 |
预订成功 |
实际结果 |
实际结果与预期结果一致 |
5.2 系统测试结果
通过编写周口旅游大全微信小程序的测试用例,已经检测完毕用户登录模块、新闻资讯展示模块、旅游景点添加模块、景点搜索模块、密码修改模块、预订模块功能测试,通过这6大模块为周口旅游大全微信小程序的后期推广运营提供了强力的技术支撑。
结论
本文描述了周口旅游大全微信小程序设计与实现的原理和开发过程,该系统是通过SSM框架来搭建后台,中间件使用的是Tomcat服务器,数据库管理平台采用开源的Mysql,前台使用的是JQuery框架,同时使用Validate校验框架,这样就可以减少前端代码的输入量,而且基于JQuery框架的Validat框架使用简单,是流行的前端使用框架,前端使用的主要是Jsp页面展示技术。
在开发前做了许多的准备,在本系统的设计和开发过程中阅览和学习了许多文献资料,从开发这个周口旅游大全微信小程序的过程中我也收获了许许多多宝贵的方法以及设计思路,对系统的开发也起到了很重要的作用,系统的开发技术选用的都是自己比较熟悉的,比如Web、SSM、MYSQL,这些技术都是在以前的学习中学到了,其中许多的设计思路和方法都是在以前不断地学习中摸索出来的经验,其实对于我们来说工作量还是比较大的,但是正是由于之前的积累与准备,才能顺利的完成这个项目,由此看来,积累经验跟做好准备是十分重要的事情。
当然在该系统的设计与实现的过程中也离不开老师以及同学们的帮助,正是因为他们的指导与帮助,我才能够成功的在预期内完成了这个系统。同时在这个过程当中我也收获了很多东西,此系统也有需要改进的地方,但是由于专业知识的浅薄,并不能做到十分完美,希望以后有机会可以让其真正的投入到使用之中。
参考文献
[1]谢上,胡省莎,韩茂洲.标签推荐算法下旅游规划APP研究与设计[J].福建电脑,2021,37(09):79-82.
[2]宋阳春. 基于图神经网络的景点推荐方法研究与应用[D].西安理工大学,2021.
[3]罗毅夫. 基于深度学习的昆明市旅游路线推荐算法研究[D].云南财经大学,2021.
[4]刘娜.基于游客好奇心的旅游信息推荐系统[J].微型电脑应用,2021,37(04):137-139.
[5]张鑫,许璐璐.融入景点标签的矩阵分解个性化推荐[J].软件导刊,2021,20(04):199-204.
[6]梁存桂. 基于Spark云计算平台的旅游景点推荐算法优化研究[D].桂林理工大学,2021.
[7]段佳希. 基于众包模式的旅游系统研究与设计[D].山东师范大学,2020.
[8]李茹. 融合多特征信息的推荐算法研究[D].西安科技大学,2020.
[9]Eka Mala Sari Rochman,Ifan Pratama, Husni,Aeri Rachmad. Implementation of Fuzzy Mamdani For Recommended Tourist Locations In Madura[J]. Journal of Physics: Conference Series,2020,1477(2):
[10]张晋逢. 基于DGKDK的混合旅游路线推荐算法研究与应用[D].山东科技大学,2019.
[11]张诗梦. 基于“城市画像”与“用户画像”的个性化旅游推荐系统实践[D].东北财经大学,2019.
[12]李多加. 基于混合推荐算法的旅游推荐系统的设计与实现[D].浙江大学,2018.
[13]范珣珣. 基于数据挖掘的旅游信息推荐系统研究[D].长江大学,2018.
[14]吴志瑜. 时空双连续性旅游信息智能推荐关键技术研究[D].电子科技大学,2018.
[15] Smartsave Has Become One Of The Most Recommended Travel Sites For Big Discounts On Attractions[J]. M2 Presswire,2018:
[16]栗璞. 基于云计算平台智能旅游导览系统的研究与实现[D].北京工业大学,2018.
逝者如斯夫,不舍昼夜。转眼间,大学生会员活便已经接近尾声,人面对着离别与结束,总是充满着不舍与茫然,我亦如此,仍记得那年秋天,我迫不及待的提前一天到了学校,面对学校巍峨的大门,我心里充满了期待:这里,就是我新生活的起点吗?那天,阳光明媚,学校的欢迎仪式很热烈,我面对着一个个对着我微笑的同学,仿佛一缕缕阳光透过胸口照进了我心里,同时,在那天我认识可爱的室友,我们携手共同度过了这难忘的两年。如今,我望着这篇论文的致谢,不禁又要问自己:现在,我们就要说再见了吗?
感慨莫名,不知所言。遥想当初刚来学校的时候,心里总是想着工科学校会过于板正,会缺乏一些柔情,当时心里甚至有一点点排斥,但是随着我对学校的慢慢认识与了解,我才认识到了她的美丽,她的柔情,并且慢慢的喜欢上了这个校园,但是时间太快了,快到我还没有好好体会她的美丽便要离开了,但是她带给我的回忆,永远不会离开我,也许真正离开那天我的眼里会满含泪水,我不是因为难过,我只是想将她的样子映在我的泪水里,刻在我的心里。最后,感谢我的老师们,是你们教授了我们知识与做人的道理;感谢我的室友们,是你们陪伴了我如此之久;感谢每位关心与支持我的人。
少年,追风赶月莫停留,平荒尽处是春山。