#include
#include
void PrintMenu();//메뉴
void InsertDB();//등록
void SearchDB();//검색
void PrintDB();//출력
void DeleteDB();//종료
int find(char n[]);//문자열 검색 함수
int in;
#define DB_SIZE 100
#define NAME_LEN 20
#define TEL_LEN 20
#define ADDR_LEN 30
char name[DB_SIZE][NAME_LEN];
char phone[DB_SIZE][TEL_LEN];
char address[DB_SIZE][ADDR_LEN];
int main()
{
PrintMenu();//메뉴
return 0;
}
void PrintMenu()
{
int n;
while (1)//무한반복
{
printf("---------Menu--------\n");
printf(" 1. 등록 \n");
printf(" 2. 삭제 \n");
printf(" 3. 검색 \n");
printf(" 4. 출력 \n");
printf(" 5. 종료 \n");
printf("---------------------\n");
printf("Choose the item : ");
scanf("%d", &n);
printf("\n");
getchar();
if (1 <= n && n <= 5)
{
switch (n)
{
case 1:
InsertDB();//등록
break;
case 2:
DeleteDB();//삭제
break;
case 3:
SearchDB();//검색
break;
case 4:
PrintDB();//출력
break;
case 5:
return;//종료
break;
}
}
else
{
getchar();
printf("다시 입력하세요[1-5]\n");
}
}
}
void InsertDB()
{
char n[DB_SIZE][NAME_LEN], p[DB_SIZE][TEL_LEN], a[DB_SIZE][ADDR_LEN];
printf("[ INSERT ]\n");
in++;
printf("Input Name : ");
gets(n);
strcpy(name[in], n);//입력된 이름을 저장
printf("Input Tel Number : ");
gets(p);
strcpy(phone[in], p);//입력된 전화번호를 저
printf("Input Address : ");
gets(a);
strcpy(address[in], a);//입력된 주소를 저장
printf("--------> Data inserted......\n\n");
}
void DeleteDB()
{
char n[DB_SIZE][NAME_LEN], r;
int i;
printf("[ Remove ]\n");
printf("Input Name for Removing : ");
scanf("%s", n);
r = find(n);
if (-1 == r)
{
printf("No Data Found\n\n");
return;
}
for (i = r; i < in - 1; i++)
{
strcpy(name[i], name[i + 1]);
strcpy(phone[i], phone[i + 1]);
strcpy(address[i], address[i + 1]);
}
in--;
printf("-------> Complete deleting the phone data......\n\n");
}
void SearchDB()
{
int i;
char n[DB_SIZE][NAME_LEN];
if (in > 0){
printf("Input Name: ");
scanf("%s", n);
for (i = 0; i <= in; i++){
if (!strcmp(name[i], n)){
printf("---> Name : %-20s / Tel : %-20s / Address : %s \n", name[i], phone[i], address[i]);
return;
}
}
printf("No Data Found \n\n");
return 0;
}
else{
printf("No Data Found \n\n");
return 0;
}
}
int find(char n[])
{
int f;
for (f = 1; f <= DB_SIZE; f++)
{
if (!strcmp(name[f], n))
{
return f;
}
}
return -1;
}
void PrintDB()
{
int i;
printf("[ Print All Data ]\n");
if (in == 0)
{
printf("No Data Inserted.\n\n");
return;
}
for (i = 1; i <= in; i++)
{
printf("Name : %-20s / Tel : %-20s / Address : %s \n", name[i], phone[i], address[i]);
}
printf ("\n");
}
DeleteDB함수보면
{
strcpy(name[i], name[i + 1]);
strcpy(phone[i], phone[i + 1]);
strcpy(address[i], address[i + 1]);
}
이부분밑에
strcpy(name[i], "");
strcpy(phone[i], "");
strcpy(address[i],"");
추가하니까 되는데
배열i자리에 있던걸 이미i+1로 옮겼으면 i부분을 NULL로 만들필요 없는거 아니야?
된건 좋은데 왜 되는지 아는게 더 중요할거같다
#include
void PrintMenu();//메뉴
void InsertDB();//등록
void SearchDB();//검색
void PrintDB();//출력
void DeleteDB();//종료
int find(char n[]);//문자열 검색 함수
int in;
#define DB_SIZE 100
#define NAME_LEN 20
#define TEL_LEN 20
#define ADDR_LEN 30
char name[DB_SIZE][NAME_LEN];
char phone[DB_SIZE][TEL_LEN];
char address[DB_SIZE][ADDR_LEN];
int main()
{
PrintMenu();//메뉴
return 0;
}
void PrintMenu()
{
int n;
while (1)//무한반복
{
printf("---------Menu--------\n");
printf(" 1. 등록 \n");
printf(" 2. 삭제 \n");
printf(" 3. 검색 \n");
printf(" 4. 출력 \n");
printf(" 5. 종료 \n");
printf("---------------------\n");
printf("Choose the item : ");
scanf("%d", &n);
printf("\n");
getchar();
if (1 <= n && n <= 5)
{
switch (n)
{
case 1:
InsertDB();//등록
break;
case 2:
DeleteDB();//삭제
break;
case 3:
SearchDB();//검색
break;
case 4:
PrintDB();//출력
break;
case 5:
return;//종료
break;
}
}
else
{
getchar();
printf("다시 입력하세요[1-5]\n");
}
}
}
void InsertDB()
{
char n[DB_SIZE][NAME_LEN], p[DB_SIZE][TEL_LEN], a[DB_SIZE][ADDR_LEN];
printf("[ INSERT ]\n");
in++;
printf("Input Name : ");
gets(n);
strcpy(name[in], n);//입력된 이름을 저장
printf("Input Tel Number : ");
gets(p);
strcpy(phone[in], p);//입력된 전화번호를 저
printf("Input Address : ");
gets(a);
strcpy(address[in], a);//입력된 주소를 저장
printf("--------> Data inserted......\n\n");
}
void DeleteDB()
{
char n[DB_SIZE][NAME_LEN], r;
int i;
printf("[ Remove ]\n");
printf("Input Name for Removing : ");
scanf("%s", n);
r = find(n);
if (-1 == r)
{
printf("No Data Found\n\n");
return;
}
for (i = r; i < in - 1; i++)
{
strcpy(name[i], name[i + 1]);
strcpy(phone[i], phone[i + 1]);
strcpy(address[i], address[i + 1]);
}
in--;
printf("-------> Complete deleting the phone data......\n\n");
}
void SearchDB()
{
int i;
char n[DB_SIZE][NAME_LEN];
if (in > 0){
printf("Input Name: ");
scanf("%s", n);
for (i = 0; i <= in; i++){
if (!strcmp(name[i], n)){
printf("---> Name : %-20s / Tel : %-20s / Address : %s \n", name[i], phone[i], address[i]);
return;
}
}
printf("No Data Found \n\n");
return 0;
}
else{
printf("No Data Found \n\n");
return 0;
}
}
int find(char n[])
{
int f;
for (f = 1; f <= DB_SIZE; f++)
{
if (!strcmp(name[f], n))
{
return f;
}
}
return -1;
}
void PrintDB()
{
int i;
printf("[ Print All Data ]\n");
if (in == 0)
{
printf("No Data Inserted.\n\n");
return;
}
for (i = 1; i <= in; i++)
{
printf("Name : %-20s / Tel : %-20s / Address : %s \n", name[i], phone[i], address[i]);
}
printf ("\n");
}
DeleteDB함수보면
{
strcpy(name[i], name[i + 1]);
strcpy(phone[i], phone[i + 1]);
strcpy(address[i], address[i + 1]);
}
이부분밑에
strcpy(name[i], "");
strcpy(phone[i], "");
strcpy(address[i],"");
추가하니까 되는데
배열i자리에 있던걸 이미i+1로 옮겼으면 i부분을 NULL로 만들필요 없는거 아니야?
된건 좋은데 왜 되는지 아는게 더 중요할거같다
값이 대입되는거지 옮겨진게 아니라