首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

一个月30天,13个人轮番排班,求代码

2013-04-20 
一个月30天,13个人轮流排班,求代码。周一至周五每天一人。周六周日每天二人。 for i:0 to 30 dobegin 内容 e

一个月30天,13个人轮流排班,求代码。
周一至周五每天一人。周六周日每天二人。
 for i:=0 to 30 do 
 begin

 内容


 end;

完成示例:周一  人员一
      周二  人员二
      周三  人员三
      周四  人员四
      周五  人员五
      周六  人员六 人员七
      周日  人员八 人员九
      周一  人员十
      ........
      循环下去....一个月循环完
[解决办法]


var
  ResultList : TStringList;
  WeekInd,CurrDay : integer;
  PersonInd : String;
……
for I := 1 to 30 do begin
  WeekInd := I div 9; //第几周,一周共9个人
  CurrDay := I mod 7; //周几
  if (CurrDay >= 1) and ((CurrDay <= 5)) then begin
    PersonInd := InttoStr(WeekInd * 9 + CurrDay);
  end else
  if (CurrDay = 6) then begin
    PersonInd := InttoStr(WeekInd * 9 + 6) + ',' + InttoStr(WeekInd * 9 + 7);
  end else 
  if (CurrDay = 0) then begin
    PersonInd := InttoStr(WeekInd * 9 + 8) + ',' + InttoStr(WeekInd * 9 + 9);
  end;
  ResultList.Add('第' + InttoStr(I) + '天,第' + PersonInd + '人'); 
end;

[解决办法]
var
  i,b,e,p:Integer;
  s:String;
Begin
  b:=Trunc(dt1.date);
  e:=Trunc(dt1.date);
  //mans:array [0..12] of Tman;
  p:=0;
  for i:=b to e do
  Begin
    s:='星期'+inttostr(DayOfWeek(i));
    s:=s+' '+mans[p].name;
    Inc(p); p:=p mod 13;
    if DayOfWeek(i) in [6,0] then
    Begin
      s:=s+' '+mans[p].name;
      Inc(p); p:=p mod 13;
    End;
    memo1.lines.add(s);
  End;
End;

[解决办法]
引用:
引用:原先InttoStr函数中的数值对13取余即可!
细节你自己调整吧!
呵呵!

取余后,数据不对。


你测试我提供的代码了没?
http://blog.csdn.net/simonhehe/article/details/8781504
对不同月份和起始周都做了处理, delphi XE测试通过.


热点排行