Avant-propos
Le but de cette fonction est d'implémenter la fonction permettant aux étudiants de scanner le code pour sélectionner des sièges en tant que fonction distincte. les places sélectionnées par les étudiants sans se connecter. Dans ce cas, l'enseignant peut se connecter au cours lié et compter le nombre de fois que les étudiants se sont connectés à ce cours. Les enseignants peuvent mettre en œuvre certaines fonctions sans inscription ni connexion fastidieuses. Ils peuvent également utiliser ce produit pour créer des cours et les lier, afin d'utiliser le produit pour compter le nombre de connexions d'étudiants. Cela augmentera considérablement l’expérience des enseignants avec ce produit et augmentera effectivement le nombre total d’utilisateurs.
Cet article parle spécifiquement de la mise en œuvre de la fonction de numérisation du code étudiant, et d'autres détails ne seront pas abordés en détail.
Préparation
1. Créez d'abord un tableau pour chaque section de chaque classe, appelé ici classroom_time
. Ces données doivent être automatiquement générées lors de l'ajout de champs de classe, sur la base de 11 sections par jour. chaque classe génère 11 champs class_time, comme le montre la figure. 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. Chaque siège doit également être stocké dans un champ pour enregistrer son numéro de ligne et de colonne, et l'identifiant de l'étudiant et le class_time_id correspondant sont utilisés pour enregistrer à quelle section de la classe il appartient. Nous l'appelons ici Seattable, qui contient initialement 0 élément de données.3. Créez une autre page Web pour afficher un plan de salle en classe_time
4. Chaque siège doit correspondre à un code QR. L'URL transmet l'identifiant de la classe et le nombre de rangées et de rangées. En même temps, il devrait y avoir un code QR distinct lors de la visualisation du plan de salle. . Les étudiants peuvent être affichés directement sans se connecter. Sélection des sièges.
Nos étudiants La fonction de numérisation de code est principalement utilisée pour exploiter les données de la table assise.
Mise en œuvre de la fonction de numérisation du code étudiant
1. Obtenez les informations de base de ce siège via l'url
Acquérez le numéro de ligne et l'identifiant de classe de ce siège via l'URL transmise en scannant le code QR, et obtenez également l'identifiant de l'étudiant et le numéro de section. grâce à la méthode statique, le nombre de mesures est ici appelé temps. En même temps, interrogez le seul horaire de classe via la section et l'identifiant de la classe.
$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'));~~~~Ici, récupérez la section et jugez-la en même temps si elle dépasse la onzième section, cela signifie que le temps de cours est terminé et revenez à. la page d'accueil des étudiants. 2. Utilisez l'identifiant de class_time et l'identifiant de l'étudiant pour savoir s'il y a ce champ dans la tableseattable. Il est défini ici comme
$seattable
. $seattable si instruction.
$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')); }Voici un exemple. Lorsqu'un élève entre dans la classe, il y aura une donnée lorsqu'il sélectionnera un siège, il remplira le nombre de rangées et de rangées si quelqu'un d'autre prend sa place et efface le numéro. de rangées et de rangées, cela équivaut à ne pas s'asseoir, mais toujours dans la classe, les données d'identification des étudiants existent, ce qui est utile pour les enseignants pour en ajouter un au numéro de connexion lors de la liaison des cours. 🎜L'idée que j'ai écrite à l'origine était de créer de nouvelles données, de définir le nombre de lignes et de colonnes et d'effacer la carte d'étudiant. Cela amènera d'autres personnes à voler sa position. Lorsqu'il scannera à nouveau le code, il ne pourra pas juger s'il s'agit du deuxième. scan ou le premier scan, ce qui rend impossible le comptage correct du nombre total de connexions d'étudiants. 🎜Établir l'idée de modifier les valeurs de ligne et de colonne de student_id est la clé pour réaliser cette fonction. 🎜🎜3. Si l'étudiant s'est connecté🎜Dans deux cas, ce siège était initialement occupé et ce siège était initialement inoccupé🎜S'il y a quelqu'un, vérifiez d'abord si la personne est lui-même. Si oui, il vous le demandera directement et reviendra. vers la page d'accueil de l'étudiant. Sinon, vous obtiendrez ceci. Une donnée sur l'étudiant d'origine occupant le siège informe la personne d'origine que quelqu'un a occupé le siège, efface les données de ligne de la personne d'origine et remplit le numéro de ligne de l'étudiant. 🎜Personne ne renseigne directement le nombre de lignes et de colonnes. 🎜
// 如果这个学生原来没选过座位 $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')); } }🎜Par exemple : moi (je m'appelle Zhang San) j'ai initialement scanné le code et il y avait quelqu'un sur le siège où j'ai scanné le code. 🎜Avant de scanner le code QR🎜🎜🎜Après avoir scanné le code QR🎜🎜🎜🎜Étant donné que les lignes et les lignes seront triées plus tard, afin d'éviter que les lignes et les lignes effacées n'affichent les noms, nous réinitialisons les lignes et les lignes ici à 100 100 (la valeur maximale des lignes et des lignes). 🎜🎜4. Si l'étudiant ne s'est pas inscrit, nous déterminerons d'abord si le siège est occupé. S'il y a quelqu'un, prévenez-le d'abord et effaçons le numéro de rangée. Si vous n'êtes pas connecté à la table de siège, il n'y aura pas de données student_id et class_time_id correspondantes. À ce stade, créez directement un nouveau $seattable et remplissez le student_id et les numéros de ligne et de colonne si le class_time->status correspond à. $seattable vaut 1 (un statut Un statut de 1 signifie qu'il a été lié au cours, un statut de 0 signifie qu'il n'a pas été lié au cours), puis le nombre total de connexions est de +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。
总结
写功能前确定好思路很重要,不然可能会测出漏洞重新写。