flask校园学科竞赛管理系统-计算机毕业设计源码12876


目录

[摘 要](#摘 要)

Abstract

[第一章 绪 论](#第一章 绪 论)

[1.1 研究背景及意义](#1.1 研究背景及意义)

[1.2 国内外研究现状](#1.2 国内外研究现状)

[1.2.1 国内现状](#1.2.1 国内现状)

[1.2.2 国外现状](#1.2.2 国外现状)

[1.3 研究内容](#1.3 研究内容)

[1.4 论文组织结构](#1.4 论文组织结构)

[第二章 关键技术](#第二章 关键技术)

[2.1 B/S体系结构](#2.1 B/S体系结构)

[2.2 Flask 框架](#2.2 Flask 框架)

[2.3 MySQL数据库](#2.3 MySQL数据库)

[2.4 Python语言](#2.4 Python语言)

[第三章 系统分析](#第三章 系统分析)

[3.1 系统可行性分析](#3.1 系统可行性分析)

[3.1.1 技术可行性](#3.1.1 技术可行性)

[3.1.2 经济可行性](#3.1.2 经济可行性)

[3.1.3 社会可行性](#3.1.3 社会可行性)

[3.1.4 操作可行性](#3.1.4 操作可行性)

[3.2 系统功能分析](#3.2 系统功能分析)

[3.2.1 功能性分析](#3.2.1 功能性分析)

[3.2.2 非功能性分析](#3.2.2 非功能性分析)

[3.3 系统用例分析](#3.3 系统用例分析)

[3.4 系统总体流程设计](#3.4 系统总体流程设计)

[3.4.1 数据开发流程](#3.4.1 数据开发流程)

[3.4.2 用户登录流程](#3.4.2 用户登录流程)

[3.4.3 系统操作流程](#3.4.3 系统操作流程)

[3.4.4 添加信息流程](#3.4.4 添加信息流程)

[3.4.5 修改信息流程](#3.4.5 修改信息流程)

[3.4.6 删除信息流程](#3.4.6 删除信息流程)

[第四章 总体设计](#第四章 总体设计)

[4.1 系统架构设计](#4.1 系统架构设计)

[4.2 系统模块设计](#4.2 系统模块设计)

[4.3 数据库设计](#4.3 数据库设计)

[4.3.1 数据库概念结构设计](#4.3.1 数据库概念结构设计)

[4.3.2 数据库逻辑结构设计](#4.3.2 数据库逻辑结构设计)

[第五章 详细设计与实现](#第五章 详细设计与实现)

[5.1 学生用户功能模块](#5.1 学生用户功能模块)

[5.1.1 用户注册界面](#5.1.1 用户注册界面)

[5.1.2 用户登录模块](#5.1.2 用户登录模块)

[5.1.3 前台首页界面](#5.1.3 前台首页界面)

[5.1.4 公告通知模块](#5.1.4 公告通知模块)

[5.1.5 新闻资讯模块](#5.1.5 新闻资讯模块)

[5.1.6 竞赛信息模块](#5.1.6 竞赛信息模块)

[5.1.7 项目信息模块](#5.1.7 项目信息模块)

[5.1.8 个人中心模块](#5.1.8 个人中心模块)

[5.2 教师用户功能模块](#5.2 教师用户功能模块)

[5.2.1 竞赛信息管理模块](#5.2.1 竞赛信息管理模块)

[5.2.2 报名信息管理模块](#5.2.2 报名信息管理模块)

[5.2.3 作品提交管理模块](#5.2.3 作品提交管理模块)

[5.2.4 评分信息管理模块](#5.2.4 评分信息管理模块)

[5.3 管理员用户功能模块](#5.3 管理员用户功能模块)

[5.3.1 系统管理模块](#5.3.1 系统管理模块)

[5.3.2 角色管理模块](#5.3.2 角色管理模块)

[5.3.3 竞赛类型管理模块](#5.3.3 竞赛类型管理模块)

[5.3.4 公告通知管理模块](#5.3.4 公告通知管理模块)

[5.3.5 新闻管理模块](#5.3.5 新闻管理模块)

[5.3.6 报名信息管理模块](#5.3.6 报名信息管理模块)

[5.3.7 项目信息管理模块](#5.3.7 项目信息管理模块)

[第六章 系统测试](#第六章 系统测试)

[6.1 系统测试的目的](#6.1 系统测试的目的)

[6.2 测试方法](#6.2 测试方法)

[6.3 测试用例](#6.3 测试用例)

[6.3.1 用户登录功能测试](#6.3.1 用户登录功能测试)

[6.3.2 创建数据测试](#6.3.2 创建数据测试)

[6.3.3 修改数据测试](#6.3.3 修改数据测试)

[6.3.4 查询数据测试](#6.3.4 查询数据测试)

[6.4 测试结果](#6.4 测试结果)

[结 论](#结 论)

参考文献

[致 谢](#致 谢)

系统关键代码

随着校园学科竞赛活动日益丰富,传统竞赛管理方式暴露出信息分散、流程繁琐、沟通不畅等问题,严重影响了竞赛组织效率和师生参与体验。为解决这些痛点,本文设计并实现了基于 Flask 框架的校园学科竞赛管理系统。

该系统以 Python 为开发语言,借助 Flask 框架的灵活性搭建后端架构,结合 MySQL 数据库进行数据存储。系统涵盖了学生管理、教师管理、竞赛信息发布、报名管理、消息通知等核心功能,为学生、教师和管理员提供了一个集成化的管理平台。

在系统开发过程中,深入调研了校园学科竞赛管理的现状,明确了各角色的需求,设计了合理的功能模块架构。同时,研究了多角色协同管理机制,实现了竞赛流程的自动化和信息化。企业可直接在平台发布技术需求,优秀竞赛团队可通过竞标方式参与真实项目研发,形成"竞赛-孵化-产业化"闭环。通过优化系统界面设计和交互流程,提升了用户体验。

经过全面的功能测试、性能测试和安全测试,系统表现出良好的稳定性、可靠性和数据安全性。该系统的应用有效简化了竞赛管理流程,提高了工作效率和透明度,为校园学科竞赛的顺利开展提供了有力支持。

关键词: Python;Flask 框架;校园学科竞赛管理系统;MySQL;

Abstract

With the increasing richness of campus subject competition activities, traditional competition management methods have exposed problems such as scattered information, cumbersome processes, and poor communication, seriously affecting the efficiency of competition organization and the participation experience of teachers and students. To address these pain points, this article designs and implements a campus subject competition management system based on the Flask framework.

The system uses Python as the development language, leverages the flexibility of Flask framework to build the backend architecture, and combines MySQL database for data storage. The system covers core functions such as student management, teacher management, competition information release, registration management, and message notification, providing an integrated management platform for students, teachers, and administrators.

During the system development process, we conducted in-depth research on the current situation of campus subject competition management, clarified the needs of each role, and designed a reasonable functional module architecture. At the same time, a multi role collaborative management mechanism was studied to achieve automation and informatization of the competition process. Enterprises can directly publish technical requirements on the platform, and excellent competition teams can participate in real project research and development through bidding, forming a "competition incubation industrialization" loop. By optimizing the system interface design and interaction process, the user experience has been improved.

After comprehensive functional testing, performance testing, and security testing, the system has demonstrated good stability, reliability, and data security. The application of this system effectively simplifies the competition management process, improves work efficiency and transparency, and provides strong support for the smooth development of campus subject competitions.

Keywords: Python; Flask framework; Campus subject competition management system; MySQL;

    1. 研究 背景 及意义

随着校园学科竞赛活动日益丰富,其组织与管理复杂度显著提升。传统管理方式弊端凸显,严重影响组织效率与师生参与体验。信息管理上,信息分散于不同文档表格,查找更新不便,学生难以及时获取准确竞赛信息,教师指导缺乏便捷工具。流程方面,竞赛发布、报名、评审等环节多依赖人工操作,流程繁琐易出错,管理员需耗费大量精力统计信息和协调流程,沟通成本高且效率低下。

基于 Flask 框架的校园学科竞赛管理系统为解决这些问题提供了有效途径。该系统借助 Python 强大功能和 Flask 框架灵活性,结合 MySQL 数据库,构建集成化管理平台。它能集中发布与管理竞赛信息,学生可快速查询并在线报名;教师能便捷评审与指导;管理员可高效完成信息统计和流程协调。系统还具备良好的扩展性和可维护性,能根据需求定制和优化功能,提升校园学科竞赛管理水平和效率。

开发该系统具有多方面实际意义。从管理效率看,它实现竞赛管理流程数字化、自动化,大幅减少人工操作和沟通成本。管理员可通过系统快速发布信息、统计报名数据、安排评审流程,将更多精力投入竞赛策划和组织。对师生而言,系统提供便捷参与途径,学生能及时获取全面信息,在线报名、提交作品并查询参赛状态和成绩;教师能高效评审和指导,提高工作质量和效率。在数据管理方面,系统集中存储和分析竞赛相关数据,为后续竞赛组织和决策提供支持,通过分析参赛数据和评审结果,可优化竞赛方案,提升竞赛质量和影响力。此外,该系统开发还能促进校园学科竞赛的规范化和标准化管理,为其可持续发展奠定基础。

    1. 国内外研究现状
      1. 国内现状

国内校园学科竞赛日益普及,相关管理系统的研究与应用逐渐增多。许多高校开发了基于 Web 的竞赛管理平台,一定程度上提升了竞赛管理效率与师生参赛体验。例如,部分平台优化界面设计,提高了系统易用性,让学生能更快获取竞赛信息并完成报名。还有些系统引入在线评审模块,简化了教师评审工作,提升了评审效率。冀燕丽和关典以北京科技大学为例提到,他们开发的系统实现了竞赛信息集中展示、在线报名和作品提交等功能,为师生提供了便捷参赛途径。

然而,当前国内竞赛管理系统仍存在不足。大多侧重功能模块独立开发,缺乏多角色协同管理的系统性设计。在学生、教师和管理员间的信息共享与流程衔接方面,改进空间较大。学生难以及时了解教师指导意见和评审进度,教师也难以掌握学生参赛情况和需求,管理员协调各方工作存在困难。

现有系统的用户体验和界面友好性也有待提升。一些系统操作流程复杂,界面设计不简洁,导致师生使用易出错。部分系统响应速度慢,高并发时易卡顿甚至崩溃,影响使用体验。

此外,数据安全和隐私保护存在隐患。随着信息技术发展,竞赛相关数据量增加,保障数据安全性和隐私性成为重要问题。一些系统在数据存储和传输中缺乏有效加密措施,易导致数据泄露和滥用。国内竞赛管理系统虽在功能和用户体验上有进展,但仍需优化完善,以更好满足校园学科竞赛多样化需求。

      1. 国外现状

在国外,部分高校已开发出成熟的竞赛管理平台,功能完备且体验良好,为国内研究提供借鉴。

这些平台基础功能完善。竞赛信息发布上,能详细及时展示规则、时间、奖项等各类信息,让参赛者全面了解竞赛。在线报名便捷高效,参赛者可轻松完成流程。作品提交流畅,支持多种格式上传,方便成果展示。评审管理精细,可实现评委分配、评分统计等操作,保障评审公平公正。

部分平台集成即时通讯工具,实现参赛者与指导教师实时沟通。此功能优化竞赛流程,教师能及时指导反馈,参赛者可迅速解决问题,提高参赛效率与作品质量。

部分系统凭借强大数据分析功能,为竞赛组织者提供详细参赛者信息与作品分析。组织者据此了解参赛者背景、技能水平和作品特点,优化竞赛组织管理,如依专业分布调整题目,按作品质量分布确定评审标准。

Liu Z 等人提到,国外成熟竞赛管理平台在功能完整性和用户体验方面表现出色,注重用户需求,界面简洁友好,操作便捷高效,能提升用户参与度和满意度。

不过,国外竞赛管理平台在多角色协同管理、信息共享和用户体验等方面仍有提升空间。未来研究可加强多角色互动协同,提高信息共享效率,不断优化用户体验,以更好满足校园学科竞赛需求。

    1. 研究内容

本系统开发研究内容丰富且具针对性,致力于打造高效实用的校园学科竞赛管理系统。

系统需求分析与功能设计:深入调研校园学科竞赛管理现状,明确管理员、教师、学生不同需求,设计涵盖学生管理、教师管理、竞赛信息发布、报名管理、消息通知等核心功能的模块架构,确保功能贴合实际。

基于 Flask 框架的系统开发:选用 Python 开发语言,用 Flask 框架搭建后端架构,实现业务逻辑与数据交互。结合 MySQL 数据库进行数据存储设计,优化结构以保障数据安全和高效查询,同时设计简洁易用的前端界面提升用户体验。

多角色协同管理机制研究:研究管理员、教师、学生协同工作模式,设计合理权限管理和流程控制机制,实现竞赛信息发布、报名审核、作品提交、评审管理等功能流程化和自动化,提高管理效率。

用户体验优化与功能拓展:优化界面设计和交互流程,提升易用性与友好性;开发竞赛---课程学分转化互认系统和产学研对接门户,促进学科竞赛与教学、产业融合;增加赛事对比功能,为参赛决策提供支持。

系统测试与优化:进行全面功能、性能和安全测试,确保系统稳定可靠、数据安全,根据测试结果优化调整,收集用户反馈为未来功能拓展和升级指明方向。

    1. 论文组织结构

本论文共分为七个主要章节,具体结构如下:

  1. 绪论:介绍研究背景与意义,回顾国内外研究现状,并概述论文的组织结构。

  2. 相关技术介绍:本章节将对校园学科竞赛管理系统的实现关键技术进行简要介绍。

  3. 需求分析:对系统的功能需求和非功能需求进行分析,明确用户和管理员的需求,并进行可行性分析,包括技术、操作和经济可行性。

  4. 系统设计:涵盖系统架构设计、系统模块设计,并进行数据库的概念设计与表设计。

  5. 系统实现:具体描述各个功能模块的实现过程,展示系统如何根据需求进行开发。

  6. 系统测试:阐述测试的目的,分析测试结果并得出结论,以验证系统的稳定性和功能完整性。

  7. 总结:总结研究的主要成果和贡献,指出存在的不足及未来的研究方向。

  • 关键技术
    1. B/S体系结构

B/S体系[1],即Browser/Server体系,是一种常见的网络应用程序架构。其工作原理基于客户端与服务器之间的请求-响应模型。用户通过浏览器向服务器发送请求,服务器接收到请求后进行处理,并生成相应的响应结果,最终将响应返回给客户端。浏览器接收到服务器返回的响应后,解析其中的标记语言(如HTML[2]),并根据CSS样式表和PythonScript脚本来渲染页面,呈现给用户。用户可以与页面进行交互,例如点击链接、填写表单等操作,这些操作会触发新的请求,循环执行上述过程。

    1. Flask 框架

Flask 框架是轻量级的 Web 应用框架,在开发基于 Python 的校园学科竞赛管理系统中发挥着重要作用。它具有诸多特性,首先是灵活性高,Flask 被称为"微框架",核心部分简洁,开发者可按需选择扩展,能根据校园学科竞赛管理系统的具体需求灵活定制功能,如添加竞赛信息发布、报名管理等模块。

其次,易于上手,Flask 的代码结构清晰,文档丰富,对于开发者而言,学习成本较低,能快速搭建起系统的基本架构,缩短开发周期[3]。再者,Flask 具有良好的扩展性,有众多第三方扩展可供使用,如 Flask - SQLAlchemy 用于数据库操作,Flask - Login 用于用户认证等,能满足系统在数据存储、用户管理等方面的需求[4]。

在系统开发中,Flask 框架能高效实现业务逻辑和数据交互,为校园学科竞赛管理系统的开发提供了有力支持。

    1. MySQL数据库

MySQL是一种广泛使用的开源关系型数据库管理系统[5](RDBMS),其稳定性、可靠性和卓越性能使其成为众多应用程序的首选数据库。MySQL支持标准SQL语法,并提供丰富的功能和特性,如事务处理、触发器和存储过程等,以满足开发者对数据管理和操作的需求。MySQL具有良好的可扩展性,支持主从复制、分布式架构和集群部署,适用于各种规模和负载的应用场景。作为一个开源项目,MySQL拥有庞大的用户社区和活跃的开发者社区,为用户提供了丰富的文档、教程和支持资源。总之,MySQL是一款可靠、强大且灵活的关系型数据库管理系统[6],通过其卓越性能和可扩展性,帮助开发者高效地管理和操作数据,并得到了广大用户的认可和应用。

    1. Python语言

Python是一种简洁易读、跨平台且功能强大的编程语言[7]。它拥有庞大而活跃的社区,提供了丰富的第三方库和框架,如NumPy、Pandas和Flask,使开发人员能够快速构建各种应用程序。Python在数据处理和科学计算方面表现出色,通过相关库和工具,可以进行数据分析、机器学习和科学计算等任务。此外,Python广泛应用于Web开发[8]、自动化脚本、网络爬虫等领域,其多样性使其成为一个全能的编程语言。无论是初学者还是有经验的开发者,Python的简单语法、跨平台性以及强大的社区支持都能为提供高效、优雅和可靠的编程体验。总之,Python是一个强大而灵活的编程语言,深受开发人员喜爱,并在各个领域得到广泛应用。

  • 系统分析
    1. 系统可行性分析
      1. 技术可行性

使用 Flask 框架和 MySQL 进行校园学科竞赛管理系统开发具备高度的技术可行性。Flask 作为轻量级 Web 框架,灵活性强,易于扩展,能根据系统需求定制功能,其丰富的第三方扩展可满足数据存储、用户认证等多方面需求。Python 语言简洁易读,与 Flask 配合默契,能高效实现业务逻辑。MySQL 是成熟的关系型数据库,性能稳定、可靠,具备强大的数据处理和存储能力,且与 Flask 可通过 Flask - SQLAlchemy 良好集成,便于数据操作,为系统开发提供坚实技术支撑。

      1. 经济可行性

从经济成本和效益来看,开发和维护基于 Flask 框架和 MySQL 的校园学科竞赛管理系统具有显著优势。Flask 和 MySQL 均为开源软件,无需支付高额授权费用,降低了开发成本。开发过程中,Python 语言和 Flask 框架的高效性可缩短开发周期,减少人力成本。系统投入使用后,能提高竞赛管理效率,降低人工管理成本。通过对竞赛数据的分析,可优化竞赛方案,提升竞赛质量和影响力,带来潜在的社会效益和经济效益,投入产出比高。

      1. 社会可行性

此系统对校园学科竞赛管理具有重要的社会影响和价值。它能促进校园学科竞赛的规范化和标准化管理,提高竞赛组织效率和公平性,为学生提供更多展示才华的机会,激发学生的学习兴趣和创新能力。教师可通过系统更好地指导学生,提升教学质量。管理员能高效完成竞赛管理工作,节省时间和精力。系统还能加强学校与企业、社会机构的合作,促进产学研深度融合,为社会培养更多高素质的创新人才,推动校园学科竞赛事业的发展。

      1. 操作可行性

该系统操作具有良好的便捷性和易用性。系统前端设计简洁明了,界面友好,符合用户操作习惯。学生、教师和管理员等不同角色用户,可根据自身权限轻松访问相应功能模块。注册登录流程简单,信息填写清晰。竞赛信息查询、报名、作品提交等操作步骤明确,无需复杂培训即可上手。系统还提供详细的操作指南和提示信息,遇到问题可及时获取帮助,确保不同技术水平的用户都能顺利使用,提高了系统的可操作性。

    1. 系统功能分析
      1. 功能性分析

校园学科竞赛管理系统满足学校日常管理中的多样化需求,通过集成多种功能模块来提升教学管理的效率与质量。系统主要分为三大角色:学生用户、教师用户和管理员,每个角色根据其职责拥有不同的访问权限和操作功能。具体描述如下:

学生用户 模块:

注册登录:学生用户可以通过注册页面创建一个新账户,输入必要的信息如用户名、邮箱和密码。登录功能允许用户输入已注册的凭证来访问他们的个人账户。系统会提供忘记密码的选项,以便用户可以重置他们的密码。

首页:作为系统入口页面,展示重要信息概览,如热门竞赛、最新通知等,方便学生快速了解系统核心内容与动态。

公告通知:集中展示学校或系统发布的各类公告通知,确保学生及时获取竞赛安排变更、重要事项提醒等关键信息。

新闻资讯:呈现与学科竞赛相关的新闻资讯,涵盖赛事动态、获奖案例等,拓宽学生视野,激发参与竞赛兴趣。

竞赛信息:展示各类竞赛详细信息,学生可在此查看竞赛规则、时间等,并进行报名操作,参与心仪竞赛。

项目信息:呈现企业发布的全部项目信息,学生可点击感兴趣的项目竞标争取研发机会,还可在搜索栏进行筛选,点击"竞标"填写竞标报名表,点赞表达兴趣,收藏方便后续查看。

个人中心 - 个人首页:展示学生个人在系统内的关键信息概览,如已报名竞赛数、作品提交状态等,方便快速了解个人情况。

个人中心 - 作品提交:为学生提供作品上传功能,学生可将竞赛作品按要求提交至系统,完成竞赛流程重要环节。

个人中心 - 报名信息:集中展示学生已报名的竞赛信息,包括竞赛名称、时间等,方便学生随时查看与管理。

个人中心 - 评分信息:呈现学生在竞赛中获得的评分结果,学生可了解自身表现,总结经验,为后续竞赛做准备。

个人中心 - 收藏:允许学生收藏感兴趣的竞赛信息、新闻资讯等,方便后续快速查找与查看,节省时间与精力。

教师用户 模块:

数据分析:对竞赛相关数据进行统计分析,如学生报名情况、作品得分分布等,为教师教学与竞赛指导提供数据支持。

竞赛信息管理:教师可在此添加新的竞赛信息,包括竞赛名称、时间、规则等,确保竞赛信息及时更新与发布。以列表形式展示所有竞赛信息,教师可快速浏览、筛选,掌握竞赛整体情况,便于后续管理。

报名信息管理:对学生报名信息进行管理,如审核报名资格、查看报名详情等,保障竞赛报名工作有序进行。

作品提交管理:对学生提交的作品进行管理,包括查看作品、标记处理状态等,方便教师掌握作品提交进度与情况。

评分信息管理:涵盖作品得分与课程得分,对学生在相关学习或竞赛活动中所产生的作品得分以及与之关联的课程得分进行系统化管理,确保得分数据的准确性、完整性与安全性,为后续的成绩评定、课程学分转化互认等提供依据。

管理员 模块:

数据分析:全面分析系统内竞赛相关数据,如竞赛参与度、学生成绩趋势等,为学校竞赛组织与教学管理提供决策依据。

角色管理:对系统内不同角色(学生、教师、管理员)的权限进行管理,如分配、调整权限,保障系统安全与功能正常使用。

竞赛类型管理:对竞赛类型进行管理,如添加新类型、修改类型名称等,方便对竞赛进行分类管理与展示。

竞赛信息管理:综合管理竞赛信息,包括查看、编辑、删除竞赛信息等,确保竞赛信息准确、完整,满足系统运行需求。

报名信息管理:全面管理学生报名信息,如审核报名、导出报名数据等,保障报名流程规范、数据准确,便于后续统计与分析。

作品提交管理:对学生提交的作品进行统一管理,如查看作品详情、统计作品数量等,确保作品提交环节顺利进行。

评分信息管理:对教师提交的评分信息进行管理,如作品得分、课程得分、汇总评分结果等,保障评分工作公正、透明,结果准确可靠。

项目类型管理:对项目类型进行分类管理,方便按类型查看和管理项目,使项目信息更清晰有序。

项目信息管理:集中展示所有项目信息,可添加新项目,确保项目信息完整准确,便于学生参与。

竞标信息管理:管理学生竞标情况,查看竞标记录,确保竞标过程公平公正,保障项目研发顺利进行。

系统管理:对系统首页轮播图进行管理,如上传、更换、删除轮播图等,提升系统首页的视觉效果与吸引力。

公告通知管理:对系统内公告通知进行管理,如发布新公告、编辑公告内容等,确保公告通知及时、准确地传达给用户。

新闻管理:对新闻资讯进行管理,包括发布新新闻、编辑新闻内容等,为学生提供丰富、及时的竞赛相关资讯。还可以对新闻资讯进行分类管理,如添加新分类、调整分类顺序等,方便学生快速查找感兴趣的新闻资讯。

退出:用户点击退出按钮后,系统清除会话信息,返回登录页面。

      1. 非功能性分析

校园学科竞赛管理系统的非功能性需求比如校园学科竞赛管理系统的安全性怎么样,可靠性怎么样,性能怎么样,可拓展性怎么样等,具体可以表示在如下3-1表格中:

表3-1校园学科竞赛管理系统非功能需求表

|------|---------------------------------------------|
| 安全性 | 主要指校园学科竞赛管理系统数据库的安装,数据库的使用和密码的设定必须合乎规范。 |
| 可靠性 | 可靠性是指校园学科竞赛管理系统能够安装用户的指示进行操作,经过测试,可靠性90%以上。 |
| 性能 | 性能是影响校园学科竞赛管理系统占据市场的必要条件,所以性能最好要佳才好。 |
| 可扩展性 | 比如数据库预留多个属性,比如接口的使用等确保了系统的非功能性需求。 |
| 易用性 | 用户只要跟着校园学科竞赛管理系统的页面展示内容进行操作,就可以了。 |
| 可维护性 | 校园学科竞赛管理系统开发的可维护性是非常重要的,经过测试,可维护性没有问题 |

    1. 系统用例分析

校园学科竞赛管理系统的完整UML用例图分别是图3-1、3-2、3-3。

学生用户角色用例如下图所示。

          1. 学生用户角色用例图

教师用户角色用例如下图所示。

          1. 教师用户角色用例图

管理员角色用例如下图所示。

          1. 管理员角色用例图
    1. 系统总体流程设计
      1. 数据开发流程

系统开发流程的主要步骤,从需求分析到系统完成的全过程。流程包括需求分析、总体设计(结构、功能、数据)、详细设计(模块、编码)、模块整合与调用,以及测试、扩展和完善,最终完成系统的开发。本系统的开发流程如下图所示

          1. 系统开发流程图
      1. 用户登录流程

用户输入用户名和密码后,系统先检查输入是否为空,再验证用户名是否存在,若存在则通过用户名获取密码并校验。若密码正确则登录成功,否则提示密码错误。若用户名不存在或无法登录,提示用户操作无效。如下图所示。

          1. 登录流程图
      1. 系统操作流程

用户首先进入系统登录界面,输入用户名和密码后,系统验证信息是否正确。若验证失败,返回登录界面重新输入,若验证成功,则进入功能界面,执行相应功能处理后结束操作流程。操作流程如下图所示。

          1. 系统操作流程图
      1. 添加信息流程

管理员可以添加信息,用户添加可以自己权限内的信息,输入信息后,要想利用这个软件来进行系统的安全管理,首先需要登录到该软件中。添加信息流程如下图所示。

          1. 添加信息流程图
      1. 修改信息流程

用户首先选择需要修改的记录,输入修改后的数据,系统判断输入数据是否合法。若数据不合法,提示重新输入,若数据合法,则将修改后的数据写入数据库,完成操作后流程结束。修改信息流程图如下图所示。

          1. 修改信息流程图
      1. 删除信息流程

用户选择需要删除的记录后,系统判断是否确认删除。若未确认,返回选择环节,若确认删除,则更新数据库,删除对应记录,完成操作后流程结束。删除信息流程图如下图所示。

          1. 删除信息流程图
  • 总体 设计

本章主要讨论的内容包括校园学科竞赛管理系统的功能模块设计、数据库系统设计。

    1. 系统架构设计

校园学科竞赛管理系统从架构上分为三层:表现层(UI)、业务逻辑层(BLL)以及数据层(DL)。

          1. 校园学科竞赛管理系统架构设计图

表现层(UI):也称为用户界面层,它负责与用户进行直接的交互。一个优秀的UI设计能够显著提升用户的体验,确保用户在使用校园学科竞赛管理系统时感到舒适和便捷。为了确保良好的兼容性,UI界面设计需要适应不同版本的平台和各种屏幕尺寸的分辨率。此外,UI交互功能必须合理设计,确保用户的操作能够得到相应的反馈和结果,这要求表现层与业务逻辑层之间保持良好的通信和协同工作。

业务逻辑层(BLL):这一层主要处理校园学科竞赛管理系统的数据和业务逻辑。当用户通过表现层提交数据时,业务逻辑层会接收这些数据,进行处理,并将结果传递给数据层进行存储或查询。同时,当系统需要从数据层读取数据时,业务逻辑层会处理这些数据,并将其传递给表现层进行展示。

数据层(DL):虽然校园学科竞赛管理系统的数据存储在服务端的MySQL数据库中,但数据层仍然作为一个独立的部分存在。它的主要功能是存储和管理校园学科竞赛管理系统的数据。数据层与MySQL数据库进行交互,执行数据的增、删、改、查等操作,确保数据的完整性和安全性。

这三个层次相互独立但又紧密协作,共同构成了校园学科竞赛管理系统的完整架构。通过合理的分层设计,可以提高系统的可维护性、可扩展性和可重用性,为用户提供更好的服务和体验。

    1. 系统模块设计

在上一章节中主要对系统的功能性需求和非功能性需求进行分析,并且根据需求分析了校园学科竞赛管理系统中的用例。那么接下来就要开始对校园学科竞赛管理系统的架构、主要功能和数据库开始进行设计。校园学科竞赛管理系统根据前面章节的需求分析得出,校园学科竞赛管理系统的功能模块图如下图所示。

          1. 校园学科竞赛管理系统功能模块图
    1. 数据库设计

数据库设计一般包括需求分析、概念模型设计、数据库表建立三大过程,其中需求分析前面章节已经阐述,概念模型设计有概念模型和逻辑结构设计两部分。

      1. 数据库概念结构设计

下面是整个校园学科竞赛管理系统中主要的数据库表总E-R实体关系图。

          1. 校园学科竞赛管理系统总E-R关系图
      1. 数据库逻辑结构设计

通过上一小节中校园学科竞赛管理系统中总E-R关系图上得出一共需要创建多个数据表。在此主要罗列几个主要的数据库表结构设计。

表 4-1-access_token(登陆访问时长)

|----|-------------|-----------|-------|------|------|------------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | token_id | int | | 是 | 是 | 临时访问牌ID |
| 2 | token | varchar | 64 | 否 | 否 | 临时访问牌 |
| 3 | info | text | 65535 | 否 | 否 | 信息 |
| 4 | maxage | int | | 是 | 否 | 最大寿命:默认2小时 |
| 5 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 6 | update_time | timestamp | | 是 | 否 | 更新时间 |
| 7 | user_id | int | | 是 | 否 | 用户编号 |

表 4-2-article(文章)

|----|-------------|-----------|------------|------|------|------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | article_id | mediumint | | 是 | 是 | 文章id |
| 2 | title | varchar | 125 | 是 | 是 | 标题 |
| 3 | type | varchar | 64 | 是 | 否 | 文章分类 |
| 4 | hits | int | | 是 | 否 | 点击数 |
| 5 | praise_len | int | | 是 | 否 | 点赞数 |
| 6 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 7 | update_time | timestamp | | 是 | 否 | 更新时间 |
| 8 | source | varchar | 255 | 否 | 否 | 来源 |
| 9 | url | varchar | 255 | 否 | 否 | 来源地址 |
| 10 | tag | varchar | 255 | 否 | 否 | 标签 |
| 11 | content | longtext | 4294967295 | 否 | 否 | 正文 |
| 12 | img | varchar | 255 | 否 | 否 | 封面图 |
| 13 | description | text | 65535 | 否 | 否 | 文章描述 |

表 4-3-article_type(文章分类)

|----|-------------|-----------|-------|------|------|--------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | type_id | smallint | | 是 | 是 | 分类ID |
| 2 | display | smallint | | 是 | 否 | 显示顺序 |
| 3 | name | varchar | 16 | 是 | 否 | 分类名称 |
| 4 | father_id | smallint | | 是 | 否 | 上级分类ID |
| 5 | description | varchar | 255 | 否 | 否 | 描述 |
| 6 | icon | text | 65535 | 否 | 否 | 分类图标 |
| 7 | url | varchar | 255 | 否 | 否 | 外链地址 |
| 8 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 9 | update_time | timestamp | | 是 | 否 | 更新时间 |

表 4-4-auth(用户权限管理)

|----|----------------|-----------|-------|------|------|--------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | auth_id | int | | 是 | 是 | 授权ID |
| 2 | user_group | varchar | 64 | 否 | 否 | 用户组 |
| 3 | mod_name | varchar | 64 | 否 | 否 | 模块名 |
| 4 | table_name | varchar | 64 | 否 | 否 | 表名 |
| 5 | page_title | varchar | 255 | 否 | 否 | 页面标题 |
| 6 | path | varchar | 255 | 否 | 否 | 路由路径 |
| 7 | parent | varchar | 64 | 否 | 否 | 父级菜单 |
| 8 | parent_sort | int | | 是 | 否 | 父级菜单排序 |
| 9 | position | varchar | 32 | 否 | 否 | 位置 |
| 10 | mode | varchar | 32 | 是 | 否 | 跳转方式 |
| 11 | add | tinyint | | 是 | 否 | 是否可增加 |
| 12 | del | tinyint | | 是 | 否 | 是否可删除 |
| 13 | set | tinyint | | 是 | 否 | 是否可修改 |
| 14 | get | tinyint | | 是 | 否 | 是否可查看 |
| 15 | field_add | text | 65535 | 否 | 否 | 添加字段 |
| 16 | field_set | text | 65535 | 否 | 否 | 修改字段 |
| 17 | field_get | text | 65535 | 否 | 否 | 查询字段 |
| 18 | table_nav_name | varchar | 500 | 否 | 否 | 跨表导航名称 |
| 19 | table_nav | varchar | 500 | 否 | 否 | 跨表导航 |
| 20 | option | text | 65535 | 否 | 否 | 配置 |
| 21 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 22 | update_time | timestamp | | 是 | 否 | 更新时间 |

表 4-5-code_token(验证码)

|----|---------------|-----------|-----|------|------|-------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | code_token_id | int | | 是 | 是 | 验证码ID |
| 2 | token | varchar | 255 | 否 | 否 | 令牌 |
| 3 | code | varchar | 255 | 否 | 否 | 验证码 |
| 4 | expire_time | timestamp | | 是 | 否 | 失效时间 |
| 5 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 6 | update_time | timestamp | | 是 | 否 | 更新时间 |

表 4-6-collect(收藏)

|----|--------------|-----------|-----|------|------|-------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | collect_id | int | | 是 | 是 | 收藏ID |
| 2 | user_id | int | | 是 | 是 | 收藏人ID |
| 3 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 4 | source_field | varchar | 255 | 否 | 否 | 来源字段 |
| 5 | source_id | int | | 是 | 否 | 来源ID |
| 6 | title | varchar | 255 | 否 | 否 | 标题 |
| 7 | img | varchar | 255 | 否 | 否 | 封面 |
| 8 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 9 | update_time | timestamp | | 是 | 否 | 更新时间 |

表 4-7-comment(评论)

|----|--------------|-----------|------------|------|------|--------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | comment_id | int | | 是 | 是 | 评论ID |
| 2 | user_id | int | | 是 | 是 | 评论人ID |
| 3 | reply_to_id | int | | 是 | 否 | 回复评论ID |
| 4 | content | longtext | 4294967295 | 否 | 否 | 内容 |
| 5 | nickname | varchar | 255 | 否 | 否 | 昵称 |
| 6 | avatar | varchar | 255 | 否 | 否 | 头像地址 |
| 7 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 8 | update_time | timestamp | | 是 | 否 | 更新时间 |
| 9 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 10 | source_field | varchar | 255 | 否 | 否 | 来源字段 |
| 11 | source_id | int | | 是 | 否 | 来源ID |

表 4-8-competition_type(竞赛类型)

|----|---------------------|-----------|----|------|------|--------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | competition_type_id | int | | 是 | 是 | 竞赛类型ID |
| 2 | competition_type | varchar | 64 | 否 | 否 | 竞赛类型 |
| 3 | create_time | datetime | | 是 | 否 | 创建时间 |
| 4 | update_time | timestamp | | 是 | 否 | 更新时间 |

表 4-9-contest_information(竞赛信息)

|----|------------------------------------|-----------|------------|------|------|--------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | contest_information_id | int | | 是 | 是 | 竞赛信息ID |
| 2 | competition_no | varchar | 64 | 否 | 否 | 竞赛编号 |
| 3 | contest_name | varchar | 64 | 否 | 否 | 竞赛名称 |
| 4 | competition_type | varchar | 64 | 否 | 否 | 竞赛类型 |
| 5 | teacher_user | int | | 否 | 否 | 教师用户 |
| 6 | cover_image | varchar | 255 | 否 | 否 | 封面图片 |
| 7 | competition_time | varchar | 64 | 否 | 否 | 竞赛时间 |
| 8 | competition_location | varchar | 64 | 否 | 否 | 竞赛地点 |
| 9 | content_of_contest | longtext | 4294967295 | 否 | 否 | 竞赛内容 |
| 10 | hits | int | | 是 | 否 | 点击数 |
| 11 | praise_len | int | | 是 | 否 | 点赞数 |
| 12 | collect_len | int | | 是 | 否 | 收藏数 |
| 13 | comment_len | int | | 是 | 否 | 评论数 |
| 14 | enrollment_information_limit_times | int | | 是 | 否 | 报名限制次数 |
| 15 | create_time | datetime | | 是 | 否 | 创建时间 |
| 16 | update_time | timestamp | | 是 | 否 | 更新时间 |

表 4-10-enrollment_information(报名信息)

|----|---------------------------------|-----------|-------|------|------|--------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | enrollment_information_id | int | | 是 | 是 | 报名信息ID |
| 2 | competition_no | varchar | 64 | 否 | 否 | 竞赛编号 |
| 3 | contest_name | varchar | 64 | 否 | 否 | 竞赛名称 |
| 4 | competition_type | varchar | 64 | 否 | 否 | 竞赛类型 |
| 5 | teacher_user | int | | 否 | 否 | 教师用户 |
| 6 | competition_time | varchar | 64 | 否 | 否 | 竞赛时间 |
| 7 | competition_location | varchar | 64 | 否 | 否 | 竞赛地点 |
| 8 | student_users | int | | 否 | 否 | 学生用户 |
| 9 | student_name | varchar | 64 | 否 | 否 | 学生姓名 |
| 10 | registration_date | date | | 否 | 否 | 报名日期 |
| 11 | registration_remarks | text | 65535 | 否 | 否 | 报名备注 |
| 12 | examine_state | varchar | 16 | 是 | 否 | 审核状态 |
| 13 | examine_reply | varchar | 255 | 否 | 否 | 审核回复 |
| 14 | submission_of_works_limit_times | int | | 是 | 否 | 提交限制次数 |
| 15 | create_time | datetime | | 是 | 否 | 创建时间 |
| 16 | update_time | timestamp | | 是 | 否 | 更新时间 |
| 17 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 18 | source_id | int | | 否 | 否 | 来源ID |
| 19 | source_user_id | int | | 否 | 否 | 来源用户 |

表 4-11-hits(用户点击)

|----|--------------|-----------|-----|------|------|------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | hits_id | int | | 是 | 是 | 点赞ID |
| 2 | user_id | int | | 是 | 否 | 点赞人 |
| 3 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 4 | update_time | timestamp | | 是 | 否 | 更新时间 |
| 5 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 6 | source_field | varchar | 255 | 否 | 否 | 来源字段 |
| 7 | source_id | int | | 是 | 否 | 来源ID |

表 4-12-notice(公告)

|----|-------------|-----------|------------|------|------|------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | notice_id | mediumint | | 是 | 是 | 公告ID |
| 2 | title | varchar | 125 | 是 | 否 | 标题 |
| 3 | content | longtext | 4294967295 | 否 | 否 | 正文 |
| 4 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 5 | update_time | timestamp | | 是 | 否 | 更新时间 |

表 4-13-praise(点赞)

|----|--------------|-----------|-----|------|------|----------------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | praise_id | int | | 是 | 是 | 点赞ID |
| 2 | user_id | int | | 是 | 是 | 点赞人 |
| 3 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 4 | update_time | timestamp | | 是 | 否 | 更新时间 |
| 5 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 6 | source_field | varchar | 255 | 否 | 否 | 来源字段 |
| 7 | source_id | int | | 是 | 否 | 来源ID |
| 8 | status | tinyint | | 是 | 否 | 点赞状态:1为点赞,0已取消 |

表 4-14-rating_information(评分信息)

|----|-----------------------|-----------|-------|------|------|--------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | rating_information_id | int | | 是 | 是 | 评分信息ID |
| 2 | competition_no | varchar | 64 | 否 | 否 | 竞赛编号 |
| 3 | contest_name | varchar | 64 | 否 | 否 | 竞赛名称 |
| 4 | competition_type | varchar | 64 | 否 | 否 | 竞赛类型 |
| 5 | teacher_user | int | | 否 | 否 | 教师用户 |
| 6 | student_users | int | | 否 | 否 | 学生用户 |
| 7 | student_name | varchar | 64 | 否 | 否 | 学生姓名 |
| 8 | score_of_works | double | | 否 | 否 | 作品评分 |
| 9 | rating_date | date | | 否 | 否 | 评分日期 |
| 10 | scoring_content | text | 65535 | 否 | 否 | 评分内容 |
| 11 | create_time | datetime | | 是 | 否 | 创建时间 |
| 12 | update_time | timestamp | | 是 | 否 | 更新时间 |
| 13 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 14 | source_id | int | | 否 | 否 | 来源ID |
| 15 | source_user_id | int | | 否 | 否 | 来源用户 |

表 4-15-slides(轮播图)

|----|-------------|-----------|-----|------|------|-------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | slides_id | int | | 是 | 是 | 轮播图ID |
| 2 | title | varchar | 64 | 否 | 否 | 标题 |
| 3 | content | varchar | 255 | 否 | 否 | 内容 |
| 4 | url | varchar | 255 | 否 | 否 | 链接 |
| 5 | img | varchar | 255 | 否 | 否 | 轮播图 |
| 6 | hits | int | | 是 | 否 | 点击量 |
| 7 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 8 | update_time | timestamp | | 是 | 否 | 更新时间 |

表 4-16-student_users(学生用户)

|----|------------------|-----------|----|------|------|--------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | student_users_id | int | | 是 | 是 | 学生用户ID |
| 2 | student_name | varchar | 64 | 否 | 否 | 学生姓名 |
| 3 | student_age | varchar | 64 | 否 | 否 | 学生年龄 |
| 4 | student_gender | varchar | 64 | 否 | 否 | 学生性别 |
| 5 | examine_state | varchar | 16 | 是 | 否 | 审核状态 |
| 6 | user_id | int | | 是 | 否 | 用户ID |
| 7 | create_time | datetime | | 是 | 否 | 创建时间 |
| 8 | update_time | timestamp | | 是 | 否 | 更新时间 |

表 4-17-submission_of_works(作品提交)

|----|--------------------------------|-----------|-------|------|------|--------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | submission_of_works_id | int | | 是 | 是 | 作品提交ID |
| 2 | competition_no | varchar | 64 | 否 | 否 | 竞赛编号 |
| 3 | contest_name | varchar | 64 | 否 | 否 | 竞赛名称 |
| 4 | competition_type | varchar | 64 | 否 | 否 | 竞赛类型 |
| 5 | teacher_user | int | | 否 | 否 | 教师用户 |
| 6 | student_users | int | | 否 | 否 | 学生用户 |
| 7 | student_name | varchar | 64 | 否 | 否 | 学生姓名 |
| 8 | attachments_to_the_work | varchar | 255 | 否 | 否 | 作品附件 |
| 9 | date_of_submission | date | | 否 | 否 | 提交日期 |
| 10 | details_remarks | text | 65535 | 否 | 否 | 详情备注 |
| 11 | rating_information_limit_times | int | | 是 | 否 | 评分限制次数 |
| 12 | create_time | datetime | | 是 | 否 | 创建时间 |
| 13 | update_time | timestamp | | 是 | 否 | 更新时间 |
| 14 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 15 | source_id | int | | 否 | 否 | 来源ID |
| 16 | source_user_id | int | | 否 | 否 | 来源用户 |

表 4-18-teacher_user(教师用户)

|----|----------------------|-----------|----|------|------|--------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | teacher_user_id | int | | 是 | 是 | 教师用户ID |
| 2 | teachers_work_number | varchar | 64 | 否 | 否 | 教师工号 |
| 3 | teachers_name | varchar | 64 | 否 | 否 | 教师姓名 |
| 4 | teacher_age | varchar | 64 | 否 | 否 | 教师年龄 |
| 5 | examine_state | varchar | 16 | 是 | 否 | 审核状态 |
| 6 | user_id | int | | 是 | 否 | 用户ID |
| 7 | create_time | datetime | | 是 | 否 | 创建时间 |
| 8 | update_time | timestamp | | 是 | 否 | 更新时间 |

表 4-19-upload(文件上传)

|----|-----------|---------|-----|------|------|------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | upload_id | int | | 是 | 是 | 上传ID |
| 2 | name | varchar | 64 | 否 | 否 | 文件名 |
| 3 | path | varchar | 255 | 否 | 否 | 访问路径 |
| 4 | file | varchar | 255 | 否 | 否 | 文件路径 |
| 5 | display | varchar | 255 | 否 | 否 | 显示顺序 |
| 6 | father_id | int | | 否 | 否 | 父级ID |
| 7 | dir | varchar | 255 | 否 | 否 | 文件夹 |
| 8 | type | varchar | 32 | 否 | 否 | 文件类型 |

表 4-20-user(用户账户)

|----|-------------|-----------|-----|------|------|-----------------------------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | user_id | int | | 是 | 是 | 用户ID |
| 2 | state | smallint | | 是 | 否 | 账户状态:(1可用|2异常|3已冻结|4已注销) |
| 3 | user_group | varchar | 32 | 否 | 否 | 所在用户组 |
| 4 | login_time | timestamp | | 是 | 否 | 上次登录时间 |
| 5 | phone | varchar | 11 | 否 | 否 | 手机号码 |
| 6 | phone_state | smallint | | 是 | 否 | 手机认证:(0未认证|1审核中|2已认证) |
| 7 | username | varchar | 16 | 是 | 否 | 用户名 |
| 8 | nickname | varchar | 16 | 否 | 否 | 昵称 |
| 9 | password | varchar | 64 | 是 | 否 | 密码 |
| 10 | email | varchar | 64 | 否 | 否 | 邮箱 |
| 11 | email_state | smallint | | 是 | 否 | 邮箱认证:(0未认证|1审核中|2已认证) |
| 12 | avatar | varchar | 255 | 否 | 否 | 头像地址 |
| 13 | open_id | varchar | 255 | 否 | 否 | 针对获取用户信息字段 |
| 14 | create_time | timestamp | | 是 | 否 | 创建时间 |

表 4-21-user_group(用户组)

|----|--------------|-----------|-----|------|------|-------|
| 编号 | 字段名 | 类型 | 长度 | 是否非空 | 是否主键 | 注释 |
| 1 | group_id | mediumint | | 是 | 是 | 用户组ID |
| 2 | display | smallint | | 是 | 否 | 显示顺序 |
| 3 | name | varchar | 16 | 是 | 否 | 名称 |
| 4 | description | varchar | 255 | 否 | 否 | 描述 |
| 5 | source_table | varchar | 255 | 否 | 否 | 来源表 |
| 6 | source_field | varchar | 255 | 否 | 否 | 来源字段 |
| 7 | source_id | int | | 是 | 否 | 来源ID |
| 8 | register | smallint | | 否 | 否 | 注册位置 |
| 9 | create_time | timestamp | | 是 | 否 | 创建时间 |
| 10 | update_time | timestamp | | 是 | 否 | 更新时间 |

  • 详细设计与实现
    1. 学生用户 功能模块
      1. 用户注册界面

用户注册模块为新用户提供便捷的账户创建流程,用户需要填写必要的个人信息并选择合适的用户名和密码。通过简洁的表单设计,收集用户的必要信息,如用户名、密码、邮箱或手机号等,并进行输入验证以确保数据准确性。用户注册界面如下图所示。

          1. 用户注册模块图
      1. 用户登录模块

校园学科竞赛管理系统中的前台上注册后的用户是可以通过自己的用户名+密码进行登录的,当用户输入完整的自己的用户名+密码信息并点击"登录"按钮后,将会首先验证输入的有没有空数据,再次验证输入的用户名+密码和数据库中当前保存的用户信息是否一致,只有在一致后将会登录成功并自动跳转到校园学科竞赛管理系统的首页中,否则将会提示相应错误信息,登录模块如下图所示。

          1. 登录模块图
      1. 前台首页界面

首页展示系统的重要信息,如热门竞赛推荐、最新公告通知等。学生能快速浏览竞赛动态,了解近期有哪些值得关注的学科竞赛,为后续报名和参与做好准备,节省查找信息的时间。前台首页界面如下图所示。

          1. 前台首页模块图
      1. 公告通知 模块

学生可查看学校发布的关于学科竞赛的各类公告通知,包括竞赛规则变更、时间调整、获奖名单公布等。及时获取这些信息,有助于学生掌握竞赛的最新情况,避免因信息滞后而影响参赛。公告通知管理如下图所示

          1. 公告通知管理模块图
      1. 新闻资讯 模块

系统提供学科竞赛相关的新闻资讯,涵盖行业动态、竞赛经验分享等内容。学生可以从中获取更多关于学科竞赛的知识和信息,拓宽视野,为参赛提供参考和借鉴。新闻资讯如下图所示。

          1. 新闻资讯模块图
      1. 竞赛信息模块

学生能查询详细的竞赛信息,包括竞赛主题、参赛要求、报名时间、奖项设置等。若符合参赛条件,可在线提交报名信息,完成报名流程。报名成功后,可随时查看报名状态。竞赛信息界面如下图所示。

          1. 竞赛信息模块图
      1. 项目信息模块

项目信息:呈现企业发布的全部项目信息,学生可点击感兴趣的项目竞标争取研发机会,还可在搜索栏进行筛选,点击"竞标"填写竞标报名表,优秀竞赛团队可通过竞标方式参与真实项目研发,形成"竞赛-孵化-产业化"闭环。项目信息界面如下图所示。

          1. 项目信息模块图
      1. 个人中心模块

个人中心涵盖多项功能:首页展示学生基本信息与参赛概况;规定时间内可上传作品并查看提交状态;能查看和修改报名信息;竞赛后查看评分与评审意见;可收藏竞赛,收藏列表快速显示关注信息。个人中心如下图所示。

          1. 个人中心模块图
    1. 教师用户 功能模块
      1. 竞赛信息管理模块

竞赛信息管理:教师可以查看系统中所有的竞赛信息列表,包括竞赛名称、状态、报名时间等。通过列表,教师能全面了解竞赛的基本情况,为后续的管理和指导工作做好准备。有权限添加新的竞赛信息。在添加时,需详细填写竞赛的各项信息,如竞赛主题、参赛要求、评审标准等,确保竞赛信息的完整性和准确性。新闻资讯如下图所示。

          1. 竞赛信息管理模块图
      1. 报名信息 管理模块

报名信息管理:教师可查看学生的报名信息,包括学生的基本信息、报名的竞赛项目等。通过对报名信息的管理,教师能了解学生的参赛意向和情况,为后续的指导和组织工作提供依据。报名信息管理如下图所示。

          1. 报名信息管理模块图
      1. 作品提交 管理模块

作品提交管理:教师负责管理学生的参赛作品提交情况,查看作品是否按时提交、是否符合要求等。对于不符合要求的作品,教师可及时通知学生进行修改,确保竞赛的公平性和规范性。作品提交管理如下图所示。

          1. 作品提交管理模块图
      1. 评分信息 管理模块

评分信息管理:涵盖作品得分与课程得分,对学生在相关学习或竞赛活动中所产生的作品得分以及与之关联的课程得分进行系统化管理,确保得分数据的准确性、完整性与安全性,为后续的成绩评定、课程学分转化互认等提供依据。评分信息管理如下图所示。

          1. 评分信息管理模块图
    1. 管理员用户 功能模块
      1. 系统管理 模块

系统管理:管理员可设置系统首页的轮播图,展示重要的竞赛信息、获奖成果等。通过轮播图的设置,吸引师生的关注,提高系统的宣传效果。系统管理如下图所示。

          1. 系统管理模块图
      1. 角色管理模块

角色管理:管理员负责管理系统中的用户角色,包括添加、删除和修改用户角色。通过合理分配角色权限,确保不同用户只能访问和操作其权限范围内的功能,保障系统的安全性和数据的保密性。角色管理如下图所示。

          1. 角色管理模块图
      1. 竞赛类型管理模块

竞赛类型管理:管理员可对竞赛类型进行管理,如添加新的竞赛类型、修改现有竞赛类型的名称和描述等。通过对竞赛类型的管理,使系统能够适应不同学科和领域的竞赛需求。竞赛类型管理如下图所示。

          1. 竞赛类型管理模块图
      1. 公告通知管理模块

公告通知管理:管理员负责发布和管理系统的公告通知,确保师生能及时了解竞赛的最新动态和重要信息。对公告通知进行分类和归档,方便师生查询和查看。公告通知管理如下图所示。

          1. 公告通知管理模块图
      1. 新闻管理模块

新闻管理:管理员可发布和管理学科竞赛相关的新闻资讯,为师生提供丰富的信息资源。对新闻资讯进行审核和筛选,确保信息的真实性和可靠性。管理员可对新闻资讯进行分类管理,如按竞赛类型、发布时间等进行分类。通过资讯分类,方便师生快速查找和浏览感兴趣的新闻资讯。新闻管理如下图所示。

          1. 新闻管理模块图
      1. 报名信息管理模块

报名信息管理:管理员可查看和管理所有学生的报名信息,对报名信息进行审核和统计。通过对报名信息的管理,确保报名流程的顺利进行,为竞赛的组织和安排提供基础数据。报名信息管理如下图所示。

          1. 报名信息管理模块图
      1. 项目信息管理模块

项目信息管理:管理员可查看和管理所有项目信息,项目信息列表集中展示所有项目信息,管理员可添加新的项目信息,确保项目信息完整准确,便于学生参与。项目信息管理如下图所示。

          1. 项目信息管理模块图
  • 系统测试
    1. 系统测试的目的

测试的主要目的是确保系统的功能和性能满足预期的需求,同时识别和修复潜在的缺陷。通过系统测试,可以验证各个功能模块的正确性和稳定性,确保系统在不同使用场景下的表现符合设计要求。测试目的包括确认系统功能的完整性、验证数据处理的准确性、评估系统的性能和安全性。测试还可以提高用户满意度,保证用户在使用系统时获得流畅和可靠的体验。通过全面的测试,可以降低后期维护成本,减少系统上线后出现故障的风险,从而保障系统的长期稳定运行。

    1. 测试方法

在本系统中,测试方法主要依赖于测试用例的设计与执行。测试用例是根据系统需求文档编写的,覆盖所有功能模块及其边界情况。每个测试用例包含输入数据、预期结果和实际结果的对比,以验证系统的功能是否按预期工作。

常见的测试用例包括功能测试用例、边界测试用例和异常测试用例。功能测试用例针对系统的各项功能进行验证;边界测试用例则侧重于输入数据的边界条件,验证系统在极端情况下是否能够稳定运行;异常测试用例则用于验证系统在处理错误输入或异常情况时的反应。本文选择功能测试用例进行系统测试。

在测试执行过程中,记录每个用例的执行结果,并根据实际结果与预期结果的对比,判断系统是否存在缺陷。通过系统化的测试用例执行,可以有效提高测试的覆盖率和效率,为系统的最终上线提供保障。

    1. 测试用例
      1. 用户登录功能测试

表6-1 用户登录功能测试表

|------|----------------------------------------|
| 用例名称 | 用户登录系统 |
| 目的 | 测试用户通过正确的用户名和密码可否登录功能 |
| 前提 | 未登录的情况下 |
| 测试流程 | 1) 进入登录页面 2) 输入正确的用户名和密码 |
| 预期结果 | 用户名和密码正确的时候,跳转到登录成功界面,反之则显示错误信息,提示重新输入 |
| 实际结果 | 实际结果与预期结果一致 |

      1. 创建数据 测试

在系统中,创建功能也是基础功能之一,因此创建功能的测试很有代表性。在此章节主要列举在创建时各种情况下系统结果的测试。由于系统涉及创建功能操作过多,因此将多处统称创建功能。

创建数据用例如表6-2 所示。

表6-2 创建数据测试用例

|-------------------|------------------|------|
| 测试用例编号 | YL_05 ||
| 测试用例名称 | 系统使用者进行创建数据 ||
| 测试用例描述 | 使用者输入要创建的数据 ||
| 系统入口 | 浏览器 ||
| 步骤 | 预期结果 | 实际结果 |
| 输入完整并且格式正确的数据 | 提示"创建成功",并显示所有数据 | 预期结果 |
| 核心位置数据但非必要位置不输入数据 | 提示"创建成功",并显示所有数据 | 预期结果 |
| 核心数据位置不输入数据 | 提示"创建失败" | 预期结果 |

      1. 修改数据 测试

在系统中,修改功能是系统主要实现功能,因此修改功能的测试很有代表性。在此章节主要列举在修改时各种情况下系统结果的测试。由于系统涉及修改功能操作过多,因此将多处数据表记录修改和状态修改统称修改功能。

修改数据用例如表6-3所示。

表6-3 修改数据测试用例

|---------------|------------------|------|
| 测试用例编号 | YL_06 ||
| 测试用例名称 | 系统使用者进行修改数据 ||
| 测试用例描述 | 使用者对可修改的数据项进行修改 ||
| 系统入口 | 浏览器 ||
| 步骤 | 预期结果 | 实际结果 |
| 将现有数据修改成正确的数据 | 提示"修改成功",并显示所有数据 | 预期结果 |
| 将现有数据修改成错误的数据 | 提示"修改失败" | 预期结果 |

      1. 查询数据 测试

在系统中,查询功能是使用系统使用最多也是最基础的功能,因此查询功能的测试很有代表性。在此章节主要列举在查询时各种情况下系统结果的测试。

查询数据用例如表6-4所示。

表6-4 查询数据测试用例

|-----------------|-----------|------|
| 测试用例编号 | YL_05 ||
| 测试用例名称 | 系统使用者进行查询数据 ||
| 测试用例描述 | 全部查询以及输入关键词查询 ||
| 系统入口 | 浏览器 ||
| 步骤 | 预期结果 | 实际结果 |
| 界面自动查询全部 | 显示对应所有记录 | 预期结果 |
| 输入已存在且能匹配成功的关键字 | 显示所查询到的数据 | 预期结果 |
| 输入不存在的关键字 | 显示数据界面为空 | 预期结果 |

    1. 测试结果

在本次测试的过程主要针对所有功能下的添加操作,修改操作和删除操作,并以真实数据一一进行相关功能项目的输入,最终能够保证每个项目涉及的功能都能够正常运行,因此能够保证本次设计的,已实现的功能能够正常运行并且相关数据库的信息也同样保证正确。

本研究成功设计并实现了基于 Flask 框架的校园学科竞赛管理系统,该系统在解决传统校园学科竞赛管理问题上取得了显著成效。系统借助 Python 语言和 Flask 框架的优势,结合 MySQL 数据库,实现了竞赛信息发布、赛项报名管理、消息管理等核心功能,有效简化了竞赛管理流程,提升了工作效率和透明度,为学生、教师和管理员提供了便捷的管理平台。

然而,本系统仍存在一些不足之处。在系统功能方面,虽然已经涵盖了主要的竞赛管理功能,但对于一些特殊竞赛场景的支持还不够完善,例如针对跨学科竞赛的复杂评审规则和计分方式的处理能力有限。在用户体验方面,尽管进行了一定的优化,但在部分界面的交互设计上还可以进一步提升,以满足不同用户群体的个性化需求。在系统性能方面,随着用户数量和数据量的增加,系统的响应速度和稳定性可能会受到一定影响。

针对以上不足,未来的研究和开发工作将从以下几个方面展开。首先,进一步拓展系统功能,加强对特殊竞赛场景的支持,完善评审规则和计分方式的配置功能,以适应多样化的竞赛需求。其次,持续优化用户体验,通过收集用户反馈,对系统界面和交互流程进行深度改进,提高系统的易用性和友好性。再者,加强系统性能优化,采用更高效的算法和技术,提升系统的响应速度和稳定性,确保在高并发情况下系统仍能正常运行。此外,还将探索与其他校园信息系统的集成,实现数据的共享和互通,进一步提升校园学科竞赛管理的信息化水平。通过不断的改进和完善,使该系统能够更好地服务于校园学科竞赛的组织和管理,为提升校园学科竞赛的质量和水平提供更有力的支持。

参考文献

  1. 黄维.基于B/S模式的虚拟网络实验室安全管理体系分析[J].信息系统工程,2024,(05):4-7.
  2. 张宇薇.HTML5在Web前端开发中的应用[J].集成电路应用,2024,41(04):274-276.
  3. 杨硕,史亚平.基于Python+Flask的在线考试系统设计与实现[J].电脑知识与技术,2025,21(02):47-49+56.
  4. 王朝辉.基于Flask框架的测试集成系统设计与实现[J].科技创新与应用,2024,14(33):115-118.
  5. 李艳杰.MySQL数据库下存储过程的综合运用研究[J].现代信息科技,2023,7(11):80-82+88.
  6. 肖睿,李鲲程,范效亮,等.MySQL数据库应用技术及实践[M].人民邮电出版社:202206.228.
  7. 明日科技.快速上手Python[M].化学工业出版社:202211.337.
  8. 明日科技.Python Web开发手册[M].化学工业出版社:202201.411.
  9. 张锦贤,吴晓玲. 基于Flask框架技术的网站设计 [J]. 电脑知识与技术, 2024, 20 (10): 71-73.
  10. 庞敏. MySQL数据库的数据安全应用设计技术研究 [J]. 数字通信世界, 2024, (09): 25-27.
  11. Liu Z ,Wang C,Zhang T, et al.Research on the Mechanism and Practice of Discipline Competition to Shape the Innovation Ability of Undergraduates-Taking the School of Management of Wuhan Polytechnic University as An Example[J].Education Journal,2024,7(8):66-68.
  12. 冀燕丽,关典.高校学科竞赛管理系统的设计与实现------以北京科技大学为例[J].中国信息化,2024,(09):51-52+54.
  13. 李旭凯,郭杏妹,曾丽璇."六位一体"学科竞赛教学体系的构建与实践[J].化工高等教育,2024,41(04):16-20+57.
  14. 欧栋,赵国华,吴燕,等.学科竞赛对环境工程专业实践教学作用研究------以嘉兴市大学生校园环境监测竞赛为例[J].中国教育技术装备,2022,(16):154-156.
  15. Dawei L ,Dan Y .RESEARCH ON COLLEGE STUDENTS' SPORTS COMPETITION MANAGEMENT AND SPORTS TEACHING INNOVATION MECHANISM FROM THE PERSPECTIVE OF PSYCHOLOGY[J].Psychiatria Danubina,2022,34(S4):228-228.
  16. 高哲,杨开一,刘俏含.以学科竞赛为途径的理工科大学生创新人才培养实践研究[J].创新创业理论研究与实践,2022,5(06):177-179+187.
  17. 雷晶晶.基于高校学科竞赛的学生创新能力培养研究[J].科技风,2022,(06):139-141.
  18. 杨琼,蔡胜.独立学院学科竞赛参与积极性的现状及对策研究------以安徽大学江淮学院为例[J].湖北开放职业学院学报,2022,35(02):33-34+37.
  19. 管雅静.以学科竞赛为平台,促进教学改革和创新人才培养[J].科技风,2021,(33):101-103.
  20. 朱宏博.新时期高校校园文化建设新路径------以学科竞赛为例[J].大众文艺,2021,(22):164-165.
  21. 胡沁涵,王亚男,杨季文,等.高校学科竞赛组织管理平台的研究与实现[J].福建电脑,2021,37(09):75-78.
  22. 巩斌.大学生学科竞赛体系下促进实践教学质量提高的实践探索------以安徽财经大学实践教学为例[J].喀什大学学报,2021,42(03):99-103.
  23. Kong X ,Zeng Q ,Guo X , et al.Sustainable Cultivation of Discipline Competition Programs for Innovation and Entrepreneurship Education: An Example of the Food Science and Engineering Major[J].Sustainability,2024,16(14):5846-5846.

致 谢

校园学科竞赛管理系统设计与实现工作已结束,虽然过程中充满挑战,但内心充满自豪和满足。感谢大学四年间教导我的所有老师,他们的专业知识与人生智慧让我成长为能独立完成系统的学生。特别感谢指导老师,他耐心解答疑惑,引导我解决问题,提升自主解决能力。室友和同学们的宝贵建议和支持也让我取得长足进步。未来,我将继续努力追求卓越,不辜负所学所悟和老师期望。坚信坚定信念和不懈努力,未来定能取得更辉煌成就。期待更美好未来!

校园学科竞赛管理系统设计与实现不仅是技术挑战,挫折和困难是成长的垫脚石,让我更深入理解问题,精确找到解决方案。每次解决问题,都感到满足和自豪。

对于未来,我充满期待和信心。无论道路多崎岖,只要保持坚定信念,持续努力,定能取得更大成就。期待将知识和技能运用到实际中,为社会做出更大贡献。

最后,感谢所有帮助和支持我的人。你们的教诲、鼓励和支持让我有今天的成就。我会继续努力,不辜负期望,为实现更美好的未来而奋斗。

系统关键代码

登录代码如下:

def Login(self, ctx):

print("===================登录=====================")

ret = {

"error": {

"code": 70000,

"message": "账户不存在",

}

}

body = ctx.body

password = md5hash(body["password"]) or ""

obj = service_select("user").Get_obj(

{"username": body["username"]}, {"like": False}

)

if obj:

user_group = service_select("user_group").Get_obj({'name': obj['user_group']}, {"like": False})

if user_group and user_group['source_table'] != '':

user_obj = service_select(user_group['source_table']).Get_obj({"user_id": obj['user_id']}, {"like": False})

if user_obj['examine_state'] == '未通过':

ret = {

"error": {

"code": 70000,

"message": "账户未通过审核",

}

}

return ret

if user_obj['examine_state'] == '未审核':

ret = {

"error": {

"code": 70000,

"message": "账户未审核",

}

}

return ret

if obj["state"] == 1:

if obj["password"] == password:

timeout = timezone.now()

timestamp = int(time.mktime(timeout.timetuple())) * 1000

token = md5hash(str(obj["user_id"]) + "_" + str(timestamp))

ctx.request.session[token] = obj["user_id"]

service_select("access_token").Add(

{"token": token, "user_id": obj["user_id"]}

)

obj["token"] = token

ret = {

"result": {"obj": obj}

}

else:

ret = {

"error": {

"code": 70000,

"message": "密码错误",

}

}

else:

ret = {

"error": {

"code": 70000,

"message": "用户账户不可用,请联系管理员",

}

}

return ctx.response(json.dumps(ret, ensure_ascii=False))

注册代码如下:

def Register(self, ctx):

print("===================注册=====================")

userService = service_select("user")

body = ctx.body

if "username" not in body and body["username"] == '':

return ctx.response(json.dumps({

"error": {

"code": 70000,

"message": "用户名不能为空",

}

}, ensure_ascii=False))

if "user_group" not in body and body["user_group"] == '':

return ctx.response(json.dumps({

"error": {

"code": 70000,

"message": "用户组不能为空",

}

}, ensure_ascii=False))

if "password" not in body and body["password"] == '':

return ctx.response(json.dumps({

"error": {

"code": 70000,

"message": "密码不能为空",

}

}, ensure_ascii=False))

post_param = body

post_param['nickname'] = body["nickname"] or ""

post_param['password'] = md5hash(body["password"])

obj = userService.Get_obj({"username": post_param['username']}, {"like": False})

if obj:

return ctx.response(json.dumps({

"error": {

"code": 70000,

"message": "用户名已存在",

}

}, ensure_ascii=False))

ret = {

"error": {

"code": 70000,

"message": "注册失败",

}

}

bl = userService.Add(post_param)

if bl:

ret = {

"result": {

"bl": True,

"message": "注册成功"

}

}

return ctx.response(json.dumps(ret, ensure_ascii=False))

找回密码代码如下:

def Forget_password(self, ctx):

print("===================修改密码=====================")

ret = {

"error": {

"code": 70000,

"message": "用户信息不能没有"

}

}

body = ctx.body

if not body["code"]:

return {

"error": {

"code": 70000,

"message": "验证码不存在或者错误"

}

}

obj = service_select("user").Get_obj(

{"username": body["username"]}, {"like": False}

)

if not obj:

return {

"error": {

"code": 70000,

"message": "用户名不存在或者错误"

}

}

password = md5hash(body["password"])

if not password:

return {

"error": {

"code": 70000,

"message": "密码不存在或者错误"

}

}

bl = service_select("user").Set({"user_id": obj["user_id"]}, {"password": password})

if bl:

ret = {"result": {"bl": True, "message": "修改成功"}}

else:

ret = {

"error": {

"code": 70000,

"message": "修改失败",

}

}

return ctx.response(json.dumps(ret, ensure_ascii=False))

修改密码代码如下:

def Change_password(self, ctx):

print("===================修改密码=====================")

ret = {

"error": {

"code": 70000,

"message": "账号未登录",

}

}

request = ctx.request

headers = request.headers

if ("x-auth-token" in headers) and headers["x-auth-token"]:

token = headers["x-auth-token"]

user_id = tokenGetUserId(token, request)

userService = service_select("user")

body = ctx.body

password = md5hash(body["o_password"])

obj = userService.Get_obj({"user_id": user_id, "password": password}, {"like": False})

if obj:

password = md5hash(body["password"])

bl = userService.Set({"user_id": user_id}, {"password": password})

if bl:

ret = {"result": {"bl": True, "message": "修改成功"}}

else:

ret = {

"error": {

"code": 70000,

"message": "修改失败",

}

}

else:

ret = {

"error": {

"code": 70000,

"message": "密码错误",

}

}

else:

ret = {

"error": {

"code": 70000,

"message": "账户未登录",

}

}

return ctx.response(json.dumps(ret, ensure_ascii=False))

增删查改代码如下:

def Add(self, ctx):

body = ctx.body

unique = self.config.get("unique")

obj = None

if unique:

qy = {}

for i in range(len(unique)):

key = unique[i]

qy[key] = body.get(key)

obj = self.service.Get_obj(qy)

if not obj:

error = self.Add_before(ctx)

if error["code"]:

return {"error": error}

error = self.Events("add_before", ctx, None)

if error["code"]:

return {"error": error}

result = self.service.Add(body, self.config)

if self.service.error:

return {"error": self.service.error}

res = self.Add_after(ctx, result)

if res:

result = res

res = self.Events("add_after", ctx, result)

if res:

result = res

return {"result": result}

else:

return {"error": {"code": 10000, "message": "已存在"}}

def Del(self, ctx):

if len(ctx.query) == 0:

errorMsg = {"code": 30000, "message": "删除条件不能为空!"}

return errorMsg

result = self.service.Del(ctx.query, self.config)

if self.service.error:

return {"error": self.service.error}

return {"result": result}

def Set(self, ctx):

error = self.Set_before(ctx)

if error["code"]:

return {"error": error}

error = self.Events("set_before", ctx, None)

if error["code"]:

return {"error": error}

query = ctx.query

if 'page' in query.keys():

del ctx.query['page']

if 'size' in query.keys():

del ctx.query['size']

if 'orderby' in query.keys():

del ctx.query['orderby']

result = self.service.Set(ctx.query, ctx.body, self.config)

if self.service.error:

return {"error": self.service.error}

res = self.Set_after(ctx, result)

if res:

result = res

res = self.Events("set_after", ctx, result)

if res:

result = res

return {"result": result}

查多条数据:

def Get_list(self, ctx):

query = dict(ctx.query)

config_plus = {}

if "field" in query:

field = query.pop("field")

config_plus["field"] = field

if "page" in query:

config_plus["page"] = query.pop("page")

if "size" in query:

config_plus["size"] = query.pop("size")

if "orderby" in query:

config_plus["orderby"] = query.pop("orderby")

if "like" in query:

config_plus["like"] = query.pop("like")

if "groupby" in query:

config_plus["groupby"] = query.pop("groupby")

count = self.service.Count(query)

lst = []

if self.service.error:

return {"error": self.service.error}

elif count:

lst = self.service.Get_list(query,

obj_update(self.config, config_plus))

if self.service.error:

return {"error": self.service.error}

self.interact_list(ctx, lst)

return {"result": {"list": lst, "count": count}}

查一条数据:

def Get_obj(self, ctx):

query = dict(ctx.query)

config_plus = {}

if "field" in query:

field = query.pop("field")

config_plus["field"] = field

obj = self.service.Get_obj(query, obj_update(self.config, config_plus))

if self.service.error:

return {"error": self.service.error}

if obj:

self.interact_obj(ctx, obj)

return {"result": {"obj": obj}}

免费领取项目源码,请关注❥点赞收藏并私信博主,谢谢~

相关推荐
江沉晚呤时44 分钟前
在 C# 中调用 Python 脚本:实现跨语言功能集成
python·microsoft·c#·.net·.netcore·.net core
SuperherRo1 小时前
Web攻防-PHP反序列化&原生内置类&Exception类&SoapClient类&SimpleXMLElement
php·xss·反序列化·exception·ssrf·原生类·soapclient
Touper.1 小时前
Redis 基础详细介绍(Redis简单介绍,命令行客户端,Redis 命令,Java客户端)
java·数据库·redis
m0_535064601 小时前
C++模版编程:类模版与继承
java·jvm·c++
电脑能手2 小时前
如何远程访问在WSL运行的Jupyter Notebook
ide·python·jupyter
虾条_花吹雪2 小时前
Using Spring for Apache Pulsar:Message Production
java·ai·中间件
tomorrow.hello2 小时前
Java并发测试工具
java·开发语言·测试工具
Edward-tan2 小时前
CCPD 车牌数据集提取标注,并转为标准 YOLO 格式
python
Moso_Rx2 小时前
javaEE——synchronized关键字
java·java-ee
老胖闲聊2 小时前
Python I/O 库【输入输出】全面详解
开发语言·python