• 프로그래밍 언어 활용 part 2 - 주소록 관리 시스템

    2021. 8. 10.

    by. 고구마달랭이

    주소록 관리 시스템

    학습내용 학습목표
    ▪ 프로그램 설계
    ▪ 코드 분석
    ▪ 목표로 하는 시스템에서 요구되는 자료구조를 설계할 수 있다.
    ▪ 사용 가능한 라이브러리 함수를 개발에 적용할 수 있다.

    프로그램 설계

     

    1. 프로그램 개요

    ☞ 주소록 관리를 위하여 파일에 보관되며 검색 ∙ 수정 ∙ 삭제가 가능한 시스템 구현

    ☞ 유효성 검사기능 추가

    ☞ 프로그램 구현 시 처리 대상 자료 

    • 이름  • 생년월일  • 주소  • 나이  • 전화번호

     

    2. 기능 정의

    [1] 메뉴

     

    [2] 기능

    ☞ 주소록 입력

    ☞ 주소록 출력

    ☞ 주소록 검색

    ☞ 나이 자동계산

     

    [3] 요구사항

    ☞ 메뉴 방식으로 작업 선택

    ☞ 보안을 위하여 이진 파일로 데이터 저장

    ☞ 출생연도 입력 시 나이 계산 자동으로 입력

    ☞ 이름순 전체 출력

    ☞ 이름 검색 후 출력, 수정, 삭제

     

     

    3. 자료구조 정의

     


     

    코드 분석


    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;
    }

     

     


     

     

    학습정리

     

    1. 프로그램 설계

    ▪ 유효성 검사를 위하여 다양한 라이브러리 함수를 사용할 수 있음

    프로그램의 기능 수행을 위한 요구분석을 주의 깊게 수행해야 함

    현재 시간 등을 반홖하는 함수로 time 함수를 이용할 수 있음

    이진파일의 입출력은 fread, fwrite를 이용한다 있음

     

    2. 코드 분석

    ▪ 검색 문자의 위치를 찾을 수 있는 함수: strchr

    ▪ 문자열의 길이를 반홖하는 함수 : strlen

    ▪ 현재 시간 정보를 얻을 수 있는 함수 : time

    이진 파일의 읽기와 쓰기에 이용하는 함수 : fread, fwrite

     

     

     

    댓글