d라이브러리









디베이스강좌⑥―마지막회 디베이스프로그래밍 실습

디베이스는 자료를 효과적으로 관리하기 위한 프로그램이다. 컴퓨터를 사용하면서 자료관리에 허점이 없는지 점검해 보자.

PC초보자들을 위해 dBASEⅢ PLUS의 사용법을 설명해온 이 강좌도 이제 마지막회에 이르렀다. 그래서 이번 회에서는 지금까지 배운 것을 가지고 실제로 디베이스 프로그램을 하나 작성하는 과정을 보여주고자 한다. 프로그램의 소재는 누구나 필요한 전화번호부 관리이다.

디베이스 프로그래밍! 이는 디베이스를 배운 사람들의 열렬한 소망이다. 자신이 생각하는 대로 프로그램이 작동되어 원하는 일을 처리하게 하도록 자신에게 필요한 프로그램을 만드는 것이다. 그리고 처음에는 욕심을 내지 않는 것이 좋다. 모양이 별로 좋지 않고 기능도 간단하더라도 프로그램을 만드는 과정을 겪어 보는 것이 더 중요하다.

여기에서는 누구에게나 필요한 전화번호부를 관리해주는 프로그램을 만들어 보기로 하자. 벌써 컴퓨터 앞에 앉아 프로그램을 입력하려고 하는 독자가 있을지도 모른다. 그러나 잠깐 컴퓨터를 끄고 책상에서 계획을 짜 보자. 어떤 일에나 계획은 중요한 것이다.

프로그램을 여러번 작성해 보면 알겠지만 프로그래밍에서 가장 중요한 것은 계획이다. 계획과 검토를 충분히 하지 않은 프로그램은 문제가 많게 마련이고, 그만큼 완성하기도 어렵고 완성한 뒤에도 그 관리가 귀찮아진다.
그렇다면 프로그램은 어떤 과정을 거쳐 만들어야 하는 것일까? 학문에 왕도가 없는 것처럼 프로그래밍에도 왕도는 없지만 대략 다음과 같은 과정을 거쳐야 한다는 것이 정설이다.

1. 목표를 설정하고 분석한다.
2. 프로그램을 설계한다.
3. 프로그램을 작성한다.
4. 프로그램을 검사한다.
5. 프로그램에 대한 설명을 기술한다.

특히 프로그램이 완성된 후에 5번의 작업을 게을리 하지 말아야 한다. 이것은 나중에 프로그램을 개선하기 위해서이다.

데이터 파일의 작성

전화번호부 데이터 파일의 구조는 어떻게 구성해야 할까? 경우에 따라 다르겠지만 필드는 이름, 회사, 근무부서, 전화번호정도면 족할 것이다. 여기에서는 전화번호를 2개 잡아 하나는 회사, 다른 하나는 자택의 전화번호를 저장하도록 하자.
데이터 파일의 이름은 PHONE.DBF이다. 디베이스에서
·create phone ↵
명령으로 데이터 파일을 만들어 보자. 파일의 구조는 다음과 같다.

NAME 문자 10(한글5자)
COMPANY 문자 20(한글10자)
DEPART 문자 10(한글5자)
TEL1 문자8
TEL2 문자8

데이터 파일을 만들었으면 자료도 몇개 넣은 다음 인덱스 파일을 하나 만들자. 인덱스 키 필드는 NAME필드로 한다. 디베이스에서
·index on name phone ↵
명령으로 PHONE.NDX 파일을 만든다.

메뉴 화면과 프로그램의 구조


(그림1) 전화번호부 프로그램의 메뉴


다음에는 전화번호부 포르그램을 실행했을 때 화면에 나타날 메뉴 화면을 설계해보자. 메뉴의 항목은 즉 전화번호부 프로그램의 기능인 셈이다. 여기에서는 간단하게 전화번호 추가, 전화번호 수정, 전화번호 정리, 전화번호 검색, 전화번호 인쇄의 다섯가지로 만들어 보았는데, (그림1)이 그것이다.

(그림1)의 메뉴화면에 의하면 이 전화번호부 프로그램은 메뉴를 화면에 표시하고, 0에서 5사이의 숫자를 입력받아 해당 기능을 수행하는 형식이 될것이다. 이것을 구현시킨 것이 (리스트1)이다.


(리스트1) 전화번호부 프로그램의 골격


서브루틴의 작성

이제 우리가 할 일은 메뉴의 각 기능을 담당할 6개의 서브루틴을 작성하는 것이다. 우선 메뉴에서 키입력을 받는 부분부터 살펴보자.
키입력을 받기 위해서는 메모리 변수를 하나 선언해야 하고, 입력된 값이 우리가 원하는 범위(0에서 5)내에 있는지 검사해야 한다. 먼저 메모리 변수에 초기값을 넣어 주고, 입력을 받는다. 입력받는 부분은 흔히 사용되는 ⓐ…SAY…GET…PICTURE…READ명령을 사용하기로 하자.
PICTURE에는 '9'를 사용하여 한 자리 숫자를 받아 들이도록 한다. 이것을 우리가 원하는 상태가 될때까지 DO WHILE명령으로 반복하게 하면 다음과 같이 된다.

STORE 6 TO choice
DO WHILE choice<;0.0R. choice>; 5
STORE 0 TO choice
ⓐ21,44SAY''GET choice
PICTURE'9'
READ
ENDDO

서브루틴의 첫번째는 종료 기능이다. 이것은 매우 간단하다. 디베이스를 원래의 상태로 만든 다음 화면을 지우고, RETURN명령으로 복귀하면 된다. 다음은 그 예이다.

CASE choice=0
SET STATUS ON
SET TALK ON
CLEAR
RETURN

두번째 서브루틴은 데이터를 추가하는 부분이다. 별도의 데이터 파일을 추가 데이터를 입력 받아 PHONE.DBF에 합치는 것이 안전하다. 여기에서는 PHONE.DBF파일의 구조를 복사하여 TEMP.DBF라는 파일을 하나만든 다음, 작업영역 2에서 오픈하여 데이터를 추가한다. 무사히 데이터 입력이 끝나면 작업영역 1에서 PHONE.DBF에 TEMP.DBF의 내용을 합친다. 작업이 끝난 다음에는 TEMP.DBF를 삭제한다. 다음이 그 결과이다.

CASE choice=1
USE PHONE INDEX
PHONE
COPY STRUCTURE TO
TEMP
SELECT 2
USE TEMP
APPEND
USE
SELECT 1
APPEND FROM TEMP
!DEL TEMP.DBF
USE

세번째는 수정 루틴이다. 이것을 다시 디베이스 프로그램으로 작성하려면 매우 복잡해지므로 디베이스의 EDIT 명령을 이용하여 간단하게 처리하자. 다음이 그 예이다.

CASE choice=2
USE PHONE INDEX
PHONE
GO TOP
EDIT
USE

네번째의 전화번호부 정리는 수정 루틴에서 Ctrl-U를 눌러 삭제 표시한 데이터들을 완전히 제거하는 작업이다(삭제 표시된 데이터라 할지라도 수정 루틴에서 다시 Ctrl-U를 눌러주면 삭제 표시가 지워진다). 삭제 표시된 데이터들을 영원히 지워주는 명령은 PACK이다. 이 명령어만 사용하면 화면이 그대로 메튜로 돌아가므로 무엇이 어떻게 되었는지 알 수가 없다. 따라서 간단하게 메시지를 출력하고, 사용자가 리턴 키를 누를 때까지 기다리게 하는 부분을 추가하면 다음과 같이 된다.

CASE choice=3
USE PHONE INDEX
PHONE
PACK
?'전화번호부 데이터 파일을 정리했습니다. 리턴 키를 누르세요'
ACCEPT TO temp
USE

다섯번째의 검색 루틴은 전화번호부 프로그램에서 가장 복잡한 부분이다. 우리의 전화번호부 프로그램에서는 검색을 사람의 이름에 따라 행한다. 따라서 찾을 사람의 이름을 입력받아야 한다. 먼저 입력받을 메모리 변수를 선언하고 ACCEPT명령으로 읽어들인다. 그냥 리턴 키를 누른 경우를 제거하기 위하여 IF명령을 하나 써야 한다.

다음에는 SEEK 명령으로 찾는 사람의 이름이 데이터 파일에 있는지 검사한다. 발견되었는지의 여부는 FOUND( ) 함수로 알아낸다. 이 함수가 진실을 돌려주면 발견된 것이다. 발견된 경우에는 인덱스 파일을 닫은 다음 LIST FOR명령으로 찾는 사람들의 명단을 화면에 표시한다. 이렇게 하는 이유는 동명이인의 경우나 성만 가지고 검색하는 경우를 위해서이다. 인덱스 파일을 닫지 않으면 LIST FOR 명령은 잘 동작하지 않는다. 찾는 사람의 이름이 발견되지 않으면 IF명령의 ELSE부분에 해당 메시지를 출력하게 만든다. 다음이 완성된 검색 루틴이다.

CASE choice=4
search=' '
ACCEPT '찾는 사람의 이름:'TO search
IF search <;>; ' '
USE PHONE INDEX
PHONE
SEEK search
IF FOUND( )
CLEAR
SET INDEX TO
GO TOP
LIST FOR search
NAME
? '리턴 키를 누르세요'
ACCEPT TO temp
ELSE
? '그런 사람은 입력되어 있지 않습니다. 리턴 키를 누르세요'
ACCEPT TO temp
ENDIF
USE
ENDIF

마지막 루틴은 데이터 파일의 내용을 프린터로 인쇄하는 일을 한다. 이 부분도 복잡하게 구성할 수 있지만 여기에서는 프린터를 켜고 리스트를 출력하는 정도에서 그쳤다. 다음이 약식의 인쇄 루틴이다.

CASE choice=5
SET PRINT ON
USE PHONE INDEX
PHONE
GO TOP
LIST
SET PRINT OFF

지금까지 설명해 온 루틴들을 결합하여 완성된 전화번호부 프로그램이 (리스트2)에 있다. 이 프로그램은 각 세부 루틴이 간략화되어 있어서 완벽한 기능을 수행하지는 못하지만, 전체적으로 훌륭한 디베이스 프로그램을 구성하고 있다. 이를 입력하여 사용해보라. 그리고 부족하다고 생각되는 점을 보완해보라. 그 과정이 쉽지만은 않겠지만 디베이스 프로그래밍에 대한 많은 것을 배울 수 있을 것이다.

이상으로 6회에 걸친 디베이스 강좌를 마친다. 프로그래밍에 관한 부분은 간략하게 설명된 느낌도 있지만, 그런대로 초보자가 디베이스를 시작하는데 필요한 정보들을 다루었다고 생각된다. 이 연재에 의해 디베이스에 관심을 가지고 실제로 사용을 하게 된 독자가 있다면 소기의 목적은 달성한 것이리라. 디베이스 사용자들의 건투를 빈다.


(리스트2) PHONE.PRG
 

이 기사의 내용이 궁금하신가요?

기사 전문을 보시려면500(500원)이 필요합니다.

1989년 09월 과학동아 정보

  • 탁연상

🎓️ 진로 추천

  • 컴퓨터공학
  • 소프트웨어공학
  • 정보·통신공학
이 기사를 읽은 분이 본
다른 인기기사는?