作者主页:编程千纸鹤
作者简介:Java、前端、Python开发多年,做过高程,项目经理,架构师
主要内容:Java项目开发、Python项目开发、大学数据和AI项目开发、单片机项目设计、面试技术整理、最新技术分享
收藏点赞不迷路 关注作者有好处
文末获得源码
项目编号:BS-Python-061
一,环境介绍
语言环境:Python3.8
数据库:Mysql: mysql5.7
WEB框架:Django
爬虫框架:Scrapy
开发工具:IDEA或PyCharm
项目展示地址:基于Python实现在线考试系统
直接访问地址:
https://gf.bilibili.com/item/detail/1105851061
二,项目简介
本文首先实现了学生在线考试管理的发展,随后依照传统的软件开发流程,最先为系统挑选适用的语言和软件开发平台,依据需求分析开展控制模块制作和数据库查询构造设计,依据系统整体功能模块的设计,制作系统的功能模块图、流程表和E-R图。其次进行设计框架,依据设计的框架撰写编码,完成系统的每个功能模块。最终,对基本系统开展了检测,包含软件性能测试、单元测试和性能指标。测试结果表明,该系统能够实现所需的功能,运行状况尚可并无明显缺点。
随着科学技术发展,计算机已成为人们生活中必不可少的生活办公工具,在这样的背景下,网络技术被应用到各个方面,为了提高办公生活效率,网络信息技术飞速发展。人类社会进入了全新的信息化时代。学生在线考试管理一直是信息管理的一大难题,学生在线考试信息数量多,此时寻找有效便捷的学生在线考试管理方法就是当务之急。而日趋成熟的计算机信息管理技术便成为解决这一难题的唯一之选。如今计算机信息管理技术来处理学生在线考试管理早已游刃有余,其实信息管理技术已经渗透到各个行业的信息控制管理当中,且有着举足轻重的地位。而随着现代化社会主义不断进步,普通群众生活水平有了大幅提高,很多方面都在网络上去实现,从而网络也就成为了最直接、即方便又快捷的接入口。
使用学生在线考试系统相对传统学生在线考试管理方式具备很多优点:首先可以大幅提高学生在线考试检索,只需输入相关信息就能在数秒内反馈想要的结果;其次可存储大量的学生在线考试信息,同时学生在线考试系统安全性有更高的保障;相比纸质文档来管理学生在线考试,学生在线考试系统更节省空间人力资源。这些优点大大提高管理效率并节省运营成本。因此,必须开发一个学生在线考试系统开展合理有效的管理方法,这提高了学生在线考试的效率和特性,增加了用户信息安全性,方便用户及时反馈信息给管理员,增加了用户之间的互动交流,更能提高用户的体验强度。
本系统为了数据库结构的灵活性所以打算采用MySQL来设计数据库[1],而Python技术[2], B/S架构则保证了较高的平台适应性。文中主要是讲解了该系统的开发环境、要实现的基本功能和开发步骤,并主要讲述了系统设计方案的关键点、设计思想。
管理员用例
用户功能
系统功能模块
三,系统展示
后台管理员
四,核心代码展示
#coding:utf-8
__author__ = "ila"
from django.db import models
from .model import BaseModel
from datetime import datetime
class yonghu(BaseModel):
__doc__ = u'''yonghu'''
__tablename__ = 'yonghu'
__loginUser__='zhanghao'
__authTables__={}
__authPeople__='是'#用户表,表属性loginUserColumn对应的值就是用户名字段,mima就是密码字段
__loginUserColumn__='zhanghao'#用户表,表属性loginUserColumn对应的值就是用户名字段,mima就是密码字段
__sfsh__='是'#表sfsh(是否审核,”是”或”否”)字段和sfhf(审核回复)字段,后台列表(page)的操作中要多一个”审核”按钮,点击”审核”弹出一个页面,包含”是否审核”和”审核回复”,点击确定调用update接口,修改sfsh和sfhf两个字段。
__authSeparate__='否'#后台列表权限
__thumbsUp__='否'#表属性thumbsUp[是/否],新增thumbsupnum赞和crazilynum踩字段
__intelRecom__='否'#智能推荐功能(表属性:[intelRecom(是/否)],新增clicktime[前端不显示该字段]字段(调用info/detail接口的时候更新),按clicktime排序查询)
__browseClick__='否'#表属性[browseClick:是/否],点击字段(clicknum),调用info/detail接口的时候后端自动+1)、投票功能(表属性[vote:是/否],投票字段(votenum),调用vote接口后端votenum+1
__foreEndListAuth__='否'#前台列表权限foreEndListAuth[是/否];当foreEndListAuth=是,刷的表新增用户字段userid,前台list列表接口仅能查看自己的记录和add接口后台赋值userid的值
__foreEndList__='否'#表属性[foreEndList]前台list:和后台默认的list列表页相似,只是摆在前台,否:指没有此页,是:表示有此页(不需要登陆即可查看),前要登:表示有此页且需要登陆后才能查看
__isAdmin__='否'#表属性isAdmin=”是”,刷出来的用户表也是管理员,即page和list可以查看所有人的考试记录(同时应用于其他表)
addtime = models.DateTimeField(auto_now_add=False, verbose_name=u'创建时间')
zhanghao=models.CharField ( max_length=255,null=False,unique=True, verbose_name='账号' )
mima=models.CharField ( max_length=255,null=False, unique=False, verbose_name='密码' )
xingming=models.CharField ( max_length=255,null=False, unique=False, verbose_name='姓名' )
nianling=models.IntegerField ( null=True, unique=False, verbose_name='年龄' )
xingbie=models.CharField ( max_length=255, null=True, unique=False, verbose_name='性别' )
shouji=models.CharField ( max_length=255, null=True, unique=False, verbose_name='手机' )
touxiang=models.TextField ( null=True, unique=False, verbose_name='头像' )
zhuceziliao=models.TextField ( null=True, unique=False, verbose_name='注册资料' )
sfsh=models.CharField ( max_length=255, null=True, unique=False,default='待审核', verbose_name='是否审核' )
shhf=models.TextField ( null=True, unique=False, verbose_name='审核回复' )
'''
zhanghao=VARCHAR
mima=VARCHAR
xingming=VARCHAR
nianling=Integer
xingbie=VARCHAR
shouji=VARCHAR
touxiang=Text
zhuceziliao=Text
sfsh=VARCHAR
shhf=Text
'''
class Meta:
db_table = 'yonghu'
verbose_name = verbose_name_plural = '用户'
class jiaoshi(BaseModel):
__doc__ = u'''jiaoshi'''
__tablename__ = 'jiaoshi'
__loginUser__='jiaoshizhanghao'
__authTables__={}
__authPeople__='是'#用户表,表属性loginUserColumn对应的值就是用户名字段,mima就是密码字段
__loginUserColumn__='jiaoshizhanghao'#用户表,表属性loginUserColumn对应的值就是用户名字段,mima就是密码字段
__sfsh__='否'#表sfsh(是否审核,”是”或”否”)字段和sfhf(审核回复)字段,后台列表(page)的操作中要多一个”审核”按钮,点击”审核”弹出一个页面,包含”是否审核”和”审核回复”,点击确定调用update接口,修改sfsh和sfhf两个字段。
__authSeparate__='否'#后台列表权限
__thumbsUp__='否'#表属性thumbsUp[是/否],新增thumbsupnum赞和crazilynum踩字段
__intelRecom__='否'#智能推荐功能(表属性:[intelRecom(是/否)],新增clicktime[前端不显示该字段]字段(调用info/detail接口的时候更新),按clicktime排序查询)
__browseClick__='否'#表属性[browseClick:是/否],点击字段(clicknum),调用info/detail接口的时候后端自动+1)、投票功能(表属性[vote:是/否],投票字段(votenum),调用vote接口后端votenum+1
__foreEndListAuth__='否'#前台列表权限foreEndListAuth[是/否];当foreEndListAuth=是,刷的表新增用户字段userid,前台list列表接口仅能查看自己的记录和add接口后台赋值userid的值
__foreEndList__='是'#表属性[foreEndList]前台list:和后台默认的list列表页相似,只是摆在前台,否:指没有此页,是:表示有此页(不需要登陆即可查看),前要登:表示有此页且需要登陆后才能查看
__isAdmin__='是'#表属性isAdmin=”是”,刷出来的用户表也是管理员,即page和list可以查看所有人的考试记录(同时应用于其他表)
addtime = models.DateTimeField(auto_now_add=False, verbose_name=u'创建时间')
jiaoshizhanghao=models.CharField ( max_length=255,null=False,unique=True, verbose_name='教师账号' )
mima=models.CharField ( max_length=255,null=False, unique=False, verbose_name='密码' )
jiaoshixingming=models.CharField ( max_length=255,null=False, unique=False, verbose_name='教师姓名' )
nianling=models.IntegerField ( null=True, unique=False, verbose_name='年龄' )
xingbie=models.CharField ( max_length=255, null=True, unique=False, verbose_name='性别' )
lianxidianhua=models.CharField ( max_length=255, null=True, unique=False, verbose_name='联系电话' )
touxiang=models.TextField ( null=True, unique=False, verbose_name='头像' )
'''
jiaoshizhanghao=VARCHAR
mima=VARCHAR
jiaoshixingming=VARCHAR
nianling=Integer
xingbie=VARCHAR
lianxidianhua=VARCHAR
touxiang=Text
'''
class Meta:
db_table = 'jiaoshi'
verbose_name = verbose_name_plural = '教师'
class kechengxinxi(BaseModel):
__doc__ = u'''kechengxinxi'''
__tablename__ = 'kechengxinxi'
__authTables__={'jiaoshizhanghao':'jiaoshi',}
__authPeople__='否'#用户表,表属性loginUserColumn对应的值就是用户名字段,mima就是密码字段
__sfsh__='否'#表sfsh(是否审核,”是”或”否”)字段和sfhf(审核回复)字段,后台列表(page)的操作中要多一个”审核”按钮,点击”审核”弹出一个页面,包含”是否审核”和”审核回复”,点击确定调用update接口,修改sfsh和sfhf两个字段。
__authSeparate__='否'#后台列表权限
__thumbsUp__='否'#表属性thumbsUp[是/否],新增thumbsupnum赞和crazilynum踩字段
__intelRecom__='是'#智能推荐功能(表属性:[intelRecom(是/否)],新增clicktime[前端不显示该字段]字段(调用info/detail接口的时候更新),按clicktime排序查询)
__browseClick__='否'#表属性[browseClick:是/否],点击字段(clicknum),调用info/detail接口的时候后端自动+1)、投票功能(表属性[vote:是/否],投票字段(votenum),调用vote接口后端votenum+1
__foreEndListAuth__='否'#前台列表权限foreEndListAuth[是/否];当foreEndListAuth=是,刷的表新增用户字段userid,前台list列表接口仅能查看自己的记录和add接口后台赋值userid的值
__foreEndList__='是'#表属性[foreEndList]前台list:和后台默认的list列表页相似,只是摆在前台,否:指没有此页,是:表示有此页(不需要登陆即可查看),前要登:表示有此页且需要登陆后才能查看
__isAdmin__='否'#表属性isAdmin=”是”,刷出来的用户表也是管理员,即page和list可以查看所有人的考试记录(同时应用于其他表)
addtime = models.DateTimeField(auto_now_add=False, verbose_name=u'创建时间')
kechengmingcheng=models.CharField ( max_length=255,null=False, unique=False, verbose_name='课程名称' )
kechengfenlei=models.CharField ( max_length=255,null=False, unique=False, verbose_name='课程分类' )
kaikeshijian=models.DateTimeField ( null=True, unique=False, verbose_name='开课时间' )
keshi=models.CharField ( max_length=255, null=True, unique=False, verbose_name='课时' )
jiaoshizhanghao=models.CharField ( max_length=255, null=True, unique=False, verbose_name='教师账号' )
jiaoshixingming=models.CharField ( max_length=255, null=True, unique=False, verbose_name='教师姓名' )
kechengneirong=models.TextField ( null=True, unique=False, verbose_name='课程内容' )
clicktime=models.DateTimeField ( null=True, unique=False, verbose_name='最近点击时间' )
'''
kechengmingcheng=VARCHAR
kechengfenlei=VARCHAR
kaikeshijian=DateTime
keshi=VARCHAR
jiaoshizhanghao=VARCHAR
jiaoshixingming=VARCHAR
kechengneirong=Text
clicktime=DateTime
'''
class Meta:
db_table = 'kechengxinxi'
verbose_name = verbose_name_plural = '课程信息'
class exampaper(BaseModel):
__doc__ = u'''exampaper'''
__tablename__ = 'exampaper'
__authTables__={}
addtime = models.DateTimeField(auto_now_add=False, verbose_name=u'创建时间')
name=models.CharField ( max_length=255,null=False, unique=False, verbose_name='试卷名称' )
time=models.IntegerField ( null=False, unique=False, verbose_name='考试时长(分钟)' )
status=models.IntegerField ( null=False, unique=False,default='0', verbose_name='试卷状态' )
'''
name=VARCHAR
time=Integer
status=Integer
'''
class Meta:
db_table = 'exampaper'
verbose_name = verbose_name_plural = '试卷表'
class examquestion(BaseModel):
__doc__ = u'''examquestion'''
__tablename__ = 'examquestion'
__authTables__={}
addtime = models.DateTimeField(auto_now_add=False, verbose_name=u'创建时间')
paperid=models.BigIntegerField ( null=False, unique=False, verbose_name='所属试卷id(外键)' )
papername=models.CharField ( max_length=255,null=False, unique=False, verbose_name='试卷名称' )
questionname=models.CharField ( max_length=255,null=False, unique=False, verbose_name='试题名称' )
options=models.TextField ( null=True, unique=False, verbose_name='选项,json字符串' )
score=models.BigIntegerField ( null=True, unique=False,default='0', verbose_name='分值' )
answer=models.CharField ( max_length=255, null=True, unique=False, verbose_name='正确答案' )
analysis=models.TextField ( null=True, unique=False, verbose_name='答案解析' )
type=models.BigIntegerField ( null=True, unique=False,default='0', verbose_name='试题类型,0:单选题 1:多选题 2:判断题 3:填空题(暂不考虑多项填空)' )
sequence=models.BigIntegerField ( null=True, unique=False,default='100', verbose_name='试题排序,值越大排越前面' )
'''
paperid=BigInteger
papername=VARCHAR
questionname=VARCHAR
options=Text
score=BigInteger
answer=VARCHAR
analysis=Text
type=BigInteger
sequence=BigInteger
'''
class Meta:
db_table = 'examquestion'
verbose_name = verbose_name_plural = '试题表'
class examrecord(BaseModel):
__doc__ = u'''examrecord'''
__tablename__ = 'examrecord'
__authTables__={}
__authSeparate__='是'#后台列表权限
__foreEndListAuth__='是'#前台列表权限foreEndListAuth[是/否];当foreEndListAuth=是,刷的表新增用户字段userid,前台list列表接口仅能查看自己的记录和add接口后台赋值userid的值
__examinationPaper__='是'#[examinationPaper:是/否]后台生成普通试卷功能
addtime = models.DateTimeField(auto_now_add=False, verbose_name=u'创建时间')
userid=models.BigIntegerField ( null=False, unique=False, verbose_name='用户id' )
username=models.CharField ( max_length=255, null=True, unique=False, verbose_name='用户名' )
paperid=models.BigIntegerField ( null=False, unique=False, verbose_name='试卷id(外键)' )
papername=models.CharField ( max_length=255,null=False, unique=False, verbose_name='试卷名称' )
questionid=models.BigIntegerField ( null=False, unique=False, verbose_name='试题id(外键)' )
questionname=models.CharField ( max_length=255,null=False, unique=False, verbose_name='试题名称' )
options=models.TextField ( null=True, unique=False, verbose_name='选项,json字符串' )
score=models.BigIntegerField ( null=True, unique=False,default='0', verbose_name='分值' )
answer=models.CharField ( max_length=255, null=True, unique=False, verbose_name='正确答案' )
analysis=models.TextField ( null=True, unique=False, verbose_name='答案解析' )
myscore=models.BigIntegerField ( null=False, unique=False,default='0', verbose_name='试题得分' )
myanswer=models.CharField ( max_length=255, null=True, unique=False, verbose_name='考生答案' )
'''
userid=BigInteger
username=VARCHAR
paperid=BigInteger
papername=VARCHAR
questionid=BigInteger
questionname=VARCHAR
options=Text
score=BigInteger
answer=VARCHAR
analysis=Text
myscore=BigInteger
myanswer=VARCHAR
'''
class Meta:
db_table = 'examrecord'
verbose_name = verbose_name_plural = '考试记录表'
五,相关作品展示
基于Java开发、Python开发、PHP开发、C#开发等相关语言开发的实战项目
基于Nodejs、Vue等前端技术开发的前端实战项目
基于微信小程序和安卓APP应用开发的相关作品
基于51单片机等嵌入式物联网开发应用
基于各类算法实现的AI智能应用
基于大数据实现的各类数据管理和推荐系统