※ 프로그램 설명 및 주의사항
- ChoiBoYunB.exe 실행파일과 input.txt 파일은 반드시 같은 폴더 안에 있어야 합니다.
- input.txt 파일이 존재해야 되고 입력 형식은 반드시 아래와 같아야 합니다.
- ChoiBoYun, 01012345678, Seoul Gangnam Gaepo
- Delete, Searching은 Insert로 추가 데이타를 삽입한 후에 실행해야 합니다.
- 메뉴 1~6중 한가지를 실행한 뒤 다른 메뉴를 다시 Cellular Phone Program에서 선택
하려면 <Enter>키를 눌러야 합니다.
① Insert : 추가 데이타 삽입
② Delete : 추가로 삽입한 데이타 삭제
③ Display : 최초 입력 파일인 input.txt 파일과 추가로 삽입한 데이타 모두 보기
④ Searching : 추가로 입력된 데이타 검색
⑤ Count : input.txt 에 저장된 모든 사람의 수
( input.txt파일을 변경하고 실행하면 변경내용을 반영해 사람 수 계산
⑥ Exit : 종료
2. 숫자3을 입력시 나타나는 화면입니다.
( 최초리스트 생성 파일인 input.txt 파일을 읽어오기 위해서 )
4. input.txt파일을 변경한 후 Display와 Count를 실행해보기 위해 우선 input.txt파일을 아래와 같이 변경합니다. ( 2개 데이타를 추가하였습니다. )
Alice, 01355871215, ChungChung JinChun Sayang
JungYang, 01112314479, Jeju Jeju Segupo
5. 숫자3을 입력시 나타나는 화면 두번째 입니다.
( 최초리스트 생성 파일인 input.txt 파일의 변경된 내용을 읽어오기 위해서 )
6. 숫자5를 입력시 나타나는 화면 두번째 입니다.
7. 숫자1을 입력시 나타나는 화면입니다. ( 추가 데이터를 삽입하기 위해서 )
- 아래와같이 SoRyun, 01000127830, Seoul Guro A 를 입력합니다.
8. 숫자3을 입력시 나타나는 화면 세번째 입니다.
( input.txt 파일과 추가로 삽입한 데이타를 모두 보기 위해서 )
9. 숫자1을 입력하여 1개의 데이타를 더 추가하였습니다.
10. 숫자4를 입력시 나타나는 화면입니다. ( 추가로 입력된 데이터를 검색하기 위해서 )
- 이름으로 검색하기 위해서 검색방법 선택에 숫자1을 입력, 검색할 내용 입력에
SoRyun 을 입력 -> SoRyun의 정보를 보여줌 ( 이름, 전화번호, 주소 )
11. 숫자4를 입력시 나타나는 화면입니다. ( 추가로 입력된 데이터를 검색하기 위해서 )
- 전화번호로 검색하기 위해서 검색방법 선택에 숫자2를 입력, 검색할 내용 입력에
01045444576을 입력 -> YeWon 의 정보를 보여줌 ( 이름, 전화번호, 주소 )
12. 숫자2를 입력합니다. ( 데이터를 삭제하기 위해서 ) - YeWon 을 삭제
숫자2를 입력시 나타나는 화면 -> 삭제한 YeWon 의 정보를 보여줌
13. 숫자3을 입력시 나타나는 화면 네번째 입니다.
( input.txt 파일과 삽입, 삭제한 데이타를 모두 보기 위해서 )
- 위에서 삭제했듯이 YeWon, 01045444576, Seoul Songpa Jamsil 이 삭제된 것을
15. 숫자8을 입력시 나타나는 화면입니다.
* 프로그램 소스 및 소스 설명
// 파일 삽입을 위해 #include라는 전처리기 지시자 사용
#include <stdio.h> // printf, scanf를 사용하기 위해서 사용하는 헤더파일
#include <string.h> // strcpy함수를 정의, 문자 관련 명령을 사용하기 위해 사용하는 헤더파일
#include <stdlib.h> // exit() atoi() rand() srand() system()등을 사용하기 위해 사용하는 헤더파일
#include <conio.h> // 텍스트화면을 처리하기 위해 사용하는 헤더파일
// 기호 상수를 정의하기 위해 사용
#define PHONE_SIZE 15
#define ADDRESS1_SIZE 30
#define ADDRESS2_SIZE 30
#define ADDRESS3_SIZE 30
{
char name[NAME_SIZE]; // name의 크기는 20
char phone[PHONE_SIZE]; // phone의 크기는 15
char address1[ADDRESS1_SIZE]; // address1의 크기는 30
char address2[ADDRESS2_SIZE]; // address2의 크기는 30
char address3[ADDRESS3_SIZE]; // address3의 크기는 30
char text[50]; // text의 크기는 50
FILE *file_ptr; // 파일을 열기 위한 파일 포인터 file_ptr를 선언
}telnode;
/* 링크드 리스트인 link_node 구조체 */
typedef struct link_node
{
telnode item;
struct link_node *next;
};
{
telnode *head; // 헤드 포인터
int length; // 노드의 개수
} LinkedListType;
/* 구조체에 대한 typedef형을 정의하고 포인터를 사용해서 가리킨다. */
typedef struct link_node Pbook;
typedef struct link_node *Plink;
void insert(telnode temp, Plink *head_node) // 데이타를 삽입하는 함수
{
Plink temp_node=*head_node;
Plink New_node;
/* 첫번째 요소를 추가한다. */
New_node = (Plink) malloc(sizeof(Pbook)); // malloc() : 원하는 만큼의 메모리를 할당하여 그에대한 포인터는 반환
New_node->item=temp;
New_node->next=NULL;
{
while(temp_node->next)
temp_node=temp_node->next;
temp_node->next=New_node;
}
else
*head_node=New_node;
}
{
Plink temp=*head_node;
Plink deltemp=temp->next;
telnode temp_node;
if(!head_node)
{
printf("\n [ 입력된 자료가 없습니다! ]\n"); // 에러 제어 코드 ( 입력된 자료가 없을때 )
exit(1);
}
else
{
if(strcmp(temp->item.name, name)==0)
{
temp_node=temp->item;
*head_node=deltemp;
free(temp);
return temp_node;
}
else
{
while(deltemp)
{
if(strcmp(deltemp->item.name, name)==0)
{
temp_node = deltemp->item;
temp->next=deltemp->next;
free(deltemp);
return temp_node;
}
else
{
temp=deltemp;
deltemp=deltemp->next;
}
}
}
}
printf("\n [ 입력된 데이타를 찾을 수가 없습니다! ]\n"); // 에러 제어 코드 ( 없는 데이타 검색시 )
printf("\n [ input파일이 아닌 추가로 입력한 데이타를 적어주세요! ]\n");
strcpy(temp_node.name,"error"); // 에러 제어 코드
strcpy(temp_node.phone,"error"); // 에러 제어 코드
strcpy(temp_node.address1,"error"); // 에러 제어 코드
strcpy(temp_node.address2,"error"); // 에러 제어 코드
strcpy(temp_node.address3,"error"); // 에러 제어 코드
}
{
char text[50]; // 읽기를 할 내용을 넣을 메모리 변수
FILE *file_ptr; // 파일을 열기 위한 파일 포인터 file_ptr를 선언
file_ptr = fopen("input.txt", "r");
/* input.txt라는 파일명을 사용하기 위해 파일을 open함. 파일을 읽기 위해 “r"을 사용함. 자료가 입력되어 있는 input.txt파일이 존재하면 그 자료를 대상으로 각 함수를 실행함. */
while(fgets(text, 50, file_ptr) != NULL)
{
printf("\n %s", text); // 화면 출력
}
while(temp) {
printf("\n\n %s, %s, %s %s %s\n", temp->item.name, temp->item.phone, temp->item.address1, temp->item.address2, temp->item.address3);
temp=temp->next;
}
fclose(file_ptr); // open한 파일을 닫을 때 사용
}
{
Plink temp=*head_node;
if(!head_node)
{
printf("\n [ 입력된 데이타가 없습니다! ]\n"); // 에러 제어 코드 ( 입력된 데이타가 부재시 )
exit(1);
}
else
{
if(stype==1) // stype=1 이면 이름
{
while(temp)
{
if(strcmp(temp->item.name, sdata)==0)
{
printf("\n [ 검색된 데이타 ]\n 이름 : %s, 전화번호 : %s, 주소 : %s %s %s\n", temp->item.name, temp->item.phone, temp->item.address1, temp->item.address2, temp->item.address3);
return;
}
temp=temp->next;
}
printf("\n [ 입력한 이름과 일치하는 데이타를 찾을 수 없습니다! ]\n");
printf("\n [ input파일이 아닌 추가로 입력한 데이타를 적어주세요! ]\n");
}
else if(stype==2) // stype=2이면 전화번호
{
temp=*head_node;
while(temp)
{
if(strcmp(temp->item.phone, sdata)==0)
{
printf("\n [ 검색된 데이타 ]\n 이름 : %s, 전화번호 : %s, 주소 : %s %s %s\n", temp->item.name, temp->item.phone, temp->item.address1, temp->item.address2, temp->item.address3);
return;
}
temp=temp->next;
}
printf("\n [ 입력한 전화번호와 일치하는 데이타를 찾을 수 없습니다! ]\n");
printf("\n [ input파일이 아닌 추가로 입력한 데이타를 적어주세요! ]\n");
}
}
}
{
int iLines=0;
char text[50];
char *cTemp;
{
cTemp=fgets(text,50,file_ptr);
if(cTemp==0) //읽은 줄이 파일의 끝이라면 루프탈출
iLines++;
return iLines;
}
{
int stype;
int iCustCounts=0; //총 저장된 사람의 수
char sdata[15];
char c;
char text[50];
FILE *file_ptr;
switch(select)
{
case 1: // 구분값이 1이면 추가로 데이타를 삽입
printf("\n【 이름 입력 (※ 띄어쓰지 말고 ChoiBoYun처럼 입력)】: ");
printf("\n ☞ ");
scanf("%s", &temp.name);
printf("\n【 전화번호 입력 (※ 띄어쓰지 말고 01012345678처럼 입력)】: ");
printf("\n ☞ ");
scanf("%s", &temp.phone);
printf("\n【 주소 입력 (※ 시,구,동을 띄어쓰기로 Seoul GwangJin Jayang처럼 모두 입력)】: ");
printf("\n ☞ ");
scanf("%s %s %s", &temp.address1, &temp.address2, &temp.address3);
insert(temp, A);
printf("\n ▷ 입력 완료 ◁ \n");
printf("\n ※ Cellular Phone Program에서 메뉴를 선택하려면 <Enter>키를 눌러주세요! \n");
c = getch(); //읽은 결과를 보여주고 사용자 키 대기
break;
case 2: // 구분값이 2이면 추가로 삽입한 데이타 삭제
printf("\n【 삭제할 이름 입력 】: ");
scanf("%s", &sdata);
temp=delete_list(sdata, A);
printf("\n [ 삭제한 데이타 ] : ");
printf("\n [ 이름 : %s ] ", temp.name);
printf("\n [ 전화번호 : %s ] ", temp.phone);
printf("\n [ 주소 : %s %s %s ] ", temp.address1, temp.address2, temp.address3);
printf("\n ※ Cellular Phone Program에서 메뉴를 선택하려면 <Enter>키를 눌러주세요! \n");
c = getch();
break;
case 3: // 구분값이 3이면 모든 데이타 출력
display_list(A, A);
printf("\n ※ Cellular Phone Program에서 메뉴를 선택하려면 <Enter>키를 눌러주세요! \n");
c = getch();
break;
case 4: // 구분값이 4이면 추가로 입력된 데이타 검색
printf("\n【 검색 방법 선택 ☞ 1. 이름 2. 전화번호 】: ");
scanf("%d", &stype);
printf("\n【 검색할 내용 입력 】: ");
scanf("%s", &sdata);
searching_data(stype, sdata, A);
printf("\n ※ Cellular Phone Program에서 메뉴를 선택하려면 <Enter>키를 눌러주세요! \n");
c = getch();
break;
case 5: // 구분값이 5이면 input.txt에 총 저장된 사람수 계산
file_ptr = fopen("input.txt", "r"); // 파일을 open함.
if(file_ptr != NULL)
{
iCustCounts = GetFileLines(file_ptr); //총 저장된 사람수 구하는 함수 호출
while(fgets(text, 150, file_ptr) != NULL)
{
printf(" %s", text);
printf("\n");
}
printf("\n【 총 저장된 사람수는 %d 명 입니다. 】\n",iCustCounts);
printf("\n ※ Cellular Phone Program에서 메뉴를 선택하려면 <Enter>키를 눌러주세요! \n\n");
system("Pause");
fclose(file_ptr); // open한 파일을 닫을 때 사용
break;
}
case 6: // 구분값이 6이면 종료
printf("\n【 프로그램 종료 】\n");
exit(0);
break;
default : // 구분값이 1~6 사이가 아닌 다른 숫자이면 에러 제어 코드 ( 1~6 중에서 사용 )
printf("\n ※ 잘못 선택하셨습니다!!(1~6번 중에서 선택해 주세요!) \n");
printf("\n ※ Cellular Phone Program에서 메뉴를 선택하려면 <Enter>키를 눌러주세요! \n");
c = getch();
break;
}
}
{
Plink A=NULL;
int select;
while(select !=6)
{
printf("\n ◈ 나만의 전화번호부 ◈ by Google Knol's 최보윤 \n\n");
printf("┏━━━━━━━━━━━━ Cellular Phone Program ━━━━━━━━━━━━┓\n");
printf("┃ 1. Insert 2. Delete 3. Display 4. Searching 5. Count 6. Exit ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf(" \n【 위 프로그램 설명 】\n");
printf(" 1 : 추가 데이타 삽입, 2 : 추가로 삽입한 데이타 삭제, 3 : 모든 데이타 보기\n");
printf(" 4 : 추가로 입력된 데이타 검색, 5 : input.txt에 총 저장된 사람수, 6 : 종료\n");
printf("\n【 Cellular Phone Program에서 메뉴를 선택해주세요! ※1~6중에서 선택 】\n");
printf("\n ☞ ");
scanf("%d", &select);
menu(select, &A);
}
이상입니다.
자세한 설명을 드리려고 노력했는데 도움이 되셨으면 좋겠습니다.
그럼, 각자 자신만의 전화번호부를 만들어서 사용해 보시길 바랍니다.
'프로필 > 공모전 출품작 및 수상작' 카테고리의 다른 글
제2회 요플래시 공모전 1등 수상작 (4) | 2012.06.02 |
---|---|
오로라월드 뻔뻔한 샤르르 UCC 공모전 출품작 (13) | 2008.12.31 |
개성 넘치는 나만의 쏘울 콘테스트 참가상 수상작 (0) | 2008.12.20 |
제니스웰 로고 디자인 페스티벌 출품작 (2) | 2008.12.08 |
강원도 완전 정복 UCC 공모전 출품작 (0) | 2008.12.01 |
세종대학교 New UI 월페이퍼공모전 출품작 (2) | 2008.09.13 |
루트로닉 당당한 피부 UCC 공모전 참가상 수상작 (1) | 2008.09.13 |
2008 안철수 연구소 사진 및 광고 디자인 공모전 출품작 (1) | 2008.09.01 |
타블렛 상품~♡ (0) | 2008.06.24 |
제3회 린나이 대학생 광고 공모전 출품작 (0) | 2008.05.15 |