티스토리 뷰
대학에 와서 처음으로 혼자 짰던 프로그램으로 기억된다. ㅎㅎㅎ
지금와서 다시 보면 그때 혼자서 열심히 짜보려고 했던게 기억난다. 지금의 내가 저때와 비교해서 얼마나 코딩실력이 향상되었는지는 잘 모르겠다 ( 제자리 걸음일지도... )
아마 관련학과에서 C수업을 듣는 사람들은 많이 받게 되는 과제중에 하나라고 생각이 된다.
어디다가 내놓기도 좀 그런 소스지만 누군가에게는 도움이 될꺼라 생각하고... ^^
/* 주소록 공간 수 설정 (기본값 50) */
#define NUM 50
/* 헤더파일 */
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
/* 전역함수 Mark 선언(입력되지 않은 공간의 첫번째를 가리키도록 한다) */
int mark=0;
/* 구조체 ( 이름, 생년월일, 연락처, 주소 ) */
typedef struct _book{
char name[10];
char birth[10];
char phone[20];
char address[50];
} abook;
/* NUM으로 정의된 수만큼 주소록 공간 생성 */
abook book[NUM];
/* input 함수 */
void input(void){
if(mark == NUM) { /* 주소록이 꽉 찼는지 확인 */
printf("저장공간이 꽉 찼습니다.\n");
return; /* 꽉 찬 경우 함수 종료 */
}
printf("입력 후 엔터 ^^\n\n");
printf("이름을 입력하세요 : ");
gets(book[mark].name);
printf("\n생년월일을 입력하세요 : ");
gets(book[mark].birth);
printf("\n연락처를 입력하세요 : ");
gets(book[mark].phone);
printf("\n주소를 입력하세요 : ");
gets(book[mark].address);
printf("\n*** 입력이 완료되었습니다 ***\n\n");
mark++; /* 전역함수 mark를 1만큼 증가시켜 현재 자료를 입력한 다음번째 배열을 가리키도록 함 */
}
/* delete 함수 */
void del(void){
int del_mark;
int del_select;
int check = 0;
char del_name[10];
char del_phone[20];
printf("1.이름으로 삭제\n2.연락처로 삭제\n(주의:중복되는 데이터는 같이 삭제됩니다)\n===:");
del_select = getche();
switch(del_select){
case '1':
printf("\n삭제할 이름을 입력하세요 : ");
gets(del_name);
for(del_mark = 0 ; del_mark < mark ; del_mark++) /* 입력받았던 값들에서 */
{
if(strcmp(del_name,book[del_mark].name)==0) /* 이름일치 검색 */
{
int drive;
check++; /* 중복되는 데이터가 있는지 알기위해 check++ */
for(drive = del_mark ; drive < (mark-1) ; drive++){ /* 해당하는 배열의 뒤배열에서 앞으로 1칸씩 이동 */
strcpy(book[drive].name,book[drive+1].name);
strcpy(book[drive].birth,book[drive+1].birth);
strcpy(book[drive].phone,book[drive+1].phone);
strcpy(book[drive].address,book[drive+1].address);
}
mark--; /* 삭제된 데이터만큼 현재 가리키는 배열 주소를 앞으로 */
}
}
if ( check == 0 ){
printf("\n삭제할 내용이 없습니다.\n");
}
else {
printf("\n*** %d개의 데이터가 삭제되었습니다. ***\n",check);
}
break;
case '2':
printf("\n삭제할 연락처를 입력하세요 : ");
gets(del_phone);
for(del_mark = 0 ; del_mark < (mark-1) ; del_mark++) /* 입력받았던 값들에서 */
{
if(strcmp(del_phone,book[del_mark].phone)==0) /* 연락처 일치 검색 */
{
int drive;
check++; /* 중복되는 데이터가 있는지 알기위해 check++ */
for(drive = del_mark ; drive < mark ; drive++){ /* 해당하는 배열의 뒤배열에서 앞으로 1칸씩 이동 */
strcpy(book[drive].name,book[drive+1].name);
strcpy(book[drive].birth,book[drive+1].birth);
strcpy(book[drive].phone,book[drive+1].phone);
strcpy(book[drive].address,book[drive+1].address);
}
mark--; /* 삭제된 데이터만큼 현재 가리키는 배열 주소를 앞으로 */
}
}
if ( check == 0 ) {
printf("\n삭제할 내용이 없습니다.\n");
}
else {
printf("\n*** %d개의 데이터가 삭제되었습니다. ***\n",check);
}
break;
default:
printf("\n잘못된 입력입니다.\n");
}
}
/* search함수 */
void search(void){
int search_mark;
int check = 0;
int search_select;
char search_name[10];
char search_phone[20];
printf("1.이름으로 찾기\n2.연락처로 찾기\n===: ");
search_select = getche();
switch(search_select){
case '1':
printf("\n찾는 사람의 이름을 입력하세요 : ");
gets(search_name);
for(search_mark = mark-1 ; search_mark > -1 ; search_mark--){ /* 마지막 입력받은 데이터부터 처음까지 검색 */
if(strcmp(search_name,book[search_mark].name)==0){ /* 일치하는 데이터를 찾아 출력 */
check++; /* 몇명이나 찾았는지 알기위해 check++ */
printf("\n이름 : %s\n생년월일 : %s\n연락처 : %s\n주소 : %s\n",book[search_mark].name,book[search_mark].birth,book[search_mark].phone,book[search_mark].address);
}
}
if (check == 0)
printf("\n검색 결과가 없습니다.\n");
else
printf("\n*** %d개의 데이터가 검색되었습니다. ***\n",check);
return;
case '2':
printf("\n찾는 사람의 연락처를 입력하세요 : ");
gets(search_phone);
for(search_mark = mark-1 ; search_mark > -1 ; search_mark--){ /* 마지막 입력받은 데이터부터 처음까지 검색 */
if(strcmp(search_phone,book[search_mark].phone)==0){ /* 일치하는 데이터를 찾아 출력 */
check++; /* 몇명이나 찾았는지 알기위해 check++ */
printf("\n이름 : %s\n생년월일 : %s\n연락처 : %s\n주소 : %s\n",book[search_mark].name,book[search_mark].birth,book[search_mark].phone,book[search_mark].address);
}
}
if (check == 0)
printf("\n검색된 결과가 없습니다.\n");
else
printf("\n*** %d개의 데이터가 검색되었습니다. ***\n",check);
return;
default:
printf("\n잘못된 입력입니다.\n");
}
}
/* main함수 시작 */
int main(void){
int action;
/* 무한루프 - 종료를 선택할 때까지 무한히 반복된다 */
while(1){
/* 메뉴 화면 출력 */
printf("\n=-=-=-주소록 프로그램 by.MSH-=-=-=\n");
printf("***********************************\n");
printf("1.삽입\n");
printf("2.삭제\n");
printf("3.검색\n");
printf("4.종료\t\t남은 저장공간 : %d\n",NUM-mark);
printf("***********************************\n");
printf("원하는 기능을 선택하세요(1-4) : ");
/* Action값 받음 */
action = getche();
/* Action값에 따른 Switch문 */
switch(action){
case '1':
system("cls"); /* 화면을 깨끗이 지운다 */
input();
break;
case '2':
system("cls");
del();
break;
case '3':
system("cls");
search();
break;
case '4':
printf("\n\n\nby - Crio\n\n\n");
return 0;
default:
system("cls");
printf("\n잘못된 입력입니다. 다시 입력해 주세요.\n");
}
}
return 0;
}
'Study > C/C++' 카테고리의 다른 글
알파벳 빈도수 검출 두번째 (0) | 2009.05.01 |
---|---|
알파벳 빈도수 검출 (0) | 2009.05.01 |
볼링점수 계산 (0) | 2009.04.28 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Everybody lies
- Windows Phone 7
- Google App Engine
- palindrome
- 호주
- sparse matrix
- 가상화폐
- 골드코스트
- jetbrains
- MCTS
- macdrive
- CTP
- 영랩
- startmenu
- 바이올렛에버가든
- redis-server
- 구글트렌드
- MCITP
- 모두 거짓말을 한다
- my book live
- 시작버튼
- udacity
- 암호화폐
- .dess
- AIMP3
- redis
- crackit
- minidlna
- windows 2008 server
- 비트코인
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함