5组人轮流上班,每班上8小时,具体时间安排,1-8是一班,8-16另一班,16-24又一班,5组人轮流上,5组人轮完一圈后自动回头重新轮!设计中问题是如何判别当前的组号,怎么实现到时间自动轮换!高手们帮帮忙,解决马上给分,提出好的方法也给分!

解决方案 »

  1.   

    把组看成一个人就可以了
    然后用time加
      

  2.   

    for 循环加 if 判断
      

  3.   

    Option Explicit
    Dim StartDate As StringPrivate Sub Command1_Click()
      Dim nDays As Integer
      Dim nHous As Integer
      Dim CurZu As Integer
      
      nDays = DateDiff("d", StartDate, Date)
      nHous = GetPeNo(Format(Time, "HH:MM"))
      CurZu = (nDays * 3 + nHous) Mod 5
      MsgBox "當前是第 " & CurZu & " 組當班"
    End SubPrivate Function GetPeNo(StrTime As String) As Integer
        If StrTime >= "01:00" And StrTime < "08:00" Then
           GetPeNo = 1
        ElseIf StrTime >= "08:00" And StrTime < "16:00" Then
           GetPeNo = 2
        ElseIf StrTime >= "16:00" And StrTime < "24:00" Then
           GetPeNo = 3
        End If
    End FunctionPrivate Sub Form_Load()
      StartDate = "2006/08/01"
    End Sub以上代碼能夠得出任一時間的當班情況
      

  4.   

    小弟,初学VB,呵呵,水平有限,现在还有个问题,如果我一直用这个系统,如果换班了,如现在是7点,变8点后,如何让值班员也与之跟着改变呢!是不是要加个 timer控件进行实时判断?
      

  5.   

    给5个人编号,用一个变量I (从0到4), 时间用变量L来记录(从0到8)
    Dim I as long 
    Dim L as long 
    Do while True '循环一次就算一个小时
       L=L+1 '时间+1
       If L=8 then
         L=0 '重新计算时间
         I = (I+1) Mod 5 '换下一个人
       End If
    Loop
    说明: 当L=8的时候,换下一个人I+1,并重新计时L=0, 因为只有5个人,所以要MOD 5这只是一个思路,并不复杂.
    如果是实际真的要每1小时运行一次循环那写法会有所不同,比如用在TIMER控件内判断当前时间,甚至是在循环内用SLEEP来等待1一个小时等等.
    如果只是考试题目,看算法,这已经足够了.
      

  6.   

    知道当前数值那前一个就是当前数字-1,后一个是+1,当然要做一下对5的MOD运算。
      

  7.   

    '返回時間數
    '參數:
    'mstime:YYYYMMDDHH 開始輪流的日期及時間
    'meTime:YYYYMMDDHH 當前的日期及時間
    Private Function fTimeNum(msTime As String, meTime As String) As Long
        Dim msYmd As String
        Dim meYmd As String
        Dim mGapHour As Long
        Dim msHour As Integer
        Dim meHour As Integer
        msYmd = Format(Left(msTime, 8), "0000-00-00") '開始日期
        meYmd = Format(Left(meTime, 8), "0000-00-00") '結束日期
        msHour = Right(msTime, 2) '開始時間
        meHour = Right(meTime, 2) '結束時間
        mGapHour = DateDiff("d", msYmd, meYmd) * 24  '天數*24
        fTimeNum = mGapHour + meHour - msHour
    End Function
    Private Function fClassNo(msTime As String, mNowTime As String, mFlag As Integer) As String
        Dim mLngTime As Long
        Dim mLngNum As Long
        Dim mLngNo As Long
        mLngTime = fTimeNum(msTime, mNowTime)
        mLngNum = mLngTime \ 8 '已輪的次數
        If mFlag = 0 Then '返回總班數
            mLngNo = mLngNum
        Else
            mLngNo = mLngNum Mod 5 '當前班號
        End If
        Select Case mFlag
            Case 0, 1 '總班次/當前班次
                fClassNo = mLngNo
            Case 2 '后一班
                fClassNo = Abs(mLngNo + 1)
            Case 3 '前一班
                fClassNo = Abs(mLngNo - 1)
        End Select
        If fClassNo = 0 Then fClassNo = 5
    End Function
    Private Sub Command1_Click()
        Text3.Text = fClassNo(Text1.Text, Text2.Text, 0)
    End Sub