티스토리 뷰

주소록 관리 시스템

# 프로그램 설계

1. 프로그램 개요
주소록 관리를 위하여 파일에 보관되며 검색 ∙ 수정 ∙ 삭제가 가능한 시스템 구현

프로그램 구현 시 처리 대상 자료
- 이름
- 나이
- 생년월일
- 젂화번호
- 주소
2. 기능 정의

1) 메뉴
2) 기능
주소록 출력
주소록 검색
주소록 입력
나이 자동계산

3) 요구사항
메뉴 방식으로 작업 선택
보안을 위하여 이진 파일로 데이터 저장
출생연도 입력 시 나이 계산 자동으로 입력
이름순 젂체 출력
이름 검색 후 출력, 수정, 삭제

3. 자료구조 정의
structphone {
   char name[20];
   char phone[14];
   intbirth;
   intage;
   char addr[50];
};

# 코드 분석

1. 입력 검증
데이터를 입력하지 않고 넘어가는 경우를 검사

while(1){
    fflush(stdin);
    printf(‚\n이름 : ‛);
    gets(mp[cnt].name);

    if ( strlen(mp[cnt].name) > 0 ) break;

    printf(‚\n이름을 입력하세요 ‛);
}        
숫자 입력인지 확인

while(1){
    fflush(stdin);
    printf(“출생연도 : ”);
    scanf(“%d”,&mp[cnt].birth);

    if ( mp[cnt].birth > 0 ) break;

}      
2. 나이 계산

int calAge(int birth){
    time_t timer;
    struct tm *t;
    timer = time(NULL);
    t = localtime(&timer);
    return t->tm_year + 1900- birth;
}     
3. 파일 쓰기
이전 데이터 파일 쓰기

void savePhones(PHONE* mp, int cnt)
{ 
    FILE * fp;
    int i;
    fp = fopen (‚myPhones.bin‛ , ‚wb+‛);

    if (fp == NULL) perror (‚Error opening file‛);
    else {
        fwrite(&cnt, sizeof(int), 1, fp);
        fwrite(mp, sizeof(PHONE), cnt, fp);
        fclose (fp);
    }
}
4. 파일 읽기
이진 데이터 파일 읽기

PHONE* readPhones(PHONE* mp, int* cn)
{
    FILE * fp;
    int i,cnt;
    cnt = *cn;
    fp = fopen (‚myPhones.bin‛ , ‚rb+‛);

    if (fp == NULL) perror (‚Error opening file‛);
    else {
        fread(&cnt, sizeof(int),1,fp);
        mp = (PHONE*)realloc(mp,sizeof(PHONE)*(cnt+1));
        fread(mp, sizeof(PHONE), cnt, fp);
        fclose (fp);
    }

    *cn = cnt;
    return mp;
}
5. 데이터 수정

PHONE* modifyPhone(PHONE* mp, inti)
{
    char yn;
    intsel;
    printf(‚\n-----------------------------------);
    printf(‚\n1. 이 름: %s \n‛,mp[i].name);
    printf(‚2. 젂화번호: %s \n‛,mp[i].phone);
    printf(‚3. 주 소: %s \n‛,mp[i].addr);
    printf(‚4. 출생연도: %d \n‛,mp[i].birth);
    printf(‚나 이: %d \n‛,mp[i].age);
    printf(‚\n-----------------------------------‛);
    printf(‚\n수정할데이터를선택하세요: ‛);
    scanf(‚%d‛,&sel);

    switch(sel){
        case 1 :
            while(1){
                fflush(stdin);
                printf(‚\n이름: ‛);
                gets(mp[i].name);

                if ( strlen(mp[i].name) > 0) break;

                printf(‚\n이름을입력하세요‛);
            }
        break;
        }
}  
6. 데이터 삭제

PHONE* deletePhone(PHONE* mp, int dn, int* cn) 
{
    int i,cnt;
    cnt = *cn;

    for(i=dn;i < cnt-1;i++) mp[i] = mp[i=1];

    *cn = cnt-1;
    return mp;
}
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/09   »
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
글 보관함