2025年3月31日 星期一 乙巳(蛇)年 正月初一 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

Python在线考试系统防作弊功能的思路和实现

时间:12-22来源:作者:点击数:30

我自己用Python开发了一套教学管理软件,具有在线点名、提问、答疑、交作业、自测、在线考试、数据导入导出与汇总、Word试卷生成等多个功能,其中在线考试系统具有防作弊的功能,不少人觉得很神奇,其实思路和代码都很简单。主要的原理是关闭文本编辑器并定时清空系统剪切板,不允许复制题目和其他任何内容,也不允许搜索网页,只能一个题一个题地做,并且每个人都是随机抽题,题库里有700多道题,所以相邻的两个人同一时间抽到同一题的概率非常小,有效防止了作弊。因为完整的系统代码比较多,我写了个Demo,模拟了系统中采用的防作弊功能。下面的代码运行后,单击“开始考试”按钮启用考试模式的防作弊功能,单击“结束考试”则禁用防作弊功能。

  • import os
  • import time
  • import tkinter
  • import threading
  • import ctypes
  • import psutil
  • root = tkinter.Tk()
  • root.title('防作弊演示--by董付国')
  • #窗口初始大小和位置
  • root.geometry('250x80+300+100')
  • #不允许改变窗口大小
  • root.resizable(False, False)
  • jinyong = tkinter.IntVar(root, 0)
  • def funcJinyong():
  • while jinyong.get()==1:
  • #强行关闭主流文本编辑器和网页浏览器
  • for pid in psutil.pids():
  • try:
  • p = psutil.Process(pid)
  • exeName = os.path.basename(p.exe()).lower()
  • if exeName in ('notepad.exe', 'winword.exe',
  • 'wps.exe', 'wordpad.exe', 'iexplore.exe',
  • 'chrome.exe', 'qqbrowser.exe',
  • '360chrome.exe', '360se.exe',
  • 'sogouexplorer.exe', 'firefox.exe',
  • 'opera.exe', 'maxthon.exe',
  • 'netscape.exe', 'baidubrowser.exe',
  • '2345Explorer.exe'):
  • p.kill()
  • except:
  • pass
  • #清空系统剪切板
  • ctypes.windll.user32.OpenClipboard(None)
  • ctypes.windll.user32.EmptyClipboard()
  • ctypes.windll.user32.CloseClipboard()
  • time.sleep(1)
  • def start():
  • jinyong.set(1)
  • t = threading.Thread(target=funcJinyong)
  • t.start()
  • buttonStart = tkinter.Button(root, text='开始考试', command=start)
  • buttonStart.place(x=20, y=10, width=100, height=20)
  • def stop():
  • jinyong.set(0)
  • buttonStop = tkinter.Button(root, text='结束考试', command=stop)
  • buttonStop.place(x=130, y=10, width=100, height=20)
  • #模拟用,开启考试模式以后,所有内容都不再允许复制
  • entryMessage = tkinter.Entry(root)
  • entryMessage.place(x=10, y=40, width=230, height=20)
  • root.mainloop()

因为有的代码比较长,为了防止用手机查看时排版错乱,附上代码截图

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门