Native/C
구조체 배열 파일로 저장하기
aucd29
2013. 10. 2. 18:48
[code]
#include <Turboc.h>
void WriteFriend();
void ReadFriend();
struct tag_Friend {
char Name[10];
int Age;
double Height;
};
tag_Friend Friends[256]={
{"성락동", 30, 178.2 },
{"조명현", 19, 169.8 },
{"조성현", 26, 176.5 },
{"박제현", 58, 172.3 },
{"", 0, 0 },
};
struct tag_Header {
char desc[32];
int ver;
int num;
};
int Num=4;
void main()
{
int sel,i;
for (;;) {
gotoxy(15,20);
printf("선택 (1:보기, 2:저장, 3:몽땅 삭제, 4:읽기, 9:종료 ) ");
sel=getch();
clrscr();
switch (sel) {
case '1':
for (i=0;i<Num;i++) {
gotoxy(2,2+i);
printf("이름:%s, 나이:%d, 키:%.1f\n",
Friends[i].Name,Friends[i].Age,Friends[i].Height);
}
puts("\n 출력 완료.");
break;
case '2':
WriteFriend();
break;
case '3':
memset(Friends,0,sizeof(Friends));
Num=0;
puts("\n\n 모든 레코드를 삭제했습니다.");
break;
case '4':
ReadFriend();
break;
case '9':
exit(0);
}
}
}
// 구조체 배열을 파일로 저장하기
void WriteFriend()
{
FILE *f;
tag_Header H;
gotoxy(5,5);
f=fopen("c:\\Friend.dat","wb");
if (f == NULL) {
puts("파일을 생성할 수 없습니다.");
} else {
strcpy(H.desc,"친구목록");
H.ver=100;
H.num=Num;
fwrite(&H,sizeof(tag_Header),1,f);
fwrite(Friends,sizeof(tag_Friend),Num,f);
fclose(f);
puts("파일을 저장했습니다.");
}
}
// 파일로부터 구조체 배열 읽어오기
void ReadFriend()
{
FILE *f=NULL;
tag_Header H;
gotoxy(5,5);
f=fopen("c:\\Friend.dat","rb");
if (f == NULL) {
puts("파일을 열 수 없습니다.");
} else {
memset(Friends,0,sizeof(Friends));
fread(&H,sizeof(tag_Header),1,f);
if (strcmp(H.desc,"친구목록") != 0) {
puts("주소록 파일이 아닙니다.");
goto end;
}
if (H.ver != 100) {
puts("버전이 틀립니다.");
goto end;
}
Num=H.num;
fread(Friends,sizeof(tag_Friend),Num,f);
puts("파일을 읽었습니다.");
}
end:
if (f)
fclose(f);
}
[/code]
#include <Turboc.h>
void WriteFriend();
void ReadFriend();
struct tag_Friend {
char Name[10];
int Age;
double Height;
};
tag_Friend Friends[256]={
{"성락동", 30, 178.2 },
{"조명현", 19, 169.8 },
{"조성현", 26, 176.5 },
{"박제현", 58, 172.3 },
{"", 0, 0 },
};
struct tag_Header {
char desc[32];
int ver;
int num;
};
int Num=4;
void main()
{
int sel,i;
for (;;) {
gotoxy(15,20);
printf("선택 (1:보기, 2:저장, 3:몽땅 삭제, 4:읽기, 9:종료 ) ");
sel=getch();
clrscr();
switch (sel) {
case '1':
for (i=0;i<Num;i++) {
gotoxy(2,2+i);
printf("이름:%s, 나이:%d, 키:%.1f\n",
Friends[i].Name,Friends[i].Age,Friends[i].Height);
}
puts("\n 출력 완료.");
break;
case '2':
WriteFriend();
break;
case '3':
memset(Friends,0,sizeof(Friends));
Num=0;
puts("\n\n 모든 레코드를 삭제했습니다.");
break;
case '4':
ReadFriend();
break;
case '9':
exit(0);
}
}
}
// 구조체 배열을 파일로 저장하기
void WriteFriend()
{
FILE *f;
tag_Header H;
gotoxy(5,5);
f=fopen("c:\\Friend.dat","wb");
if (f == NULL) {
puts("파일을 생성할 수 없습니다.");
} else {
strcpy(H.desc,"친구목록");
H.ver=100;
H.num=Num;
fwrite(&H,sizeof(tag_Header),1,f);
fwrite(Friends,sizeof(tag_Friend),Num,f);
fclose(f);
puts("파일을 저장했습니다.");
}
}
// 파일로부터 구조체 배열 읽어오기
void ReadFriend()
{
FILE *f=NULL;
tag_Header H;
gotoxy(5,5);
f=fopen("c:\\Friend.dat","rb");
if (f == NULL) {
puts("파일을 열 수 없습니다.");
} else {
memset(Friends,0,sizeof(Friends));
fread(&H,sizeof(tag_Header),1,f);
if (strcmp(H.desc,"친구목록") != 0) {
puts("주소록 파일이 아닙니다.");
goto end;
}
if (H.ver != 100) {
puts("버전이 틀립니다.");
goto end;
}
Num=H.num;
fread(Friends,sizeof(tag_Friend),Num,f);
puts("파일을 읽었습니다.");
}
end:
if (f)
fclose(f);
}
[/code]