지직전기
C++ 이용해 전화번호부 만들기 본문
마찬가지로 C++ 문법 공부하면서 계산기 다음으로 전화번호부 만들어보았습니다.
[테스트 케이스]
전화번호 형식이 아니면 등록 불가
이름, 전화번호 일부(4자리)로 검색
<전체 코드>
#include <iostream> // 파일 입출력
#include <string> //find를 통해 문자열을 비교하여 조건검색하기 위함
using namespace std;
class BookList {
private:
int no;
string name;
string tel;
public:
void setStat(int no, string name, string tel) {
this->no = no;
this->name = name;
this->tel = tel;
}
int getNo() {
return no;
}
string getName() {
return name;
}
string getTel() {
return tel;
}
};
class Menu {
public:
void mainMenu() {
cout << "전화번호부 프로그램입니다." << endl;
cout << "아래 메뉴를 보고 번호를 선택하세요" << endl;
cout << "1.전화번호부 등록" << endl;
cout << "2.전화번호부 조회" << endl;
cout << "3.전화번호부 수정" << endl;
cout << "4.전화번호부 삭제" << endl;
cout << "5.프로그램 종료" << endl;
}
void searchMenu() {
cout << "1.이름 검색" << endl;
cout << "2.전화번호 검색" << endl;
}
};
class Mode {
private:
BookList index[100];
Menu menu1;
int count = 0;
public:
void addList() { // 이름, 전화번호 입력 시 순번 순차자동생성
string name;
string tel;
cout << "전화번호부에 정보를 새로 등록합니다." << endl;
cout << "이름을 입력해주세요" << endl;
cin >> name;
cout << "전화번호를 입력해주세요. (예 : 010-1234-5678)" << endl;
cin >> tel;
index[count++].setStat(count, name, tel);
}
void searchAll() {
for (int i = 0; i < count; i++) {
cout << index[i].getNo() << "|" << index[i].getName() << "|" << index[i].getTel() << endl;
}
}
void searchName() {
int i = 0;
string subName;
//string subTel;
cout << "검색할 이름를 입력해주세요." << endl;
cin >> subName;
while (i <= 100) {
if (
index[i].getName().find(subName) != string::npos) {
cout << index[i].getNo() << "|" << index[i].getName() << "|" << index[i].getTel() << endl;
i++;
continue;
}
i++;
}
cout << "검색이 완료되었습니다." << endl;
}
void searchTEL() {
int i = 0;
string subTel;
cout << "검색할 전화번호를 입력해주세요." << endl;
cin >> subTel;
while (i <= 100) {
if (
index[i].getTel().find(subTel) != string::npos) {
cout << index[i].getNo() << "|" << index[i].getName() << "|" << index[i].getTel() << endl;
i++;
continue;
}
i++;
}
cout << "검색이 완료되었습니다." << endl;
}
void searchList() {
int select;
cout << "1.전체 조회 2.조건 검색(이름, 전화번호)" << endl;
cin >> select;
switch (select) {
case 1: searchAll();
break;
case 2: menu1.searchMenu();
cin >> select;
switch (select) {
case 1:searchName();
break;
case 2:searchTEL();
break;
default:
cout << "올바른 숫자를 입력해주세요." << endl;
break;
}
break;
default:
cout << "올바른 숫자를 입력해주세요." << endl;
break;
}
}// 1. 전체조회 2. 조건 검색
void updateList() {
int updateNum;
string updateName;
string updateTel;
searchAll(); // 수정할 목록을 선택하기 위한 전체목록출력
cout << "수정할 목록 번호를 입력해주세요" << endl;
cin >> updateNum;
cout << "이름을 입력해주세요" << endl;
cin >> updateName;
cout << "전화번호를 입력해주세요. (예 : 010-1234-5678)" << endl;
cin >> updateTel;
index[updateNum - 1].setStat(updateNum, updateName, updateTel);
cout << "수정이 완료되었습니다." << endl;
} // 순번 입력 후 이름 전화번호 바꾸면 수정
void deleteList() {
int deleteNum;
searchAll();
cout << "삭제할 목록 번호를 입력해주세요" << endl;
cin >> deleteNum;
for (int i = deleteNum - 1; i < count - 1; i++) {
index[i] = index[i + 1];
}
count--; // 항목 개수 감소
cout << "삭제가 완료되었습니다." << endl;
} // 순번 입력 시 해당 목록 삭제
};
int main() {
Mode telbook;
Menu menu;
int select;
while (1) {
menu.mainMenu();
cin >> select;
switch (select) {
case 1: telbook.addList();
break;
case 2: telbook.searchList();
break;
case 3: telbook.updateList();
break;
case 4: telbook.deleteList();
break;
case 5: cout << "프로그램을 종료합니다" << endl;
return 0;
default:
cout << "올바른 번호를 입력해주세요" << endl;
break;
}
}
}
'STUDY > C, C++' 카테고리의 다른 글
| [Socket] send()와 recv()는 1:1 매핑일까? feat 네이글알고리즘 (3) | 2024.09.07 |
|---|---|
| TCP를 이용한 채팅서버 구축 #1 소켓 프로그래밍 이론(TCP/UDP) (1) | 2024.09.06 |
| C++을 이용해 계산기 프로그램 만들기 (0) | 2024.09.06 |