반응형
데이터베이스의 기능을 하는 간단한 프로그램을 작성하여 보자. 이 프로그램은 mp3와 같은 음악 파일을 관리한다. 사용자는 음악 파일을 추가, 삭제, 출력할 수 있으며 제목을 가지고 특정 곡을 탐색할 수 있다. 사용자 인터페이스는 다음과 같다.
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | #include <stdio.h> #include <string.h> #define SIZE 50 enum classi {GEN, POP, CLASSIC, MOVIE}; typedef struct music{ int check; char name[30]; char singer[20]; char location[30]; enum classi clas; } MUSIC; int menu(void); void add(MUSIC a[]); void print(MUSIC a[]); void search(MUSIC a[]); void del(MUSIC a[]); int main(void) { MUSIC m[SIZE]; int i,men; for(i=0;i<SIZE;i++) {m[i].check=0; } while(1){ men=0; men=menu(); if(men==1) {add(m);} else if(men==2) {print(m);} else if(men==3) {search(m);} else if(men==4) {del(m);} else if(men==5) {break;} else {printf("잘못된 입력입니다.\n");}}; return 0;} int menu(void) { int a=0; printf("=============\n"); printf("1.추가\n2.출력\n3.검색\n4.삭제\n5.종료\n"); printf("=============\n"); scanf("%d", &a); return(a);} void add(MUSIC a[]) { int i, count; count=0; for(i=0;i<SIZE;i++) {count++; if(a[i].check==0) {printf("제목을 입력하세요: "); scanf("%s", &a[i].name); printf("가수를 입력하세요: "); scanf("%s", &a[i].singer); printf("저장된 위치를 입력하세요: "); scanf("%s", &a[i].location); printf("장르를 입력하세요(0:가요 1:팝 2:클래식 3:영화음악): "); scanf("%d", &a[i].clas); a[i].check=1; break;} if(count==SIZE) printf("목록이 꽉 찼습니다.\n");}} void print(MUSIC a[]) { int i; printf("0 : 가요 1 : 팝 2: 클래식 3: 영화음악\n"); for(i=0;i<SIZE;i++) {if(a[i].check!=0) printf("제목 : %s\n가수 : %s\n저장된 위치 : %s\n분류 : %d\n",a[i].name,a[i].singer,a[i].location,a[i].clas);} printf("****출력완료****\n");} void search(MUSIC a[]) { char cm[30]; int i, count; count=0; printf("제목을 입력하세요: "); scanf("%s", cm); for(i=0;i<SIZE;i++) { count++; if(strcmp(a[i].name,cm)==0) {printf("제목 : %s\n가수 : %s\n저장된 위치 : %s\n분류 : %d\n",a[i].name,a[i].singer,a[i].location,a[i].clas); break;}} if(count==SIZE) {printf("잘못된 입력입니다.\n");}} void del(MUSIC a[]) { char cm[30]; int i, count; count=0; printf("제목을 입력하세요: "); scanf("%s", cm); for(i=0;i<SIZE;i++) { count++; if(strcmp(a[i].name,cm)==0) { a[i].check=0; break;} if(count==SIZE) {printf("잘못된 입력입니다.\n");}}} | cs |
del(삭제) 는 check를 0으로 만들어 출력이 안되는 식으로 구현했다. (실제로 그 안에 데이터는 들어있고, 다음 입력을 받을 때 그 위에 덮어 씌워지는 형식)
다른 방식으로는 그다음 번호의 데이터를 삭제 데이터 기준으로 하나씩 앞으로 당기는 방법이 있는데, 이것은 SIZE-1번째 배열 때문에 귀찮아지고,
무엇때문인지 count가 0인것을 인식을 못해서 계속 오류가 발생하였다. 그래서 위의 방식으로 구현을 하였다.
이번 것은 너무 길어서 스크린샷은 안찍었다. 참고로 출력은 전체를 출력하는 것이고 검색은 검색한 것만 출력하는 것이다.
반응형
'컴퓨터 & 프로그래밍 & 전자공학 > C언어' 카테고리의 다른 글
2차원 배열 합 (0) | 2017.01.04 |
---|---|
속담 선택기 (0) | 2017.01.04 |
삼각형, 사각형, 원 (0) | 2017.01.02 |
포커 카드 배열 (0) | 2016.12.28 |
전화번호부 (0) | 2016.12.28 |