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

📄 u_data.~pas

📁 《delphi数据库系统开发实例导航》源代码
💻 ~PAS
字号:
unit u_data;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Db, DBTables, Series, TeeProcs, Chart;

type
  TDM_main = class(TDataModule)
    Database: TDatabase;
    T_code: TTable;
    DS_code: TDataSource;
    T_operator: TTable;
    DS_operator: TDataSource;
    T_add_room: TTable;
    DS_add_room: TDataSource;
    T_room_level: TTable;
    DS_room_level: TDataSource;
    T_room_state: TTable;
    DS_room_state: TDataSource;
    DS_modify: TDataSource;
    T_room_modify: TTable;
    T_room_level2: TTable;
    DS_room_level2: TDataSource;
    T_room_state2: TTable;
    DS_room_state2: TDataSource;
    Q_roommate: TQuery;
    DS_roommate: TDataSource;
    Q_room_level: TQuery;
    Q_turnover: TQuery;
    Q_used_room: TQuery;
    procedure T_operatorNewRecord(DataSet: TDataSet);
    procedure T_room_modifyAfterScroll(DataSet: TDataSet);
  private
    { Private declarations }
  public
    procedure SetCodeTable(TableName:String);
    procedure OpenOperator(State:Boolean);
    procedure SetOperatorPassword(password:String);
    procedure OpenAddRoom(State:Boolean);
    procedure OpenModifyRoom(State:Boolean);
    procedure SetModifyFilter(RoomID:String);
    procedure GetRoomLevel(RoomLevel:TStrings);
    procedure GetRoomStat(StartDate,EndDate:TDate;
      TimeStep, StatType:Boolean;RoomLevel:Integer;
      BarSeries:TBarSeries);
    function SumTurnover(StartDate, EndDate:TDate):Integer;
    function SumUsedRoom(StartDate, EndDate:TDate;RoomLevel:Integer):Integer;
    function GetNextDate(StartDate:TDate; TimeStep:Boolean):TDate;
  end;

var
  DM_main: TDM_main;

implementation

uses crypt;
{$R *.DFM}


procedure TDM_main.SetCodeTable(TableName:String);
begin
  T_code.Close;
  if TableName<>'Close' then
  begin
    T_code.TableName:=TableName;
    T_code.Open;
  end;
end;

procedure TDM_main.OpenOperator(State:Boolean);
begin
  T_operator.Active:=State;
end;

procedure TDM_main.SetOperatorPassword(password:String);
begin
  password:=Copy(password+password, 1, 10);
  password:=Encrypt(password, 111);
  with T_operator do
  begin
    Edit;
    FieldValues['PASSWD']:=password;
  end;
end;

procedure TDM_main.T_operatorNewRecord(DataSet: TDataSet);
begin
  SetOperatorPassword('');
end;

procedure TDM_main.OpenAddRoom(State:Boolean);
begin
  T_add_room.Active:=State;
  T_room_level.Active:=State;
  T_room_state.Active:=State;
end;

procedure TDM_main.OpenModifyRoom(State:Boolean);
begin
  T_room_modify.Active:=State;
  T_room_level2.Active:=State;
  T_room_state2.Active:=State;
  if State then
    T_room_modifyAfterScroll(nil)
  else
    Q_roommate.Close;
end;

procedure TDM_main.SetModifyFilter(RoomID:String);
begin
  with T_room_modify do
  begin
    Close;
    if length(RoomID)>0 then
    begin
      Filter:='ID='''+RoomID+'''';
      Filtered:=True;
    end
    else
      Filtered:=False;
    Open;
  end;
end;

procedure TDM_main.T_room_modifyAfterScroll(DataSet: TDataSet);
begin
  with Q_roommate do
  begin
    Close;
    Prepare;
    Open;
  end;
end;

procedure TDM_main.GetRoomLevel(RoomLevel:TStrings);
begin
  RoomLevel.Clear;
  RoomLevel.Add('全部级别');
  with Q_room_level do
  begin
    Open;
    First;
    while not Eof do
    begin
      RoomLevel.Add(FieldValues['DESCRIPT']);
      Next;
    end;
    Close;
  end;
end;

procedure TDM_main.GetRoomStat(StartDate,EndDate:TDate;
  TimeStep, StatType:Boolean;RoomLevel:Integer;
  BarSeries:TBarSeries);
var
  StatResult:integer;
  MidDate:TDate;
  StatLabel:String;
begin
  BarSeries.Clear;
  while StartDate<EndDate do
  begin
    MidDate:=GetNextDate(StartDate, TimeStep);
    if StatType then
      StatResult:=SumTurnover(StartDate, MidDate)
    else
      StatResult:=SumUsedRoom(StartDate, MidDate, RoomLevel);
    if TimeStep then
      StatLabel:=FormatDateTime('dd', StartDate)+'日'
    else
      StatLabel:=FormatDateTime('mm', StartDate)+'月';
    BarSeries.AddY(StatResult,StatLabel);
    StartDate:=MidDate;
  end;
end;

function TDM_main.SumTurnover(StartDate, EndDate:TDate):Integer;
begin
  with Q_turnover do
  begin
    Params.ParamValues['START_TIME']:=StartDate;
    Params.ParamValues['END_TIME']:=EndDate;
    Open;
    if not FieldByName('SUM').IsNull then
      SumTurnover:=FieldValues['SUM']
    else
      SumTurnover:=0;
    Close;
  end;
end;

function TDM_main.SumUsedRoom(StartDate, EndDate:TDate; RoomLevel:Integer):Integer;
var
  TotalCount:Integer;
  LevelStr:String;
begin
  TotalCount:=0;
  with Q_used_room do
  begin
    if RoomLevel=0 then
      LevelStr:='%'
    else
      LevelStr:=IntToStr(RoomLevel-1);
    Params.ParamValues['LEVEL']:=LevelStr;
    while StartDate<EndDate do
    begin
      Params.ParamValues['DAY']:=StartDate;
      Open;
      TotalCount:=TotalCount+FieldValues['COUNT'];
      Close;
      StartDate:=StartDate+1;
    end;
  end;
  Result:=TotalCount;
end;

function TDM_main.GetNextDate(StartDate:TDate;TimeStep:Boolean):TDate;
var
  TimeYear,TimeMonth:String;
begin
  if TimeStep then
    Result:=StartDate+1
  else
  begin
    TimeYear:=FormatDateTime('yyyy', StartDate);
    TimeMonth:=FormatDateTime('mm', StartDate);
    if TimeMonth='12' then
    begin
      TimeYear:=IntToStr(StrToInt(TimeYear)+1);
      TimeMonth:='01';
    end
    else
      TimeMonth:=IntToStr(StrToInt(TimeMonth)+1);
    Result:=StrToDate(TimeYear+'-'+TimeMonth+'-01');
  end;
end;

end.

⌨️ 快捷键说明

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