散分Ing

解决方案 »

  1.   

    Delphi 基础类 (未解决问题)
    [抽样数据]
    ? 有两个窗口,请问如何实现拖动其中一个窗口,另外那个窗口的也跟着移动? (smallsnig )  50 0 01-22 21: 28 管理  
    ... 共29贴 ...
    ? 各位在软件公司工作的朋友每天能抽出多长时间看书学习? (zxfsdbj )  20 58 01-22 20: 06 管理  [统计结果]
    合计分数: 2024.00   (分); 合计回复:  395.00   (次); 合计时差:   82.00   (分钟)
    平均分数:   69.79(分/贴); 平均回复:   13.62(次/贴); 平均时差:    2.83(分钟/贴)
    //---------------------------------------------------------------
      

  2.   

    //发一段代码不就与技术有关了!~~这样就不会被转移~~
    //嘿嘿~~(*//
    标题:CSDN人气统计
    说明:统计抽样帖子中分数、回复、时间差的情况 
    设计:Zswang
    支持:[email protected]
    日期:2002-07-06
    //*)unit TopicUnit;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TFormTopic = class(TForm)
        MemoData: TMemo;
        ButtonCalc: TButton;
        MemoReport: TMemo;
        EditTitle: TEdit;
        procedure FormCreate(Sender: TObject);
        procedure ButtonCalcClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      FormTopic: TFormTopic;implementation{$R *.dfm}{$IFDEF VER140}
    uses StrUtils, DateUtils;
    {$ELSE}
    function ReverseString(const AText: string): string;
    var
      I: Integer;
    begin
      Result := '';
      for I := Length(AText) downto 1 do
        Result := Result + AText[I];
    end;function SpanOfNowAndThen(const ANow, AThen: TDateTime): TDateTime;
    begin
      if ANow < AThen then
        Result := AThen - ANow
      else
        Result := ANow - AThen;
    end;function MinuteSpan(const ANow, AThen: TDateTime): Double;
    begin
      Result := 24 * 60 * SpanOfNowAndThen(ANow, AThen);
    end;function StrToDateTimeDef(const S: string; const Default: TDateTime): TDateTime;
    begin
      try
        Result := StrToDateTime(S);
      except
        Result := Default;
      end;
    end;
    {$ENDIF}function Calc(mStrings: TStrings; var nMark, nRevert, nTimeSpan: Real): Boolean;
    const
      cYear = '2002';
    var
      I, J: Integer;
      S: string;
      vMaxTime: TDateTime;
      vMinTime: TDateTime;
      vMark, vRevert: Integer;
      vDateTime: TDateTime;
    begin
      Result := False;
      if not Assigned(mStrings) then Exit;
      ///////Begin 清除相同的数据
      for I := mStrings.Count - 1 downto 0 do
        if mStrings.IndexOf(mStrings[I]) <> I then
          mStrings.Delete(I); 
      ///////End 清除相同的数据
      ///////Begin 初始化变量
      nMark := 0;
      nRevert := 0;
      nTimeSpan := 0;
      vMaxTime := 0;
      vMinTime := 0;
      ///////End 初始化变量
      for I := 0 to mStrings.Count - 1 do begin
        S := ReverseString(Trim(mStrings[I]));
        ///////Begin 处理时间部分
        Delete(S, 1, 5);
        Delete(S, 3, 1);
        vDateTime := StrToDateTimeDef(cYear + '-' +
          ReverseString(Copy(S, 1, 11)), 0);
        if vMaxTime = 0 then
          vMaxTime := vDateTime
        else if vDateTime > vMaxTime then
          vMaxTime := vDateTime;
        if vMinTime = 0 then
          vMinTime := vDateTime
        else if vDateTime < vMinTime then
          vMinTime := vDateTime;
        Delete(S, 1, 12);
        ///////End 处理时间部分
        ///////Begin 处理回复部分
        J := Pos(' ', S) - 1;
        vRevert := StrToIntDef(ReverseString(Copy(S, 1, J)), 0);
        Delete(S, 1, J + 1);
        ///////End 处理回复部分
        ///////Begin 处理分数部分
        J := Pos(' ', S) - 1;
        vMark := StrToIntDef(ReverseString(Copy(S, 1, J)), 0);
        ///////End 处理分数部分
        nMark := nMark + vMark;
        nRevert := nRevert + vRevert;
      end;
      nTimeSpan := Int(MinuteSpan(vMaxTime, vMinTime) + 0.5); //计算时间差
      Result := True;
    end;procedure TFormTopic.FormCreate(Sender: TObject);
    begin
      Font.Name := '宋体';
      Font.Size := 9;
      Caption := '人气统计';
      ButtonCalc.Caption := '统计(&C)';
      MemoData.WordWrap := False;
      MemoReport.WordWrap := False;
      MemoData.Clear;
      EditTitle.Clear;
      MemoReport.Clear;
    end;procedure TFormTopic.ButtonCalcClick(Sender: TObject);
    var
      vMark, vRevert, vTimeSpan: Real;
      vCount: Integer;
      I: Integer;
      vStringList: TStringList;
    begin
      vCount := MemoData.Lines.Count;
      if vCount <= 0 then Exit;
      vStringList := TStringList.Create;
      try
        ///////Begin 处理全拷贝的情况
        vStringList.Assign(MemoData.Lines);
        for I := vCount - 1 downto 0 do
           if (Pos('版主:', Trim(vStringList[I])) = 1) and (I > 0) then begin
             EditTitle.Text := Trim(vStringList[I - 1]);
             vStringList.Delete(I);
           end else if (Pos( '?', Trim(vStringList[I])) = 1) or
             (Pos( '√', Trim(vStringList[I])) = 1) then
           else vStringList.Delete(I);
        ///////End 处理全拷贝的情况
        Calc(vStringList, vMark, vRevert, vTimeSpan);
        vCount := vStringList.Count;
        MemoReport.Lines.Add(EditTitle.Text);
        MemoReport.Lines.Add('[抽样数据]');
        MemoReport.Lines.Add(vStringList[0]);
        MemoReport.Lines.Add(Format('... 共%d贴 ...', [vCount]));
        MemoReport.Lines.Add(vStringList[vStringList.Count - 1]);
        MemoReport.Lines.Add('');
        MemoReport.Lines.Add('[统计结果]');
        MemoReport.Lines.Add(Format(
      '合计分数: %7.2f   (分); 合计回复: %7.2f   (次); 合计时差: %7.2f   (分钟)',
          [vMark, vRevert, vTimeSpan]));
        MemoReport.Lines.Add(Format(
      '平均分数: %7.2f(分/贴); 平均回复: %7.2f(次/贴); 平均时差: %7.2f(分钟/贴)',
          [vMark / vCount, vRevert / vCount, vTimeSpan / vCount]));
        MemoReport.Lines.Add(
    '//---------------------------------------------------------------');
      finally
        vStringList.Free;
      end;
    end;end.
      

  3.   

    to ihihonline (小小-&gt;简单些再简单些,平淡些再平淡些)  
    这阵子你到哪里去了,大家都好想你啊!
    所以,你的分我全收下了:)