• 프로그래밍 언어 활용 part 2 - 도서관리 시스템 고도화(동적메모리)

    2021. 8. 9.

    by. 고구마달랭이

    도서관리 시스템 고도화(동적메모리)

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

    프로그램 설계

     

    1. 고도화 개요

    [1] 고도화 개요

    ☞ 베스트셀러 Top3 도서의 제목을 출력하는 기능

    ☞ 도서 데이터를 동적할당을 이용하여 저장

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

    • 도서명  • 저자  • 가격  • 판매수량  • 코드  • 베스트셀러

     

    2. 기능 정의

    [1] 메뉴

     

    [2] 기능

    ☞ 도서 입력

    ☞ 도서 출력

    ☞ 제목 검색

    ☞ 저자검색(검색기능키워드검색)

    ☞ 출판연도별 목록 출력

    ☞ 베스트셀러 출력

     

    [3] 고도화 내용

    ☞ 베스트셀러 Top3 출력

    ☞ 동적메모리를 할당하여 저장

    ☞ 연속 입력 기능, 출력 메뉴 연속 사용 기능

     

    [4] 고도화 방법

     

    3. 자료구조 정의

    [1] 자료

     

    [2] 자료구조

     

     


     

    코드 분석


    1. 동적할당

    BOOK* inBook(BOOK* mb, int* cn)
    {
    	char yn;
    	int number;
    	int cnt;
    	cnt = *cn;
    	do{
    			while(1){
    				mb = (BOOK*)realloc(mb,sizeof(BOOK)*(cnt+2));
    							중략
    	}while(yn == 'y');
    	 *cn = cnt;
    	 return mb;
    }

     

    2. 베스트셀러 출력

    case 3 :
    
    		qsort(mb, cnt+1, sizeof(BOOK), compare);
    
    		printf(‚\n-----------------------------------\n‛);
    		printf(‚----------BestSeller Top 3----------‛);
    		printf(‚\n-----------------------------------\n‛);
            
    		for (int i = 0; i < 3 ; i++)
    		{
     		printf(‚Top %d : %30s Sale: %d\n‛, i+1, mb[i].bookTitle, mb[i].bookSale );
    		}
    		printf(‚\n-----------------------------------\n‛);
            
    		break;
            
    int compare(const void *a, const void *b)
    {
     	BOOK* ptr_a = (BOOK *)a;
     	BOOK* ptr_b = (BOOK *)b;
    
     	if (ptr_a->bookSale < ptr_b->bookSale) return 1;
     	else if (ptr_a->bookSale == ptr_b->bookSale) return 0;
     	else return -1;
    }

     

    3. 연속 입∙출력

    #include <conio.h>
    BOOK inBook(BOOK* mb, int* cn)
    {
    
    	char yn;
    	do{
    		while(1){
    			printf(‚\n책코드 : ‛);
    			중략
    			printf(‚\n 계속 입력하시겠습니까?(Y/N) ‛);
    			yn = getche();
    			cnt++;
    	}while(yn == ‘y’);
    	*cn = cnt;
    	return mb;
    }

     

     


     

     

    학습정리

     

    1. 프로그램 설계

    ▪ 프로그램 개발 시 작업 목표에 맞게 사용할 라이브러리 함수와 자료구조를 결정해야 함

    동적할당은 프로그램 실행 시 할당하는 메모리 공간이다.

    함수포인터를 이용하여 정렬함수를 사용할 수 있다.

     

    2. 코드 분석

    ▪ strtok는 토큰을 이용하여 문자열을 분리할 수 있는 함수임

    ▪ strcspn은 특정 문자로 이루어진 문자열인지 검사하는 것이 가능한 함수임

    ▪ strstr은 키워드 검색에 유용한 함수임

    댓글