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

📄 transaction.pas

📁 餐饮管理源代码 使用BDE Administrator在本地机器上添加一个Paradox数据库别名命名为WorkData
💻 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 + -