C 언어 구현 주소록
실 현 된 기능 은 다음 과 같다.
1.주소록 초기 화;
2.주소록 에 항목 추가;
3.주소록 에 지 정 된 항목 삭제 하기;
4.지 정 된 규칙 에 따라 주소록 의 특정 항목 찾기;
5.주소록 의 모든 정 보 를 인쇄 한다.
6.주소록 의 지정 항목 수정;
7.주소록 파기;
8.주소록 내용 을 파일 에 저장 하기;
9.파일 의 내용 을 메모리 로 불 러 옵 니 다.
**Addr_Book.h**
#pragma once
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NAME_SIZE 200
#define PHONE_SIZE 200
#define ADDR_SIZE 200
typedef struct PersonInfo {
char name[NAME_SIZE];
char phone[PHONE_SIZE];
char addr[ADDR_SIZE];
} PersonInfo;
#define FILE_PATH "./data.txt"
enum {
DISPLAY = 1,
ADD = 2,
ERASE = 3,
FIND = 4,
MODIFY = 5,
EXIT = 0
};
typedef struct AddrBook {
PersonInfo* data;//
size_t size; //
size_t capacity; //
} AddrBook;
/**
* @brief
*
* @param addr_book
*/
void AddrBookInit(AddrBook* addr_book);
/**
* @brief
*
* @param addr_book
*/
void AddrBookAdd(AddrBook* addr_book);
/**
* @brief
*
* @param addr_book
*/
void AddrBookErase(AddrBook* addr_book);
/**
* @brief
*
* @param addr_book
*/
void AddrBookFind(AddrBook* addr_book);
/**
* @brief
*
* @param addr_book
*/
void AddrBookDisplay(AddrBook* addr_book);
/**
* @brief
*
* @param addr_book
*/
void AddrBookModify(AddrBook* addr_book);
/**
* @brief
*
* @param addr_book
*/
void AddrBookDestroy(AddrBook* addr_book);
/**
* @brief
*
* @param addr_book
*/
void AddrBookSave(AddrBook* addr_book);
/**
* @brief .
*
* @param addr_book
*/
void AddrBookLoad(AddrBook* addr_book);
**Addr_Book.c**
#define _CRT_SECURE_NO_WARNINGS 1
#include "Addr_Book.h"
//
void AddrBookDisplay(AddrBook* addr_book){
if (addr_book == NULL){
return;
}
printf("
==================== =========================
");
printf("| | | |
");
printf("|----------------|---------------|----------------|
");
size_t i = 0;
for (; i < addr_book->size; ++i){
printf("| %s | %s | %s |
",
addr_book->data[i].name, addr_book->data[i].phone, addr_book->data[i].addr);
printf("|----------------|---------------|----------------|
");
}
}
//
void AddrBookInit(AddrBook* addr_book){
if (addr_book == NULL){
return ;
}
addr_book->size = 0;
addr_book->capacity = 1;
addr_book->data = (PersonInfo*)malloc(sizeof(PersonInfo)*addr_book->capacity);
}
//
void AddrBookRelloc(AddrBook* addr_book){
if (addr_book == NULL){
return;
}
addr_book->capacity = addr_book->capacity * 2 + 1;// ,
PersonInfo* new_data = (PersonInfo*)malloc(sizeof(PersonInfo)*addr_book->capacity);//
size_t i = 0;
for (; i < addr_book->size; ++i){
new_data[i] = addr_book->data[i];//
}
free(addr_book->data);//
addr_book->data = new_data;
}
//
void AddrBookAdd(AddrBook* addr_book){
if (addr_book == NULL){
return;
}
if (addr_book->size >= addr_book->capacity){ //
AddrBookRelloc(addr_book);
}
size_t cur = addr_book->size;
++addr_book->size;
printf("
");
printf(" :");
scanf("%s", addr_book->data[cur].name);
printf(" :");
scanf("%s", addr_book->data[cur].phone);
printf(" :");
scanf("%s", addr_book->data[cur].addr);
printf(" !
");
}
//
void AddrBookErase(AddrBook* addr_book){
if (addr_book == NULL){
return;
}
char delete_name[200] = {0};
printf(" :");
scanf("%s", &delete_name);
size_t i = 0;
for (; i <addr_book->size;++i){
if (strcmp(addr_book->data[i].name, delete_name)){
free(addr_book->data);
addr_book->size--;
printf(" !");
}
else{
printf(" , !");
}
}
}
//
void AddrBookSave(AddrBook* addr_book){
FILE* fp = fopen(FILE_PATH, "w");
if (fp == NULL){
printf(" !
");
return;
}
size_t i = 0;
for (; i < addr_book->size; ++i){
fprintf(fp, "| %s | %s | %s |
",
addr_book->data[i].name, addr_book->data[i].phone, addr_book->data[i].addr);
}
fclose(fp);
}
//
void AddrBookFind(AddrBook* addr_book){
if (addr_book == NULL){
return;
}
char delete_name[200] = { 0 };
printf(" :");
scanf("%s", &delete_name);
size_t i = 0;
for (; i <addr_book->size; ++i){
if (strcmp(addr_book->data[i].name, delete_name)){
printf(" , : :%s, :%s, :%s
",
addr_book->data[i].name, addr_book->data[i].phone, addr_book->data[i].addr);
}
else{
printf(" !
");
}
}
}
//
void AddrBookModify(AddrBook* addr_book){
if (addr_book == NULL){
return;
}
char name[200] = { 0 };
printf(" :");
scanf("%s", &name);
size_t i = 0;
for (; i < addr_book->size; ++i)
{
if (strcmp(addr_book->data[i].name, name) == 0)
{
printf(" %lu :
", i + 1);
printf(" :
:%s , :%s , :%s
",
addr_book->data[i].name,
addr_book->data[i].phone,
addr_book->data[i].addr);
}
}
size_t num = 0;
printf(" :");
scanf("%lu", &num);
char name2[200];
char phone[200];
char addr[200];
printf(" :");
scanf("%s", name2);
strcpy(addr_book->data[num - 1].name, name2);
printf(" :");
scanf("%s", phone);
strcpy(addr_book->data[num - 1].phone, phone);
printf(" :");
scanf("%s", addr);
strcpy(addr_book->data[num - 1].addr, addr);
printf(" !
");
return;
}
//
void AddrBookDestroy(AddrBook* addr_book){
if (addr_book == NULL)
{
printf("addr_book is null
");
return;
}
else
{
addr_book->size = 0;
addr_book->capacity = 0;
free(addr_book->data);
printf(" !
");
}
}
//
void AddrBookLoad(AddrBook* addr_book){
if (addr_book = NULL){
printf(" !
");
return;
}
FILE* fp = fopen(FILE_PATH,"r");
if (fp = NULL){
printf(" !
");
return;
}
while (!feof(fp)){
if (addr_book->size >= addr_book->capacity){
AddrBookRelloc(addr_book);
}
size_t cur = addr_book->size;
fscanf(fp, "%s%s%s
", addr_book->data[i].name, addr_book->data[i].phone, addr_book->data[i].addr);
addr_book->size++;
}
fclose(fp);
}
//===============
//
//===============
void menu(){
AddrBook addr_book;
AddrBookInit(&addr_book);
AddrBookLoad(&addr_book);
while (1){
printf("============1. =============
");
printf("============2. =============
");
printf("============3. =============
");
printf("============4. =============
");
printf("============5. =============
");
printf("============6. =============
");
printf("============0. =============
");
int choice = 0;
printf(" :");
scanf("%d", &choice);
switch (choice){
case DISPLAY:
AddrBookDisplay(&addr_book);
break;
case ADD:
AddrBookAdd(&addr_book);
AddrBookSave(&addr_book);
break;
case ERASE:
AddrBookErase(&addr_book);
break;
case FIND:
AddrBookFind(&addr_book);
break;
case MODIFY:
AddrBookModify(&addr_book);
AddrBookSave(&addr_book);
break;
case DESTROY:
AddrBookDestroy(&addr_book);
break;
case EXIT:
printf(" !
");
break;
default:
printf(" :");
break;
}
}
}
int main(){
menu();
return 0;
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 체인 시계는 뱀을 탐식하는 작은 게임을 실현한다본고의 실례는 여러분에게 C 언어 체인표가 뱀 탐식 게임을 실현하는 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다. 프로젝트 이름: 뱀놀이 운영 환경: Linux 프로그래밍 언어: C 언...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.