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

📄 purchase.~pas

📁 delphi制作的图书管理系统
💻 ~PAS
字号:
unit purchase;

interface

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

type
  TPurchaseFrm = class(TForm)
    LblPurchaseID: TLabel;
    LblPurchaseDate: TLabel;
    LblPurchaser: TLabel;
    LblFrmTitle: TLabel;
    DBGridBookInfo: TDBGrid;
    BtbOK: TButton;
    BtnClose: TButton;
    EdtPurchaseID: TEdit;
    DtpPurchaseDate: TDateTimePicker;
    DBNavigator1: TDBNavigator;
    CBoxpurhcaser: TComboBox;
    LblTatolText: TLabel;
    LblTotal: TLabel;
    LblNum: TLabel;
    procedure BtnCloseClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure DBGridBookInfoKeyPress(Sender: TObject; var Key: Char);
    procedure BtbOKClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    TmpTableName:String;
    IFTotal:Boolean;
    procedure GetBookInfo(StrBID:String);
    procedure GetPurchaserAndCurTime;
    Function GetPID:String;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  PurchaseFrm: TPurchaseFrm;

implementation

uses DataModuel, Main;

{$R *.dfm}

procedure TPurchaseFrm.BtnCloseClick(Sender: TObject);
begin
  MainForm.PurchaseBook_Sub.Enabled:=True;
  close;
end;

procedure TPurchaseFrm.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  DM.TempTable.Close;
  DM.TempTable.TableName:='';
  Action:=caFree;
end;

procedure TPurchaseFrm.DBGridBookInfoKeyPress(Sender: TObject; var Key: Char);
begin
  if key=#13 then
  begin
    if DBGridBookInfo.SelectedIndex<>DBGridBookInfo.FieldCount-1 then
    begin
       if DBGridBookInfo.SelectedIndex=0 then
       begin
          if DBGridBookInfo.Fields[0].IsNull then
          begin
              MessageDlg('图书编号不能为空',mtinformation,[mbok],0);
              exit;
          end;
          GetBookInfo(DBGridBookInfo.Fields[0].Value);
          IFTotal:=True;
          key:=#0;
          exit;
       end;
           //**如果在数量一行,并且数量和单价都不为0时,计算金额
       if DBGridBookInfo.SelectedIndex=5 then
       begin
         LblNum.Caption:=IntToStr(StrToInt(Trim(LblNum.Caption))+DBGridBookInfo.Fields[5].Value);
         if (DBGridBookInfo.Fields[4].Value>0.0) and (DBGridBookInfo.Fields[5].Value<>0) then
            DBGridBookInfo.Fields[6].Value:=DBGridBookInfo.Fields[4].Value*DBGridBookInfo.Fields[5].Value;
            if IFTotal then
            begin
               LblTotal.Caption:=FloatToStr(StrToFloat(Trim(LblTotal.Caption))+DBGridBookInfo.Fields[6].Value);
               IFTotal:=False;
            end;
       end;
       if DBGridBookInfo.Fields[0].IsNull then
          begin
              MessageDlg('图书编号不能为空',mtinformation,[mbok],0);
              exit;
          end;
       DBGridBookInfo.SelectedIndex:=DBGridBookInfo.SelectedIndex+1;
    end
    else
       DBGridBookInfo.SelectedIndex:=0;

    key:=#0;
    exit;
  end;
end;

//****查找所输入的图书编号在图书库中是否存在,如存在则显示
procedure TPurchaseFrm.GetBookInfo(StrBID: String);
begin
   StrBID:=Trim(StrBID);
   With DM.TempQry do
   begin
      Close;
      SQL.Text:='Select * from BookInfo where BookID='''+StrBID+'''';
      Open;

      if RecordCount<>0 then
      begin
        DM.TempTable.Edit;
        DM.TempTable['BookID1']:=StrBID;
        DM.TempTable['BookName1']:=FieldByName('BookName').AsString;
        DM.TempTable['Author']:=FieldByName('Author').AsString;
        DM.TempTable['Press']:=FieldByName('Press').AsString;
        DM.TempTable['Price']:=FieldByName('Price').AsString;
        DM.TempTable['PurhchaseQuantity1']:=0;
        DM.TempTable['PurchaseAmount1']:=0.0;
        DM.TempTable.Post;
        DBGridBookInfo.SelectedIndex:=5;
      end
      else
        begin
          MessageDlg('图书库中不存在此书号的图书'+#13+'请先在图书库中新增此书号。',mtInformation,[mbOK],0);
          DBGridBookInfo.SelectedIndex:=0;
        end;
      Close;
    end;

end;

procedure TPurchaseFrm.BtbOKClick(Sender: TObject);
var
  PurID:String;          //采购员ID
  IsNum:integer;
begin
  if Trim(EdtPurchaseID.Text)='' then
  begin
     MessageDlg('采购单不能为空',mtInformation,[mbOK],0);
     exit;
     EdtPurchaseID.SetFocus;
  end;

  with DM.PurchaseQry do
  begin
    close;
    SQL.Text:='select PurchaseID from PurchaseMaster where PurchaseID='''+Trim(EdtPurchaseID.Text)+'''';
    open;
    if DM.PurchaseQry.RecordCount<>0 then
    begin
       MessageDlg('此采购单已存在,请检查是否有误输入!',mtinformation,[mbOK],0);
       exit;
    end;
    close;
  end;

  if Trim(CBoxpurhcaser.Text)='' then
  begin
     MessageDlg('采购员没有选中,请先选中!',mtInformation,[mbOk],0);
     CBoxpurhcaser.SetFocus;
     exit;
  end
  else
  begin
    with DM.PurchaseQry do
    begin
      close;
      SQL.Text:='select PurchaserID from Purchaser where PurchaserName='''+Trim(CBoxpurhcaser.Text)+'''';
      Open;
      if RecordCount<>0 then
        PurID:=FieldByName('PurchaserID').AsString
      else
      begin
        MessageDlg('此采购员不存在,请确认!',mtInformation,[mbOk],0);
        exit;
      end;
      close;
    end;
  end;

  with DM.TempTable do
  begin
    if Active=False then
       Active:=True;
    if RecordCount=0 then
    begin
       Messagedlg('此采购单没有采购的图书信息!'+#13+'请输入图书信息',mtInformation,[mbOK],0);
       exit;
    end;
  end;
  try
    with DM.PurchaseQry do
    begin
      Close;
      SQL.Text:='Insert into PurchaseMaster(PurchaseID,PurchaseDate,Purchaser)';
      SQL.Add('Values');
      SQL.Add('(:PurchaseID,:PurchaseDate,:Purchaser)');
      Params.ParamByName('PurchaseID').Value:=Trim(EdtPurchaseID.Text);
      Params.ParamByName('PurchaseDate').Value:=DtpPurchaseDate.Date;
      Params.ParamByName('Purchaser').Value:=PurID;
      ExecSQL;
      close;
    end;

    DM.TempTable.First;
    while not DM.TempTable.Eof do
    begin
      with DM.PurchaseQry do
      begin
        Close;
        SQL.Text:='Insert into PurchaseSub(PurchaseID,BookID,PurhchaseQuantity,PurchaseAmount)';
        SQL.Add('Values');
        SQL.Add('(:PurchaseID,:BookID,:PurhchaseQuantity,:PurchaseAmount)');
        Params.ParamByName('PurchaseID').Value:=Trim(EdtPurchaseID.Text);
        Params.ParamByName('BookID').Value:=DM.TempTable['BookID1'];
        Params.ParamByName('PurhchaseQuantity').Value:=DM.TempTable['PurhchaseQuantity1'];
        Params.ParamByName('PurchaseAmount').Value:=DM.TempTable['PurhchaseQuantity1'];
        ExecSQL;
        close;
      end;
      IsNum:=0;
      with DM.SaleManageQry do
      begin
        close;
        SQL.Text:='Select * from BookNum where BookID='''+DM.TempTable['BookID1']+'''';
        Open;
        IsNum:=RecordCount;
        close;
      end;


      if IsNum<>0 then
      begin
        with DM.SaleManageQry do
        begin
          close;
          SQL.Clear;
          SQL.Text:='Update BookNum set BookNum=BookNum+:Num';
          SQL.Add(' Where BookID=:BID');
          Params.ParamByName('Num').Value:=DM.TempTable['PurhchaseQuantity1'];
          Params.ParamByName('BID').Value:=DM.TempTable['BookID1'];
          ExecSQL;
          close;
        end;
      end
      else
      begin
        with DM.SaleManageQry do
        begin
          close;
          SQL.Clear;
          SQL.Text:='Insert into BookNum(BookID,BookNum)';
          SQL.Add('Values');
          SQL.Add('(:BookID,:BookNum)');
          Params.ParamByName('BookID').Value:=DM.TempTable['BookID1'];
          Params.ParamByName('BookNum').Value:=DM.TempTable['PurhchaseQuantity1'];
          ExecSQL;
          close;
        end;
      end;
      DM.TempTable.Next;
    end;
  except
     MessageDlg('数据保存出错,请检查是否数据录入是否有误!',mtInformation,[mbOK],0);
     exit;
  end;

  GetPID;
  DM.TempTable.Close;
  DM.TempTable.EmptyTable;
  DM.TempTable.Active:=True;




  MessageDlg('数据保存成功!!',mtInformation,[mbOK],0);
end;

procedure TPurchaseFrm.FormCreate(Sender: TObject);

begin
  GetPurchaserAndCurTime;

  //****使用日期加时间作为数据库表名和采购单号******
  TmpTableName:=GetPID;
  TmpTableName:=TmpTableName+'.db';

  if FileExists('Temp\Temp.db') then
  begin
     TmpTableName:='Temp.db';
     DM.TempTable.TableName:='Temp\'+TmpTableName;
     DM.TempTable.EmptyTable;
     DM.TempTable.Active:=True;
  end
  else
  begin
    //****创建临时数据库表,使其处于插入状态******
    DM.TempTable.TableName:='Temp\'+TmpTableName;
    DM.TempTable.FieldDefs.Clear;
    DM.TempTable.FieldDefs.Add('BookID1',ftString,15,True);
    DM.TempTable.FieldDefs.Add('BookName1',ftString,20,False);
    DM.TempTable.FieldDefs.Add('Author',ftString,8,False);
    DM.TempTable.FieldDefs.Add('Press',ftString,20,False);
    DM.TempTable.FieldDefs.Add('Price',ftCurrency,0,False);
    DM.TempTable.FieldDefs.Add('PurhchaseQuantity1',ftfloat,0,False);
    DM.TempTable.FieldDefs.Add('PurchaseAmount1',ftCurrency,0,False);
    DM.TempTable.CreateTable;
    DM.TempTable.Active:=True;
  end;
end;

procedure TPurchaseFrm.GetPurchaserAndCurTime;
begin
  //****添加采购员
  with DM.PurchaseQry do
  begin
    Close;
    SQL.Text:='Select * from Purchaser';
    Open;
    While not Eof do
    begin
       CBoxpurhcaser.Items.Add(FieldByName('PurchaserName').AsString);
       Next;
    end;
    Close;
  end;

  //***取得当前日期
  DtpPurchaseDate.Date:=Date();
end;

procedure TPurchaseFrm.FormDestroy(Sender: TObject);
begin
  PurchaseFrm:=nil;
end;

function TPurchaseFrm.GetPID: String;
var
  Perent:TDateTime;
  Year, Month, Day, Hour, Min, Sec,MSec: Word;
begin
  //****使用日期加时间作为数据库表名和采购单号******
  Perent:=Now();
  DecodeDate(Perent,Year,Month,Day);
  DecodeTime(Perent,Hour,Min,Sec,MSec);
  EdtPurchaseID.Text:=IntToStr(Year)+IntToStr(Month)+IntToStr(Day)+IntToStr(Hour)+IntToStr(Min);
  Result:=Trim(EdtPurchaseID.Text);
end;

end.

⌨️ 快捷键说明

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