Vorwort
Der Zweck dieser Funktion besteht darin, die Funktion zu implementieren, mit der Schüler den Code scannen können, um Sitzplätze als separate Funktion anzuzeigen Sie können die ausgewählten Plätze der Studierenden ohne Anmeldung nutzen. In diesem Fall kann sich der Lehrer in den gebundenen Kurs einloggen und zählen, wie oft sich Studierende für diesen Kurs angemeldet haben. Lehrer können einige Funktionen ohne langwierige Registrierung und Anmeldung implementieren. Sie können dieses Produkt auch verwenden, um Kurse zu erstellen und diese zu binden, um das Produkt zum Zählen der Anzahl der Schüleranmeldungen zu verwenden. Dadurch wird die Erfahrung der Lehrer mit diesem Produkt erheblich verbessert und die Gesamtzahl der Benutzer effektiv erhöht.
In diesem Artikel geht es speziell um die Implementierung der Funktion zum Scannen von Studentencodes. Weitere Details werden nicht im Detail besprochen.
Vorbereitung
1. Erstellen Sie zunächst eine Tabelle für jeden Abschnitt jedes Klassenzimmers, hier mit dem Namen classroom_time
. Diese Daten sollten automatisch generiert werden, wenn Sie beispielsweise 11 Abschnitte pro Tag hinzufügen. Jedes Klassenzimmer generiert 11 „classroom_time“-Felder, wie in der Abbildung dargestellt. classroom_time
,这些数据应该在增加教室字段时自动生成,以每天11个小节为例,每个教室生成11个classroom_time字段,如图。
2.每个座位应该也要存入一个字段用于保存它的行列数,学生id和所对应的classroom_time_id用于保存它是哪个教室的哪个小节的座位。我们在这里称之为seattable,初始为0条数据。
3.再建立一个网页用于显示一个classroom_time的座位表
4.每个座位应该对应一个二维码,url传值这个教室id,行列数,同时查看座位表应该有一个单独的二维码,不用登录直接显示学生选座情况。
我们学生扫码功能主要是对seattable表数据进行操作。
学生扫码功能实现
1.通过url获取这个座位的基本信息
通过扫码所传入的url,获取这个座位的行列号,classroom_id,也要通过静态方法获取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 ; }
这里获取第几小节的同时判断一下,如果超出十一小节,说明上课时间已结束,返回到学生主页。
2.通过classroom_time的id和学生id在seattable表里找有没有这个字段,在这里定义为$seattable
,我们要通过有无$seattable
2. Jeder Sitzplatz sollte außerdem in einem Feld gespeichert werden, um seine Zeilen- und Spaltennummer zu speichern, und die Studenten-ID und die entsprechende „classroom_time_id“ werden verwendet, um zu speichern, zu welchem Abschnitt des Klassenzimmers er gehört. Wir nennen es hier „Sitztabelle“, was zunächst 0 Dateneinheiten entspricht.3. Erstellen Sie eine weitere Webseite, um einen Sitzplan für die Unterrichtszeit anzuzeigen. Thinkphp5.1 realisiert die unterhaltsame Funktion, dass Schüler QR-Codes scannen, um Sitzplätze auszuwählen"/>
.
4. Jeder Sitzplatz sollte einem QR-Code entsprechen. Die URL übergibt die Klassenraum-ID und die Anzahl der Reihen und Reihen. Gleichzeitig sollte beim Betrachten des Sitzplans ein separater QR-Code vorhanden sein . Studierende können ohne Anmeldung direkt angezeigt werden. Sitzplatzauswahl.
.
Implementierung der Funktion zum Scannen des Studentencodes
1. Erhalten Sie die grundlegenden Informationen zu diesem Sitzplatz über die URL.
Erhalten Sie die Zeilennummer und die Klassenraum-ID dieses Sitzplatzes über die übergebene URL, indem Sie den QR-Code scannen. Außerdem erhalten Sie die Studenten-ID und die Abschnittsnummer Durch die statische Methode wird die Anzahl der Messungen hier als Zeit bezeichnet. Fragen Sie gleichzeitig die einzige Klassenraumzeit über den Abschnitt und die Klassenraum-ID ab.
$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'));~~~~
2. Verwenden Sie die Klassenraum-ID und die Studenten-ID, um herauszufinden, ob dieses Feld in der Seattable-Tabelle vorhanden ist. Es ist hier als $seattable
definiert Seattable. if-Anweisung.
$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')); }
Hier ist ein Beispiel. Wenn ein Schüler den Klassenraum betritt, gibt er bei der Auswahl eines Sitzplatzes die Anzahl der Reihen ein und löscht die Zahl Von Reihen und Reihen ist es gleichbedeutend damit, dass er keinen Platz einnimmt, aber dennoch im Klassenzimmer Studenten-ID-Daten vorhanden sind, die für Lehrer hilfreich sind, um beim Binden von Kursen eine zur Anmeldenummer hinzuzufügen.
Die Idee, die ich ursprünglich geschrieben habe, bestand darin, neue Daten zu erstellen, die Anzahl der Zeilen und Spalten festzulegen und den Studentenausweis zu löschen. Wenn er den Code erneut scannt, kann er nicht beurteilen, ob es sich um den zweiten handelt Scan oder der erste Scan, wodurch es unmöglich ist, die Gesamtzahl der Schüleranmeldungen korrekt zu zählen. 🎜Die Idee, die Zeilen- und Spaltenwerte von student_id zu ändern, ist der Schlüssel zur Realisierung dieser Funktion. 🎜🎜3. Wenn sich der Student angemeldet hat🎜In zwei Fällen war dieser Sitzplatz ursprünglich besetzt und dieser Sitzplatz war ursprünglich unbesetzt🎜Wenn ja, wird er direkt aufgefordert, zurückzukehren Wenn nicht, erhalten Sie Folgendes: Ein Datenelement über den ursprünglichen Studenten auf dem Sitzplatz benachrichtigt die ursprüngliche Person darüber, dass jemand den Sitzplatz belegt hat, löscht die Zeilendaten der ursprünglichen Person und gibt die Zeilennummer des Studenten ein. 🎜Niemand trägt die Anzahl der Zeilen und Spalten direkt ein. 🎜// 如果这个学生原来没选过座位 $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')); } }
// 如果这个学生原来没选过座位 $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。
总结
写功能前确定好思路很重要,不然可能会测出漏洞重新写。