๐ [CH2/04] C++ Summary
๐ [Notion] C++ Summary
๐ ์๊ฐ ์ด๋ฆ์ผ๋ก ๊ฒ์, ๋์ฌ, ๋ฐ๋ฉ ๊ธฐ๋ฅ ์ถ๊ฐ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๐ BookManager โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ - vector<Book> books โ
โ โ
โ + addBook(title, author) โ
โ + displayAllBooks() โ
โ + searchBookByTitle(title) โ
โ + rentBookByTitle(title) โ โโ ์ ์ ์
๋ ฅ: y/n โ ๋์ฌ ์์ฒญ
โ + returnBookByTitle(title) โ โโ ์ ์ ์
๋ ฅ: y/n โ ๋ฐ๋ฉ ์์ฒญ
โ + searchBookByAuthor(author) โ โโ ์ ์ ์
๋ ฅ: y/n โ ๋์ฌ ์์ฒญ
โ + rentBookByAuthor(author) โ โโ ์ ์ ์
๋ ฅ: y/n โ ๋์ฌ ์์ฒญ
โ + returnBookByAuthor(author) โ โโ ์ ์ ์
๋ ฅ: y/n โ ๋ฐ๋ฉ ์์ฒญ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๐ Book โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ - string title โ
โ - string author โ
โ - int stock = 3 โ
โ โ
โ + rentBook() โ bool โ โโ ์ฌ๊ณ ๊ฐ์ (๋์ฌ ์ฑ๊ณต/์คํจ ๋ฐํ)
โ + returnBook() โ โโ ์ฌ๊ณ ์ฆ๊ฐ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
#include <iostream>
#include <vector>
#include <string>
using namespace std; // namespace std ์ฌ์ฉ
class Book
{
public:
string title;
string author;
int stock; // ์ฑ
์ฌ๊ณ
Book(const string& title, const string& author)
: title(title), author(author), stock(3) {} // ์์ฑ์ ์ด๊ธฐํ ๋ฆฌ์คํธ
// ๋์ฌ ๊ธฐ๋ฅ
bool rentBook()
{
if (stock > 0) // ์ฌ๊ณ ์์ผ๋ฉด ๋์ฌ ๊ฐ๋ฅ
{
stock--; // ๋์ฌ ์ ์ฌ๊ณ 1๊ถ ๊ฐ์
return true;
}
return false; // ์ฌ๊ณ ์์ผ๋ฉด ๋์ฌ ๋ถ๊ฐ
}
// ๋ฐ๋ฉ ๊ธฐ๋ฅ
void returnBook()
{
stock++; // ๋ฐ๋ฉ ์ ์ฌ๊ณ 1๊ถ ์ฆ๊ฐ
}
};
class BookManager
{
private:
vector<Book> books; // ์ฑ
๋ชฉ๋ก ์ ์ฅ
public:
// ์ฑ
์ถ๊ฐ ๋ฉ์๋
// ์ฑ
์ ๋ชฉ, ์ ์๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์
// ๋ฌธ์์ด ์์์ ์ฐธ์กฐ๋ก ๋ฐ์ -> ๊ฐ ๋ณ๊ฒฝ ๋ฐฉ์ง, ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ
void addBook(const string& title, const string& author)
{
books.push_back(Book(title, author)); // push_back ์ฌ์ฉํด ์ฑ
์ถ๊ฐ
cout << "์ฑ
์ด ์ถ๊ฐ๋์์ต๋๋ค: " << title << " by " << author << endl;
}
// ๋ชจ๋ ์ฑ
์ถ๋ ฅ ๋ฉ์๋
void displayAllBooks() const
{
if (books.empty())
{
cout << "ํ์ฌ ๋ฑ๋ก๋ ์ฑ
์ด ์์ต๋๋ค." << endl;
return;
}
// ์ฑ
๋ชฉ๋ก ์ถ๋ ฅ
cout << "ํ์ฌ ๋์ ๋ชฉ๋ก:" << endl;
for (size_t i = 0; i < books.size(); i++) // ์ผ๋ฐ์ ์ธ for๋ฌธ ์ฌ์ฉ
{
cout << "- " << books[i].title << " by " << books[i].author << endl;
}
}
// ์ฑ
์ ๋ชฉ์ผ๋ก ๊ฒ์
// ์ฑ
์ ๋ชฉ ๊ธธ์ด ๊ธธ์๋ ์์ผ๋๊น ์ฐธ์กฐ๋ก ๊ฐ์ ธ์ด
void searchBookByTitle(const string& title)
{
// ์ฑ
์ ์ฐพ์๋์ง ์๋์ง๋ฅผ ๋๊น์ง ํ์ธํด์ผ ํ๊ธฐ ๋๋ฌธ
// for๋ฌธ ์์์ ์กฐ๊ฑด์ด ๋ง๋ ์ฑ
์ ํ ๊ถ๋ ๋ชป ์ฐพ์ ๊ฒฝ์ฐ
// "์ฐพ์ ์ ์์ต๋๋ค" ๋ฉ์์ง๋ฅผ ์ถ๋ ฅ
bool found = false; // ์์ง ์ฑ
์ ๋ชป ์ฐพ์ ์ํ
// size_t ๋ฒกํฐ์ ์์ ์ ์ฉ.
// books.size()๋ books์ ๋ค์ด์๋ ์์(์ฑ
)์ ๊ฐ์๋ฅผ ๋ฐํํ๋ ํจ์
for (size_t i = 0; i < books.size(); i++)
{
if (books[i].title == title) // i๋ฒ์งธ ์ฑ
์ ๋ชฉ์ด ๋ด๊ฐ ์ฐพ๋ ์ ๋ชฉ๊ณผ ์ผ์น
{
cout << "์ฑ
์ ๋ชฉ: " << books[i].title << " ์๊ฐ: " << books[i].author;
cout << " ์ฌ๊ณ : " << books[i].stock << "๊ถ" << endl;
found = true; // for๋ฌธ ๋๋ฉด์ ์ฑ
์ฐพ์ผ๋ฉด true
break;
}
}
if (!found)
{
cout << "ํด๋น ์ ๋ชฉ์ ์ฑ
์ ์ฐพ์ ์ ์์ต๋๋ค." << endl;
}
}
// ์๊ฐ๋ก ๊ฒ์
void searchBookByAuthor(const string& author)
{
bool found = false;
for (size_t i = 0; i < books.size(); i++)
{
if (books[i].author == author)
{
cout << "- " << books[i].title << " (์ฌ๊ณ : " << books[i].stock << "๊ถ)" << endl;
found = true;
}
}
if (!found)
{
cout << "ํด๋น ์๊ฐ์ ์ฑ
์ ์ฐพ์ ์ ์์ต๋๋ค." << endl;
}
}
// ๋์ฌ (์ ๋ชฉ ๋จผ์ , ์์ผ๋ฉด ์๊ฐ๋ก ์ฐพ๊ธฐ)
void rentBookByTitleOrAuthor(const string& input)
{
// 1. ์ ๋ชฉ์ผ๋ก ๋จผ์ ์ฐพ๊ธฐ
for (size_t i = 0; i < books.size(); i++)
{
if (books[i].title == input)
{
if (books[i].rentBook())
cout << "์ฑ
'" << books[i].title << "' ๋์ฌ๊ฐ ์๋ฃ๋์์ต๋๋ค." << endl;
else
cout << "์ฑ
'" << books[i].title << "'์ ๋์ฌํ ์ ์์ต๋๋ค." << endl;
return;
}
}
// 2. ์ ๋ชฉ์ผ๋ก ๋ชป ์ฐพ์์ผ๋ฉด โ ์๊ฐ ์ด๋ฆ์ผ๋ก ์ฐพ๊ธฐ
for (size_t i = 0; i < books.size(); i++)
{
if (books[i].author == input)
{
if (books[i].rentBook())
cout << "์๊ฐ '" << books[i].author << "'์ ์ฑ
'" << books[i].title << "' ๋์ฌ ์๋ฃ๋์์ต๋๋ค." << endl;
else
cout << "์๊ฐ '" << books[i].author << "'์ ์ฑ
์ ๋์ฌํ ์ ์์ต๋๋ค." << endl;
return;
}
}
cout << "ํด๋น ์ ๋ชฉ ๋๋ ์๊ฐ์ ์ฑ
์ ์ฐพ์ ์ ์์ต๋๋ค." << endl;
}
// ๋ฐ๋ฉ
void returnBookByTitleOrAuthor(const string& input)
{
// 1. ์ ๋ชฉ์ผ๋ก ๋จผ์ ์ฐพ๊ธฐ
for (size_t i = 0; i < books.size(); i++)
{
if (books[i].title == input)
{
books[i].returnBook();
cout << "์ฑ
'" << books[i].title << "'์ด ๋ฐ๋ฉ๋์์ต๋๋ค." << endl;
return;
}
}
// 2. ์ ๋ชฉ์ผ๋ก ๋ชป ์ฐพ์์ผ๋ฉด โ ์๊ฐ ์ด๋ฆ์ผ๋ก ์ฐพ๊ธฐ
for (size_t i = 0; i < books.size(); i++)
{
if (books[i].author == input)
{
books[i].returnBook();
cout << "์๊ฐ '" << books[i].author << "'์ ์ฑ
'" << books[i].title << "'์ด ๋ฐ๋ฉ๋์์ต๋๋ค." << endl;
return;
}
}
cout << "ํด๋น ์ ๋ชฉ ๋๋ ์๊ฐ์ ์ฑ
์ ์ฐพ์ ์ ์์ต๋๋ค." << endl;
}
};
int main()
{
// ๊ฐ์ฒด ์์ฑ
BookManager manager;
// ๋์๊ด ๊ด๋ฆฌ ํ๋ก๊ทธ๋จ์ ๊ธฐ๋ณธ ๋ฉ๋ด๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์ถ๋ ฅํ์ฌ ์ฌ์ฉ์ ์
๋ ฅ์ ์ฒ๋ฆฌํฉ๋๋ค.
// ํ๋ก๊ทธ๋จ ์ข
๋ฃ๋ฅผ ์ ํํ๊ธฐ ์ ๊น์ง ๊ณ์ ๋์ํฉ๋๋ค.
while (true)
{
// ์ฝ์์ฐฝ ์ถ๋ ฅ ๋ด์ฉ ํด๋ฆฐ
system("cls");
cout << "\n๋์๊ด ๊ด๋ฆฌ ํ๋ก๊ทธ๋จ" << endl;
cout << "1. ์ฑ
์ถ๊ฐ" << endl; // ์ฑ
์ ๋ณด๋ฅผ ์
๋ ฅ๋ฐ์ ์ฑ
๋ชฉ๋ก์ ์ถ๊ฐ
cout << "2. ๋ชจ๋ ์ฑ
์ถ๋ ฅ" << endl; // ํ์ฌ ์ฑ
๋ชฉ๋ก์ ์๋ ๋ชจ๋ ์ฑ
์ถ๋ ฅ
cout << "3. ์ ๋ชฉ์ผ๋ก ์ฑ
๊ฒ์" << endl;
cout << "4. ์๊ฐ ์ด๋ฆ์ผ๋ก ์ฑ
๊ฒ์" << endl;
cout << "5. ์ฑ
๋์ฌ" << endl;
cout << "6. ์ฑ
๋ฐ๋ฉ" << endl;
cout << "7. ์ข
๋ฃ" << endl; // ํ๋ก๊ทธ๋จ ์ข
๋ฃ
cout << "์ ํ: ";
int choice; // ์ฌ์ฉ์์ ๋ฉ๋ด ์ ํ์ ์ ์ฅ
cin >> choice; // 1 ์
๋ ฅํ๋ฉด cin์ด \n ์ฒ๋ฆฌ ๋ชปํด์ ๋จ์์์ (์์ฌ ๋ฒํผ)
cin.ignore(); // ์ด์ ์
๋ ฅ์ ์์ฌ ๋ฒํผ(\n)๋ฅผ ์ ๊ฑฐ -> ์๋ก์ด ์
๋ ฅ ๋ฐ์ ์ค๋น
if (choice == 1)
{
// 1๋ฒ ์ ํ: ์ฑ
์ถ๊ฐ
// ์ฌ์ฉ์๋ก๋ถํฐ ์ฑ
์ ๋ชฉ๊ณผ ์ ์๋ช
์ ์
๋ ฅ๋ฐ์ BookManager์ ์ถ๊ฐํฉ๋๋ค.
string title, author; // ์ฑ
์ ๋ชฉ, ์ ์ฅ๋ช
์ ์ฅํ ๋ณ์ ์ ์ธ
cout << "์ฑ
์ ๋ชฉ: ";
getline(cin, title); // ์ ๋ชฉ ์
๋ ฅ (๊ณต๋ฐฑ ํฌํจ) ๋ฐ์ title์ ์ ์ฅ
cout << "์ฑ
์ ์: ";
getline(cin, author); // ์ ์๋ช
์
๋ ฅ (๊ณต๋ฐฑ ํฌํจ) ๋ฐ์ author์ ์ ์ฅ
manager.addBook(title, author); // ์
๋ ฅ๋ฐ์ ์ฑ
์ ๋ณด๋ฅผ ์ถ๊ฐ
}
else if (choice == 2)
{
// 2๋ฒ ์ ํ: ๋ชจ๋ ์ฑ
์ถ๋ ฅ
// ํ์ฌ BookManager์ ์ ์ฅ๋ ์ฑ
๋ชฉ๋ก์ ์ถ๋ ฅํฉ๋๋ค.
manager.displayAllBooks();
}
else if (choice == 3)
{
// 3๋ฒ ์ ํ: ์ ๋ชฉ์ผ๋ก ์ฑ
๊ฒ์
string title;
cout << "์ฑ
์ ๋ชฉ: ";
getline(cin, title);
manager.searchBookByTitle(title);
}
else if (choice == 4)
{
// 4๋ฒ ์ ํ: ์๊ฐ ์ด๋ฆ์ผ๋ก ์ฑ
๊ฒ์
string author;
cout << "์๊ฐ ์ด๋ฆ: ";
getline(cin, author);
manager.searchBookByAuthor(author);
}
else if (choice == 5)
{
string input;
cout << "์ฑ
์ ๋ชฉ ๋๋ ์๊ฐ ์ด๋ฆ: ";
getline(cin, input);
manager.rentBookByTitleOrAuthor(input);
}
else if (choice == 6)
{
string input;
cout << "์ฑ
์ ๋ชฉ ๋๋ ์๊ฐ ์ด๋ฆ: ";
getline(cin, input);
manager.returnBookByTitleOrAuthor(input);
}
else if (choice == 7)
{
// 7๋ฒ ์ ํ: ์ข
๋ฃ
// ํ๋ก๊ทธ๋จ์ ์ข
๋ฃํ๊ณ ์ฌ์ฉ์์๊ฒ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
cout << "ํ๋ก๊ทธ๋จ์ ์ข
๋ฃํฉ๋๋ค." << endl;
break; // while ๋ฃจํ ์ข
๋ฃ
}
else
{
// ์๋ชป๋ ์
๋ ฅ ์ฒ๋ฆฌ
// ๋ฉ๋ด์ ์๋ ๋ฒํธ๋ฅผ ์
๋ ฅํ์ ๊ฒฝ์ฐ ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
cout << "์๋ชป๋ ์
๋ ฅ์
๋๋ค. ๋ค์ ์๋ํ์ธ์." << endl;
}
// Press any key
system("pause");
}
return 0; // ํ๋ก๊ทธ๋จ ์ ์ ์ข
๋ฃ
}
book.rentBook(); // ์ฑ
๋ด๋ถ์์ ์ฌ๊ณ ๊ฐ์
book.returnBook(); // ์ฑ
๋ด๋ถ์์ ์ฌ๊ณ ์ฆ๊ฐ
size_t๋ ์์ ์ ์ ์ ์ฉ ํ์
(๋ฐฐ์ด ์ธ๋ฑ์ค๋ ํฌ๊ธฐ์ ์ ํฉ)vector.size() ๊ฐ์ ๊ฒฐ๊ณผ๋ size_t ํ์
์for (size_t i = 0; i < books.size(); i++)
bool found = false;
...
if (!found) cout << "์ฐพ์ ์ ์์ต๋๋ค";
(์ด ์ฝ๋์์ ๊ตฌํ ์ ํจ)
Book* ptr = nullptr;if (ptr == nullptr) ๋๋ if (!ptr)์ฌ์ฉ์๊ฐ ์ ๋ชฉ์ธ์ง ์๊ฐ์ธ์ง ๊ตฌ๋ถ ์์ด ์
๋ ฅ
โ ๋จผ์ ์ ๋ชฉ์ผ๋ก ์ฐพ๊ณ ์์ผ๋ฉด ์๊ฐ๋ก ์ฐพ์
void rentBookByTitleOrAuthor(const string& input);
void returnBookByTitleOrAuthor(const string& input);
string input;
getline(cin, input);
manager.rentBookByTitleOrAuthor(input);
์ฝ์์ฐฝ ์ถ๋ ฅ ๋ด์ฉ ๊นจ๋ํ๊ฒ ํด์ค
Press any key
void ํจ์๋ ์ธ์ ์ฐ๋๊ฐ?returnBook() โ ์ฌ๊ณ ๋ง ๋๋ฆฌ๊ณ ๊ฒฐ๊ณผ๋ ๋ฐ๋ก ๋ฐํํ์ง ์์// ๋ฐ๋ฉ ๊ธฐ๋ฅ
void returnBook() // โ
์ฌ๊ธฐ
{
stock++; // ๋ฐ๋ฉ ์ ์ฌ๊ณ 1๊ถ ์ฆ๊ฐ
}
return;์ ์ ์ฐ๋๊ฐ?return;์ผ๋ก ์ข
๋ฃ void rentBookByTitleOrAuthor(const string& input)
{
for (size_t i = 0; i < books.size(); i++)
{
if (books[i].title == input)
{
if (books[i].rentBook())
cout << "์ฑ
'" << books[i].title << "' ๋์ฌ๊ฐ ์๋ฃ๋์์ต๋๋ค." << endl;
else // โ
์ฌ๊ธฐ
cout << "์ฑ
'" << books[i].title << "'์ ๋์ฌํ ์ ์์ต๋๋ค." << endl;
return; // โ
์ฌ๊ธฐ
}
}
else๋ ์ฑ
์ ๋ชป ์ฐพ์์ ๋?if (rentBook()) ๋ค์์ else๋ ์ฑ
์ ์ฐพ์์ง๋ง ๋์ฌ ์คํจ(์ฌ๊ณ ์์)์ผ ๋ ์คํ๋จcout << "ํด๋น ์ ๋ชฉ ๋๋ ์๊ฐ์ ์ฑ
์ ์ฐพ์ ์ ์์ต๋๋ค." << endl;
books๋ vector<Book>books[i]: i๋ฒ์งธ Book ๊ฐ์ฒดbooks[i].author: i๋ฒ์งธ ์ฑ
์ ์๊ฐmanager.returnBookByTitleOrAuthor(input); ์์ .์ ์๋ฏธ.๋ ๊ฐ์ฒด์ *๋ฉค๋ฒ ํจ์๋ ๋ณ์์ ์ ๊ทผํ ๋ ์ฌ์ฉmanager๊ฐ BookManager ๊ฐ์ฒด๋ฉด, ๊ทธ ์์ ํจ์๋ฅผ ํธ์ถํ๋ ์๋ฏธmain() ํจ์ ์์์ ์์ฑํด์ ์ฌ์ฉํจmain()์ผ ํ์์์ด ํจ์ ์์์ ์ง์ ๋ง๋ ๊ฐ์ฒด๋ ๋ฌด์กฐ๊ฑด ์คํ์ ์ ์ฅ๋จnew ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด๋ ํ ๋ฉ๋ชจ๋ฆฌ์ ์์ฑ๋จBookManager* manager = new BookManager(); // ํ์ ์์ฑ๋จ
์ง์ delete๋ก ์ง์์ผ ํจ
new๋ ์ด๋์ ์ฐ๋ ํ์ ์์ฑ๋จ (main ์์ด๋ , ํด๋์ค ์์ด๋ ์๊ด์์)
| ์ด๋์? | ์ด๋ป๊ฒ ์ ์ฅ๋จ? |
|---|---|
main() ์ | ์คํ ๋ฉ๋ชจ๋ฆฌ |
| ๋ค๋ฅธ ํจ์ ์ | ์คํ ๋ฉ๋ชจ๋ฆฌ |
| ํด๋์ค ์์ ์ง์ญ ๋ณ์ | ์คํ ๋ฉ๋ชจ๋ฆฌ |
new ์ฌ์ฉ | ํ ๋ฉ๋ชจ๋ฆฌ |