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

2021/7/7 6:06:52

本文主要是介绍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

展示一周内某天的课程



这篇关于HIT软件构造实验三 重点与反思的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程