본문 바로가기

Pro*C/강좌

[Pro*C 강좌] 간식 & 식사 뽑기 만들기 - 1

반응형

Pro*C 강좌.

 

간식 & 식사 뽑기 만들기 - 1

 

Pro*C 강좌를 작성하기 위해 DB 를 활용하는 어떤 프로그램을 만들까~~ 고민하다가...

예전에 막내일때..자꾸 간식이랑 밥 뭐먹을지 정하려니 힘들어서..공부도 할겸 만들려고 했다가 귀찮아서 안했던

간식 or 식사 메뉴 랜덤 뽑기!! 프로그램을 개발하는것을 목표로..강좌를 쓰겠습니다.

-----------------------------------------------------------------------------------

강좌는 총 4개의 장으로 진행할 계획입니다.

1장. 테이블 생성 및 헤더파일 작성과 main 함수 작성.

2장. 프로그램에 들어가는 기능을 위한 각 함수들 구현.

3장. 간단한 테스트 진행 및 예외처리 추가.

4장. 프로그램 완성과 테스트 진행 및 소스 정리.

-----------------------------------------------------------------------------------

강좌를 쓰면서 사용하는 장비 환경.

OS : 솔라리스 5.9

DB : 오라클 9i

Pro*C : 9.2.0.7.0

소스작성 : vim 편집기 사용

-----------------------------------------------------------------------------------

간식 or 식사 메뉴 랜덤 뽑기 프로그램에 들어갈 기능은 아래 4가지 입니다.

1. 맛집의 이름과 번호 및 간식인지 식사인지를 판단할수 있는 플래그값 등을 저장할수 있는 DB 테이블 구현.

2. 맛집의 정보를 추가/제거/삭제 할수 있는 기능.

3. 간식 or 식사 중 하나를 선택해 랜덤으로 골라줄수 있는 기능.

4. DB에 담겨진 간식 or 식사의 종류를 볼수 있게 출력해주는 기능.

-----------------------------------------------------------------------------------

 

준비가 다 되셨다면 이제 시작해 볼까요 ~ ?

 

 

1. DB 에 테이블 생성하기.

 

개발을 하기전에 필요한 기능에 맞게끔 테이블을 생성해 줍시다 !!

위 그림처럼 말이죠 ~

 

컬럼에 4가지가 있는데 딱 보시면 아실겁니다 뭐가 뭔지...

food_name 이야 당연히 음식 이름 혹은 맛집 이름이 들어갈거고,

간식, 식사 따로 테이블을 만들어도 좋지만 그럼 귀찮으니까 음식의 type 을 저장할수 있는 컬럼 ( food_type )을 하나둬서 

컬럼값이 '0' 이냐 '1'이냐 혹은 '1'이냐 '2'냐~ 이런식으로 구분을 지어서 간식인지 식사인지 판단을 해줄 계획입니다.

맛집이 혹시나 배달 업체일 경우 전화번호를 저장해야 하니 전화번호를 담아둘 컬럼도 추가하고 ~

내가 언제 맛집을 추가했었는지 추억을 간직하기 위한 insert_date 컬럼도 추가해 줍시다 !!

 

테이블을 생성하고 desc table_name;  으로 내가 원하는대로 생성이 잘 됐나 확인해주고 위의 그림과 같이 잘 나온다면

이제 개발을 하러 가요 ~

 

 

2. 필요한 함수 및 매크로 선언이 들어갈 헤더파일 작성.

yc_food.h 파일 내용.

#define FOOD_MEAL   '1'     /* 식사의 TYPE 에 들어갈 FLAG 값 매크로 지정. */
#define FOOD_SNACK  '2'     /* 간식의 TYPE 에 들어갈 FLAG 값 매크로 지정. */

int db_con();              /* DB 에 로그인 할때 사용할 함수. */
void db_discon();           /* DB 에 로그아웃 할때 사용할 함수. */
int get_cnt(char type);      /* 간식 혹은 식사에 저장된 데이터의 갯수를 확인하기 위한 함수. */
int get_ran(int cnt);       /* get_cnt 함수가 전달해준 음식의 갯수내에서 무작위 숫자를 반환해주는 함수.  */
void get_food(char type);    /* 한종류의 음식을 뽑아낼때 사용할 함수. */
void food_print();          /* 어떤 음식들이 저장되 있는지 화면에 출력해주기 위한 함수. */
void food_roop();            /* 무한 루프를 돌리는 함수. */
void food_insert();         /* 새로운 음식 추가를 위한 함수. */
void food_update();         /* 음식의 수정을 위한 함수. */
void food_del();         /* 음식의 삭제를 위한 함수. */
int select_menu();          /* 뽑기, 추가, 수정, 삭제 등의 메뉴를 출력해주고 사용자의 선택 값을 반환 해주는 함수. */

 

위와 같이 자신의 입맛따라 함수명을 아무렇게나 작성하시면 됩니다.

별거 아닌 프로그램에 함수가 은근 많이 있는것 같아 보이는데 제가 main 함수에 이것저것 추가해두는걸 그닥 좋아하지 않아서...

죄다 함수쪽으로 빼서 그런거니..이해해주세요 ^^;;

 

간단한 헤더파일 작성이므로 소스에 있는 주석문을 끝으로 더이상의 설명은 생략하고 넘어가겠습니다.

 

 

3. 소스 작성 - 1 ( 필요한 헤더파일 포함 및 main 함수 작성. )

yc_food.pc 파일 내용.

 

#include 
#include 
#include            /* rand 를 사용하기 위한 헤더 파일. */
#include "yc_food.h" /* 조금 전에 작성한 헤더파일 !! */
EXEC SQL INCLUDE sqlca.h;   /* sql 문을 사용하기 위한 헤더 파일. */

int main()
{
    int ret = 0;   /* 각 함수의 return 값을 받을 변수 선언. */

    ret = db_con();   /* 최초 DB 로그인을 위한 로그인 함수 호출. */

    if(ret < 0)     /* DB 로그인에 대한 결과값이 0보다 작을시 프로그램 종료. */
    {
        printf("DB 로그인에 실패 했습니다. 프로그램을 종료 합니다.\n");
        return 1;
    }
    else
        food_roop();    /* 무한 루프를 돌며 사용자가 종료하기 전까지 프로그램의 기능을 계속 사용할수 있게 처리하는 함수 호출. */

    db_discon();   /* 사용자에 의해 프로그램이 종료 되기전 DB 로그아웃을 위한 함수 호출. */

    return 0;
}

 

 

 

헤더파일 포함 부분과 main 함수에서도 딱히 설명할 부분이 없으므로 주석문으로 적어둔 설명외에 다른 설명은 생략하겠습니다.

1장은 여기서 간단히 마치고

2장에선 4가지의 기능을 완벽하게 처리해줄 각 함수들을 구현하는 부분에 대한 강좌를 진행하겠습니다.

 

직장인 이다보니 한번에 다 쓰기엔 시간도 부족하고, 막상 쓰다보니 처음이라 그런지..시간이 꽤나 들어서 짧게 몇회에 걸쳐 작성하고자 계획을 수정 했습니다.

많은 양해 바랍니다.



반응형