目次
21世紀に入った今日、社会の発展・進歩に伴い、人々の情報に対する科学的理解は低レベルから高レベルへ、本来の知覚的理解から合理的理解へと発展し、管理業務の重要性が徐々に人々に認識されるようになりました。科学的管理により、情報の保存が正確、迅速かつ完全になり、作業管理の効率が向上し、その発展が促進されることが理解されています。
本稿では、学生出席管理システムについて、研究の現状や開発背景などを中心に紹介し、その設計目標、システムの要件、全体の設計計画、およびその影響についても論じます。システムの設計と実装についても詳細に議論され、最終的には学生の出席管理システムに関するいくつかの具体的なテストが実施されました。
この記事では、開発技術として Java を使用して学生の出席管理システムを実装します。学生出席管理システムの主な利用者は管理者、教師ユーザー、学生ユーザーに分けられ、管理者の機能はホームページ、システムユーザー(管理者、教師ユーザー、学生ユーザー)モジュール管理(クラス名、コースセンター、コース分類、コースサインイン、コースサインイン(確認)コース退出、コース退出(確認))。学生: ホームページ、学校のお知らせ、キャンパスニュース、コースセンター、その他の機能。これらの機能モジュールの設計により、勤怠管理プロセス全体が基本的に実現されます。
具体的には、システム設計においてはB/S構造を採用しており、同時にJava技術による動的なページ設計、バックグラウンドでMysqlデータベースを使用するなど、非常に優れた学生出席管理システムです。
キーワード: スプリングブート、学生出席管理システム、MySQL
抽象的な
21世紀の今日、社会の継続的な発展と進歩に伴い、情報の科学的性質に対する人々の理解は低レベルから高レベルへと発展し、管理業務の重要性が徐々に人々に認識されるようになりました。 。科学的な管理により、情報の保存は正確性、迅速性、完全性を実現し、業務管理の効率化とその発展を促進することができます。
本稿では、学生出席管理システムを中心に、研究の現状や開発背景などを紹介します。また、システムの設計目標、システム要件、および設計スキーム全体についても説明します。システムの設計と実装についても詳しく説明します。最後に、学生の出席管理システムに関するいくつかの具体的なテストが行われます。
この記事では、開発技術として Java を使用して学生の出欠管理システムを実装します。生徒の出席管理システムの主なユーザーは、管理者、教師ユーザー、生徒ユーザーです。管理者機能は、ホームページ、システム利用者(管理者、教師ユーザー、学生ユーザー)、モジュール管理(クラス名、コースセンター、コース分類、コースチェックイン、コースチェックイン(確認)、コース退出、コース退出(確認))。学生: ホームページ、学校のお知らせ、キャンパスニュース、コースセンター、その他の機能。これらの機能モジュールの設計により、勤怠管理プロセス全体が基本的に実現されます。
具体的には、システム設計においてはB/S構造を採用し、動的ページの設計にもJava技術を活用しました。バックエンドには MySQL データベースが使用されており、優れた学生出席管理システムとなっています。
キーワード:springboot; 学生の出席管理システム。 MySQL
1 绪论
インターネットの急速な発展は、世界中の組織の管理手法を根本的に変え、1990 年代以降、我が国の政府、企業、機関は、インターネット システムを通じて情報を管理できることを構想しました。過去には、ネットワークの普及率の低さ、ユーザーの拒否、インターネット関連法規制の不足、開発技術の未熟など、さまざまな理由により、主要機関におけるインターネットの開発速度が妨げられてきました。 21世紀に入ってから、我が国の経済は急速に発展し、機関運営を制約していた諸問題は次々に解決され、国内の主要機関はすべて電子情報管理モデルに参加しています。
従来、勤怠に関する情報管理はスタッフが手作業で行っていました。この方法はタイムリーなだけでなく、検索や変更の際にも不便です。科学の進歩、技術の成熟、コンピュータの情報化の急速な発展に伴い、コンピュータが非常に強力であることに対する社会の理解も深まり、コンピュータは人類社会の発展のさまざまな分野に参入し、非常に重要な役割を果たしています。このシステムはネットワーク通信とコンピュータ情報の蓄積・管理を利用しており、従来の方式では代替できない利点を持っています。例えば、計算速度や検索速度が極めて速く、信頼性が極めて高く、記憶容量が極めて大きく、機密性が極めて高く、保存時間が極めて長く、コストが極めて低い。インターネットを使用すると、勤怠管理のあらゆる側面がより科学的かつ体系的になり、より標準化され、よりシンプルになります。
1.2 国内外の研究状況
コンピューター ネットワークの継続的な普及により、人々の生活、仕事、学習の方法は徐々に変化しています。従来の勤怠関連情報管理手法は手作業が一般的であり、情報の取得、整理、修正、保存は依然として手作業の段階にあります。この方法は、多くの人的資源、物的資源、資金を必要とし、対話が難しく、時間の無駄になる一方で、特にユーザー数の増加に伴い、ユーザーやその他の情報の管理が困難になります。特にクエリや変更が困難です。最後に、ユーザーやその他の情報が増加し続けているため、情報の保管も問題になっています。
一部の先進国では、インターネットが比較的急速に発展し、手動管理からコンピュータ管理への移行がほぼ完了しました。我が国におけるコンピュータ利用の開始は比較的遅く、開発地域は不均衡である、伝統的な管理方法を採用している地域や単位が依然として多い、しかし、インターネットの普及などコンピュータは急速に発展している、多くの単位と利用者がゆっくりと開始しているネットワーク管理システムにアクセスするため。これらのシステムを見ると、主に次のような特徴があります。
(1)進化:ネットワーク管理の実現。
(2) 汎用性:基本的に同一業種で利用可能。
(3) 利便性:インターネット上で管理作業が完結します。
(4) 適時性:情報は適時更新されます。
(5) 拡張性: 必要に応じてモジュールを追加できます。
(6) セキュリティ: ユニット、ユーザー、その他の情報を暗号化します。
これまで、インターネットが人々の生活に浸透し、スマートフォンやノートパソコンなどが情報入手の主なツールとなり、通信量が無制限の時代となったため、勤怠管理にもネットワークを利用することが一般的になってきました。したがって、学生の出席管理システムの開発は必須です。
1.3スプリングブートフレームワークの概要
Spring Framework は、Java プラットフォーム上のオープンソース アプリケーション フレームワークであり、制御反転特性を備えたコンテナを提供します。 Spring フレームワーク自体にはプログラミング モデルに制限はありませんが、Java アプリケーションで頻繁に使用されるため非常に人気があり、後に EJB として使用されるようになりました (EnterpriseJavaBeans) )モデルの補足、または代替品さえあります。 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 フレームワークは、もともと独自の WebMVC フレームワークを構築することを目的としていませんでした。その開発者は、開発プロセス中に既存の StrutsWeb フレームワークのプレゼンテーション層とリクエストを考慮しました。処理層間、およびリクエスト処理層とモデル間の分離が十分ではなかったため、SpringMVC が作成されました。
1.4 論文構成と章の配置
この記事は 6 つの章に分かれており、章の構成は次のとおりです。
第 1 章は序章であり、このシステムが設計・実装された背景、状況、意義について詳しく考察・説明するとともに、論文全体の枠組みの構造を簡単に紹介します。
第 2 章はシステム要件分析です。この章で行われる主な作業は、システムの技術的、経済的、および運用上の実現可能性を分析することです。また、システムの全体的な機能要件とユースケースも分析します。
第 3 章はシステムの設計であり、主にシステムの機能構造を設計し、システム データベースの概念構造と物理構造設計を分析します。
第 4 章はシステムの実装についてであり、システムの機能分割に応じて、システムが実装する必要があるフロントエンドの学生ユーザ機能とバックエンドの管理者機能をそれぞれ分析して説明します。
第 5 章: システムのテスト。主にシステムの一部のインターフェースをテストし、主要な機能をテストします
2 学生の出席管理システムの分析
システム要件分析はシステム開発における重要なリンクであり、システムの設計と実装を結び付ける役割を果たします。システム要件分析とは、構築すべきシステムの要件を掘り出すことであり、分析が正確であれば、現実に発生する問題を正確に解決することができます。分析が適切に行われていない場合、後のシステムの実装に影響します。システムの優秀さの中で要求分析が占める割合も非常に大きく、要求分析ができていないとその後のシステム設計はナビゲーションから外れた設計になってしまいます。
システム実現可能性分析は、システムの実現可能性についての議論です。制度の実現可能性を議論する際には、主に技術的実現可能性、経済的実現可能性、法的実現可能性の3つの観点から分析し、この3つのレベルをクリアすれば、比較的実現可能であると考えています。
2.1.1 技術的実現可能性分析
学生出席管理システム保存と開発には mysql データベースが使用されますIDEA使用Tomcat などの開発ツールは、執筆作業に多くの利便性をもたらします。このシステムはspringbootフレームワークを使用して開発されており、これによりシステムのスケーラビリティと保守性が向上し、Java の使用量が削減されます。 >Java a>フレームワークも多くの企業に選ばれているフレームワークの一つです。 springboot設定コード、簡略化されたプログラミング コード、現在
経済的な実現可能性の観点から、このプロジェクトには開発段階では開発 PC が必要です、運用段階では Web サーバーとデータベース サーバーが必要です。経済的な観点から見ても、個人用の PC はそれほど問題にはならず、その後のシステム導入や生産を考えると、サーバーへの投資もそれほど高額ではなく、経済的な観点からも比較的実現可能です。
法的な観点から、システムにはサードパーティとの間に法的な問題はありません。システム データベースは Mysql オープン ソース コミュニティ データベースを使用し、フレームワークはオープン ソースの Springboot を使用します。システム情報および関連コンテンツも合法です。ソースコードはgitオープンソースで管理されているため、合法的に実行可能です。
生徒の出席管理システムは、管理者モジュール、教師ユーザー モジュール、生徒ユーザー モジュールの 3 つの部分に分かれています。
学生ユーザー管理モジュール:
(1) ユーザー登録とログイン:訪問者はいつでもシステムにアクセスし、システム内の情報を閲覧することができますが、コースセンターの運用を行う場合には、本システムのアカウントが必要となります。学生ユーザーは、アカウントを作成することで関連する操作を行うことができると同時に、「マイアカウント」ボタンを通じて個人情報や操作情報を管理することもできます。
(2) 学生出席管理システムのホームページ情報の閲覧:学生出席管理システムのホームページ情報には、ホームページ、学校からのお知らせ、キャンパスニュース、コースセンター、私の(マイアカウント、マイコレクション、パーソナルセンター)が含まれます。
(3) キャンパスニュース: 「キャンパスニュース」メニューをクリックすると、すべてのキャンパスニュース情報が表示されます。条件に応じてキャンパスニュースをフィルタリングしたり、キーワードを入力してローカル検索したりすることができます。クリックすると、キャンパスニュースの詳細表示インターフェースに入ることができます。お気に入り、いいね、コメント。
(4) 学校からのお知らせ:「学校からのお知らせ」メニューをクリックすると、管理者がバックグラウンドで公開するすべての学校からのお知らせ情報が表示され、学校からのお知らせの詳細を閲覧することができます。
(5) コースセンター: ユーザーが「コースセンター」メニューボタンをクリックすると、管理者がバックグラウンドで公開しているすべてのコースセンター情報が表示されます。キーワードによるコースセンターの検索をサポートします。必要なコースセンターを選択してクリックします。コースセンターの詳細導入インターフェースに移動します 詳細インターフェースでは、コース名、コース分類、教師ユーザー、教師名、クラス名、授業日、合計クラス数、サインイン数、番号が表示されますコースセンターの休暇申請数、出席率、その他の情報を取得すると同時に、コースへのサインイン、コース休暇、コメント操作を実行できます。
(6) コースサインイン: コースセンター詳細画面でコースにサインインしたい場合、下の「コースサインイン」ボタンをクリックすると、コースサインイン情報入力画面にジャンプします。インターフェースのプロンプトに従ってコースのサインイン情報を入力し、「送信」ボタンをクリックすると、コースのサインインが完了します。
(7) コース休暇: コースセンター詳細画面でコース休暇を申請したい場合、下の「コース休暇」ボタンをクリックすると、コース休暇情報入力インターフェースにジャンプします。インターフェイスにプロンプトが表示され、「送信」ボタンをクリックすると、休暇のコース申請が完了します。
(8) マイアカウント: ユーザーは、「マイアカウント」をクリックして、自分の個人情報とパスワードを更新できます。
管理者管理モジュール:
(1) ログイン: 管理者はユーザー名とパスワードを入力してバックグラウンドでログインでき、管理者のユーザー名とパスワードはデータベースに直接設定されます。
(2) カルーセル画像:管理者は、「カルーセル画像」メニューをクリックして、ホームページに表示されるカルーセル画像の追加、削除、変更、確認を行うことができます。
(3) 学校からのお知らせ: 管理者は、[学校からのお知らせ] メニューをクリックして、システム内のすべての学校からのお知らせ情報を表示し、既存の学校からのお知らせを変更したり、新しい学校からのお知らせを追加したり、学校からのお知らせを削除したりすることができます。
(4) システム ユーザー: 管理者は、[システム ユーザー] メニューをクリックして、システム内に存在するユーザー (管理者ユーザー、教師ユーザー、学生ユーザーなど) を管理できます。
(5) リソース管理:管理者は「リソース管理」メニューをクリックし、サブメニュー内のニュース一覧やニュース分類の追加、削除、変更、確認を行います。
(9) モジュール管理: [モジュール管理] メニューの下に、クラス名、コース センター、コース分類、コース サインイン、コース サインインが表示されます。コース休暇(確認)、コース休暇(確認)は、管理者が追加・削除・変更・確認することができます。
2.2.2 非機能分析
学生出席管理システムの非機能要件には、学生出席管理システムのセキュリティ、信頼性、パフォーマンス、拡張性などが含まれます。詳細は次の 3-1 表で表すことができます。
表3-1学生考勤管理系统非功能需求表
安全性 |
主に学生出席管理システムのデータベースのインストール、データベースの使用およびパスワードの設定が基準に準拠する必要があることを指します。 |
信頼性 |
信頼性とは、学生の出席管理システムが利用者の指示に従って動作することを指し、テストの結果、90%以上の信頼性があります。 |
パフォーマンス |
学生出席管理システムが市場を占有するにはパフォーマンスが必須条件であり、パフォーマンスが良いに越したことはありません。 |
スケーラビリティ |
たとえば、データベースは、システムの非機能要件を確実に満たすために、インターフェイスの使用などの複数の属性を予約します。 |
使いやすさ |
利用者は学生出欠管理システムのページ表示内容に従って操作するだけで済みます。 |
保守性 |
学生の出席管理システムの開発は保守性が非常に重要ですが、テスト後の保守性も問題ありません。 |
2.3 系统用例分析
学生出席管理システムの完全な UML ユースケース図は、それぞれ図 2-1 と図 2-2 です。
図 2-1 は、学生ユーザー ロールの使用例を示しています。
図 2-1 学生出席管理システムの学生ユーザーの役割のユースケース図
図 2-2 は、管理者の役割の使用例を示しています。
図 2-2 学生出席管理システムにおける管理者の役割のユースケース図
ビジネス プロセスは、システムを使用する際のユーザーのプロセスを示すために、いくつかの特定の記号と線を使用します。システム分析を実行する際、ビジネス プロセスは、開発者がビジネスをより深く理解し、エラーを発見し、システムを改善するのに役立ちます。
2.4.1 データ追加プロセス
ユーザーがシステムに正常にログインした後はデータを追加できます。追加されるデータの数は特定であり、システムによって生成されます。ユーザーが任意に入力することはできません, 番号以外の追加情報はユーザーが入力します. 入力された情報はシステムによって検証されます. 検証が正当であれば、データは正常に追加されたことが示されます. それ以外の場合は、データが追加されたことがわかります. 、追加は成功しませんでした。図2 -3 は、データを追加するプロセスを示しています。
図 2-3 データ追加フローチャート
2.4.2 数据修改流程
データ変更のプロセスは、図2~4が表示されます。
図 2-4 データ変更のフローチャート
2.4.3 データ削除プロセス
システムに無駄なデータがある場合、関連する管理者は a> これらのデータは削除できます。図 2-5 はデータが削除されたときです。 . フローチャート。
図 2-5 データ削除のフローチャート
2.5 この章の概要
本章では主に、学生出席管理システムの実現可能性分析、機能要件分析、システムユースケース分析、システムプロセス分析を通じて、学生出席管理システム全体で実現すべき機能を決定します。また、学生の出席管理システムのコード実装とテストの標準も提供します。
この章で説明する主な内容には、学生出席管理システムの機能モジュール設計とデータベース システム設計が含まれます。
3.1 システム機能モジュールの設計
前章では主にシステムの機能要件と非機能要件を分析し、それに基づいて本学生出席管理システムのユースケースを分析しました。次に、この学生出席管理システムのアーキテクチャ、主要な機能、データベースの設計を開始します。前章の需要分析に基づいて導出された学生出席管理システムの全体設計モジュール図を図 3-1 に示します。
図3-1 学生出欠管理システムの機能モジュール図
3.1.2 ユーザー モジュールの設計
本システムの利用者には管理者と利用者がいます. 2つの利用者モジュールの機能は基本的に同じです. 利用者は管理者に比べて登録機能が1つ多いため, 分析例として利用者モジュールの構造図を使用します.モジュール構造図は分析の例として使用されます。以下に示すように:
図 3-2 ユーザーモジュールの構成図
3.1.3 コメント管理モジュールの設計
学生出席管理システムはオープンなコミュニケーションプラットフォームであり、ユーザーはプラットフォーム上にコメントを投稿することでユーザー間の交流を促進します。しかし同時に、コメントの内容をより標準化し、管理者に不適切なコメントを削除する機能を提供するには、コメント管理モジュールを特別に設計する必要があり、具体的な構造図は次のとおりです。
図3-3 コメント管理モジュールの構成図
3.1.4 コース管理モジュールの設計
学生出席管理システムは多くの授業情報を保存する必要があり、そのモジュールの機能構成、具体的な構成図は次のとおりです。
図 3-4 コースモジュールの構造図
データベースの設計は、一般に需要分析、概念モデル設計、データベーステーブル作成の3つの大きなプロセスから構成されますが、需要分析については前章で説明しましたが、概念モデル設計は概念モデルと論理構造設計の2つに分かれます。
3.2.1 データベースの概念構造設計
以下は、学生出席管理システム全体の主要なデータベース テーブルの全体的な E-R エンティティ関係図です。
図 3-6 学生出席管理システム全体の E-R 関係図
前節の中学生出席管理システムにおける全体のE-R関係図から、合計で多くのデータテーブルを作成する必要があることがわかります。ここでは主に、いくつかの主要なデータベース テーブル構造設計をリストします。
テーブル class_name (クラス名)
シリアルナンバー |
名前 |
データの種類 |
長さ |
小数位 |
Null値を許可する |
主キー |
デフォルト値 |
説明する |
1 |
クラス名ID |
整数 |
10 |
0 |
N |
そして |
クラス名ID |
|
2 |
クラス名 |
可変長文字 |
64 |
0 |
そして |
N |
クラス名 |
|
3 |
推薦する |
整数 |
10 |
0 |
N |
N |
0 |
インテリジェントな推奨事項 |
4 |
作成時間 |
日付時刻 |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
作成時間 |
5 |
更新時間 |
タイムスタンプ |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間 |
テーブルコメント(コメント)
シリアルナンバー |
名前 |
データの種類 |
長さ |
小数位 |
Null値を許可する |
主キー |
デフォルト値 |
説明する |
1 |
コメントID |
整数 |
10 |
0 |
N |
そして |
コメントID: |
|
2 |
ユーザーID |
整数 |
10 |
0 |
N |
N |
0 |
コメント投稿者ID: |
3 |
Reply_to_id |
整数 |
10 |
0 |
N |
N |
0 |
返信コメントID: 空は0 |
4 |
コンテンツ |
長文 |
2147483647 |
0 |
そして |
N |
コンテンツ: |
|
5 |
ニックネーム |
可変長文字 |
255 |
0 |
そして |
N |
ニックネーム: |
|
6 |
アバター |
可変長文字 |
255 |
0 |
そして |
N |
アバターアドレス: [0,255] |
|
7 |
作成時間 |
タイムスタンプ |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
作成時間: |
8 |
更新時間 |
タイムスタンプ |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間: |
9 |
ソーステーブル |
可変長文字 |
255 |
0 |
そして |
N |
ソーステーブル: |
|
10 |
ソースフィールド |
可変長文字 |
255 |
0 |
そして |
N |
ソースフィールド: |
|
11 |
ソースID |
整数 |
10 |
0 |
N |
N |
0 |
ソースID: |
テーブル course_center (コースセンター)
シリアルナンバー |
名前 |
データの種類 |
長さ |
小数位 |
Null値を許可する |
主キー |
デフォルト値 |
説明する |
1 |
course_center_id |
整数 |
10 |
0 |
N |
そして |
コースセンターID |
|
2 |
コースID |
可変長文字 |
64 |
0 |
N |
N |
コース番号 |
|
3 |
コース名 |
可変長文字 |
64 |
0 |
そして |
N |
コースタイトル |
|
4 |
コース分類 |
可変長文字 |
64 |
0 |
そして |
N |
コースの種類 |
|
5 |
カバー |
可変長文字 |
255 |
0 |
そして |
N |
カバー |
|
6 |
教師_ユーザー |
整数 |
10 |
0 |
そして |
N |
0 |
教師ユーザー |
7 |
先生の名前 |
可変長文字 |
64 |
0 |
そして |
N |
先生の名前 |
|
8 |
クラス名 |
可変長文字 |
64 |
0 |
そして |
N |
クラス名 |
|
9 |
クラスの日付 |
日付 |
10 |
0 |
そして |
N |
授業日 |
|
10 |
クラスの合計サイズ |
整数 |
10 |
0 |
そして |
N |
0 |
クラスの合計人数 |
11 |
チェックイン人員の数 |
整数 |
10 |
0 |
そして |
N |
0 |
サインインしている人の数 |
12 |
休暇を取っている人数_of_people |
整数 |
10 |
0 |
そして |
N |
0 |
休暇申請者数 |
13 |
出席 |
可変長文字 |
64 |
0 |
そして |
N |
出席 |
|
14 |
推薦する |
整数 |
10 |
0 |
N |
N |
0 |
インテリジェントな推奨事項 |
15 |
timer_title |
可変長文字 |
64 |
0 |
そして |
N |
タイマータイトル |
|
16 |
タイミング開始時間 |
日付時刻 |
19 |
0 |
そして |
N |
計時開始時間 |
|
17 |
タイミング終了時間 |
日付時刻 |
19 |
0 |
そして |
N |
計時終了時刻 |
|
18 |
制限回数 |
整数 |
10 |
0 |
N |
N |
0 |
回数を制限する |
19 |
制限タイプ |
タイニーント |
4 |
0 |
N |
N |
2 |
制限タイプ 1日1回、合計2回 |
20 |
作成時間 |
日付時刻 |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
作成時間 |
21 |
更新時間 |
タイムスタンプ |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間 |
テーブル course_check_in (コースのチェックイン)
シリアルナンバー |
名前 |
データの種類 |
長さ |
小数位 |
Null値を許可する |
主キー |
デフォルト値 |
説明する |
1 |
course_check_in_id |
整数 |
10 |
0 |
N |
そして |
コースチェックインID |
|
2 |
登録番号 |
可変長文字 |
64 |
0 |
そして |
N |
サインイン番号 |
|
3 |
コースID |
可変長文字 |
64 |
0 |
そして |
N |
コース番号 |
|
4 |
コース名 |
可変長文字 |
64 |
0 |
そして |
N |
コースタイトル |
|
5 |
コース分類 |
可変長文字 |
64 |
0 |
そして |
N |
コースの種類 |
|
6 |
教師_ユーザー |
整数 |
10 |
0 |
そして |
N |
0 |
教師ユーザー |
7 |
先生の名前 |
可変長文字 |
64 |
0 |
そして |
N |
先生の名前 |
|
8 |
クラス名 |
可変長文字 |
64 |
0 |
そして |
N |
クラス名 |
|
9 |
クラスの日付 |
日付 |
10 |
0 |
そして |
N |
授業日 |
|
10 |
学生ユーザー |
整数 |
10 |
0 |
そして |
N |
0 |
学生ユーザー |
11 |
学生証 |
可変長文字 |
64 |
0 |
そして |
N |
学籍番号 |
|
12 |
学生の名前 |
可変長文字 |
64 |
0 |
そして |
N |
学生の名前 |
|
13 |
学生の写真 |
可変長文字 |
255 |
0 |
そして |
N |
学生の写真 |
|
14 |
検査状態 |
可変長文字 |
16 |
0 |
N |
N |
未レビュー |
承認状況 |
15 |
検査_返信 |
可変長文字 |
16 |
0 |
そして |
N |
モデレート返信 |
|
16 |
推薦する |
整数 |
10 |
0 |
N |
N |
0 |
インテリジェントな推奨事項 |
17 |
ユーザーID |
整数 |
10 |
0 |
N |
N |
0 |
ユーザーID |
18 |
作成時間 |
日付時刻 |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
作成時間 |
19 |
更新時間 |
タイムスタンプ |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間 |
テーブル course_check_in_confirmation (コースチェックイン(確認))
シリアルナンバー |
名前 |
データの種類 |
長さ |
小数位 |
Null値を許可する |
主キー |
デフォルト値 |
説明する |
1 |
course_check_in_confirmation_id |
整数 |
10 |
0 |
N |
そして |
コースサインイン(確認)ID |
|
2 |
登録番号 |
可変長文字 |
64 |
0 |
N |
N |
サインイン番号 |
|
3 |
コースID |
可変長文字 |
64 |
0 |
そして |
N |
コース番号 |
|
4 |
コース名 |
可変長文字 |
64 |
0 |
そして |
N |
コースタイトル |
|
5 |
コース分類 |
可変長文字 |
64 |
0 |
そして |
N |
コースの種類 |
|
6 |
教師_ユーザー |
整数 |
10 |
0 |
そして |
N |
0 |
教師ユーザー |
7 |
先生の名前 |
可変長文字 |
64 |
0 |
そして |
N |
先生の名前 |
|
8 |
クラス名 |
可変長文字 |
64 |
0 |
そして |
N |
クラス名 |
|
9 |
クラスの日付 |
日付 |
10 |
0 |
そして |
N |
授業日 |
|
10 |
学生ユーザー |
整数 |
10 |
0 |
そして |
N |
0 |
学生ユーザー |
11 |
学生証 |
可変長文字 |
64 |
0 |
そして |
N |
学籍番号 |
|
12 |
学生の名前 |
可変長文字 |
64 |
0 |
そして |
N |
学生の名前 |
|
13 |
学生の写真 |
可変長文字 |
255 |
0 |
そして |
N |
学生の写真 |
|
14 |
確認済み_number_of_people |
可変長文字 |
64 |
0 |
N |
N |
人数を確認する |
|
15 |
推薦する |
整数 |
10 |
0 |
N |
N |
0 |
インテリジェントな推奨事項 |
16 |
作成時間 |
日付時刻 |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
作成時間 |
17 |
更新時間 |
タイムスタンプ |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間 |
テーブル course_classification (コース分類)
シリアルナンバー |
名前 |
データの種類 |
長さ |
小数位 |
Null値を許可する |
主キー |
デフォルト値 |
説明する |
1 |
コース分類ID |
整数 |
10 |
0 |
N |
そして |
コース分類ID |
|
2 |
コース分類 |
可変長文字 |
64 |
0 |
そして |
N |
コースの種類 |
|
3 |
推薦する |
整数 |
10 |
0 |
N |
N |
0 |
インテリジェントな推奨事項 |
4 |
作成時間 |
日付時刻 |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
作成時間 |
5 |
更新時間 |
タイムスタンプ |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間 |
テーブル course_leave (コース休暇)
シリアルナンバー |
名前 |
データの種類 |
長さ |
小数位 |
Null値を許可する |
主キー |
デフォルト値 |
説明する |
1 |
course_leave_id |
整数 |
10 |
0 |
N |
そして |
コース休暇ID |
|
2 |
休暇番号 |
可変長文字 |
64 |
0 |
そして |
N |
番号を残す |
|
3 |
コースID |
可変長文字 |
64 |
0 |
そして |
N |
コース番号 |
|
4 |
コース名 |
可変長文字 |
64 |
0 |
そして |
N |
コースタイトル |
|
5 |
コース分類 |
可変長文字 |
64 |
0 |
そして |
N |
コースの種類 |
|
6 |
教師_ユーザー |
整数 |
10 |
0 |
そして |
N |
0 |
教師ユーザー |
7 |
先生の名前 |
可変長文字 |
64 |
0 |
そして |
N |
先生の名前 |
|
8 |
クラス名 |
可変長文字 |
64 |
0 |
そして |
N |
クラス名 |
|
9 |
クラスの日付 |
日付 |
10 |
0 |
そして |
N |
授業日 |
|
10 |
学生ユーザー |
整数 |
10 |
0 |
そして |
N |
0 |
学生ユーザー |
11 |
学生証 |
可変長文字 |
64 |
0 |
そして |
N |
学籍番号 |
|
12 |
学生の名前 |
可変長文字 |
64 |
0 |
そして |
N |
学生の名前 |
|
13 |
学生の写真 |
可変長文字 |
255 |
0 |
そして |
N |
学生の写真 |
|
14 |
添付ファイルを残す |
可変長文字 |
255 |
0 |
そして |
N |
添付ファイルを残す |
|
15 |
コンテンツを残す |
文章 |
65535 |
0 |
そして |
N |
コンテンツを残す |
|
16 |
検査状態 |
可変長文字 |
16 |
0 |
N |
N |
未レビュー |
承認状況 |
17 |
検査_返信 |
可変長文字 |
16 |
0 |
そして |
N |
モデレート返信 |
|
18 |
推薦する |
整数 |
10 |
0 |
N |
N |
0 |
インテリジェントな推奨事項 |
19 |
ユーザーID |
整数 |
10 |
0 |
N |
N |
0 |
ユーザーID |
20 |
作成時間 |
日付時刻 |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
作成時間 |
21 |
更新時間 |
タイムスタンプ |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間 |
テーブル course_leave_confirmation (コース休暇(確認))
シリアルナンバー |
名前 |
データの種類 |
長さ |
小数位 |
Null値を許可する |
主キー |
デフォルト値 |
説明する |
1 |
course_leave_confirmation_id |
整数 |
10 |
0 |
N |
そして |
休学(確認)ID |
|
2 |
休暇番号 |
可変長文字 |
64 |
0 |
N |
N |
番号を残す |
|
3 |
コースID |
可変長文字 |
64 |
0 |
そして |
N |
コース番号 |
|
4 |
コース名 |
可変長文字 |
64 |
0 |
そして |
N |
コースタイトル |
|
5 |
コース分類 |
可変長文字 |
64 |
0 |
そして |
N |
コースの種類 |
|
6 |
教師_ユーザー |
整数 |
10 |
0 |
そして |
N |
0 |
教師ユーザー |
7 |
先生の名前 |
可変長文字 |
64 |
0 |
そして |
N |
先生の名前 |
|
8 |
クラス名 |
可変長文字 |
64 |
0 |
そして |
N |
クラス名 |
|
9 |
クラスの日付 |
日付 |
10 |
0 |
そして |
N |
授業日 |
|
10 |
学生ユーザー |
整数 |
10 |
0 |
そして |
N |
0 |
学生ユーザー |
11 |
学生証 |
可変長文字 |
64 |
0 |
そして |
N |
学籍番号 |
|
12 |
学生の名前 |
可変長文字 |
64 |
0 |
そして |
N |
学生の名前 |
|
13 |
学生の写真 |
可変長文字 |
255 |
0 |
そして |
N |
学生の写真 |
|
14 |
添付ファイルを残す |
可変長文字 |
255 |
0 |
そして |
N |
添付ファイルを残す |
|
15 |
コンテンツを残す |
文章 |
65535 |
0 |
そして |
N |
コンテンツを残す |
|
16 |
休暇を取っている人数_of_people |
可変長文字 |
64 |
0 |
N |
N |
休暇申請者数 |
|
17 |
推薦する |
整数 |
10 |
0 |
N |
N |
0 |
インテリジェントな推奨事項 |
18 |
作成時間 |
日付時刻 |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
作成時間 |
19 |
更新時間 |
タイムスタンプ |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間 |
テーブル Student_users (学生ユーザー)
シリアルナンバー |
名前 |
データの種類 |
長さ |
小数位 |
Null値を許可する |
主キー |
デフォルト値 |
説明する |
1 |
学生ユーザーID |
整数 |
10 |
0 |
N |
そして |
学生ユーザーID |
|
2 |
学生証 |
可変長文字 |
64 |
0 |
N |
N |
学籍番号 |
|
3 |
学生の名前 |
可変長文字 |
64 |
0 |
そして |
N |
学生の名前 |
|
4 |
学生の写真 |
可変長文字 |
255 |
0 |
そして |
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 |
更新時間 |
テーブル Teacher_users (教師ユーザー)
シリアルナンバー |
名前 |
データの種類 |
長さ |
小数位 |
Null値を許可する |
主キー |
デフォルト値 |
説明する |
1 |
Teacher_users_id |
整数 |
10 |
0 |
N |
そして |
教師用ユーザーID |
|
2 |
教師ID |
可変長文字 |
64 |
0 |
N |
N |
教師ID番号 |
|
3 |
先生の名前 |
可変長文字 |
64 |
0 |
そして |
N |
先生の名前 |
|
4 |
教師_性別 |
可変長文字 |
64 |
0 |
そして |
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 |
更新時間 |
3.4 この章の概要
学生出席管理システム全体の需要分析では、システム全体のアーキテクチャと機能モジュールの設計が主に行われ、E-Rモデルとデータベースロジックシステム設計を確立することでデータベースシステム設計が完了しました。
4 学生の出欠管理システムの詳細設計と導入
学生出席管理システムの詳細な設計と実装は、主に学生出席管理システムの以前の需要分析と学生出席管理システムの全体設計に基づいて、ページの設計とビジネス ロジックの実装を行います。この記事では主に、学生出席管理システムのインターフェース実装とビジネスロジック実装の2つに分けて紹介します。
4.1ユーザー関数モジュール
4.1.1 前台首页界面
学生出席管理システムに入ると、上中下のレイアウトでシステムが表示され、まず目に入るのがシステムのナビゲーションバーで、その下にカルーセル、その下にアナウンスが表示されます。インターフェイスは図 4-1 に示すように表示されます。
図 4-1 フロントページのインターフェース図
4.1.2 ユーザー登録インターフェイス
学生出欠管理システムの利用者は、右上の「登録」ボタンをクリックすると、アカウント番号+パスワード+確認用パスワード+ニックネーム+メールアドレス+携帯電話番号などを入力し、ログインすることができます。 「登録」ボタンをクリックすると、まず入力されたデータに空のものがないか確認され、次にパスワードと確認用パスワードが同じかどうかが再度確認され、最後に入力されたアカウント名とデータベースに登録されているアカウント名が一致しているかどうかが確認されます。テーブルは重複しています。両方の検証が正しい場合にのみ、ユーザー登録は成功します。ユーザー登録インターフェイスを以下の図 4-2 に示します。
図 4-2 登録インターフェース図
登録ロジックのコードは次のとおりです。
/**
* 登録する
* @param ユーザー
* @戻る
*/
@PostMapping("登録")
パブリック マップ<文字列、オブジェクト> SignUp(@RequestBody ユーザー ユーザー) {
//ユーザーのクエリ
マップ<文字列, 文字列>クエリ = 新しい HashMap<>();
query.put("ユーザー名",user.getUsername());
リスト list = service.select(query, new HashMap<>()).getResultList();
if (list.size()>0){
return error(30000, "ユーザーはすでに存在します");
}
user.setUserId(null);
user.setPassword(service.encryption(user.getPassword()));
サービス.保存(ユーザー);
成功を返します(1);
}
/**
* ユーザー ID: [0,8388607] ユーザーはその他のユーザー関連データを取得します
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(名前 = "ユーザー ID")
プライベート整数のユーザー ID。
/**
* * アカウントのステータス: [0,10] (1 利用可能 | 2 異常 | 3 凍結 | 4 キャンセル)
*/
@ベーシック
@Column(名前 = "状態")
プライベート整数状態。
/**
* * ユーザー グループ: [0,32767] はユーザー ID と権限を決定します
*/
@ベーシック
@Column(名前 = "ユーザーグループ")
プライベート文字列ユーザーグループ;
/**
* 最終ログイン時間:
*/
@ベーシック
@Column(名前 = "ログイン時間")
プライベートタイムスタンプloginTime;
/**
* 携帯電話番号: [0,11] ユーザーの携帯電話番号。パスワードの取得またはログインに使用されます。
*/
@ベーシック
@Column(名前 = "電話")
プライベート糸電話。
/**
* * 携帯電話認証: [0,1] (0 は未認証 | 1 は審査中 | 2 は認証済み)
*/
@ベーシック
@Column(name = "phone_state")
private Integer phoneState;
/**
* 用户名:[0,16]用户登录时所用的账户名称
*/
@Basic
@Column(name = "username")
private String username;
/**
* 昵称:[0,16]
*/
@Basic
@Column(name = "nickname")
private String nickname;
/**
* 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成
*/
@Basic
@Column(name = "password")
private String password;
/**
* 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时
*/
@Basic
@Column(name = "email")
private String email;
/**
* 邮箱认证:[0,1](0未认证|1审核中|2已认证)
*/
@Basic
@Column(name = "email_state")
private Integer emailState;
/**
* 头像地址:[0,255]
*/
@Basic
@Column(name = "avatar")
private String avatar;
/**
* 创建时间:
*/
@Basic
@Column(name = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Timestamp createTime;
@Basic
@Transient
private String code;
}
4.1.3 用户登录界面
学生考勤管理系统中的前台上注册后的用户是可以通过自己的账户名和密码进行登录的,当用户输入完整的自己的账户名和密码信息并点击“登录”按钮后,将会首先验证输入的有没有空数据,再次验证输入的账户名+密码和数据库中当前保存的用户信息是否一致,只有在一致后将会登录成功并自动跳转到学生考勤管理系统的首页中;否则将会提示相应错误信息,用户登录界面如下图4-3所示。
图4-3用户登录界面图
登录的逻辑代码如下所示。
/**
* 登录
* @param data
* @param httpServletRequest
* @return
*/
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info("[执行登录接口]");
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
List resultList = null;
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.select(map, new HashMap<>()).getResultList();
}else{
return error(30000, "账号或密码不能为空");
}
if (resultList == null || password == null) {
return error(30000, "账号或密码不能为空");
}
//判断是否有这个用户
if (resultList.size()<=0){
return error(30000,"用户不存在");
}
User byUsername = (User) resultList.get(0);
Map<String, String> groupMap = new HashMap<>();
groupMap.put("name",byUsername.getUserGroup());
List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();
String res = String.valueOf(service.runCountSql(sql).getSingleResult());
if (res==null){
return error(30000,"用户不存在");
}
if (!res.equals("已通过")){
return error(30000,"该用户审核未通过");
}
}
//查询用户状态
if (byUsername.getState()!=1){
return error(30000,"用户非可用状态,不能登录");
}
String md5password = service.encryption(password);
if (byUsername.getPassword().equals(md5password)) {
// 存储Token到数据库
AccessToken accessToken = new AccessToken();
accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
accessToken.setUser_id(byUsername.getUserId());
tokenService.save(accessToken);
// 返回用户信息
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
user.put("token", accessToken.getToken());
JSONObject ret = new JSONObject();
ret.put("obj",user);
return success(ret);
} else {
return error(30000, "账号或密码不正确");
}
}
4.1.4我的账户界面
当用户点击右上角“我的”这个按钮,会出现子菜单,点击“我的账户”可以对个人的资料、登录系统的密码以及自己收藏的信息进行设置管理,我的账户界面如下图4-4所示。
图4-4 我的账户界面图
4.1.5校园新闻界面
当访客点击学生考勤管理系统中导航栏上的“校园新闻”后将会进入到该“校园新闻”列表的界面,然后选择想要看的校园新闻,点击进入到详细界面,同时可以进行点赞、收藏、评论操作,校园新闻界面如下图4-5所示。
图4-5校园新闻界面图
4.1.6课程中心界面
当用户点击“课程中心”这一菜单按钮,会显示管理员在后台发布的所有的课程中心,支持通过关键词对课程中心进行搜索,选择需要的课程中心点击可以进入到课程中心详细的介绍界面,在详细界面可以查看到课程中心的 课程名称、课程分类、教师用户、教师姓名、班级名称、上课日期、班级总人数、签到人数、请假人数、出勤率等信息,同时可以进行课程签到、课程请假、评论操作,课程中心界面如下图4-6所示。
图4-6 课程中心界面图
4.1.7课程签到界面
当用户在课程中心详情界面想要进行课程签到,点击下方的“课程签到”按钮,就会跳转到课程签到信息填写界面,根据界面提示输入课程签到信息,点击“提交”按钮,课程签到就完成了,课程签到界面如下图4-7所示。
图4-7课程签到界面图
4.1.8课程请假界面
当用户在课程中心详情界面想要进行课程请假,点击下方的“课程请假”按钮,就会跳转到课程请假信息填写界面,根据界面提示输入课程请假信息,点击“提交”按钮,课程请假就完成了,课程请假界面如下图4-8所示。
图4-8课程请假界面图
4.2管理人员功能模块
管理员点击“学校公告管理”菜单可以查看到系统中的所有学校公告信息,对已经存在的学校公告,管理员可以修改,也可以添加新的学校公告或者删除学校公告。界面如下图4-9所示。
图4-9学校公告管理界面图
4.2.2 资源管理界面
管理员点击“资源管理”菜单能够对其下子菜单新闻列表和新闻的分类进行增删改查。界面如下图4-10所示。
图4-10资源管理界面图
资源管理逻辑代码如下:
@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());
}
4.2.3系统用户管理界面
管理员点击“系统用户”菜单可以对系统中存在的用户进行管理,包含了管理员用户、教师用户和学生用户。界面如下图4-11所示。
图4-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();
}
管理员点击“课程中心”会显示出所有的课程中心信息,支持输入课程名称或者课程编号对课程中心信息进行查询,如果想要添加新的课程中心信息,点击“添加”按钮,输入课程名称、课程分类、教师用户、教师姓名、班级名称、上课日期、班级总人数、签到人数、请假人数、出勤率等信息,点击“提交”按钮就可以添加了,同时可以选择某一条课程中心信息,点击“删除”进行删除,也可以对用户提交的课程中心评论的信息进行管控。界面如下图4-12所示。
图4-11课程中心管理界面图
课程中心管理逻辑代码如下:
@RequestMapping(value = {"/avg_group", "/avg"})
public Map<String, Object> avg(HttpServletRequest request) {
Query count = service.avg(service.readQuery(request), service.readConfig(request));
return success(count.getResultList());
}
4.2.5课程分类管理界面
管理员点击“课程分类”会显示出所有的课程分类信息,支持通过课程分类对课程分类信息进行查询,如果想要添加新的课程分类信息,点击“添加”按钮,输入相关信息,点击“提交”按钮就可以添加了,同时可以选择某一条课程分类信息,点击“删除”进行删除。界面如下图4-12所示。
图4-12课程分类管理界面图
课程分类管理界面逻辑代码如下:
@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 "";
}
5系统测试
5.1 系统测试用例
系统测试包括:用户登录功能测试、课程展示功能测试、课程添加、课程搜索、密码修改,如表5-1、5-2、5-3、5-4、5-5所示:
表5-1 用户登录功能测试表
用例名称 |
用户登录系统 |
目的 |
测试用户通过正确的用户名和密码可否登录功能 |
前提 |
未登录的情况下 |
测试流程 |
1) 进入登录页面 2) 输入正确的用户名和密码 |
预期结果 |
用户名和密码正确的时候,跳转到登录成功界面,反之则显示错误信息,提示重新输入 |
实际结果 |
实际结果与预期结果一致 |
课程查看功能测试:
表5-2 课程查看功能测试表
用例名称 |
课程查看 |
目的 |
测试课程查看功能 |
前提 |
无 |
测试流程 |
点击课程 |
预期结果 |
可以查看到所有课程 |
实际结果 |
实际结果与预期结果一致 |
管理员添加课程界面测试:
表5-3 管理员添加课程界面测试表
用例名称 |
添加课程测试用例 |
目的 |
测试课程添加功能 |
前提 |
管理员用户正常登录情况下 |
测试流程 |
1)管理员点击课程,然后点击添加后并填写信息。 2)点击进行提交。 |
预期结果 |
提交以后,页面首页会显示新的课程 |
实际结果 |
实际结果与预期结果一致 |
课程搜索功能测试:
表5-4课程搜索功能测试表
用例名称 |
课程搜索测试 |
目的 |
测试课程搜索功能 |
前提 |
无 |
测试流程 |
1)在搜索框填入搜索关键字。 2)点击搜索按钮。 |
预期结果 |
页面显示包含有搜索关键字的课程 |
实际结果 |
实际结果与预期结果一致 |
密码修改搜索功能测试:
表5-5 密码修改功能测试表
用例名称 |
密码修改测试用例 |
目的 |
测试管理员密码修改功能 |
前提 |
管理员用户正常登录情况下 |
测试流程 |
1)管理员密码修改并完成填写。 2)点击进行提交。 |
预期结果 |
使用新的密码可以登录 |
实际结果 |
实际结果与预期结果一致 |
通过编写学生考勤管理系统的测试用例,已经检测完毕用户登录模块、课程展示模块、课程添加模块、课程搜索模块、密码修改模块,通过这五大模块为学生考勤管理系统的后期推广运营提供了强力的技术支撑。
结论
至此,学生考勤管理系统已经结束,在开发前做了许多的准备,在本系统的设计和开发过程中阅览和学习了许多文献资料,从中我也收获了很多宝贵的方法和设计思路,对系统的开发也起到了很重要的作用,系统的开发技术选用的都是自己比较熟悉的,比如Web、Java技术、MYSQL,这些技术都是在以前的学习中学到了,其中许多的设计思路和方法都是在以前不断地学习中摸索出来的经验,其实对于我们来说工作量还是比较大的,但是正是由于之前的积累与准备,才能顺利的完成这个项目,由此看来,积累经验跟做好准备是十分重要的事情。
当然在该系统的设计与实现的过程中也离不开老师以及同学们的帮助,正是因为他们的指导与帮助,我才能够成功的在预期内完成了这个系统。同时在这个过程当中我也收获了很多东西,此系统也有需要改进的地方,但是由于专业知识的浅薄,并不能做到十分完美,希望以后有机会可以让其真正的投入到使用之中。
[1]付恩狄,姚明亮,梁宇柔,彭伟军.基于JAVA技术的设备绝缘状态自动化监控方法[J].电气自动化,2023,45(02):36-38+41.
[2]刘丹青,李超,王青海.基于Java技术的藏汉双语学前教育云平台设计与实现[J].信息技术,2023,47(02):17-23.DOI:10.13274/j.cnki.hdzj.2023.02.004.
[3]苏佳旭,白燕,温晓东.基于Web前端与MySQL数据库的自然灾害应急信息共享平台设计与实现[J].电脑知识与技术,2023,19(05):74-77.DOI:10.14004/j.cnki.ckt.2023.0274.
[4]佟羽齐,刘德华,张栎柯,李剑波,张俊杰.基于SpringBoot框架的钻前管理系统的设计与实现[J].信息与电脑(理论版),2023,35(02):111-113.
[5] Zhang Lijing、Zhang Wenchuan. 比較分析手法に基づく高等専門学校向けの「MySQL データベース」コース設計 – 蘭州石油化学職業技術大学を例に [J]. Modern Information Technology、2022、6(21): 188-191.DOI :10.19850/j.cnki.2096-4706.2022.21.046。
[6] Yang Yifan. MySQL データベースを提供するオンライン監視システムの設計 [J]. Automation Technology and Application, 2022, 41(10):179-182.DOI:10.20033/j.1003-7241.(2022)10-0179 -04.
[7] Hao Jiajing. WebGIS に基づく学生出席管理システムの設計と実装 [J]. Shanxi Electronic Technology, 2022(05):59-61.
[8]シュン・ホンメイ、ゾウ・ボジュン、ドゥアン・チェンユー。モノのインターネット技術に基づく学生出席管理システムの設計[J]。モバイル情報システム、2022、2022。
[9] Wang Manwei、Yang Di、Li Yan、および Song Jie. SpringBoot フレームワークに基づくスマート医療相談システムの設計と実装 [J]. Chinese Medical Equipment, 2022, 19(03): 133-136.
[10] Tao Qingsheng, Qiao Qi. 分解・組み立てが簡単な学生出席管理システム [P]. 江蘇省: CN214744831U, 2021-11-16.
[11] Huang Simian. ACCESS および VBA に基づく学生出席管理システムの開発と実践 [J]. 河北ソフトウェア職業技術学院ジャーナル、2021、23(03):5-9.DOI:10.13314/j.cnki .jhbsi .2021.03.003。
[12] Zhou Huan、Jiao Tao. アクティブ QR コード + LBS 技術に基づく学生出席管理システムの応用研究 [J]. Wireless Internet Technology, 2021, 18(10): 101-104.
[13] Zhou Zhendong. 中等専門学校の学生向けインテリジェントな出席管理システムの実践と考察 [J]. 試験問題と研究、2021(12):137-138.
[14]。主成分分析法を用いた学生出席管理システム[J]。革新的技術と探求工学の国際ジャーナル、2020、9(4S2)。
[15]M.スリラサ、R.ヘマラサ。主成分分析法を用いた学生出席管理システム[J]。革新的技術と探求工学の国際ジャーナル (IJITEE)、2020、9(4s2)。
[16] Feng Tao、Li Peng、Zhang Jinfang、Sun Xiaolei、Li Yajuan、大学生の出席管理システム開発における主要技術の研究 [J]、河北省水利電力大学ジャーナル、2019(04): 32-39.DOI:10.16046/j .cnki.issn2096-5680.2019.04.005。
[17] Zhou Kehui、Luo Wei、Chen Taifeng. 大学生出席管理システムの開発状況と需要分析に関する研究 [J]. Electronic Testing, 2019(22):53-55.DOI:10.16520/j.cnki. 1000-8519.2019.22.022 。
[18] Pang Shuanglong. クラウド コンピューティングに基づく学生出席管理システムの設計と実装 [D]. 中国電子科学技術大学、2018 年。
ありがとう
この記事を完成させることができたのは、大好きな先生のご協力があったからこそであり、直接的な問題点のご指摘はなかったものの、言葉で指導し、適切なアドバイスをいただき、より早く成長することができましたことを心より感謝申し上げます。 。
まず、作品を完成させた時に大きな肯定をしてくださった講師のおかげで、大きな自信となり、自信を持ってこの作品を完成させることができました。制作過程でもたくさんのアドバイスをいただき、遠回りすることがなくなりました。彼が私に具体的な方向性を示し、主幹を見つけた後、私は主幹の枝を徐々にたどり、それぞれのコンテキストを分析しました。そして、私のシステムが完成した当初、彼は私のシステムの欠点や欠陥を私に指摘し、私自身の欠点を痛感しました。
次に、参考資料を提供してくださったクラスメートの方々にも、先人の経験を教えていただき、巨人の肩の上に立つ原点を与えていただき、大変助けになりました。
最後に、両親に感謝します。両親は私を最大限にサポートし、私の仕事を全面的に肯定してくれました。それが私に大きな励みとなり、私の成功の基礎を築きました。彼らの助けがなければ、私は何もできませんでした」 . 今のような成功はなかっただろう。ご協力いただきありがとうございます。
プロジェクトのソースコードを無料で受け取るには、フォローしていいね + プライベートメッセージを送信してください