도서관리 프로그램이란?
- 도서명과 저자 등의 정보를 저장하고 저장된 도서 목록 전체를 출력하거나 찾고자 하는 도서를 제목과 저자 정보로 검색하여 결과를 출력하는 프로그램을 개발
프로그램 구현 시 처리 대상 자료
{
도서명,
가격,
저자,
판매수량
}
기능 정의
항 목 | 내 용 |
메뉴 | 도서 입력, 도서 출력, 도서 검색, 종료 |
기능 | 도서 입력, 출력, 제목 검색, 저자 검색 |
요구사항 | - 메뉴 방식으로 작업 선택 - 종료 메뉴 추가 - 책 제목 최대 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 |