基于Python的排考场系统的设计与实现*
2021-12-09邱红丽张舒雅
邱红丽 张舒雅
河南质量工程职业学院 河南 平顶山 467000
引言
随着教育信息化的发展,办公自动化也得到了越来越广泛的应用,同时也改变了人们的生活、工作和学习方式。特别是近几年计算机专业的火热发展,我们学院日益壮大,随着学生规模的大幅增加,以及课程、教师、学生、场地及时间等繁杂的数据关系,考场编排问题也变得越来越复杂,使得这项工作耗费了大量的人力。因此,急需一个简单实用的排考场系统,来解决这个烦琐复杂的工作,来提供工作效率。
Python是目前公认的全球5大流行语言之一,从云计算、大数据到人工智能,Python无处不在,通过对库的引用,能够实现对不同领域业务的开发。它采用极简主义设计思想,语法简单优雅,学习简单、上手快,不需要很复杂的代码和逻辑,即可实现强大的功能!并且,它编写的代码也具有夸平台的特点,在不同平台上运行时,几乎不需要做较大的改动。它不但可以进行web开发、数据采集、数据分析与可视化,还可以进行界面设计,开发出C/S架构的应用程序。
本系统是在分析了我们学院排考场的需求而开发的,采用C/S架构,使用Pyqt5插件进行界面设计,使用Python语言来读写excel,界面简单,非常实用。
1 需求分析
该智能考场编排系统是一款使用Python语言开发的桌面版应用程序,能够帮助考务人员快速生成考试相关文档,有效地减少考务工作人员因考试科目多、单科参加考试人员不定、考场人数不定、考场内科目不定等多种不确定因素增加的工作量。
本系统根据我们学院自身的实际情况出发,可以实现以下功能:①针对考试考务工作人员:可以编排出考试总体安排表,考务工作人员可以明确本次考试共安排多少场,每场考试有多少个考场和具体科目,每个科目参加考试的人数,每个考场的考试科目和人数等;②针对考场:可以生成考场座次表,显示每个考场详细的考生名单,每个考生的考试科目,考试开始与结束时间等;③针对班级:可以生成全班参加考试学生的考试科目和对应考号,及每个科目考试的起止时间等。
本系统已经在我院两个二级学院使用,系统界面可用性强、操作方便,达到学校师生和管理人员的要求,克服了手工编排的不足,提高了考务工作效率。
3 系统设计
3.1 开发工具
PyCharm是一种Python IDE(Integrated Development Environment,集成开发环境),带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试、版本控制,是专业开发人员和刚起步人员使用的有力工具。
Anaconda是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项,可以便捷获取包且对包能够进行管理。所以,在使用PyCharm开发工具时,可以和Anaconda一起搭配使用,方便插件的安装和管理。PyQt5是基于Digia公司的图形程式框架Qt5的python接口,它由一组python模块构成。PyQt5拥有超过620个类和6000函数及方法,可以运行于多个平台,包括:Unix,Windows, and Mac OS。anaconda里面是含有PyQt,在环境里搜索之后,可以看到,相关工具并没有全部安装,全部选中之后,安装即可;如果没有安装anaconda,可以在PyCharm平台中搜索安装。
本系统就是基于PyCharm开发平台,使用Python开发语言,主要实现了Python 使用xlsxwriter包对Excel文件中数据的读写功能。
3.2 功能实现
根据需求,本系统可以在短时间内编排出以下内容:①考试总体安排表,可以列出本次考试的场次,每场次的考场数和科目数,单科参加考试人数,单个考场的考试科目和人数等;②考场座次,本考场座号与对应的详细考生名单,每个考生的考试科目,考试开始与结束时间等;③班级学生考号,该班的考试科目及每个科目的开考时间,每个学生的考场座号,考场位置等。
使用本系统需要提供两个excel文件:学生考试名单和考场分布表,最后输出两个excel文件:考场安排表和班级座次表。输入的excel表格都有预先规定的模板,所以,在使用的时候要严格按照提供的模板输入自己的数据。其中学生考试名单至少包含四个字段:学号、姓名、班级、课程名称;考场分布表至少包含四个字段:考场号、教室、安排人数、考场位置。这些字段顺序可以改变,但是名字不能改变。
3.2.1 导入学生考试名单。学生考试名单至少包含四个字段:学号、姓名、班级和课程名称。由于每个同学需要参加考试的科目不止1门,名单导入后,系统会自动识别出考试科目,并把这些科目以列表的形式显示在界面上,最后考务人员可以选择根据课程分别导出考场安排表和班级座次表。
# 读入学生名单
self.df = pd.DataFrame(pd.read_excel(fileName,0,converters = {u’学号’:str}));
self.df = self.df.loc[:,[‘学号’,’姓名’,’班级’,’课程名称’]];
# 数据写入学生table
self.writeToTableWidget_old(self.df);
利用单因素检验分析不同年级研究生对于初级知识、中级知识、高级知识、初级技能、中级技能、高级技能、态度的差异情况。经过分析,不同年级研究生对于初级知识、中级知识、高级知识、初级技能、中级技能、高级技能、态度因素的P值均大于0.05,没有显著性差异。
# 课程写入课程列表treeWidget_subject
self.addNodetoTreeWidget_subject(self.treeWidget_subject,s.index.tolist());
3.2.2 导入考场分布表。考场分布表至少包含四个字段:考场号、教室、安排人数、考场位置。导入之后,可以看到考场号,教室位置,安排人数,以及安排的次序。然后,选择我们需要的考场,可以选择“全选”,然后可以看到总共能够安排多少人,如果我们需要安排的学生数量较少,可以根据情况减少考场数量,更改某个考场安排的人数,或者更改考场次序,从而保证我们的人数和考场相匹配。
# 读入考场
self.dfc = pd.DataFrame(pd.read_excel(fileName, 0,converters = {u’考场号’:str}));
self.dfc = self.dfc.loc[:, [‘考场号’, ‘教室’, ‘安排人数’, ‘考场位置’]];
# 数据写入考场table
self.writeToTableWidget_room(self.dfc);
3.2.3 导出考场安排表。考场安排表是学生考试的时候签到用的。包括院系名称、考试时间、考场、学号、姓名、班级、考试科目、签到及备注。在导出之前,要先选择学年学期、考试类型、具体考试时间。点击“导出考场安排表”之后,需要输入保存的文件名及合适的存储位置,供考试考务工作人员和考场内使用。
导出结果如图1所示:
图1 考场安排表
3.2.4 导出班级座次表。班级座次表用于用班级显示学生的考试信息,一个班级一个工作表,包含了学院名称、班级名称以及这个班每个学生的学号、姓名以及考场座次。点击“导出班级座次表”,进行保存,在导出的考场座次表中,点击各个工作表,各个班级辅导员和学生查看详细的考场座次信息。导出结果如图2所示:
图2 班级座次表
3.2.5 系统运行。该系统最终打包成一个exe文件,需要在64位操作系统上运行。当我们收集整理好考生名单表和考场分布表之后,就可以双击index.exe 文件运行程序。我们首先要导入“考场安排表”,然后再导入学生表,界面上会根据导入学生的考试科目,在界面上显示考试科目列表。最后考务人员,选择要考试的科目,以及要安排的考场和时间来导出最后需要的excel表。该系统,可以在单科考试人数不定、考场人数不定、单考场内科目不定等多种不确定因素存在的情况下,较快地编排出考试所需要的安排表格,并可实现Excel格式的导出;可以实现随时删减安排的考试科目、参加考试的班级及学生名单,指定考场编排人数,多科目合并考场编排等功能。主界面如下图所示:
图3 主界面
4 结束语
该系统小巧便捷,对平台系统的软、硬件要求不高,使用方便,便于“移植”,可适用于学校,或其他有考试安排工作的单位、部门或团体,目前已经在我院使用多年。但是,由于时间和人力方面的限制,本系统在部分功能上还需进一步完善,比如基础数据表(考场安排表和考生名单表)的获取还需要人工辅助,智能安排监考老师功能的完善,随时零星添加考试科目、参加考试的班级及参加考试学生名单等情况,在以后使用的过程中,会根据使用情况,进行一一完善。