# "string.h" 포함
# "conio.h" 포함
#' stdio.h' 포함
# "dos.h" 포함
FILE * FP
Int I;; //i 는 길이가 아닌 전역 변수입니다.
구조 주소
{charpostnum [10];
차 a [40]; //집 주소
}
구조생일
{int 년;
Int 월;
Int 일;
}
구조적 친구
{int num// 일련 번호
차 이름 [20];
매력적인 섹스
유료 전화 [13];
구조 생일
구조 주소 주소 주소 address;;
}
친구 [50];
잘못된 하중 ()
{
Int j;;
긴 k;
Fp=fopen("friend.txt ","a+"); //friend.txt 파일을 엽니다
If(fp! = 비어 있음)
{
For (I =1; 나 & lt50; I++)
{
J = fgetc (FP);
If(j==EOF) // 문서의 끝에 도달했는지 여부를 결정합니다.
반환;
K = I-1;
Fseek(fp, k*sizeof(struct ffriend), seek _ set);
프레드 (& ampfriends[i], sizeof(struct ffriend), 1, FP); //파일에서 레코드 읽기
}
}
기타
{
Fp=fopen("friend.txt ","w ");
I =1;
}
}
빈 디스플레이 (int j)
{
//친구 [j]. Num = I;;
Printf(" \ n \ n \ t 아니요. -n 번호: %3d ",친구 [j]. Num);
Printf ("\ n \ tname -Name:%-20s ",friends[j]. 이름);
Printf ("\ n \ tGender -Sex:%c ",friends[j]. 성);
Printf(" \ n \ tTel- 전화: %- 13s ",친구 [j]. 전화);
Printf(" \ n \ t 생년월일-생일:% 4d-%2d-%3d ",friends [j]. 생일. 연도, 친구 [j]. 생일, 월, 친구. 생일);
Printf ("\ n \ tzip code-postnum:%-10s", friends [j]. Address.postnum);
Printf(" \ n \ t e-메일 주소-주소: %-40s ",friends [j]. Address.a);
}
Void 추가 (int j)
{
Fflush (stdin); //해당 영역의 파일 버퍼를 지우고 파일이 쓰기 모드로 열릴 때 파일에 버퍼를 씁니다.
//stdin 은 보통 키보드로 입력 스트림을 가리키는 표준 파일 * (파일 포인터) 입니다.
친구 [j]. Num = j;;
Printf(" \ n \ t \ t \ t 일련 번호-번호: %d ",j);
Printf ("\ n \ t \ t \ tname-name:");
Scanf("%s ",친구 [j]. 이름);
Fflush (stdin); //왜 fflush (stdin); 효과가 자동으로 건너뛰나요?
Printf ("\ t \ t \ t gender-sex (m/w):"); //한자를 입력하는 남녀가 자동으로 연락처 번호를 건너뛰는 이유는 무엇입니까?
Scanf("%c ",& 친구 [j]. 성);
Printf ("\ t \ t \ t tel-phone:");
Scanf("%s ",친구 [j]. 전화);
Printf("\t 생년월일-생일 ");
Printf(" \ n \ t \ t \ t 연도: ");
Scanf("%d ",& 친구 [j]. 생일. 연도);
Printf ("\ t \ t \ t month-month:");
Scanf("%d ",& 친구 [j]. 생일. 월);
Printf ("\ t \ t \-day:");
Scanf("%d ",& 친구 [j]. 생일. 일);
Printf ("\ t \ t 우편 번호-우편 번호: ");
Scanf("%s ",friends [j] .address.postnum);
Printf(" \ t \ t \ t 메일 주소-주소: ");
Scanf("%s ",friends [j]. address.a);
Getchar ();
}
Void 삭제 ()
{
Int k;;
Printf(" \ n \ t 일련 번호 제거-번호: ");
Scanf("%d ",& AMPK);
If(k & lt;; =i)
{
For(int j = k;; J<I+1; J++) /* 삽입 위치 뒤로 이동된 요소 순서 */
{
Strcpy (친구 [j]. 이름, 친구 [j+ 1]. 이름); /* 요소 컨텐트 교환 */
친구 [j]. 성 = 친구 [j+ 1]. 섹스;
Strcpy (친구 [j]. 전화, 친구 [j+ 1]. 전화);
친구 [j]. 생일. 년 = 친구 [j+ 1]. 생일. 년;
친구 [j]. 생일. 월 = 친구 [j+ 1]. 생일. 월;
친구 [j]. 생일. 일 = 친구 [j+ 1]. 생일. 일;
Strcpy (friends [j]. address.postnum, friends [j+1]. address.postnum);
Strcpy (친구 [j].address.a, 친구 [j+1]. address.a);
}
I-;
}
기타
{
Printf ("입력한 일련 번호가 너무 큽니다!" " );
}
}
Void Modify(int j)
{
추가 (j);
}
잘못된 저장 ()
{
Int j;;
Fp=fopen("friend.txt ","w ");
For (j =1; J<= I;; J++)
{
Fwrite(& amp;; Friends[j], sizeof(struct ffriend), 1, FP);
}
Fclose (FP);
}
Void main ()
{
Int j;;
탄화 등급
Char search name [10];
로드 ();
I-;
하다
{
Printf(" \ t \ t \ t \ t \ t 단순 주소록 \ n \ n ");
Printf ("함수 선택 \ n");
Printf (" 1A. 읽기 \ n ");
Printf("\2B. Append \ n ");
Printf("\6C ") 를 참조하십시오. Insert \ n ");
Printf ("\") 를 참조하십시오. 삭제 \ n ");
Printf ("\") 를 참조하십시오. 검색 \ n ");
Printf (". 수정 \ n ");
Printf("\2G. 저장 \ n ");
Printf (" 1h. 종료 \ n ");
Printf ("pleasechoice") \ n 참고: A~H 의 대문자를 입력하십시오. \ n ");
Scanf("%c ",& 학년);
스위치 (등급)
//대문자와 소문자를 추가할 수 있습니다.
{
사례' a': j =1; //디스플레이 기능
While(getchar ()! = 0x1b & & ampj & lt=i) // 추가 Esc 키를 눌러 종료합니다.
{
쇼 (j++);
Printf(" \ n 계속하려면 Enter 키를 누르십시오! "" );
}
만약 (j-1< 1)
{
Printf ("\ n \ tEmpty 문서화되지 않은 문서-빈 주석 \ n ");
Printf(" \ n 계속하려면 Enter 키를 누르십시오! "" );
Getchar ();
}
Printf("\n\t\t\t\t\t\t 이 작업은 종료되었습니다. ");
Printf(" \ n \ t-\ t \ t \ n "); ");
깨뜨리다
상황' b'://함수 추가
While (나 & lt=50) // ESC 키를 눌러 종료하는 기능을 추가합니다.
{
I++;+;
추가 (a);
Printf(" \ t 계속 증가합니까? Y/n);
//수정으로 else 를 추가하면 오류가 발생하거나 강제로 인쇄됩니다.
Char a = getchar ();
If(a=='n'||a=='N')
깨뜨리다
}
If(i==5 1)
Printf(" \ n \ t 문서가 꽉 차서 레코드를 추가할 수 없습니다. 꽉 찼습니다. ");
Printf("\n\t\t\t\t\t\t 이 작업은 종료되었습니다. ");
Printf(" \ n \ t-\ t \ t \ n "); ");
Getchar ();
깨뜨리다
사례' c':
Int k;;
Printf(" \ n \ t 삽입할 위치 입력: ");
Scanf("%d ",& AMPK);
J = I+1;
친구 [j]. Num = j;;
For (j; J & gtk;; J-)// 함수 삽입
{
Strcpy (친구 [j]. 이름, 친구 [j- 1]. 이름); //데이터 뒤로 이동
친구 [j]. 성 = 친구 [j- 1]. 섹스;
Strcpy (친구 [j]. 전화, 친구 [j- 1]. 전화);
친구 [j]. 생일. 연도 = 친구 [j- 1]. 생일. 연도;
친구 [j]. 생일. 월 = 친구 [j- 1]. 생일. 월;
친구 [j]. 생일. 일 = 친구 [j- 1]. 생일. 일;
Strcpy (friends [j]. address.postnum, friends [j-1]. address.postnum);
Strcpy (친구 [j].address.a, 친구 [j-1]. address.a);
}
추가 (k);
I++;+;
Printf("\n\t\t\t\t\t\t 이 작업은 종료되었습니다. ");
Printf(" \ n \ t-\ t \ t \ n "); ");
깨뜨리다
사례' D'://삭제 기능//여러 레코드를 임의로 삭제하는 기능을 추가합니다.
삭제 ();
만약 (나< 1)
Printf(" \ n 레코드 없음-레코드 없음 \ n ");
Printf(" \ n 계속하려면 Enter 키를 누르십시오! "" );
Getchar ();
Getchar ();
Printf("\n\t\t\t\t\t\t 이 작업은 종료되었습니다. ");
Printf(" \ n \ t-\ t \ t \ n "); ");
깨뜨리다
상황' e'://쿼리 함수
Printf(" \ n \ t 쿼리할 레코드의 관련 이름 입력: "); //열 번호별로 쿼리 추가
Scanf("%s ",search name);
For (j =1; J<= I;; J++)
{
If (strcmp (searchname, friends [j].name)= = 0)// 비교 문자열.
{
보이기 (j);
깨뜨리다
}
}
만약 (나< 1)
{
Printf(" \ n 찾으려는 레코드 없음-레코드 없음 ");
Printf(" \ n 계속하려면 Enter 키를 누르십시오! "" );
Getchar ();
}
Printf("\n\t\t\t\t\t\t 이 작업은 종료되었습니다. ");
Printf(" \ n \ t-\ t \ t \ n "); ");
Getchar ();
깨뜨리다
사례' f'://수정 함수//일련 번호로 쿼리 추가.
Printf(" \ n \ t 수정할 레코드의 관련 이름 입력: ");
가져오기 (search name);
Scanf("%s ",search name);
For (j =1; J<= I;; J++)
{
If (strcmp (searchname, friends [j].name)= = 0)// 비교 문자열.
{
수정 (j);
//getchar (); //출력 추가 수정 확인?
}
}
(나< 1) // 함수를 수정하는 경우
{printf(" \ n 수정할 레코드 없음-레코드 없음 ");
Printf(" \ n 계속하려면 Enter 키를 누르십시오! "" );
Getchar ();
Getchar ();
}
Printf("\n\t\t\t\t\t\t 이 작업은 종료되었습니다. ");
Printf(" \ n \ t-\ t \ t \ n "); ");
깨뜨리다
사례' g':
저장 (); //저장 기능
Getchar ();
Printf("\n\t\t\t\t\t\t 이 작업은 종료되었습니다. ");
Printf(" \ n \ t-\ t \ t \ n "); ");
깨뜨리다
상황' h'://종료 기능
Char x;;
Printf ("저장하시겠습니까? 예/아니오 \ n ");
Scanf("%s ",& ampx);
//getchar ();
//getchar ();
If(x=='y')
{
저장 ();
종료 (0);
}
기타
종료 (0);
기본값:
Printf(" \ n \ t 잘못 입력했습니다. 올바른 일련 번호를 입력하십시오! " );
Printf(" \ n 계속하려면 Enter 키를 누르십시오! "" );
Getchar ();
Printf("\n\t\t\t\t\t\t 이 작업은 종료되었습니다. ");
Printf(" \ n \ t-\ t \ t \ n "); ");
}
} while (1);
}