[CH2/04] solution

๊น€์—ฌ์šธยท2025๋…„ 6์›” 13์ผ

๋‚ด์ผ๋ฐฐ์›€์บ ํ”„

๋ชฉ๋ก ๋ณด๊ธฐ
22/139

[CH2/04] C++ Summary

๐Ÿ“Ž [CH2/04] C++ Summary
๐Ÿ“Ž [Notion] C++ Summary

์š”๊ตฌ์‚ฌํ•ญ

ํ•„์ˆ˜ ๊ธฐ๋Šฅ

  • ์ œ๋ชฉ, ์ž‘๊ฐ€๋กœ ์ฑ… ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅ

๋„์ „ ๊ธฐ๋Šฅ

  • ๋Œ€์—ฌ ๊ธฐ๋Šฅ
    • ์ฑ… ์ œ๋ชฉ, ์ž‘๊ฐ€ ์ด๋ฆ„์œผ๋กœ ๋Œ€์—ฌ ์—ฌ๋ถ€ ๊ฒ€์ƒ‰ ํ›„
    • ๋Œ€์—ฌ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ ๋Œ€์—ฌํ•  ์ˆ˜ ์žˆ๊ฒŒ
  • ๋ฐ˜๋‚ฉ ๊ธฐ๋Šฅ
  • ์žฌ๊ณ  3๊ถŒ ๋™์ผ โ†’ int stock; / stock(3)

๐Ÿ“Œ ์ž‘๊ฐ€ ์ด๋ฆ„์œผ๋กœ ๊ฒ€์ƒ‰, ๋Œ€์—ฌ, ๋ฐ˜๋‚ฉ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚          ๐Ÿ“š 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; // ํ”„๋กœ๊ทธ๋žจ ์ •์ƒ ์ข…๋ฃŒ
}


๊ตฌํ˜„ ๊ธฐ๋Šฅ ์ •๋ฆฌ

๋Œ€์—ฌ ๊ธฐ๋Šฅ๊ณผ ๋ฐ˜๋‚ฉ ๊ธฐ๋Šฅ์€ class Book์— ์ถ”๊ฐ€

  • ์ฑ… ์žฌ๊ณ ๋Š” ์ฑ…์ด ์ง์ ‘ ๊ด€๋ฆฌํ•ด์•ผ ํ•จ (์บก์Аํ™”)
  • class Book : ์ฑ… ํ•œ ๊ถŒ์˜ ์ •๋ณด (์ฑ… ์ œ๋ชฉ, ์ž‘๊ฐ€, ์žฌ๊ณ )
    • rentBook()๊ณผ returnBook()์€ ์ฑ…์˜ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ
    • rentBook()์—์„œ ์žฌ๊ณ  ํ™•์ธ & ์ฐจ๊ฐ, returnBook()์—์„œ ์žฌ๊ณ  ์ฆ๊ฐ€
  • BookManager : ์—ฌ๋Ÿฌ ์ฑ… ๊ด€๋ฆฌ
    • ์ฑ…์„ ์ฐพ๊ณ , ์œ ์ € ์ž…๋ ฅ์„ ๋ฐ›์•„์„œ Book์— ๋Œ€์—ฌ or ๋ฐ˜๋‚ฉ ์š”์ฒญ์„ ์ „๋‹ฌ
book.rentBook();  // ์ฑ… ๋‚ด๋ถ€์—์„œ ์žฌ๊ณ  ๊ฐ์†Œ
book.returnBook();  // ์ฑ… ๋‚ด๋ถ€์—์„œ ์žฌ๊ณ  ์ฆ๊ฐ€

size_t

  • size_t๋Š” ์–‘์˜ ์ •์ˆ˜ ์ „์šฉ ํƒ€์ž… (๋ฐฐ์—ด ์ธ๋ฑ์Šค๋‚˜ ํฌ๊ธฐ์— ์ ํ•ฉ)
  • vector.size() ๊ฐ™์€ ๊ฒฐ๊ณผ๋Š” size_t ํƒ€์ž…์ž„
for (size_t i = 0; i < books.size(); i++)
  • ์—ฌ๊ธฐ์„œ i๋Š” "๋ฐฐ์—ด"์ด ์•„๋‹ˆ๋ผ "๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋กœ ์“ฐ๋Š” ๋ณ€์ˆ˜"

bool found = false;

  • ์ฑ…์„ ์ฐพ์•˜๋Š”์ง€ ์•„๋‹Œ์ง€๋ฅผ ๋๊นŒ์ง€ ํ™•์ธํ•ด์•ผํ•จ
  • for๋ฌธ ์•ˆ์—์„œ ์กฐ๊ฑด์ด ๋งž๋Š” ์ฑ…์„ ํ•œ ๊ถŒ๋„ ๋ชป ์ฐพ์€ ๊ฒฝ์šฐ "์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค" ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅ
bool found = false;
...
if (!found) cout << "์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค";

nullptr

(์ด ์ฝ”๋“œ์—์„  ๊ตฌํ˜„ ์•ˆ ํ•จ)

  • ํฌ์ธํ„ฐ๊ฐ€ ์•„๋ฌด๊ฒƒ๋„ ์•ˆ ๊ฐ€๋ฆฌํ‚ฌ ๋•Œ ์“ฐ๋Š” ๊ฐ’
  • Book* ptr = nullptr;
  • ๋น„๊ตํ•  ๋• if (ptr == nullptr) ๋˜๋Š” if (!ptr)

์ œ๋ชฉ ๋˜๋Š” ์ž‘๊ฐ€ ํ•˜๋‚˜๋งŒ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌ

์‚ฌ์šฉ์ž๊ฐ€ ์ œ๋ชฉ์ธ์ง€ ์ž‘๊ฐ€์ธ์ง€ ๊ตฌ๋ถ„ ์—†์ด ์ž…๋ ฅ
โ†’ ๋จผ์ € ์ œ๋ชฉ์œผ๋กœ ์ฐพ๊ณ  ์—†์œผ๋ฉด ์ž‘๊ฐ€๋กœ ์ฐพ์Œ

void rentBookByTitleOrAuthor(const string& input);
void returnBookByTitleOrAuthor(const string& input);
  • main ํ•จ์ˆ˜์—์„œ cin์œผ๋กœ ํ•˜๋‚˜๋งŒ ์ž…๋ ฅ๋ฐ›๊ณ  ์ฒ˜๋ฆฌ
string input;
getline(cin, input);
manager.rentBookByTitleOrAuthor(input);
  • title์ด๋‚˜ author ์ค‘ ๋ฌด์—‡์ด๋“  ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ์–ด์„œ ์ค‘๋ฆฝ์ ์ธ ์ด๋ฆ„ ์‚ฌ์šฉ
  • ๋‘ ๊ฐœ ๋ฐ›์„ ๊ฑฐ๋ฉด title, author๋กœ ๋ถ„๋ฆฌํ•ด์„œ ๋ฐ›๋Š” ๊ฒŒ ๋งž์Œ

system("cls");

์ฝ˜์†”์ฐฝ ์ถœ๋ ฅ ๋‚ด์šฉ ๊นจ๋—ํ•˜๊ฒŒ ํ•ด์คŒ

system("pause");

Press any key

void ํ•จ์ˆ˜๋Š” ์–ธ์ œ ์“ฐ๋Š”๊ฐ€?

  • ํ•จ์ˆ˜ ์•ˆ์—์„œ ์ถœ๋ ฅ๊นŒ์ง€ ์ฒ˜๋ฆฌํ•˜๊ณ , ๋Œ๋ ค์ค„(return) ๊ฐ’์ด ์—†์„ ๋•Œ ์‚ฌ์šฉ
  • (์˜ˆ) 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๋Š” ์ฑ…์€ ์ฐพ์•˜์ง€๋งŒ ๋Œ€์—ฌ ์‹คํŒจ(์žฌ๊ณ  ์—†์Œ)์ผ ๋•Œ ์‹คํ–‰๋จ
  • ์ฑ… ์ž์ฒด๋ฅผ ๋ชป ์ฐพ์•˜์„ ๋•Œ๋Š” โ†’ for๋ฌธ ๋‹ค ๋Œ๊ณ  ๋‚˜์„œ ๋”ฐ๋กœ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ
cout << "ํ•ด๋‹น ์ œ๋ชฉ ๋˜๋Š” ์ž‘๊ฐ€์˜ ์ฑ…์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค." << endl;

books[i].author ์—์„œ i์˜ ์˜๋ฏธ

  • 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 ์‚ฌ์šฉํž™ ๋ฉ”๋ชจ๋ฆฌ

0๊ฐœ์˜ ๋Œ“๊ธ€