티스토리 뷰

도서관리 시스템 고도화(파일 처리)
# 프로그램 설계
        1. 고도화 내용
        
        
        
            
    
            도서 데이터를 텍스트 파일로 저장하여 관리
유효성 검사기능 추가
프로그램 구현 시 처리 대상 자료
- 도서명
- 저자
- 가격
- 판매 수량
- 코드
        
        2. 기능 정의유효성 검사기능 추가
프로그램 구현 시 처리 대상 자료
- 도서명
- 저자
- 가격
- 판매 수량
- 코드
            1)메뉴
            
            

struct book {
char bookTitle[50];
char bookAuthor[20];
int bookPrice;
int bookSale;
char bookCode[9];
};
        
        3. 스트림
            - 도서 입력
            - 도서 출력
            - 제목 검색
            - 저자 검색(검색 기능키 워드 검색)
            - 출판연도별 목록 
            - 출력 베스트셀러 출력
            - 데이터 파일로 입출력
            
            3)고도화 내용
            
            - 텍스트 파일에 데이터 저장
            - 유효성 검사 추가
            
            4)고도화 방법
            
struct book {
char bookTitle[50];
char bookAuthor[20];
int bookPrice;
int bookSale;
char bookCode[9];
};

# 코드 분석
        1. 파일에 저장
        2. 파일에서 읽기
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);
    }
}
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;
}
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;
}    
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저자를 입력하세요 ”);
}  
'JAVA기반스마트웹개발2021 > 프로그래밍언어 활용' 카테고리의 다른 글
| 주소록 관리 시스템 (0) | 2021.08.09 | 
|---|---|
| 시간 관련 라이브러리 (0) | 2021.08.09 | 
| 파일 입출력 라이브러리(응용) (0) | 2021.08.08 | 
| 파일 입출력 라이브러리(기초) (0) | 2021.08.08 | 
| 도서관리 시스템 고도화(동적메모리) (0) | 2021.08.08 | 
