(ソースコード付き) Spring Boot ベースの授業管理システム 卒業制作 070917

Spring Bootをベースにしたクラス管理システム

まとめ

科学技術の急速な発展は人々の日常生活に大きな変化をもたらし、電子情報技術の急速な発展により、さまざまな分野における電子情報技術の応用レベルが普及し、応用されています。情報化時代の到来は抗しがたいファッショントレンドとなり、人類の発展の歴史は新たな時代を迎えています。実際の応用では、アプリケーションソフトウェアの運用ルールや開発手順を参考に、Java技術を利用した授業管理システムを構築します。

この設計は主に人間化、高効率、利便性の利点を統合したクラス管理システムを実現し、ユーザー管理、コース情報、コース分類、学生選択、コースタスク、修了記録、オンライン試験、試験記録、および検査結果モジュール。システムはブラウザを介してサーバーと通信し、データのやり取りと変更を実現します。科学的な管理手法と便利なサービスにより、作業効率を向上させ、データ保管のミスや漏れを削減します。クラス管理システムはJava言語を使用し、MVVMモデルに基づくSpringboot技術を用いて開発されており、データ面では主にMicrosoft社のMySQLリレーショナルデータベースをデータ記憶媒体として使用し、フロントエンドのHTML+CSS技術と連携しています。システム開発を完了します。

キーワード: クラス管理、Java 言語、リレーショナル データベース、データ ストレージ

Spring Bootをベースにしたクラス管理システム

概要

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

この設計は主に人間化、高効率、利便性の利点を備えたクラス管理システムを実現し、ユーザー管理、コース情報、コース分類、学生コース選択、コースタスク、修了記録、オンライン試験、試験記録などの機能モジュールを完成させます。 、試験の点数など。システムはブラウザを介してサーバーと通信し、データの対話と変更を実現します。科学的な管理と便利なサービスにより、作業効率を向上させ、データ保存のエラーや漏れを削減します。クラス管理システムは、Java 言語と MVVM モードに基づく Springboot テクノロジーを開発に使用します。データに関しては、主に Microsoft の MySQL リレーショナル データベースがデータ記憶媒体として使用されます。

キーワード 学級経営、学級経営 Java 言語。リレーショナルデータベース。データストレージ

目次

第 1 章 はじめに1

1.1 研究の背景1

1.2研究の目的と意義1 

1.3 本稿の組織構成2

第2章 関連技術の紹介3

2.1 Javaテクノロジー3

2.2 MV VMモード3

2.3 MySQLデータベース3

2.4 B/S構造4

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

2.6 Vue.js 4の主な機能

第 3 章 システム分析6

3.1 実現可能性の分析6

3.1.1 技術的実現可能性分析6

3.1.2 経済的実現可能性分析6

3.1.3 運用可能性分析6

3.2 機能要件の分析6

3.3 非機能要件の分析9

3.4 データフロー分析9

第4章 システム設計11

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

4.2 システム機能構造11

4.3 機能モジュールの設計12

4.4 データベース設計13

4.4.1 概念モデル13

4.4.2 関係モデル14

4.4.3 データ表14

第5章 システムの導入2 1

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

5.2 ユーザーサブシステムモジュール22

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

5.2.2 登録モジュール22

5.2.3コース情報モジュール24 

5.2.4学生コース選択モジュール25 

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

5.3.1 学生管理モジュール26

5.3.2オンライン試験管理モジュール2  9

5.3.3試験結果管理モジュール3  2

第 6 章 システムテスト3 4

6.1 テストの目的3 4

6.2 テストプロセス3 4

6.3 テスト結果3 5

第 7 章 総括と展望3 6

参考文献3 7

ありがとう3 9

  1. 序章
    1. 研究の背景

学級管理システムは、コンピュータを利用して授業情報を管理するコンピュータ応用技術の革新です。コンピュータが普及する前は、学級管理は教師や学級幹部によって行われていましたが、現在ではほとんどの学校で情報管理が導入されています。その方法はコンピュータを使用することです。クラス教師がクラスをより効果的に管理できるようにするための実践的なコンピュータクラス情報管理プログラムとして。クラス情報管理システムは代表的な情報管理システム (MIS) であり、その開発には主にバックグラウンド データベースの構築と保守、およびフロントエンド アプリケーション プログラムの開発が含まれます。前者の場合、強力なデータの一貫性と完全性、および優れたデータ セキュリティを備えたライブラリを確立する必要があります。後者の場合、アプリケーション プログラムは完全に機能し、使いやすいことが必要です。

    1. 研究の目的と意義

 大学入学者拡大計画の一層の推進に伴い、大学の規模はますます大きくなり、授業数は増加し、事務管理はますます複雑化しているため、授業管理システムが必要となり、クラスに関する関連情報をいつでも入手できます。クラス メンバーの個別状況の照会と分析 (試験結果、コース選択など)、クラス全体の状況の照会と分析 (全体のスコア分析)。また、システムには管理者が存在し、授業全体の状況を一元管理し、授業中の生徒(つまり一般ユーザー)に対する権限の付与、権限の撤回、関連情報の追加、削除、変更などが可能です。 。

最後に、主にデータベースのバックアップ、データベースの回復、データのセキュリティ、データベースのログの表示操作など、データベースの総合的な管理と保守についても考慮する必要があります。クラス管理システムは、クラス委員会が生徒の成績を管理しやすくするために開発されたソフトウェア システムです。このソフトウェアは、学業成績管理を一種のコンピュータ化の時代に導きます。学生が自分の情報を簡単に照会できるようにし、作業効率を向上させ、学生の最新情報をタイムリーかつ効果的に更新し、信頼できるデータアーカイブを提供するために。教師が要求する宿題は、ソフトウェア エンジニアリングに関する生徒の知識を強化し、向上させます。

私たちの生活は情報化の時代、電子化の時代であるべきであり、学生は現代社会で開発され適用されるべきマネジメントシステムについての理解を深め、より良い演習を行うことができるマネジメントシステム文書を作成します。私たち自身が良いマネージャーになること。

学期ごとに成績を確認する手間がなくなり、独自の授業管理システムにログインし、学生IDでログインするだけで簡単に最終成績を確認でき、日々の学習状況を把握することができます。自分をもっとよく律してください。本稿で授業管理システムを取り上げた背景には、教育の情報化の流れと我が国の大学における教育情報化システムの構築におけるマニュアル管理の不十分さがある。従来の管理モードと比較して、オンライン管理はより多くの技術的リンクに浸透しており、セキュリティを実現する方法と方法についてもより高い技術的要件を提示しています。インターネット/イントラネットによるオンライン管理の実現は、現代の教育技術の具体的な実現であり、実践上非常に重要な意義を持っています。

現在、Webアプリケーションシステムの開発技術は急速に発展しており、常に新しい技術が登場しています。学級管理システムをどのように設計するか、どのような技術を用いて学級管理システムを実現するか、そしてシステムの処理能力を向上させるかが大きな課題となっています。現在広く使用されているテクノロジーには、サーバー側では CGI、ASP、PHP、JSP、Java Servlet などが含まれ、クライアント側では VBScript、JavaScript、Java Applet などが含まれます。これらのテクノロジーは、Web アプリケーション システムの開発に強固な基盤を提供します。一般に、これらのテクノロジーは開発効率、動作速度、分散トランザクション処理、スケーラビリティの点で独自の利点があり、開発者は開発プロセス中に特定の要件に応じて柔軟に選択する必要があります。一般に、実際の Web アプリケーション システムは、複数の開発者がそれぞれの業務に応じて異なる技術を使用して共同開発します。しかし、現状の多くの実際のプロジェクトの開発プロセスでは、標準化されたプログラミング開発モデルが存在しないため、各部分の開発者間で十分なコミュニケーションが取れず、相互に影響し合い、相互に制約し合う状況が生じ、システム開発が困難になってしまいます。統合とメンテナンス、コストの上昇。したがって、Web アプリケーション システムの開発には、標準的で合理的かつ効果的な開発モデルを導入することが特に重要です。MVC (Model View Controller) モードは、モデルをディスプレイから分離し、コントローラーでプロセスを制御するという利点があり、現在の Web アプリケーション システム開発の基本要件を満たしており、徐々に Web アプリケーション開発の主流のモードになりました。システム。

このような問題に対し、時代の要請に応じて、ソフトウェアフレームワークをアセンブリ設計図として利用し、再利用可能なソフトウェア部品を利用して、ソフトウェアの再利用、分散オブジェクトコンピューティング、エンタープライズレベルのアプリケーション開発を統合する「コンポーネントベースのソフトウェア開発」が登場してきました。モジュールを組み立てるために、組み立てられたソフトウェアの再利用をサポートし、ソフトウェアの生産効率とソフトウェアの品質を大幅に向上させます。このテクノロジーに関する研究は国内外で深まっており、大手ソフトウェア企業 (Sun、Microsoft など) やソフトウェア組織 (OMG) が分散コンピューティングをサポートするプラットフォーム仕様を発表しています。同時に、人々はソフトウェア設計プロセスにおける設計パターンの再利用可能な設計アイデアの重要な役割をますます認識しています。さまざまな分散コンピューティング プラットフォームは、多くの設計パターンを使用するだけでなく、特定のプラットフォームに基づいてアプリケーション システムを構築するための多くの設計パターンも生み出します。

Web アプリケーション開発の初期段階では、オプションの開発テクノロジが相対的に不足しているため、方法論とソフトウェア エンジニアリングの観点から対応する Web アプリケーション モデルを構築します。その後の開発では、Web アプリケーションにおける抽象化と再利用のメカニズムがさらに提案されました。これらはすべて、Web アプリケーション開発の抽象概念モデルを提供し、Web アプリケーション研究に多大な貢献をしてきましたが、ネットワーク技術の発展と新しい技術の継続的な出現に伴い、効果的な設計および開発モデルのガイダンスが必要になっています。 Web アプリケーションの開発は、ビジネス要件が変化するエンタープライズ アプリケーションのニーズにも対応できるため、エンタープライズ Web アプリケーション システムは優れた拡張性、スケーラビリティ、セキュリティを備えています。

    1. この記事の構成

最初の章は序文であり、この記事の始まりであり、このトピックの研究背景と研究の重要性についてのテキストの説明がいくつかあります。

第 2 章では、クラス管理システムで採用されている開発手法と開発ツールについて説明します。

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

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

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

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

最後に、システムを真剣に総括し、将来への新たな展望を持ちます。

  1. 関連技術紹介
    1. Javaテクノロジー

JAVA 言語は、現在ソフトウェア市場で最も広く使用されている言語開発プログラムです。さまざまなプラットフォームで使用でき、互換性が高く、市場のほとんどのオペレーティング システムに適応し、文字化けがなく、拡張性と保守性が向上し、問題を分析して解決する能力を備えています。より堅牢なコードを書くことができます。

JAVA は他の言語に比べて比較的シンプルでコンパイルが容易で、高いセキュリティと信頼性を備えています。不完全な統計によると、世界中で 2,000 万人以上が Java を使用しており、JAVA はインレイ内で使用することも、単独で使用することもできます。JAVA は大きく 2 つの部分に分けることができ、1 つは JAVA が担当するコンパイルで、もう 1 つは JAVA が担当する操作です。JAVA は C++ 言語に非常に似ていますが、JAVA はプログラミング時にオブジェクト指向の方法でコンパイルされるため、コンパイルされたソフトウェアはスタンドアロン コンピュータまたはインターネット上で使用でき、エラーのチェックに便利です。また、JAVA の分散型でアーキテクチャに中立な特性により、ストレージが高速になり、プログラミングが容易になります。オブジェクト指向には 4 つの特徴があります。1 つはカプセル化です。これは、クラスを定義するときに特定の機能と属性を実現できることを意味します。2 つ目はクラスの一種である抽象化で、共通の属性を持つクラスを抽象化でカプセル化でき、単純なコンパイルに便利です。3 つ目は継承であり、その名前が示すとおり、前者の特徴を持っています。もう 1 つの特徴はポリモーフィズムであり、複数の方法で使用できるため、スケーラビリティが優れていることがわかります。

    1. MVVMパターン

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

    1. MySQLデータベース

科学技術の進歩は、日常生活に多くの利便性をもたらしました。教室のプロジェクターには仮想イメージング技術が使用され、デジタルカメラには光電検出技術が使用されています。たとえば、スーパーマーケットの倉庫に出入りする商品の記録には情報倉庫が必要です。この情報倉庫がデータベースであり、この授業管理システムもこの技術のサポートを必要とします [7]。

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

    1. B/S構造

B/S (ブラウザ/サーバー) は、以前のアーキテクチャよりも便利なアーキテクチャです。Web サーバーを使用してデータの転送と交換を完了します。クライアントとしてブラウザをダウンロードするだけで、作業は「スリム化」効果を達成し、ソフトウェアのノンストップインストールの問題を考慮する必要はありません[9]。

    1. Springboo フレームワーク

Spring フレームワークは、制御の反転機能を備えたコンテナを提供するJava プラットフォーム上のオープン ソース アプリケーション フレームワークです。Spring フレームワーク自体にはプログラミング モデルに対する制限はありませんが、Java アプリケーションで頻繁に使用されるため非常に人気があり、後にEJB (EnterpriseJavaBeans) モデルの補足として、または代替として使用されるようになりました。Spring フレームワークは、制御の反転のコア機能の使用や、宣言型トランザクション管理のためのアスペクト指向プログラミングを使用した管理オブジェクトのライフサイクルのコンテナ化を実現するための依存性注入による制御の反転の実装など、開発のための一連のソリューションを提供します。さまざまな永続化テクノロジがデータ アクセスを管理し、開発を容易にする多数の優れた Web フレームワークを提供します。Spring フレームワークには、制御反転 (IOC) の機能があります。IOC は、プロジェクトの保守とテストを容易にするように設計されており、Java リフレクション メカニズムを通じて Java オブジェクトの統合設定と管理の方法を提供します。Spring フレームワークは、コンテナを使用してオブジェクトのライフ サイクルを管理します。コンテナは、XML ファイルまたはクラスの特定の Java アノテーションをスキャンすることでオブジェクトを構成できます。開発者は、依存関係の検索または依存関係の注入を通じてオブジェクトを取得できます。アスペクト指向プログラミング(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、Apache Cayne などのすべての一般的なデータ アクセス フレームワークのサポートを提供するだけでなく、Spring のトランザクション管理と併用してデータ アクセスを提供することもできます。柔軟な抽象化。Spring フレームワークは当初、独自の Web MVC フレームワークを構築するつもりはありませんでしたが、開発プロセス中、開発者は既存の Struts Web フレームワークのプレゼンテーション層とリクエスト処理層の間、およびリクエスト処理層とモデルの間の分離が重要であると考えていました。それだけでは十分ではなかったので、彼らは Spring MVC を作成しました。

 2.6 Vue.jsの主な機能

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

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

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

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

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

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

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

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

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

      1. 運用実現可能性分析

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

    1. 機能要件の分析

システムの開発・設計の前に、機能の事前構想を立て、管理システムがどのようなセクションで構成され、各セクションがどのような機能を持っているのか、全体の設計がユーザーのニーズを満たしているのかを把握し、詳細な分析と要約を行う必要があります。開発されたシステムの機能を統合して、完全なシステムを設計し、実装します。ユーザーと開発者のコ​​ミュニケーションを分析し、理解を深め、システムを最大限に機能させる。

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

アップロード中... 再アップロード キャンセル

 

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

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

アップロード中... 再アップロード キャンセル

 

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

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

アップロード中... 再アップロード キャンセル

 

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

クラス管理システム 要件を分析した後、システム全体は主に管理者、学生、教師の 2 つの部分に分かれており、各モジュールの分岐機能が異なります。関数を次のように説明します。

学生モジュール:

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

プロファイル情報を管理し、変更可能な情報項目を変更します。

コース情報を確認すると同時に、公開されたコース情報レコードの履歴を表示します。

学生の履修選択に関する問い合わせを行うと同時に、公開されている履修選択記録の履歴を閲覧できます。

教師モジュール:

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

プロファイル情報を管理し、変更可能な情報項目を変更します。

テストのスコアを記録し、同時に過去のスコアの記録を確認します。

個人コースについて問い合わせたり、自分に割り当てられたコース記録を確認したりできます。

学生のコース選択のレビューと学生のコース選択のレビュー。

管理モジュール:

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

コース情報の公開、コースの破棄、コースデータの更新、コースデータのあいまい検索などが可能です。

オンライン試験データを管理します。

学生のコース選択情報データを保持します。

教師が公開したコースタスクデータを表示し、管理者はそれを維持する権利を持ちます。

    1. 非機能要件の分析

システムには、パフォーマンス要件、最大収容ユーザー数、安定性、使いやすさなど、機能以外の要件も数多くあります。このシステムの分析では、人が使用するシステムであるため、使いやすさの要件を考慮する必要があります。そのため、システムが理解しやすく、簡単であるように、ユーザーの視点からユーザーエクスペリエンスを十分に考慮する必要があります。使いやすく、操作も簡単です。

    1. データフロー分析

第 1 レベルのデータ フローチャートには、ログイン、ユーザー機能、検索保守などのモジュールが含まれています。ログイン モジュールで使用されるデータはユーザー アカウント文書を保存し、ユーザー機能モジュールが必要とするストレージは各ユーザー機能モジュールのデータ ファイルです。検索メンテナンスは上記を使用し、キーワードによりデータ文書を検索します。

システムのレイヤーごとのデータ フロー図を次の図に示します。

アップロード中... 再アップロード キャンセル

 

図 3-2 システムデータフロー図(1 層)

第 2 層のデータ フローは、第 1 層のデータ フロー図のログイン情報とユーザー機能の入力を改良したものです。つまり、ログイン情報を入力して情報の入力と背景レビューに絞り込み、ユーザー機能は通知クエリ、学生コースの選択、コース情報、オンライン試験、テスト結果、教師などの操作に絞り込みます。

システムのレイヤー 2 データ フロー図を次の図に示します。

アップロード中... 再アップロード キャンセル

 

図 3-4 システムデータフロー図(2階)

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

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

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

アップロード中... 再アップロード キャンセル

 

図 4-1 システム構成図

    1. システム機能構成

システム設計の目的は、システムに含まれるすべての機能構造を分析し、開発者がシステムを設計、開発、実装するための準備を行うことです。予備的な需要調査、分析、分類後、決定された全体的な需要には主に複数のモジュールが含まれます。つまり、ユーザー管理、コース情報、コース分類、学生選択、コースタスク、修了記録、オンライン試験、試験記録、試験結果です。システム全体の役割は 3 つの部分に分かれており、1 つは教師、もう 1 つは生徒、最後が管理者です。権限配分も明らかで、情報の閲覧に加えて、学生は自分のアカウント情報、通知の照会、コース情報、学生の選択、コースの課題、修了記録、オンライン試験、および試験記録を照会および管理する権限も持っています。管理者は最高の権限を持ち、権限保持者です。

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

アップロード中...キャンセルする場合は再アップロード 図 4-2 システム機能構成図

 

    1. 機能モジュール設計

ユーザー管理モジュール

このモジュールはすべてのユーザーがログインできるように設計されています。たとえば、学生はログイン後に自分の共通機能操作(個人情報の変更など)のみを実行できます。管理者とスーパー管理者ではログイン後の権限が異なり、管理者は権限を超えることはできません。スーパー管理者は、ユーザーのログイン権限とログイン後のシステムへのユーザーの操作権限を中心に、システム全体のデータを管理することができます。

コース情報モジュールの公開

教師とコースの間には公開関係があり、その関係は 1 対多です。コース業界番号に従って、コース データが公開データに転送され、オペレーターが教師となり、公開リストが生成されます教師は個人の過去の出版リストを閲覧し、データを破棄することができます。

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

教師がコースデータを入力し、コース入力ボタンをクリックし、順番に入力するコースデータを入力し、送信ボタンをクリックしてデータをデータベースに送信し、コースデータページを更新すると、削除と編集があります各データの右側にあるボタンを使用して、対応する削除および更新機能を完了します。

コース情報情報モジュール

教師と生徒の間には一対多の配置関係があり、課題番号に従って課題データをリリースデータに転送し、操作者が教師となってリリースリストを生成します。教師は個人の過去のリリースリストを閲覧し、データを破棄することができます。

試験結果モジュール

学生と科目選択の間には成績の関係があり、一対多の関係にあります 科目選択番号に従って、科目選択データが成績データに転送されます 操作者は学生であり、成績表が作成されます学生は個人の過去の成績リストを表示し、データを破棄することができます。

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

開発するシステムでは、ER 図を使用すると、他の人がシステムのトランザクションとそれらの間の関係をより迅速かつ簡単に理解できるようになります。システム分析段階で導き出された結論によると、クラス管理システムには、学生、管理者、教師、学生の選択、コース情報、コースタスク、修了記録、試験記録、オンラインなどの複数のエンティティが存在することが判明しました。試験。

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

アップロード中... 再アップロード キャンセル

 

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

      1. リレーショナルモデル

管理者 (管理者 ID、ユーザー名、パスワード、権限)

学生(学生id、学生名、学生の性別、学生番号)

生徒の選択 (生徒選択ID、コース番号、コース名、コースの種類、教師、生徒情報、生徒名、生徒番号、教師のレビュー、教師の返信)

オンライン試験 (オンライン試験ID、タイトル名、コース名、講師、試験書類、試験メモ)

教師 (教師ID、教師名、教師の性別、教師の職務番号、教師の役職、ユーザー ID)

試験記録(試験記録ID、タイトル名、科目名、講師、学生情報、学生名、解答用紙、試験成績)

コースタスク (コースタスクID、タイトル名、コース名、インストラクター、リリース時間、タスク内容、タスク要件)

コース情報(コース情報id、コース番号、コース名、コースタイプ、コース写真、講師、コース紹介、備考情報)

修了記録(修了記録ID、タイトル名、科目名、担当者、学生情報、学生名、学生番号、修了内容)

      1. データシート

データベースの論理構造は、データベース内の ER 図を特定のフィールドで記述します。フィールドとデータ型の説明を使用してオブジェクトの機能を具体化し、最終的には特定の論理関係を持つデータベース テーブル構造を形成します。授業管理システムが必要とするデータ構造テーブルの一部を以下の表に示します。

teacher_user表:

名前

タイプ

長さ

nullではない

主キー

ノート

教師ユーザーID

整数

11

はい

はい

教師用ユーザーID

先生の名前

可変長文字

64

いいえ

いいえ

先生の名前

教師_性別

可変長文字

64

いいえ

いいえ

教師の性別

教師の仕事番号

可変長文字

64

はい

いいえ

教師ID

先生のタイトル

可変長文字

64

いいえ

いいえ

教師の肩書

検査状態

可変長文字

16

はい

いいえ

承認状況

お勧め

整数

11

はい

いいえ

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

ユーザーID

整数

11

はい

いいえ

ユーザーID

作成時間

日付時刻

0

はい

いいえ

作成時間

更新時間

タイムスタンプ

0

はい

いいえ

更新時間

online_examination表:

名前

タイプ

長さ

nullではない

主キー

ノート

オンライン試験ID

整数

11

はい

はい

オンライン試験 ID

タイトル名

可変長文字

64

いいえ

いいえ

タイトル名

コース名

可変長文字

64

いいえ

いいえ

コースタイトル

インストラクター

整数

11

いいえ

いいえ

教師

試験_書類

可変長文字

255

いいえ

いいえ

試験資料

試験ノート

文章

0

いいえ

いいえ

試験の備考

お勧め

整数

11

はい

いいえ

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

作成時間

日付時刻

0

はい

いいえ

作成時間

更新時間

タイムスタンプ

0

はい

いいえ

更新時間

examination_record表:

名前

タイプ

長さ

nullではない

主キー

ノート

検査記録ID

整数

11

はい

はい

試験記録 ID

タイトル名

可変長文字

64

いいえ

いいえ

タイトル名

コース名

可変長文字

64

いいえ

いいえ

コースタイトル

インストラクター

整数

11

いいえ

いいえ

教師

学生情報

整数

11

いいえ

いいえ

学生情報

学生の名前

可変長文字

64

いいえ

いいえ

学生の名前

学籍番号

可変長文字

64

いいえ

いいえ

学籍番号

回答_文書

可変長文字

255

いいえ

いいえ

回答文書

検査結果

可変長文字

64

いいえ

いいえ

テストのスコア

お勧め

整数

11

はい

いいえ

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

作成時間

日付時刻

0

はい

いいえ

作成時間

更新時間

タイムスタンプ

0

はい

いいえ

更新時間

course_task表:

名前

タイプ

長さ

nullではない

主キー

ノート

course_task_id

整数

11

はい

はい

コースタスクID

タイトル名

可変長文字

64

いいえ

いいえ

タイトル名

コース名

可変長文字

64

いいえ

いいえ

コースタイトル

インストラクター

整数

11

いいえ

いいえ

教師

リリース時間

日にち

0

いいえ

いいえ

リリースタイム

タスクの内容

文章

0

いいえ

いいえ

タスクの内容

タスク要件

文章

0

いいえ

いいえ

ミッション要件

お勧め

整数

11

はい

いいえ

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

作成時間

日付時刻

0

はい

いいえ

作成時間

更新時間

タイムスタンプ

0

はい

いいえ

更新時間

course_information表:

名前

タイプ

長さ

nullではない

主キー

ノート

コース情報ID

整数

11

はい

はい

コース情報ID

コース番号

可変長文字

64

はい

いいえ

コース番号

コース名

可変長文字

64

いいえ

いいえ

コースタイトル

コースタイプ

可変長文字

64

いいえ

いいえ

コースタイプ

コース_写真

可変長文字

255

いいえ

いいえ

コース写真

インストラクター

整数

11

いいえ

いいえ

教師

コース_紹介

文章

0

いいえ

いいえ

コース紹介

備考情報

文章

0

いいえ

いいえ

備考

お勧め

整数

11

はい

いいえ

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

作成時間

日付時刻

0

はい

いいえ

作成時間

更新時間

タイムスタンプ

0

はい

いいえ

更新時間

completion_record表:

名前

タイプ

長さ

nullではない

主キー

ノート

完了レコードID

整数

11

はい

はい

完了レコードID

タイトル名

可変長文字

64

いいえ

いいえ

タイトル名

コース名

可変長文字

64

いいえ

いいえ

コースタイトル

インストラクター

整数

11

いいえ

いいえ

教師

学生情報

整数

11

いいえ

いいえ

学生情報

学生の名前

可変長文字

64

いいえ

いいえ

学生の名前

学籍番号

可変長文字

64

いいえ

いいえ

学籍番号

完全なコンテンツ

文章

0

いいえ

いいえ

完全なコンテンツ

お勧め

整数

11

はい

いいえ

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

作成時間

日付時刻

0

はい

いいえ

作成時間

更新時間

タイムスタンプ

0

はい

いいえ

更新時間

student_user表:

名前

タイプ

長さ

nullではない

主キー

ノート

学生ユーザーID

整数

11

はい

はい

学生ユーザーID

学生の名前

可変長文字

64

いいえ

いいえ

学生の名前

学生の性別

可変長文字

64

いいえ

いいえ

学生の性別

学籍番号

可変長文字

64

はい

いいえ

学籍番号

検査状態

可変長文字

16

はい

いいえ

承認状況

お勧め

整数

11

はい

いいえ

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

ユーザーID

整数

11

はい

いいえ

ユーザーID

作成時間

日付時刻

0

はい

いいえ

作成時間

更新時間

タイムスタンプ

0

はい

いいえ

更新時間

  1. システム導入
    1. ログインモジュールの実装

システムのログイン画面はユーザーの入り口であり、ユーザーはログインに成功した後にのみ入場および訪問することができます。ログイン時にフォームを送信すると、バックグラウンドプロセスが正当なユーザーかどうかを判断し、そのページにジャンプしてシステムに入ります。

ログイン正当性判定プロセス: ユーザーがアカウント番号とパスワードを入力すると、システムはまず入力データの正当性を判断し、login.Java ページでログイン要求を送信し、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系统首页界面

      1. 注册模块的实现

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

学生注册流程图如下图所示。

正在上传…重新上传取消

 

图5-1学生注册流程图

正在上传…重新上传取消

 

图5-4学生注册界面图

学生注册关键代码如下所示。

/**

     * 注册

     * @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. 课程信息模块

课程信息过程中,首先使用getmap(id,"xinxi"),通过课程ID得到课程数据,将课程数据赋值给考试成绩,调用CommDAO的insert方法将安排数据插入安排表中,最后查看个人历史发布课程信息记录,可以销毁历史安排数据。

课程信息流程图如下所示。

正在上传…重新上传取消

 

图5-6课程信息流程图

课程信息界面如图所示。

正在上传…重新上传取消

 

图5-7课程信息界面

      1. 学生选课模块

学生选课过程中,首先通过课程ID得到课程数据,将课程数据赋值给学生选课,调用mysql_query($sql)方法将选课数据插入选课表中,最后查看个人历史学生选课记录,可以销毁历史学生选课数据。

学生选课流程图如下所示。

正在上传…重新上传取消

 

图5-1学生选课流程图

学生选课界面如图所示。

正在上传…重新上传取消

 

图5-8学生选课界面

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

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

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

正在上传…重新上传取消

 

图5-9学生管理界面

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

@RequestMapping(value = {"/count_group", "/count"})

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

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

        return success(count.getResultList());

}

      1. 在线考试管理模块

添加考试信息时,输入必填字段后,表现层的ZuoyeController接受传过来的在线考试信息参数,再调用ZuoyeController类的addZuoye方法,经过ZuoyeService业务层到ZuoyeMapper持久层的处理,完成对整个添加考试信息的操作。addZuoye方法也和用户管理中的addUser方法类似,同时做添加和修改工作。

修改在线考试信息时,选择需要修改的考试进行修改,调用ZuoyeController控制器的editZuoye方法,拿到该考试原本的信息并显示到页面,管理员再对需要修改的考试信息字段进行修改,完成后调用addZuoye方法,调用业务层的updateByKey方法,更新数据库的在线考试表的数据。

在线考试管理流程图如下所示。

正在上传…重新上传取消

 

图5-10在线考试管理流程图

在线考试添加界面如下图所示。

正在上传…重新上传取消

 

图5-11在线考试添加界面

在线考试管理关键代码如下所示。

@PostMapping("/add")

    @Transactional

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

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

        return success(1);

    }

    @Transactional

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

        service.insert(map);

        return success(1);

}

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

        BufferedReader br = null;

        StringBuilder sb = new StringBuilder("");

        try{

            br = reader;

            String str;

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

                sb.append(str);

            }

            br.close();

            String json = sb.toString();

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

        }catch (IOException e){

            e.printStackTrace();

        }finally{

            if (null != br){

                try{

                    br.close();

                }catch (IOException e){

                    e.printStackTrace();

                }

            }

        }

        return null;

}

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

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

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

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

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

        }

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

        sql.append(") VALUES (");

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

            Object value = entry.getValue();

            if (value instanceof String){

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

            }else {

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

            }

        }

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

        sql.append(")");

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

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

        query.executeUpdate();

    }

      1. 考试成绩管理模块

考试成绩过程中,首先通过考试ID得到成绩数据,将选课数据赋值给考试成绩,调用mysql_query($sql)方法将成绩数据插入成绩表中,最后查看个人历史考试成绩记录,可以销毁历史成绩数据。

考试成绩录入流程图如下所示。

正在上传…重新上传取消

 

图5-12考试成绩录入流程图

考试成绩管理界面如图所示。

正在上传…重新上传取消

 

图5-13考试成绩信息界面

考试成绩管理关键代码如下所示。

@PostMapping("/set")

@Transactional

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

        service.update(service.readQuery(request), service.readConfig(request), service.readBody(request.getReader()));

        return success(1);

}

    public Map<String,String> readConfig(HttpServletRequest request){

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

        map.put(FindConfig.PAGE,request.getParameter(FindConfig.PAGE));

        map.put(FindConfig.SIZE,request.getParameter(FindConfig.SIZE));

        map.put(FindConfig.LIKE,request.getParameter(FindConfig.LIKE));

        map.put(FindConfig.ORDER_BY,request.getParameter(FindConfig.ORDER_BY));

        map.put(FindConfig.FIELD,request.getParameter(FindConfig.FIELD));

        map.put(FindConfig.GROUP_BY,request.getParameter(FindConfig.GROUP_BY));

        map.put(FindConfig.MAX_,request.getParameter(FindConfig.MAX_));

        map.put(FindConfig.MIN_,request.getParameter(FindConfig.MIN_));

        return map;

}

    public Map<String,String> readQuery(HttpServletRequest request){

        String queryString = request.getQueryString();

        if (queryString != null && !"".equals(queryString)) {

            String[] querys = queryString.split("&");

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

            for (String query : querys) {

                String[] q = query.split("=");

                map.put(q[0], q[1]);

            }

            map.remove(FindConfig.PAGE);

            map.remove(FindConfig.SIZE);

            map.remove(FindConfig.LIKE);

            map.remove(FindConfig.ORDER_BY);

            map.remove(FindConfig.FIELD);

            map.remove(FindConfig.GROUP_BY);

            map.remove(FindConfig.MAX_);

            map.remove(FindConfig.MIN_);

            return map;

        }else {

            return new HashMap<>();

        }

}

    @Transactional

    public void update(Map<String,String> query,Map<String,String> config,Map<String,Object> body){

        StringBuffer sql = new StringBuffer("UPDATE ").append("`").append(table).append("`").append(" SET ");

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

            Object value = entry.getValue();

            if (value instanceof String){

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

            }else {

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

            }

        }

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

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

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

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

        query1.executeUpdate();

}

    public String toWhereSql(Map<String,String> query, Boolean like) {

        if (query.size() > 0) {

            try {

                StringBuilder sql = new StringBuilder(" WHERE ");

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

                    if (entry.getKey().contains(FindConfig.MIN_)) {

                        String min = humpToLine(entry.getKey()).replace("_min", "");

                        sql.append("`"+min+"`").append(" >= '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("' and ");

                        continue;

                    }

                    if (entry.getKey().contains(FindConfig.MAX_)) {

                        String max = humpToLine(entry.getKey()).replace("_max", "");

                        sql.append("`"+max+"`").append(" <= '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("' and ");

                        continue;

                    }

                    if (like == true) {

                        sql.append("`"+humpToLine(entry.getKey())+"`").append(" LIKE '%").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("%'").append(" and ");

                    } else {

                        sql.append("`"+humpToLine(entry.getKey())+"`").append(" = '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("'").append(" and ");

                    }

                }

                sql.delete(sql.length() - 4, sql.length());

                sql.append(" ");

                return sql.toString();

            } catch (UnsupportedEncodingException e) {

                log.info("拼接sql 失败:{}", e.getMessage());

            }

        }

        return "";

    }

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

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

    1. 测试过程

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

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

表6-1登录测试用例

测试性能

用户或操作员登录系统

用例目的

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

前提条件

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

输入条件

预期输出

实际情况

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

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

一致

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

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

一致

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

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

一致

考试成绩测试用例表如下所示。

表6-2考试成绩测试用例

测试性能

用户进行考试成绩的操作

用例目的

测试用户进行考试成绩操作时,该功能是否正常

前提条件

用户进入作业详情页,该作业能够被批复

输入条件

预期输出

实际情况

对着某作业点击“发布”按钮

界面跳转至批复界面

一致

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

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

一致

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

提示“发布失败”

一致

课程信息管理测试用例表如下所示。

表6-3课程信息管理测试用例

测试性能

课程信息相关信息管理功能

用例目的

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

前提条件

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

输入条件

预期输出

实际情况

进入课程信息管理界面,点击“录入”按钮,填写所有必填项,点击提交

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

一致

进入课程信息管理界面,点击“录入”按钮,未填写一个或者多个必填项,点击提交

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

一致

进入课程信息管理界面,选择要修改的一条数据,点击该条数据后面的“修改”按钮 

节目跳转至修改界面

一致

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

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

一致

进入课程信息管理界面,点击某条数据后面的删除按钮

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

一致

    1. 测试结果

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

  1. 总结与展望

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

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

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

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

参考文献

[1]宋荣,窦长保.信息技术环境下班级管理的有效策略[J].西部素质教育,2022,8(06):128-130.DOI:10.16681/j.cnki.wcqe.202206040.

[2]李小红.高校辅导员班级管理与班风建设标准化对策分析[J].中国标准化,2022(06):175-177.

[3]曹军科.基于学生为主体的高中班级管理策略探究[J].品位·经典,2022(05):78-80.

[4]王曼维,杨荻,李岩,及松洁.基于SpringBoot框架的智慧医疗问诊系统设计与实现[J].中国医学装备,2022,19(03):133-136.

[5]胡中一.高校班级管理低质量探赜[J].湖北开放职业学院学报,2022,35(05):59-60+69.

[6]贺仕伟. 一种班级噪声管理系统和设备[P]. 四川省:CN215219745U,2021-12-17.

[7]马聪,华亮,羌予践.一种基于SpringBoot架构下的水质监测系统设计[J].电子器件,2021,44(05):1109-1114.

[8]黄冠,罗涛,侯宏伟. 互联网班级管理方法、系统、计算机设备和存储介质[P]. 广东省:CN113506195A,2021-10-15.

[9]Fuyuan Cheng. Talent Recruitment Management System for Small and Micro Enterprises Based on Springboot Framework[J]. Advances in Educational Technology and Psychology,2021,5(2).

[10]ジェン・チェン、チェン・ジャン、パン・ハイラン。SpringBootフレームワーク上での工数管理情報システムの設計[J]。物理ジャーナル: カンファレンスシリーズ、2020、1646(1)。

[11] Deng Zhilong. Spring MVC アーキテクチャに基づく高等専門学校におけるクラス管理システムの設計と実装 [J]. Educational Observation, 2020, 9(18): 79-80. DOI: 10.16070/j.cnki.cn45- 1388/ g4s.2020.18.031。

[12] Zhang Haiyan、Tang Wenxin、Liang Yongzhen. LabVIEW に基づくクラス情報管理システムの設計 [J]. ソフトウェア、2019、40(12): 81-84。

[13] Xu Yuanhui. 高等学校クラス管理システムの研究と分析 [D]. 雲南大学、2018.

[14] Zhang Honhao、Kang Ruihua. モバイル インターネットに基づくクラス管理システムの設計と実装 [J]. ソフトウェア ガイド、2017、16(05):91-93。

[15] 沈彩文. B/S 構造に基づく授業管理システムの研究 [C]//. 2016 年 5 月の科学探求学術セミナー., 2016:330-331.

ありがとう

設計が完了すると、大学生活は終わりを迎えます。大学生活は私にとって最も大切にしている時間であり、大学生活で多くのことを学び、成長することができ、そのすべての思い出が私の心に刻まれています。一緒に学び成長してきた生徒たち、成長過程を教えてくれた先生方のおかげで、御社に心より感謝いたします。

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

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

プロジェクトのソースコードを無料で入手します。いいね + プライベートメッセージにご注意ください

おすすめ

転載: blog.csdn.net/Q_3461074420/article/details/130970196