티스토리 뷰


대학에 와서 처음으로 혼자 짰던 프로그램으로 기억된다. ㅎㅎㅎ

지금와서 다시 보면 그때 혼자서 열심히 짜보려고 했던게 기억난다. 지금의 내가 저때와 비교해서 얼마나 코딩실력이 향상되었는지는 잘 모르겠다 ( 제자리 걸음일지도... )

아마 관련학과에서 C수업을 듣는 사람들은 많이 받게 되는 과제중에 하나라고 생각이 된다.

어디다가 내놓기도 좀 그런 소스지만 누군가에게는 도움이 될꺼라 생각하고... ^^





/* 주소록 공간 수 설정 (기본값 50) */
#define NUM 50
 
/* 헤더파일 */
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
 
/* 전역함수 Mark 선언(입력되지 않은 공간의 첫번째를 가리키도록 한다) */
int mark=0;
 
/* 구조체 ( 이름, 생년월일, 연락처, 주소 ) */
typedef struct _book{
 
    char name[10];
    char birth[10];
    char phone[20];
    char address[50];
 
} abook;
 
/* NUM으로 정의된 수만큼 주소록 공간 생성 */
abook book[NUM];
 
 
/* input 함수 */
void input(void){
 
    if(mark == NUM) {                          /* 주소록이 꽉 찼는지 확인 */
printf("저장공간이 꽉 찼습니다.\n");
return;                                /* 꽉 찬 경우 함수 종료 */
    }
 
printf("입력 후 엔터 ^^\n\n");
 
    printf("이름을 입력하세요 : ");
gets(book[mark].name);
 
    printf("\n생년월일을 입력하세요 : ");
    gets(book[mark].birth);
 
    printf("\n연락처를 입력하세요 : ");
    gets(book[mark].phone);
 
    printf("\n주소를 입력하세요 : ");
gets(book[mark].address);
 
printf("\n*** 입력이 완료되었습니다 ***\n\n");
 
    mark++; /* 전역함수 mark를 1만큼 증가시켜 현재 자료를 입력한 다음번째 배열을 가리키도록 함 */
 
}
 
/* delete 함수 */
void del(void){
 
    int del_mark;
    int del_select;
    int check = 0;
    char del_name[10];
    char del_phone[20];
 
 
    printf("1.이름으로 삭제\n2.연락처로 삭제\n(주의:중복되는 데이터는 같이 삭제됩니다)\n===:");
    del_select = getche();
 
    switch(del_select){
    case '1':
printf("\n삭제할 이름을 입력하세요 : ");
gets(del_name);
 
for(del_mark = 0 ; del_mark < mark ; del_mark++) /* 입력받았던 값들에서 */
{
if(strcmp(del_name,book[del_mark].name)==0)  /* 이름일치 검색 */
{
int drive;
check++;   /* 중복되는 데이터가 있는지 알기위해 check++ */
 
for(drive = del_mark ; drive < (mark-1) ; drive++){   /* 해당하는 배열의 뒤배열에서 앞으로 1칸씩 이동 */
strcpy(book[drive].name,book[drive+1].name);
strcpy(book[drive].birth,book[drive+1].birth);
strcpy(book[drive].phone,book[drive+1].phone);
strcpy(book[drive].address,book[drive+1].address);
}
mark--;   /* 삭제된 데이터만큼 현재 가리키는 배열 주소를 앞으로 */
}
}
if ( check == 0 ){
printf("\n삭제할 내용이 없습니다.\n");
}
else {
printf("\n*** %d개의 데이터가 삭제되었습니다. ***\n",check);
}
 
break;
 
    case '2':
printf("\n삭제할 연락처를 입력하세요 : ");
gets(del_phone);
 
for(del_mark = 0 ; del_mark < (mark-1) ; del_mark++)   /* 입력받았던 값들에서 */
{
if(strcmp(del_phone,book[del_mark].phone)==0)      /* 연락처 일치 검색 */
{
int drive;
check++;   /* 중복되는 데이터가 있는지 알기위해 check++ */
 
for(drive = del_mark ; drive < mark ; drive++){    /* 해당하는 배열의 뒤배열에서 앞으로 1칸씩 이동 */
strcpy(book[drive].name,book[drive+1].name);
strcpy(book[drive].birth,book[drive+1].birth);
strcpy(book[drive].phone,book[drive+1].phone);
strcpy(book[drive].address,book[drive+1].address);
}
mark--;   /* 삭제된 데이터만큼 현재 가리키는 배열 주소를 앞으로 */
}
}
if ( check == 0 ) {
printf("\n삭제할 내용이 없습니다.\n");
}
else {
printf("\n*** %d개의 데이터가 삭제되었습니다. ***\n",check);
}
 
break;
 
    default:
        printf("\n잘못된 입력입니다.\n");
    }
}
 
/* search함수 */
void search(void){
 
    int search_mark;
    int check = 0;
    int search_select;
    char search_name[10];
    char search_phone[20];
 
    printf("1.이름으로 찾기\n2.연락처로 찾기\n===: ");
    search_select = getche();
 
    switch(search_select){
    case '1':
printf("\n찾는 사람의 이름을 입력하세요 : ");
gets(search_name);
 
for(search_mark = mark-1 ; search_mark  > -1 ; search_mark--){ /* 마지막 입력받은 데이터부터 처음까지 검색 */
if(strcmp(search_name,book[search_mark].name)==0){   /* 일치하는 데이터를 찾아 출력 */
check++;   /* 몇명이나 찾았는지 알기위해 check++ */
printf("\n이름 : %s\n생년월일 : %s\n연락처 : %s\n주소 : %s\n",book[search_mark].name,book[search_mark].birth,book[search_mark].phone,book[search_mark].address);
}
}
 
        if (check == 0)
printf("\n검색 결과가 없습니다.\n");
 
else
printf("\n*** %d개의 데이터가 검색되었습니다. ***\n",check);
 
return;
 
    case '2':
printf("\n찾는 사람의 연락처를 입력하세요 : ");
gets(search_phone);
 
for(search_mark = mark-1 ; search_mark > -1 ; search_mark--){ /* 마지막 입력받은 데이터부터 처음까지 검색 */
if(strcmp(search_phone,book[search_mark].phone)==0){   /* 일치하는 데이터를 찾아 출력 */
check++;   /* 몇명이나 찾았는지 알기위해 check++ */
printf("\n이름 : %s\n생년월일 : %s\n연락처 : %s\n주소 : %s\n",book[search_mark].name,book[search_mark].birth,book[search_mark].phone,book[search_mark].address);
}
}
 
if (check == 0)
printf("\n검색된 결과가 없습니다.\n");
 
else
printf("\n*** %d개의 데이터가 검색되었습니다. ***\n",check);
 
return;
 
default:
printf("\n잘못된 입력입니다.\n");
}
}
 
 
/* main함수 시작 */
int main(void){
 
    int action;
 
/* 무한루프 - 종료를 선택할 때까지 무한히 반복된다 */
while(1){
 
/* 메뉴 화면 출력 */
printf("\n=-=-=-주소록 프로그램  by.MSH-=-=-=\n");
        printf("***********************************\n");
        printf("1.삽입\n");
        printf("2.삭제\n");
        printf("3.검색\n");
        printf("4.종료\t\t남은 저장공간 : %d\n",NUM-mark);
        printf("***********************************\n");
        printf("원하는 기능을 선택하세요(1-4) : ");
 
/* Action값 받음 */
        action = getche();
 
/* Action값에 따른 Switch문 */
        switch(action){
case '1':
system("cls"); /* 화면을 깨끗이 지운다 */
input();
break;
 
case '2':
system("cls");
del();
break;
 
case '3':
system("cls");
search();
break;
 
case '4':
printf("\n\n\nby - Crio\n\n\n");
return 0;
 
 
default:
system("cls");
printf("\n잘못된 입력입니다. 다시 입력해 주세요.\n");
        }
 
    }
return 0;
}

'Study > C/C++' 카테고리의 다른 글

알파벳 빈도수 검출 두번째  (0) 2009.05.01
알파벳 빈도수 검출  (0) 2009.05.01
볼링점수 계산  (0) 2009.04.28
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함