Skip to content

PersonControl

xxr5566833 edited this page Dec 11, 2017 · 6 revisions

PersonControl

相当于人事部吧

propertites:

Person persons_[]

当前员工的数组

Number currentNum_

当前有多少员工,初始为0

Number maxNum_

当前最多可以有多少员工,暂时设置为5

PersonGroup[] projectGroups_

项目组数组,表示当前正在 开发/销售/维护的项目组

double credit_

信誉度,影响银行的贷款额度

functions:

void changeCredit(Number num)

num可以为正也可以为负

this.credit_ += num;

Number getCredit()

return this.credit_ <= 0 ? 0 : this.credit_

void addLimit()

可雇佣最大人数加1

boolean canHire()

看当前人员是否已满

return this.currentNum_ < this.maxNum_

boolean hire(Person person)

@require:自己的列表中没这个person;且这个person合法; 且当前没有达到最大人数

@modify:this

@effect:

判断是不是人员已满:

  1. 如果当前已满,那么返回false
  2. 如果没满,那么:
    1. 抛出事件"MONEYCUT",force = false,判断返回值
      1. true,那么
        1. currentNum_增加1
        2. persons_中包含person
        3. 返回true
      2. false,then return false
Person fire(Number index)

@require: index和当前persons_数组的其中某个person元素的index_相等

遍历persons_,由index找出这个员工person

遍历this.projectGroups_,每一个记为group,调用group.removePerson(person)

this.persons_中去掉这个员工,currentNum_自减1,返回这个员工

void begin(Project project, Persons persons)

表示要开始做这个项目,初始化项目组,根据ui传入的project和persons参数

  • new 一个 ProjectGroup,记为group,设置group.node = this.node,即设置group的node属性PersonGenerator
  • 同样设置project.node
  • 调用group.begin(project,persons)
  • this.projectGroups_包含group
void stop(PersonGroup group)

解散这个组

  • 调用group.stop()
  • this.personGroups_中不再包含group
void work()

负责每个项目组状态的改变以及具体的工作

遍历this.projectGroups_,设置每个元素是group

  • 调用group.work()工作
  • 如果group.state_ == end,那么这个吧这个group,加入到临时数组中

对于每一个临时数组中的group,调用this.stop(group)

showPersons()

返回persons_

paySalary()

"GETDATE"获取日期,如果是30的倍数,那么

计算当前员工总工资,设置event.detail.money ,event.detail.record = "付工资" 和 event.detail.force = true ,"MONEYCUT"

void pause()

unschedule this.work, paySalary

void resume(double time)

schedule this.work,paySalary ,频率为time

Clone this wiki locally