C 언어 시 뮬 레이 션 실현 동적 주소록

10903 단어 C 언어통신 록
1.시 뮬 레이 션 실현 주소록 전체 구조 일람표
在这里插入图片描述
2.파일 작업 수행
在这里插入图片描述
3.모듈 별 구현
 테스트 모듈 test.c
1.더 잘 보이 기 위해 메뉴 를 만 듭 니 다.메뉴 에 추가,삭제,찾기,수정,정렬,비우 기,종료 옵션 이 있 습 니 다.
2.먼저 프로그램 에 들 어가 야 하 므 로 도..while 순환(옵션 을 입력 하여 구체 적 인 조작 을 볼 때 종료 또는 기타 조작)

 #include "contact.h"
void menu()
{

	printf("*****************************************
"); printf("******** Contact ******
"); printf("******** 1.add 2. del ******
"); printf("******** 3.search 4.modify ******
"); printf("******** 5.print 6.empty ******
"); printf("******** 7.sort 0.exit ******
"); printf("*****************************************
"); } enum Option // // , , , 0 , { EXIT, ADD, DEL, SEARCH, MODIFY, PRINT, EMPTY, SORT, }; int main() { // , int input = 0; // // // // contact con; //contact , InitContact(&con); do { menu();// printf(" >"); scanf("%d", &input); switch (input) { case ADD: // AddContact(&con); break; case DEL: // DelContact(&con); break; case SEARCH: // SearchContact(&con); break; case MODIFY: // ModifyContact(&con); break; case PRINT: // PrintContact(&con); break; case SORT: // SortContact(&con); break; case EMPTY: // EmptyContact(&con); break; case EXIT: // ExitContact(&con); break; default: printf(" ,
"); } } while (input); return 0; }
헤더 기능 함수 성명 contact.h
1.각종 기능 함수 설명
2.각 상수 를 정의 하고 상수 를 알 기 쉬 운 변수 로 정의 하여 여러 곳 에서 사용 하기에 편리 하 다.
3.구조 체 를 정의 하고 사용자 정의 유형 에 연락처 의 기본 정보 가 있 습 니 다.

 #include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_NAME 20 //           20
#define MAX_SEX 10 //           10
#define MAX_TELE 12 //           12
#define MAX_ADDR 20 //           20
#define MAX 1000  //           1000
#define IN_NUM 3  //             3
#define SET_NUM 2  //       3  ,      
//         
//          1000  
typedef struct base
{
	char name[MAX_NAME]; //  
	char sex[MAX_SEX];   //  
	int age;             //  
	char tele[MAX_TELE]; //  
	char addr[MAX_ADDR]; //  
}base;
//  1000     
//   
//typedef struct contact
//{
//	 
//	int sz;           //              
//	base data[MAX]; //        
// 
//}contact;
//        
typedef struct contact
{
	//          ,          ,       3  ,        
	int sz;   //          
	base* data; //         ,        
	int capciaty; //             
}contact;

//      
void InitContact(contact* pc);
//     
void AddContact(contact* pc);
//  
void PrintContact(contact* pc);
//     
void DelContact(contact* pc);
//     
void SearchContact(contact* pc);
//    
void ModifyContact(contact* pc);
//       
void SortContact(contact* pc);
//       
void EmptyContact(contact* pc);
//     ,    
void ExitContact(contact* pc);

기능 함수 하나하나 실현
주소록 초기 화
동적 신청 공간
기본적으로 동적 공간 에 3 개의 기본 단위 정 보 를 저장 합 니 다.

 void InitContact(contact* pc)
{

	pc->data = (base*)malloc(sizeof(base) * IN_NUM);

	if (pc->data == NULL)
	//        
	//    
	{
		perror("InitContact");
		return;
	}
	//         0
	pc->sz = 0;
 
	pc->capciaty = IN_NUM;
}
2.연락처 추가
기본 공간 이 가득 차 면 그 다음 에 매번 두 개의 기본 공간 을 엽 니 다.

void AddContact(contact* pc)
{
//           
	//if (pc->sz == MAX)
	//{
	//	printf("     ,    
"); // return; //} // 3 if (pc->sz == pc->capciaty) { printf(" :
"); // , base* ptr = (base*)realloc(pc->data, (pc->capciaty + SET_NUM) * sizeof(base)); // if (ptr == NULL) { printf("
"); perror("AddContact"); return; } else { printf("
"); // , ptr data , pc->data pc->data = ptr; // pc->capciaty += SET_NUM; } printf("
"); } // printf(" >"); scanf("%s", pc->data[pc->sz].name); printf(" >"); scanf("%d", &pc->data[pc->sz].age); printf(" >"); scanf("%s", pc->data[pc->sz].sex); printf(" >"); scanf("%s", pc->data[pc->sz].tele); printf(" >"); scanf("%s", pc->data[pc->sz].addr); pc->sz++; printf("
"); }
3.연락처 정보 표시
연락처 정 보 를 하나씩 인쇄 하고 사이 의 거 리 를 주의 하 세 요(미관 유지)

 //  
void PrintContact(contact* pc)
{
	//    
	printf("%-20s %-10s %-5s %-15s %-20s
", " ", " ", " ", " ", " "); int i = 0; for (i = 0; i < pc->sz; i++) { printf("%-20s %-10s %-5d %-15s %-20s
", pc->data[i].name, pc->data[i].sex, pc->data[i].age, pc->data[i].tele, pc->data[i].addr); } }
4.연락처 삭제
연락 처 를 삭제 하기 전에 먼저 연락 처 를 삭제 할 이름 을 찾 은 다음 삭제 해 야 합 니 다.어떻게 삭제 하 는 지 주의 하 세 요.
삭 제 된 이 단위 의 다음 단 위 를 삭 제 된 단 위 를 덮어 쓰 도록 합 니 다.
주소록 에 삭 제 된 이름 이 있 을 때 이 단위 의 아래 표 시 를 되 돌려 줍 니 다.
주소록 에 없 을 때 되 돌아 오기-1

 //     
static int Find_name(contact* pc, char name[])
{
	int i = 0;
	for ( i = 0; i < pc->sz; i++)
	{
		if (strcmp(pc->data[i].name, name) == 0)
		{
			return i;
		}
	}
	return -1;
}
//     
void DelContact(contact* pc)
{
	//        
	if (pc->sz == 0)
	{
		printf("    ,    
"); return; } // char name[MAX_NAME]; printf(" :"); scanf("%s", name); int ret = Find_name(pc, name); if (ret == -1) { printf("
"); return; } // // , for (int i = ret; i < pc->sz; i++) { pc->data[i] = pc->data[i + 1]; } pc->sz--; printf("
"); }
4.연락처 찾기
연락 처 를 삭제 할 때 찾기 함수 가 있 습 니 다.여기 서 직접 참조 하고 인쇄 합 니 다.이 사람의 메시지.

 //     
void SearchContact(contact* pc)
{
	char name[MAX_NAME];
	printf("            :");
	scanf("%s", name);
	int ret = Find_name(pc, name);
	if (ret == -1)
	{
		printf("       
"); return; } printf("%-20s %-10s %-5s %-15s %-20s
", " ", " ", " ", " ", " "); printf("%-20s %-10s %-5d %-15s %-20s
", pc->data[ret].name, pc->data[ret].sex, pc->data[ret].age, pc->data[ret].tele, pc->data[ret].addr); }
5.해당 연락처 정보 수정
아니면 현재 주소록 에서 이 연락 처 를 찾 아 입력 수정 을 하고 있 습 니까?

 //    
void ModifyContact(contact* pc)
{
	char name[MAX_NAME];
	printf("            :");
	scanf("%s", name);
	int ret = Find_name(pc, name);
	if (ret == -1)
	{
		printf("       
"); return; } printf(" >"); scanf("%s", pc->data[ret].name); printf(" >"); scanf("%d", &pc->data[ret].age); printf(" >"); scanf("%s", pc->data[ret].sex); printf(" >"); scanf("%s", pc->data[ret].tele); printf(" >"); scanf("%s", pc->data[ret].addr); }
6.연락처 이름 정렬
거품 정렬 을 이용 하여 연락처 의 이름 을 정렬 합 니 다(빠 른 줄 도 사용 할 수 있 습 니 다)

 //  
//    ,              
//     ,       ,   
static void SwapByname(base* pa, base* pb)
{
	base b;
	b = *pa;
	*pa = *pb;
	*pb = b;
}
void SortContact(contact* pc)
{
	printf("    
"); // int i = 0; int j = 0; for (i = 0; i < pc->sz; i++) { for (j = 0; j < pc-> sz - i - 1; j++) { if (strcmp(pc->data[j].name, pc->data[j + 1].name) > 0) { // SwapByname(&pc->data[j], &pc->data[j + 1]); } } } printf("
"); }
7.연락처 비우 기
여기 서 szC 를 직접 사용 하면 삭제 할 수 있 습 니 다.

 //  
void EmptyContact(contact* pc)
{
//                
	if (pc->sz == 0)
	{
		printf("     ,    
"); return; } printf(" :
"); int num = pc->sz; for (int i = 0; i < num; i++) { pc->sz--; } printf("
"); }
8.주소록 종료
수 동 으로 열기,수 동 으로 방출

 //    ,    
void ExitContact(contact* pc)
{
	//    
	free(pc->data);
	pc->data = NULL;
	pc->sz = 0;
	pc->capciaty = 0;
}
실행 표시:
在这里插入图片描述
여기 서 C 언어 시 뮬 레이 션 실현 동적 주소록 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 C 언어 동적 주소록 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기