[자료구조 - C언어] 자료구조 제14강: Music Library Program(7)
2022. 11. 4. 16:24ㆍCS/자료구조
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. command_process에 search함수 추가하기
//main.c
void handle_search();
void process_command(){
...
if(strcmp(command, "add")==0)
handle_add();
else if(strcmp(command, "search")==0)
handle_search();
...
}
1-2. void handle_search()
- c언어에서는 함수이름은 같으나 매개변수가 다른 함수의 오버로딩이 되지 않기 때문에 강의와 다르게 함수 이름을 다르게 작성함
- 가수의 이름과 제목으로 검색하는 함수: void search_song(char *artist, char *title)
- 가수의 이름으로만 검색하는 함수: void search_song_artist(char *artist)
//main.c
void handle_search(){
char name[BUFFER_LENGTH], title[BUFFER_LENGTH];
printf(" Artist: ");
if(read_line(stdin, name, BUFFER_LENGTH) <= 0){
printf(" Artist name required.\\n");
return;
}
//제목을 입력하면 해당 노래만 출력
//제목을 입력하지 않으면 가수이름으로 검색 ~ 가수의 모든 노래 출력
printf(" Title: ");
int title_len = read_line(stdin, name, BUFFER_LENGTH);
if(title_len <= 0)
//이름으로만 검색 - c언어 오버로딩 X
search_song_artist(name);
else
search_song(name, title);
}
1-3. 파일을 프로그램에 add하고 search 함수 구현하기
- 파일을 로드해서 add_song하기
//library.c
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);
add_song(name, title, path);
}
}
- 가수 이름(name)과 제목(title) 2개를 매개변수로 검색하는 함수 구현
//library.c
void search_song(char *artist, char *title){
Artist *ptr_artist = find_artist(artist);
if(ptr_artist == NULL){
printf("No such artist exists.\\n");
return;
}
SNode *ptr_snode = ptr_artist->head;
//노래제목은 알파벳 순 정렬
while(ptr_snode != NULL && strcmp(ptr_snode->song->title, title) < 0)
ptr_snode = ptr_snode->next;
if(ptr_snode != NULL && strcmp(ptr_snode->song->title, title) == 0){
printf("Found:\\n");
print_song(ptr_snode->song);
}
else{
printf("No such song exists.\\n");
return;
}
}
void search_song_artist(char *artist){
}
1-4. library.h에 프로토타입 include
//library.h
void search_song(char *artist, char *title);
void search_song(char *artist);
2. 결과
Data file name ? list.txt
$ status
iu
0: twenty-three, C://music/twenty-three.mp4
nct127
3: Cherry Bomb, C://music/Cherry Bomb.mp4
txt
2: Our Summer, C://music/Our Summer.mp4
1: crown, C://music/crown.mp4
$ add
Artist: txt
Title: ghosting
Path: C://music/ghosting.mp4
$ search
Artist: txt
Title: ghosting
Found:
4: ghosting, C://music/ghosting.mp4
$ search
Artist: nct127
Title: kick it
No such song exists.
$
부경대학교 권오흠 교수님의 [c로 배우는 자료구조 및 여러 가지 예제 실습] 강의 정리입니다. 감사합니다.
https://www.youtube.com/watch?v=yrEN5bIod_I&t=377s
728x90
'CS > 자료구조' 카테고리의 다른 글
[자료구조 - C언어] 자료구조 제14강: Music Library Program(9) (0) | 2022.11.07 |
---|---|
[자료구조 - C언어] 자료구조 제14강: Music Library Program(8) (0) | 2022.11.04 |
[자료구조 - C언어] 자료구조 제14강: Music Library Program(6) (0) | 2022.11.04 |
[자료구조 - C언어] 자료구조 제14강: Music Library Program(5) (0) | 2022.10.29 |
[자료구조 - C언어] 자료구조 제14강: Music Library Program(4) (0) | 2022.10.28 |