温州网站优化排名,每平每家设计家官网,新专业建设的重点任务,手机网站源码怎么打开摘 要 本论文主要论述了如何使用python语言、Django框架开发一个在线考试系统#xff0c;本系统将严格按照软件开发流程#xff0c;进行各个阶段的工作#xff0c;面向对象编程思想进行项目开发。在引言中#xff0c;作者将论述该系统的当前背景以及系统开发的目的#xf… 摘 要 本论文主要论述了如何使用python语言、Django框架开发一个在线考试系统本系统将严格按照软件开发流程进行各个阶段的工作面向对象编程思想进行项目开发。在引言中作者将论述该系统的当前背景以及系统开发的目的后续章节将严格按照软件开发流程对系统进行各个阶段分析设计。 在线考试系统的主要使用者分为管理员学生用户教师用户实现功能包括后台首页资源管理在线考试系统用户管理员教师用户学生用户模块管理通知公告成绩分析等功能。 本系统的使用可以实现在线考试系统的信息化可以方便学生用户线上参加考试查询成绩查看考试通知也方便教师在线设计题库阅卷改卷维护成绩方便管理员对人员进行更加方便快捷的管理大幅提高考试、阅卷的效率。 关键词在线考试Django框架Mysql数据库 Django online exam system Abstract This paper mainly discusses how to develop an online exam system using Python language and django framework. The system will strictly follow the software development process, carry out various stages of work, and use object-oriented programming ideas for project development. In the introduction, the author will discuss the current background of the system and the purpose of system development. Subsequent chapters will strictly follow the software development process to analyze and design the system at each stage. The main users of the online exam system are administrators, student users, and teacher users. The implementation functions include the backend homepage, resource management (online exam), system users (administrators, teacher users, and student users), module management (notification and announcement, score analysis), and other functions. The use of this system can achieve the informatization of the online exam system, which can facilitate student users to participate in exams online, query grades, view exam notifications, and also facilitate teachers to design question banks online, grade and change papers, maintain grades, and facilitate administrators to manage personnel more conveniently and quickly, greatly improving the efficiency of exams and grading. Key words: online exam; Django framework; MySQL database 目 录 摘 要 Abstract 第1章 绪论 1.1 研究背景 1.2 开发现状 1.3 研究方法 第2章 相关技术介绍 2.1 开发技术说明 2.2 Python简介 2.3 Django框架 2.4 MD5加密技术 2.5 Mysql数据库 2.6 B/S架构 第3章 系统分析 3.1 可行性分析 3.2 功能需求分析 3.3 非功能需求分析 3.4 安全性需求分析 3.4.1 系统的安全性 3.4.2 数据的安全性 3.5 数据流程分析 第4章 系统设计 4.1 系统架构设计 4.2 系统总体设计 4.3 系统功能设计 4.4 数据库设计 4.4.1 数据需求分析 4.4.2 数据库概念设计 4.4.3 数据库表设计 第5章 系统实现 5.1 数据库访问层的实现 5.2 登录模块的实现 5.3 用户资料修改模块的实现 5.4 成绩查询模块的实现 5.5 在线考试模块的实现 5.6 考试题库模块的实现 5.7 成绩分析模块的实现 第6章 系统测试 6.1 测试目的 6.2 功能测试 6.3 性能测试 第7章 总结与展望 参考文献 致谢 绪论 研究背景 在20世纪末期国家就提出了教育要面向四个现代化同时也提出了要大力发展教育手段和教育方式的信息化建设。在这样的背景和需求下基于当今的互联网技术和计算机信息技术的在线考试系统就应运而生了。人们急切地需要在在线考试中利用现代网络技术达到教师工作量减少并且提高学校及其他工作人员工作效率的目的。同时与传统的考试形式相比考试的质量也更能得以保证从而使得考试变得更为客观公正。 在线考试系统的实现让考试不再局限于只能在教室中进行它利用网络的优势使得考试不再像以前那么复杂考生也不再需要定时定点而是随时随地就能参与考试。在线考试系统具有传统的考试模式无法媲美的准确、科学、公平、方便等优点于是对在线考试系统的研究和建设也就在这样的环境中逐渐发展了起来。 开发现状 在越来越重视知识的当今社会各个国家都加大了在新一代培育上的投入都希望在以后的社会发展中走在互联网的前列从而在信息的飞速发展中占据一个有力的地位正是这个原因各地政府依托于互联网来实行教育教学并把此作为其民族发展的动力之源。 在外国澳大利亚在早期就开始投资建设“澳大利亚教育网”这个网络不但包含了澳大利亚全部的高校还要联通本国境内的每一所中小学。另外美国政府提出要到二十一世纪初让本国家所有学校和图书馆都搭载上互联网的快车让国内不论是哪个阶段的学生都可以享受到“21世纪教师”的网络服务因此提出了“教育技术规划Educational Technology Initiative”。到了1995年末国外一些教育机构开始开发自己的网上教育平台最早的有美国的NTU、英国的OPEN COLLEGE等这些都是那个时候实施互联网教育的典范。随着教育搭载上互联网的高速公路在线考试作为远程教育不可分割的一项随着互联网的大潮也如雨后春笋般迅速发展起来人们的选课和考试都在互联网上进行特别是互联网业务的普及、低成本的在线考试从技术和经济条件上已经日趋成熟。 在国内很大一部分的学校的教学教辅工作还普遍停留在传统的方式上例如采用传统的纸质考试测试方法但是传统的考试每次都需要人为的出卷、组织考试、批改试卷并且做出许多试卷分析和成绩评估作为老师一次考试的实施给他们带来了许多的麻烦并且随着教育现代化考试类型的增加和考试要求的更加严格教师的工作也会变得越来越繁重。而现在人们普遍认为的网络教育也是停留在网上报名和成绩查询没有形成相应的规模而国外网上提交作业和考试已经变得非常普及所以传统考试方式终将面临变革在线考试系统应运而生。 研究方法 首先通过引擎搜索或者查阅相关文献资料了解了本系统开发的背景以及设计系统的意义所在收集用户需求信息。其次在开发工具上最终确定选用Python平台来设计开发本系统Mysql作为设计数据库的工具。即利用Python语言实现用户界面并同数据库连接起来实现完整的通信功能。之后设计出系统大致的功能模块。主要从方便用户和系统管理员的角度进行分析明确该系统应该具有的功能。最终是测试系统通过用例测试发现存在的问题并找到解决的方案。利用现有的开发平台结合自己所学的知识在老师的指导帮助下来完成该设计确保系统的可用性、实用性。 相关技术介绍 开发技术说明 本系统前端部分基于MVVM模式进行开发采用B/S模式后端部分基于python的Django框架进行开发。 前端部分前端框架采用了比较流行的渐进式JavaScript框架Vue.js。使用Vue-Router和Vuex实现动态路由和全局状态管理,Ajax实现前后端通信Element UI组件库使页面快速成型项目前端通过栅格布局实现响应式可适应PC端、平板端、手机端等不同屏幕大小尺寸的完美布局展示。 后端部分采用Django作为开发框架同时集成Redis等相关技术。 Python简介 Python 是一个高层次的脚本语言结合了解释性、编译性、互动性和面向对象的。Python 的设计相比其他语言经常使用英文关键字和其他语言的一些标点符号它具有比其他语言更有特色语法结构具有很强的可读性。 解释型语言类似于Python和Perl语言这意味着开发过程中没有了编译这个环节。 交互式语言可以在一个 Python 提示符 后直接执行代码。 面向对象语言Python支持面向对象的风格或代码封装在对象的编程技术。 Django框架 Django是高水准的Python编程语言驱动的一个开源模型视图控制器风格的Web应用程序框架它起源于开源社区。使用这种架构程序员可以方便、快捷地创建高品质、易维护、数据库驱动的应用程序。这也正是OpenStack的Horizon组件采用这种架构进行设计的主要原因。另外在Dj ango框架中还包含许多功能强大的第三方插件使得Django具有较强的可扩展性。Django 项目源自一个在线新闻 Web 站点于 2005 年以开源的形式被释放出来。Django 框架的核心组件有用于创建模型的对象关系映射为最终用户设计较好的管理界面URL 设计设计者友好的模板语言缓存系统。 Django已经成为web开发者的首选框架是一个遵循 MVC 设计模式的框架。MVC是Model、View、Controller三个单词的简写分别代表模型、视图、控制器。Django其实也是一个MTV 的设计模式。MTV是Model、Template、View三个单词的简写分别代表模型、模版、视图。但是在Django中控制器接受用户输入的部分由框架自行处理所以 Django 里更关注的是模型Model、模板(Template)和视图Views称为 MTV模式。 MD5加密技术 MD5的全称是Message-Digest Algorithm 5(信息-摘要算法)于90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L. Rivest开发出来经MD2、MD3和MD4发展而来。MD5加密是让大容量信息在用数字签名软件签署私人密匙前被压缩成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。不管是MD2、MD4还是MD5它们都需要获得一个随机长度的信息并产生一个128位的信息摘要。虽然这些算法的结构或多或少有些相似但MD2的设计与MD4和MD5完全不同那是因为MD2是为8位机器做过设计优化的而MD4和MD5却是面向32位的电脑。这三个算法的描述和C语言源代码在Internet RFCs 1321中有详细的描述这是一份最权威的文档由Ronald L. Rivest在1992年8月向IETF提交。 Mysql数据库 Mysql 经过多次的更新功能层面已经非常的丰富和完善了从Mysql4版本到5版本进行了比较大的更新在商业的实际使用中取得了很好的实际应用效果。最新版本的Mysql支持对信息的压缩同时还能进行加密能更好的满足对信息安全性的需求。同时经过系统的多次更新数据库自身的镜像功能也得到了很大的增强运行的流畅度和易用性方面有了不小的进步驱动的使用和创建也更加的高效快捷。最大的变动还是进行了空间信息的显示优化能更加方便的在应用地图上进行坐标的标注和运算。强大的备份功能也保证了用户使用的过程会更加安心同时支持的Office特性还支持用户的自行安装和使用。在信息的显示形式上也进行了不小的更新增加了两个非常使用的显示区一个是信息区对表格和文字进行了分类处理界面的显示更加清爽和具体。第二是仪表的信息控件能在仪表信息区进行信息的显示同时还能进行多个信息的比对为用户的实际使用带来了很大的便捷[8][9]。 针对本文中设计的在线考试系统在实际的实现过程中最终选择Mysql数据库的主要原因在于在企业的应用系统应用及开发的过程中会存在大量的数据库比较频繁的操作而且数据的安全性要求也是非常的高。综合这些因素最终选择安全性系数比较高的Mysql来对在线考试系统后台数据进行存储操作。 数据库管理系统的总体结构图如下图所示。 图2-1 数据库组成结构 B/S架构 B/S架构采取浏览器请求服务器响应的工作模式。 用户可以通过浏览器去访问Internet上由Web服务器产生的文本、数据、图片、动画、视频点播和声音等信息 而每一个Web服务器又可以通过各种方式与数据库服务器连接大量的数据实际存放在数据库服务器中 从Web服务器上下载程序到本地来执行在下载过程中若遇到与数据库有关的指令由Web服务器交给数据库服务器来解释执行并返回给Web服务器Web服务器又返回给用户。在这种结构中将许许多多的网连接到一块形成一个巨大的网即全球网。而各个企业可以在此结构的基础上建立自己的Internet。 在 B/S 模式中用户是通过浏览器针对许多分布于网络上的服务器进行请求访问的浏览器的请求通过服务器进行处理并将处理结果以及相应的信息返回给浏览器其他的数据加工、请求全部都是由Web Server完成的。通过该框架结构以及植入于操作系统内部的浏览器该结构已经成为了当今软件应用的主流结构模式。 系统分析 可行性分析 技术性方面采用当前主流的Python技术进行系统后台主体框架的搭建实现后台页面的设计与美观调整以上技术均由本人经过系统学习并且都是在课程设计中实践过的可以使得开发更加便捷和系统。从技术角度看这个系统是完全可以实现的。 实用性方面本次设计的主要任务是在在线考试系统内方便学生用户线上参加考试查询成绩查看考试通知也方便教师在线设计题库阅卷改卷维护成绩方便管理员对人员进行更加方便快捷的管理大幅提高考试改卷的效率符合当前潮流的发展。从用户角度出发同时也考虑系统运营成本和人力资源采用网络上的便捷方式实现线上业务使得业务流程更系统也更方便用户的体验比较实用。 经济性方面由于本课题中设计的在线考试系统的主要目的是为了能够更加方便及快捷的进行信息的查询管理及检索服务也就是能够可以直接投入使用的信息化软件。系统的主要成本主要是集中在对使用数据后期继续维护及其管理更新这个操作上。但是一旦系统投入到实际的运行及使用之后就能够很好的提高信息查询检索的效率同时也需要有效的保证查询者的信息方面的安全性同时这个在线考试系统所带来的实际应用方面的价值是远远的超过了实际系统进行开发与维护方面的成本因此从经济上来说开发这个软件是可行的。 功能需求分析 在线考试系统的功能主要是方便学生用户线上参加考试查询成绩查看考试通知等。也方便教师在线设计题库阅卷改卷维护成绩方便管理员对人员进行更加方便快捷的管理大幅提高考试改卷的效率。 系统用例图如下所示。 图3-1 系统用例图 非功能需求分析 首先主要考虑的是系统功能软件在具体设计的环节上是不是能够较好的满足各类用户的基本功能需求如果不能较好的满足用户需求那么这个系统的存在是没有价值的。软件系统的非功能性求分析从7个方面展开一个是性能分析针对系统一个是安全分析针对系统一个是完整度分析针对系统一个是可维护分析针对系统一个是可扩展性分析针对系统一个是适应业务的性能分析。面对在线考试系统存在的性能、安全、扩展、完整度等7个方面性能综合比对分析后发现需要相应的非功能性需求分析。 安全性需求分析 系统的安全性 安全性对每一个系统来说都是非常重要的。安全性很好的系统可以保护企业的信息和用户的信息不被窃取。提高系统的安全性不仅是对用户的负责更是对企业的负责。尤其针对于在线考试系统来说必须要有很好的安全性来保障整个系统。 系统具有对使用者有权限控制针对角色的不通限制使用者的权限以此来确保系统的安全性。 数据的安全性 数据库中的数据是从外界输入的当数据的输入时由于种种原因输入的数据会无效或者是脏数据。因此怎样保证输入的数据符合规定成为了数据库系统尤其是多用户的关系数据库系统首要关注的问题。 因此在写入数据库时要保证数据完整性、正确性和一致性。 数据流程分析 对系统的数据流进行分析系统的使用者分为二类一般用户管理员。系统主要对界面信息传送登录信息的验证注册信息的接收用户各种操作的响应做处理。 系统顶层数据流图如下图所示。 图3-2 顶层数据流图 要判断用户是是什么身份是根据登录的数据来判断后跳转到对应的功能界面。在系统的内部用户就可以对数据进行操作数据库中心就可以接收到系统传输的有效数据流来对数据sql语句进行对应操作。 系统底层数据流图如下图所示。 图3-3 底层数据流图 系统可以分为前台和后台两部分每一种操作后系统都返回操作结果。前台和后台的数据连接主要通过数据库既分别对数据库做不同的操作。 系统设计 系统架构设计 本在线考试系统的架构设计主要分为可以3层主要有Web层业务层Model层。其中web层还包括View层和Controller层Model层包括元数据扩展层和数据访问层。 系统架构如下图所示。 图4-1 系统架构 系统总体设计 在线考试系统总体分为学生用户模块教师用户模块和管理员模块。 模块表现上是分别独立存在但是访问的数据库是一样的。每一个模块的功能都是根据先前完成的需求分析并查阅相关资料后整理制作的。 综上所述系统功能结构图如下图所示。 图4-2 系统功能结构图 系统功能设计 登录模块登录模块是进入系统的入口所有用户必须登录后才能访问系统。登录需要输入用户名和密码如果多次尝试登录需要输入验证码。登录时需要选择用户的角色是一般用户还是管理员登录等。登录成功后会通过数据库获取用户的权限并跳转至用户的主页面。 管理员人员管理模块管理员管理包括管理员的及用户添加修改和删除操作。添加管理员时先判断用户添加的管理员是否是admin如果不是则添加成功。修改删除同样。 数据库设计 数据需求分析 从前面可以分析到数据库中最重要的是房间信息用户信息管理员信息。分析可以得到如下数据描述 平台用户用于记录用户的各种信息包括用户名、密码、基本情况信息信誉、发布信息数等数据项。 管理员记录管理员的登录信息。包括用户名密码权限等数据项。 考试信息存储平台内的数据。包括科目名称、分数、时长等数据项。 数据库概念设计 根据前面的数据流程图结合系统的功能模块设计设计出符合系统的各信息实体。 系统ER图如下图所示。 图4-3 系统ER图 数据库表设计 在线考试系统所拥有的数据表如下用户信息表课程信息表等。 由于数据表较多只展示系统主要数据表如下表所示。 表access_token (登陆访问时长) 编号 名称 数据类型 长度 小数位 允许空值 主键 默认值 说明 1 token_id int 10 0 N Y 临时访问牌ID 2 token varchar 64 0 Y N 临时访问牌 3 info text 65535 0 Y N 4 maxage int 10 0 N N 2 最大寿命默认2小时 5 create_time timestamp 19 0 N N CURRENT_TIMESTAMP 创建时间 6 update_time timestamp 19 0 N N CURRENT_TIMESTAMP 更新时间 7 user_id int 10 0 N N 0 用户编号: 表auth (用户权限管理) 编号 名称 数据类型 长度 小数位 允许空值 主键 默认值 说明 1 auth_id int 10 0 N Y 授权ID 2 user_group varchar 64 0 Y N 用户组 3 mod_name varchar 64 0 Y N 模块名 4 table_name varchar 64 0 Y N 表名 5 page_title varchar 255 0 Y N 页面标题 6 path varchar 255 0 Y N 路由路径 7 position varchar 32 0 Y N 位置 8 mode varchar 32 0 N N _blank 跳转方式 9 add tinyint 3 0 N N 1 是否可增加 10 del tinyint 3 0 N N 1 是否可删除 11 set tinyint 3 0 N N 1 是否可修改 12 get tinyint 3 0 N N 1 是否可查看 13 field_add text 65535 0 Y N 添加字段 14 field_set text 65535 0 Y N 修改字段 15 field_get text 65535 0 Y N 查询字段 16 table_nav_name varchar 500 0 Y N 跨表导航名称 17 table_nav varchar 500 0 Y N 跨表导航 18 option text 65535 0 Y N 配置 19 create_time timestamp 19 0 N N CURRENT_TIMESTAMP 创建时间 20 update_time timestamp 19 0 N N CURRENT_TIMESTAMP 更新时间 表exam (考试) 编号 名称 数据类型 长度 小数位 允许空值 主键 默认值 说明 1 exam_id mediumint 8 0 N Y 考试id 2 name varchar 32 0 N N 考试名称[2,32] 3 duration int 10 0 Y N 答题时长 4 score double 9 2 Y N 总分 5 status varchar 10 0 Y N 状态启用、禁用 6 create_time timestamp 19 0 N N CURRENT_TIMESTAMP 创建时间 7 update_time timestamp 19 0 N N CURRENT_TIMESTAMP 更新时间 表exam_question (试题) 编号 名称 数据类型 长度 小数位 允许空值 主键 默认值 说明 1 exam_question_id mediumint 8 0 N Y 2 type varchar 20 0 Y N 类型 3 title varchar 255 0 Y N 题目 4 question_item varchar 500 0 Y N 选项 5 answer varchar 500 0 Y N 参考答案 6 score double 9 2 Y N 总分 7 question_order int 10 0 Y N 排序 8 exam_id mediumint 7 0 Y N 所属试卷 9 create_time timestamp 19 0 N N CURRENT_TIMESTAMP 创建时间 10 update_time timestamp 19 0 N N CURRENT_TIMESTAMP 更新时间 表hits (用户点击) 编号 名称 数据类型 长度 小数位 允许空值 主键 默认值 说明 1 hits_id int 10 0 N Y 点赞ID 2 user_id int 10 0 N N 0 点赞人 3 create_time timestamp 19 0 N N CURRENT_TIMESTAMP 创建时间 4 update_time timestamp 19 0 N N CURRENT_TIMESTAMP 更新时间 5 source_table varchar 255 0 Y N 来源表 6 source_field varchar 255 0 Y N 来源字段 7 source_id int 10 0 N N 0 来源ID 表notice_announcement (通知公告) 编号 名称 数据类型 长度 小数位 允许空值 主键 默认值 说明 1 notice_announcement_id int 10 0 N Y 通知公告ID 2 title varchar 64 0 Y N 标题 3 publisher varchar 64 0 Y N 发布人 4 relevant_attachments varchar 255 0 Y N 相关附件 5 content text 65535 0 Y N 内容 6 recommend int 10 0 N N 0 智能推荐 7 create_time datetime 19 0 N N CURRENT_TIMESTAMP 创建时间 8 update_time timestamp 19 0 N N CURRENT_TIMESTAMP 更新时间 表performance_analysis (成绩分析) 编号 名称 数据类型 长度 小数位 允许空值 主键 默认值 说明 1 performance_analysis_id int 10 0 N Y 成绩分析ID 2 course_name varchar 64 0 Y N 课程名称 3 teacher int 10 0 Y N 0 任课教师 4 number_of_examinees varchar 64 0 Y N 考试人数 5 maximum_score varchar 64 0 Y N 最高分 6 lowest_score varchar 64 0 Y N 最低分 7 average varchar 64 0 Y N 平均分 8 number_of_passes varchar 64 0 Y N 及格人数 9 pass_rate varchar 64 0 Y N 及格率 10 performance_analysis text 65535 0 Y N 成绩分析 11 recommend int 10 0 N N 0 智能推荐 12 create_time datetime 19 0 N N CURRENT_TIMESTAMP 创建时间 13 update_time timestamp 19 0 N N CURRENT_TIMESTAMP 更新时间 表student_users (学生用户) 编号 名称 数据类型 长度 小数位 允许空值 主键 默认值 说明 1 student_users_id int 10 0 N Y 学生用户ID 2 student_id varchar 64 0 Y N 学生学号 3 student_name varchar 64 0 Y N 学生姓名 4 class_name varchar 64 0 Y N 班级名称 5 examine_state varchar 16 0 N N 已通过 审核状态 6 recommend int 10 0 N N 0 智能推荐 7 user_id int 10 0 N N 0 用户ID 8 create_time datetime 19 0 N N CURRENT_TIMESTAMP 创建时间 9 update_time timestamp 19 0 N N CURRENT_TIMESTAMP 更新时间 表teacher_user (教师用户) 编号 名称 数据类型 长度 小数位 允许空值 主键 默认值 说明 1 teacher_user_id int 10 0 N Y 教师用户ID 2 teacher_id varchar 64 0 N N 教师工号 3 teacher_name varchar 64 0 Y N 教师姓名 4 examine_state varchar 16 0 N N 已通过 审核状态 5 recommend int 10 0 N N 0 智能推荐 6 user_id int 10 0 N N 0 用户ID 7 create_time datetime 19 0 N N CURRENT_TIMESTAMP 创建时间 8 update_time timestamp 19 0 N N CURRENT_TIMESTAMP 更新时间 表upload (文件上传) 编号 名称 数据类型 长度 小数位 允许空值 主键 默认值 说明 1 upload_id int 10 0 N Y 上传ID 2 name varchar 64 0 Y N 文件名 3 path varchar 255 0 Y N 访问路径 4 file varchar 255 0 Y N 文件路径 5 display varchar 255 0 Y N 显示顺序 6 father_id int 10 0 Y N 0 父级ID 7 dir varchar 255 0 Y N 文件夹 8 type varchar 32 0 Y N 文件类型 表user (用户账户用于保存用户登录信息) 编号 名称 数据类型 长度 小数位 允许空值 主键 默认值 说明 1 user_id mediumint 8 0 N Y 用户ID[0,8388607]用户获取其他与用户相关的数据 2 state smallint 5 0 N N 1 账户状态[0,10](1可用|2异常|3已冻结|4已注销) 3 user_group varchar 32 0 Y N 所在用户组[0,32767]决定用户身份和权限 4 login_time timestamp 19 0 N N CURRENT_TIMESTAMP 上次登录时间 5 phone varchar 11 0 Y N 手机号码[0,11]用户的手机号码用于找回密码时或登录时 6 phone_state smallint 5 0 N N 0 手机认证[0,1](0未认证|1审核中|2已认证) 7 username varchar 16 0 N N 用户名[0,16]用户登录时所用的账户名称 8 nickname varchar 16 0 Y N 昵称[0,16] 9 password varchar 64 0 N N 密码[0,32]用户登录所需的密码由6-16位数字或英文组成 10 email varchar 64 0 Y N 邮箱[0,64]用户的邮箱用于找回密码时或登录时 11 email_state smallint 5 0 N N 0 邮箱认证[0,1](0未认证|1审核中|2已认证) 12 avatar varchar 255 0 Y N 头像地址[0,255] 13 create_time timestamp 19 0 N N CURRENT_TIMESTAMP 创建时间 表user_answer (用户答题) 编号 名称 数据类型 长度 小数位 允许空值 主键 默认值 说明 1 user_answer_id mediumint 8 0 N Y 2 user_id mediumint 7 0 N N 用户ID[0,8388607]用户获取其他与用户相关的数据 3 exam_id mediumint 7 0 N N 0 考试id 4 score double 9 2 Y N 0.00 分数 5 answers text 65535 0 Y N 答案 6 score_detail text 65535 0 Y N 评分详情 7 objective_score double 9 2 Y N 0.00 客观题得分 8 subjective_score double 9 2 Y N 0.00 主观题得分 9 score_state tinyint 4 0 Y N 0 评分状态 10 nickname varchar 255 0 Y N 提交人 11 create_time timestamp 19 0 N N CURRENT_TIMESTAMP 创建时间 12 update_time timestamp 19 0 N N CURRENT_TIMESTAMP 更新时间 表user_group (用户组用于用户前端身份和鉴权) 编号 名称 数据类型 长度 小数位 允许空值 主键 默认值 说明 1 group_id mediumint 8 0 N Y 用户组ID[0,8388607] 2 display smallint 5 0 N N 100 显示顺序[0,1000] 3 name varchar 16 0 N N 名称[0,16] 4 description varchar 255 0 Y N 描述[0,255]描述该用户组的特点或权限范围 5 source_table varchar 255 0 Y N 来源表 6 source_field varchar 255 0 Y N 来源字段 7 source_id int 10 0 N N 0 来源ID 8 register smallint 5 0 Y N 0 注册位置: 9 create_time timestamp 19 0 N N CURRENT_TIMESTAMP 创建时间 10 update_time timestamp 19 0 N N CURRENT_TIMESTAMP 更新时间 系统实现 数据库访问层的实现 该系统是通过jdbc和MySQL达成连接的新建一个jdbc.properties文件来填写与数据库连接所需要的驱动和参数。 class AccessToken extends Base { protected $table access_token; //数据表名 protected $table_id token; //数据表名 protected $validate AccessToken; //数据表名 protected $model; public function __construct(){ $this-model new Model(); } } 第一个参数代表MySQL数据库的驱动第二个参数代表要连接的数据库第三个和第四个参数代表数据库连接名和密码。 后台与数据库访问主要是通过HQL语句来进行查询的查询语句中的表名是表格的实体类名在这种查询语句中*是不允许使用的除非适合聚合函数一起使用才可以。 登录模块的实现 主要由两部分组成登录前的登录界面以及登录后的用户功能界面。登录界面要求用户输入用户名和密码当用户名和密码其中一个输入为空时给出提示“用户名密码不能为空”。获取用户名和密码后到数据库中查找如果用户名存在以及对应的密码正确则登录成功否则登录失败。登录失败后给出提示并把焦点停在文本框中。登录成功后将该次会话的全局变量username设置为用户名。登录成功后进入会员的功能模块主要有会员基本信息修改已经发布试题信息管理发布信息和退出功能。退出功能是清除全局变量username的值并跳回到首页。 登录流程图如下图所示。 图5-1登录流程图 用户登录界面如下图所示 图5-2用户登录界面 用户登录的关键代码如下 public function login() { if (Request::isPost()) { $request Request::param(); $result $this-validate($request, $this-validate); if (true ! $result) { // 验证失败 输出错误信息 $data[error] 30000; $data[message] $result; } else { $request[password] md5($request[password]); $result $this-model-login($request, $this-table); $data $result; } } else { $data[error] 30000; $data[message] field的值不能为空; } return json_encode($data); } public function login($request[],$table_name ){ $username $request[username]; $password $request[password]; $bol $this-where([username$username])-find(); if ($bol){ $password md5($password); if ($request[password]$bol[password]) { //添加token信息 $access_token[create_time] date(Y-m-d H:i:s); $access_token[update_time] date(Y-m-d H:i:s); $access_token[info] json_encode($bol); // $access_token[info] $bol; $access_token[token] md5(date(Y-m-d H:i:s)); $bol_token Db::name(AccessToken)-insert($access_token); if ($bol_token){ $data[obj] $bol; $data[obj][token] $access_token[token]; return [result $data]; }else{ return [error [code 5000, message 登录失败,token生成失败]]; } } else { return [error [code 5000, message 登录失败,密码不正确]]; } }else{ return [error [code 5000, message 登录失败,账号不存在]]; } } 用户资料修改模块的实现 用户登录/注册成功之后可以修改自己的基本信息。修改页面的表单中每一个input的name值都要与实体类中的参数相匹配在用户点击修改页面的时候如果改后用户名与数据库里面重复了页面会提示该用户名已经存在了否则通过Id来查询用户并将用户的信息修改为表单提交的数据。 成绩查询模块的实现 系统还提供了查询考生成绩的功能管理人员可以查询班级内指定的多个考生成绩但是当需要查询单个考生成绩时只需要输入考试的科目就可以实现查询单个考生的成绩考生用户可以登录系统查询个人考试成绩。 成绩查询界面如下图所示。 图5-2成绩查询界面 在线考试模块的实现 考生开始考试后系统要显示考生信息、试卷、交卷。这个界面的功能使用的是Ajax框架通过客户端的Javascript和服务器端脚本实现。选择项和多选项都设置了单击事件。考生答过该题后系统就把该题答案传送到服务器并保存起来。当考生重新登录时试题仍然存在。另外也防止考生集中交卷的时候因系统反应不及而导致答案丢失。 提交答案由客户端函数SelectAnswer()来实现服务器端函数send_user_answer()把答案保存到数据库中。函数SelectAnswer()实时地把答案提交给服务器也使得二次登录成为可能。 结束考试有两个部分的功能当考试答完试卷但是交卷时间未到时可以提前交卷但是当考试结束时间已到考生仍未交卷系统则会强制收卷。函数SetTitle()在考试结束时自动转向处理考试结束的文件endexam.jsp完成自动收卷。 在线考试流程图如下图所示。 图5-3在线考试流程图 在线考试界面如下图所示。 图5-4在线考试列表界面 图5-5在线考试作答界面 考试题库模块的实现 题目管理包括单选题管理、判断题管理、多选题管理、主观题管理。教师可以点击“添加题目”超级链接既可跳转到timuxinxi_add.jsp页添加题目。题目添加成功后教师可以登录到个人中心查询个人的题目的信息。教师在timuxinxi_list.jsp进行题目管理timuxinxi_ list.jsp通过查询数据库的题目表列出所有题目管理信息每条题目对应一个删除按钮和修改按钮当教师点击删除按钮直接在数据库删除题目信息并重定向当前页面当教师选择点击修改则进入timuxinxi_update.jsp页面进行题目信息的修改。 试题录入界面采用ajax实现客户端的下拉框的响应事件的响应函数为select_ttype()通过这个函数显示指定题型的录入界面。“提交”按钮的响应函数为SubmitTimu()。服务器函数InsertTiMu()返回数据由函数dis_result()处理。 此页面的关键是编写试题信息单击提交按钮以完成信息的添加。如果未写入完整的试题信息例如如果未写入试题编号系统将给出相应的错误提示并且无法成功输入。数据以概念的形式以onsubmit “return checkForm”的形式写入以进行检查checkForm函数是一种用于写入数据的不同类型的校对方法是不是为空也是经过form表单中的οnsubmit”return checkForm()来检查。 管理员点击左侧菜单“试题信息管理”页面跳转到试题信息管理外观调用后台试题查询所有试题信息。并将信息密封到数据集合List绑定到请求对象然后页面跳转到相应的jsp显示出试题信息单击删除按钮完成试题信息的删除。 考试题库流程图如下图所示。 图5-6考试题库流程图 试题添加界面如下图所示。 图5-7试题添加界面 考试题库界面如下图所示。 l 图5-8考试题库界面 成绩分析模块的实现 在客观题的上系统能通过学生提交的答案和参考答案进行数据匹配和对比完全一致的判定为正确匹配不成功的判断为错误在客观题上只能由教师来进行手动打分首先提交试卷的主观题然后展示出来由教师手动输入并加入总分。 成绩分析页面设计效果如下图所示。 图5-9成绩分析管理界面 图5-10成绩分析维护界面 图5-11成绩分析统计界面 系统测试 测试目的 对任何系统而言测试都是必不可少的环节测试可以发现系统存在的很多问题所有的软件上线之前都应该进行充足的测试之后才能保证上线后不会Bug频发或者是功能不满足需求等问题的发生。下面分别从单元测试功能测试和用例测试来对系统进行测试以保证系统的稳定性和可靠性。 功能测试 下表是系统登录功能测试用例检测了用户名和密码的不同的输入情况观察系统的响应情况。得出该功能达到了设计目标。 表6-1 系统登录功能测试用例 功能描述 用于系统登录 测试目的 检测登录时的合法性检查 测试数据以及操作 预期结果 实际结果 输入的用户名和密码带有非法字符 提示用户名或者密码错误 与预期结果一致 输入的用户名或者密码为空 提示用户名或者密码错误 与预期结果一致 输入的用户名和密码不存在 提示用户名或者密码错误 与预期结果一致 输入正确的用户名和密码 登录成功 与预期结果一致 下表是注册功能测试用例检测了各种数据的输入情况观察系统的响应情况。得出该功能达到了设计目标。 表6-2 注册功能测试用例 功能描述 用于用户注册 测试目的 检测用户注册时的合法性检查 测试数据以及操作 预期结果 实际结果 输入的手机号不合法 提示请输入正确的手机号码 与预期结果一致 输入的字段为空 提示必填项不能为空 与预期结果一致 输入的密码少于6位 提示密码必须为6-12位 与预期结果一致 输入的密码大于12位 提示密码必须为6-12位 与预期结果一致 下表是内容管理功能的测试用例检测了内容管理中对考试信息的增加删除修改查询操作是否成功运行。观察系统的响应情况得出该功能也达到了设计目标系统运行正确。 前置条件用户登录系统。 表6-3 内容管理的测试用例 功能描述 用于内容管理 测试目的 检测内容管理时的各种操作的运行情况 测试数据以及操作 预期结果 实际结果 点击添加考试信息必填项合法输入点击保存 提示添加成功 与预期结果一致 点击添加考试信息必填项输入不合法点击保存 提示必填项不能为空 与预期结果一致 点击修改考试信息必填项修改为空点击保存 提示必填项不能为空 与预期结果一致 点击修改考试信息必填项输入不合法点击保存 提示必填项不能为空 与预期结果一致 点击删除考试信息选择考试信息删除 提示删除成功 与预期结果一致 点击搜索考试信息输入存在的考试信息名 查找出考试信息 与预期结果一致 点击搜索考试信息输入不存在的考试信息名 不显示考试信息 与预期结果一致 性能测试 使用阿里云PTSPerformance Testing Service性能测试服务对线上系统进行压力测试。线上服务器环境为1核心CPU1G内存1Mbps公网带宽Centos7.0操作系统。 压测过程中使用了2台并发机器每台机器20个用户并发对系统主页登录数据查询和数据维护等模块进行并发访问测试结果是有40个用户并发时数据管理相关页面的响应时间甚至达到了7s通过查看服务器出网流量发现已经达到1381kb/s可以看出服务器的带宽已经达到峰值如果系统使用5Mbps的带宽系统的响应时间和TPS将会大大增加。在整个测试的过程中CPU的使用率占用仅8%也提现出带宽瓶颈对系统的影响非常严重。 总结与展望 随着计算机互联网技术的迅猛发展各行各业都已经实现采用计算机相关技术对日益放大的数据进行管理。该课题为设计一个在线考试系统主要为了方便学生用户线上参加考试查询成绩查看考试通知也方便教师在线设计题库阅卷改卷维护成绩方便管理员对人员进行更加方便快捷的管理大幅提高考试、阅卷的效率。 在线考试系统的开发是以Python编程语言作为基础在PythonStrom平台上完成编码工作系统整体为B/S架构数据库系统使用Mysql。文中详细分析了在线考试系统的研究背景、研究目的和意义、开发工具和相关技术以及系统需求、系统详细设计和系统测试等等一系列内容。系统实现了在线考试系统所需的一些基本功能并通过测试对这些实现的功能进行了完善进而提高了系统整体的实用性。整个系统的开发过程中大量使用了Python相关的知识以及前端开发使用的html和javascript等同时涉及到了很多开源框架和组件例如后台系统中运用的MVVM架构、Freemarker模板引擎等前端运用的UI框架等。 系统投入运行时各功能均运行正常。系统的每个界面的操作符合常规逻辑对使用者来说操作简单界面友好。整个系统的各个功能设计合理体现了人性化。 但是由于自己在系统开发过程中对一些用到的相关知识和技术掌握不够牢固再加上自身开发经验欠缺因此系统在有些方面的功能还不够完善考虑的不够全面因此整个系统还有待日后逐步完善。 参考文献 [1]王小春,张鸿飞. 以Python实现实验室学生信息管理系统[J]. 电脑编程技巧与维护,2022,(10):117-118166. [2]蒋金涛. 基于Web的高校在线考试系统设计[J]. 无线互联科技,2022,19(19):88-90. [3]来学伟,鲁晓辉. 基于JavaScript在线考试系统的设计与实现[J]. 电脑知识与技术,2022,18(24):51-5255. [4]朱华汉. 在线考试系统APP的设计与开发研究[J]. 现代信息科技,2022,6(15):1-510. [5]王军. 基于Django的高校后勤库存管理系统设计实现[J]. 计算机时代,2022,(07):59-6165. [6]何佳颖,朱豪,李沂霏,潘永平. 基于python的作业文件管理系统[J]. 信息技术与信息化,2022,(06):64-68. [7]张旭辉,郭华瑞. 在线考试系统的设计与实现[J]. 电脑编程技巧与维护,2022,(06):13-1435. [8]李艳. B/S结构下英语笔译在线考试系统设计[J]. 信息技术与信息化,2022,(05):103-106. [9]熊辉,陈家豪,刘永乐,王晨阳,陈兰丽,孙建冬. 一种基于Python的图书馆自习室管理系统[J]. 科技创新与应用,2022,12(11):193-196. [10]Li Hui chao,Shen Shun fa. Construction of College Students’ Physical Health Data Sharing System Based on Django Framework[J]. Journal of Sensors,2021,2021. [11]何俊梅,杨华. 基于Python平台的医疗设备信息管理系统的设计与实现[A]. 中国医学装备协会China Association of Medical Equipment.中国医学装备大会暨2021医学装备展览会论文汇编[C].中国医学装备协会China Association of Medical Equipment:《中国医学装备》杂志社,2021:115-120. [12]胡小春,田婧,陈燕. 基于Python的图书馆信息管理系统研发[J]. 信息技术与信息化,2021,(05):37-40. [13]Kumaraguru Tarunika,Abirami P,Darshan K M,Angeline Kirubha S P,Latha S,Muthu P. Smart access development for classifying lung disease with chest x-ray images using deep learning.[J]. Materials today. Proceedings,2021,47(P1). [14]杨东宽,赵晓侠,杨微微,寇卫利. Python在线考试系统的分析与设计[J]. 电脑知识与技术,2021,17(11):71-73. [15]余斌. 基于Django的用户信息管理系统[J]. 电脑知识与技术,2021,17(05):89-90. [16]徐智伟. 基于Django的设备维护管理系统开发实践[J]. 信息系统工程,2021,(01):50-51. [17]Wu Hejing,Cui Ran. Research on Data Collection and Analysis of Second Hand House in China Based on Python[J]. International Journal of Advanced Network, Monitoring and Controls,2021,6(2). [18]Vamsi K. Manikanta,Lokesh P.,Reddy K. Neha,Swetha P.. Visualization of Real World Enterprise Data using Python Django Framework[J]. IOP Conference Series: Materials Science and Engineering,2021,1042(1). [19]欧瀚祺,杨莎,肖艳飞,彭佳红. 基于Django的物品租赁管理系统的设计[J]. 电脑知识与技术,2020,16(35):59-61. [20]郭守文. 基于Django的智慧社区后台管理系统设计与实现[D].浙江工业大学,2020. 致谢
本次设计历时3个月。在这个毕业设计中它离不开指导教师的指导使事情基本顺利。指导老师无论是在毕业设计历经中还是在论文做完中都给了了我特别大的助益。另1个方面教师认真负责的工作姿态谨慎的教学精神厚重的理论水准都使我获益匪浅。他勤恳谨慎的教学育人学习姿态也给我留下了特别特别深的感觉。我从老师那里学到了很多东西。在理论和实践中我的技能得到了特别大的提高。在此特向教师表示由衷的感激。
经过对该毕业设计的全部研究和开发我的系统研发经历了从需求分析到实现详细功能再到最终测试和维护的特殊进展。让我对系统研发有了更深层次的认识。如今我的动手本领单独处理疑惑的本领也获取到了特别大的演练学习增多这是这次毕业设计最好的收获。
最后在整个系统开发过程中我周围的同学和朋友给了我很多意见所以我很快就确认了系统的商业思想。在此我由衷地向他们表示感激。