델파이(Delphi) DB이용한 도서관리 프로그램

학교에서 델파이로 수업을 해서 과제로 DB 오라클을 이용해 프로그램을 하나 만들어 오라고 했다.

테이블은 3개 이상이여야 되고 Intro폼 하나, 추가, 삭제, 조회가 들어가야 한다고 한다.

 

Intro 화면

인트로 화면이다.

여기서는 그냥 메뉴를 이용해서 각각 폼을 뜨게끔 하였다.

 

도서 관리 폼

도서 관리 폼이다.

도서 관리 테이블은

create table book (
        num varchar2(13) not null,
        title varchar2(30) not null,
        writer varchar2(20) not null,
        publisher varchar2(20) not null,
        introduction varchar2(100) not null,
        img blob,

        hold varchar2(1) not null,

        primary key(num));

 

이렇게 설정을 해주었다.

num = 책 바코드 번호

title = 책 이름

writer = 저자

publisher = 출판사

introduction = 책 소개

img = 책 표지

hold = 책을 빌렸으면 1, 안빌렸으면 0

기본키는 num으로 설정해주었다.

 

procedure TForm2.Button1Click(Sender: TObject);
begin
	with ADOQuery1 do
    	begin
        	Close;
            SQL.Clear;
            SQL.Add('Insert into book(num,title,writer,publisher,introduction,img,hold)');
            SQL.Add('values(:num,:title,:writer,:publisher,:introduction,:image,0)');
            Parameters.ParamByName('num').Value := Edit1.Text;
            Parameters.ParamByName('title').Value := Edit2.Text;
            Parameters.ParamByName('writer').Value := Edit3.Text;
            Parameters.ParamByName('publisher').Value := Edit4.Text;
            Parameters.ParamByName('introduction').Value := Edit5.Text;
            
            if OpenPictureDialog1.Execute then
            	Parameters.ParamByName('image').LoadFromFile(OpenPictureDialog1.FileName, ftGraphic);
           	Execsql;
            ShowMessage('추가 완료');
            SQL.Clear;
            SQL.Add('Select * from book');
            Open;
        end;
        Edit1.Text := '';
        Edit2.Text := '';
        Edit3.Text := '';
        Edit4.Text := '';
        Edit5.Text := '';
end;

도서를 추가하는 소스이다.

sql 명령어로 넣어주게 되고 img파일은 bmp 파일만 가능하다.

추가가 완료되면 DBGrid에 다시 book테이블을 조회하게 된다.

 

procedure TForm2.Button2Click(Sender: TObject);
begin
	with ADOQuery1 do
    	begin
        	Close;
            SQL.Clear;
            SQL.Add('delete from book where title = :title');
            Parameters.ParamByName('title').Value := Edit2. Text;
            Execsql;
            ShowMessage('삭제 완료');
            SQL.Clear;
            SQL.Add('select * from book');
            Open;
        end;
        Edit2.Text := '';
end;

procedure TForm2.Button3Click(Sender: TObject);
begin
	with ADOQuery1 do
    	begin
        	Close;
            SQL.Clear;
            SQL.Add('Select * from book');
            Open;
        end;
end;

책 삭제는 책 제목만 입력하면 삭제되게끔 해놓았다. (시간이 없었기에 대충 해놨다.)

 

다음은 책 모두 조회이므로 그냥 select 구문만 넣어놓았다.

 

회원관리 폼

회원 관리 폼이다.

이 폼도 도서관리 폼처럼 똑같이 구성해놓았다.

 

회원관리 테이블은 

create table member (
         phone varchar2(20) not null,
         name varchar2(20) not null,
         primary key(phone));

 

이렇게만 구성해 놓았다.

 

procedure TForm3.Button1Click(Sender: TObject);
begin
	with ADOQuery1 do
    	begin
        	Close;
            SQL.Clear;
            SQL.Add('Insert into member(phone, name)');
            SQL.Add('values(:phone, :name)');
            Parameters.ParamByName('phone').Value := Edit1.Text;
            Parameters.ParamByName('name').Value := Edit2.Text;
            Execsql;
            ShowMessage('추가 완료');
            SQL.Clear;
            SQL.Add('select * from member');
            Open;
        end;
      	Edit1.Text := '';
        Edit2.Text := '';
 end;
 
 procedure TForm3.Button2Click(Sender: TObject);
 begin
 	with ADOQuery1 do
    	begin
        	Close;
            SQL.Clear;
            SQL.Add('delete from member where phone = :phone');
            Parameters.ParamByName('phone').Value := Edit2.Text;
            Execsql;
            ShowMessage('삭제 완료');
            SQL.Clear;
            SQL.Add('select * from member');
            Open;
        end;
        Edit2.Text := '';
end;

회원 추가는 핸드폰번호와 이름만 입력하면 된다.

그리고 추가가 되면 DBGrid에 추가된 내역을 볼 수 있게끔 다시 select 구문으로 보여주게끔 했다.

반응형

그리고 삭제인데 폰 번호는 유일하게 하나만 있으니 폰 번호만 입력하면

삭제하게끔 해뒀다.

 

 

대여/반납 폼

 

대여 반납 폼인데 오른쪽에 책 목록도 같이 나오게끔 해놓았다.

 

대여 반납 테이블은

create table rent_return (
       member_phone varchar2(20) not null,
       book_num varchar2(13) not null,
       rentalday varchar2(10) not null,

       returnday varchar2(10) not null,
       primary key(member_phone, book_num),
       foreign key(member_phone) references member(phone),
       foreign key(book_num) references book(num));

 

이렇게 구성했다.

외래키는 member테이블에 phone, book테이블에 num을 참조하게 했다.

 

procedure TForm4.Button1Click(Sender: TObject);
begin
	with ADOQuery2 do
    	begin
        	Close;
            SQL.Clear;
            SQL.Add('Select * from book where title = :title');
            Parameters.ParamByName('title').Value := Edit3.Text;
            Open;
        end;
        Edit3.Text := '';
end;

오른쪽 책 목록에 책 이름을 넣으면 책 이름을 가지고 검색하게끔 설정해뒀다.

 

procedure TForm4.Button2Click(Sender: TObject);
begin
	with ADOQuery1 do
    	begin
        	Close;
            SQL.Clear;
            SQL.Add('delete from rent_return where member_phone = :phone and book_num = :num');
            Parameters.ParamByName('phone').Value := Edit4.Text;
            Parameters.ParmaByName('num').Value := Edit5.Text;
            Execsql;
            ShowMessage('반납 완료!');
            Close;
            SQL.Clear;
            SQL.Add('update book set hold=0 where num = :num');
            Parameters.ParamByName('num').Value := Edit5.Text;
            Execsql;
            SQL.Clear;
            SQL.Add('select * from rent_return');
            Open;
        end;
        ADOQuery2.SQL.Clear;
        ADOQuery2.SQL.Add('select * from rent_return');
        ADOQuery2.Open;
        
        Edit1.Text := '';
        Edit2.Text := '';
        Edit4.Text := '';
        Edit5.Text := '';
end;

책 반납 소스이다

책 반납을 할때는 핸드폰 번호와 책 바코드를 같이 입력을 해야 한다.

삭제를 하고 오른쪽에 책 목록을 다시 갱신하게 된다.

그리고 hold를 0으로 바꾼다.

 

procedure TForm4.Button3Click(Sender: TObject);
begin
	with ADOQurey1 do
    	begin
        	Close;
            SQL.Clear;
            SQL.Add('insert into rent_return(member_phone, book_num, rentalday, returnday)');
            SQL.Add('values(:phone, :isbn, :rent, :return)');
            Parameters.ParamByName('phone').Value := Edit4.Text;
            Parameters.ParamByName('isbn').Value := Edit5.Text;
            Parameters.ParamByName('rent').Value := Edit1.Text;
            Parameters.ParamByName('return').Value := Edit2.Text;
            Execsql;
            ShowMessage('빌리기 완료!');
            SQL.Clear;
            SQL.Add('update book set hold=1 where num = :num');
            Parameters.ParamByName('num').Value := Edit5.Text;
            Execsql;
            SQL.Clear;
            SQL.Add('select * from rent_return');
            Open;
        end;
        ADOQuery2.SQL.Clear;
        ADOQuery2.SQL.Add('select * from book');
        ADOQurey2.Open;
        
        Edit1.Text := '';
        Edit2.Text := '';
        Edit4.Text := '';
        Edit5.Text := '';
end;

책 빌리는 소스이다.

책 빌릴때 book 테이블에 hold를 1로 바꾸게 된다.

그리고 오른쪽 DBGrid에 갱신하게끔 해주었다.

 

procedure TForm4.Button4Click(Sender: TObject);
begin
	with ADOQurey2 do
    	begin
        	Close;
            SQL.Clear;
            SQL.Add('Select * from book');
            Open;
        end;
end;

procedure TForm4.Button5Click(Sender: TObject);
begin
	with ADOQuery1 do
    	begin
        	Close;
            SQL.Clear;
            SQL.Add('Select * from rent_return');
            Open;
        end;
end;

이렇게 프로그램을 만들어 보았다.

시간이 없어서 대충 과제 요건에만 맞춰서 만들었지만 시간이 더 많았다면 자세히 꼼꼼하게 만들수 있을거같다.

 

 

 

 

댓글

Designed by JB FACTORY