프로그래밍 언어 공부/C

도서관리 시스템 구현

CalebHong 2022. 1. 13. 11:19

도서관리 프로그램이란?

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

 

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

{

    도서명,

    가격,

    저자,

    판매수량

}

 

기능 정의

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

 

자료구조 정의

자 료 도서명 char bookTitle
저자 char bookAuthor
가격 int bookPrice
판매수량 int bookSale
요구사항 struct book
{
    char bookTitle[50];
    char bookAuthor[20];
    int bookPrice;
    intbookSale;
}

 

#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);

int main()
{
	int sel, totalBCnt = 0;
    BOOK myBook[100]; // 100개의 배열로 100권으로 제한
    while(1)
    {
    	puts("\n원하는 메뉴를 선택하세요");
    	puts("1. 도서 입력");
    	puts("2. 도서 출력");
    	puts("3. 도서 검색");
    	puts("0. 종료");
        scanf("%d", &sel);
        fflush(stdin); // 다음을 위해 입력 버퍼를 비움
        
        switch(sel)
        {
        	case 1: thtoalBCnt = intBook(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;
}

int inBook(BOOK* mb, int cnt) // 포인터 변수를 통해 배열의 시작 주소를 매개 변수로 받음
{
	printf("\n책제목: ");
    gets(mb[cnt].bookTitle);
    prinft("저자: ");
    gets(mb[cnt].bookAuthor);
    printf("가격: ");
    scanf("%d", &mb[cnt].bookPrice);
    prinft("재고수량: ");
    scanf("%d", &mb[cnt].bookSale);
    
    return ++cnt; // 카운트 값을 증가
}

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

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++)
                {
                	// 문자열 비교하는 라이브러리 함수(두 문자열이 같으면 false 값을 반환 받음)
                    if (!strcmp(mb[i].bookTitle, sTitle)) 
                    	break;
                }
                if(i < cnt)
                {
    				prinft("\n------------------------");
    				prinft("\n제목: %s \n", mb[i].bookTitle);
    				prinft("저자: %s \n", mb[i].bookAuthor);
    				prinft("가격: %d \n", mb[i].bookPrice);
    				prinft("수량: %d \n", mb[i].bookSale);
                }
                else
                {
    				prinft("\n------------------------");
    				prinft("\n일치하는 책이 없습니다. \n");
                }
                break;
        case 2: printf("\n검색할 저자명을 입력하세요: ");
        		gets(sTitle);
                for(i=0;i<cnt;i++)
                {
                	if (!strcmp(mb[i].bookAuthor, sTitle)) 
                    	break;
                }
                if(i < cnt)
                {
    				prinft("\n------------------------");
    				prinft("\n제목: %s \n", mb[i].bookTitle);
    				prinft("저자: %s \n", mb[i].bookAuthor);
    				prinft("가격: %d \n", mb[i].bookPrice);
    				prinft("수량: %d \n", mb[i].bookSale);
                }
                else
                {
    				prinft("\n------------------------");
    				prinft("\n일치하는 책이 없습니다. \n");
                }
                
        default  : puts("1~2 사이의 메뉴 번호를 선택하세요");
    }
}

'프로그래밍 언어 공부 > C' 카테고리의 다른 글

동적 메모리  (0) 2022.01.15
수학 관련 라이브러리  (0) 2022.01.13
문자 처리 라이브러리  (0) 2022.01.12
라이브러리(Library)  (0) 2022.01.12
어플리케이션 최적화(Application Optimization)  (0) 2022.01.12