ホームページ >PHPフレームワーク >ThinkPHP >Thinkphp5.1は学生がQRコードをスキャンして座席を選択するという楽しい機能を実現します

Thinkphp5.1は学生がQRコードをスキャンして座席を選択するという楽しい機能を実現します

藏色散人
藏色散人転載
2021-09-24 15:46:532217ブラウズ

序文

この機能の目的は、生徒がコードをスキャンすることです。別機能として座席を選択する 別機能を実装しました 教師はログインせずに生徒の選択した座席を確認できます 教師はログインしてコースをバインドし、このコースの生徒のチェックイン数をカウントすることもできます教師は面倒な登録やログインを行わずにいくつかの機能を実装したり、本製品を使用してコースを作成してバインドし、生徒のサインイン数をカウントすることもできます。これにより、この製品に対する教師のエクスペリエンスが大幅に向上し、ユーザーの総数が効果的に増加します。
この記事では、学生コード スキャン機能の実装について具体的に説明します。その他の詳細については詳しく説明しません。

事前準備

1. まず、各教室の各セクションのテーブル (ここでは classroom_time と呼ばれます) を作成します。これらのデータは、教室のフィールドを追加するときに自動的に生成されます。11 かかります。例として 1 日あたりのセクション数を増やすと、図に示すように、各教室で 11 個の Classroom_time フィールドが生成されます。
Thinkphp5.1は学生がQRコードをスキャンして座席を選択するという楽しい機能を実現します

2. 各座席は、行番号と列番号を保存するフィールドにも保存する必要があり、学生 ID と対応するclassroom_time_id は、どの教室とセクションに属しているかを保存するために使用されます。シート。ここではこれをseattableと呼びますが、最初はデータが0個です。
Thinkphp5.1は学生がQRコードをスキャンして座席を選択するという楽しい機能を実現します

3. 教室時間の座席表を表示する Web ページを作成します。
Thinkphp5.1は学生がQRコードをスキャンして座席を選択するという楽しい機能を実現します

4. 各座席は QR コードに対応する必要があり、URL が渡されます。教室IDと列数、座席表を表示する際には別途QRコードが必要です、ログインせずに生徒の座席選択を直接表示することができます。
Thinkphp5.1は学生がQRコードをスキャンして座席を選択するという楽しい機能を実現します

学生コード スキャン機能は、主に着席テーブルのデータを操作するために使用されます。

学生コードスキャン機能の実装

1. URL からこの座席の基本情報を取得します
渡された URL からこの座席の行番号、classroom_id、および行番号を取得しますQR コードをスキャンして、静的メソッドで Student_id とセクション番号を取得します (ここではセクション番号を time と呼びます)。同時にセクションと教室IDから唯一のclassroom_timeをクエリします。

public function entercourse()
    {   
        $id = $this->request->param('id');
        
        $classroom_id = substr($id,0,4)*1;
        $row = substr($id,4,2)*1;
        $column = substr($id,6,2)*1;
        $time = Term::littleClass();
        if ($time11) {
            return $this->error('上课时间已结束', url('/index/student/page'));
        }
        $student_id = session('studentId');
        $classroom_time = Classroom_time::where('classroom_id',$classroom_id)->where('littleclass',$time)->find();
        $seattable = Seattable::where('student_id',$student_id)->where('classroom_time_id',$classroom_time->id)->find();
        return ;
    }
ここでセクションを取得し、同時に判断します。11番目のセクションを超えている場合は、授業時間が残っていることを意味します終了し、学生ホームページに戻ります。

2. 教室時間 ID と学生 ID を使用して、着席テーブルにこのフィールドがあるかどうかを確認します。ここでは $seattable として定義されています。# があるかどうかを確認する必要があります。 ##$seattableif ステートメントを実行します。

$seattable = Seattable::where('student_id',$student_id)->where('classroom_time_id',$classroom_time->id)->find();

        // 如果这个学生原来签过到
        if($seattable) {
        } else { // 如果这个学生原来没选过座位
        }
        return $this->success('选座成功', url('/index/student/page'));~~~~
これは例です。生徒が教室に入ると、データが存在します。生徒が座席を選択すると、列と列の数が入力されます。他の人が自分の席に着くと、列数をクリアすると、列数がなくなったことを意味します。座席として、ただし教室内にあるため、生徒 ID データが存在し、教師がサインイン番号に 1 を追加するのに役立ちます。コースを縛るとき。
最初に書いたアイデアは、新しいデータを作成し、行数と列数を設定し、学生証をクリアするというものでした。これにより、他の人に自分の地位を奪われてしまいます。再度コードをスキャンしても、コードが正しいかどうか判断できません。 2 回目のスキャンまたは最初のスキャンであるため、生徒のサインインの総数を正確に数えることができません。
student_id の行と列の値を変更するというアイデアを確立することが、この機能を実現するための鍵です。
3. この学生がサインインしている場合は、

状況が 2 つあります。この席は元々占有されている、この席は元々空いています
誰かがいる場合は、まずその人が本人であるかどうかを確認します。したがって、直接プロンプトを表示して学生のホームページに戻ります。そうでない場合は、この席の元の学生に関するデータを取得し、誰かがその席を占有していることを元の人物に通知し、元の人の行データをクリアして、学生の行データを記入します。行番号。
行数と列数を直接入力する人はいません。

$primaryStudent = Seattable::where('row',$row)->where('column',$column)->where('classroom_time_id',$classroom_time->id)->find();

    // 如果这个座位原来有学生
    if ($primaryStudent) {
        // 如果这个学生是他自己
        if ($primaryStudent->student_id == $student_id) {
            return $this->error('您已成功扫码选择此座位,请不要重复扫码', url('/index/student/page'));    
        }

        // 通知他


        // 他行列信息清空
        $primaryStudent->row = 100;
        $primaryStudent->column = 100;
        if (!$primaryStudent->save()) {
            return $this->error('信息保存异常,请重新扫码', url('/index/student/page'));
        }
    }


    // 将新的行列数保存到学生那条数据里
    $seattable->row = $row;
    $seattable->column = $column;
    if (!$seattable->save()) {

        return $this->error('信息保存异常,请重新扫码', url('/index/student/page'));
    }
例: 私 (私の名前は Zhang San) が最初にコードをスキャンしましたが、コードをスキャンした席には誰かが座っていました。

QR コードをスキャンする前に

Thinkphp5.1は学生がQRコードをスキャンして座席を選択するという楽しい機能を実現しますQR コードをスキャンした後

Thinkphp5.1は学生がQRコードをスキャンして座席を選択するという楽しい機能を実現します

後で行と行が並べ替えられるため、クリアされないようにする必要があります。ここでは、行と列が 100,100 (行と列の最大値) にリセットされます。
4. 学生がサインインしていない場合は、まず座席が占有されているかどうかを判断し、席に誰かが座っている場合は、まずその学生に通知し、列番号をクリアします。席テーブルにサインインしていない場合、対応するstudent_idとclassroom_time_idのデータはありません。このとき、新しい$seattableを直接作成し、student_idと行番号と列番号を入力します。 $seattable は 1 (ステータス ステータス 1 はコースにバインドされていることを意味し、ステータス 0 はコースにバインドされていないことを意味します)、サインインの合計数は 1 です。

// 如果这个学生原来没选过座位
            $primaryStudent = Seattable::where('row',$row)->where('column',$column)->where('classroom_time_id',$classroom_time->id)->find();
            // 如果这个座位原来有学生
            if ($primaryStudent) {
                // 通知他


                // 他行列信息清空
                $primaryStudent->row = 100;
                $primaryStudent->column = 100;
                if (!$primaryStudent->save()) {
                    return $this->error('信息保存异常,请重新扫码', url('/index/student/page'));
                }
            }
             
            // 创建一条新数据
            $seattable = new Seattable;
            
            $seattable->classroom_time_id = $classroom_time->id;
            $seattable->row = $row;
            $seattable->column = $column;
            $seattable->student_id = $student_id;
            $seattable->role = 0;
            if (!$seattable->save()) {
                return $this->error('信息保存异常,请重新扫码', url('/index/student/page'));
            } 
            
            // 如果这个classroom_time的状态为1,签到次数加一
            if ($classroom_time->status) {
                $score = Score::where('student_id',$student_id)->where('course_id',$classroom_time->courseinfo->course_id)->find();

                if ($score) {
                    // 如果本学生有本课程的一条数据,签到次数+1
                    $score->arrivals++;
                } else {
                    // 如果没有,新建之
                    $score = new Score;
                    $score->student_id = $student_id;
                    $score->course_id = $classroom_time->courseinfo->course_id;
                    $score->usual_score = 0;
                    $score->exam_score = 0;
                    $score->total_score = 0;
                    $score->arrivals = 0;
                    $score->respond = 0;
                    $score->arrivals++;
                }
                if (!$score->save()) {
                     return $this->error('信息保存异常,请重新扫码', url('/index/student/page'));
                }
            }

大家看看思路就好,完整代码仅供参考

// 学生扫码选座位(新中新)
    public function entercourse()
    {   
        $id = $this->request->param('id');
        
        $classroom_id = substr($id,0,4)*1;
        $row = substr($id,4,2)*1;
        $column = substr($id,6,2)*1;
        $time = Term::littleClass();
        if ($time11) {
            return $this->error('上课时间已结束', url('/index/student/page'));
        }
        $student_id = session('studentId');
        $classroom_time = Classroom_time::where('classroom_id',$classroom_id)->where('littleclass',$time)->find();

        
        $seattable = Seattable::where('student_id',$student_id)->where('classroom_time_id',$classroom_time->id)->find();

        // 如果这个学生原来签过到
        if($seattable) {
            $primaryStudent = Seattable::where('row',$row)->where('column',$column)->where('classroom_time_id',$classroom_time->id)->find();

            // 如果这个座位原来有学生
            if ($primaryStudent) {
                // 如果这个学生是他自己
                if ($primaryStudent->student_id == $student_id) {
                    return $this->error('您已成功扫码选择此座位,请不要重复扫码', url('/index/student/page'));    
                }

                // 通知他


                // 他行列信息清空
                $primaryStudent->row = 100;
                $primaryStudent->column = 100;
                if (!$primaryStudent->save()) {
                    return $this->error('信息保存异常,请重新扫码', url('/index/student/page'));
                }
            }
            

            // 将新的行列数保存到学生那条数据里
            $seattable->row = $row;
            $seattable->column = $column;
            if (!$seattable->save()) {

                return $this->error('信息保存异常,请重新扫码', url('/index/student/page'));
            }

        } else {  // 如果这个学生原来没选过座位
            $primaryStudent = Seattable::where('row',$row)->where('column',$column)->where('classroom_time_id',$classroom_time->id)->find();
            // 如果这个座位原来有学生
            if ($primaryStudent) {
                // 通知他


                // 他行列信息清空
                $primaryStudent->row = 100;
                $primaryStudent->column = 100;
                if (!$primaryStudent->save()) {
                    return $this->error('信息保存异常,请重新扫码', url('/index/student/page'));
                }
            }
             
            // 创建一条新数据
            $seattable = new Seattable;
            
            $seattable->classroom_time_id = $classroom_time->id;
            $seattable->row = $row;
            $seattable->column = $column;
            $seattable->student_id = $student_id;
            $seattable->role = 0;
            if (!$seattable->save()) {
                return $this->error('信息保存异常,请重新扫码', url('/index/student/page'));
            } 
            
            // 如果这个classroom_time的状态为1,签到次数加一
            if ($classroom_time->status) {
                $score = Score::where('student_id',$student_id)->where('course_id',$classroom_time->courseinfo->course_id)->find();

                if ($score) {
                    // 如果本学生有本课程的一条数据,签到次数+1
                    $score->arrivals++;
                } else {
                    // 如果没有,新建之
                    $score = new Score;
                    $score->student_id = $student_id;
                    $score->course_id = $classroom_time->courseinfo->course_id;
                    $score->usual_score = 0;
                    $score->exam_score = 0;
                    $score->total_score = 0;
                    $score->arrivals = 0;
                    $score->respond = 0;
                    $score->arrivals++;
                }
                if (!$score->save()) {
                     return $this->error('信息保存异常,请重新扫码', url('/index/student/page'));
                }
            }
            
        }

        return $this->success('选座成功', url('/index/student/page'));
    }

这个功能还需要每天定时清除数据,包括全部清除seattable表里的数据和classroom_time表里所有status归0,courseinfo变为null。

总结

写功能前确定好思路很重要,不然可能会测出漏洞重新写。

以上がThinkphp5.1は学生がQRコードをスキャンして座席を選択するという楽しい機能を実現しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。