반응형
기능 명세서
- 두 가지 클래스 구현
- PhoneBook
- 연락처 배열
- 최대 8개의 연락처 저장 가능. 9번째 연락처를 추가하려고 하면 가장 오래된 연락처를 새 연락처로
- 동적 할당
- Contact
- 전화번호부 연락처를 나타냄.
- PhoneBook
전화번호부 → PhoneBook 클래스의 인스턴스로 인스턴스화 되어야함.
연락처도 마찬가지, 각각은 Contact 클래스의 인스턴스로 인스턴스화 되어야함. 클래스는 자유롭게 디자인 but 클래스 내에서 사용되는 것 모든 것 비공개
main.cpp
#include "PhoneBook.hpp"
int main(void)
{
PhoneBook phoneBook;
std::string temp;
while (1)
{
phoneBook.startUp();
std::getline(std::cin, temp);
if (std::cin.eof())
{
std::cout << "EOF meet finish" << std::endl;
return (0);
}
if (temp == "ADD")
phoneBook.addInfo();
else if (temp == "SEARCH")
{
if (phoneBook.getSize() == 0)
{
std::cout << "Nothing Added. Add First\\n";
continue;
}
phoneBook.showInfo();
phoneBook.showDetail();
}
else if (temp == "EXIT")
{
std::cout << "Program EXIT" << "\\n";
return (0);
}
}
}
ADD
- ADD: 새 연락처 저장
- 사용자가 명령 입력 → 새 연락처 정보를 한 번에 한 필드씩 입력하는 메시지 표시. 모든 필드 완성 → 전화번호부 추가
- 연락처 필드 → 이름, 성, 별명, 전화번호 및 가장 어두운 비밀 → 저장된 연락처 → 빈 필드 x
void PhoneBook::addInfo()
{
if (this->size == 8)
setContactInfo(true);
else if (setContactInfo(false))
{
this->size++;
}
}
bool PhoneBook::Emptystring(Contact contact)
{
if (contact.getFirstName() == "" || contact.getLastName() == "")
return (true);
if (contact.getNickName() == "" || contact.getPhoneNumber() == "")
return (true);
if (contact.getDarkestSecret() == "")
return (true);
return (false);
}
// 만약 배배열 8이 다 차면 제일 마지막 꺼 없애고 추가
bool PhoneBook::setContactInfo(bool isFull)
{
std::string str;
Contact contact;
int index = this->size;
std::cout << "First Name : ";
std::getline(std::cin, str);
contact.setFirstName(str);
std::cout << "Last Name : ";
std::getline(std::cin, str);
contact.setLastName(str);
std::cout << "Nick Name : ";
std::getline(std::cin, str);
contact.setNickName(str);
std::cout << "Phone Number : ";
std::getline(std::cin, str);
contact.setPhoneNumber(str);
std::cout << "Darkest Secret : ";
std::getline(std::cin, str);
contact.setDarkestSecret(str);
if (!Emptystring(contact))
{
if (isFull)
{
for (int i = 1; i < this->size; i++)
{
this->contact[i - 1].setAllContact(this->contact[i]);
}
index = 7;
}
this->contact[index].setFirstName(contact.getFirstName());
this->contact[index].setLastName(contact.getLastName());
this->contact[index].setNickName(contact.getNickName());
this->contact[index].setPhoneNumber(contact.getPhoneNumber());
this->contact[index].setDarkestSecret(contact.getDarkestSecret());
return true;
}
else
{
std::cout << "Empty string\\n";
return (false);
}
}
SEARCH
- SEARCH: 특정 연락처 표시
- 저장된 연락처를 색인, 이름, 성, 별명의 4개 열 목록으로 표시
- 각 열의 너비는 10자여아함, ‘|’로 구분됨 → 텍스트는 오른쪽 정렬, 텍스트가 열보다 긴 경우 텍스트를 잘라서 표시 가능한 문자를 ‘.’으로 바꿔야 한다.
- 그런 다음 표시할 항목의 색인을 사용자에게 다시 묻는 메시지 표시해야함. → 인덱스가 범위를 벗어나거나 잘못딘 경우 관련 동작 정의 그렇지 않으면 연락처 종보를 한줄에 하나씩 표시.
void PhoneBook::showInfo()
{
std::cout << "============================================="
<< "\\n";
std::cout << "|" << std::setw(10) << "index"
<< "|" << std::setw(10) << "first name"
<< "|";
std::cout << std::setw(10) << "last name"
<< "|" << std::setw(10) << "nick name"
<< "|"
<< "\\n";
std::cout << "---------------------------------------------"
<< "\\n";
for (int i = 0; i < this->size; i++)
{
std::string firstName = this->contact[i].getFirstName();
std::string lastName = this->contact[i].getLastName();
std::string nickName = this->contact[i].getNickName();
if (firstName.length() > 10)
firstName.replace(9, firstName.length() - 9, ".");
if (lastName.length() > 10)
lastName.replace(9, lastName.length() - 9, ".");
if (nickName.length() > 10)
nickName.replace(9, nickName.length() - 9, ".");
std::cout << "|";
std::cout << std::setw(10) << i + 1 << "|";
std::cout << std::setw(10) << firstName << "|";
std::cout << std::setw(10) << lastName << "|";
std::cout << std::setw(10) << nickName << "|";
std::cout << "\\n";
}
std::cout << "---------------------------------------------"
<< "\\n";
}
EXIT
- EXIT : 프로그램이 종료되고 연락처가 영원히 손실
- 다른 입력은 모두 삭제됨. 명령이 올바르게 실행되면 프로그램은 다른 명령을 기다림.
[42SEOUL] CPP Module 00
Preview 저번 미니쉘을 끝으로 42서울의 과제 중 반정도를 끝냈다고 할 수 있을 것이다. 이제부터는 c++을 사용할 수 있고, norminette를 신경쓰지 않고 코딩을 할 수 있게 되었다 !! 잘가라 norminette, 어
woongtech.tistory.com
반응형
'42Seoul > CPP Module 00' 카테고리의 다른 글
ex00 (0) | 2023.12.01 |
---|