#ifndef __NameCard_H__
#define __NameCard_H__
#define NAME_LEN 30
#define PHONE_LEN 30
typedef struct __namecard
{
char name[NAME_LEN];
char phone[PHONE_LEN];
} NameCard;
// NameCard 구조체 변수의 동적 할당 및 초기화 후 주소 값 반환
NameCard *MakeNameCard(const char *name, const char *phone);
// NameCard 구조체 변수의 정보 출력
void ShowNameCardInfo(NameCard *pcard);
// 이름이 같으면 0, 다르면 0이 아닌 값 반환
int NameCompare(NameCard *pcard, const char *name);
// 전화번호 정보 변경
void ChangePhoneNum(NameCard *pcard, const char *phone);
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "NameCard.h"
NameCard *MakeNameCard(const char *name, const char *phone)
{
NameCard *pcard = (NameCard *)malloc(sizeof(NameCard));
// 아래 주석처리 된 코드는 에러 발생
// *pcard->name = &name;
// *pcard->phone = ☎
strcpy(pcard->name, name);
strcpy(pcard->phone, phone);
return pcard;
}
void ShowNameCardInfo(NameCard *pcard)
{
printf("이름 : %s \n", pcard->name);
printf("번호 : %s \n", pcard->phone);
}
int NameCompare(NameCard *pcard, const char *name)
{
// 아래 주석처리 된 코드는 에러는 발생하지 않지만 제대로 동작하지 않음
// if (pcard->name == name)
// {
// return 0;
// }
// else
// {
// return -1;
// }
return strcmp(pcard->name, name);
}
void ChangePhoneNum(NameCard *pcard, const char *phone)
{
strcpy(pcard->phone, phone);
}
위 소스파일에서 주석처리된 부분은 처음에 작성했었던 코드
저대로 실행하면 제대로 동작하지 않음
#include <stdio.h>
#include <stdlib.h>
#include "NameCard.h"
#include "ArrayList.h"
int main()
{
List list;
NameCard *pcard;
ListInit(&list);
pcard = MakeNameCard("짱구", "010-1111-1111");
LInsert(&list, pcard);
pcard = MakeNameCard("맹구", "010-2222-2222");
LInsert(&list, pcard);
pcard = MakeNameCard("철수", "010-3333-3333");
LInsert(&list, pcard);
printf("현재 데이터 수 : %d \n\n", LCount(&list));
printf("전체 데이터 \n");
if (LFirst(&list, &pcard))
{
ShowNameCardInfo(pcard);
while (LNext(&list, &pcard))
{
ShowNameCardInfo(pcard);
}
}
printf("\n\n");
// 특정 이름 대상으로 탐색 진행, 그 사람의 정보 출력
// 짱구 탐색, 정보 출력
if (LFirst(&list, &pcard))
{
if (NameCompare(pcard, "짱구") == 0)
{
ShowNameCardInfo(pcard);
}
else
{
while (LNext(&list, &pcard))
{
if (NameCompare(pcard, "짱구") == 0)
{
ShowNameCardInfo(pcard);
break;
}
}
}
}
printf("\n");
// 특정 이름 대상으로 탐색 진행, 그 사람의 전화번호 정보 변경
// 맹구 탐색, 맹구 전화번호 "010-7777-7777"로 변경
if (LFirst(&list, &pcard))
{
if (NameCompare(pcard, "맹구") == 0)
{
ChangePhoneNum(pcard, "010-7777-7777");
ShowNameCardInfo(pcard);
}
while (LNext(&list, &pcard))
{
if (NameCompare(pcard, "맹구") == 0)
{
ChangePhoneNum(pcard, "010-7777-7777");
ShowNameCardInfo(pcard);
}
}
}
printf("\n");
// 특정 이름 대상으로 탐색 진행, 그 사람의 정보 삭제
// 철수 탐색, 철수 삭제
if (LFirst(&list, &pcard))
{
if (NameCompare(pcard, "철수") == 0)
{
pcard = LRemove(&list);
free(pcard);
}
else
{
while (LNext(&list, &pcard))
{
if (NameCompare(pcard, "철수") == 0)
{
pcard = LRemove(&list);
free(pcard);
}
}
}
}
printf("\n");
printf("현재 데이터 수 : %d \n", LCount(&list));
printf("모든 데이터 출력 \n");
if (LFirst(&list, &pcard))
{
ShowNameCardInfo(pcard);
while (LNext(&list, &pcard))
{
ShowNameCardInfo(pcard);
}
}
printf("\n\n");
return 0;
}
현재 데이터 수 : 3
전체 데이터
이름 : 짱구
번호 : 010-1111-1111
이름 : 맹구
번호 : 010-2222-2222
이름 : 철수
번호 : 010-3333-3333
이름 : 짱구
번호 : 010-1111-1111
이름 : 맹구
번호 : 010-7777-7777
현재 데이터 수 : 2
모든 데이터 출력
이름 : 짱구
번호 : 010-1111-1111
이름 : 맹구
번호 : 010-7777-7777