티스토리 뷰


[C언어 소스] 주소 관리 프로그램 소스



이 포스팅에서는 주소 관리 프로그램 소스를 공개하도록 할게요.

이 주소 관리 프로그램은 사용자 정보(이름, 주소, 전화번호, 휴대폰, e-mail)를 등록하고, 출력하고 삭제할 수 있는 프로그램입니다.

이 소스를 조금 변형하시면 더 멋진 프로그램을 만들 수 있지 않나 싶네요^^




주소 관리 프로그램 소스 공개


아래의 파일을 클릭하시면 다운로드 받으실 수 있습니다.

manager.c



#include <stdio.h>
#include <malloc.h>
#include <string.h>

struct _node {
	char name[10];		// 이름
	char address[30];	// 주소
	char phone[14];		// 전화번호
	char mobile[14];	// 핸드폰
	char mail[20];		// e-mail
	struct _node *link;	// 다음 노드
};

typedef struct _node node;

void Insert(node*);		// 노드 삽입 함수
void Delete(node*);		// 노드 삭제 함수
void Display(node*);	// 노드 정보 출력 함수

int main(void) {
	node *ptr;
	int choice;

	/*
		첫번째 노드 생성
		동적할당을 통해 공간을 생성하여 노드를 만든다.
		다음 노드 위치는 NULL로 초기화한다
	*/
	ptr = (node *)malloc(sizeof(node));
	ptr->link = NULL;

	/*
		do-while을 이용한 반복
		4. 종료를 선택할 때까지 반복한다.
	*/
	do {
		// 메뉴 출력
		printf("주소관리 프로그램\n");
		printf("1. 등    록\n");
		printf("2. 출    력\n");
		printf("3. 삭    제\n");
		printf("4. 종    료\n");
		printf("명령어를 선택하시오: ");
		
		// 1문자를 입력받아 숫자로 변환
		choice = getchar() - '0';
		
		// 입력 버퍼 초기화
		fflush(stdin);

		/* 
			입력받은 숫자에 따라 분기
			1 : 등록 -> Insert
			2 : 출력 -> Display
			3 : 삭제 -> Delete
		*/
		switch(choice) {
			case 1 : 
				Insert(ptr); 
				break;
			case 2 : 
				Display(ptr->link);
				break;
			case 3 : 
				Delete(ptr); 
				break;
		}
	}while(choice!=4);
}


void Insert(node *ptr) {
	while (ptr->link != NULL)
		ptr = ptr->link;

	ptr->link = (node*)malloc(sizeof(node));
	ptr = ptr->link;
	
	printf("이름을 입력하시오: ");
	gets(ptr->name);
	printf("주소를 입력하시오: ");
	gets(ptr->address);
	printf("전화번호 입력하시오: ");
	gets(ptr->phone);
	printf("핸드폰을 입력하시오: ");
	gets(ptr->mobile);
	printf("E-Mail을 입력하시오: ");
	gets(ptr->mail);

	ptr->link = NULL;
	printf("\n");
}

void Delete(node *ptr)  {
	node *prev;
	char _phone[14];

	printf("삭제할 전화번호를 선택하시오: ");
	gets(_phone);

	while (ptr->link != NULL)  {
		prev = ptr;
		ptr = ptr->link;

		/* 저장되어 있는 데이터중에서 전화번호를 기준으로 데이터를 삭제 */
		if (strcmp(_phone, ptr->phone) == 0) {
			prev->link = ptr->link;
			free(ptr);
			break;
		}
	}
	return;
}

void Display(node *ptr)  {
	printf("%6s", "이  름") ;
	printf("%14s", "주   소");
	printf("%14s", "전화번호");
	printf("%14s", "핸드폰");
	printf("%10s\n", "E-Mail");
	
	while (ptr != NULL) {
		printf("%6s", ptr->name);
		printf("%14s", ptr->address);
		printf("%14s", ptr->phone);
		printf("%14s", ptr->mobile);
		printf("%10s", ptr->mail);
		
		ptr = ptr->link;
		printf("\n");
	}
	
	printf("\n");
}



실행화면



아래는 주소 관리 프로그램을 실행한 실행화면입니다.




위 소스에 검색 기능을 추가한 소스


위 소스에 검색 기능을 추가해 보았습니다.


#include <stdio.h>
#include <malloc.h>
#include <string.h>

struct _node {
	char name[10];		// 이름
	char address[30];	// 주소
	char phone[14];		// 전화번호
	char mobile[14];	// 핸드폰
	char mail[20];		// e-mail
	struct _node *link;	// 다음 노드
};

typedef struct _node node;

void Insert(node*);		// 노드 삽입 함수
void Delete(node*);		// 노드 삭제 함수
void Display(node*);	// 노드 정보 출력 함수
void Search(node*);		// 노드 정보 검색 함수

int main(void) {
	node *ptr;
	int choice;

	/*
	첫번째 노드 생성
	동적할당을 통해 공간을 생성하여 노드를 만든다.
	다음 노드 위치는 NULL로 초기화한다
	*/
	ptr = (node *)malloc(sizeof(node));
	ptr->link = NULL;

	/*
	do-while을 이용한 반복
	4. 종료를 선택할 때까지 반복한다.
	*/
	do {
		// 메뉴 출력
		printf("주소관리 프로그램\n");
		printf("1. 등    록\n");
		printf("2. 출    력\n");
		printf("3. 삭    제\n");
		printf("4. 검    색\n");
		printf("5. 종    료\n");
		printf("명령어를 선택하시오: ");

		// 1문자를 입력받아 숫자로 변환
		choice = getchar() - '0';

		// 입력 버퍼 초기화
		fflush(stdin);

		/* 
		입력받은 숫자에 따라 분기
		1 : 등록 -> Insert
		2 : 출력 -> Display
		3 : 삭제 -> Delete
		4 : 검색 -> Search
		*/
		switch(choice) {
		case 1 : 
			Insert(ptr); 
			break;
		case 2 : 
			Display(ptr->link);
			break;
		case 3 : 
			Delete(ptr); 
			break;
		case 4 : 
			Search(ptr); 
			break;

		}
	}while(choice!=5);
}


void Insert(node *ptr) {
	while (ptr->link != NULL)
		ptr = ptr->link;

	ptr->link = (node*)malloc(sizeof(node));
	ptr = ptr->link;

	printf("이름을 입력하시오: ");
	gets(ptr->name);
	printf("주소를 입력하시오: ");
	gets(ptr->address);
	printf("전화번호 입력하시오: ");
	gets(ptr->phone);
	printf("핸드폰을 입력하시오: ");
	gets(ptr->mobile);
	printf("E-Mail을 입력하시오: ");
	gets(ptr->mail);

	ptr->link = NULL;
	printf("\n");
}

void Delete(node *ptr)  {
	node *prev;
	char _phone[14];

	printf("삭제할 전화번호를 선택하시오: ");
	gets(_phone);

	while (ptr->link != NULL)  {
		prev = ptr;
		ptr = ptr->link;

		/* 저장되어 있는 데이터중에서 전화번호를 기준으로 데이터를 삭제 */
		if (strcmp(_phone, ptr->phone) == 0) {
			prev->link = ptr->link;
			free(ptr);
			break;
		}
	}
	return;
}

void Display(node *ptr)  {
	printf("%6s", "이  름") ;
	printf("%14s", "주   소");
	printf("%14s", "전화번호");
	printf("%14s", "핸드폰");
	printf("%10s\n", "E-Mail");

	while (ptr != NULL) {
		printf("%6s", ptr->name);
		printf("%14s", ptr->address);
		printf("%14s", ptr->phone);
		printf("%14s", ptr->mobile);
		printf("%10s", ptr->mail);

		ptr = ptr->link;
		printf("\n");
	}

	printf("\n");
}

void Search(node *ptr) {
	char _name[10];

	printf("이름을 입력하시오: ");
	gets(_name); 

	printf("%6s", "이  름") ;
	printf("%14s", "주   소");
	printf("%14s", "전화번호");
	printf("%14s", "핸드폰");
	printf("%10s\n", "E-Mail");

	while (ptr != NULL)  {
		if (strcmp(_name, ptr->name) == 0) {

			printf("%6s", ptr->name);
			printf("%14s", ptr->address);
			printf("%14s", ptr->phone);
			printf("%14s", ptr->mobile);
			printf("%10s", ptr->mail);

			printf("\n");
		}
		ptr = ptr->link;
	}
}
신고
댓글
댓글쓰기 폼
  • 비밀댓글입니다 2012.11.29 10:59
  • 하늘과 나 메일 드렸습니다^^ 2012.11.29 13:22 신고
  • 비밀댓글입니다 2013.11.26 20:03
  • 하늘과 나 한번 수정해 봤어요

    void search(node *ptr) {

    char _name[10];

    printf("이름을 입력하시오: ");
    gets(_name);

    printf("%6s", "이 름") ;
    printf("%14s", "주 소");
    printf("%14s", "전화번호");
    printf("%14s", "핸드폰");
    printf("%10s\n", "E-Mail");

    while (ptr != NULL) {
    if (strcmp(_name, ptr->name) == 0) {

    printf("%6s", ptr->name);
    printf("%14s", ptr->address);
    printf("%14s", ptr->phone);
    printf("%14s", ptr->mobile);
    printf("%10s", ptr->mail);

    printf("\n");
    }
    ptr = ptr->link;
    }
    }
    2013.11.27 00:04 신고
  • 나그네 좋은 글 남겨주셔서 감사합니다.

    많은 도움이 되었습니다.
    2014.04.09 13:55 신고
  • 케이엠지 위 소스대로 입력후 출력하니
    1 등록에서 이름과 주소가 묶여서 출력됩니다.ㅠㅠ
    소스를 봤을땐 아무 문제 없는거 같은데 혹시 원인이 무엇인지 아십니까?ㅠㅠ
    2015.03.09 23:35 신고
  • 비밀댓글입니다 2015.03.09 23:36
  • 하늘과 나 출력결과가 다르다는 말씀이시지요?
    이름과 주소가 묶인다는 이야기는.붙어서 출력된다는 말씀이신지요?
    입력하신 값도 알려주시면 확인해볼게요^^
    2015.03.09 23:37 신고
  • 비밀댓글입니다 2015.12.10 17:09
  • 하늘과 나 소스에 문제가 있는 것 같아요
    중간에 아래를 넣어주시면 될 것 같습니다

    // 입력 버퍼 초기화
    fflush(stdin);
    2015.12.10 21:13 신고
  • asdf -> 2015.12.14 15:34 신고
  • DLWHDCKS 심각도 코드 설명 프로젝트 파일 줄
    오류 LNK2019 _WinMain@16 외부 기호(참조 위치: "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) 함수)에서 확인하지 못했습니다. ConsoleApplication30 c:\Users\admin\documents\visual studio 2015\Projects\ConsoleApplication30\ConsoleApplication30\MSVCRTD.lib(exe_winmain.obj) 1
    심각도 코드 설명 프로젝트 파일 줄
    오류 LNK1120 1개의 확인할 수 없는 외부 참조입니다. ConsoleApplication30 c:\users\admin\documents\visual studio 2015\Projects\ConsoleApplication30\Debug\ConsoleApplication30.exe 1
    이렇게 뜨는대 어떻게해야할까용..

    2016.05.08 14:34 신고
  • 하늘과 나 http://www.jynote.net/529
    위의 글을 참고해 주세요^^
    2016.05.08 19:48 신고
  • ㅁㅅㅁㅎ 쉽게좀만드삼 2016.07.21 17:30 신고
  • ㅁㅅㅁㅎ 쉽게좀만드삼 2016.07.21 17:30 신고
  • ㅁㅅㅁㅎ 쉽게좀만드삼 2016.07.21 17:30 신고
  • ㅁㅅㅁㅎ 쉽게좀만드삼 2016.07.21 17:30 신고
  • ㅁㅅㅁㅎ 쉽게좀만드삼 2016.07.21 17:30 신고
  • ㅁㅅㅁㅎ 쉽게좀만드삼 2016.07.21 17:30 신고
  • DS_C 이름순 정렬 혹은 전화번호순 정렬 방법이 있나요? 2016.06.11 00:03 신고
  • warning C4013: 'gets'이(가) 정의되지 않았습니다. extern은 int형을 반환하는 것으로 간주합니다. 이런 error가 뜹니다 2016.06.25 11:54 신고
  • 그리고 이름을 입력하세요 주소를 입력하세요 가 바로 떠서 이름 입력이 불가합니다;; 어떻게 하나요 ㅠㅠ 2016.06.25 12:04 신고
  • 그리고 이름을 입력하세요 주소를 입력하세요 가 바로 떠서 이름 입력이 불가합니다;; 어떻게 하나요 ㅠㅠ 2016.06.25 12:04 신고
  • 그리고 이름을 입력하세요 주소를 입력하세요 가 바로 떠서 이름 입력이 불가합니다;; 어떻게 하나요 ㅠㅠ 2016.06.25 12:04 신고
  • #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <malloc.h>
    #include <string.h>

    struct _node {
    char name[10]; // 이름
    char phone[14]; // 전화번호
    struct _node *link; // 다음 노드
    };typedef struct _node node;

    void membershipInsert(node*); // 노드 삽입 함수
    void membershipDelete(node*); // 노드 삭제 함수
    void membershipDisplay(node*); // 노드 정보 출력 함수

    void main() {
    int choice, choise0, choise1, choise2;

    node *ptr;

    printf(" Cven eleven \n");
    printf("=============================================\n");
    printf("1. 회원 관리 & 포인트 조회\n");
    printf("2. 재고 관리\n");
    printf("3. 종료\n");
    printf("어떤 업무를 보시겠습니까?\n");
    do {
    scanf("%d", &choise0);
    if (choise0 != 1 && choise0 != 2 && choise0 != 3) {
    printf("번호를 잘못 입력하셨습니다.");
    }
    } while (choise0 != 1 && choise0 != 2 && choise0 != 3);
    switch (choise0) {
    case 1:
    printf(" 회원 관리 & 포인트 조회 \n");
    printf("=============================================\n");
    printf("1. 회원 관리\n");
    printf("2. 포인트 조회\n");
    printf("3. 종료\n");
    printf("어떤 업무를 보시겠습니까?\n");
    do{
    scanf("%d", &choise1);
    if (choise1 != 1 && choise1 != 2 && choise1 != 3) {
    printf("번호를 잘못 입력하셨습니다.");
    }
    } while (choise1 != 1 && choise1 != 2 && choise1 != 3);

    switch(choise1){
    case 1:
    /*
    첫번째 노드 생성
    동적할당을 통해 공간을 생성하여 노드를 만든다.
    다음 노드 위치는 NULL로 초기화한다
    */
    ptr = (node *)malloc(sizeof(node));
    ptr->link = NULL;
    /*
    do-while을 이용한 반복
    4. 종료를 선택할 때까지 반복한다.
    */
    do {
    // 메뉴 출력
    printf(" 회원관리 프로그램 \n");
    printf("=============================================\n");
    printf("1. 회원가입\n");
    printf("2. 회원조회\n");
    printf("3. 회원삭제\n");
    printf("4. 종료\n");
    printf("어떤 업무를 보시겠습니까?\n");
    do {
    scanf("%d ", &choice);
    // 입력 버퍼 초기화
    fflush(stdin);
    if (choice != 1 && choice != 2 && choice != 3 && choice != 4) {
    printf("번호를 잘못 입력하셨습니다.");
    }
    } while (choice != 1 && choice != 2 && choice != 3 && choice != 4);

    /*
    입력받은 숫자에 따라 분기
    1 : 등록 -> Insert
    2 : 출력 -> Display
    3 : 삭제 -> Delete
    */
    switch (choice) {
    case 1:
    membershipInsert(ptr);
    break;
    case 2:
    membershipDisplay(ptr->link);
    break;
    case 3:
    membershipDelete(ptr);
    break;
    }


    } while (choice != 4 || (1>choice && choice>4));

    break;
    }
    case 2:
    printf(" 재고 관리 \n");
    printf("=============================================\n");
    printf("1. 회원 관리\n");
    printf("어떤 업무를 보시겠습니까?\n");
    scanf("%d", &choise2);

    break;
    case 3:
    break;
    }
    }
    void membershipInsert(node *ptr) {
    while (ptr->link != NULL)
    ptr = ptr->link;

    ptr->link = (node*)malloc(sizeof(node));
    ptr = ptr->link;

    printf("이름을 입력하시오: ");
    gets_s(ptr->name,14);

    printf("전화번호 입력하시오: ");
    gets_s(ptr->phone,10);

    ptr->link = NULL;
    printf("\n");
    }

    void membershipDelete(node *ptr) {
    node *prev;
    char _phone[14];

    printf("삭제할 전화번호를 선택하시오: ");
    gets_s(_phone,14);

    while (ptr->link != NULL) {
    prev = ptr;
    ptr = ptr->link;

    /* 저장되어 있는 데이터중에서 전화번호를 기준으로 데이터를 삭제 */
    if (strcmp(_phone, ptr->phone) == 0) {
    prev->link = ptr->link;
    free(ptr);
    break;
    }
    }
    return;
    }

    void membershipDisplay(node *ptr) {
    printf("%6s", "이 름");
    printf("%14s\n", "전화번호");

    while (ptr != NULL) {
    printf("%6s", ptr->name);
    printf("%14s", ptr->phone);

    ptr = ptr->link;
    printf("\n");
    }

    printf("\n");
    }
    소스코드를 약간 바꿔서 제 나름대로 이렇게 만들어봤는데 계속 이름 입력이 넘어가네요,,, 버퍼문제인거 같은데 어디서 어떻게 잡아야될지 모르겠습니다
    2016.06.25 12:15 신고
  • 비밀댓글입니다 2016.06.25 12:49
  • Roosio 혹시 추가,삭제,검색하고
    수정까지 추가가 가능할까요??
    수정까지 추가해서 만드려고 해도 잘 안되네요....
    2016.11.25 00:03 신고