コンピューターの卒業プロジェクトに関する推奨トピック、Springboot 教師と生徒の Q&A 予約システム 40372 (無料のソース コード データベース)、JAVA、PHP、node.js、C++、Python、データ視覚化に関する段階的な指導のための数万の実践的なチュートリアル、など。

springboot 教師と生徒の相互質疑応答予約システム

まとめ

科学技術の急速な発展は人々の日常生活に大きな変化をもたらし、電子情報技術の急速な発展により、さまざまな分野で電子情報技術の応用レベルが普及し、応用されています。情報化時代の到来は、もはや止められないファッショントレンドとなり、人類の発展の歴史は新たな時代を迎えています。実際のアプリケーションでは、ソフトウェアの作業ルールと開発手順が適用され、Java テクノロジを使用して教師と学生向けの Q&A 予約システムが構築されます。

この設計は主に、人間化、高効率、利便性などの利点を組み合わせた教師と生徒のQ&A予約システムを実装し、ホームページ、Webサイト管理(カルーセル写真、お知らせ)人事管理(管理者、学生、教師)およびコンテンツを完了します管理(キャンパス情報、情報分類)モジュール管理(教師情報、学生の予約、予約のキャンセル、オンラインメッセージ、オンラインQ&A)個人管理およびその他の機能モジュール。システムはブラウザを介してサーバーと通信し、データのやり取りと変更を実現します。このシステムは、科学的な管理方法と便利なサービスにより、作業効率を向上させ、データ保管のエラーや漏れを削減します。教師と生徒の Q&A 予約システムは Java 言語を使用し、MVC モデルに基づいて Springboot テクノロジーを使用して開発され、Eclipse 2017 CI 10 コンパイラーを使用して作成されています。データに関しては、主に Microsoft の MySQL リレーショナル データベースがデータ記憶媒体として使用されていますフロントと連携し、HTML+CSS技術でシステム開発を完了します。

キーワード: 教師と生徒の Q&A の予定、Java 言語、リレーショナル データベース、データ ストレージ

Spring Boot 対話型応答および予約システム

抽象的な

科学技術の急速な発展は人々の日常生活に大きな変化をもたらしました。電子情報技術の急速な発展により、あらゆる分野における電子情報技術の応用レベルが普及し、応用されています。情報化時代の到来は抗しがたいファッショントレンドとなり、人類の発展の歴史は新たな時代を迎えています。実際のアプリケーションでは、アプリケーション ソフトウェアの作業ルールと開発手順に Java テクノロジが採用され、教師と学生向けの対話型応答および予約システムが構築されます。

この設計は主に、教師と生徒の対話型応答予約システムのユーザーフレンドリー、効率的、便利などの利点を実現し、ホームページ、ウェブサイト管理(ブロードキャストマップ、アナウンス)人事管理(管理者、生徒、教師)を完成させることを目的としています。コンテンツ管理(キャンパス情報、情報分類)モジュール管理(教師情報、生徒予約、予約キャンセル、オンラインメッセージ、オンライン応答)個人管理およびその他の機能モジュール。システムはブラウザを介してサーバーと通信し、データのやり取りと変更を実現します。科学的な管理と便利なサービスにより、作業効率を向上させ、データ保管のミスや漏れを削減します。教師と生徒の対話型質問応答および予約システムは Java 言語を使用し、MVC モードに基づく Springboot テクノロジーを使用して開発し、Eclipse 2017 CI 10 コンパイラーを使用して書き込み、データのデータ記憶媒体として Microsoft の MySQL リレーショナル データベースを使用し、連携します。フォアグラウンドの HTML+CSS テクノロジーを使用してシステム開発を完了します。

キーワード:教師と生徒は質問に答えたり、約束をしたりするためにお互いに同行します。Java 言語。リレーショナルデータベース。データストレージ

目次

第1章;序章

1.1 研究の背景と意義

1.2 開発状況

1.3 この記事の構成

第2章 関連技術の紹介

2.1 開発技術説明

2.2 MVVMパターンの概要

2.3 MySQL データベース

2.4 B/S構造

2.5 スプリングブート フレームワーク

2.6 Vue.jsの主な機能

第 3 章 システム分析

3.1 実現可能性の分析

3.1.1 技術的実現可能性分析

3.1.2 経済的実現可能性分析

3.1.3 運用可能性分析

3.2 機能要件の分析

3.3 非機能要件の分析

第4章 システム設計

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

4.2 システムの機能構成

4.3 機能モジュールの設計

4.4 データベース設計

4.4.1 概念モデル

4.4.2 データシート

第5章 システムの導入

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

5.2 ユーザーサブシステムモジュールの実装

5.2.1 ユーザーホームページモジュール

5.2.2 登録モジュール

5.2.3 オンライン Q&A モジュール

5.2.4 コメントモジュール

5.2.5 オンライン Q&A モジュール

5.2.6 質問応答モジュール

5.3 管理者サブシステムモジュールの実装

5.3.1 学生管理モジュール

5.3.2 個人情報管理モジュール

第6章 システムテスト

6.1 テストの目的

6.2 テストプロセス

6.3 テスト結果

第7章 総括と展望

参考文献

謝辞

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

インターネット技術の普及と Web 技術の継続的な発展により、従来の質問に答える方法に大きな影響を与えてきました。ネットワークベースの教育システムは、今日のコンピュータ アプリケーションのホットスポットです。大学の学生数の増加と、教師、コース、教師の定期的な変更により、教師と学生の間のコミュニケーションがますます減少し、教師と学生の間の質問に答えることが困難になっています。このため、教師と生徒の Q&A 予約システムを開発することがより現実的です。インターネット技術の普及に伴い、オンラインで行われる教育活動の人気が高まっています。教師と生徒の質疑応答予約システムは、インターネットを利用した教育活動を実現するツールであり、主に教師と生徒との質疑応答に反映されます。

このシステムでは、時間や場所に制限されず、学生が自分の時間に合わせて質問プランを立てることができ、また、Webサイトに登録している講師に質問や授業予約をすることができます。教師も同様で、質問に答えるために特定の教室で時間を設ける必要はなく、教師が質問に答えた後、生徒はシステムにログインして閲覧することができます。従来の教育では実現できない「個性に合わせた教育」を実現します。オンラインQ&Aシステムは、生徒の悩みを解決し学習効率を高める一方、教師と生徒の関係を深めることにもつながります。この卒業プロジェクトの目的は、学生の学習への関心を高め、今日の大学における教育モデルと教授法の改革を促進するために、学際的で普遍的なモジュール式のオンライン学習プラットフォームを設計および実装することです。非対面の教育方法を使用したオンライン Q&A システムでは、学生は時間や場所に制限されることなく、課題を提出し、質問し、質問に答えることができ、オンライン教育の公開性、双方向性、自主性を反映しています。したがって、独自の技術的および管理的意義を持つ、教師と学生向けの Springboot ベースの Q&A 予約システムを開発する必要があります。

    1. 開発状況

Song Haimin (2017)「B/S モードコースに基づくオンライン質問応答システムの設計」 私の国ではネットワーク技術が急速に発展しており、インターネットベースのアプリケーションがますます増えています。教育の方法、補助手段、ツールも急速に変化しています。学生が学習プロセス中に遭遇する問題をよりよく解決できるように、オンライン Q&A システムは時間と空間の制限を突破し、システム構造、システムのパフォーマンス、機能をカバーし、学習プロセス中に学生が遭遇する問題を解決します。この面では、B/S モード コースに基づいたオンライン Q&A システムの設計が体系的に詳しく説明されています。

Yang Peiji (2017)「WeChat と Java Web に基づく大学 Q&A システムの設計と実装」 教育 Q&A セッションで大学教師と学生が直面するスペースと時間の制約を解決し、大学教育の質を向上させるために、これは大学向けのオンライン Q&A システムは、WeChat パブリック プラットフォームに基づいており、教師は WeChat プラットフォームを通じてコース、学生、および学生の質問を管理できます。学生は WeChat を通じて質問し、回答を得ることができます。プラットホーム。このシステムは、教師と生徒が Q&A セッションに費やすコストを効果的に削減し、Q&A の品質を向上させることができます。

Jiang Liqun (2017) は、「Java 教育におけるオンライン質問応答フィードバック システムの応用」の中で、Java コースのオンライン質問応答フィードバック システムを独自に開発し、このシステムを Java コースの教育に適用して教師が質問に答え、疑問を解決できるようにしたことを紹介しました。 、そして同時に、システムを通じて生徒の問題の分類とフィードバックは、教師が生徒の学習情報と問題を理解し、コース指導の質を向上させるのに役立ちます。

Wang Zhenduo、Wang Zhenhui、Lin Zhihui、Zhang Shoujun (2017) は、反転授業指導における現在の不完全性に対処するために、「授業内外の反転授業のための統合指導モデルの構築」で、シンプルで実現可能な統合反転授業指導モデルを提案しました。リンク。授業前、教室、授業後の3つの統合された教育リンクの構築を通じて、反転授業の指導作業の完全性が確保され、反転授業の指導効果と質が効果的に向上します。

Geng Liwei (2017) は、「オンライン遠隔教育における質問応答システムの応用」の中で、質問応答システムがオンライン遠隔教育で広く使用されており、教育界からますます注目を集めていると紹介しました。Q&A システムは、教師の負担を軽減し、生徒の学習効率を向上させるだけでなく、教育コストを節約し、オンライン教育リソースを最大限に活用することもできます。オンライン教育の特徴から、オンライン遠隔教育におけるQ&Aシステムの必要性と活用法を解説し、Q&Aシステムの基本機能を紹介します。

    1. この記事の構成

第 1 章は序章であり、この記事の冒頭では、研究の背景とこのトピックの重要性がテキストで説明されています。

第 2 章では、教師と生徒の相互 Q&A 予約システムの開発技術と開発ツールについて検討します。

第 3 章はシステム分析部分で、システム要件全体の説明、機能面からのシステム要件の分析、システムが実装可能かどうかの非機能分析が含まれます。

第 4 章はシステム設計部分であり、この記事の重要な部分では、システム アーキテクチャの詳細な設計といくつかの主要な機能モジュールの設計手順が提供されます。

第 5 章はシステムの具体的な実装であり、システムの各モジュールの具体的な実装を紹介します。

第 6 章は、前の章に基づいてシステムをテストおよび実行します。

最後に、将来への新たな展望を提供するために、このシステムについて注意深く要約します。

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

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

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

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

    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データベース

科学技術の進歩により、教室のプロジェクターには仮想映像技術が、デジタルカメラには光電検出技術が使われるなど、日常生活に多くの利便性がもたらされており、例えばスーパーマーケットの商品の入出庫記録には情報倉庫が必要です。この情報倉庫はデータベースであり、今回の教師と生徒の Q&A 予約システムにもこの技術のサポートが必要です [7]。

複数のユーザーからのアクセスを受け付けるためにMySQLというソフトウェアが使われており、その中にArchiveなどが存在します。データを分類してそれぞれテーブルに保存するという特殊な操作により、データ管理システム自体の速度が向上し、データベースを柔軟に利用できるようになります。MySQL のコードは公開されており、他の人が再度コンパイルしてアップグレードすることができます。この機能は、適切なソフトウェアと組み合わせることで、ユーザーのコストを削減し、優れた Web サイト システムを形成できます。欠点はありますが、あらゆる面でユーザーの主流のアプリケーション オブジェクトです [8]。

    1. B/S構造

B/S (ブラウザ/サーバー) は、以前のものよりも問題のないアーキテクチャです。Web サーバーを使用してデータの送信と交換を行います。クライアントとしてブラウザをダウンロードするだけで済み、作業は「縮小」され、ソフトウェアを常にインストールするという問題を考慮する必要はありません [9]。

    1. スプリングブートフレームワーク

Spring フレームワークは、制御反転特性を備えたコンテナを提供するJava プラットフォーム上のオープン ソース アプリケーション フレームワークです。Spring フレームワーク自体にはプログラミング モデルに制限はありませんが、Java アプリケーションで頻繁に使用されるため非常に人気があり、後にEJB (Enterprise JavaBeans) モデルの補足として、または代替として使用されるようになりました。Spring フレームワークは、制御の反転のコア機能の利用や、管理対象オブジェクトのライフサイクルのコンテナ化を実装するための依存関係注入による制御の反転の実装、宣言型トランザクション管理のためのアスペクト指向プログラミングの使用など、開発のための一連のソリューションを提供します。統合 さまざまな永続化テクノロジによってデータ アクセスが管理され、開発を容易にする多数の優れた Web フレームワークが提供されます。Spring フレームワークには Inversion of Control (IOC) 機能があり、プロジェクトのメンテナンスとテストを容易にするように設計されており、Java のリフレクション メカニズムを通じて Java オブジェクトの統合設定と管理の方法を提供します。Spring フレームワークは、コンテナを使用してオブジェクトのライフ サイクルを管理します。コンテナは、XML ファイルまたはクラスの特定の Java アノテーションをスキャンすることでオブジェクトを構成できます。開発者は、依存関係の検索または依存関係の注入を通じてオブジェクトを取得できます。Spring フレームワークにはアスペクト指向プログラミング(AOP) フレームワークがあり、Spring AOP フレームワークはプロキシ モードに基づいており、実行時に構成可能です。AOP フレームワークは主にモジュール間の相互関係をモジュール化します。Spring フレームワークの AOP フレームワークは基本的な AOP 機能のみを提供しており、AspectJ フレームワークと比較することはできませんが、AspectJ との統合により基本的なニーズにも対応できます。Spring AOP技術を利用することで、Springフレームワークのトランザクション管理やリモートアクセスなどの機能を実現できます。Spring のトランザクション管理フレームワークは、Java プラットフォームに抽象化メカニズムを導入し、ローカルおよびグローバル トランザクション、およびネストされたトランザクションが、Java プラットフォーム上のほぼすべての環境でセーブポイントを使用して動作できるようにします。Spring にはさまざまなトランザクション テンプレートが統合されており、システムはトランザクション テンプレート、XML または Java アノテーションを通じてトランザクションを構成でき、トランザクション フレームワークにはメッセージングやキャッシュなどの機能が統合されています。Spring のデータ アクセス フレームワークは、開発者がアプリケーションでデータベースを使用するときに遭遇する一般的な問題を解決します。Java: JDBC、iBATS/MyBATIs、Hibernate、Java Data Objects (JDO)、ApacheOJB、ApacheCayne などのすべての一般的なデータ アクセス フレームワークのサポートを提供するだけでなく、Spring のトランザクション管理と併用してデータ アクセスを提供することもできます。 。Spring フレームワークは当初、独自の Web MVC フレームワークを構築するつもりはありませんでしたが、開発プロセス中、その開発者は、既存の StrutsWeb フレームワークのプレゼンテーション層とリクエスト処理層の間、およびリクエスト処理層とリクエスト処理層の間の分離が重要であると考えていました。モデルだけでは十分ではなかったので、SpringMVC を作成しました。

    1. Vue.jsの主な機能

Vue.js は、ユーザー インターフェイスを構築するための進歩的なフレームワークです。他の重量級フレームワークとは異なり、Vue はボトムアップの増分開発設計を採用しています。Vue のコア ライブラリはビュー レイヤーのみに焦点を当てており、学習や他のライブラリや既存のプロジェクトとの統合が非常に簡単です。一方、Vue は、Vue エコシステムによってサポートされる単一ファイルのコンポーネントとライブラリを使用して開発された複雑な単一ページ アプリケーションを駆動する能力を十分に備えています。

Vue.js の目標は、可能な限り単純な API を通じて応答性の高いデータ バインディングと合成ビュー コンポーネントを実装することです。

Vue.js 自体はフル機能を備えたフレームワークではなく、ビュー層のみに焦点を当てています。したがって、学習が非常に簡単で、他のライブラリや既存のプロジェクトとの統合も非常に簡単です。一方、Vue.js を関連ツールやサポート ライブラリと併用すると、複雑な単一ページ アプリケーションを強化することもできます。

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

この設計は B/S モードに基づいており、Java テクノロジーを使用して MySQL データベースと Eclipse を実装しており、全体的な実現可能性は次の 3 つの側面に分けられます。

      1. 技術的な実現可能性の分析

いわゆる技術的実現可能性とは、初期段階で計画した機能を限られた時間内で満たせるかどうかを指します。開発・設計で解決できない問題に遭遇することはありますか?完成したプロジェクトがうまく活用できるか、不足点があった場合、その後のメンテナンスが非常に困難になるかどうか。システムを評価した結果、既存のテクノロジーで目標を達成できることが判明しました。Java テクノロジーを使用して動的ページを実装し、依存性の低い設計パターン、柔軟なデータベース、安定したサーバーを組み込むことで、システム全体の運用効率が大幅に向上します。このことから、技術レベルでの目標の達成は決して無理な考えではないことがわかります。

      1. 経済的実現可能性分析

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

      1. 運用可能性分析

本システムの機能を実現するための操作は非常に簡単で、一般的なコンピュータの一般的な構成で動作するため、コンピュータの基本的な使い方の知識があればスムーズに使用することができます。コンピュータはインターネットに接続する機能を備えており、システムに正常にアクセスできますが、オペレータは特別な能力を必要とせず、業務プロセスを理解し、専門知識に基づいて正しい操作を実行するだけで十分です。学生質疑応答予約システムは運用可能性がある。

    1. 機能要件の分析

システムの開発・設計を行う前に、機能の事前構想を作成し、管理システムがどのようなセクションで構成され、各セクションがどのような機能を持っているのか、全体の設計がユーザーのニーズを満たしているのかを明確に理解した上で、詳細な分析と要約を行う必要があります。開発したシステムが機能することで、完全なシステムを設計し、実装します。最高レベルの理解を達成し、システム機能を最適化するためのユーザーと開発者間のコミュニケーション分析。

学生のユースケース図を以下に示します。

図 3-1 学生のユースケース図

管理者のユースケース図を以下に示します。

図 3-2 管理者の使用例図

教師のユースケース図を以下に示します。

図 3-3 教師のユースケース図

教師と生徒の相互Q&A予約システムのニーズを分析した結果、システム全体は主に管理者と生徒の2つの部分に分かれており、各モジュールの下にあるブランチ機能が異なります。機能は次のように説明されます。

学生モジュール:

アカウントを登録。

アカウントのログイン認証。

個人プロフィール情報を管理し、編集可能な情報項目を変更します。

オンラインで質問したり、過去の質問の履歴を表示したりできます。

質問に返信し、返信の履歴を表示します。

コースを予約し、過去の予約記録を確認します。

予約をキャンセルし、キャンセル履歴を確認します。

教師モジュール:

個人プロフィール情報を管理し、編集可能な情報項目を変更します。

コース予約、生徒のコース予約のレビュー。

予約のキャンセル、学生のキャンセルの見直し

管理者モジュール:

学生が残したコメントデータを維持し、違法なコメントを削除します。

生徒が残した予約データを保管します。

学生の管理、学生アカウントの確認、学生のログイン権限の凍結、または学生アカウントの削除を行います。

    1. 非機能要件の分析

システムには、パフォーマンス要件、ホストできる最大ユーザー数、安定性、使いやすさなど、機能以外の要件が多数あります。このシステム分析では、人が利用するシステムであるため、ユーザーの視点やユーザーエクスペリエンスを十分に考慮した、分かりやすさ、使いやすさ、操作しやすさを考慮したシステム分析を行っています。 。

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

現在、B/S システムの主なデータ アクセス方法は、ユーザーがブラウザ ページからシステムにアクセスし、ユーザーがサーバーに送信したリクエストをシステムが自動的に処理することです。ページ上で対応する操作を行うことで、サーバーから配信される処理結果を確認できます。教師と生徒の Q&A 予約システムは、主にビュー、モデル、制御の 3 層のアーキテクチャ設計に分かれています。ビュー層では主にサーバー側でクライアントにフィードバック表示されるデータの操作を行い、モデル層では主に関連するビジネスロジックやデータ統合などを行います。モデルは主に 2 つの層間の関係を調整し、最終的にデータの送信を実装します。

システム構成図を次の図に示します。

図 4-1 システム構成図

    1. システムの機能構成

システム設計の目的は、システムに含まれるすべての機能構造を分析し、開発者がシステムの設計、開発、実装に向けて準備できるようにすることです。予備的な需要調査、分析、分類の後、決定される全体的な需要には主に複数のモジュール、つまりメッセージ管理、生徒管理、教師管理、および選択された生徒の予約が含まれます。システム全体の役割は 3 つの部分に分かれており、1 つは教師、もう 1 つは生徒、最後が管理者です。権限の配分も非常に明白で、情報の閲覧に加えて、学生には自分のアカウント情報の照会と管理、学生の予約、予約のキャンセル、オンラインでの質問への回答などの権限も与えられており、管理者が最高権限の所有者となります。

システムの機能構成図を下図に示します。

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

    1. 機能モジュール設計

オンラインQ&Aモジュール

学生とコースの間には質問の関係があり、一対多の関係にあります コース番号に従ってコースデータが質問データに転記されます 操作者は学生であり、質問リストが生成されます 学生個人履歴の質問リストを閲覧し、データを破棄することができます。

コースメンテナンスモジュール

教師はコースデータを入力し、コース入力ボタンをクリックし、入力するコースデータを順に入力し、送信ボタンをクリックしてデータをデータベースに送信し、コースデータページを更新します。各データの右側を選択して、対応する削除を完了し、機能を更新します。

質問応答モジュール

教師と質問の間には回答関係があり、その関係は 1 対多です。質問番号に従って質問データが回答データに渡されます。操作者が教師となり、回答リストが生成されます。教師個人履歴返信リストを閲覧し、データを破棄することができます。

学生予約管理モジュール

学生はシステムにログイン後、学生予約モジュールでコースを予約することができ、管理者はバックグラウンドで予約情報の表示や検索、予約情報の返信や削除を行うことができます。

コメント情報管理モジュール

コメントモジュールはユーザーコメントと管理者管理コメント情報に分かれており、ユーザーはシステムにログイン後、コメントしたいコースを選択してコメントを追加します、管理者はコメント情報を照会し管理権限を持ちます削除も含めて。

    1. データベース設計
      1. 概念モデル

開発するシステムの場合、ER 図を使用すると、他の人がシステムのトランザクションとトランザクション間の関係をより迅速かつ簡単に理解できるようになります。システム分析段階で得られた結論によると、教師と生徒の Q&A 予約システムには複数のエンティティ (生徒、管理者、コース、質問、教師) が存在することが判明しました。

システム全体の ER 図を次の図に示します。

図 4-4 システム全体の ER 図

      1. データシート

データベースの論理構造は、データベース内の特定のフィールドを使用して ER 図を記述します。フィールドとデータ型の説明を使用してオブジェクトの特性を具体化し、最終的には特定の論理関係を持つデータベース テーブル構造を形成します。教師・生徒相互Q&A予約システムに必要なデータ構造の一部を下表に示します。

    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:

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

シリアルナンバー

名前

データの種類

長さ

小数位

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

記事の説明

    1. テーブル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

更新時間:

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

シリアルナンバー

名前

データの種類

長さ

小数位

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

フィールド追加

可変長文字

500

0

Y

N

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

14

フィールドセット

可変長文字

500

0

Y

N

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

15

フィールド取得

可変長文字

500

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

更新時間:

    1. テーブル cancel_reservation (予約のキャンセル)

シリアルナンバー

名前

データの種類

長さ

小数位

Null値を許可する

主キー

デフォルト値

説明する

1

cancel_reservation_id

整数

10

0

N

Y

予約IDをキャンセルする

2

先生_いいえ

整数

10

0

Y

N

0

教師ID

3

先生の名前

可変長文字

64

0

Y

N

先生の名前

4

カレッジ

可変長文字

64

0

Y

N

カレッジ

5

教育コース

可変長文字

64

0

Y

N

教育コース

6

学生番号

整数

10

0

Y

N

0

学籍番号

7

学生の名前

可変長文字

64

0

Y

N

学生の名前

8

予約時間

日付時刻

19

0

Y

N

予定

9

キャンセルの理由

文章

65535

0

Y

N

キャンセルの理由

10

推薦する

整数

10

0

N

N

0

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

11

作成時間

日付時刻

19

0

N

N

CURRENT_TIMESTAMP

作成時間

12

更新時間

タイムスタンプ

19

0

N

N

CURRENT_TIMESTAMP

更新時間

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

シリアルナンバー

名前

データの種類

長さ

小数位

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

更新時間:

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

シリアルナンバー

名前

データの種類

長さ

小数位

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:

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

シリアルナンバー

名前

データの種類

長さ

小数位

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:

    1. お知らせ(お知らせ)

シリアルナンバー

名前

データの種類

長さ

小数位

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

更新時間:

    1. テーブル online_qa (オンライン Q&A)

シリアルナンバー

名前

データの種類

長さ

小数位

Null値を許可する

主キー

デフォルト値

説明する

1

online_qa_id

整数

10

0

N

Y

オンラインQ&AID

2

質問名

可変長文字

64

0

Y

N

質問名

3

問題の種類

可変長文字

64

0

Y

N

質問の種類

4

関連専攻

可変長文字

64

0

Y

N

関連専攻

5

質問の内容

文章

65535

0

Y

N

質問内容

6

答え

文章

65535

0

Y

N

答え

7

関連リソース

可変長文字

255

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

更新時間

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

シリアルナンバー

名前

データの種類

長さ

小数位

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はキャンセル

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

シリアルナンバー

名前

データの種類

長さ

小数位

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

更新時間:

    1. 表 学生(学生)

シリアルナンバー

名前

データの種類

長さ

小数位

Null値を許可する

主キー

デフォルト値

説明する

1

学生証

整数

10

0

N

Y

学生証

2

学生番号

可変長文字

64

0

N

N

学籍番号

3

学生の名前

可変長文字

64

0

Y

N

学生の名前

4

カレッジ

可変長文字

64

0

Y

N

カレッジ

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

更新時間

    1. テーブル Student_reservation (学生の予約)

シリアルナンバー

名前

データの種類

長さ

小数位

Null値を許可する

主キー

デフォルト値

説明する

1

学生予約ID

整数

10

0

N

Y

学生予約ID

2

先生_いいえ

整数

10

0

Y

N

0

教師ID

3

先生の名前

可変長文字

64

0

Y

N

先生の名前

4

カレッジ

可変長文字

64

0

Y

N

カレッジ

5

教育コース

可変長文字

64

0

Y

N

教育コース

6

学生番号

整数

10

0

Y

N

0

学籍番号

7

学生の名前

可変長文字

64

0

Y

N

学生の名前

8

予約時間

日付時刻

19

0

Y

N

予定

9

検査状態

可変長文字

16

0

N

N

未レビュー

承認状況

10

検査_返信

可変長文字

16

0

Y

N

モデレート返信

11

推薦する

整数

10

0

N

N

0

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

12

作成時間

日付時刻

19

0

N

N

CURRENT_TIMESTAMP

作成時間

13

更新時間

タイムスタンプ

19

0

N

N

CURRENT_TIMESTAMP

更新時間

    1. テーブルティーチャー(先生)

シリアルナンバー

名前

データの種類

長さ

小数位

Null値を許可する

主キー

デフォルト値

説明する

1

教師ID

整数

10

0

N

Y

教師ID

2

先生_いいえ

可変長文字

64

0

N

N

教師ID

3

先生の名前

可変長文字

64

0

Y

N

先生の名前

4

カレッジ

可変長文字

64

0

Y

N

カレッジ

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

更新時間

    1. テーブル Teachers_message (教師のメッセージ)

シリアルナンバー

名前

データの種類

長さ

小数位

Null値を許可する

主キー

デフォルト値

説明する

1

Teachers_message_id

整数

10

0

N

Y

教師のメッセージ ID

2

先生_いいえ

整数

10

0

Y

N

0

教師ID

3

先生の名前

可変長文字

64

0

Y

N

先生の名前

4

タイトル

可変長文字

64

0

Y

N

タイトル

5

メッセージの内容

文章

65535

0

Y

N

メッセージ内容

6

提案

文章

65535

0

Y

N

提案

7

推薦する

整数

10

0

N

N

0

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

8

作成時間

日付時刻

19

0

N

N

CURRENT_TIMESTAMP

作成時間

9

更新時間

タイムスタンプ

19

0

N

N

CURRENT_TIMESTAMP

更新時間

    1. テーブル Teacher_information (教師情報)

シリアルナンバー

名前

データの種類

長さ

小数位

Null値を許可する

主キー

デフォルト値

説明する

1

教師情報 ID

整数

10

0

N

Y

教師情報ID

2

先生_いいえ

整数

10

0

Y

N

0

教師ID

3

先生の名前

可変長文字

64

0

Y

N

先生の名前

4

カレッジ

可変長文字

64

0

Y

N

カレッジ

5

写真

可変長文字

255

0

Y

N

写真

6

タイトル

可変長文字

64

0

Y

N

役職

7

教育コース

可変長文字

64

0

Y

N

教育コース

8

教育

可変長文字

64

0

Y

N

教育資格

9

教育分野

文章

65535

0

Y

N

教育分野

10

質問の回答範囲

文章

65535

0

Y

N

質疑応答の範囲

11

営業時間

文章

65535

0

Y

N

質疑応答の時間

12

個人プロフィール

文章

65535

0

Y

N

個人プロフィール

13

ヒット

整数

10

0

N

N

0

クリック数

14

賞賛レン

整数

10

0

N

N

0

いいね数

15

推薦する

整数

10

0

N

N

0

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

16

作成時間

日付時刻

19

0

N

N

CURRENT_TIMESTAMP

作成時間

17

更新時間

タイムスタンプ

19

0

N

N

CURRENT_TIMESTAMP

更新時間

    1. テーブルアップロード(ファイルアップロード)

シリアルナンバー

名前

データの種類

長さ

小数位

Null値を許可する

主キー

デフォルト値

説明する

1

アップロードID

整数

10

0

N

Y

アップロードID

2

名前

可変長文字

64

0

Y

N

ファイル名

3

パス

可変長文字

255

0

Y

N

アクセスパス

4

ファイル

可変長文字

255

0

Y

N

ファイルパス

5

画面

可変長文字

255

0

Y

N

表示順

6

父親ID

整数

10

0

Y

N

0

親ID

7

ディレクトリ

可変長文字

255

0

Y

N

フォルダ

8

タイプ

可変長文字

32

0

Y

N

ファイルの種類

    1. テーブル user (ユーザー アカウント: ユーザーのログイン情報を保存するために使用されます)

シリアルナンバー

名前

データの種類

長さ

小数位

Null値を許可する

主キー

デフォルト値

説明する

1

ユーザーID

中程度の

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

创建时间:

    1. 表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. 登录模块的实现

系统的登录窗口是用户的入口,用户只有在登录成功后才可以进入访问。通过在登录提交表单,后台处理判断是否为合法用户,进行页面跳转,进入系统中去。

登录合法性判断过程:用户输入账号和密码后,系统首先确定输入输入数据合法性,然后在login.jsp页面发送登录请求,调用src下的mainctrl类的dopost方法来验证。

用户登录模块的IPO如下所示:

输入:用户名和密码。

处理:

1)检测用户输入的账号、密码是否正确及在数据库已对应存在。

2)从数据库中提取记录,并储存在本地的session中(timeout默认=30min)。

3)根据用户名,将其显示在系统首页上。

输出:是否成功的信息。

登录流程图如下所示。

图5-1登录流程图

系统登录界面如下所示。

图5-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, "账号或密码不正确");

        }

}

    1. 用户子系统模块的实现
      1. 用户首页模块

系统呈现出一种简洁大方的首页:界面简约、鳞次栉比,用户能轻车熟路的使用。出于对系统使用群体广泛的顾虑,应有良好性能的后台。

如下图所示为系统的首页界面。

图5-3系统首页界面

其中载入前台页面的主要代码如下。

@SpringBootApplication

@EnableJpaRepositories

public class Application {

    public static void main(String[] args) {

        SpringApplication.run(Application.class,args);

    }

}

      1. 注册模块

此页面实现学生的注册,必须注册登录后才能使用系统大部分功能,用户名不允许重复如果重复将会注册失败,并弹出相应的提示,通过js实现对输入的验证。

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

图5-4用户注册流程图

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

图5-5用户注册界面

用户注册关键代码如下所示。

/**

     * 注册

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

}

      1. 在线答疑模块

用户在lyblist查看在线答疑信息,先使用sql语句查询出所有在线答疑表的数据,然后调用PageManager.getPages(url,4,sql, request ),返回一个ArrayList的对象,在for循环里,使用jsp得到每个ArrayList对象的数据,然后放入页面模板中,用户点击我要在线答疑则跳转至lyb.jsp。

用户在线答疑流程图如下所示。

图5-6用户在线答疑流程图

用户在线答疑界面如图所示。

图5-7用户在线答疑界面

在线答疑管理界面如图所示。

图5-8在线答疑管理界面

在线答疑添加关键代码如下所示。

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

    }

      1. 评论模块

首先使用sql语句查询出所有课程表的数据,用户在课程页查看课程信息和评论信息,点击评论,跳转至评论添加页面,添加评论则将发布的评论数据封装在HashMap,中然后调用CommDAO的insert方法将评论内容插入评论表中,评论管理页面则调用PageManager.getPages(url,4,sql, request ),返回一个ArrayList的对象,在for循环里,使用jsp得到每个ArrayList对象的数据,然后放入页面模板中。

用户评论流程图如下所示。

图5-9用户评论流程图

用户评论界面如图所示。

图5-10用户评论界面

评论添加关键代码如下所示。

 @RequestMapping(value = {"/sum_group", "/sum"})

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

        Query count = service.sum(service.readQuery(request), service.readConfig(request));

        return success(count.getResultList());

}

      1. 在线答疑模块

在线答疑过程中,首先使用getmap(id,"xinxi"),通过课程ID得到课程数据,将课程数据赋值给在线答疑,调用CommDAO的insert方法将提问数据插入提问表中,最后查看个人历史在线答疑记录,可以销毁历史提问数据。

在线答疑流程图如下所示。

图5-11在线答疑流程图

在线答疑界面如图所示。

图5-12在线答疑界面

在线答疑关键代码如下所示。

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

}

      1. 问题回复模块

问题回复过程中,首先使用getmap(id,"xinxi"),通过问题ID得到问题数据,将问题数据赋值给问题回复,调用CommDAO的insert方法将回复数据插入回复表中,最后查看个人历史问题回复记录,可以销毁历史回复数据。

问题回复流程图如下所示。

图5-13问题回复流程图

问题回复界面如图所示。

图5-14问题回复界面

问题回复关键代码如下所示。

 @RequestMapping(value = {"/sum_group", "/sum"})

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

        Query count = service.sum(service.readQuery(request), service.readConfig(request));

        return success(count.getResultList());

}

    1. 管理员子系统模块的实现
      1. 学生管理模块

学生在yhzhgl查看学生信息,先使用sql语句查询出所有学生表的数据,然后调用PageManager.getPages(url,4,sql, request ),返回一个ArrayList的对象,在for循环里,使用jsp得到每个ArrayList对象的数据,在jsp页面中解析ArrayList对象,得到其各个键值对的值。

学生管理界面如下图所示。

图5-15学生管理界面

系统学生管理关键代码如下所示。

server:

  port: 5000

  servlet:

    context-path: /api

spring:

  datasource:

    url: jdbc:mysql://127.0.0.1:3306/CS725260_20211101091736?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8

    username: root

    password: root

    driver-class-name: com.mysql.cj.jdbc.Driver

  jackson:

    property-naming-strategy: CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES

    default-property-inclusion: ALWAYS

    time-zone: GMT+8

    date-format: yyyy-MM-dd HH:mm:ss

  servlet:

    multipart:

      max-file-size: 100MB

      max-request-size: 100MB

      1. 个人资料管理模块

用户点击登录填写账号信息登录后,会切换内容为“某某用户欢迎您”和历史订单,并给出注销链接。当用户登录成功后会将个人信息保存在session作用域中,点击自己的用户名时,会跳转到个人详细信息页面,由后台通过Freemarker取出session作用域中的用户信息进行动态渲染,例如,邮箱、电话号码、用户名等等。同时页面上会显示修改个人信息和修改密码的按钮,这时客户可以修改自己的登录密码以保障账号的安全性,防止被人窃取账号,通过UserController.java的updatePassword()实现,同时也可以根据自己的个人信息是否变动做出相应的修改,通过updateUserInfo()实现。

密码修改流程图如下所示。

图5-16密码修改流程图

密码修改关键代码如下所示。

 /**

     * 修改密码

     * @param data

     * @param request

     * @return

     */

    @PostMapping("change_password")

    public Map<String, Object> change_password(@RequestBody Map<String, String> data, HttpServletRequest request){

        // 根据Token获取UserId

        String token = request.getHeader("x-auth-token");

        Integer userId = tokenGetUserId(token);

        // 根据UserId和旧密码获取用户

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

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

        query.put("user_id" ,String.valueOf(userId));

        query.put("password" ,service.encryption(o_password));

        Query ret = service.count(query, service.readConfig(request));

        List list = ret.getResultList();

        Object s = list.get(0);

        int count = Integer.parseInt(list.get(0).toString());

        if(count > 0){

            // 修改密码

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

            form.put("password",service.encryption(data.get("password")));

            service.update(query,service.readConfig(request),form);

            return success(1);

        }

        return error(10000,"密码修改失败!");

    }

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

在对该系统进行完详细设计和编码之后,就要对师生互伴答疑预约系统的程序进行测试,检测程序是否运行无误,反复进行测试和修改,使之最后成为完整的软件,满足用户的需求,实现预期的功能。

    1. 测试过程

在软件的测试过程中,通常测试人员需要针对不同的功能模块设计多种测试用例。通过测试用例能够及时发现代码业务逻辑上是否与真实的业务逻辑相对应,及时发现代码上或逻辑上的缺陷,以此来来完善系统,提高软件产品的质量,使软件具有良好的用户体验。

注册测试用例表如下所示。

表6-1注册测试用例

测试性能

新用户注册

用例目的

测试系统新用户个人信息注册功能的功能和安全性

前提条件

进入注册页面填写个人信息

输入条件

预期输出

实际情况

各项基本信息输入不完整

不允许注册,无法点击注册按钮

一致

填写已存在的用户名

系统显示出提示信息,要求重新填写

一致

两次密码输入不一致

系统显示出提示信息,要求重新填写

一致

填写的各项信息没有符合提示的长度和字符要求

系统显示出提示信息,要求重新填写

一致

胡乱填写电话号码

收不到验证码

一致

填写验证码与收到的不一致

系统显示提示信息告知用户验证码错误,不予注册

一致

登录测试用例表如下所示。

表6-2登录测试用例

测试性能

用户或操作员登录系统

用例目的

测试用户或操作员登录系统时功能是否正常

前提条件

进入用户登录页面或操作员登录页面

输入条件

预期输出

实际情况

各项信息不予填写,直接点击登陆按钮

不允许登录,提示填写账号相关信息

一致

填写错误的登录名或密码后点击登录系统

提示用户名或密码错误,要求重新填写进行登录

一致

填写与验证码信息不一致的信息

系统显示出提示信息,表明验证码错误,要求重新填写

一致

在线答疑测试用例表如下所示。

表6-3在线答疑测试用例

测试性能

用户进行在线答疑的操作

用例目的

测试用户进行在线答疑操作时,该功能是否正常

前提条件

用户进入课程详情页,该课程能够被提问

输入条件

预期输出

实际情况

对着某课程点击“提问”按钮

界面跳转至提问界面

一致

在提问界面,输入必填项,点击“提交”按钮

提示“提问成功”,并返回上一级界面

一致

在提问界面,填写提问表单的时候未输入完整,点击“提交”按钮

提示“提问失败”

一致

学生预约测试用例表如下所示。

表6-4学生预约测试用例

测试性能

预约相关信息管理功能

用例目的

测试系统操作者对预约相关信息进行管理的功能是否正常

前提条件

登录系统进入相关管理页面

输入条件

预期输出

实际情况

进入学生预约界面,点击“录入”按钮,填写所有必填项,点击提交

提示“录入成功”,并返回查询界面

一致

进入学生预约界面,点击“录入”按钮,未填写一个或者多个必填项,点击提交

提示“录入失败”,请填写必填项

一致

进入学生预约界面,选择要修改的一条数据,点击该条数据后面的“修改”按钮 

节目跳转至修改界面

一致

在修改界面,修改可修改项后,点击“提交”按钮

提示“修改成功”,并返回查询界面

一致

进入学生预约界面,点击某条数据后面的删除按钮

提示“是否要删除该数据”,如果用户点击“确定”按钮,则成功删除该条数据,并提示“删除成功”,之后返回查询界面

一致

    1. 测试结果

经过对此系统的测试,得出该系统足以满足用户日常需求,在功能项目和操作等方面也能满足操作员对于其他用户的管理。但是,还有很多功能有待添加,这个系统仅能满足大部分的需求,还需要对此系统的功能更进一步的完善,这样使用起来才能更加的完美。

  1. 总结与展望

通过师生互伴答疑预约系统的开发,本人巩固了之前学过的知识,如今将平时所学到的知识融合在设计中,在设计过程中,做了很多的准备,首先,在数据库系统的设计过程中,尤其是在数据库的工作原理、工作特点,对其深刻的讨论,与此同时,对于小型站点来说,最好服务器的选择,其次,利用所学的知识点分析所做的系统,并在此基础上设计。

目前本系统已经上线,正在试运行阶段,用户反馈良好,基本完成用户所需,试运行过程中没有出现阻断性问题,有一些不足和小问题也及时予以修正,系统上线后,为了保证数据的安全性,对系统进行了备份操作,系统备份是每两个月备份一次,数据库备份为每周备份一次,系统部署在租赁的云平台服务器中。

本次系统上线成功后,得到了用户的高度认可,但是在功能上和性能上还需做进一步的研究处理,使其有更高的性能和更好的用户体验。

系统在以后的升级过程中,需要解决一系列用户所提出的问题,例如打印过程中如何避免浏览器的兼容性问题,大量用户访问时,如何保持较高的响应速度,在系统今后的升级过程中将着重解决这些安全性问题。

参考文献

[1]徐佩.新时期计算机软件开发技术的应用及发展趋势[J].农家参谋,2019(08):167.

[2]张帅,崔婀娜,魏立波.互联网+健康在线服务平台的设计与实现[J].科技创新与应用,2019(10):91-92.

[3]谷利国,陈存田,张甲瑞.基于B/S模式的人事教育信息管理系统的分析与设计[J].电脑知识与技术,2019,15(10):58-59.

[4]胥新政,强毅.基于JSP的常用金属材料标准检索平台开发设计[J].制造业自动化,2019,41(03):41-43+69.

[5]王祖维,南淮耀,张英.“互联网+”视域下的高校学生公寓管理系统设计与实现——以沈阳师范大学为例[J].现代商贸工业,2019,40(08):187-188.

[6]廖明华,齐攀.学生职业能力测评管理系统的设计与实现[J].广东交通职业技术学院学报,2019,18(01):48-52.

[7]李冬冬,刘华明,毕学慧,王秀友.旧衣申领系统的设计与实现[J].电脑知识与技术,2019,15(08):47-50.

[8]李庆年.“互联网+”视域下的人才招聘管理系统设计与实现[J].国际公关,2019(03):164-165.

[9]刘婷,彭焕峰,邵淑婷.基于云平台的高校监考管理系统[J].电脑知识与技术,2019,15(07):91-92.

[10]赵丙秀.基于百度AI平台的Web人脸注册和登录系统的实现[J].电脑知识与技术,2019,15(07):114-115.

[11]戴昭颖,尹涛.钢铁行业成本预算系统开发应用实践[J].电子技术与软件工程,2019(04):29-30.

[12]曹灿,刘志刚.基于SSH和Layui的工程科学前沿与实践系统[J].工业控制计算机,2019,32(02):91-92+96.

[13]谢路.基于Web的考务管理系统设计与实现[J].福建电脑,2019,35(01):136-137.

[14]张继东.MySQL数据库基于JSP的访问技术[J/OL].电子技术与软件工程,2017,(15):169(2017-08-03).

[15]韩思凡.Web开发中的JSP与HTML的基础应用[J].科学技术创新,2020(14):71-72.

[16]NastitiAndini,DaehaKim,JongAhnChun.Operationalsoilmoisturemodelingusingamulti-stageapproachbasedonthegeneralizedcomplementaryprinciple[J].AgriculturalWaterManagement,2020,231.

[17]A.D.Titisari,D.Phillips,I.W.Warmada,Hartono,A.Idrus.40Ar/39ArgeochronologyofthePongkorlowsulfidationepithermalgoldmineralisation,WestJava,Indonesia[J].OreGeologyReviews,2020,119.

[18]FranciscoOrtin,OscarRodriguez-Prieto,NicolasPascual,MiguelGarcia.HeterogeneoustreestructureclassificationtolabelJavaprogrammersaccordingtotheirexpertiselevel[J].FutureGenerationComputerSystems,2020,105.

[19]SatyaKrismatama、IndahRiyantini、IwangGumilar、LantunParaditaDewanti.Scomberomorusguttatus の釣り具の選択性 (Bloch&Schneider、1801)西ジャワ州パンガンダラン釣り場の商品[J].AsianJournalofFisheriesandAquaticResearch、2020。

[20]ZhongXiangfu、PlaAlbert、RaynerSimon.Jasmine:a Javapipeline for isomiRcharacterization in miRNA-Seqdata[J].バイオインフォマティクス、2020、36(6)。

謝辞

デザインの完成とともに、彼の大学生活は終わりを迎えようとしている。大学生活は私にとって最も大切な時間です。大学時代は多くのことを学び、多くの成長を遂げました。この間のすべての思い出は私の心に刻まれています。一緒に学び成長してきた生徒たち、成長過程を丁寧に教えてくださった先生方、本当にありがとうございました。

まず先生に感謝したいと思いますが、デザインの完成は先生の一連のご指導と切り離せないものです。卒業制作の際、先生は的確なアドバイスをたくさんいただき、先生の丁寧な仕事姿勢があったからこそ、私のデザインが無事に完成することができました。

最後に、大学生活で私にたくさんの知識を教えていただき、問題に遭遇したときの対処法や解決法を教えてくださった先生方に感謝いたします。ご支援とご協力に感謝いたします。

プロジェクトのソース コードを無料で受け取るには、次の手順を実行してください。● いいね! を集めて、ブロガーにプライベート メッセージを送信してください。ありがとうございます -

おすすめ

転載: blog.csdn.net/weixin_bysj703/article/details/135433187