AddressListing

 

#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;

struct LISTING
{
 char name[31];
 char phone[16];
};

const int MAX_SIZE = 53;
void buildList(LISTING phoneList[], int& last);
void searchList(LISTING phoneList[], int last);
bool seqSearch(LISTING list[], int last, char* target, int& locn);

int main()
{
 LISTING phoneList[MAX_SIZE];
 int last;
 cout << "전화번호부 시작" << endl;
 last = MAX_SIZE - 1;
 buildList(phoneList, last);
 searchList(phoneList, last);
 cout << "전화번호부 끝" << endl;
 return 0;
}

void buildList(LISTING phoneList[], int& last)
{
 ifstream fsPhoneNums;
 int i;
 fsPhoneNums.open("in.txt");
 if(!fsPhoneNums)
 {
  cout << "전화번호 파일을 열 수 없습니다." << endl;
  exit(100);
 }
 i = 0;
 while((i <= last) && (!(fsPhoneNums.eof())))
 {
  fsPhoneNums.getline(phoneList[i].name,
   sizeof(phoneList[0].name), ';');
  fsPhoneNums.getline(phoneList[i].phone,
   sizeof(phoneList[0].phone));
  cout << phoneList[i].name << ";" << phoneList[i].phone << endl;
  i++;
 }
 last = i - 1; // 실질 인덱스
 fsPhoneNums.close();
}
void searchList(LISTING phoneList[], int last)
{
 char srchName[31];
 char more;
 bool found;
 int locn;
 do
 {
  cout << "이름 입력 : ";
  cin>>srchName;
  found = seqSearch(phoneList, last, srchName, locn);
  if(found)
  {
   cout << phoneList[locn].name << "("<< locn <<")" << phoneList[locn].phone << endl;
  }
  else
  {
   cout << srchName << " 은 찾을 수 없는 이름입니다." << endl;
  }
  cout << "다른 번호도 찾을까요? ( Y/N )";
  cin >> more;
 }
 while(more == 'Y' || more == 'y');
}

bool seqSearch(LISTING list[], int last, char* target, int& locn)
{
 int looker = 0;
 while(looker < last && strcmp(strupr(target), strupr(list[looker].name)) != 0)
 {
  looker++;
 }
 locn = looker;
 return(strcmp(strupr(target), strupr(list[looker].name)) == 0);
}

// strupr = 대소문자 변환해서 구분 가능 (소문자)
// strlwr = 대소분자 변환해서 구분 가능 (대문자)

블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,