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

📄 saleunit.pas

📁 一个很不错的小型超市系统小型超市系统小型超市系统小型超市系统
💻 PAS
字号:
unit saleunit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, Grids, DBGrids, ExtCtrls, DB, ADODB, StdCtrls, Menus;

type
  TSale_Form = class(TForm)
    Panel1: TPanel;
    DBGrid1: TDBGrid;
    StatusBar1: TStatusBar;
    DataSource1: TDataSource;
    ADOQuery1: TADOQuery;
    ADOQuery1id: TAutoIncField;
    ADOQuery1p_id: TSmallintField;
    ADOQuery1p_name: TWideStringField;
    ADOQuery1p_price: TBCDField;
    ADOQuery1p_unit: TWideStringField;
    ADOQuery1p_type: TSmallintField;
    ADOQuery1p_store: TSmallintField;
    ADOQuery1p_time: TDateTimeField;
    ADOQuery1p_sale: TSmallintField;
    Label1: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    ADOQuery2: TADOQuery;
    Button2: TButton;
    RichEdit1: TRichEdit;
    PopupMenu1: TPopupMenu;
    N1: TMenuItem;
    ADOTable1: TADOTable;
    N2: TMenuItem;
    N3: TMenuItem;
    Button3: TButton;
    Label2: TLabel;
    Edit2: TEdit;
    Panel2: TPanel;
    GroupBox1: TGroupBox;
    Button4: TButton;
    Edit4: TEdit;
    Edit3: TEdit;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Button5: TButton;
    Button6: TButton;
    N4: TMenuItem;
    Timer1: TTimer;
    N5: TMenuItem;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure N5Click(Sender: TObject);
  private
    { Private declarations }
    count:double;
  public
    { Public declarations }
  end;

var
  Sale_Form: TSale_Form;

implementation

uses datamodule, UseLogin, help;

{$R *.dfm}

procedure TSale_Form.Button1Click(Sender: TObject); //提交商品的操作
var
sqls:string;
Parami:tparameter;
count1:double;
left:integer;
begin
count1:=0;
if (edit1.text='') and (edit2.text='') then
showmessage('请输入条形码或者是商品名称噢^_^')
else
 begin
   with adoquery1 do    //从库存中查找提交的商品是否存在
        begin
           close;
           sql.clear;
           sqls:='select * from produce_t where 1=1';
           if edit2.Text<>'' then
              sqls:=sqls+'and p_name='''+edit2.Text+'''';
           if edit1.Text<>'' then
              begin
                sqls:=sqls+'and p_id=:id';
                Parameters.Clear;
                Parami:=Parameters.ADDParameter; //创建参数1
                Parami.Name:='id';
                Parami.Value:=strtoint(edit1.text);
               end;
            sql.add(sqls);
            Prepared;
            open;
            if recordcount=0 then
            showmessage('对不起,该商品不存在')
            else          //如果商品存在就将他写入sell_t表中保存
            begin
             if not adoquery2.active then
             adoquery2.open;
             adoquery2.insert;
             adoquery2.fields.fields[0]:=fields.fields[1];   //条形码
             adoquery2.fields.fields[1]:=fields.fields[2];   //商品名
             adoquery2.fields.fields[2]:=fields.fields[3];   //商品价格
             adoquery2.fields.fields[3]:=fields.fields[4];   //商品计量单位
               with datamodule1.adocommand1 do               //修改produce_t中sale_p的值
                 begin
                 commandtext:='update produce_t set p_sale=p_sale+1 where p_id=:i';
                 parameters.ParamValues['i']:=adoquery2.fields[0].AsInteger;
                 execute;
                 end;
             left:=fields.fields[6].asinteger-fields.fields[8].asinteger;
             adoquery2.fields.fields[4].asinteger:=left; //得到此时的库存量
             if left<=0 then
               begin
                 showmessage('确货中');
                 adoquery2.Cancel;
               end
               else
               begin
                adoquery2.post;
                count1:=fields.Fields[3].AsFloat;  //求当前商品应付金额
                end;
            end;
        end;
        count:=count+count1;    //求出总的应付金额
        richedit1.text:='购物金额共计:'+floattostr(count)+'元整。'; //显示应付金额数
  end;
end;

procedure TSale_Form.Button2Click(Sender: TObject);
begin
if count=0 then        //当没有商品卖出时结算操作为错误操作
   showmessage('错误操作')
else
begin
  edit3.Text:=floattostr(count);      //应付金额
  panel2.Visible:=true;
end;
end;

procedure TSale_Form.Button3Click(Sender: TObject);
begin
if count>0 then  //必需先结算方可离开
showmessage('!!还没结算,请结算后再离开吧!!')
else
begin
adoquery1.close;
adoquery2.close;
adotable1.close;
close;
end;
end;

procedure TSale_Form.Button4Click(Sender: TObject);
var
money:double;
ret:integer;
begin
if edit4.text='' then
 showmessage('请输入你的付款金额')
else
begin
 money:=strtofloat(edit4.Text)-count;
 if money<0 then
     showmessage('金额不足')
 else
   begin
     ret:=messagebox(0,pchar('找零:'+floattostr(money)),'交易确定',1);
     if ret=2 then
       begin
         with adoquery2 do
          begin
           first;
           while not eof do
             begin
               with datamodule1.adocommand1 do               //修改produce_t中sale_p的值
                 begin
                  commandtext:='update produce_t set p_sale=p_sale-1 where p_id=:i';
                  parameters.ParamValues['i']:=adoquery2.fields[0].AsInteger;
                  execute;
                 end;
                next;
            end;
          end;
         richedit1.text:='上次'+richedit1.text+'  交易被取消!!!';
        end
        else
         begin
          with adoquery2 do//查找商品库中库存量
           begin
           first;
            begin
            while not eof do
             begin
               with adotable1 do   //如果可以交易就将sell_t中的数据保存到sell_back_t中
                   begin
                   insert;
                   fields.fields[1]:=adoquery2.fields[0];
                   fields.fields[2]:=adoquery2.fields[1];
                   fields.fields[3]:=adoquery2.fields[2];
                   fields.fields[4].asinteger:=1;
                   fields.fields[5].asdatetime:=now;
                   fields.fields[6].asboolean:=true;
                   post;
                   end;
               next;
             end;
            richedit1.text:='上次'+richedit1.text+'实收:'+edit4.text+'元整'+'  找零:'+floattostr(money)+'元整,交易成功^_^'+'交易时间:'+datetimetostr(now);
            edit1.clear;
            edit2.clear;
            edit3.clear;
            edit4.clear;
            end;   //一次成功交易完成
          end;
         end;
       with datamodule1.adocommand1 do    //删除sell_t中的数据
        begin
        commandtext:='delete from sell_t';
        execute;
        adoquery2.close;
        panel2.visible:=false;
        count:=0;
        end;
   end;
 end;

end;

procedure TSale_Form.FormActivate(Sender: TObject);
begin
  if not adoquery1.active then
  adoquery1.open;
   if not adoquery2.active then
  adoquery2.open;
    if not adotable1.active then
  adotable1.open;
end;

procedure TSale_Form.Button5Click(Sender: TObject); //取消本次交易
var
money:double;
begin
if edit4.text='' then
edit4.text:='0';
 money:=strtofloat(edit4.Text)-count;
 with adoquery2 do
  begin
   first;
   while not eof do
    begin
     with datamodule1.adocommand1 do               //恢复produce_t中sale_p的值
      begin
       commandtext:='update produce_t set p_sale=p_sale-1 where p_id=:i';
       parameters.ParamValues['i']:=adoquery2.fields[0].AsInteger;
       execute;
      end;
     next;
    end;
   end;                                     //清除sell_t中的数据
   with datamodule1.adocommand1 do
    begin
     commandtext:='delete from sell_t';
      execute;
      adoquery2.close;
      panel2.visible:=false;
      count:=0;
      if money<0 then
        richedit1.text:='上次'+richedit1.text+'  交易因金额不足被取消!!!'
      else
          richedit1.text:='上次'+richedit1.text+'  交易被迫取消!!!' ;
      end;
end;

procedure TSale_Form.Button6Click(Sender: TObject);
begin
  with adoquery2 do
  begin
   first;
   while not eof do
    begin
     with datamodule1.adocommand1 do               //恢复produce_t中sale_p的值
      begin
       commandtext:='update produce_t set p_sale=p_sale-1 where p_id=:i';
       parameters.ParamValues['i']:=adoquery2.fields[0].AsInteger;
       execute;
      end;
     next;
    end;
   end;                                     //清除sell_t中的数据
   with datamodule1.adocommand1 do
    begin
     commandtext:='delete from sell_t';
      execute;
      adoquery2.close;
      panel2.visible:=false;
      count:=0;
     richedit1.text:='上次'+richedit1.text+'  所有记录被强制删除' ;
      end;
end;

procedure TSale_Form.Timer1Timer(Sender: TObject);
begin
statusbar1.panels[6].text:='系统时间:'+DateTimeToStr(now);
statusbar1.panels[0].text:='收银员: '+Login_Form.UseName;
end;

procedure TSale_Form.N5Click(Sender: TObject);
begin
help_form.show;
end;

end.

⌨️ 快捷键说明

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