首页 > 其他分享 >【排课小工具】项目需求的搜集与整合

【排课小工具】项目需求的搜集与整合

时间:2024-04-27 14:55:37浏览次数:27  
标签:需求 课表 班级 排课 用户 信息 搜集 课程 整合

计划写一系列随笔,记录一个工具软件的开发过程,这是第一篇随笔,写本篇随笔的初衷是帮助我整理一下当前的需求详情,同时复习最近所需的软件工程相关知识,如果能对读者有所帮助,那算是这篇文章产生的额外价值了。需要注意的是,这不是一篇遵循标准规格的需求文档,因为其中可能夹杂着知识注解和引用,以及个人观点。

背景信息

在小学实习期间(2024年3月1日 - 2024年7月10日),与老师的交流中发现,每当新学期开始都要人工排一次课表,并且这个过程较为繁琐,总是遇到教师课程冲突的状况,一旦发生这种情况,在重排的过程中就会影响到诸多已经排好的项目。如果能够解决上述排课冲突问题,那将会给排课老师带来极大的便利,这便是我着手开发这个小工具的初衷。除此以外,在最近的软件设计师资格考试备考期间,较为全面但却相当浅薄的学习了软件工程相关知识,考虑到使用工程化的方法流程解决该课题的过程会增进我的软件工程技能,这是我能坚持做这件事的原因。以上便是该项目的背景信息。

需求概述

该软件的定位是一个具有单一功能小工具,运行在单一用户的电脑上,在操作上,该用户通过某种方式输入课程相关数据,提交过后程序将全年级的课表以某种格式输出出来。排课结果应遵行基本的原则是一个教师不能在同一天的同一课次出现在两个或多个不同的班级,除此之外还有一些次要约束。用户期望每个班级的课表以一个带有指定样式的 Word 文件输出出来。用户希望该工具的操作界面应该尽可能简单,数据的输入可以在 Excel 表格中进行,输出的信息可以直接投入使用,而不必再次经过手工处理。

在与实际用户详细沟通需求之前,我已经交付了一个简陋的应用原型,该原型实现了用户所需的主要功能,在该原型下,用户的工作流是这样的:首先用户在一个 Excel 工作区中分别建立课表模板课程信息、以及职责分配信息这三个表,完成上述表格的编辑后,打开软件将该 Excel 工作区导入,并选择课表的输出路径,其中一个可选项为是否在输出结果中显示每节课的教师名称,随后提交数据,程序输出一个 Excel 工作区,该工作区中包含所有班级的课表数据。

程序的输入与输出

用户对此软件的使用工作流比较满意,在后面的交流中用户依旧表示可以继续沿用这种数据的输入与输出方式,在操作界面上不需要有过多的更改。经过进一步地沟通,现在基本上已经可以确定用户的需求有哪些:

界面需求

用户对于程序操作页面没有添加新的要求,所以可以延续原型的样子。

在输入上延续原始的输入方式,即用户在 Excel 工作区中编辑三个表,分别是课表模板表、课程信息表以及教师职责信息表。

模板信息表的第一行用来标注星期(从星期一到星期五),第一列用来标注上课的节次,在接下来的行和列中,空单元格预留给待分配的课表项目,将固定分配的课表项目填写到指定位置,这代表该年级中的每个班级都会在这个时刻上这节课,且不会出现课程冲突,这种固定项往往出现在每天的最后一节课或者每周的班会课。

课程信息表的第一行数据为四个课程属性:序号、课程名、每周上课次数以及优先级,其中优先级决定了那些学科分布在课表的前列,那些分布在后列。经过商议,该用户不需要编辑优先级这一列的值,因为一年级的课程信息几乎没有变动过,总是语文、数学以及科学占满了每个班级、每一天的前两节课,其余的科目不做过多的限制。所以在接下来的设计中不在提供给用户编辑优先级的接口。

教师职责信息表的第一行数据为课程信息数据,该行数据应该与课程信息表中的课程名信息保持一致,其实这两个表可以合并为一个表。第一列数据为班级,每个班级以及科目决定一位教师,这是这三个表中最为关键的一个表。

在输出上用户提出了新的需求。用户希望每个班级的课表输出在一个 Word 表格文件中,并且设置为指定的样式,这样就可以直接使用该输出结果打印每个班级的课表。该样式是这样的:

课程表样式

功能需求

编号   名称   说明
1   无时间冲突   在某一时刻(同一天的同一节次)一个教师不能被分配到两个或两个以上不同的班级
2   分级填充   高优先级的科目应尽可能填充课表的前半部分,低优先级的科目只有在高优先级科目分配完成后前半部分依旧存在空缺的情况下才能分配到前半部分
3   完整性检测   要确保所有教师负责的科目的总节次的数目等于全年级课表可分配节次的总数。同时每个班级各个科目被分配的相应课程的节次总数等于课程信息表中指定的次数。
4   非连续性分配   不能让同一个班级在同一天中连续上同一个学科的课程
5   均匀分配   同一学科的课程应尽可能均摊到每一天中

总结

除了上述界面需求以及功能需求外,用户在性能、文档、安全保密、可靠性以及其他非功能需求上没有做要求,所以我自然不必在这些需求上投入过多的时间和精力。在已经开发完成的原型程序中,已经实现了上述功能需求中的第 1,4,5 条,可是代码相当令人难以直视。核心文件是一个 python 单文件,GUI 使用 QT 构建,最终形成的竟然是一个超过 44M 的可执行文件。暂且不谈这个程序的臃肿程度,在我的核心代码中,使用的 for 循环层数达到了 4 层,我希望接下来能够找到一种适用于课表的数据结构以及算法来缓解这种问题。

标签:需求,课表,班级,排课,用户,信息,搜集,课程,整合
From: https://www.cnblogs.com/gaotianchi/p/18161826/course-scheduling-gadget-collection-and-inte

相关文章

  • SpringBoot整合AOP实现打印方法执行时间切面
    pom.xml<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>代码创建注解importjava.lang.annotation.ElementType;importja......
  • 20211317 李卓桐 Exp5 信息搜集与漏洞扫描 实验报告
    Exp5信息搜集与漏洞扫描实验报告1、实践目标掌握信息搜集的最基础技能与常用工具的使用方法。2、实践内容(1)各种搜索技巧的应用(2)DNSIP注册信息的查询(3)基本的扫描技术:主机发现、端口扫描、OS及服务版本探测、具体服务的查点(以自己主机为目标)(4)漏洞扫描:会扫,会看报告,会查漏......
  • 9-项目整合管理(1/10 十大管理)
    8.1管理基础8.1.1执行整合项目整合管理由项目经理负责,项目经理负责整合所有其他知识领域的成果,并掌握项目总体情况。项目整合管理的责任不能被授权或转移,项目经理必须对整个项目承担最终责任。整合是项目经理的一项关键技能。执行项目整合时项目经理承担双重角色。组织层面......
  • SpringBoot整合OpenAPI 3生成在线接口文档
    SpringBoot整合springdoc-openapi,自动生成在线接口文档。1、引入pom依赖<dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.3.0</version></dependenc......
  • SpringBoot 3.1.10 整合Mybatis-plus(快速学会)
    一、简介1、什么是Mybatis-plus?Mybatis-Plus(简称MP)是一个Mybatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。官网:https://baomidou.com/2、Mybatis-plus特性无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动......
  • 物联网浏览器(IoTBrowser)-整合机器学习yolo框架实现车牌识别
    https://www.cnblogs.com/yizhuqing/p/18140050 最近一段时间在研究AI技术在.Net平台的使用,目前AI绝大部分是使用Python开发,偶然一次在头条看到一篇ML.NET的介绍,是Net平台下开放源代码的跨平台机器学习框架。ML.NET详细介绍https://dotnet.microsoft.com/zh-cn/apps/machinele......
  • 80、SpringBoot3 SpringSecurity Mybatisplus最新版 整合 实现登入权限控制
    1、导入pom依赖<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apac......
  • Flume 整合 Kafka_flume 到kafka 配置【转】
    1.背景先说一下,为什么要使用Flume+Kafka?以实时流处理项目为例,由于采集的数据量可能存在峰值和峰谷,假设是一个电商项目,那么峰值通常出现在秒杀时,这时如果直接将Flume聚合后的数据输入到Storm等分布式计算框架中,可能就会超过集群的处理能力,这时采用Kafka就可以起到削峰的......
  • 项目整合管理
             ......
  • CTFshow-Web入门模块-信息搜集writeip
    CTFshow-Web入门模块-信息搜集writeipby故人叹、信息搜集web1考察点:查看源码题目提示:”开发注释未及时删除“,页面源代码中可能有东西,查看页面源代码发现flag。总结查看源码的几种方式:F12打开源代码快捷键Ctrl+u在url前面加上view-source:浏览器右上角选项中的Web开......