(ソースコード添付) SSM観光ウェブサイト管理システム コンピュータ完成 39235

ssm旅行ウェブサイト管理システム

まとめ

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

観光ウェブサイト管理システムの主な機能モジュールには、ホームページ、ウェブサイト管理(カルーセル画像、告知情報)、人材管理(管理者、システム利用者)、コンテンツ管理(コミュニケーションフォーラム、フォーラム分類、観光文化、文化分類)、モジュール管理(観光スポット情報)が含まれます。 、チケット購入情報、旅行ルート、ホテル情報、タイプ管理、予約情報、カスタマーサービス相談)、ソフトウェア開発とハードウェアインストールにオブジェクト指向開発モデルを採用し、実際の使用ニーズを十分に満たし、対応するサービスを向上させることができます。ソフトウェア構築とプログラムコーディング作業では、バックグラウンドデータの主記憶装置としてMysqlを使用し、業務システムのコーディングと開発にはSSMフレームワーク、Java技術、Ajax技術を使用し、システムのすべての機能を実現しています。この報告書では、まず研究の背景、役割、意義を分析し、研究作業の合理性の基礎を築きます。観光ウェブサイト管理システムのさまざまなニーズと技術的課題を分析し、システムの必要性と技術的実現可能性を証明し、デザインシステムで使用する必要のある技術的なソフトウェアと設計思想の基礎を紹介し、最終的に実現します。観光ウェブサイトの管理システムと展開業務ではこれを使用します。

キーワード: 旅行 Web サイト、ssm フレームワーク、Mysql データベース

SSM観光ウェブサイト管理システム

抽象的な

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

観光ウェブサイト管理システムの主な機能モジュールには、ホームページ、ウェブサイト管理(ローテーションマップ、お知らせ情報)、人事管理(管理者、システムユーザー)、コンテンツ管理(交流フォーラム、フォーラム分類、観光文化、文化分類)、モジュール管理が含まれます。 (景勝地情報、チケット情報、観光ルート、ホテル情報、種類管理、予約情報、コンサルティング顧客サービス)、ソフトウェア開発とハードウェアインストールにオブジェクト指向開発モデルを採用することで、実際の使用ニーズを効果的に満たし、対応するソフトウェアを改善できますインストールとプログラムのコーディング作業、バックエンドデータの主記憶装置として MySQL を採用、業務システムのコーディングと開発には SSM フレームワーク、Java テクノロジー、および Ajax テクノロジーを使用して、このシステムのすべての機能を実現します。この報告書では、まず研究の背景、役割、意義を分析し、研究作業の合理性の基礎を築きます。観光ウェブサイト管理システムのさまざまな要件と技術的問題を分析し、システムの必要性と技術的実現可能性を証明し、システム設計に必要な技術的なソフトウェアと設計アイデアの基礎を紹介します。最後に、観光ウェブサイト管理システムを導入し、運用に展開します。

キーワード:観光ウェブサイト。SSM フレームワーク。MySQLデータベース

目次

第1章;序章

1.1 研究の背景と意義

1.2 開発状況

1.3 調査方法

第2章 関連技術の紹介

2.1 開発技術説明

2.2 Java言語とJDK開発環境

2.3 B/S システムの動作原理

2.4 MVVMパターンの概要

2.5 MySQLデータベース

第 3 章 システム分析

3.1 実現可能性の分析

3.2 機能要件の分析

3.2.1 フロントエンドユーザー機能

3.2.2 バックステージ管理者機能

3.3 非機能要件の分析

3.4 セキュリティ要件の分析

3.4.1 システムのセキュリティ

3.4.2 データのセキュリティ

3.5 データプロセス分析

第4章 システム設計

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

4.2 システム全体の設計

4.3 システム機能設計

4.4 データベース設計

4.4.1 データ要件の分析

4.4.2 データベースの概念設計

4.4.3 データベーステーブルの設計

第5章 システムの導入

5.1 データベースアクセス層の実装

5.2 登録モジュールの実装

5.3 ログインモジュールの実装

5.4 ユーザーデータ変更モジュールの実装

5.5 お知らせ情報管理モジュールの実装

5.6 ホテル予約モジュールの実装

5.7 アトラクションチケット購入管理モジュールの実装

5.8 ホテル管理モジュールの実装

第6章 システムテスト

6.1 テストの目的

6.2 機能テスト

6.3 パフォーマンステスト

第7章 総括と展望

参考文献

謝辞

  1. 導入
    1. 研究の背景と意義

現在、観光業界の情報量は非常に多く、観光システムは通常の運用で大量の情報を処理する必要があります。そのため、観光関連情報を管理し、さまざまな情報の変化を把握し、その変化に適時対応して経営効率と資源活用を向上させる必要があります。しかし、既存の観光スポットサービスサイトは、タイムリー性が低く、観光関連情報が不完全で、拡張性も低いという課題がありました。

観光名所サービス Web サイトの適時性と拡張性を向上させ、システムが長期的、安全、安定、信頼性の高い効率的な方法で動作できるようにします。観光情報管理業務の標準化・システム化・自動化を実現し、管理情報の効率化、資源活用の最大化、利益の最大化、観光スタッフの負担軽減を実現します。したがって、より充実した機能とより強力な能力を備えたシステムの開発が非常に必要です。

    1. 開発状況

経済水準の向上に伴い、国内観光は急速に発展しましたが、相対的に言えば、国内観光の発展度合いは経済発展と人民生活水準の向上のニーズを十分に満たすことができません。したがって、国民経済における国内観光の地位と役割は非常に重要です。

しかし、国内の観光産業の経営は遅れており、基盤が弱く、企業効率も悪く、情報化も進んでいない。観光行政部門の管理手法はやや後進的であり、情報管理が不十分であり、情報伝達経路が円滑でないなどの問題が相次いでいる。課題や挫折に直面する国内観光産業は、古い概念を変え、勇気を持ってイノベーションに取り組み、従来の概念を打破し、さまざまなリソースを提供することで、業界全体に新たな局面をもたらすことが求められています。同時に、観光情報化の構築を強化し、各レベルの管理部門の管理能力と作業効率を継続的に向上させ、作業手順を簡素化し、作業コストを削減し、情報の普及を加速し、より多くの宣伝を行い、改善する必要があります。情報の信頼性、もう一方では、観光産業は、観光客のニーズを満たし、観光サービスの質を向上させ、コストを削減し、観光企業の伝統的なビジネスモデルを変革するために発展しています。観光産業全体の質を向上させるだけでなく、観光産業の情報化を強化し、産業とリソースの構造を最適化します。これにより、多くの産業の発展が促進され、雇用の機会が増加し、経済発展の促進に積極的な役割を果たすことになります。

これまでのところ、観光客は国内観光産業の主な顧客です.一部の国内観光部門はまだ情報化の内容と業務を改善しています.この文脈で、これらの部門は観光名所サービスウェブサイトを開設することによって地元の慣習と慣習を促進します。他産業との競争力をどのようにして確保できるでしょうか。

    1. 研究手法

まず、エンジン検索や関連文献を通じて、システム開発の背景やシステム設計の意義を学び、ユーザーの要望情報を収集しました。次に、開発ツールに関しては、このシステムの設計と開発には Java プラットフォームを使用し、データベースの設計ツールとして Mysql を使用することが最終的に決定されました。つまり、Java 言語を使用してユーザー インターフェイスを実装し、データベースと接続して完全な通信機能を実現します。その後、システムの一般的な機能モジュールを設計します。主にシステム利用者やシステム管理者の利便性の観点から分析し、システムが持つべき機能を明確にします。最後のステップは、システムをテストし、ユースケースのテストを通じて既存の問題を発見し、解決策を見つけることです。既存の開発プラットフォームを活用し、学んだ知識を組み合わせて、システムの使いやすさと実用性を確保するために教師の指導を受けながら設計を完成させます。

  1. 関連技術のご紹介
    1. 開発技術説明

このシステムのフロントエンド部分は B/S モードを使用した MVVM モデルに基づいて開発され、バックエンド部分は Java の ssm フレームワークに基づいて開発されています。

フロントエンド部分: フロントエンド フレームワークは、人気のあるプログレッシブ JavaScript フレームワーク Vue.js を使用します。Vue-Router と Vuex を使用して動的ルーティングとグローバル状態管理を実現し、Ajax を使用してフロントエンドとバックエンドの通信を実現し、Element UI コンポーネント ライブラリを使用してページのプロトタイプを迅速に作成し、プロジェクト フロントエンドを使用してグリッド レイアウトによる応答性を実現します。 PC、タブレット、携帯電話などに適応できます。さまざまな画面サイズに最適なレイアウト表示。

バックエンド部分: ssm を開発フレームワークとして使用し、MyBatis、Redis、およびその他の関連テクノロジーを統合します。

    1. Java言語とJDKの開発環境 

Javaは、米国サン社が開発したプログラミング言語で、マルチプラットフォームに適用でき、互換性が高いため、独自の利点を活かして、データセンター、パーソナルPC、テクノロジースーパーコンピュータなどで広く使用されています。現在最大の開発者の専門コミュニティがあります[3]。

JDK は、American Sun Company が Java 開発者向けに発売した新しい製品であり、JDK がなければ、インストールされた Java プログラムは実行できません [4]。

    1. B/Sシステムの動作原理

B/S アーキテクチャは、ブラウザ要求とサーバー応答の動作モードを採用しています。

ユーザーは、ブラウザーを介して、インターネット上の Web サーバーによって生成されたテキスト、データ、画像、アニメーション、ビデオ オン デマンド、サウンド、その他の情報にアクセスできます。

各 Web サーバーはさまざまな方法でデータベース サーバーに接続でき、実際には大量のデータがデータベース サーバーに保存されます。

プログラムをWebサーバーからローカルにダウンロードして実行します。ダウンロード プロセス中にデータベースに関連する命令が見つかった場合、Web サーバーは解釈と実行のためにその命令をデータベース サーバーに渡し、Web サーバーに返します。 Web サーバーはそれをユーザーに返します。この構造では、多数のネットワークが接続されて巨大なネットワーク、つまりグローバルネットワークが形成されます。各企業はこの構造に基づいて独自のインターネットを構築できます。

B/Sモードでは、ユーザーがブラウザを介してネットワーク上に分散した多数のサーバーにアクセスを要求し、ブラウザの要求はサーバーで処理され、処理結果と対応する情報がブラウザに返されます。 その他のデータ すべての処理とリクエストWeb サーバーによって完了します。このフレームワーク構造とオペレーティング システム内に組み込まれたブラウザにより、この構造は今日のソフトウェア アプリケーションの主流の構造パターンになりました。

    1. MVVMパターンの概要

MVVMはModel-View-ViewModelの略称です。これは本質的に MVC の改良版です。MVVM はビューの状態と動作を抽象化し、ビュー UI とビジネス ロジックを分離できるようにします。もちろん、ViewModel はこれらのことをすでに行っており、モデルのデータを取り出して、コンテンツを表示する必要があるためにビューに含まれるビジネス ロジックの処理に役立ちます。Microsoft の WPF は、Silverlight、オーディオビデオ3Dアニメーションなどの新しい技術エクスペリエンスをもたらし、その結果、ソフトウェア UI レイヤーがより詳細でカスタマイズ可能になります。同時に、技術レベルでは、WPF はバインディング、依存関係プロパティ、ルーテッド イベント、コマンド、DataTemplate、ControlTemplate などの新機能ももたらします。MVVM (Model-View-ViewModel) フレームワークの起源は、 MVP (Model-View-Presenter)パターンと WPF を組み合わせたアプリケーション手法から進化した新しいアーキテクチャフレームワークです。これは、オリジナルの MVP フレームワークに基づいており、ますます複雑になる顧客ニーズの変化に対応するために WPF の新機能が組み込まれています。

    1. MySQLデータベース

Mysql は度重なるアップデートを経て機能的に非常に豊富かつ完成度が高く、バージョン 4 からバージョン 5 まで比較的大規模なアップデートが行われ、実際の商用利用においても良好な実用化実績をあげています。Mysql の最新バージョンは情報の圧縮と暗号化をサポートしており、情報セキュリティのニーズをより適切に満たすことができます。同時に、システムの複数回のアップデートを経て、データベース自体のミラーリング機能も大幅に強化され、動作のスムーズさと使いやすさが大幅に向上し、ドライバーの使用と作成がより効率的になり、もっと早く。最大の変更点は空間情報の表示の最適化で、これによりアプリケーション マップ上のラベル付けと座標の計算が容易になります。強力なバックアップ機能で安心してご利用いただけるとともに、サポートされているOffice機能により、ユーザー自身でのインストールや利用もサポートします。情報の表示形式も大幅に刷新され、よく使用される2つの表示エリアが追加され、表とテキストが分類されたインフォメーションエリアと、よりすっきりとした具体的なインターフェース表示が追加されました。2つ目は機器の情報制御であり、機器情報エリアに情報を表示したり、複数の情報を同時に比較したりすることができ、ユーザーの実際の使用に大きな利便性をもたらします[7][8]。

この記事で設計した観光 Web サイト管理システムの実際の導入プロセスにおいて、最終的に MySQL データベースを選択した主な理由は、企業のアプリケーション システムのアプリケーションおよび開発プロセス中に大量のデータベース操作が発生するためです。データのセキュリティ要件も非常に高いです。これらの要因を踏まえ、最終的に旅行 Web サイト管理システムのバックグラウンド データの保存先として、比較的安全性の高い Mysql が選択されました [9][10]。

  1. システム分析
    1. 実行可能性分析

技術面では、システム本体のフレームワークには現在主流のSSMフレームワークを採用し、フロントページのデザインや美観調整には、現在主流のJavaScriptフレームワークであるVue.jsをフロントデスクに採用しています。テクノロジーはすべて私によって体系的に研究されており、すべてコース設計で実践されており、開発をより便利かつ体系的に行うことができます。技術的な観点から見ると、このシステムは完全に実現可能です。

実用性の観点から、この設計の主なタスクは、ホームページ、Web サイト管理 (カルーセル画像、お知らせ情報)、人事管理 (管理者、システム ユーザー)、およびコンテンツ管理 (交流フォーラム、フォーラム分類、観光文化など) です。 )観光ウェブサイト管理システム内の文化分類)現在のトレンドの発展に合わせたモジュール管理(アトラクション情報、チケット購入情報、旅行ルート、ホテル情報、種類管理、予約情報、顧客サービス相談)など。ユーザーの視点から、システム運用コストや人的リソースも考慮し、インターネット上の便利な手段を活用して、より体系的で使いやすく、より実践的な業務プロセスを実現するオンラインビジネスを実現します。

経済性の面では、このプロジェクトで設計された観光ウェブサイト管理システムの主な目的は、情報クエリ管理および検索サービスをより便利かつ迅速に提供すること、つまり直接使用できる情報ソフトウェアを提供することです。システムの主なコストは、主にその後の使用状況データの保守管理更新に集中します。しかし、実際にシステムが運用・使用されると、情報の照会・検索の効率が大幅に向上すると同時に、照会者の情報のセキュリティを効果的に確保する必要もあります。この観光サイト管理システムの実用化は、実際のシステムの開発・保守コストをはるかに上回る価値があり、経済的にも実現可能です。

    1. 機能要件の分析

観光サイト管理システムの機能は、フロントエンドユーザーが必要に応じて登録・ログインし、ホテル情報を閲覧し、選択したホテルを予約することに主に分かれます。管理者は主に登録ユーザー、お知らせ情報、アトラクション詳細、ホテル詳細、ホテルの注文などを担当します。

システムのユースケース図を以下に示します。

図 3-1 システムの使用例図

      1. フロントエンドユーザー機能

フロントエンド ユーザーは、未登録ユーザーのニーズと登録ユーザーのニーズに分類できます。

未登録ユーザー向けの機能は以下のとおりです。

アカウントの登録: ユーザーは個人情報を入力し、携帯電話番号を確認します。

お知らせ情報の閲覧: ユーザーは、メインページのお知らせ情報を閲覧して、システムの最新のお知らせ情報を知ることができます。

アトラクションの閲覧: ユーザーは、アトラクションの種類に基づいてアトラクション情報を参照し、アトラクションを選択して、アトラクション名、アトラクションの種類、連絡先番号、チケット価格、住所、星評価、営業時間、写真などの詳細を表示できます。

ホテルの閲覧: ユーザーはホテルのタイプに応じてホテル情報を閲覧し、ホテルを選択してホテル名、写真、住所、連絡先番号、部屋のタイプ、価格などの詳細を表示できます。

レビュー情報を参照する: アトラクションを選択して、ユーザーからのレビューを表示します。

登録ユーザーが利用できる機能は以下のとおりです。

ログイン: アカウントとパスワードに基づいてログインします。

個人情報の管理:ユーザーは、個人情報の変更により、いつでも登録情報を変更することができます。

コメント: ユーザーは、自分の意見に基づいて、関連するアトラクションについてコメントすることができます。

ホテルの予約: ユーザーは自分のニーズに基づいてホテルを選択し、予約します。

個人のホテル予約履歴: ユーザーは過去の予約データを表示できます。

      1. バックエンド管理者機能

管理者の機能は次のとおりです。

パスワードの変更: 管理者は、システムのセキュリティを確保するために、いつでもシステムに入るログイン パスワードを変更できます。

アトラクションのチケット購入情報の処理:チケット購入注文のレビューなどを処理します。

一般管理者の管理:一般管理者の管理を行います。一般管理者は、関係スタッフの異動時に追加・削除が可能です。

アトラクション情報管理:アトラクション情報の維持、情報の追加、削除、変更を行います。

ホテル情報管理:ホテル情報の維持、情報の追加、削除、変更を行います。

ホテルの予約情報の処理:予約のレビューなどを処理します。

お知らせ情報管理:関連するお知らせ情報の公開および削除を行います。

コメント情報管理: ユーザーのコメントを表示し、ユーザーが開始した提案についてタイムリーに知ることができます。

    1. 非機能要件の分析

まず、システム機能ソフトウェアが具体的な設計プロセスにおいて、さまざまなユーザーの基本的な機能ニーズをより適切に満たすことができるかどうかが主な考慮事項であり、ユーザーのニーズをよりよく満たすことができない場合、このシステムの存在価値はありません。ソフトウェアシステムの非機能分析は、システムを対象としたパフォーマンス分析、システムを対象としたセキュリティ分析、システムを対象とした完全性分析の7つの側面から実行されます。 1 つはシステムを対象とした保守性分析、1 つはシステムを対象としたスケーラビリティ分析、もう 1 つはビジネスに適応するパフォーマンス分析です。観光ウェブサイト管理システムのパフォーマンス、セキュリティ、拡張性、完全性の 7 つの側面を包括的に比較および分析した結果、対応する非機能要件の分析が必要であることがわかりました。

    1. セキュリティ要件の分析
      1. システムセキュリティ

セキュリティはあらゆるシステムにとって非常に重要です。セキュリティがしっかりしたシステムであれば、企業情報やユーザー情報の盗難を防ぐことができます。システムのセキュリティを向上させることは、ユーザーだけでなく企業にも責任があります。特に観光ウェブサイトの管理システムでは、システム全体を保護するために優れたセキュリティを提供する必要があります。

システムにはユーザーの権限制御があり、システムのセキュリティを確保するためにさまざまな役割に基づいてユーザーの権限を制限します。

      1. データセキュリティ

データベース内のデータは外部から入力されるものですが、そのデータが入力されると、様々な理由により、入力されたデータは無効なデータやダーティなデータになります。したがって、入力データが規制に準拠していることを確認する方法が、データベース システム、特にマルチユーザー リレーショナル データベース システムの主な関心事になっています。

したがって、データベースに書き込むときは、データの整合性、正確性、一貫性を確保する必要があります。

    1. データフロー分析

システムのデータの流れを分析すると、システムの利用者は一般利用者と管理者に分類されます。このシステムは主にインターフェース情報の送信、ログイン情報の検証、登録情報の受信、およびユーザーの各種操作への応答を処理します。

システムのトップレベルのデータ フロー図を次の図に示します。

図 3-2 最上位のデータ フロー図

ユーザーの身元を判断するには、ログイン データに基づいて判断し、対応する機能インターフェイスにジャンプします。システム内のユーザーはデータを操作でき、データベース センターはシステムから送信された有効なデータ ストリームを受信して​​、データ SQL ステートメントに対して対応する操作を実行できます。

システムの基礎となるデータ フロー図を次の図に示します。

 図 3-3 基礎となるデータ フロー図

システムはフロントエンドとバックエンドの 2 つの部分に分かれており、各操作の後にシステムは操作結果を返します。フロントエンドとバックエンド間のデータ接続は主にデータベースを介して行われます。これは、データベース上でそれぞれ異なる操作が実行されることを意味します。

  1. システムデザイン
    1. システムアーキテクチャ設計

この観光ウェブサイト管理システムのアーキテクチャ設計は、主に Web 層、ビジネス層、モデル層の 3 層に分かれています。Web レイヤーにはビュー レイヤーとコントローラー レイヤーも含まれ、モデル レイヤーにはメタデータ拡張レイヤーとデータ アクセス レイヤーが含まれます。

システムアーキテクチャを次の図に示します。

図 4-1 システムアーキテクチャ

    1. システム全体の設計

観光ウェブサイト管理システムは、一般にフロントエンド ユーザー モジュールとバックエンド管理者モジュールに分かれています。

2 つのモジュールは独立して存在しているように見えますが、アクセスするデータベースは同じです。各モジュールの機能は、事前に完了した需要分析と関連情報のレビューに基づいて編集および作成されます。

まとめると、システムの機能構成図は次の図に示されます。

図 4-2 システムの機能構成図

    1. システムの機能設計

ログイン モジュール: ログイン モジュールはシステムへの入り口であり、すべてのユーザーがシステムにアクセスする前にログインする必要があります。ログインするには、ユーザー名とパスワードを入力する必要があります。複数回ログインを試行する場合は、確認コードを入力する必要があります。ログインする際には、一般ユーザーか管理者ログインかなど、ユーザーの役割を選択する必要があります。ログインに成功すると、データベースを通じてユーザーの権限が取得され、ユーザーのホームページにジャンプします。

注文モジュール: 注文モジュールを使用すると、ユーザーは製品を購入し、製品の詳細を確認できます。

お知らせ情報モジュール:お知らせ情報閲覧、お知らせ情報検索、お知らせ情報メンテナンスの3つのモジュールに分かれており、管理者はお知らせ情報のメンテナンス、新規お知らせ情報の公開、既存のお知らせ情報の更新等の権限を持ちます。

アトラクション管理モジュール: アトラクション管理は、アトラクションの追加、変更、アトラクションのチケット購入に分かれています。アトラクション情報の変更、追加、削除は管理者が行い、アトラクションチケットの購入は一般利用者が行います。

ホテル管理モジュール: ホテル管理は、ホテルの追加、変更、ホテルの予約に分かれています。ホテル情報の変更、追加、削除は管理者が行い、ホテルの予約は一般ユーザーが行います。

    1. データベース設計
      1. データ要件の分析

前回の分析から、データベース内で最も重要なものはアトラクション情報、ユーザー情報、ショッピング情報であり、その他にホテル情報や予約情報も含まれていることがわかります。分析により、次のデータの説明を取得できます。

プラットフォームユーザー: ユーザー名、パスワード、基本情報、評判、公開情報数、その他のデータ項目を含む、ユーザーのさまざまな情報を記録するために使用されます。

管理者: 管理者のログイン情報を記録します。ユーザー名、パスワード、権限、その他のデータ項目が含まれます。

アトラクション: アトラクション名、アトラクションの種類、連絡先番号、チケット価格、住所、星評価、営業時間、写真、その他のデータ項目を含む、アトラクション用に保存されたコンテンツ。

ホテル:各種ホテル情報を格納。ホテル名、写真、住所、連絡先番号、部屋タイプ、価格、その他のデータ項目が含まれます。

アナウンス情報: プラットフォーム内にアナウンス情報コンテンツを保存します。タイトル、お知らせ情報の内容、時刻、その他のデータ項目が含まれます。

      1. データベースのコンセプト設計

先ほどのデータフローチャートに従い、システムの機能モジュール設計と組み合わせて、システムに適合する各情報エンティティを設計します。

システムER図を以下に示します。

図 4-3 システム ER 図

      1. データベーステーブルの設計

観光サイト管理システムが保有するデータテーブルは以下の通りです。 データテーブル数が多いため、下表のようにシステムの主要なデータテーブルのみを表示しています。

テーブル access_token (ログインアクセス期間)

シリアルナンバー

名前

データの種類

長さ

小数位

Null値を許可する

主キー

デフォルト値

説明する

1

トークンID

整数

10

0

N

Y

一時的なアクセスバッジID

2

トークン

可変長文字

64

0

Y

N

一時的なアクセスバッジ

3

情報

文章

65535

0

Y

N

4

最大値

整数

10

0

N

N

2

最大寿命: デフォルト 2 時間

5

作成時間

タイムスタンプ

19

0

N

N

CURRENT_TIMESTAMP

作成時間:

6

更新時間

タイムスタンプ

19

0

N

N

CURRENT_TIMESTAMP

更新時間:

7

ユーザーID

整数

10

0

N

N

0

ユーザーID:

表記事(記事:コンテンツ管理システムの記事)

シリアルナンバー

名前

データの種類

長さ

小数位

Null値を許可する

主キー

デフォルト値

説明する

1

記事ID

中程度の

8

0

N

Y

記事ID: [0,8388607]

2

タイトル

可変長文字

125

0

N

Y

Title: [0,125]は記事やHTMLのタイトルタグに使用されます

3

タイプ

可変長文字

64

0

N

N

0

記事分類: [0,1000] は、指定されたタイプの記事を検索するために使用されます

4

ヒット

整数

10

0

N

N

0

クリック数: [0,1000000000] この記事を訪れた人の数

5

賞賛レン

整数

10

0

N

N

0

いいね数

6

作成時間

タイムスタンプ

19

0

N

N

CURRENT_TIMESTAMP

作成時間:

7

更新時間

タイムスタンプ

19

0

N

N

CURRENT_TIMESTAMP

更新時間:

8

ソース

可変長文字

255

0

Y

N

出典: [0,255] 記事の出典

9

URL

可変長文字

255

0

Y

N

ソースアドレス: [0,255] は記事が公開された Web サイトにジャンプするために使用されます

10

鬼ごっこ

可変長文字

255

0

Y

N

タグ: [0,255] は、記事の関連コンテンツをマークするために使用されます。複数のタグはスペースで区切られます。

11

コンテンツ

長文

2147483647

0

Y

N

本文:記事の主な内容

12

画像

可変長文字

255

0

Y

N

表紙絵

13

説明

文章

65535

0

Y

N

記事の説明

テーブルarticle_type(記事分類)

シリアルナンバー

名前

データの種類

長さ

小数位

Null値を許可する

主キー

デフォルト値

説明する

1

タイプID

smallint

5

0

N

Y

カテゴリID: [0,10000]

2

画面

smallint

5

0

N

N

100

表示順序: [0,1000] により、カテゴリが表示される順序が決まります。

3

名前

可変長文字

16

0

N

N

カテゴリ名: [2,16]

4

父親ID

smallint

5

0

N

N

0

親カテゴリID: [0,32767]

5

説明

可変長文字

255

0

Y

N

説明: [0,255] は、この分類の役割を説明します。

6

アイコン

文章

65535

0

Y

N

カテゴリアイコン:

7

URL

可変長文字

255

0

Y

N

外部リンクアドレス:[0,255] このカテゴリから他のサイトに飛ぶ場合はURLに設定してください

8

作成時間

タイムスタンプ

19

0

N

N

CURRENT_TIMESTAMP

作成時間:

9

更新時間

タイムスタンプ

19

0

N

N

CURRENT_TIMESTAMP

更新時間:

テーブルattraction_information (アトラクション情報)

シリアルナンバー

名前

データの種類

長さ

小数位

Null値を許可する

主キー

デフォルト値

説明する

1

アトラクション情報id

整数

10

0

N

Y

アトラクション情報ID

2

アトラクション名

可変長文字

64

0

Y

N

アトラクション名

3

チケットの金額

整数

10

0

Y

N

0

チケットの金額

4

営業時間

可変長文字

64

0

Y

N

営業時間

5

観光名所の場所

可変長文字

64

0

Y

N

アトラクションの場所

6

カバー写真

可変長文字

255

0

Y

N

表紙画像

7

絶景スポットのご紹介

長文

2147483647

0

Y

N

アトラクション

8

ヒット

整数

10

0

N

N

0

クリック数

9

賞賛レン

整数

10

0

N

N

0

いいね数

10

推薦する

整数

10

0

N

N

0

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

11

作成時間

日付時刻

19

0

N

N

CURRENT_TIMESTAMP

作成時間

12

更新時間

タイムスタンプ

19

0

N

N

CURRENT_TIMESTAMP

更新時間

テーブル認証 (ユーザー権限管理)

シリアルナンバー

名前

データの種類

長さ

小数位

Null値を許可する

主キー

デフォルト値

説明する

1

auth_id

整数

10

0

N

Y

認可ID:

2

ユーザー・グループ

可変長文字

64

0

Y

N

ユーザー・グループ:

3

mod_name

可変長文字

64

0

Y

N

モジュール名:

4

テーブル名

可変長文字

64

0

Y

N

テーブル名:

5

ページタイトル

可変長文字

255

0

Y

N

ページタイトル:

6

パス

可変長文字

255

0

Y

N

ルーティングパス:

7

位置

可変長文字

32

0

Y

N

位置:

8

モード

可変長文字

32

0

N

N

_空白

ジャンプ方法:

9

追加

タイニーント

3

0

N

N

1

以下を追加することは可能ですか?

10

タイニーント

3

0

N

N

1

削除できますか:

11

セット

タイニーント

3

0

N

N

1

変更できるかどうか:

12

得る

タイニーント

3

0

N

N

1

閲覧することは可能ですか:

13

フィールド追加

文章

65535

0

Y

N

フィールドを追加します。

14

フィールドセット

文章

65535

0

Y

N

フィールドを変更します。

15

フィールド取得

文章

65535

0

Y

N

クエリフィールド:

16

テーブルナビゲーション名

可変長文字

500

0

Y

N

クロステーブル ナビゲーション名:

17

テーブルナビ

可変長文字

500

0

Y

N

テーブル間のナビゲーション:

18

オプション

文章

65535

0

Y

N

構成:

19

作成時間

タイムスタンプ

19

0

N

N

CURRENT_TIMESTAMP

作成時間:

20

更新時間

タイムスタンプ

19

0

N

N

CURRENT_TIMESTAMP

更新時間:

テーブルbooking_information(予約情報)

シリアルナンバー

名前

データの種類

長さ

小数位

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

ユーザー名

可変長文字

64

0

Y

N

ユーザー名

7

連絡先番号

可変長文字

64

0

Y

N

連絡先番号

8

予約日

日付

10

0

Y

N

予約日

9

予約日

整数

10

0

Y

N

0

予約日

10

total_booking_price

可変長文字

64

0

Y

N

予約総額

11

予約_備考

文章

65535

0

Y

N

予約注意事項

12

検査状態

可変長文字

16

0

N

N

未レビュー

承認状況

13

検査_返信

可変長文字

16

0

Y

N

モデレート返信

14

支払い州

可変長文字

16

0

N

N

未払い

支払い状況

15

支払いの種類

可変長文字

16

0

Y

N

支払いタイプ: WeChat、Alipay、オンライン バンキング

16

推薦する

整数

10

0

N

N

0

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

17

作成時間

日付時刻

19

0

N

N

CURRENT_TIMESTAMP

作成時間

18

更新時間

タイムスタンプ

19

0

N

N

CURRENT_TIMESTAMP

更新時間

テーブル収集 (コレクション)

シリアルナンバー

名前

データの種類

長さ

小数位

Null値を許可する

主キー

デフォルト値

説明する

1

収集ID

整数

10

0

N

Y

コレクションID:

2

ユーザーID

整数

10

0

N

N

0

コレクターID:

3

ソーステーブル

可変長文字

255

0

Y

N

ソーステーブル:

4

ソースフィールド

可変長文字

255

0

Y

N

ソースフィールド:

5

ソースID

整数

10

0

N

N

0

ソースID:

6

タイトル

可変長文字

255

0

Y

N

タイトル:

7

画像

可変長文字

255

0

Y

N

カバー:

8

作成時間

タイムスタンプ

19

0

N

N

CURRENT_TIMESTAMP

作成時間:

9

更新時間

タイムスタンプ

19

0

N

N

CURRENT_TIMESTAMP

更新時間:

テーブルコメント(コメント)

シリアルナンバー

名前

データの種類

長さ

小数位

Null値を許可する

主キー

デフォルト値

説明する

1

コメントID

整数

10

0

N

Y

コメントID:

2

ユーザーID

整数

10

0

N

N

0

コメント投稿者ID:

3

Reply_to_id

整数

10

0

N

N

0

返信コメントID: 空は0

4

コンテンツ

長文

2147483647

0

Y

N

コンテンツ:

5

ニックネーム

可変長文字

255

0

Y

N

ニックネーム:

6

アバター

可変長文字

255

0

Y

N

アバターアドレス: [0,255]

7

作成時間

タイムスタンプ

19

0

N

N

CURRENT_TIMESTAMP

作成時間:

8

更新時間

タイムスタンプ

19

0

N

N

CURRENT_TIMESTAMP

更新時間:

9

ソーステーブル

可変長文字

255

0

Y

N

ソーステーブル:

10

ソースフィールド

可変長文字

255

0

Y

N

ソースフィールド:

11

ソースID

整数

10

0

N

N

0

ソースID:

テーブルConsulting_customer_service (コンサルティング顧客サービス)

シリアルナンバー

名前

データの種類

長さ

小数位

Null値を許可する

主キー

デフォルト値

説明する

1

Consulting_customer_service_id

整数

10

0

N

Y

カスタマーサービスIDを参照してください

2

タイトル名

可変長文字

64

0

Y

N

タイトル名

3

ユーザー情報

整数

10

0

Y

N

0

ユーザー情報

4

ユーザー名

可変長文字

64

0

Y

N

ユーザー名

5

相談日

日付

10

0

Y

N

相談日

6

相談内容

文章

65535

0

Y

N

相談内容

7

相談_回答

文章

65535

0

Y

N

相談回答

8

推薦する

整数

10

0

N

N

0

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

9

作成時間

日付時刻

19

0

N

N

CURRENT_TIMESTAMP

作成時間

10

更新時間

タイムスタンプ

19

0

N

N

CURRENT_TIMESTAMP

更新時間

テーブルフォーラム (フォーラム)

シリアルナンバー

名前

データの種類

長さ

小数位

Null値を許可する

主キー

デフォルト値

説明する

1

フォーラムID

中程度の

8

0

N

Y

フォーラムID

2

画面

smallint

5

0

N

N

100

選別

3

ユーザーID

中程度の

8

0

N

N

0

ユーザーID

4

ニックネーム

可変長文字

16

0

Y

N

ニックネーム: [0,16]

5

賞賛レン

整数

10

0

Y

N

0

いいね数

6

ヒット

整数

10

0

N

N

0

訪問数

7

タイトル

可変長文字

125

0

N

N

タイトル

8

キーワード

可変長文字

125

0

Y

N

キーワード

9

説明

可変長文字

255

0

Y

N

説明する

10

URL

可変長文字

255

0

Y

N

送信元アドレス

11

鬼ごっこ

可変長文字

255

0

Y

N

ラベル

12

画像

文章

65535

0

Y

N

表紙絵

13

コンテンツ

長文

2147483647

0

Y

N

文章

14

作成時間

タイムスタンプ

19

0

N

N

CURRENT_TIMESTAMP

作成時間:

15

更新時間

タイムスタンプ

19

0

N

N

CURRENT_TIMESTAMP

更新時間:

16

アバター

可変長文字

255

0

Y

N

投稿者のアバター:

17

タイプ

可変長文字

64

0

N

N

0

フォーラム分類: [0,1000] は、指定されたタイプのフォーラム投稿を検索するために使用されます。

テーブル forum_type (フォーラムの分類)

シリアルナンバー

名前

データの種類

長さ

小数位

Null値を許可する

主キー

デフォルト値

説明する

1

タイプID

smallint

5

0

N

Y

カテゴリID: [0,10000]

2

名前

可変長文字

16

0

N

N

カテゴリ名: [2,16]

3

説明

可変長文字

255

0

Y

N

説明: [0,255] は、この分類の役割を説明します。

4

URL

可変長文字

255

0

Y

N

外部リンクアドレス:[0,255] このカテゴリから他のサイトに飛ぶ場合はURLに設定してください

5

父親ID

smallint

5

0

N

N

0

親カテゴリID: [0,32767]

6

アイコン

可変長文字

255

0

Y

N

カテゴリアイコン:

7

作成時間

タイムスタンプ

19

0

N

N

CURRENT_TIMESTAMP

作成時間:

8

更新時間

タイムスタンプ

19

0

N

N

CURRENT_TIMESTAMP

更新時間:

テーブルのヒット数 (ユーザーのクリック数)

シリアルナンバー

名前

データの種類

長さ

小数位

Null値を許可する

主キー

デフォルト値

説明する

1

ヒットID

整数

10

0

N

Y

いいねID:

2

ユーザーID

整数

10

0

N

N

0

気に入った人:

3

作成時間

タイムスタンプ

19

0

N

N

CURRENT_TIMESTAMP

作成時間:

4

更新時間

タイムスタンプ

19

0

N

N

CURRENT_TIMESTAMP

更新時間:

5

ソーステーブル

可変長文字

255

0

Y

N

ソーステーブル:

6

ソースフィールド

可変長文字

255

0

Y

N

ソースフィールド:

7

ソースID

整数

10

0

N

N

0

ソースID:

テーブルhotel_information(ホテル情報)

シリアルナンバー

名前

データの種類

長さ

小数位

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

ホテルの住所

可変長文字

64

0

Y

N

ホテルの住所

7

ホテルカバー

可変長文字

255

0

Y

N

ホテルカバー

8

ホテルの紹介

長文

2147483647

0

Y

N

ホテル紹介

9

部屋の紹介

長文

2147483647

0

Y

N

お部屋紹介

10

ヒット

整数

10

0

N

N

0

クリック数

11

賞賛レン

整数

10

0

N

N

0

いいね数

12

推薦する

整数

10

0

N

N

0

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

13

作成時間

日付時刻

19

0

N

N

CURRENT_TIMESTAMP

作成時間

14

更新時間

タイムスタンプ

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

更新時間:

褒め言葉を表現する(「いいね!」)

シリアルナンバー

名前

データの種類

長さ

小数位

Null値を許可する

主キー

デフォルト値

説明する

1

賞賛ID

整数

10

0

N

Y

いいねID:

2

ユーザーID

整数

10

0

N

N

0

気に入った人:

3

作成時間

タイムスタンプ

19

0

N

N

CURRENT_TIMESTAMP

作成時間:

4

更新時間

タイムスタンプ

19

0

N

N

CURRENT_TIMESTAMP

更新時間:

5

ソーステーブル

可変長文字

255

0

Y

N

ソーステーブル:

6

ソースフィールド

可変長文字

255

0

Y

N

ソースフィールド:

7

ソースID

整数

10

0

N

N

0

ソースID:

8

状態

少し

1

0

N

N

1

いいねステータス:1はいいね、0はキャンセル

テーブル スライド (カルーセル)

シリアルナンバー

名前

データの種類

長さ

小数位

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

更新時間:

テーブル system_users (システム ユーザー)

シリアルナンバー

名前

データの種類

長さ

小数位

Null値を許可する

主キー

デフォルト値

説明する

1

system_users_id

整数

10

0

N

Y

システムユーザーID

2

ユーザー名

可変長文字

64

0

Y

N

ユーザー名

3

user_gender

varchar

64

0

Y

N

用户性别

4

examine_state

varchar

16

0

N

N

已通过

审核状态

5

recommend

int

10

0

N

N

0

智能推荐

6

user_id

int

10

0

N

N

0

用户ID

7

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

8

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表ticket_purchase_information (购票信息)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

ticket_purchase_information_id

int

10

0

N

Y

购票信息ID

2

attraction_name

varchar

64

0

Y

N

景点名称

3

ticket_price

varchar

64

0

Y

N

门票价格

4

user_information

int

10

0

Y

N

0

用户信息

5

user_name

varchar

64

0

Y

N

用户姓名

6

contact_number

varchar

64

0

Y

N

联系电话

7

number_of_tickets_purchased

int

10

0

Y

N

0

购票数量

8

total_ticket_price

varchar

64

0

Y

N

购票总价

9

ticket_purchase_remarks

text

65535

0

Y

N

购票备注

10

examine_state

varchar

16

0

N

N

未审核

审核状态

11

examine_reply

varchar

16

0

Y

N

审核回复

12

pay_state

varchar

16

0

N

N

未支付

支付状态

13

pay_type

varchar

16

0

Y

N

支付类型: 微信、支付宝、网银

14

recommend

int

10

0

N

N

0

智能推荐

15

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

16

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表tourist_routes (旅游路线)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

tourist_routes_id

int

10

0

N

Y

旅游路线ID

2

route_name

varchar

64

0

Y

N

路线名称

3

starting_location

varchar

64

0

Y

N

起始地点

4

destination_location

varchar

64

0

Y

N

目的地点

5

release_date

date

10

0

Y

N

发布日期

6

cover_photo

varchar

255

0

Y

N

封面图片

7

route_introduction

longtext

2147483647

0

Y

N

路线介绍

8

hits

int

10

0

N

N

0

点击数

9

praise_len

int

10

0

N

N

0

点赞数

10

recommend

int

10

0

N

N

0

智能推荐

11

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

12

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表type_management (类型管理)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

type_management_id

int

10

0

N

Y

类型管理ID

2

room_type

varchar

64

0

Y

N

房间类型

3

recommend

int

10

0

N

N

0

智能推荐

4

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

5

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表upload (文件上传)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

upload_id

int

10

0

N

Y

上传ID

2

name

varchar

64

0

Y

N

文件名

3

path

varchar

255

0

Y

N

访问路径

4

file

varchar

255

0

Y

N

文件路径

5

display

varchar

255

0

Y

N

显示顺序

6

father_id

int

10

0

Y

N

0

父级ID

7

dir

varchar

255

0

Y

N

文件夹

8

type

varchar

32

0

Y

N

文件类型

表user (用户账户:用于保存用户登录信息)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

user_id

mediumint

8

0

N

Y

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

2

state

smallint

5

0

N

N

1

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

3

user_group

varchar

32

0

Y

N

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

4

login_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

上次登录时间:

5

phone

varchar

11

0

Y

N

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

6

phone_state

smallint

5

0

N

N

0

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

7

username

varchar

16

0

N

N

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

8

nickname

varchar

16

0

Y

N

昵称:[0,16]

9

password

varchar

64

0

N

N

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

10

email

varchar

64

0

Y

N

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

11

email_state

smallint

5

0

N

N

0

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

12

avatar

varchar

255

0

Y

N

头像地址:[0,255]

13

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

表user_group (用户组:用于用户前端身份和鉴权)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

group_id

mediumint

8

0

N

Y

用户组ID:[0,8388607]

2

display

smallint

5

0

N

N

100

显示顺序:[0,1000]

3

name

varchar

16

0

N

N

名称:[0,16]

4

description

varchar

255

0

Y

N

描述:[0,255]描述该用户组的特点或权限范围

5

source_table

varchar

255

0

Y

N

来源表:

6

source_field

varchar

255

0

Y

N

来源字段:

7

source_id

int

10

0

N

N

0

来源ID:

8

register

smallint

5

0

Y

N

0

注册位置:

9

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

10

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

  1. 系统实现
    1. 数据库访问层的实现

该系统是通过jdbc和Mysql达成连接的,新建一个jdbc.properties文件来填写与数据库连接所需要的驱动和参数。

第一个参数代表Mysql数据库的驱动,第二个参数代表要连接的数据库,第三个和第四个参数代表数据库连接名和密码。

后台与数据库访问主要是通过HQL语句来进行查询的,查询语句中的表名是表格的实体类名,在这种查询语句中*是不允许使用的,除非适合聚合函数一起使用才可以。

    1. 注册模块的实现

用户在填写数据的时候必须与注册页面上的验证相匹配否则会注册失败,注册页面的表单验证是通过JavaScript进行验证的,用户名的长度必须在6到18之间,邮箱必须带有@符号,密码和密码确认必须相同,你输入的密码,系统会根据你输入密码的强度给出指定的值,电话号码和身份证号码必须要求输入格式与生活相符合,当你前台验证通过的时候你点击注册,表单会将你输入的值通过name值传递给后台并保存到数据库中。

用户注册流程图如下图所示。

图5-1用户注册流程图

用户注册界面如下图所示。

图5-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);

}

    1. 登录模块的实现

主要由两部分组成,登录前的登录界面以及登录后的用户功能界面。登录界面,要求用户输入用户名和密码,当用户名和密码其中一个输入为空时,给出提示“用户名,密码不能为空”。获取用户名和密码后到数据库中查找,如果用户名存在,以及对应的密码正确,则登录成功,否则登录失败。登录失败后给出提示,并把焦点停在文本框中。登录成功后将该次会话的全局变量username设置为用户名。登录成功后进入会员的功能模块,主要有会员基本信息修改,已经发布景点信息管理,发布信息,和退出功能。退出功能是清除全局变量username的值,并跳回到首页。

登录流程图如下图所示。

图5-4登录流程图

用户登录界面如下图所示。

图5-5用户登录界面

用户登录的关键代码如下。

  /**

     * 登录

     * @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;

}

    1. 用户资料修改模块的实现

用户登录/注册成功之后可以修改自己的基本信息。修改页面的表单中每一个input的name值都要与实体类中的参数相匹配,在用户点击修改页面的时候,如果改后用户名与数据库里面重复了,页面会提示该用户名已经存在了,否则通过Id来查询用户,并将用户的信息修改为表单提交的数据。

    1. 公告信息管理模块的实现

如果公告信息的信息需要修改,管理员可以通过查询公告信息的基本信息来查询公告信息,查询公告信息是通过ajax技术来进行查询的,需要传递公告信息的标题、编号等参数然后在返回到该页面中,可以选中要修改或删除的那条信息,如果选中了超过一条数据,页面会挑一个窗口提醒只能选择一条数,如果没有选中数据会挑一个窗口题型必须选择一条数据。当选择确认修改的时候,后台会根据传过来的id到数据库查询,并将结果返回到修改页面中,可以在修改页面中修改刚刚选中的信息当点击确认的时候from表单会将修改的数据提交到后台并保存到数据库中,就是说如果提交的数据数据库中存在就修改,否则就保存。

公告信息展示界面如下图所示。

图5-6公告信息展示界面

公告信息管理界面如下图所示。

图5-7公告信息管理界面

公告信息发布的关键代码如下。

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

        map.put("error", new HashMap<String, Object>(4) { {

            put("code", code);

            put("message", message);

        }});

        return map;

}

    1. 预订酒店模块的实现

预订酒店功能整体流程:用户浏览酒店信息时,同时会显示酒店的状态,系统会在其显示详细信息的页面时便会判断酒店的状态,若酒店状态为可预订,则会显示预订的链接按钮。在用户点击预订按钮时,会先通过拦截器判断用户是否登录,若未登录,会跳转至登录页面,提示用户先登录,若为登录用户就会跳转至填写预订信息的页面,填写好预订信息之后,点击提交按钮,预订成功之后返回提示信息,告知用户预订成功。

预订酒店流程图如下图所示。

图5-8预订酒店流程图

预订酒店界面如下图所示。

图5-8预订酒店界面

预订管理界面如下图所示。

图5-9预订管理界面

预订添加关键代码如下。

  @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);

        }

}

    1. 景点购票管理模块的实现

此页面的关键是编写景点信息信息,包括景点购票编号,名称,详情等。单击提交按钮以完成信息的添加。如果未写入完整的景点购票信息,例如,如果未写入景点购票编号,系统将给出相应的错误提示,并且无法成功输入。数据以概念的形式以onsubmit =“return checkForm()”的形式写入以进行检查,checkForm()函数是一种用于写入数据的不同类型的校对方法,是不是为空也是经过form表单中的οnsubmit=”return checkForm()来检查。

管理员点击左侧菜单“景点购票信息管理”,页面跳转到景点购票信息管理外观,调用后台景点购票查询所有景点购票信息。并将信息密封到数据集合List,绑定到请求对象,然后页面跳转到相应的jsp,显示出景点购票信息,单击删除按钮完成景点购票信息的删除。

景点购票管理流程图如下图所示。

图5-10景点购票管理流程图

景点购票添加界面如下图所示。

图5-11景点购票添加界面

景点购票管理界面如下图所示。

图5-12景点购票管理界面

景点购票发布的关键代码如下。

 @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);

}

%>

    1. 酒店管理模块的实现

根据需求,需要对酒店进行添加、删除或修改详情信息。删除或修改酒店时,系统根据酒店的状态判定为可删除状态下,才会给出删除和修改链接,点击删除链接按钮时,请求到达后台,还会先查询酒店状态再次做出判定能否删除。点击修改链接按钮时,会跳转到修改信息的页面,重新填写好数据后,数据提交到后台会对数据库中相应的记录做出修改。

添加酒店时,会给出数据填写的页面,该页面根据填写好的酒店编号同样会事先发送Ajax请求查询编号是否已存在,数据填写好之后提交到后台,会调用相关服务在数据库中插入记录。

酒店管理流程图如下图所示。

图5-13酒店管理流程图

酒店添加页面设计效果如下图所示。

图5-14酒店添加界面

酒店管理页面效果如下图所示。

图5-15酒店管理界面

酒店发布的关键代码如下。

  @RequestMapping(value = "/del")

    @Transactional

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

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

        return success(1);

}

  1. 系统测试
    1. 测试目的

对任何系统而言,测试都是必不可少的环节,测试可以发现系统存在的很多问题,所有的软件上线之前,都应该进行充足的测试之后才能保证上线后不会Bug频发,或者是功能不满足需求等问题的发生。下面分别从单元测试,功能测试和用例测试来对系统进行测试以保证系统的稳定性和可靠性。

    1. 功能测试

下表是景点管理功能的测试用例,检测了景点管理中对景点信息的增加,删除,修改,查询操作是否成功运行。观察系统的响应情况,得出该功能也达到了设计目标,系统运行正确。

前置条件;用户登录系统。

表6-1 景点管理的测试用例

功能描述

用于景点管理

测试目的

检测景点管理时的各种操作的运行情况

测试数据以及操作

预期结果

实际结果

点击添加景点,必填项合法输入,点击保存

提示添加成功

与预期结果一致

点击添加景点,必填项输入不合法,点击保存

提示必填项不能为空

与预期结果一致

点击修改景点,必填项修改为空,点击保存

提示必填项不能为空

与预期结果一致

点击修改景点,必填项输入不合法,点击保存

提示必填项不能为空

与预期结果一致

点击删除景点,选择景点删除

提示删除成功

与预期结果一致

点击搜索景点,输入存在的景点名

查找出景点

与预期结果一致

点击搜索景点,输入不存在的景点名

不显示景点

与预期结果一致

下表是酒店管理功能的测试用例,检测了酒店管理中对酒店信息的增加,删除,修改,查询操作是否成功运行。观察系统的响应情况,得出该功能也达到了设计目标,系统运行正确。

前置条件;用户登录系统。

表6-2 酒店管理的测试用例

功能描述

用于酒店管理

测试目的

检测酒店管理时的各种操作的运行情况

测试数据以及操作

预期结果

实际结果

点击添加酒店,必填项合法输入,点击保存

提示添加成功

与预期结果一致

点击添加酒店,必填项输入不合法,点击保存

提示必填项不能为空

与预期结果一致

点击修改酒店,必填项修改为空,点击保存

提示必填项不能为空

与预期结果一致

点击修改酒店,必填项输入不合法,点击保存

提示必填项不能为空

与预期结果一致

点击删除酒店,选择酒店删除

提示删除成功

与预期结果一致

点击搜索酒店,输入存在的酒店名

查找出酒店

与预期结果一致

点击搜索酒店,输入不存在的酒店名

不显示酒店

与预期结果一致

    1. 性能测试

使用阿里云PTS(Performance Testing Service)性能测试服务对线上系统进行压力测试。线上服务器环境为:1核心CPU,1G内存,1Mbps公网带宽,Centos7.0操作系统。

压测过程中使用了2台并发机器,每台机器20个用户并发,对系统主页,登录,数据查询和数据维护等模块进行并发访问,测试结果是有40个用户并发时,数据管理相关页面的响应时间甚至达到了7s,通过查看服务器出网流量发现已经达到1381kb/s,可以看出服务器的带宽已经达到峰值,如果系统使用5Mbps的带宽,系统的响应时间和TPS将会大大增加。在整个测试的过程中,CPU的使用率占用仅8%,也提现出带宽瓶颈对系统的影响非常严重。

  1. 总结与展望

随着计算机互联网技术的迅猛发展,各行各业都已经实现采用计算机相关技术对日益放大的数据进行管理。该课题是旅游网站管理系统为核心展开的,主要是为了实现旅游信息化管理和用户在线预订酒店的需求。

旅游网站管理系统的开发是以Java编程语言作为基础,在Myeclipse平台上完成编码工作,系统整体为B/S架构,数据库系统使用Mysql。文中详细分析了旅游网站管理系统的研究背景、研究目的和意义、开发工具和相关技术以及系统需求、系统详细设计和系统测试等等一系列内容。系统实现了旅游网站管理系统所需的一些基本功能,并通过测试对这些实现的功能进行了完善,进而提高了系统整体的实用性。整个系统的开发过程中大量使用了Java相关的知识以及前端开发使用的html和javascript等,同时涉及到了很多开源框架和组件,例如后台系统中运用的MVVM模式、Freemarker模板引擎等,前端运用的UI框架等。

系统投入运行时,各功能均运行正常。系统的每个界面的操作符合常规逻辑,对使用者来说操作简单,界面友好。整个系统的各个功能设计合理,体现了人性化。

但是由于自己在系统开发过程中对一些用到的相关知识和技术掌握不够牢固,再加上自身开发经验欠缺,因此系统在有些方面的功能还不够完善,考虑的不够全面,因此整个系统还有待日后逐步完善。

参考文献

[1]赵静.基于SSM+VUE框架的企业合规管理系统[J].数字通信世界,2022(11):17-19.

[2]李乐.Java语言应用研究[J].智慧中国,2022(09):80-81.

[3]张晨.基于Java Web的反序列化信息安全漏洞挖掘研究[J].成都航空职业技术学院学报,2022,38(03):50-53.

[4]唐小玲.基于SSM框架的资质管理系统开发解析[J].科学技术创新,2022(26):80-83.

[5]彭莉芬.大数据视域下Java集合应用研究[J].福建电脑,2022,38(09):55-58.DOI:10.16707/j.cnki.fjpc.2022.09.012.

[6]仓业金.基于Java的软件保护技术研究[J].电脑知识与技术,2022,18(23):29-30+52.DOI:10.14004/j.cnki.ckt.2022.1597.

[7]宋旸.使用Java语言开发Web应用软件的知识探讨[J].中国设备工程,2022(14):121-123.

[8]杨迎.Java技术在嵌入式系统中的作用探讨[J].无线互联科技,2022,19(14):96-98.

[9]吴拓.Java编程语言在计算机软件开发中的应用[J].无线互联科技,2022,19(12):35-37.

[10]王南.Java编程在计算机应用软件中的应用特征与技术研究[J].信息记录材料,2022,23(04):130-132.DOI:10.16009/j.cnki.cn13-1295/tq.2022.04.057.

[11]杨迎.Java语言异常处理机制的分析[J].电子技术,2022,51(03):42-43.

[12]周金玉.乡村振兴背景下广州市乡村旅游电子商务创新发展研究[J].西部旅游,2022(02):20-22.

[13]张烈超,胡迎九.典型Java Web开发框架模型的研究[J].武汉交通职业学院学报,2021,23(04):122-127.

[14]许跃颖.基于敏捷开发的SSM Web应用开发措施[J].电子制作,2021(16):45-46+22.DOI:10.16589/j.cnki.cn11-3571/tn.2021.16.016.

[15]曹华山.SSM框架在Web应用开发中的设计与实现[J].无线互联科技,2021,18(11):108-109.

[16]Merle Didier,Landau Bernard. Review of the paleobiogeography of Eofavartia Merle, 2002 (Gastropoda: Muricidae) with the description of a new species from the Miocene of Java (Indonesia)[J]. Annales de Paléontologie,2020,106(prepublish).

[17]肥後芳樹、林新平、楠本伸司。Git メカニズムを使用した Java メソッドの追跡について[J]。The Journal of Systems & Software、2020、165(事前発行)。

[18] Pan Yuntian、Xiao Fei. 伝達翻訳理論の指導に基づく国内観光名所の公式ウェブサイトの中英翻訳に関する研究 - 南京牛首山の公式ウェブサイトの英語版を例に挙げる [J]. 英語スクエア、2020(16):37-41 .DOI:10.16723/j.cnki.yygc.2020.16.010。

[19] Bai Jie. 中国とイギリスのウェブサイトにおける英語の観光名所紹介における推移性の比較 [J]. 文化と教育資料、2019(18):221-223.

[20] Xing Jie、Zhang Qun、Zhuang Huihui. 広東省、香港、台湾の観光名所の英語と中国語のバイリンガル Web サイトの比較分析 [J]. 広東外国語大学ジャーナル、2017、28(06): 57 -64。

謝辞

このデザインには3か月かかりました。この卒業制作では、基本的に物事をスムーズに進めるためには講師の指導が不可欠です。講師の方々には、卒業制作の経験と論文の完成において、大変お世話になりました。その一方で、私は先生の真面目で責任感のある勤務態度、慎重な指導精神、確固たる理論基準から多くの恩恵を受けてきました。彼の勤勉かつ慎重な指導、教育、学習態度も私に非常に深い印象を残しました。先生たちからたくさんのことを学びました。私のスキルは理論と実践において大幅に向上しました。ここに先生方に心より感謝申し上げます。

この卒業研究の研究開発を経て、私のシステム研究開発は、要件分析から詳細な機能の実装、最終のテストと保守まで特別な進歩を遂げました。システムの研究開発についての理解が深まりました。疑問を自分で解決する実践力も大幅に向上したことが、この卒業制作の最大の成果です。

最後に、システム開発の全プロセスにおいて、クラスメイトや周りの友人からたくさんの意見をもらい、システムのビジネスアイデアをすぐに確認しました。この度は、心より感謝申し上げます。

プロジェクトのソース コードを無料で受け取るには、ブロガーをフォローして「いいね」を押し、プライベート メッセージを送ってください。

おすすめ

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