C언어 도서관리 프로그램(예광탄)

C언어 도서관리 프로그램에 쓰이는 함수들과  헤더파일 예광탄들을 하나씩 올리도록 하겠습니다!

이 함수들과 헤더파일들을 따라 쳐 보시면 도서관리 프로그램에 필요한 기본 틀이 완성이 됩니다.

완성본 코드는 이 다음장에 올리도록 하겠습니다.


C언어 도서관리 프로그램 예광탄

//App.h

#pragma once

void Start_App();

===================================================================

//App.c

#include "App.h"

#include "ehcommon.h"

typedef struct App App;

struct App

{

    int reserved;

};


App *New_App();

void Delete_App(App *app);

void App_Init(App *app);

void App_Run(App *app);

void App_Exit(App *app);

void Start_App()

{

    App *app = New_App();

    App_Init(app);

    App_Run(app);

    App_Exit(app);

    Delete_App(app);

}

///////////////////////////////////////////////

App *New_App()

{

    App *app = (App *)malloc(sizeof(App));

    return app;

}

void Delete_App(App *app)

{

    free(app);

}

void App_Init(App *app)

{

    printf("초기화\n");

}


int App_SelectMenu(App *app);

void App_AddBook(App *app);

void App_RemoveBook(App *app);

void App_FindBook(App *app);

void App_ListBook(App *app);

void App_Run(App *app)

{

    int key = 0;

    while((key = App_SelectMenu(app)) != ESC)

    {

        switch(key)

        {

        case F1: App_AddBook(app); break;

        case F2: App_RemoveBook(app); break;

        case F3: App_FindBook(app); break;

        case F4: App_ListBook(app); break;

        default: printf("잘못 선택하였습니다.\n"); break;

        }

        printf("아무 키나 누르세요.\n");

        getkey();

    }

}

void App_Exit(App *app)

{

    printf("해제화\n");

}


////////////////////////////////////////////////////////////////////

int App_SelectMenu(App *app)

{

    clrscr();

    printf("프로그램 상호 작용 - 메뉴\n");

    printf("F1: 도서 추가 F2: 도서 삭제 F3: 도서 검색 F4: 도서 목록\n");

    printf("ESC를 누르면 프로그램을 종료합니다.\n");

    printf("메뉴를 선택하세요.\n");

    return getkey();

}

void App_AddBook(App *app)

{

    printf("도서 추가\n");

}

void App_RemoveBook(App *app)

{

    printf("도서 삭제\n");

}

void App_FindBook(App *app)

{

    printf("도서 검색\n");

}

void App_ListBook(App *app)

{

    printf("도서 목록\n");

}


===================================================================

//EHArr.h

#pragma once


typedef void * Element;

typedef Element * Iterator;

typedef struct EHArr EHArr;

struct EHArr

{

    Element *base; //저장소 위치

    int capacity; //저장소의 용량

    int size; //보관 개수

};


EHArr *New_EHArr();

void Delete_EHArr(EHArr *eharr);


void EHArr_PushBack(EHArr *eharr, Element data);//순차 보관

Iterator EHArr_Begin(EHArr *eharr);//시작 위치 반환

Iterator EHArr_End(EHArr *eharr);//마지막(+1) 위치 반환

void EHArr_Erase(EHArr *eharr, Iterator iter);//iter 위치 요소 지우기


void EHArr_Reserve(EHArr *eharr,int newcapa);

void EHArr_Resize(EHArr *eharr, int newsize, Element data);

Element EHArr_GetAt(EHArr *eharr,int index);//특정 인덱스에 보관한 데이터 접근

void EHArr_SetAt(EHArr *eharr,int index,Element data);//특정 인덱스에 데이터 설정



===================================================================

//EHArr.c

#include "ehcommon.h"

#include "EHArr.h"

void EHArr_EHArr(EHArr *eharr);

EHArr *New_EHArr()

{

    EHArr *eharr = (EHArr *)malloc(sizeof(EHArr));

    EHArr_EHArr(eharr);

    return eharr;

}

void EHArr_EHArr(EHArr *eharr)

{

    memset(eharr,0,sizeof(EHArr));

}

void EHArr_TEHArr(EHArr *eharr);//소멸자

void Delete_EHArr(EHArr *eharr)

{

    EHArr_TEHArr(eharr);

    free(eharr);

}

void EHArr_TEHArr(EHArr *eharr)

{

    if(eharr->base)

    {

        free(eharr->base);

    }

}

void EHArr_PushBack(EHArr *eharr, Element data)

{

    if(eharr->capacity == eharr->size)//꽉 찼으면

    {

        //공간 재할당

        if(eharr->capacity)

        {

            EHArr_Reserve(eharr,eharr->capacity*2);

        }

        else

        {

            EHArr_Reserve(eharr,1);

        }

    }

    eharr->base[eharr->size] = data;//맨 뒤에 data 보관

    eharr->size++;//보관 개수 1 증가

}

Iterator EHArr_Begin(EHArr *eharr)

{

    return eharr->base;

}

Iterator EHArr_End(EHArr *eharr)

{

    return eharr->base + eharr->size;

}

void EHArr_Erase(EHArr *eharr, Iterator iter)

{

    int index;

    eharr->size--;

    for(index = iter-eharr->base; index<eharr->size; index++)

    {

        eharr->base[index] = eharr->base[index+1];

    }

}


void EHArr_Reserve(EHArr *eharr,int newcapa)

{

    eharr->base = (Element *)realloc(eharr->base,sizeof(Element)*newcapa);

    eharr->capacity = newcapa;

}

void EHArr_Resize(EHArr *eharr, int newsize, Element data)

{

    if(eharr->capacity < newsize)

    {

        EHArr_Reserve(eharr,newsize);

    }

    for(   ;eharr->size < newsize; ++eharr->size)

    {

        eharr->base[eharr->size] = data;

    }

}

Element EHArr_GetAt(EHArr *eharr,int index)

{

    if((index>=0)&&(index<eharr->size))

    {

        return eharr->base[index];

    }    

    return 0;

}

void EHArr_SetAt(EHArr *eharr,int index,Element data)

{

    if((index>=0)&&(index<eharr->size))

    {

        eharr->base[index] = data;

    }

}

===================================================================

//ehcommon.h
#pragma once
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <time.h>
#include <assert.h>
#include <ctype.h>

#include <conio.h> //표준 라이브러리 헤더가 아님
enum ehkey
{
    NO_KEY, F1, F2, F3, F4, F5, F6, F7, F8, F9, ESC
};
int getkey();
void clrscr();


===================================================================

//ehcommon.c

#pragma warning(disable:4996)

#include "ehcommon.h"

int getkey()

{

    int key = 0;

    key = getch();

    if(key == 27)

    {

        return ESC;

    }

    if(key == 0)

    {

        key = getch();

        switch(key)

        {

        case 59: return F1;

        case 60: return F2;

        case 61: return F3;

        case 62: return F4;

        case 63: return F5;

        case 64: return F6;

        case 65: return F7;

        case 66: return F8;

        case 67: return F9;            

        }

    }

    return NO_KEY;

}

void clrscr()

{

    system("cls");

}



===================================================================

//Program.c

#include "App.h"

int main()

{

    Start_App();

    return 0;

}

728x90

이 글을 공유하기

댓글

Designed by JB FACTORY