成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院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號
未成18不能看的视频| 性色AV无码一区二区三区人妻| 少妇人妻无码专区视频| 无遮挡粉嫩小泬久久久久久久 | 乱码一二三乱码又大又粗| 欧美黑人又粗又大久久久| 日本熟妇人妻XXXXX中文| 天堂AV旡码AV毛片毛片免费| 亚洲成AV人片乱码色午夜| 野花影视大全在线西瓜在线播放 | 精品人妻AV区波多野结衣| 久久天堂AV综合合色蜜桃网| 欧美变态口味重另类在线视频| 色偷拍 自怕 亚洲 10P| 亚洲AV一二三区成人影片| 中国小帅男男GAYXNXX| 成人一区二区三区视频在线观看| 国产免费AV片在线观看| 久久老司机精品网站福利| 青青青国产精品一区二区| 我调教同学的放荡麻麻| 野花新免费高清完整在线观看| 宝贝把腿开大让我添添电影| 国产免费观看久久黄AV片| 久久香蕉国产线看观看手机| 日本极品人妻VIDEOSSEX| 学生妹流白浆喷水被草| 中文字幕在线播放| 国产成 人 黄 色 网 站 小说| 精品丝袜人妻久久久久久| 欧美熟妇ⅤIDEOS| 无码AV中文字幕久久AV| 一本色道久久综合狠狠躁| 办公室熟妇人妻久久精品| 果冻传媒免费观看4399飘雪| 女神被啪到深处娇喘在线观看| 图片小说视频一区二区| 一面膜上边一面膜下边日本| 纯爱无遮挡H肉动漫| 九九久久99综合一区二区| 人妻熟妇乱又伦精品HD| 亚洲JIZZJIZZ中国妇女| JAPANESEⅩⅩⅩHD中文| 好大好爽舔我高潮了| 青草久久久国产线免费| 亚洲国产精品无码久久九九大片| GOGO全球高清大尺度视频| 黑人大战中国AV女叫惨了| 人妻精品一区二区| 亚洲人成人无码WWW影院| 处破女处破全过程| 久久婷婷大香萑太香蕉AV人| 天天拽天天狠天天透| 18禁黄网站禁片免费观看香港| 国产精品一国产精品| 欧美人与ZOZOXXXX视频| 亚洲精品第一国产综合精品99| 成人毛片亚洲高潮无码精品色| 久久精品国产免费观看| 唐人社视频呦一区二区| 2021日韩无码| 极品少妇高潮XXXXX| 色五月五月丁香亚洲综合网| 在线人成视频播放午夜福利| 国产欧美久久一区二区| 日本大片免费观看视频| 一二三四中文字幕在线看| 国产精品亚洲ΑV天堂无码| 欧洲精品一线二线三线区别| 亚洲人成电影网站色MP4| 国产成人亚洲精品无码综合原创| 欧美成天堂网地址| 亚洲无线观看国产高清| 国产精品女同一区二区| 人禽杂交18禁网站| 中国熟妇人妻性XXXXX在线看| 国模无码视频一区二区三区| 色欲丰满熟妇人妻AV无码| 97精品国产一区二区三区| 精品人妻一区二区三区曰产乱码| 天堂AV无码AV在线A√| BT天堂网.WWW在线资源| 久久无码中文字幕免费影院| 亚洲AV色香蕉一区二区三区蜜桃| 当着全班面被C到高潮哭视频| 女高中生自慰污污网站| 亚洲无人区码二码三码区别图| 国产日韩AⅤ无码一区二区三区| 日韩欧美亚洲综合久久影院DS| 777亚洲精品乱码久久久久久| 久久99国产精品成人| 亚洲AVAV电影AV天堂18禁| 国产AV激情无码久久| 日本丰满人妻熟妇BBBBB③B| 99精产国电影品一二三产区区别| 久久久受WWW免费人成| 亚洲国产AⅤ成人精品无吗| 国产精品久久久影视青草| 日本巨大的奶头在线观看| AV无码专区亚洲AVL在线观看| 久久综合九色欧美综合狠狠| 亚洲狠狠色丁香婷婷综合| 国产熟女高潮一区二区三区| 忘忧草WWW中文在线资源| 岛国精品一区免费视频在线观看| 强开小婷嫩苞又嫩又紧视频韩国| 18禁止看的免费污网站| 麻豆国内剧情AV在线素人搭讪| 亚洲中文字幕无码爆乳| 精品亚洲卡一卡2卡三卡乱码| 亚洲成色WWW久久网站| 国产午夜视频在线观看720P| 无码视频免费一区二区三区| 国产精品白丝AV嫩草影院| 丝袜中文人妻无码有码久热| 丰满爆乳无码一区二区三区| 日韩成人无码中文字幕| 波多野结衣AV一区二区无码| 人妻熟妇久久久久久精品无码专区| BT天堂新版中文在线地址| 欧美日韩精品一区二区在线播放| 99视频30精品视频在线观看| 农村妇女野外交性高清片| 91精品人妻人人做人碰人人爽 | 国产精品国产三级国产普通话| 婷婷人人爽人人爽人人片| 国产成人亚洲综合无码精品| 无码人妻精一区二区三区| 国产精品亚洲产品一区二区三区| 无人区码一码二码三码医生系列| 国产精品久久久影视青草| 性偷窥TUBE凸凹视频| 韩国精品一区二区三区无码视频| 亚洲爆乳成AV人在线蜜芽| 精品久久久久久亚洲中文字幕| 亚洲日韩在线成人AV电影网站| 久久婷婷综合缴情亚洲狠狠_| 中文字幕热久久久久久久| 妺妺窝人体色聚窝窝| x88AV在线观看ww| 日韩欧美视频一区二区| 国产成人A∨激情视频厨房| 午夜福利一区二区三区在线观看| 黑人巨大进入白人美女视频| 亚洲综合久久精品无码色欲| 妺妺窝人体色WWW精品知乎| wwwxxx亚洲| 调教小奴高潮惩罚PLAY道具| 国产另类TS人妖一区二区| 任你躁国产自任一区二区三区| 成人无遮挡裸免费视频在线观看 | 年轻丰满的继牳3免费看| GAYFUCKⅩⅩⅩⅩHD激情| 日韩一区二区在线视频| 国产精品毛片无遮挡高清| 亚洲成a人蜜臀AV在线播放| 久久精品人人槡人妻人人玩AV | 女人三A级毛片视频| 成年午夜无码AV片在线观看| 无码精品人妻一区二区三区网站| 极限少妇人妻无石久久电影网| 永久免费观看午夜成人网站| 强奷高H猛烈失禁潮喷播放| 国产办公室沙发系列高清| 亚洲国产精品成人久久| 蜜臀AV网站在线观看| 成人亚洲色欲色一欲WWW| 亚洲AV中文AⅤ无码AV不卡| 久久久久亚洲AV成人网人人软件| FREE性玩弄少妇HD| 无码YY4800亚洲私人影院| 精品一线二线三线区别大吗| Chinese丰满熟妇高潮| 我被公么征服了HD中文字幕| 久久AV无码ΑV高潮ΑV喷吹| BT天堂新版中文在线| 午夜.DJ高清在线观看免费7| 浪货两个都满足不了你J视频| 暴躁老姐的CSGO心得分享| 亚洲A∨无码一区二区| 蜜臀AV性久久久久蜜臀AⅤ| 公侵犯人妻一区二区三区| 亚洲欧洲日产国码无码| 秋霞鲁丝AV一区二区三区| 国产无遮挡无码很黄很污很刺激 | 蜜臀av免费一区二区三区观看| 绯色av一区二区三区蜜臀| 亚洲日产韩国一二三四区| 人妻无码ΑV中文字幕久久| 国农村精品国产自线拍| 99热最新成人国产精品| 玩弄少妇秘书人妻系列| 久久午夜无码鲁丝片秋霞小说| 粉嫩呦福利视频导航大全| 亚洲综合国产精品第一页| 日韩精品无码一区二区三区| 久久WWW成人_看片免费不卡| 穿着旗袍方便C英语老师| 亚洲中文字幕无码第一区| 少女たちよ在线观看动漫在线观看 |