⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmhomepage.pas

📁 里面有个人一天消费管理
💻 PAS
字号:
unit frmhomepage;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, RzPanel, RzGroupBar, RzTabs, RzButton, StdCtrls, RzLstBox,
  Grids, RzGrids, RzSplit, RzBorder, RzLabel, Mask, RzEdit, RzSpnEdt, RzCmboBx,
  ImgList;

type
  THomepageFm = class(TForm)
    panChild: TRzPanel;
    Splt_Main: TRzSplitter;
    PnlDate: TRzPanel;
    Splt_Child: TRzSplitter;
    Pnl_Income: TRzPanel;
    Pnl_Payout: TRzPanel;
    Pnl_bank: TRzPanel;
    GrpBx_Month: TRzGroupBox;
    SpEdit_Year: TRzSpinEdit;
    lbl_Year: TRzLabel;
    ImgLst: TImageList;
    lbl_Bank: TRzLabel;
    lbl_Payout: TRzLabel;
    Strgrd_Payout: TRzStringGrid;
    Strgrd_Bank: TRzStringGrid;
    DisplayEdit: TRzLEDDisplay;
    cmdclose: TRzButton;
    Strgrd_Income: TRzStringGrid;
    StrGrd_stat: TRzStringGrid;
    lbl_Income: TRzLabel;
    lbl_stat: TRzLabel;
    Timer1: TTimer;
    BtnDisplay: TRzBitBtn;
    Image1: TImage;
    procedure SpEdit_YearChange(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure StrGrd_statDrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure Strgrd_BankDrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure Strgrd_IncomeDrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure Strgrd_PayoutDrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FirstRun;
    procedure cmdCloseClick(Sender: TObject);
    procedure Income_stat;
    procedure Payout_stat;
    procedure bank_stat;
    procedure sum_stat;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  HomepageFm: THomepageFm;

implementation

uses frmmain, Common, frmdata;

{$R *.dfm}
procedure THomepageFm.FirstRun;
const Ary_Week: array[1..7] of string =('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
begin
  MainFm.RzProgressStatus1.Percent:=10;
  //MainFm.Caption:=application.Title+'-'+'主页';
  SpEdit_Year.Text:=GetPrestr(FormatDateTime('YYYY"-"MM"-"DD', date),0,4);
  //CmbBx_Month.Text:=GetPrestr(FormatDateTime('YYYY"-"MM"-"DD', date),6,2);
  DisplayEdit.Caption:='Today:'+datetostr(date)+'  '+Ary_Week[DayOfWeek(Now)];
  MainFm.RzProgressStatus1.Percent:=20;
  Income_stat;//收入统计
  MainFm.RzProgressStatus1.Percent:=40;
  Payout_stat;//开支统计
  MainFm.RzProgressStatus1.Percent:=60;
  bank_stat;  //银行帐户余额统计
  MainFm.RzProgressStatus1.Percent:=80;
  sum_stat;
  MainFm.RzProgressStatus1.Percent:=100;
  //MainFm.RzProgressStatus1.Percent:=0;
  Timer1.Enabled:=true;
end;


procedure THomepageFm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  //MainFm.Caption:=application.Title;
end;

procedure THomepageFm.SpEdit_YearChange(Sender: TObject);
begin
  Screen.Cursor:=crHourGlass;
  MainFm.RzProgressStatus1.Percent:=20;
  Income_stat;//收入统计
  MainFm.RzProgressStatus1.Percent:=40;
  Payout_stat;//开支统计
  MainFm.RzProgressStatus1.Percent:=60;
  bank_stat;  //银行帐户余额统计
  MainFm.RzProgressStatus1.Percent:=80;
  sum_stat;
  MainFm.RzProgressStatus1.Percent:=100;
  Timer1.Enabled:=true;
  Screen.Cursor := crDefault;
end;

procedure THomepageFm.Strgrd_BankDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  s:string;
  r:TRect;
begin
  with Strgrd_Bank do
    begin
      Canvas.FillRect(Rect);
      s:=Cells[ACol,ARow];
      r:=Rect;
      DrawText(Canvas.Handle,PChar(s),Length(s),r,DT_CENTER or DT_SINGLELINE or DT_VCENTER);
    end;   
end;

procedure THomepageFm.Strgrd_IncomeDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
var
  s:string;
  r:TRect;
begin
   with Strgrd_Income do
    begin
      Canvas.FillRect(Rect);
      s:=Cells[ACol,ARow];
      r:=Rect;
      DrawText(Canvas.Handle,PChar(s),Length(s),r,DT_CENTER or DT_SINGLELINE or DT_VCENTER);
    end;
end;

procedure THomepageFm.Strgrd_PayoutDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
var
  s:string;
  r:TRect;
begin
  with Strgrd_Payout do
    begin
      Canvas.FillRect(Rect);
      s:=Cells[ACol,ARow];
      r:=Rect;
      DrawText(Canvas.Handle,PChar(s),Length(s),r,DT_CENTER or DT_SINGLELINE or DT_VCENTER);
    end;
end;

procedure THomepageFm.cmdCloseClick(Sender: TObject);
begin
  panChild.Parent:=homepageFm;
  homepageFm.Close;
end;

procedure THomepageFm.Income_stat;    //收入统计
var i,renyuanNum,colx,CurrentTableRecordNum:integer;
family_name,riqi:string;
begin
 if datafm.Tbl_Income.RecordCount<1 then
 begin
   Strgrd_Income.RowCount:=2;
   Strgrd_Income.colcount:=2;
   Strgrd_Income.Cells[0,0]:='无统计数据';
 end
 else
 begin
 ClearStrGrd(Strgrd_Income);
 Strgrd_Income.Cells[0,0]:='统计日期';
 renyuanNum:=dataFm.Tbl_family_option.RecordCount; //第一步添加人员
 colx:=0;
 if renyuanNum > 0 then
 begin
   Strgrd_Income.ColCount:=2;
   with   dataFm.Tbl_family_option do
   begin
     CurrentTableRecordNum :=RecNo;
     first;
     while not EOF do
     begin
       family_name:=FieldByName('xm').AsString;
       {with dataFm.Qry_income_stat_renyuan do
       begin  // 0
         close;
         sql.clear;
         sql.add('select * from income where renyuan='+''''+family_name+'''');
         open; }
         //if RecordCount>0 then
         //begin  //1
         colx:=colx+1;
         Strgrd_Income.RowCount:=14;
         Strgrd_Income.ColCount:=Strgrd_Income.ColCount+1;
         Strgrd_Income.Cells[colx,0]:=family_name;
         for I := 1 to 12 do        // 按月查询
         begin  //2
         riqi:=SpEdit_Year.Text+'-'+FormatMonth(i);
         with dataFm.Qry_income_stat_renyuan do
         begin     //3
           close;
           sql.clear;
           sql.add('select * from income where renyuan='+''''+family_name+''''+'and riqi like'+'''%'+riqi+ '%''');
           open;
           Strgrd_Income.Cells[0,i]:=SpEdit_Year.Text+'年'+FormatMonth(i)+'月';
           Strgrd_Income.Cells[colx,i]:=SumField(dataFm.Qry_income_stat_renyuan,'jine');
         end;   //3
         end;   //2
         //end;    //1
         //end;   //0
       next;
     end;
     MoveBy(CurrentTableRecordNum);
     colx:=colx+1;
     Strgrd_Income.Cells[colx,0]:='共计';
     Strgrd_Income.Cells[0,13]:='共计';
     StrGrdSum(Strgrd_Income);
     end;
 end;
end;
end;


procedure THomepageFm.StrGrd_statDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
var
  s:string;
  r:TRect;
begin
  with StrGrd_stat do
    begin
      Canvas.FillRect(Rect);
      s:=Cells[ACol,ARow];
      r:=Rect;
      DrawText(Canvas.Handle,PChar(s),Length(s),r,DT_CENTER or DT_SINGLELINE or DT_VCENTER);
    end;
end;

procedure THomepageFm.Payout_stat;//开支统计
var CurrentTableRecordNum,Month,colx:integer;
PayoutName,SearchData:string;
begin
  if datafm.Tbl_Payout.RecordCount<1 then
  begin
    Strgrd_Payout.RowCount:=2;
    Strgrd_Payout.colcount:=2;
    Strgrd_Payout.Cells[0,0]:='无统计数据';
  end
  else
  begin
    ClearStrGrd(Strgrd_Payout);
    Strgrd_Payout.RowCount:=14;
    Strgrd_Payout.colcount:=2;
    colx:=0;
    Strgrd_Payout.Cells[0,0]:='统计日期';
    Strgrd_Payout.Cells[0,13]:='共计';
    if datafm.Tbl_Payout_option.RecordCount>0 then
    begin
      with   datafm.Tbl_Payout_option do
      begin
        CurrentTableRecordNum :=RecNo;
        first;
        while not EOF do
        begin
          PayoutName:='';
          PayoutName:=FieldByName('xiangmu').AsString;
          {with datafm.Qry_Payout_stat1 do
          begin
            close;
            sql.clear ;
            sql.add('select * from payout where xiangmu='+''''+PayoutName+'''');
            open; }
            //if datafm.Qry_Payout_stat1.RecordCount>0 then
           // begin
              Strgrd_Payout.colcount:=Strgrd_Payout.colcount+1;
              colx:=colx+1;
              Strgrd_Payout.Cells[colx,0]:= PayoutName;
              for Month := 1 to 12 do
              begin
                SearchData:= SpEdit_Year.Text+'-'+FormatMonth(Month);
                with datafm.Qry_Payout_stat2 do
                begin
                  close;
                  sql.Clear;
                  sql.add('select * from payout where xiangmu='+''''+PayoutName+''''+'and riqi like'+'''%'+SearchData+ '%''');
                  open;
                  Strgrd_Payout.Cells[0,month]:=SpEdit_Year.Text+'年'+FormatMonth(Month)+'月';
                  Strgrd_Payout.Cells[colx,month]:=SumField(dataFm.Qry_Payout_stat2,'jine');
                  close;
                end;
              end;
            //end;
            //close;
          //end;
          next;
        end;
        MoveBy(CurrentTableRecordNum);
        colx:=colx+1;
        Strgrd_Payout.Cells[colx,0]:='共计' ;
        StrGrdSum(Strgrd_Payout);
      end;
    end;
  end;
end;

procedure THomepageFm.bank_stat;  //银行帐户余额统计
var CurrentTableRecordNum ,rowy,i:integer;
bankbook:string;
Cunru,Quchu,Sum:double;
begin
  if datafm.Tbl_Bank.RecordCount<1 then
  begin
    Strgrd_Bank.RowCount:=1;
    Strgrd_Bank.colcount:=1;
    Strgrd_Bank.Cells[0,0]:='无统计数据';
  end
  else
  begin
    rowy:=0;
    ClearStrGrd(Strgrd_Bank);
    Strgrd_Bank.ColCount:=2;
    Strgrd_Bank.RowCount:=2;
    Strgrd_Bank.ColWidths[0]:=100;
    Strgrd_Bank.ColWidths[1]:=60;
    Strgrd_Bank.Cells[0,0]:='银行帐户名称';
    Strgrd_Bank.Cells[1,0]:='帐户余额';
    with DataFm.Tbl_Bank_Option do
    begin
      CurrentTableRecordNum :=RecNo;
      first;
      while not EOF do
      begin
        rowy:=rowy+1;
        bankbook:='';
        bankbook:= FieldByName('yhmc').AsString+'-'+FieldByName('zh').AsString;
        Strgrd_Bank.RowCount:=Strgrd_Bank.RowCount+1;
        Strgrd_Bank.Cells[0,rowy]:=bankbook;
        with DataFm.Qry_Bank_Stat1  do
        begin
          close;
          sql.clear;
          sql.add('select * from bank where kahao='+''''+bankbook+''''+'and xiangmu='+'''存入''');
          open;
          Cunru:=strtofloat(SumField(dataFm.Qry_Bank_Stat1,'jine'));
        end;
        with DataFm.Qry_Bank_Stat2  do
        begin
          close;
          sql.clear;
          sql.add('select * from bank where kahao='+''''+bankbook+''''+'and xiangmu<>'+'''存入''');
          open;
          Quchu:=strtofloat(SumField(dataFm.Qry_Bank_Stat2,'jine'));
        end;
        Strgrd_Bank.Cells[1,rowy]:=floattostr(Cunru-Quchu);
        next;
      end;
      MoveBy(CurrentTableRecordNum);
      rowy:=rowy+1;
      Strgrd_Bank.Cells[0,rowy]:='共计';
      Sum:=0;
      for I := 1 to rowy-1 do
      begin
        Sum:=Sum+strtofloat(Strgrd_Bank.Cells[1,i]);
      end;
      Strgrd_Bank.Cells[1,rowy]:=floattostr(Sum);
    end;
  end;
end;

procedure THomepageFm.sum_stat;
var YearIncomeStat,YearPayoutStat,IncomeStat,PayoutStat:double;
year:string;
begin
  with  StrGrd_stat do   //统计表格格式
  begin
    ClearStrGrd(StrGrd_stat);
    ColCount:=2;
    RowCount:=8;
    ColWidths[0]:=100;
    ColWidths[1]:=60;
    RowHeights[4]:=5;
    Cells[0,0]:='统计项目';
    Cells[1,0]:='金额';
    Cells[0,1]:=SpEdit_Year.Text+'年'+'收入';
    Cells[0,2]:=SpEdit_Year.Text+'年'+'支出';
    Cells[0,3]:=SpEdit_Year.Text+'年'+'余额';
    Cells[0,5]:='总收入';
    Cells[0,6]:='总支出';
    Cells[0,7]:='总余额';
  end;

  year:=SpEdit_Year.Text;  //获取要查看的年份

  with DataFm.Qry_income_stat3 do      // 查看的年份的收入
  begin
    close;
    sql.Clear;
    sql.add('select * from income where riqi like'+'''%'+year+ '%''');
    open;
    YearIncomeStat:=strtofloat(SumField(DataFm.Qry_income_stat3,'jine'));
    StrGrd_stat.Cells[1,1]:=floattostr(YearIncomeStat);
    close;
  end;

  with DataFm.Qry_payout_stat3 do   // 查看的年份的支出
  begin
    close;
    sql.Clear;
    sql.add('select * from payout where riqi like'+'''%'+year+ '%''');
    open;
    YearPayoutStat:=strtofloat(SumField(DataFm.Qry_payout_stat3,'jine'));
    StrGrd_stat.Cells[1,2]:=floattostr(YearPayoutStat);
    close;
  end;

  StrGrd_stat.Cells[1,3]:=floattostr(YearIncomeStat-YearPayoutStat);// 查看的年份的余额

  with DataFm.Qry_income_stat4 do   //总收入
  begin
    close;
    sql.Clear;
    sql.add('select * from income');
    open;
    IncomeStat:=strtofloat(SumField(DataFm.Qry_income_stat4,'jine'));
    StrGrd_stat.Cells[1,5]:=floattostr(IncomeStat);
    close;
  end;

  with DataFm.Qry_payout_stat4 do  //总支出
  begin
    close;
    sql.Clear;
    sql.add('select * from payout');
    open;
    PayoutStat:=strtofloat(SumField(DataFm.Qry_payout_stat4,'jine'));
    StrGrd_stat.Cells[1,6]:=floattostr(PayoutStat);
    close;
  end;

  StrGrd_stat.Cells[1,7]:=floattostr(IncomeStat-PayoutStat); //总余额
end;

procedure THomepageFm.Timer1Timer(Sender: TObject);
begin
  Timer1.Tag:=Timer1.Tag+1;
  if Timer1.Tag>0 then
  begin
    MainFm.RzProgressStatus1.Percent:=0;
    Timer1.Enabled:=false;
    Timer1.Tag:=0;
  end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -