저번 글에서 만들었던 파일 입출력을 이용한 전화번호부에 이전에 계산기 예제를 이용해 가르쳤던 모듈화 프로그래밍을 적용 했다.
main.h
#include <stdio.h>
#include <string.h>
#define _CRT_SECURE_NO_WARNINGS
#ifndef CONTACT_DATA
typedef struct _CONTACT_DATA {
char name[20];
char pnum[30];
char address[1024];
int menu;
} C_DATA;
#endif
void filesave(C_DATA *data);
void fileload();
void inputinfo();
void filesearch();
void filemodify();
db.h
#include "main.h"
void filesave(C_DATA *data)
{
FILE *fp = fopen("contact.dll", "a");
fprintf(fp, "%s %s %s\n", data->name, data->pnum, data->address);
fclose(fp);
}
void fileload()
{
char strTemp[255];
char *pStr;
int count = 0;
C_DATA data2[200];
FILE *fp = fopen("contact.dll", "r");
if (fp != NULL)
{
while (!feof(fp))
{
fscanf(fp, "%s %s %[^\n]\n", data2[count].name, data2[count].pnum, data2[count].address);
printf("%s %s %s\n", data2[count].name, data2[count].pnum, data2[count].address);
count++;
}
}
else {}
fclose(fp);
}
void inputinfo()
{
C_DATA data1;
getchar();
printf("Name: ");
scanf("%[^\n]s", data1.name);
printf("H.P: ");
scanf("%s", data1.pnum);
getchar();
printf("Address: ");
scanf("%[^\n]", data1.address);
filesave(data1.name, data1.pnum, data1.address);
}
void filesearch()
{
int count = 0;
char type[20];
C_DATA data2[200];
FILE *fp = fopen("contact.dll", "r");
while (!feof(fp))
{
fscanf(fp, "%s %s %[^\n]", data2[count].name, data2[count].pnum, data2[count].address);
count++;
}
scanf("%s", type);
for (int i = 0; i < count; i++)
{
if (strcmp(data2[i].name, type) == 0)
{
printf("%s %s %s\n", data2[i].name, data2[i].pnum, data2[i].address);
}
}
}
void filemodify()
{
int count = 0;
char type[20], chname[30], chpnum[30], chaddress[1024];
C_DATA data2[200];
FILE *fp = fopen("contact.dll", "r");
FILE *fp2 = fopen("contact_ex.dat", "a");
while (!feof(fp))
{
fscanf(fp, "%s %s %[^\n]", data2[count].name, data2[count].pnum, data2[count].address);
count++;
}
scanf("%s", type);
for (int i = 0; i < count; i++)
{
if (strcmp(data2[i].name, type) == 0)
{
printf("%s %s %s\n", data2[i].name, data2[i].pnum, data2[i].address);
printf("input new name: ");
scanf("%s", chname);
strcpy(data2[i].name, chname);
printf("input new H.P: ");
scanf("%s", chpnum);
strcpy(data2[i].pnum, chpnum);
printf("input new address: ");
scanf("%[^\n]", chaddress);
strcpy(data2[i].pnum, chpnum);
}
}
for (int i = 0; i <= count; i++)
{
fprintf(fp2, "%s %s %s\n", data2[i].name, data2[i].pnum, data2[i].address);
}
fclose(fp);
fclose(fp2);
remove("contact.dll");
rename("contact_ex.dat", "contact.dll");
}
main.c
#include "db.h"
int main()
{
while (1)
{
int menu;
printf("1. Add contact 2. View Contact 3. Search 4. Quit\n");
scanf("%d", &menu);
if (menu == 5) { break; }
switch (menu)
{
case 1:
{
inputinfo();
break;
}
case 2:
{
fileload();
break;
}
case 3:
{
printf("이름 : ");
filesearch();
break;
}
case 4:
{
filemodify();
}
}
}
return 0;
}