Blog/JAVA기반 스마트웹 개발2021

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

고구마달랭이 2021. 8. 10. 09:28

주소록 관리 시스템

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

프로그램 설계

 

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