python3 Flask 多人答题(完整项目带源码与使用)

这是一个基于Python3和Flask的多人答题系统,支持在线答题、查看得分及答题解析,具备随机抽题、导出Excel等功能,适用于各类考试场景。无需外网,可在局域网内运行,包括答题、设置、得分和管理四个页面,前端未使用框架,仅依赖Flask和一些第三方库。提供完整项目源码和使用说明。
摘要由CSDN通过智能技术生成

TopQB答题系统

2020/01/05
@pingfan

功能:
    1、多人同时答题系统
    2、在线查看个人得分与答题情况(解析)
    3、载入题库,随机抽取题目支持【单选题,多选题,判断题】
    4、自定义题目数量与题目分值,题目都是随机但数量不变总分不变
    5、在线实时查看总体得分情况,可导出excel
    6、适应场景: 各类考试答题等
    7、提示: 
        1、不需要外网,任意内网(局域网)机器运行均可,也可单机运行使用
        2、无毒,请添加信任
        3、系统要求: 64位win7、win10(当然linux是最好的)
使用说明:
    1、题库模板位于【static】->【qb.xlsx】题目索引值不可重复
    2、运行app.exe
    3、查看本机ip地址
    4、访问:
        1、答题地址:
            http://【本机ip】:9999
            如:http://192.168.1.2:9999
        2、设置地址:
            http://【本机ip】:9999/config
        3、得分地址:
            http://【本机ip】:9999/results
        4、管理地址:
            http://【本机ip】:9999/admin
    5、答题前请设置题目数量,题目得分
    6、实时查看总体得分情况刷新成绩页面即可

==========================================================================================

管理页面

设置页面

成绩汇总页面

答题页面

解析页面

==========================================================================================

小小flask项目,就几个路由系统,没使用蓝图。

完整目录结构

不使用数据库,轻应用读取excel中的题目缓存到内存中

需要一个excel.xlsx(2007以上的题库模板)放置到目录的static文件夹中命名为【qb.xlsx】(读取的是第一个工作表)

==========================================================================================

只依赖flask,提升并发的(协程)gevent库,以及pfExcel(基于openpyxl的封装)用于读取excel中的数据(前面的博客有提到)

前端没有使用任何框架,js都是原生

以下是依赖库的安装

# 安装flask
pip install flask

# 安装gevent
pip install gevent

# 安装openpyxl
pip install openpyxl

部署就是一个(pyinstaller库编译app.py)exe执行文件

# 安装pyinstaller
pip install pyinstaller
# 编译app.py

pyinstaller -F -i 你的logo文件.ico app.py

以下是pyExcel.py源码
 

"""
基于openpyxl的excel读写模块
提供更简单的读写方式
"""
from openpyxl import load_workbook, Workbook


class ExcelWork:

    def __init__(self, filePath):
        """
        初始化, 加载excel,默认选择第一个工作表
        :param filePath: str: 文件地址
        """
        self.filePath = filePath
        try:
            # 加载excel
            self.excel = load_workbook(self.filePath)
        except FileNotFoundError:
            # 创建excel
            self.excel = Workbook(self.filePath)
            # 创建sheet
            self.createSheet('Sheet1')
            # 保存excel
            self.close()
            # 加载excel
            self.excel = load_workbook(self.filePath)
        # sheet设置为第一个工作表
        self.sheet = self.excel.active

    def close(self):
        """
        保存并退出
        :return:
        """
        self.excel.save(self.filePath)

    def createSheet(self, sheetName):
        """
        创建工作表
        :param sheetName: str: 工作表名
        :return:
        """
        self.excel.create_sheet(sheetName)

    def getSheetTitle(self):
        """
        获取当前工作表名称
        :return:  str: 工作表名称
        """
        return self.sheet.title

    def getSheetTitles(self):
        """
        获取excel所有工作表的名称
        :return:  list: [工作表名称,]
        """
        return self.excel.sheetnames

    def delSheet(self):
        """
        删除当前工作表
        :return:
        """
        self.excel.remove(self.sheet)

    def selectSheet(self, sheetName):
        """
        选择工作表, 如果没有将创建
        :param sheetName: str: 工作表名
        :return:
        """
        if sheetName in self.getSheetTitles():
            # 选择工作表
            self.sheet = self.excel[sheetName]
        else:
            # 创建工作表
            self.createSheet(sheetName)
            # 选择工作表
            self.sheet = self.excel[sheetName]

    def setCell(self, r, c, var):
        """
        修改指定行, 列的单元格内容
        :param r: int: 行数
        :param c: int: 列数
        :param var: str: 修改内容
        :return:
        """
        self.sheet.cell(row=r, column=c, value=var)

    def getCell(self, r, c):
        """
        获取指定行, 列的单元格内容
        :param r: int: 行数
        :param c: int: 列数
        :return: str: 单元格内容
        """
        return self.sheet.cell(row=r, column=c)
  • 11
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值