# 排班系统 **Repository Path**: software-engineering---banning/.C ## Basic Information - **Project Name**: 排班系统 - **Description**: 安财21级软件工程-排班系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2023-08-31 - **Last Updated**: 2023-12-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 描述 安财21级软件工程-排班系统 ## 安装 + 安装Microsoft Visual Stdio软件 + 配置.net框架和web开发 ![](./pic/配置/net和web.png) + 配置数据库 ![](./pic/配置/数据库.png) ## 指导 建立一个护士排班系统,其中包含: + 人员的增删改查。 + 支持在线排班。 + 请假换班。 ## 一、可行性分析 ### 1.技术可行性: - 【1】使用c#语言和asp.net框架能够实现网站大致内容,通过bootstrap模板套用减少代码工作量,这些技术是我们已经掌握的。 - 【2】团队成员精通c#语言,熟练掌握前端框架,能够通过模板化的html语言,实现前端架构。通过互联网搜索资料,可以准确完成所需要的内容。从技术上来说,可以完成相应目标, - 【3】对于一些项目上的关键点,如实现前后端的交互,实现数据库的挂接,尚存在一定的难度。 - 【4】对于需要完成的时间而言,学习这些技术是足够的。 ![[任务时间线.jpg]] 因此,可以说我们的技术可行,能够按照这些要求完成相应的问题。 ### 2.经济可行性: - 【1】该项目为三甲医院提供护士排班系统,院方一次买断,收入约为50000元,我们将提供后续的系统维护,当院方需要系统更新时,我们会按照需求决定收取费用。 - 【2】本项目投入约为5人,人力成本为1000元/月,预计3个月时间上线,所需硬件成本约为1500元/月,成本总计约为20000人民币。 - 【3】投入使用后维护费用约为100元/月,预计可使用3年。 - 【4】综上,本项目净利润约为25000元。同时如果项目成功,我们可以扩大知名度,获取更多接单机会,所以从经济可行性分析,本项目是可行的。 ### 3.操作可行性: 对于一个护士排班系统来说:所需要的有 - 【1】便捷性:快捷签到以后就能实现排班 - 【2】可行便利性:能够按照正确的方式保证相同的时间段内有一定量的护士在,且晚上护士较少但必定有人,白天护士较多,不会造成人员冲突 - 【3】符合护士的工作规律:即上几天班休一到两天,节假日可以休息 而对于这些要求,本系统均能做到: - 【1】网络签到本身就具有很快的特性,在签到后立刻就能生成记录,记录信息的同时能够保证签到有效 - 【2】可以通过脚本文件使其排班准确无误,同时在规定的时间让指定的护士上班 - 【3】通过数据库的查询,增删改操作,使节假日休息成为可能 ### 4.法律可行性 本应用程序所使用的软件、系统、网页均开源,并且对于所借鉴的技术均开源,故不存在法律问题 ### 5.方案可行性 本应用程序曾考虑过很多种方案,如酒店系统,外卖系统等,但护士系统有其优势,不仅能够有广阔的应用前景,并且能有效的使用,且应用门槛较低。 ### 6.制作过程中需要注意的问题 - 【1】应该注意时间限制,要有效的根据时间安排推进任务。 - 【2】应该注意编写的文件的可行性,要注意技术的使用问题。 综上,该护士排班系统具有技术、经济、操作等的可行性,在研究之初认为该系统具有可行性。 ## 二、需求分析 ### 1.系统的综合要求 #### --需求总览-- ![](./pic/需求分析/金字塔式排版.png) #### 1.1功能需求 + ①护士排班 整理本医院当日所有在职的护士的信息,根据医院的相应情况对所有的护士进行排班,并输出当日的排班信息,最后发送排班信息给相应的护士和相关管理人员; + ②签到、签退和考勤记录 每天护士能够进行签到和签退,并记录每位护士的考勤记录,能够输出每位护士考勤记录,医院能够根据每个护士考勤记录分发对应的奖金。 + ③修改护士信息 有护士的增加,离职或调离时,对系统中护士人员信息进行更改。 + ④系统定期更新和维护 使用一段时间或使用过程遇到Bug时,提示更新或者联系开发者。 + ⑤紧急情况处理 在医院遭遇紧急情况时,能够调度护士去应对和处理。 + ⑥安全性需求 + 该系统具备一定来自网络黑客恶意攻击和恶意程序攻击的防范能力,具备提醒用户隐私信息泄露的能力,以及防范护士隐私信息泄露的能力。 + 通过定期进行安全检测和补丁修复来维护。另外进行日常安全日志记录,以便发现异常数据流动。 #### 1.2性能需求 + ①容量足够大的数据库 排班系统能够满足各类医院的护士排班需求,如果是体量较大的市医院的话,数据库应有足够大的空间容纳医院的护士信息,不会出现数据溢出的情况,如果是体量较小的医院的话,可以灵活的调整医院的数据库。 + ②迅速便捷地用户交互界面 当用户在系统界面做出操作时,系统能在用户能接受的时间范围里,及时做出反应。 #### 1.3可靠性和可用性需求 + 可靠性:护士排班系统必须需要是一个十分稳定的系统,出错性的可能性必须要降到最低(**该系统可以保证三个月内不出现三次以上的故障**),因为医院是一个十分特殊的行业,一旦系统出错,必然会造成不可估量的后果。 ![](./pic/需求分析/戴明圆环.jpg) + 可用性: + ①护士排班系统在得到护士信息后,要在极短的时间内得到排班名单,才能满足一些较大的医院的需求,并且如果护士的信息变更后,系统能够及时做出反应,得出相对应的护士排班名单。 + ②根据可用性计算公式:Availability=(MTTF/(MTTF+MTTR))*100%。所以要提升软件的可用性,应当尽可能减少软件的故障维护时间。因此我们的软件的每次维护时间不会超过12小时,以免给用户带来不必要的麻烦; #### 1.4出错处理需求 如果系统检测到系统的使用环境出现错误,应该及时的发送错误信息给医院的管理部门,医院能够及时通知相关的人员来进行处理。 ![](./pic/需求分析/风险矩阵.png) #### 1.5接口需求 + ①与医院的财务处连接 医院的财务处能根据护士排班系统给出的每个护士的考勤记录,分发相应的考勤奖金和惩罚,以及根据排班系统给出信息处理相应的事务,能够做到双系统进行互动。 + ②与医院的管理部门互动 根据医院的管理部门发布的信息,及时对护士的排班信息进行更改,以满足医院的护士排班需求。 + ③备用接口 对于一些体量较大的医院,医院的各类事务是非常繁忙的,预备几个备用的接口,以备不时之需。 #### 1.6约束 本系统的前端开发使用的是C#语言,依据[asp.net](https://asp.net/)框架,后端使用SQL server技术;开发时使用的是Visual Studio Code,使用的是windows10及以上的系统。 #### 1.7逆向需求 + ①系统没有向除管理员之外的任何人提供任何有关护士的信息的服务。、 + ②系统不会对没有注册信息的人员进行排班操作。 #### 1.8将来可能提出的要求 + ①用户(护士)能在终端查询自已的值班信息以及查询其他人的值班信息。 + ②用户能够利用护士排班系统与医院的财务处、管理部门进行交互,处理一些基本的事物。 ### 2.系统的逻辑模型 #### 2.1流图 ##### 系统流程图 ![](./pic/流图/系统流程图.png) ##### 数据流图-顶层 ![](./pic/流图/数据流图-顶层.png) ##### 数据流图-0层 ![](./pic/流图/数据流图-0层.png) ##### 数据流图-1层 ![](./pic/流图/数据流图-1层.png) - 1.使用c#语言编程。 - 2.前端使用asp.net框架,后端使用SQL server技术。 - 3.实现用户界面,后端数据库的建立。 - 4.实现其主要功能。 ## 三、详细设计 ### 引言 #### 1.目的 + 设计一个护士排班系统,以实现有效的护士资源管理和排班计划。 #### 2.范围 + 系统将包括护士信息管理、排班计划生成、排班查询和调整等功能。 #### 3.定义 + 护士:提供护理服务的专业人员。 + 护士长:管理排班相关信息。 + 排班:根据护士的需求和可用性,创建合理的工作时间表。 ### 结构程序设计 #### 总软件结构图 ![](./pic/详细设计/护士排班系统软件结构图.jpg) #### 1.1Input:输入模块 ##### **程序流程图** ![](./pic/详细设计/输入模块程序流程图.jpg) ##### **NS图** ![](./pic/详细设计/输入模块盒图.jpg) ##### 前端界面 **人机界面的设计质量,直接影响用户对软件产品的评价,从而影响软件产品的竞争力和寿命,因此,必须对人机界面设计给与足够的重视。** + 护士排班系统登录界面: ![](./pic/详细设计/登陆界面.jpg) + 界面设计 + 登录页面:用户输入工号和密码并勾选管理员或用户来登录系统。 + 注册页面:用户填写必要信息注册新用户。 #### 1.2Process:处理模块 ##### **程序流程图** ![](./pic/详细设计/控制中心程序流程图.jpg) ##### **NS图** ![](./pic/详细设计/控制中心盒图.jpg) ##### 操作界面设计 + 护士管理页面:显示护士列表,支持添加、编辑和删除操作。 + 排班计划页面:显示排班计划,支持手动调整和导出功能。 + 查询页面:根据日期范围查询排班计划。 + 报表页面:生成排班计划的报表。 ##### 数据库设计 + 存储用户信息、护士列表、排班计划和其他相关数据。 + 使用关系型数据库。 + 参考ER图: ![](./pic/详细设计/E-R图.png) + **表和表之间的逻辑模型** ![](./pic/详细设计/建表逻辑图.jpg) ##### 排班核心算法设计 + 开发排班算法,考虑护士的需求和可用性。 + 考虑排班规则和约束条件,如连班限制、休息时间等。 ​ 经考虑排班采用 [遗传算法(点击查看参考样例)](https://blog.csdn.net/qq_40755283/article/details/121296446) ```python import random # 定义问题参数 num_nurses = 5 hours_per_day = 8 days_per_week = 7 total_hours = num_nurses * hours_per_day * days_per_week # 定义遗传算法参数 population_size = 100 num_generations = 100 mutation_rate = 0.1 # 生成初始种群 def generate_schedule(): schedule = [random.randint(0, num_nurses - 1) for _ in range(total_hours)] return schedule def fitness(schedule): # 计算成本函数,这里使用一个简单的随机函数作为示例 return sum(random.randint(1, 5) for _ in range(len(schedule))) def crossover(parent1, parent2): # 单点交叉 crossover_point = random.randint(1, len(parent1) - 1) child1 = parent1[:crossover_point] + parent2[crossover_point:] child2 = parent2[:crossover_point] + parent1[crossover_point:] return child1, child2 def mutate(schedule): # 随机突变一个护士的排班 mutated_schedule = schedule[:] index_to_mutate = random.randint(0, len(mutated_schedule) - 1) mutated_schedule[index_to_mutate] = random.randint(0, num_nurses - 1) return mutated_schedule # 主要遗传算法循 def genetic_algorithm(): population = [generate_schedule() for _ in range(population_size)] for generation in range(num_generations): # 计算每个个体的适应度 fitness_scores = [fitness(schedule) for schedule in population] # 选择前50%的个体作为父母 num_parents = population_size // 2 parents = [population[i] for i in sorted(range(len(fitness_scores)), key=lambda k: fitness_scores[k])[:num_parents]] # 生成下一代个体 new_population = [] while len(new_population) < population_size: parent1, parent2 = random.choices(parents, k=2) child1, child2 = crossover(parent1, parent2) if random.random() < mutation_rate: child1 = mutate(child1) if random.random() < mutation_rate: child2 = mutate(child2) new_population.extend([child1, child2]) population = new_population # 返回最终的排班结果 best_schedule = min(population, key=fitness) return best_schedule best_schedule = genetic_algorithm() print("最佳排班方式:", best_schedule) ``` **算法优点:** 1. 与问题领域无关并且拥有快速随机的搜索能力。 2. 搜索从群体出发,具有潜在的并行性,可以进行多个个体的同时比较。 3. 搜索使用评价函数启发,过程简单。 4. 使用概率机制进行迭代,具有随机性。 5. 具有可扩展性,容易与其他算法结合。 #### 1.3Output:输出模块 ##### 程序流程图 ![](./pic/详细设计/输出模块程序流程图.jpg) ##### NS图 ![](./pic/详细设计/输出模块盒图.jpg) **_通知和提醒_** :在发生排班变更或重要通知时,系统可以通过输出模块向相关人员发送通知。这可以包括排班变更通知、请假申请审批结果通知等。通知可以通过各种方式发送,如短信、电子邮件或系统内部消息。 ### 总结 ​ 本护士排班系统的详细设计主要包括三大功能模块,输入、变换、输出,以及数据库的设计,通过给出的程序流程图或盒图,介绍了各个模块的详细设计,并初步设计了护士排班系统的登陆界面,通过E-R图,介绍了本护士排班系统各实体间的关系,并建立对应的数据库,并对排班算法进行了浅略的介绍,为后面本护士排班系统的设计代码的编写提供了参考,为系统的最终完成奠定了基础。