[자료구조 - C언어] 자료구조 제14강: Music Library Program(6)

2022. 11. 4. 00:19CS/자료구조

728x90

//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎

 

0. 실행 예

  • Data file name? - 프로그램을 실행하면 어떤 데이터 파일을 load 할지 물어본다.
    • 입력 없이 Enter를 치면 데이터 파일로부터 데이터를 읽지 않고 프로그램을 실행
  • status - 저장된 모든 노래의 번호, 가수, 제목, 파일의 경로명을 출력
    • 노래의 번호는 입력 순서대로 번호 할당
    • 출력 시 가수 이름 알파벳 순으로 출력
      • 동일한 가수 이름이면 노래 제목으로 알파벳 순으로 출력
  • add - 가수 이름, 제목, 파일명으로 추가
    • 파일명은 지정하지 않아도 된다.
  • search - 가수 이름과 노래 제목으로 검색
    • 제목 없이 가수 이름만 검색해도 된다.
  • play 4 - 4번 노래를 play
  • remove 6 - 6번 노래를 목록에서 삭제
  • save as my_collection.txt - 목록을 파일에 저장
  • exit - 종료
  • 파일 형식
    가수#노래제목#경로#
    LESSERAFIM#Sour Grapes# #
    • 가수#노래제목#경로# 순서
    • #문자를 필드 간의 구분자
    • 존재하지 않는 항목의 경우 하나의 공백 문자로 표시
      • 모든 라인은 반드시 구분자로 끝난다.

 

1. 데이터 파일 로드하기

1-1. main에서 로드 처리를 하는 함수 생성 - void hanlde_load()

//main.c

int main(){
    initialize();
    handle_load();
    process_command();
}

void handle_load(){
    char buffer[BUFFER_LENGTH];
    
    printf("Data file name ?  ");
    
    //data 파일을 로드하지 않겠다
    if(read_line(stdin, buffer, BUFFER_LENGTH) <=0)
        return;
    
    FILE *fp = fopen(buffer, "r");
    //사용자가 입력한 파일이 존재하지 않는다면
    if (fp==NULL){
        printf("No such file exists. \\n");
        return;
    }
    
    load(fp);
    fclose(fp);
}
  • xcode에서 실행시 파일명 대신 파일 주소 전체를 입력해야 함
    //파일이 저장될 주소 + 입력된 파일 명
    char filePath[BUFFER_LENGTH] = "/USers/~/";
    char *file = NULL;
    file = strcat(filePath, buffer);
    
    FILE *fp = fopen(filePath, "r");

1-2. void load(FILE *Fp)

//library.c

#include "string_tools.h"

void load(FILE *fp){
    char buffer[BUFFER_LENGTH];    //한 라인의 데이터를 읽어올 데이터 배열
    char *name, *title, *path;
    while(1){       //무한 루프
        //끝에 도달 - 종료
        if(read_line(fp, buffer, BUFFER_LENGTH) <=0)
            break;
        
        name = strtok(buffer, "#");
        if(strcmp(name, " ")==0)
            name = NULL;
        else
            name = strdup(name);   
        
        title = strtok(NULL, "#");
        if(strcmp(title, " ")==0)
            title = NULL;
        else
            title = strdup(title);
      
        path = strtok(NULL, "#");
        if(strcmp(path, " ")==0)
            path = NULL;
        else
            path = strdup(path);
    
        printf("%s %s %s\\n", name, title, path);
    }
}

1-3. library.h 프로토 타입

//library.h

void load(FILE *fp);

2. 결과

 

 

 

 


부경대학교 권오흠 교수님의 [c로 배우는 자료구조 및 여러 가지 예제 실습] 강의 정리입니다. 감사합니다.

https://www.youtube.com/watch?v=fglT1AqmFfk&feature=emb_title 

728x90