📄 transaction.pas
字号:
unit transaction;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, ExtCtrls, DB, DBTables, StdCtrls, Spin, ComCtrls,
IdGlobal;
type
TfrmTransaction = class(TForm)
GroupBox1: TGroupBox;
time: TDateTimePicker;
employeeId: TEdit;
articleId: TEdit;
memberId: TEdit;
Label1: TLabel;
Label3: TLabel;
Label5: TLabel;
btnOk: TButton;
btnClear: TButton;
GroupBox2: TGroupBox;
Label6: TLabel;
articleName: TLabel;
employeeName: TLabel;
Label12: TLabel;
payment: TLabel;
Label14: TLabel;
discount: TLabel;
Label16: TLabel;
needPay: TLabel;
GroupBox3: TGroupBox;
Label2: TLabel;
memberName: TLabel;
Label18: TLabel;
balance: TLabel;
Label20: TLabel;
deficiency: TLabel;
Label22: TLabel;
dot: TLabel;
Label24: TLabel;
level: TLabel;
DataSource1: TDataSource;
Panel1: TPanel;
DBGrid1: TDBGrid;
GroupBox4: TGroupBox;
asc: TRadioButton;
desc: TRadioButton;
GroupBox5: TGroupBox;
id1: TRadioButton;
id2: TRadioButton;
id3: TRadioButton;
d: TRadioButton;
Label4: TLabel;
Query1: TQuery;
number: TSpinEdit;
Table1: TTable;
Table2: TTable;
Table3: TTable;
Table4: TTable;
Table5: TTable;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ascClick(Sender: TObject);
procedure descClick(Sender: TObject);
procedure id1Click(Sender: TObject);
procedure id2Click(Sender: TObject);
procedure id3Click(Sender: TObject);
procedure dClick(Sender: TObject);
procedure btnClearClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btnOkClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmTransaction: TfrmTransaction;
implementation
{$R *.dfm}
procedure TfrmTransaction.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
self.Free;
end;
procedure TfrmTransaction.ascClick(Sender: TObject);
var
col:string;
begin
if id1.Checked then col:='会员编号'
else if id2.Checked then col:='商品编号'
else if id3.Checked then col:='员工编号'
else if d.Checked then col:='日期';
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('select * from mytransaction order by '+col+' asc');
try
query1.Open;
except
query1.ExecSQL;
end;
end;
procedure TfrmTransaction.descClick(Sender: TObject);
var
col:string;
begin
if id1.Checked then col:='会员编号'
else if id2.Checked then col:='商品编号'
else if id3.Checked then col:='员工编号'
else if d.Checked then col:='日期';
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('select * from mytransaction order by '+col+' desc');
try
query1.Open;
except
query1.ExecSQL;
end;
end;
procedure TfrmTransaction.id1Click(Sender: TObject);
var
s:string;
begin
if asc.Checked then s:='asc'
else if desc.Checked then s:='desc';
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('select * from mytransaction order by 会员编号 '+s);
try
query1.Open;
except
query1.ExecSQL;
end;
end;
procedure TfrmTransaction.id2Click(Sender: TObject);
var
s:string;
begin
if asc.Checked then s:='asc'
else if desc.Checked then s:='desc';
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('select * from mytransaction order by 商品编号 '+s);
try
query1.Open;
except
query1.ExecSQL;
end;
end;
procedure TfrmTransaction.id3Click(Sender: TObject);
var
s:string;
begin
if asc.Checked then s:='asc'
else if desc.Checked then s:='desc';
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('select * from mytransaction order by 员工编号 '+s);
try
query1.Open;
except
query1.ExecSQL;
end;
end;
procedure TfrmTransaction.dClick(Sender: TObject);
var
s:string;
begin
if asc.Checked then s:='asc'
else if desc.Checked then s:='desc';
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('select * from mytransaction order by 日期 '+s);
try
query1.Open;
except
query1.ExecSQL;
end;
end;
procedure TfrmTransaction.btnClearClick(Sender: TObject);
begin
memberId.Text:='';
articleId.Text:='';
employeeId.Text:='';
number.Text:='1';
time.Date:=now;
articleName.Caption:='';
employeeName.Caption:='';
payment.Caption:='';
discount.Caption:='';
needPay.Caption:='';
memberName.Caption:='';
balance.Caption:='';
dot.Caption:='';
deficiency.Caption:='';
level.Caption:='';
end;
procedure TfrmTransaction.FormCreate(Sender: TObject);
begin
time.Date:=now;
activeControl:=memberId;
articleName.Caption:='';
employeeName.Caption:='';
payment.Caption:='';
discount.Caption:='';
needPay.Caption:='';
memberName.Caption:='';
balance.Caption:='';
dot.Caption:='';
deficiency.Caption:='';
level.Caption:='';
end;
procedure TfrmTransaction.btnOkClick(Sender: TObject);
var
canAdd:boolean;
pay:currency;//商品金额
dc:currency;//优惠金额
needPay:currency;//应付金额
l:string;//会员级别
d:integer; //会员点数
stock:integer;//存货
bl,df:currency;
begin
{检查"会员编号"}
canAdd:=false;
with table1 do
begin
open;
first;
while not eof do
begin
if fields.FieldByName('会员编号').AsString=memberId.Text then
begin
canAdd:=true;
break;
end;
next;
end;
end;
if canAdd=false then
begin
messageDlg('"会员编号"错误,请重新输入!',mtWarning,[mbOk],0);
activeControl:=memberId;
abort;
end;
{检查"商品编号"}
canAdd:=false;
with table2 do
begin
open;
first;
while not eof do
begin
if fields.FieldByName('商品编号').AsString=articleId.Text then
begin
canAdd:=true;
break;
end;
next;
end;
end;
if canAdd=false then
begin
messageDlg('"商品编号"错误,请重新输入!',mtWarning,[mbOk],0);
activeControl:=articleId;
abort;
end;
{检查"经手人编号"}
canAdd:=false;
with table3 do
begin
open;
first;
while not eof do
begin
if fields.FieldByName('员工编号').AsString=employeeId.Text then
begin
canAdd:=true;
break;
end;
next;
end;
end;
if canAdd=false then
begin
messageDlg('"员工编号"错误,请重新输入!',mtWarning,[mbOk],0);
activeControl:=employeeId;
abort;
end;
{检查"购买数量"}
with table2 do
begin
if fields.FieldByName('存货').AsInteger<strToInt(number.Text) then
begin
messageDlg('"存货"不足,请重新输入!',mtWarning,[mbOk],0);
activeControl:=employeeId;
abort;
end;
stock:=fields.FieldByName('存货').AsInteger-strToInt(number.Text);
end;
{计算"商品金额"}
with table2 do
begin
pay:=fields.FieldByName('单价').AsCurrency*strToInt(number.Text);
end;
{计算"优惠金额"}
with table1 do
l:=fields.FieldByName('级别').AsString;
with table5 do
begin
open;
first;
while not eof do
begin
if fields.FieldByName('级别').AsString=l then
begin
dc:=fields.FieldByName('优惠比例').AsFloat*pay;
break;
end;
next;
end;
end;
{得到"应付金额"}
needPay:=pay-dc;
{检查是否超过欠款下限}
with table1 do
begin
bl:=fieldByName('结余').AsCurrency;
df:=fieldByName('欠款').AsCurrency;
end;
if needPay<=bl then
begin
bl:=bl-needPay;
df:=0;
end
else
begin
if df>0 then
begin
df:=df+needPay;
if df>table5.FieldByName('欠款限额').AsCurrency then
begin
messageDlg('您的欠款超过'+
table5.FieldByName('欠款限额').AsString+'元,不能购买!',
mtWarning,[mbOk],0);
abort;
end;
bl:=0;
end
else
begin
df:=needPay-bl;
bl:=0;
if df>table5.FieldByName('欠款限额').AsCurrency then
begin
messageDlg('您的欠款超过'+
table5.FieldByName('欠款限额').AsString+'元,不能购买!',
mtWarning,[mbOk],0);
abort;
end;
end;
end;
{添加一条交易记录----------<交易表>}
with table4 do
begin
open;
append;
fieldValues['会员编号']:=table1.FieldValues['会员编号'];
fieldValues['商品编号']:=table2.FieldValues['商品编号'];
fieldValues['员工编号']:=table3.FieldValues['员工编号'];
fieldValues['日期']:=time.Date;
fieldValues['数量']:=number.Text;
fieldValues['金额']:=needPay;
post;
end;
{修改"存货"----------<商品表>}
with table2 do
begin
edit;
fieldValues['存货']:=stock;
post;
end;
{修改"结余""欠款""点数""级别"----------<会员表>}
with table1 do
begin
edit;
fieldValues['结余']:=bl;
fieldValues['欠款']:=df;
fieldValues['点数']:=needPay*50+fieldValues['点数'];
d:=fieldValues['点数'];
if d>=1000000 then
fieldValues['级别']:='白金会员'
else if d>=600000 then
fieldValues['级别']:='黄金会员'
else if d>=90000 then
fieldValues['级别']:='高级会员'
else fieldValues['级别']:='普通会员';
post;
end;
{填写"交易明细"}
articleName.Caption:=table2.FieldValues['商品名称'];
employeeName.Caption:=table3.FieldValues['员工姓名'];
payment.Caption:=currToStr(pay)+'元';
discount.Caption:=currToStr(dc)+'元';
self.needPay.Caption:=currToStr(needPay)+'元';
{填写"会员资料"}
memberName.Caption:=table1.FieldValues['会员姓名'];
balance.Caption:=table1.fieldByName('结余').asString+'元';
deficiency.Caption:=table1.fieldByName('欠款').asString+'元';
dot.Caption:=table1.FieldValues['点数'];
level.Caption:=table1.FieldValues['级别'];
{更新dbGrid1}
with query1 do
begin
close;
sql.Clear;
sql.Add('select * from mytransaction');
try
open;
except
execsql;
end;
end;
{关闭所有TTable控件}
table1.Close;
table2.Close;
table3.Close;
table4.Close;
table5.Close;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -