📄 casualcardform.~pas
字号:
unit CasualCardForm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, Menus, Db, ADODB, ComCtrls;
type
TfrmCasualCard = class(TForm)
Edit1: TEdit;
BitBtn1: TBitBtn;
PopupMenu1: TPopupMenu;
ADOQuery1: TADOQuery;
ADOTable1: TADOTable;
RichEdit1: TRichEdit;
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
MoneyArray:array of double;
state:smallint;
procedure AddMoney();
procedure NewCasualCard();
function GetCasualCardId():string;
function MoneyToDB(AMoney:double):integer;
public
{ Public declarations }
end;
var
frmCasualCard: TfrmCasualCard;
implementation
uses CardDM, MainForm;
{$R *.DFM}
procedure TfrmCasualCard.AddMoney;
var
mLen : integer;
mMoney: double;
begin
//数据转换
mMoney := StrToFloat(Edit1.Text);
//增加数组长度
mLen := Length(MoneyArray);
SetLength(MoneyArray,mLen+1);
//在数组末尾添加
MoneyArray[mLen] := mMoney;
RichEdit1.Lines.Add(Format('%20.2f',[mMoney]));
//处理用户界面
Edit1.Text := '';
Edit1.SetFocus;
end;
procedure TfrmCasualCard.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
//回车键
if Key = #13 then
begin
//开始一张新的临时卡
if State = 0 then NewCasualCard
else begin
State := 0;
AddMoney;
end;
end
//输入数字
else if Key in ['0'..'9'] then
begin
//输入了金额的整数部分
if (State = 0) or (State = 1) then State := 1
//输入了金额的小数部分十分位
else if State = 2 then State := 3
//输入了金额的小数部分百分位
else if State = 3 then State := 4
////输入了两位小数,不能再输入
else Key := #0;
end
//输入小数点
else if Key = '.' then
begin
//之前没有输入小数点
if State = 1 then State := 2
else Key := #0;
end
else Key := #0;
end;
procedure TfrmCasualCard.NewCasualCard;
var
mTotal:double;
i:integer;
begin
RichEdit1.Lines.Add('---------------------------');
mTotal := 0.0;
//计算临时卡的总金额
for i:=0 to High(MoneyArray) do
begin
mTotal := mTotal + MoneyArray[i];
end;
//添加总金额
RichEdit1.Lines.Add(Format('%20.2f',[mTotal]));
RichEdit1.Repaint;
//将临时卡收的费用写库
if MoneyToDB(mTotal) < 0 then
begin
ShowMessage('数据库错误,本次操作将被取消!');
Exit;
end;
//=============打印临时的票据====
RichEdit1.Print('');
//=============状态清零==========
SetLength(MoneyArray,0);
State := 0;
//等待打印
Sleep(3000);
//开始办理新卡
RichEdit1.Lines.Clear;
Edit1.Text := '';
end;
function TfrmCasualCard.GetCasualCardId: string;
var
mResult : integer;
//整形数据到8位字符串的转换
function _IntToStr8(AInt:integer):string;
var
mStr : string;
begin
mStr := IntToStr(AInt);
mStr := Copy(mStr,1,8);
//根据整数的长度再前面补零
case Length(mStr) of
1: mStr := '0000000' + mStr ;
2: mStr := '000000' + mStr ;
3: mStr := '00000' + mStr ;
4: mStr := '0000' + mStr ;
5: mStr := '000' + mStr ;
6: mStr := '00' + mStr ;
7: mStr := '0' + mStr ;
end;
Result := mStr;
end;
begin
with ADOQuery1 do
begin
Close;
Connection := DMMain.cnnMain ;
SQL.Clear;
//检查数据库是否为空
SQL.Add('select count(*) as _counter from casual_card_use');
Open;
//数据库为空
if FieldByName('_counter').AsInteger = 0 then
begin
Result := '00000001';
Exit;
end;
Close;
SQL.Clear;
//从数据库中读取最大的卡号
SQL.Add('select max(card_id) as maxid from casual_card_use');
try
Open;
if RecordCount > 0 then
begin
mResult := FieldByName('maxid').AsInteger;
Result := _IntToStr8(mResult + 1);
end
// 抛出异常,进入except模块;
else raise Exception.Create('');
except
Result := '########';
Exit;
end;
end;
end;
function TfrmCasualCard.MoneyToDB(AMoney:double):integer;
var
mCardId : string;
mStr : string;
begin
Result := 1;
mCardId := GetCasualCardId();
if mCardId = '########' then
begin
mStr := '数据库读取时发生错误,程序将被关闭。'#10#13;
mStr := mStr + '请立即和程序开发方联系!';
ShowMessage(mStr);
Close; // 关闭自己
frmMain.Close; //关闭主窗口
Exit;
end;
try
with ADOTable1 do
begin
Append;
FieldByName('card_id').AsString := mCardId;
FieldByName('use_date').AsDateTime := Now();
FieldByName('money').AsFloat := AMoney;
Post;
end;
except
Result := -1;
end;
end;
procedure TfrmCasualCard.FormShow(Sender: TObject);
begin
//打开casual_card_use表
with ADOTable1 do
begin
Connection := DMMain.cnnMain;
TableName := 'casual_card_use';
Active := True;
end;
//==============初始化成员变量===============
SetLength(MoneyArray,0);
State := 0;
//处理用户界面
RichEdit1.Lines.Clear;
Edit1.Text := '';
end;
procedure TfrmCasualCard.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
//关闭数据表,释放资源
ADOTable1.Active := False;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -