티스토리 뷰

도서관리 시스템 고도화(파일 처리)

# 프로그램 설계

1. 고도화 내용
도서 데이터를 텍스트 파일로 저장하여 관리
유효성 검사기능 추가
프로그램 구현 시 처리 대상 자료
- 도서명
- 저자
- 가격
- 판매 수량
- 코드
2. 기능 정의
1)메뉴
2)기능
- 도서 입력 - 도서 출력 - 제목 검색 - 저자 검색(검색 기능키 워드 검색) - 출판연도별 목록 - 출력 베스트셀러 출력 - 데이터 파일로 입출력
3)고도화 내용
- 텍스트 파일에 데이터 저장 - 유효성 검사 추가
4)고도화 방법

struct book {
   char bookTitle[50];
   char bookAuthor[20];
   int bookPrice;
   int bookSale;
   char bookCode[9];
};
3. 스트림

# 코드 분석

1. 파일에 저장

void saveBooks(BOOK* mb, intcnt)
{
    FILE * fp;
    inti;
    fp= fopen(“myBooks.txt” , “w+”);

    if (fp== NULL) perror(“Error opening file”);
    else {
        fprintf(fp, “%d\n”, cnt);

        for(i=0;i < cnt;i++){
        fprintf(fp,“%s %s %s %d %d\n”,mb[i].bookCode, mb[i].bookTitle,mb[i].bookAuthor, mb[i].bookPrice, mb[i].bookSale);
        }
        fclose(fp);
    }
}
2. 파일에서 읽기

BOOK* readBooks(BOOK* mb, int* cn)
{
    FILE * fp;
    int i,cnt;
                
    fp = fopen (“myBooks.txt” , “r+”);
    if (fp == NULL) perror (“Error opening file”);
    else {
        fscanf(fp, “%d”,&cnt);
        mb = (BOOK*)realloc(mb,sizeof(BOOK)*(cnt+1));

        for(i=0;i < cnt;i++){
            fscanf(fp, “%s %s %s %d %d”,mb[i].bookCode,mb[i].bookTitle, mb[i].bookAuthor ,&mb[i].bookPrice , &mb[i].bookSale);
        }

        fclose (fp);
    }
    *cn = cnt;
    return mb;
}
3. 선언 및 main 함수

BOOK* inBook(BOOK* , int*);
void outBook(BOOK* , int);
void searchBook(BOOK* , int);
BOOK* readBooks(BOOK*, int*);
void saveBooks(BOOK* , int);

intmain()
{ 
    intsel, totalBCnt=0;
    BOOK *myBook;
    myBook= (BOOK *)calloc(2,sizeof(BOOK));
    myBook= readBooks(myBook,&totalBCnt);
    while(1){
        puts(“\n\n원하는메뉴를선택하세요”);
        ……………………………………………………………………………
        switch(sel){
            case 1 : myBook= inBook(myBook, &totalBCnt);
            break;
            case 2 : outBook(myBook, totalBCnt); break;
            case 3 : searchBook(myBook, totalBCnt); break;
            case 0 : saveBooks(myBook,totalBCnt); return 0;
            default : puts(“0~3 사이의메뉴번호를선택하세요”);
        }
    }
    return 0;
}    
4. 유효성 검사

if (!strcspn(mb[cnt].bookCode, “0123456789-”) &&
(strstr(mb[cnt].bookCode, “-”) - mb[cnt].bookCode)==4 &&
strlen(mb[cnt].bookCode)==8)

while(1){
    fflush(stdin);
    printf(“책제목 : ”);
    gets(mb[cnt].bookTitle);

    if ( strlen(mb[cnt].bookTitle) > 0 ) break;

    printf(“\n책제목을 입력하세요 ”);
}
while(1){
    fflush(stdin);
    printf(“저자 : ”);
    gets(mb[cnt].bookAuthor);

    if ( strlen(mb[cnt].bookAuthor) > 0 ) break;
    
    printf(“\n저자를 입력하세요 ”);
}  
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함