파일 목록
- 1-Time1-.c
- 1-로또 프로그램 만들기.c
- 1-성적 평균 계산.c
- 1-소스.c
- 1-예제1.c
- 10-1.c
- 10-2.c
- 10-3.c
- 10-4.c
- 10-5.c
- 10-6.c
- 11-1.c
- 11-2.c
- 11-3.c
- 11-4.c
- 11-5.c
- 11-6.c
- 11-make.c
- 12-1-1.c
- 12-1-2.c
- 12-1-3.c
- 12-1-4.c
- 12-2-1.c
- 12-2-2.cpp
- 12-2-3.c
- 12-2-4.c
- 12-2-5.c
- 13-1.c
- 13-2.c
- 13-3.c
- 13-4.c
- 13-5.c
- 13-6.c
- 13-make.c
- 14-1-main.c
- 14-1-power.c
- 14-1-power.h
- 14-2-rect.c
- 14-2-rect.h
- 14-2-rect_main.c
- 14-2-소스.c
- 14-2-소스1.c
- 14-main.c
- 14-reserv.c
- 14-reserv.h
- 2-DICE.c
- 2-minimum.c
- 3-TIC_TAC_TOE.c
- 4-1.c
- 4-2.c
- 4-3.c
- 4-Point.c
- 4-주소.c
- 5-1.cpp
- 5-2.c
- 5-3.c
- 5-4.c
- 5-5.c
- 5-6.c
- 5-7.c
- 6-1.c
- 6-2.c
- 6-3.c
- 6-4.c
- 6-5.c
- 6-6.c
- 6-7.c
- 6-8.c
- 6-make.c
- 7-1.c
- 7-10.c
- 7-11.c
- 7-12.c
- 7-2.c
- 7-3.c
- 7-4.c
- 7-5.c
- 7-6.c
- 7-7.c
- 7-8.c
- 7-9.c
- 7-make.c
- 8.c
- 9.c
- sil1.c
- sil2.c
- sil3.c
- Title.png
- 성적받아오기).c
/*****************************************************************
* 주소록 저장하는 프로그램
********************************************************************/
#define _CRT_SECURE_NO_WARNINGS // scanf오류 제거를 위한 코드
#include<stdio.h> // 표준 입출력장치 사용을 위한 헤더파일 로드
#include <string.h> // 문자열 비교를 위한 함수 라이브러리 추가
#define SIZE 100 // 입력받을 인원수를 설정
typedef struct person { // 연락처를 구조체 타입으로 표시
char name[SIZE]; // 이름
char addr[SIZE]; // 주소
char monum[SIZE]; // 모바일 넘버 /핸드폰번호
char desc[SIZE]; // 특징
}Person;
void menu(); // 메뉴를 표시하는 함수
Person get_record(); // 데이터를 입력받아 구조체로 만들어주는 함수
void add_record(FILE* fp); //새 데이터 추가 함수
void update_record(FILE* fp); // 데이터 변경 함수
void search_record(FILE* fp); // 데이터 탐색 함수
void print_record(Person data); // 구조체 데이터 출력 함수
int main()
{
FILE *fp = NULL ; // 파일 구조체 정의를 이용한 파일 열기
int select = 0 ; // 고를 정수를 저장할 변수 생성
// 이진 파일을 추가 모드로 오픈하기
if ((fp = fopen("address.dat", "a+")) == NULL) {
fprintf(stderr, "입력을 위한 파일을 찾을 수 없습니다."); //파일이 제대로 생성되지 않은경우
exit(1);
}
while (1) {
menu();
printf("정수값을 입력해주세요 : ");
scanf("%d%*c", &select); //메뉴 선택 %*c는 버퍼에 차지한 자리를 비워 gets 함수를 쓰기 위함
switch (select) {
case 1: add_record(fp); break; //데이터 추가하기
case 2: update_record(fp); break; //데이터 수정
case 3: search_record(fp); break; //데이터 탐색
case 4: return 0; //종료
}
}
fclose(fp); //파일 fp종료
return 0; //정상종료
}
// 메뉴를 표시하는 함수
void menu()
{
printf("\n==============================\n");
printf("1. 추가\n2. 수정\n3. 검색\n4. 종료\n");
printf("==============================\n");
}
// 새 데이터 추가 함수
void add_record(FILE *fp)
{
Person data; // Person 구조체 생성
data = get_record(); // 사용자로부터 데이터를 받아 구조체에 저장
fseek(fp, 0, SEEK_END); // 파일의 끝으로 이동
fwrite(&data, sizeof(data), 1, fp); // 구조체 데이터를 파일에 쓴다.
}
// 데이터 변경 함수
void update_record(FILE* fp)
{
printf("내부 변경할바에는 파일 지우고 다시 입력하는게 빠르답니다.");
fclose(fp); // 삭제를 위해 파일 닫기
if (remove("address.dat") == -1) { // 파일 삭제 시도
printf("파일 삭제에 실패했습니다. \n강제 종료합니다."); // 실패시 시스템 종료
exit(1);
}
printf("파일 삭제 완료");
// 이진 파일을 추가 모드로 오픈하기
if ((fp = fopen("address.dat", "a+")) == NULL) {
fprintf(stderr, "입력을 위한 파일을 찾을 수 없습니다."); //파일이 제대로 생성되지 않은경우
exit(1);
}
printf("처음 화면으로 돌아갑니다.");
/*char name[SIZE];
Person data;
fseek(fp, 0, SEEK_SET);
getchar();
printf("변경하고자 하는 사람의 이름을 입력하세요 : ");
gets_s(name, SIZE);
while (!feof(fp)) {
fread(&data, sizeof(data), 1, fp);
if (strcmp(data.name, name) == 0) {
printf("변경할 이름 : ");
gets_s(data.name, SIZE);
printf("변경할 주소 : ");
gets_s(data.addr, SIZE);
printf("변경할 휴대폰 번호 : ");
gets_s(data.monum, SIZE);
printf("변경할 특징 : ");
gets_s(data.desc, SIZE);
fwrite(&data, sizeof(data), 1, fp);
return;
}
}
("없는 사람입니다. 처음 화면으로 돌아갑니다.");*/
}
// 데이터 탐색 함수
void search_record(FILE* fp)
{
char name[SIZE] = { 0 }; // 검색할 이름을 저장할 변수 생성
Person data; // Person 구조체 생성
fseek(fp, 0, SEEK_SET); // 파일의 처음으로 이동
getchar(); // 줄바꿈 문자 없애기
printf("탐색하고자 하는 사람의 이름을 입력하세요 : ");
gets_s(name, SIZE); // 이름 입력
while (!feof(fp)) { // 파일의 끝까지 반복
fread(&data, sizeof(data), 1, fp); // 현재 위치에서 데이터 읽기
if (strcmp(data.name, name) == 0) { // 이름 비교
print_record(data); // 일치할 경우 데이터 출력 함수 실행
return;
}
}
printf("없는 사람입니다. 처음 화면으로 돌아갑니다."); // 없는경우 경고문
}
// 데이터를 입력받아 구조체로 만들어주는 함수
Person get_record()
{
Person data; // Person 구조체 생성
getchar(); // 줄바꿈 문자 없애기
printf("이름 : ");
gets_s(data.name, SIZE); // 이름 입력
printf("주소 : ");
gets_s(data.addr, SIZE); // 주소 입력
printf("휴대폰 번호 : ");
gets_s(data.monum, SIZE); // 핸드폰번호 입력
printf("특징 : ");
gets_s(data.desc, SIZE); // 특징 입력
return data;
}
// 구조체 데이터 출력 함수
void print_record(Person data)
{
printf("이름 : %s\n", data.name); // 이름 출력
printf("주소 : %s\n", data.addr); // 주소 출력
printf("휴대폰 : %s\n", data.monum); // 핸드폰번호 출력
printf("특징 : %s\n", data.desc); // 특징 출력
}