C 언어 시 뮬 레이 션 실현 동적 주소록
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.h1.각종 기능 함수 설명
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 언어 동적 주소록 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 체인 시계는 뱀을 탐식하는 작은 게임을 실현한다본고의 실례는 여러분에게 C 언어 체인표가 뱀 탐식 게임을 실현하는 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다. 프로젝트 이름: 뱀놀이 운영 환경: Linux 프로그래밍 언어: C 언...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.