📄 u_data.~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 + -