본문 바로가기
코스웨어/16년 스마트컨트롤러

20160414_장진웅_업무일지_공장내Network_일대일통신(메뉴 추가한 도서관 프로그램)

by 알 수 없는 사용자 2016. 4. 16.
728x90
반응형

book.h

#ifndef __BOOK_H__
#define __BOOK_H__
#define FILENAME "BOOK.DBF"

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//#define BNAME_LEN 30
#define BPUB_LEN 20

typedef struct book
{
   char caName[BNAME_LEN];
   char caPub[BPUB_LEN];
   unsigned int uiPri;
   struct Book *Next;
}Book;

typedef enum mnum
{
    INSERT,
    DEL,
    PRINT,
    ALLFREE,
    SAVE,
    END
}MNum;

typedef struct menumap
{
    MNum eMenu;
    void (*fpRun)();
}MenuMap;

void Book_Insert();
void Book_Print();
void Book_Free();
void Book_Delete();
void Book_Menu();
void Book_Save();

#endif //__BOOK_H__

book.c

#include "book.h"

static Book * Head;

void Book_Menu()
{
    printf("********************************** \n");
    printf("** %d INPUT BOOK INFO            ** \n", INSERT);
    printf("** %d INPUT BOOK PRINT           ** \n", DEL);
    printf("** %d INPUT BOOK DEL             ** \n", PRINT);
    printf("** %d INPUT BOOK ALLDEL          ** \n", ALLFREE)
    printf("** %d INPUT BOOK SAVE            ** \n", SAVE);
    printf("** %d INPUT BOOK QUIT            ** \n", END);
    printf("********************************** \n");
}

void Book_Info(Book * temp)
{
     printf("Book Name: [%s] \n", temp-> caName);
     printf("Publisher: [%s] \n", temp-> caPub);
     printf("Book Price: [%d] \n", temp-> uiPri);
     return;
}

void Book_Insert()
{
      Book * temp = malloc(sizeof(Book));
      Book * com;
      Book * pos;

      if(0==temp)
      {
          printf("No free memory \n");
          return ;
      }
      printf("Book Name: \n");
      fgets(temp->caName, BNAME_LEN, stdin);
      temp-> caName[strlen(temp-> caName)-1]=0;

      printf("Publication: \n");
      fgets(temp->caPub, BPUB_LEN, stdin);
      temp-> caPub[strlen(temp-> caPub)-1]=0;

      printf("Book Price:  \n");
      scanf("%d", &(temp-> uiPri));
      while(getchar() != '\n');
      //searching...
      pos=Head;
      com=Head; //중간에 연결리스트 앞을 찾기위해 필요하다.
      while(pos!=0)
      {

          //비교문 필요
          if(0<strcmp(pos-> caName, temp-> caName))
          {
              break;

          }
              com=pos;
              pos=pos->Next;
      }

      if(Head==0) //연결 리스트가 존재하지 않을 경우 첫번째 ?
      {
          temp-> Next=Head;
          Head=temp;
      }

      else //중간, 끝 삽입.
      {
          if(Head==pos)//제일 앞이면
          {
              temp-> Next=pos;
              Head=temp;
          }

          else
          {
              temp-> Next=pos;
              com-> Next=temp;
          }
     }
}

void Book_Delete()
{
      Book * temp;
      Book * com;
      Book * pos;
      char caName[BNAME_LEN];
      if(Head==0) //연결 리스트가 존재하지 않을 경우 첫번째 ?
      {
            printf("삭제할 목록이 없습니다. \n");
            return;
      }

      printf("Book Name: \n");
      fgets(caName, BNAME_LEN, stdin);
      caName[strlen(caName)-1]=0;


      //searching...
      pos=Head;
      com=Head; //중간에 연결리스트 앞을 찾기위해 필요하다.
      while(pos!=0)
      {
         //비교문 필요
         if(0==strcmp(pos-> caName, caName))
         {
              break;

         }
              com=pos;
              pos=pos->Next;
       }
           if(pos==0)
           {
               printf("the book is not found \n");
               return;
           }

           if(Head==pos)//제일 앞이면 삭제.
           {
               Head=pos-> Next;
           }

           else //제일 뒤 삭제.
           {
               com-> Next=pos-> Next;
           }

           free(pos);
           printf("[%s]가 삭제되었습니다. \n", caName);
           return;
}

void Book_Print()
{
     Book *temp = Head;
     printf("===================== \n");
     printf("      Book List \n");
     while(0!=temp)
     {
     printf("--------------------- \n");


     Book_Info(temp);

     temp = temp -> Next;
     }
     printf("==================== \n");
     return;
}

void Book_Free()
{
      Book *temp;
      while(0!=Head)
      {
      temp=Head;
      Head=temp-> Next;
      free(temp);
      }
      return;
}

main.c

#include "book.h"

int main()
{
unsigned int uiMenu;

    MenuMap stMenu[END]={
        {INSERT, Book_Insert},
        {PRINT, Book_Print},
        {DEL, Book_Delete},
        {ALLFREE, Book_Free},
        {SAVE, Book_Save}
    };

while(1)
{
    Book_Menu();
    printf("0~4 input number: ");
    fflush(stdout);
    scanf("%d", &uiMenu);

    while(getchar() != '\n');

    if(END==uiMenu )
    {
        break;
    }
    if(END<uiMenu)
    {
        printf("Select the number again \n");
        continue;
    }
    stMenu[uiMenu].fpRun();


}
    Book_Free();
    printf("Book Program terminated \n");
    return 0;
}

<출력결과>

0을 입력해서 책 정보를 입력합니다.

1을 입력해서 책의 정보를 가지고 옵니다.

2를 입력해서 책 정보가 사라진 것을 확인할 수 있습니다.

5를 눌러서 도서관리 프로그램을 종료합니다.

728x90