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

📄 ubookmodify.~pas

📁 图书馆管理系统代码deiphi
💻 ~PAS
字号:
unit uBookModify;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, dbtables, Buttons;

type
  TfrmBookModify = class(TForm)
    Label1: TLabel;
    btnCancel: TSpeedButton;
    btnSave: TSpeedButton;
    Panel3: TPanel;
    Bevel1: TBevel;
    edtCode: TEdit;
    StaticText1: TStaticText;
    edtName: TEdit;
    StaticText2: TStaticText;
    StaticText3: TStaticText;
    edtClass: TEdit;
    StaticText4: TStaticText;
    edtAuthor: TEdit;
    StaticText5: TStaticText;
    edtPublisher: TEdit;
    StaticText6: TStaticText;
    edtDate: TEdit;
    StaticText7: TStaticText;
    edtPrice: TEdit;
    StaticText8: TStaticText;
    edtMemo: TMemo;
    cmbClass: TComboBox;
    Panel2: TPanel;
    btnBookCode: TButton;
    btnDelete: TSpeedButton;
    procedure edtCodeChange(Sender: TObject);
    procedure cmbClassChange(Sender: TObject);
    procedure btnBookCodeClick(Sender: TObject);
    procedure edtCodeKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormCreate(Sender: TObject);
    procedure btnCancelClick(Sender: TObject);
    procedure btnSaveClick(Sender: TObject);
    procedure btnDeleteClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    function GetUserID(Code : string):string;
    procedure DelBook(Code: string);
    procedure ViewBook(Code : string);
    function GetClassName(ClassID : string): string;
    procedure UpDateBook(Code : string);
    procedure Init;
  end;
var
  frmBookModify: TfrmBookModify;

implementation

uses
  uPublic, main, uShowBookF;

{$R *.DFM}

//根据相应的书号查找相关书籍
procedure TfrmBookModify.ViewBook(Code : string);
var
  Query : TQuery;
  i : integer;
  FoundClass : boolean;
begin
  Query := TQuery.Create(nil);
  Query.DatabaseName := DBName;
  Query.SQL.Add('select Book.* ,ClassName from book,Class where Code=:Code');
  Query.ParamByName('Code').AsString := Code;
  Query.Open;
  if Query.RecordCount = 0 then
    MessageDlg('没有此书的信息存在',mtError,[mbok],0);
  edtName.Text := Query.FieldByName('Name').AsString;
  FoundClass := False;
  for i := 0 to cmbClass.Items.Count-1 do
  begin
    if Query.FieldByName('Class').AsString = cmbClass.Items[i] then
    begin
      cmbClass.ItemIndex := i;
      FoundClass := True;
    end;
  end;
  if not FoundClass then
    cmbClass.ItemIndex := 0;
  edtClass.Text := GetClassName(cmbClass.Items[cmbClass.ItemIndex]);
  edtAuthor.Text := Query.FieldByName('Author').AsString;  
  edtPublisher.Text := Query.FieldByName('Concern').AsString;
  edtDate.Text := Query.FieldByName('OutDate').AsString;
  edtPrice.Text := Query.FieldByName('Cost').AsString;
  edtMemo.Lines.Text:=Query.FieldByName('Memo').AsString;
  Query.Close;
  Query.Free;
end;

procedure TfrmBookModify.edtCodeChange(Sender: TObject);
begin
  if Length(edtCode.Text) = CodeLength then
  begin
    try
      ViewBook(edtCode.Text);
    except
      MessageDlg('数据操作出错',mtError,[mbok],0);
    end;
  end;
end;

//根据类别号找到类别名称
function TfrmBookModify.GetClassName(ClassID: string): string;
var
  Query : TQuery;
begin
  try
    Query := TQuery.Create(nil);
    Query.DatabaseName := DBName;
    Query.SQL.Add('select ClassName from Class where ClassID =:ClassID');
    Query.ParamByName('ClassID').AsString := ClassID;
    Query.Open;
    if Query.RecordCount = 0 then
      Result := ''
    else Result := Query.FieldByName('ClassName').AsString;
    Query.Close;
    Query.Free;
  except
    Result := '';
  end;
end;

procedure TfrmBookModify.cmbClassChange(Sender: TObject);
begin
  edtClass.Text := GetClassName(cmbClass.Items[cmbClass.ItemIndex]);
end;

//在书籍表中更新某书的信息
procedure TfrmBookModify.UpDateBook(Code: string);
var
  Query : TQuery;
begin
  Query := TQuery.Create(nil);
  Query.DatabaseName := DBName;
  Query.SQL.Add('update book set Name=:Name, Class =:Class,Author =:Author,'+
                ' Concern =:ConCern,OutDate=:OutDate,Cost = :Cost,Memo =:Memo'+
                ' where Code = :Code');
  Query.ParamByName('Code').AsString := Code;
  Query.ParamByName('Name').AsString := edtName.Text;
  Query.ParamByName('Class').AsString := cmbClass.Items[cmbClass.ItemIndex];
  Query.ParamByName('Author').AsString := edtAuthor.Text;
  Query.ParamByName('Concern').AsString := edtPublisher.Text;
  try
    Query.ParamByName('OutDate').AsDateTime := StrToDate(edtDate.Text);
  except
    MessageDlg('参数<出版时间>设置错误',mtError,[mbok],0);
    Query.Free;
    Exit;
  end;
  try
    Query.ParamByName('Cost').AsFloat := StrToFloat(edtPrice.Text);
  except
    MessageDlg('参数<价格>设置错误',mtError,[mbok],0);
    Query.Free;
    Exit;
  end;
  Query.ParamByName('Memo').AsString := edtMemo.Lines.GetText;
  Query.ExecSQL;
  Query.Free;
end;

//图书信息调整时初始化相关控件
procedure TfrmBookModify.Init;
begin
  edtCode.SetFocus;
  edtCode.SelectAll;
  edtName.Text := '';
  edtAuthor.Text := '';
  edtDate.Text := '';
  edtPrice.Text := '';
  edtPublisher.Text := '';
  cmbClass.ItemIndex := 0;
  edtMemo.Lines.Clear;
  edtClass.Text := GetClassName(cmbClass.Items[cmbClass.ItemIndex]);
end;

procedure TfrmBookModify.btnBookCodeClick(Sender: TObject);
var
  P : TPoint;
begin
  P.x := Panel2.Left;
  P.y := Panel2.Top +Panel2.Height;
  ShowBookF.Top := Panel3.ClientToScreen(P).y;
  ShowBookF.Left := Panel3.ClientToScreen(P).x;
  ShowBookF.Show(edtCode);
end;

procedure TfrmBookModify.edtCodeKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = 13 then
    edtCodeChange(Sender);
end;

procedure TfrmBookModify.FormCreate(Sender: TObject);
 var
  Query : TQuery;
begin
  try
    Query := TQuery.Create(nil);
    Query.DatabaseName := DBName;
    Query.SQL.Add('select ClassID from Class');
    Query.Open;
    while not Query.Eof do
    begin
      cmbClass.Items.Add(Query.FieldByName('ClassID').AsString);
      Query.Next;
    end;
    cmbClass.ItemIndex := 0;
    edtClass.Text := GetClassName(cmbClass.Items[cmbClass.ItemIndex]);
    Query.Close;
    Query.Free;
  except
    cmbClass.Items.Clear;
  end;

end;

procedure TfrmBookModify.btnCancelClick(Sender: TObject);
begin
    close;
end;

//保存当前的书籍信息
procedure TfrmBookModify.btnSaveClick(Sender: TObject);
begin
  try
    if Length(edtCode.Text)<>CodeLength then
    begin
      MessageDlg('书号不正确,不能更新数据。',mtWarning,[mbok],0);
      edtCode.SetFocus;
      Exit;
    end;
    UpDateBook(edtCode.Text);
    Init;
  except
    MessageDlg('保存出错',mtError,[mbok],0);
  end;
  edtCode.SetFocus;
end;

//删除当前的书籍
procedure TfrmBookModify.btnDeleteClick(Sender: TObject);
var
  UserID : string;
begin
    UserID := GetUserID(edtCode.Text);
    if UserID <> '' then
    begin
        if MessageBox(0,PChar('此书<'+edtCode.Text+'>借出,确实要删除吗?'),'警告',MB_YESNO)= IDYES then
        begin
            try
                DelBook(edtCode.Text);
                MessageBox(0,'删除完成',PChar('删除'+edtCode.Text),MB_OK);
            except
                MessageDlg('删除<'+edtCode.Text+'>失败',mtWarning,[mbok],0);
            end;
        end
    end
    else begin
        try
            DelBook(edtCode.Text);
            MessageBox(0,'删除完成',PChar('删除'+edtCode.Text),MB_OK);
        except
            MessageDlg('删除<'+edtCode.Text+'>失败',mtWarning,[mbok],0);
        end;
    end;
    edtCode.Text :='';
    Init;
end;

//从借书记录表中根据书名查找借书人号
function TfrmBookModify.GetUserID(Code: string): string;
var
  Query : TQuery;
begin
  try
    Query := TQuery.Create(nil);
    Query.DatabaseName := DBName;
    Query.SQL.Add('select UserID from Owner where Code =:Code');
    Query.ParamByName('Code').AsString := Code;
    Query.Open;
    if Query.RecordCount = 0 then
      Result := ''
    else Result := Query.FieldByName('UserID').AsString;
    Query.Close;
    Query.Free;
  except
    Result := '';
  end;
end;

// 删除某指定书籍记录
procedure TfrmBookModify.DelBook(Code: string);
var
  Query : TQuery;
begin
  Query := TQuery.Create(nil);
  Query.DatabaseName := DBName;
  Query.SQL.Clear;
  Query.SQL.Add('delete from Book where Code =:Code');
  Query.ParamByName('Code').AsString := Code;
  Query.ExecSQL;
  Query.SQL.Clear;
  Query.SQL.Add('delete from Owner where Code =:Code');
  Query.ParamByName('Code').AsString := Code;
  Query.ExecSQL;
  Query.Close;
  Query.Free;
end;

end.

⌨️ 快捷键说明

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