成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網
最全最豐富的資訊網站

Thinkphp5.1趣味實現學生掃碼選座功能

前言

本功能目的是將學生掃碼選座功能作為一個單獨的功能實現,教師不用登陸就可以實現查看學生選定座位情況,教師又可以登陸綁定課程,統計學生本課程簽到次數。老師不需要繁瑣的注冊登陸就可以實現部分功能,也可以使用本產品建立課程進行綁定,從而利用產品統計學生簽到次數。這將大大增加老師對本產品的體驗,有效增加用戶總數。
本文章具體講學生掃碼功能實現,其他不再具體講述。

前期準備

1.首先將每個教室的每一小節建立一個表,這里稱作classroom_time,這些數據應該在增加教室字段時自動生成,以每天11個小節為例,每個教室生成11個classroom_time字段,如圖。
Thinkphp5.1趣味實現學生掃碼選座功能

2.每個座位應該也要存入一個字段用于保存它的行列數,學生id和所對應的classroom_time_id用于保存它是哪個教室的哪個小節的座位。我們在這里稱之為seattable,初始為0條數據。
Thinkphp5.1趣味實現學生掃碼選座功能

3.再建立一個網頁用于顯示一個classroom_time的座位表
Thinkphp5.1趣味實現學生掃碼選座功能

4.每個座位應該對應一個二維碼,url傳值這個教室id,行列數,同時查看座位表應該有一個單獨的二維碼,不用登錄直接顯示學生選座情況。
Thinkphp5.1趣味實現學生掃碼選座功能

我們學生掃碼功能主要是對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 ($time<=0 || $time>11) {             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進行if語句。

$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數據存在,這樣有利于老師綁定課程時簽到數加一。
我原來寫的思路是新建數據定死行列數清空學生id,這樣會導致別人搶了他的位置他再次掃碼時無法判斷這是二次掃碼還是第一第掃碼,從而無法正確統計學生簽到總數。
確立定死student_id改變行列值的思路是實現這個功能的關鍵。

3.如果這個學生簽過到
兩種情況,這個座位原來有人,這個座位原來沒人
有人的話先看這個人是不是他自己,是的話直接提示并返回學生主頁,不是的話得到這個座位原來學生的一條數據,通知原來的人有人占了座位了,將原來的人的行列數據清除,并將這個學生行列數填上。
沒人直接將行列數填上。

$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'));     }

舉例:自己(我叫張三)原來掃過碼并且掃碼的座位上有人。
掃碼前
Thinkphp5.1趣味實現學生掃碼選座功能
掃碼后
Thinkphp5.1趣味實現學生掃碼選座功能

因為后續會用到對行列排序,為了讓清空的行列數不顯示名字,我們這里將行列重置為100,100(行列最大值)。

4.如果這個學生沒簽過到,也是先判斷這個座位原來是否有人,有人的話先通知他并清空行列數。沒簽過到seattable就不會有對應的student_id和classroom_time_id的數據,這時直接創建一條新的$seattable并將student_id,行列數填上,如果$seattable所對應的classroom_time->status為1(status為1表示已經跟課程綁定,status為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 ($time<=0 || $time>11) {             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。

總結

寫功能前確定好思路很重要,不然可能會測出漏洞重新寫。

推薦:《最新的10個thinkphp視頻教程》

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
精品无人区卡一卡二卡三乱码| 精品少妇一区二区| 国产一产二产三精华液区别在哪 | 中文精品无码中文字幕无码专区| 伊人久久大香线蕉午夜AV| 中文字幕AV无码一区二区三区电 | 免费看老外操B视频| 欧美日韩亚洲国产综合乱| 日本熟妇毛茸茸XXXX| 特黄特色三级在线观看| 极品人妻VIDEOSSS人妻| 久久精品卫校国产小美女| 噜噜狠狠色综合久色A站网址| 男人靠女人免费视频网站| 日本高清中文字幕在线观穿线视频| 美女扒开粉嫩尿口的照片| 欧美成人精品视频在线观看| 日韩精品免费无码专区| 无码中文字幕AV久久专区| 亚洲国产另类久久久精品| 在镜子面前看我是怎么爱你的| BBBBBBBBB老妇人BBB| 成人无码小视频在线观看| 国产精品有码无码AV在线播放 | 亚洲 精品 综合 精品 自拍 | 99久久精品免费观看国产| 吃了继兄开的药我做的梦更| 国产偷国产偷亚洲高清日韩 | 野花免费观看日本电影哔哩哔哩 | 亚洲日本一线产区和二线| 2018天天拍拍天天爽视频| 俄罗斯人与ZOOM人的区别| 好紧好爽太大了视频| 迷迷糊糊挺进岳身体| 久久精品熟女亚洲AV艳妇| 欧美人与性囗牲恔配| 女被男狂揉吃奶胸60分钟视频| 日韩A级无码免费视频| 亚洲AV成人片乱码色午夜| 在线中文新版最新版在线| 波多野结系列18部无码观看A| 国产欧美精品一区二区三区四区 | 亚洲色精品三区二区一区| 亚洲第一AV网站| 自偷自拍亚洲综合精品麻豆| 成人熟女视频一区二区三区| 黑人av巨大粗吊| 欧美精品久久天天躁| 小SAO货都湿掉奶头好硬男女| 一二三四免费中文在线| 第一次处破女01免费观看 | 国产美女精品AⅤ在线| 两根大肉大捧一进一出好爽视频| 日本又黄又爽又色又刺激的视频| 亚洲白嫩学生AV无码一区| WWW夜片内射视频在观看视频| 国内精品伊人久久久久妇| 欧美乱大交XXXXX| 亚洲AV无码乱码在线观看代蜜桃| 69综合精品国产二区无码| AA丁香综合激情| 国产偷国产偷亚洲高清人| 欧美乱妇日本无乱码特黄大片| 香蕉久久夜色精品国产| 97免费公开在线视频| 成年性生交大片免费看| 精品久久久久中文字幕APP| 人人做天天爱夜夜爽2020| 亚洲日韩乱码中文无码蜜桃| 成人区人妻精品一区二区网站| 久久久精品中文字幕麻豆发布 | 拒嫁豪门少奶奶99次出逃| 挺进邻居人妻雪白的身体| 中文字幕一区二区三区乱码视频| 国产男男猛烈无遮挡A片小说| 欧美日韩无线码在线观看| 亚洲乱码日产精品BD在| 丰满的人妻HD高清日本| 国产清纯白嫩初高生在线观看| 欧美高潮抽搐喷水大叫| 亚洲国产成人五月综合网 | 国产午夜无码片在线观看影院| 人妻 色综合网站| 一本大道大臿蕉无码视频| 国产精品亚洲片在线观看不卡| 欧洲-级毛片内射| 日韩少妇白浆无码系列| 在线播放五十路熟妇| 国内精品久久久久久无码不卡| 日产精品1卡二卡三卡| 中文字幕AV无码一二三区电影| 国产婷婷色综合AV蜜臀AV| 日日噜狠狠噜天天噜AV| 亚洲成人Av在线| 公翁的粗大放进我的秘密电影 | 祖母和おばあちゃん的区别| 饥渴老熟妇乱子在线播放| 免费观看高清大片的播放器| 亚洲AV无码不卡| 给丰满少妇按摩到高潮| 欧美最猛黑人xxxx黑人猛交| 亚洲熟妇AV一区二区三区下载| 国产精品综合一区二区三区| 日本精品少妇一区二区三区| 中文字幕一区二区精品区| 精品香蕉99久久久久成人网站| 无人区码一码二码三码区别图片| 成年无码AV片在线免缓冲| 欧美成人看片黄A免费看| 一边摸一边叫床一边爽AV| 黑人大雞巴ⅩⅩⅩ| 无码人妻少妇色欲AV一区二区| 第二书包网高H肉辣文| 人妻少妇精品视频专区| 2022久久国产精品免费热麻豆| 久久国产精品香蕉成人APP| 亚洲VA欧洲VA日韩VA| 国产免费AV片无码永久免费| 玩弄漂亮少妇高潮大叫| 成熟交BGMBGMBGM的价格| 奇米影视7777久久精品| 91人人妻人人澡人人爽超污| 馒头型B好还是蝴蝶型B| 一本色道久久88精品综合 | 亚洲国产A∨无码中文777| 国产人久久人人人人爽| 无码熟妇人妻AⅤ在线电影| 高清人人天天夜夜曰狠狠狠狠| 日本人妻丰满大屁股a v| 被老外做的下身都肿了| 秋霞手机在线看秋免费| MM131亚洲国产美女久久| 欧美性爱视频第一页| FREE性玩弄妇女HD| 破外女出血视频全过程| 啊灬啊灬啊灬快好深| 人妻无码中文字幕一区二区三区| YY111111人妻影院| 人妻系列无码专区免费视频| 班长哭了能不能再抠游戏里面的钱 | 菠萝视频免费最新在线观看| 日本十八禁免费看污网站| 厨房掀起裙子从后面进去视频| 日韩无码AV一区二区| 高清欧美性猛交XXXX黑人猛交| 天堂中文在线最新版WWW| 国产VOYEUR精品偷窥222| 无码人妻AV一二区二区三区| 国产成人无码免费视频79| 无线乱码A区B区C区D| 国语自产少妇精品视频| 亚洲熟妇另类AV老熟女| 看全色黄大色黄女片爽在线看| 中国亚洲女人69内射少妇| 欧美成人精品一区二区| 成 人 黄 色 网站 小说 免| 少妇熟女视频一区二区三区| 国产激情大臿免费视频| 人妻无码中文字幕永久有效视频| 菠萝视频免费最新在线观看| 色综合色欲色综合色综合色综合R| 国产AV导航大全精品| 性中国少妇熟妇XXXX农村| 黑人巨大跨种族VIDEO| 亚洲日本一线产区二线区| 美女又黄又免费的视频| WWW久久只有这里有精品| 上课忘穿内裤被老师摸到高潮| A级毛片毛片免费观看丝瓜| 人人爽人人澡人人高潮| 国产精品福利一区二区久久| 亚洲国产精品无码中文在线| 快拨出天我是你母亲| ASS中国人体欣赏PICS| 色一情一区二区三区四区| 国产一区二三区好的精华液| 亚洲一二三四2021不卡| 欧美成人精品三级网站| 二三四五六七无产乱码| 亚洲AV蜜桃少妇秘 大胸| 久久影院午夜理论片无码| 宝贝把腿抬高点我让你更爽漫画| 为了撞上你1∨1SC| 久久精品国产亚洲A∨麻豆| AV免费网址在线观看| 婷婷综合缴情亚洲狠狠| 九月九电影免费观看| BRAZZERSHD欧美巨大| 玩弄丰满少妇XXXXX性多毛| 久久精品国产99精品国产亚洲性 | 麻豆国产MV视频| 大又大粗又爽又黄少妇毛片免费| 亚洲AV成人综合网成人| 免费观看男女AV入口网站| 国产AⅤ爽AV久久久久成| 亚洲欧美日本A∨在线观看 | 天堂8中文在线最新版在线| 久精品夜色国产亚洲AV| 边做边爱免费视频| 亚洲国产精品18久久久久久|