지직전기

C++ 이용해 전화번호부 만들기 본문

STUDY/C, C++

C++ 이용해 전화번호부 만들기

MSH103 2024. 9. 6. 02:41

마찬가지로 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;
		}
	}
}