HIT软件构造实验三 重点与反思

这次实验主要是基于时间段类及其变种实现排班,进程管理和课表管理系统

DutyRoster:这是一个值班应用,可以手动或自动为员工排班

ProcessSchedule:操作系统进程调度管理应用,可随机执行进程,也可采用最优执行.

CourseSchedule;课表管理系统,先储存学期要上课程,然后提供选课操作,同时还能查看未排完课程以及空闲重复时间占比

应用

差异

共性

DutyRoster

时间段不可重叠,一个标签只能对应一个时间段

都是时间段有关程序

ProcessSchedule

时间段不可重叠,一个标签能对应多个时间段

CourseSchedule

时间段可重叠,一个标签能对应多个时间段

      1. IntervalSet<L>的共性操作

方法

作用

getPeriods()

返回时间段集合

Insert(start.,end,label)

插入时间段

Labels()

返回类中的标签集合

Remove(label)

将时间段集合中所有与label时间段删除

Sort()

将时间段按起始时间按从小到大排序

面向各应用的IntervalSet子类型设计(个性化特征的设计方案)

CommonIntervalSet是对接口IntervalSet的实现

实例域

private List<Period<L>> periods = new ArrayList<>();

实例方法集合

方法

作用

getPeriods()

返回时间段集合

Insert(start.,end,label)

插入时间段,插入是若同一标签对应多个时间段,则输出提示信息并返回

Labels()

返回类中的标签集合

Remove(label)

将时间段集合中与label时间段删除

Sort()

将时间段按起始时间按从小到大排序

toString()

将内荣以字符串的形式输出

Start(L label)

返回label对应时间段的起始时间 ,若没有该时间段返回-1

End(L label)

返回label对应时间段的结束时间 ,若没有该时间段返回-1

    1. 面向可复用性和可维护性的设计:MultiIntervalSet<L>

MultiIntervalSet是对接口IntervalSet的实现

实例域

private List<Period<L>> periods = new ArrayList<>();

实例方法集合

方法

作用

getPeriods()

返回时间段集合

Insert(start.,end,label)

插入时间段

Labels()

返回类中的标签集合

Remove(label)

将时间段集合中与label时间段删除

Sort()

将时间段按起始时间按从小到大排序

toString()

将内荣以字符串的形式输出

MultiIntervalSet(IntervalSet<L> initial

构造方法将initial中的时间段加入到集合中

intervals(L label)

返回以开始时间从小到大排序后所有和label相关的时间段

    1. 面向复用的设计:L

对于三个问题的类分别为Employee,Process,Course;三个类都是immutable

Employee

实例域 用final修饰保证immutability

final public String name;

final public String jobTitle;

final public String phoneNumber;

实例方法

Employee

构造方法

hashCode

根据三个实例变量计算hash值

equals

判断两个Emloyee是否相等

toString

将变量转换为String输出

Process

实例域 用final修饰保证immutability

final public int id;

final public String name;

final public long shortestTime;

final public long longestTime;

final public long time;

实例方法

Process

构造方法

hashCode

根据三个实例变量计算hash值

equals

判断两个Emloyee是否相等

toString

将变量转换为String输出

complete

判读进程是否已经运行完若运行完返回true

compareTo

根据longestTime-time的大小得出排序优先级差值小的排在前

Course

实例域 用final修饰保证immutability

final public int id;

final public String cName;

final public String teacher;

final public String location;

final public int times;//剩余排课次数

实例方法

Course

构造方法

hashCode

根据三个实例变量计算hash值

equals

判断两个Course是否相等

toString

将变量转换为String输出

      1. 排班管理系统

DutyRosterApp中的每个员工只能对应一个时间段所以委托CommonIntervalSet

实例域

private long start,end;//起止时间

private List<Employee> Employees = new ArrayList<>();

private CommonIntervalSet<Employee> Intervals = new CommonIntervalSet<>();

static SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd");//日期转换格式

实例方法

SetDate

设置排班起止日期

FindEmployee

根据姓名查找员工

AddEmployee

添加员工

DelEmployee

将员工的排班删除同时在员工集中将他删掉

AutoSetTime

自动排班

SetTime

将某个员工排班起止日期为start,end

showDutyRoster

展示排班表

ShowRestTime

展示未排班时间段以及为安排时间占比

      1. 操作系统的进程调度管理系统

ProcessScheduleAPP中一个进程可以对应多个时间段所以委托multiIntervalSet实现

实例域

private List<Process> process = new ArrayList<>();

private long timeLine = 0;

private IntervalSet<Process> Intervals = new MultiIntervalSet<>();

实例方法

AddProcess

添加一个进程

RandomSelecct

随机选择一个进程执行也可以不选择进程

priorSelect

优先选择最优进程执行

ShowProcess

展示之前运行过的进程

ShowLastProcess

展示最近运行的进程

CourseScheduleApp每个课程可以对应多个时间段所以委托multiIntervalSet实现

实例域

private Date start;

private int week;

private MultiIntervalSet<Course>[] Days = new MultiIntervalSet[8];

private List<Course>courses = new ArrayList<>();

实例方法

CourseScheduleApp

构造方法

addCourse

添加课程 添加时学时数应为偶数

findCourse

根据课程名寻找课程

selectCourse

选课安排某个课到周几的某个时间段

showRest

展示为排完的课 空闲时间比例和重复时间比例

showCourse

展示一周内某天的课程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值