C언어 도서관리 프로그램(예광탄)
- C언어
- 2016. 4. 17. 22:46
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.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;
}
'C언어' 카테고리의 다른 글
C언어 포인터란? (0) | 2018.07.05 |
---|---|
C언어 장르별 도서관리 프로그램 소스코드 (0) | 2016.04.17 |
C언어 비트단기 7일차(동적할당, 학생관리 시나리오 실습) (0) | 2016.04.17 |
C언어 비트단기 6일차(문자열 함수, 구조체) (0) | 2016.04.17 |
C언어 비트단기 5일차(함수) (0) | 2016.04.17 |
이 글을 공유하기