Skip to content

高専4年の授業で寮の点呼システムを作りました。高専5年のハッカソンではこのシステムに不正対策機能を加えたシステムを作りましたが、ベースアイデアはこのシステムを元としています。

Notifications You must be signed in to change notification settings

jumpeace/rollcall_system

Repository files navigation

寮の点呼システム

実行手順

  1. データベースを作成(編集)します。この際、長野高専に存在する学科、テストデータの号館、階、部屋番号がいくつか作成されます。
    ./reload_db.sh
    
  2. 管理者のスタッフを作成します。<email>はメールアドレス、<user_name>は氏名、<password>はパスワードを記入します。
    bundle exec ruby create_admin.rb <email> <user_name> <password>
    
  3. 点呼システムを起動します。
    bundle exec ruby main.rb
    

システムの機能一覧

学生が点呼を行い、スタッフ(教員など)が点呼の確認を行います。点呼は指定された時間だけできます。

また、スタッフは「事前に登録された顔画像」と「点呼時に撮影された画像」を比較しながら、点呼の確認を行うことができます。

さらに、管理者は学生やスタッフ、当直に関する作成や編集などの操作を、管理者専用のページから行うことができます。

学生のログインなどの機能

GET student/login/form

学生のログインフォームを表示します。入力項目は下記の通りです。

項目 条件
学籍番号 学籍番号とパスワードがペアで同じ学生が存在
パスワード 学籍番号とパスワードがペアで同じ学生が存在

POST student/login/process

学生のログイン処理を行います。処理の手順は下記の通りです。

  1. 上記の学生のログインフォームの条件に従ってバリデーションを行う
  2. 1でバリデーションが失敗した場合は、エラー内容をセッションに格納し、学生のログインフォーム(student/login/form)にリダイレクトする
  3. 1でバリデーションが成功した場合は、ユーザーIDとユーザートークンをセッションに格納する
  4. 学生のマイページ(student/mypage) にリダイレクトする

GET student/mypage

学生のマイページを表示します。マイページでは下記の情報を表示します。

  • 点呼の状況に関するお知らせ
  • 点呼実施ページ(rollcall/form)へのリンク

スタッフのログインなどの機能

GET staff/login/form

スタッフのログインフォームを表示します。入力項目は下記の通りです。

項目 条件
メアド メアドとパスワードがペアで同じスタッフが存在
パスワード メアドとパスワードがペアで同じスタッフが存在

POST staff/login/process

スタッフのログイン処理を行います。処理の手順は下記の通りです。

  1. 上記のスタッフのログインフォームの条件に従ってバリデーションを行う
  2. 1でバリデーションが失敗した場合は、エラー内容をセッションに格納し、スタッフのログインフォーム(staff/login/form)にリダイレクトする
  3. 1でバリデーションが成功した場合は、ユーザーIDとユーザートークンをセッションに格納する
  4. スタッフのマイページ(staff/mypage) にリダイレクトする

POST staff/mypage

スタッフのマイページを表示します。マイページでは下記の情報を表示します。

  • 今後の点呼の当直の日程
  • 点呼実施状況一覧ページ(rollcall/list)へのリンク

学生とスタッフで共通にある機能

POST user/logout/process

学生と教員のログアウト処理を行います。ログアウト後は学生のログインフォーム(student/login/form)にリダイレクトします。

点呼の機能

GET rollcall/form

学生の点呼実施ページを表示します。このページでは下記の手順で点呼を実施します。

  1. カメラが起動しており、「シャッター」ボタンをクリックして点呼用の画像を撮る
  2. 撮影したら、「点呼する」ボタンをクリックすることで点呼を提出できる

POST rollcall/process

学生の点呼処理を行います。処理の手順は下記の通りです。

  1. 点呼が可能な時間でない場合は、rollcall/unable にリダイレクトする
  2. 点呼がすでに完了している場合は、rollcall/done にリダイレクトする
  3. 点呼で撮影された画像がない場合は、点呼フォーム(rollcall/form)にリダイレクトする
  4. 点呼を実施したことをデータベースの点呼テーブルのうち、点呼日時と学生に対応するレコードに記録する。
  5. 点呼待機画面(rollcall/done)にリダイレクトする。

GET rollcall/unable

点呼が不可能な時間の場合にリダイレクトされる。

GET rollcall/done

点呼待機中または点呼が完了した場合にリダイレクトされる。状況に応じて下記のようなメッセージが表示される。

  • 点呼待機中 ... 点呼確認待ちです
  • 点呼完了時 ... 点呼が完了しました

GET rollcall/list

学生の点呼の実施状況の一覧を閲覧できます。スタッフのみアクセス可能です。このページでは下記の操作ができます。

  • 学生の点呼が正しく行われていたらチェックをつける
  • 学生の点呼が実施されていなくても、強制的にチェックをつける
  • 学生の点呼が正しく行われていなかったら、点呼の完了を取り消す
  • 点呼日時、住んでいる号館から学生を検索する

また学生の検索機能では、下記のAjaxによる入力補完を利用している。

  • 号館の入力から、号館の階の候補を出力
  • 号館と階の入力から、部屋番号の候補を出力

※ 号館は建物の識別番号、階は号館の何階かを表している ※ 部屋番号の1桁目は号館、2桁目は階を表している

POST rollcall/check

学生の点呼が正しく行われていたらチェックをつける処理をします。スタッフのみ処理可能です。また、チェックをつける際はチェックをつけたスタッフを記録します。

POST rollcall/forcedcheck

強制的にチェックをつける処理をします。スタッフのみ処理可能です。また、チェックをつける際はチェックをつけたスタッフを記録します。

POST rollcall/startover

学生の点呼が正しく行われていなかったら、点呼の完了を取り消す処理をします。スタッフのみ処理可能です。

当日の点呼データの自動追加

当日の点呼開始時間になったら、データベースの点呼テーブルに、寮に存在する学生に関する点呼レコードを自動で追加します。

学生の管理機能

この機能は管理者のみ使用できます。また<student_id>は任意の学籍番号が入り、学籍番号と対応する学生に関する処理が行われます。

GET admin/student

学生一覧を閲覧できます。このページでは下記の操作ができます。

  • 学生の氏名、学年、学科、部屋番号、学生の画像を表示
  • 学生の作成フォーム(admin/student/create/form)にアクセス
  • 学生の編集フォーム(admin/student/update/<student_id>/form)にアクセス
  • 学生のパスワード編集フォーム(admin/student/passwd/update/<student_id>/form)にアクセス
  • 学生を削除(複数削除も可能)

POST admin/student/delete/process

送られた学籍番号を照らし合わせて、データベースの学生テーブルから学籍番号と対応する学生を削除します。削除後は学生一覧ページ(admin/student)にリダイレクトします。

GET admin/student/create/form

学生の作成フォームを表示します。入力項目は下記の通りです。

項目 条件
学籍番号 数字5桁で1桁目は1〜5(長野高専の学籍番号の制約より)
氏名 90文字以下で記号が含まれないこと
学年 数字1桁で1〜5(長野高専の学年の制約より)
学科 長野高専に存在する学科であること
部屋番号 数字4桁で長野高専の寮に存在する部屋番号であること
学生の画像 画像がフォームで送られること
パスワード 20文字以上50文字以下であり、かつ英数字がいずれも含まれ、英字は大文字も小文字も含まれること
確認用のパスワード パスワードと確認用のパスワードが一致すること

また、これらの情報を入力している最中に条件を満たさない入力である場合は、Ajaxによってエラーがリアルタイムで表示されます。

POST admin/student/create/process

学生の作成処理を行います。処理の手順は下記の通りです。

  1. 上記の学生の作成フォームの条件に従ってバリデーションを行う
  2. 1でバリデーションが失敗した場合は、エラー内容をセッションに格納し、学生の作成フォーム(admin/student/create/form)にリダイレクトする
  3. 1のバリデーションが成功した場合は、データベースの学生テーブルに新しい学生を追加する
  4. 学生一覧ページ(admin/student)にリダイレクトする

GET admin/student/update/<student_id>/form

学生の情報編集フォームを表示します。入力項目は下記の通りです。

項目 条件
学籍番号 数字5桁で1桁目は1〜5(長野高専の学籍番号の制約より)であり、他の学生と重複しないこと
氏名 90文字以下で記号が含まれないこと
学年 数字1桁で1〜5(長野高専の学年の制約より)
学科 長野高専に存在する学科であること
部屋番号 数字4桁で長野高専の寮に存在する部屋番号であること

また、これらの情報を入力している最中に条件を満たさない入力である場合は、Ajaxによってエラーがリアルタイムで表示されます。

POST admin/student/update/<student_id>/process

学生の情報編集処理を行います。処理の手順は下記の通りです。

  1. 上記の学生の情報編集フォームの条件に従ってバリデーションを行う
  2. 1でバリデーションが失敗した場合は、エラー内容をセッションに格納し、学生の情報編集フォーム(admin/student/update/<student_id>/form)にリダイレクトする
  3. 1のバリデーションが成功した場合は、データベースの学生テーブルの対応する学生のレコード情報を変更する
  4. 学生一覧ページ(admin/student)にリダイレクトする

GET admin/student/passwd/update/<student_id>/form

学生のパスワード編集フォームを表示します。入力項目は下記の通りです。

項目 条件
パスワード 20文字以上50文字以下であり、かつ英数字がいずれも含まれ、英字は大文字も小文字も含まれること
確認用のパスワード パスワードと確認用のパスワードが一致すること

また、これらの情報を入力している最中に条件を満たさない入力である場合は、Ajaxによってエラーがリアルタイムで表示されます。

POST admin/student/passwd/update/<student_id>/process

学生のパスワード編集処理を行います。処理の手順は下記の通りです。

  1. 上記の学生のパスワード編集フォームの条件に従ってバリデーションを行う
  2. 1でバリデーションが失敗した場合は、エラー内容をセッションに格納し、学生のパスワード編集フォーム(admin/student/passwd/update/<student_id>/form)にリダイレクトする
  3. 1のバリデーションが成功した場合は、データベースの学生テーブルの対応する学生のパスワードを変更する
  4. 学生一覧ページ(admin/student)にリダイレクトする

スタッフの管理機能

この機能は管理者のみ使用できます。また<staff_id>は任意のスタッフIDが入り、スタッフIDと対応するスタッフに関する処理が行われます。

GET admin/staff

スタッフ一覧を閲覧できます。このページでは下記の操作ができます。

  • スタッフのメールアドレス、氏名を表示
  • スタッフの作成フォーム(admin/staff/normal/create/form)にアクセス
  • スタッフの編集フォーム(admin/staff/update/<staff_id>/form)にアクセス
  • スタッフのパスワード編集フォーム(admin/staff/passwd/update/<staff_id>/form)にアクセス
  • スタッフを削除(複数削除も可能)

POST admin/staff/delete/process

送られたメールアドレスを照らし合わせて、データベースのスタッフテーブルからメールアドレスと対応するスタッフを削除します。削除後はスタッフ一覧ページ(admin/staff)にリダイレクトします。

GET admin/staff/normal/create/form

スタッフの作成フォームを表示します。入力項目は下記の通りです。

項目 条件
メールアドレス 256文字以下でメールアドレスのフォーマットに従っていること
氏名 90文字以下で記号が含まれないこと
パスワード 20文字以上50文字以下であり、かつ英数字がいずれも含まれ、英字は大文字も小文字も含まれること
確認用のパスワード パスワードと確認用のパスワードが一致すること

また、これらの情報を入力している最中に条件を満たさない入力である場合は、Ajaxによってエラーがリアルタイムで表示されます。

POST admin/staff/normal/create/process

スタッフの作成処理を行います。ただし管理者のスタッフは作成できません。処理の手順は下記の通りです。

  1. 上記のスタッフの作成フォームの条件に従ってバリデーションを行う
  2. 1でバリデーションが失敗した場合は、エラー内容をセッションに格納し、スタッフの作成フォーム(admin/staff/normal/create/form)にリダイレクトする
  3. 1のバリデーションが成功した場合は、データベースのスタッフテーブルに新しいスタッフを追加する
  4. スタッフ一覧ページ(admin/staff)にリダイレクトする

GET admin/staff/update/<staff_id>/form

スタッフの情報編集フォームを表示します。入力項目は下記の通りです。

項目 条件
メールアドレス 256文字以下でメールアドレスのフォーマットに従っており、他の学生やスタッフと重複していないこと
氏名 90文字以下で記号が含まれないこと

また、これらの情報を入力している最中に条件を満たさない入力である場合は、Ajaxによってエラーがリアルタイムで表示されます。

POST admin/staff/update/<staff_id>/process

スタッフの情報編集処理を行います。処理の手順は下記の通りです。

  1. 上記のスタッフの情報編集フォームの条件に従ってバリデーションを行う
  2. 1でバリデーションが失敗した場合は、エラー内容をセッションに格納し、スタッフの情報編集フォーム(admin/staff/update/<staff_id>/form)にリダイレクトする
  3. 1のバリデーションが成功した場合は、データベースのスタッフテーブルの対応するスタッフのレコード情報を変更する
  4. スタッフ一覧ページ(admin/staff/)にリダイレクトする

GET admin/staff/passwd/update/<staff_id>/form

スタッフのパスワード編集フォームを表示します。入力項目は下記の通りです。

項目 条件
パスワード 20文字以上50文字以下であり、かつ英数字がいずれも含まれ、英字は大文字も小文字も含まれること
確認用のパスワード パスワードと確認用のパスワードが一致すること

また、これらの情報を入力している最中に条件を満たさない入力である場合は、Ajaxによってエラーがリアルタイムで表示されます。

POST admin/staff/passwd/update/<staff_id>/process

スタッフのパスワード処理を行います。処理の手順は下記の通りです。

  1. 上記のスタッフのパスワード編集フォームの条件に従ってバリデーションを行う
  2. 1でバリデーションが失敗した場合は、エラー内容をセッションに格納し、スタッフの情報編集フォーム(admin/staff/passwd/update/<staff_id>/form)にリダイレクトする
  3. 1のバリデーションが成功した場合は、データベースのスタッフテーブルの対応するスタッフのパスワードを変更する
  4. スタッフ一覧ページ(admin/staff/)にリダイレクトする

当直の管理機能

この機能は管理者のみ使用できます。

GET admin/onduty

当直一覧を閲覧できます。このページでは下記の操作ができます。

  • 年月に対応する当直一覧を表示
  • それぞれの日の当直の氏名とメールアドレスを表示
  • 当直の作成フォーム(admin/onduty/create/form?year=<year>&month=<month>&date=<date>)にアクセス
  • 当直の編集フォーム(admin/onduty/update/form?year=<year>&month=<month>&date=<date>)にアクセス

GET admin/onduty/create/form?year=<year>&month=<month>&date=<date>

当直の作成フォームを表示します。クエリパラメータは以下の通りです。

英語名 説明
year いつの当直を作成するかの「年」の入力
month いつの当直を作成するかの「月」の入力
date いつの当直を作成するかの「日」の入力

また、入力項目は下記の通りです。

項目 条件
スタッフ システムに存在するスタッフであること

また、これらの情報を入力している最中に条件を満たさない入力である場合は、Ajaxによってエラーがリアルタイムで表示されます。

POST admin/onduty/create/process

当直の作成処理を行います。処理の手順は下記の通りです。

  1. 上記の当直の作成フォームの条件に従ってバリデーションを行う
  2. 1でバリデーションが失敗した場合は、エラー内容をセッションに格納し、当直の作成フォーム(admin/onduty/create/form)にリダイレクトする
  3. 1のバリデーションが成功した場合は、データベースの当直テーブルに新しい当直を追加する
  4. 当直一覧ページ(admin/onduty/)にリダイレクトする

GET admin/onduty/update/form

当直の情報編集フォームを表示します。クエリパラメータは以下の通りです。

英語名 説明
year いつの当直を作成するかの「年」の入力
month いつの当直を作成するかの「月」の入力
date いつの当直を作成するかの「日」の入力

また、入力項目は下記の通りです。

項目 条件
スタッフ システムに存在するスタッフであること

また、これらの情報を入力している最中に条件を満たさない入力である場合は、Ajaxによってエラーがリアルタイムで表示されます。

POST admin/onduty/update/process

当直の情報編集処理を行います。処理の手順は下記の通りです。

  1. 上記の当直の情報編集フォームの条件に従ってバリデーションを行う
  2. 1でバリデーションが失敗した場合は、エラー内容をセッションに格納し、当直の情報編集フォーム(admin/onduty/update/form)にリダイレクトする
  3. 1のバリデーションが成功した場合は、データベースの当直テーブルの対応する当直のレコード情報を変更する
  4. 当直一覧ページ(admin/onduty/)にリダイレクトする

About

高専4年の授業で寮の点呼システムを作りました。高専5年のハッカソンではこのシステムに不正対策機能を加えたシステムを作りましたが、ベースアイデアはこのシステムを元としています。

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published