Kata Pengantar
Tujuan fungsi ini adalah untuk menggunakan QR pelajar kod untuk memilih tempat duduk sebagai fungsi berasingan Dengan pelaksanaan fungsi berasingan, guru boleh menyemak tempat duduk pelajar yang dipilih tanpa log masuk. Guru juga boleh log masuk untuk mengikat kursus dan mengira bilangan daftar masuk pelajar untuk kursus ini. Guru boleh melaksanakan beberapa fungsi tanpa pendaftaran dan log masuk yang membosankan. Mereka juga boleh menggunakan produk ini untuk mencipta kursus dan mengikatnya, supaya menggunakan produk untuk mengira bilangan log masuk pelajar. Ini akan meningkatkan pengalaman guru dengan produk ini dan meningkatkan jumlah pengguna dengan berkesan.
Artikel ini secara khusus bercakap tentang pelaksanaan fungsi pengimbasan kod pelajar, dan butiran lain tidak akan dibincangkan secara terperinci.
Persediaan awal
1 Buat jadual untuk setiap bahagian setiap bilik darjah, di sini dipanggil classroom_time
Data ini harus dijana secara automatik apabila menambah medan bilik darjah kepada 11 hari contoh, dalam bahagian ini, setiap bilik darjah menjana 11 medan masa_kelas, seperti yang ditunjukkan dalam rajah.
2. Setiap tempat duduk juga harus disimpan dalam medan untuk menyimpan nombor baris dan lajurnya, dan ID pelajar serta class_time_id yang sepadan digunakan untuk menyimpan bilik darjah dan bahagian mana tempat duduk tersebut. tempat duduk. Kami memanggilnya meja tempat duduk di sini, yang pada mulanya ialah 0 keping data.
3 Buat halaman web untuk memaparkan carta tempat duduk kelas_masa
4 ID bilik darjah, nombor baris dan baris, dan harus ada kod QR yang berasingan untuk melihat carta tempat duduk Ia boleh memaparkan secara langsung pemilihan tempat duduk pelajar tanpa log masuk.
Fungsi pengimbasan kod pelajar kami digunakan terutamanya untuk mengendalikan data meja meja duduk.
Pelaksanaan fungsi pengimbasan kod pelajar
1 Dapatkan maklumat asas tempat duduk ini melalui url
Dapatkan nombor baris, kelas_id dan nombor baris tempat duduk ini melalui url yang diluluskan. masuk dengan mengimbas kod Dapatkan id_pelajar dan nombor bahagian melalui kaedah statik Nombor bahagian dipanggil masa di sini. Pada masa yang sama, tanya satu-satunya waktu_kelas melalui bahagian dan id bilik darjah
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 ; }
Dapatkan bahagian di sini dan nilai pada masa yang sama Jika ia melebihi bahagian kesebelas, ini bermakna masa kelas telah tamat dan kembali ke laman utama pelajar.
2. Gunakan id kelas_masa dan id pelajar untuk mencari sama ada terdapat medan ini dalam jadual meja tempat duduk Ia ditakrifkan sebagai $seattable
di sini 🎜>. $seattable
$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'));~~~~
Idea yang saya tulis pada asalnya adalah untuk mencipta data baharu, menetapkan bilangan baris dan lajur, dan mengosongkan ID pelajar Ini akan menyebabkan orang lain mencuri kedudukannya Apabila dia mengimbas kod itu semula, dia tidak boleh menilai sama ada imbasan kedua atau imbasan pertama, jadi dia tidak boleh mengira dengan tepat jumlah bilangan log masuk pelajar.3 Jika pelajar telah mendaftar masuk
Mewujudkan idea untuk menukar nilai baris dan lajur student_id adalah kunci untuk merealisasikan fungsi ini.
Dalam dua kes, tempat duduk ini pada asalnya diduduki, dan tempat duduk ini pada asalnya tidak berpenghuni
Jika ada seseorang, semak dahulu sama ada orang itu adalah dirinya sendiri, jika jadi, terus gesa dan Kembali ke halaman utama pelajar, jika tidak, dapatkan sekeping data tentang pelajar asal tempat duduk ini, maklumkan orang asal bahawa seseorang telah menduduki tempat duduk itu, kosongkan data baris orang asal dan isikan nombor baris.
Tiada sesiapa yang mengisi secara langsung bilangan baris dan lajur.
$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')); }
Sebelum mengimbas kod QR
Selepas mengimbas kod QR
// 如果这个学生原来没选过座位 $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。
总结
写功能前确定好思路很重要,不然可能会测出漏洞重新写。