104.도서관리프로그램 – 클래스다이어그램

도서 관리 프로그램에서는 장르별로 도서를 관리하게 할거예요.
따라서 사용자 정의 형식으로 프로그램, 장르, 도서로 역할을 구분하여 정의하기로 해요.

클래스 다이어그램에서는 프로그램에 정의할 형식을 클래스로 표시하고 클래스 간의 관계를 추가로 표시해요.
프로그램은 장르들의 집합체이고 장르는 도서의 집합체죠.
이와 같은 관계를 집합 관계(실선과 빈 다이아몬드)라 불러요.

이 외에도 클래스 간의 관계는 직접 연관 관계, 연관 관계, 집합 관계, 일반화 관계, 의존 관계, 실현 관계가 있어요.
C++, Java, C# 처럼 OOP 프로그램에서는 이와 같은 관계에 어울리는 문법이 있어요.
여기에서는 이들에 관한 설명은 하지 않을게요.

도서는 Book 구조체로 정의할게요.
도서 데이터에는 제목, 저자, 도서 번호를 멤버가 있어야겠죠.

◈ Book.h

#pragma once
typedef struct _Book Book;
#define MAX_TNAME_LEN     100
#define MAX_ANAME_LEN 20
struct _Book
{
    char title[MAX_TNAME_LEN+1];
    char author[MAX_ANAME_LEN+1];
    int bnum;
};

장르에는 장르명, 장르번호, 최근에 부여한 도서 번호, 도서를 보관할 EHArray 개체가 있어야겠죠.

◈ Gerne.h

#pragma once
#include "Book.h"
#include "EHArray.h"
typedef struct _Genre Genre;
#define MAX_GNAME_LEN 20
struct _Genre
{
    char name[MAX_GNAME_LEN+1];
    int gnum;
    int last_bnum;
    EHArray *books;
};

App에는 최근에 생성한 장르 번호와 장르를 보관하는 Array 개체가 필요하겠죠.

◈ App.h

#pragma once
typedef struct _App    App;
#include "EHArray.h"
#include <stdio.h>
struct _App
{
    char fname[FILENAME_MAX];
    int last_gnum;
    EHArray *genres;
};
 
App *NewApp(const char *fname);
void AppRun(App *app);
void DeleteApp(App *app);

EHArray.h 는 사용자 정의 배열 게시글을 참고하세요.