• 프로그래밍 언어 활용 part 2 - 도서관리 시스템

    2021. 8. 8.

    by. 고구마달랭이

     

     

    도서관리 시스템

    학습내용 학습목표
    ▪ 프로그램 설계
    ▪ 코드 분석
    ▪ 목표로 하는 시스템에서 요구되는 자료구조를 설계할 수 있다.
    ▪ 사용 가능한 라이브러리 함수를 개발에 적용할 수 있다.

    프로그램 설계

     

    1. 프로그램 개요

    도서관리 프로그램이란?

    ☞ 도서명과 저자 등의 정보를 저장하고 저장된 도서 목록 젂체를 출력하거나 찾고자 하는 도서를 제목과 저자 정보로 검색하여 결과를 출력하는 프로그램을 개발

     

    프로그램 구현 시 처리 대상 자료

    ☞ 도서명 / 가격 / 저자 / 판매수량

     

     

    2. 기능 정의

    항 목 내 용
    메뉴 도서 입력, 도서 출력, 도서 검색, 종료
    기능 도서 입력, 출력, 제목 검색, 저자 검색
    요구사항 ▪ 메뉴방식으로 작업 선택
    ▪ 종료 메뉴 추가
    ▪ 책 제목 최대 50글자까지 입력 가능
    ▪ 저자명 최대 20글자까지 입력 가능
    ▪ 검색 : 제목 검색, 저자 검색
    ▪ 최대 100권 관리 기능

     

     

    3. 자료구조 정의

     


     

    코드 분석

    1. 선언부

    #include <stdio.h>
    #include <string.h>
    
    typedef struct book{
    
    	char bookTitle[50];
    	char bookAuthor[20];
        int bookPrice;
    	int bookSale;
    
    }BOOK;
    int inBook(BOOK* , int);
    void outBook(BOOK* , int);
    void searchBook(BOOK* , int);

     

     

    2. main()함수

    int main()
    {
    int sel, totalBCnt=0;
    BOOK myBook[100];
    while(1){
    puts("\n원하는 메뉴를 선택하세요");
    puts("1. 도서 입력");
    puts("2. 도서 출력");
    puts("3. 도서 검색");
    puts("0. 종료 ");
    scanf("%d", &sel);
    fflush(stdin);
    switch(sel){
    			case 1 : totalBCnt = inBook(myBook, totalBCnt); break;
    			case 2 : outBook(myBook,totalBCnt); break;
    			case 3 : searchBook(myBook,totalBCnt); break;
    			case 0 : return 0;
    			default : puts("0~3 사이의 메뉴번호를 선택하세요");
    			}
      		 } return 0;
    }

     

    3. 입력함수

    int inBook(BOOK* mb, int cnt)
    {
    	printf("\n책제목 : ");
    	gets(mb[cnt].bookTitle);
        
    	printf("저자 : ");
    	gets(mb[cnt].bookAuthor);
        
    	printf("가격 : ");
    	scanf("%d",&mb[cnt].bookPrice);
        
    	printf("재고수량 : ");
    	scanf("%d",&mb[cnt].bookSale);
        
    	return ++cnt;
    }

     

    4. 출력함수

    void outBook(BOOK* mb, int cnt)
    {
    		int i;
    		for(i=0;i<cnt;i++)
    		{
    				printf("\n-----------------------------------");
    				printf("\n제목 : %s \n",mb[i].bookTitle);
    				printf("저자 : %s \n",mb[i].bookAuthor);
    				printf("가격 : %d \n",mb[i].bookPrice);
    				printf("수량 : %d \n",mb[i].bookSale);
    		}
    }

     

    4. 검색함수

    void searchBook(BOOK* mb, int cnt)
    {
    
       char sTitle[50];
       int i, search;
       
       puts("\n원하는 메뉴를 선택하세요");
       puts("1. 제목 검색 ");
       puts("2. 저자 검색 ");
       scanf("%d", &search);
       
       fflush(stdin);
       switch(search){
         case 1 : printf("\n검색할 제목을 입력하세요: ");
         gets(sTitle);
         for(i=0;i<cnt;i++)
         {
     if (!strcmp(mb[i].bookTitle,sTitle))
         break;
     }
     if(i<cnt)
     {
    	 printf("\n-----------------------------------");
    	 printf("\n제목 : %s \n",mb[i].bookTitle);
    	 printf("저자 : %s \n",mb[i].bookAuthor);
    	 printf("가격 : %d \n",mb[i].bookPrice);
    	 printf("수량 : %d \n",mb[i].bookSale);
     }
    
    else
     {
     	printf("\n-----------------------------------");
    	 printf("\n일치하는 책이 없습니다. \n");
     }
     break;

     

     


     

     

    학습정리

     

    1. 프로그램 설계

    ▪ 프로그램 개발 시 처리할 자료에 대한 자료구조 정의는 매우 중요함

    ▪ 프로그램의 기능 수행을 위한 요구분석을 주의 깊게 수행 해야 함

     

    2. 코드 분석

    ▪ 라이브러리 함수 사용 시, 함수의 반환 값 매개변수 등을 정확히 확인 후 사용

    ▪ 라이브러리 함수는 해당 헤더 파일을 선언 후 사용

    ▪ strcmp()함수는 문자열을 비교하고 다른 경우는 true를 반환

    댓글