-
주소록 관리 시스템
학습내용 학습목표 ▪ 프로그램 설계
▪ 코드 분석▪ 목표로 하는 시스템에서 요구되는 자료구조를 설계할 수 있다.
▪ 사용 가능한 라이브러리 함수를 개발에 적용할 수 있다.프로그램 설계
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
'Blog > JAVA기반 스마트웹 개발2021' 카테고리의 다른 글
프로그래밍 언어 활용 part 2 - 게임 프로젝트 (0) 2021.08.10 프로그래밍 언어 활용 part 2 - 변환·랜덤 라이브러리 (0) 2021.08.10 프로그래밍 언어 활용 part 2 - 시간 관련 라이브러리 (0) 2021.08.10 프로그래밍 언어 활용 part 2 - 도서관리 시스템 고도화(파일 처리) (0) 2021.08.09 프로그래밍 언어 활용 part 2 - 파일 입출력 라이브러리(응용) (0) 2021.08.09 댓글