C++

[C++] 명품 C++ 프로그래밍 실습문제 8장 9번

Hs’s Coding vlog 2023. 1. 13. 16:52

[C++]명품 C++ 프로그래밍 실습문제 8장 9번

[C++]명품 C++ programming 실습문제 8장 9번

명품 C++ 프로그래밍실습문제/연습문제 /C++

헤더파일과 cpp 파일을 따로 만들어 두었습니다. 잘활용하시길 바랍니다~

 

//header.cpp

#include"header.h"
#include<iostream>
using namespace std;

 
int Console::select_menu() {
    cout << "예약:1, 취소:2, 보기:3, 끝내기:4>> "; 
    int menu;
    cin >> menu;
    return menu;
}
 
int Console::select_time(){
    cout << "07시:1, 12시:2, 17시:3>> ";
    int time;
    cin >> time;
    return time;
}
 
int Console::input_seat_num() {
    cout << "좌석 번호>> ";
    int seat_num;
    cin >> seat_num;
    if(seat_num < 1 || 8 < seat_num){
        cout << "없는 좌석 번호 입니다. 처음 메뉴로 돌아갑니다.\n";
        return 0;
    }
    return seat_num;
}
 
string Console::input_name() {
    cout << "이름 입력>> ";
    string name;
    cin >> name;
    return name;
}

//header.h

#ifndef HEADER_H
#define HEADER_H
using namespace std;
#include <iostream>
class Console{
public:    
    static int select_menu();
    static int select_time();
    static int input_seat_num();
    static string input_name();
};
 
class Seat{
    string name;
public:
    Seat() { name = {"---"}; }
    void set_name(string name) { this->name = name; }
    void reset_name() { name = {"---"}; }
    string show_name() { return name; }
    
};
 

 
 

#endif

//header1.cpp

#include "header.h"
#include    "header1.h"
#include<iostream>
using namespace std;

void AirlineBook::start(){
    while(1){
        menu = Console::select_menu();
        if(menu == 1 || menu == 2){
            time = Console::select_time();
            if(menu == 1){
                switch (time){
                    case 1:{    
                        schedule[0].show_schedule();
                        int seat_num = Console::input_seat_num();
                        if(seat_num == 0)
                            break;
                        string person_name = Console::input_name();
                        schedule[0].set_resv(seat_num, person_name);
                        break;
                    }
                    case 2:{
                        schedule[1].show_schedule();
                        int seat_num = Console::input_seat_num();
                        if(seat_num == 0)
                            break;
                        string person_name = Console::input_name();
                        schedule[1].set_resv(seat_num, person_name);
                        break;
                    }
                    case 3:{
                        schedule[2].show_schedule();
                        int seat_num = Console::input_seat_num();
                        if(seat_num == 0)
                            break;
                        string person_name = Console::input_name();
                        schedule[2].set_resv(seat_num, person_name);
                        break;
                    }
                    case 4:
                        cout << "잘못 선택하셨습니다. 처음 메뉴로 돌아갑니다.\n"; 
                }
            }
            else {
                switch (time){
                    case 1:{
                        schedule[0].show_schedule();
                        int seat_num = Console::input_seat_num();
                        if(seat_num == 0)
                            break;
                        string person_name = Console::input_name();
                        schedule[0].cancel_resv(seat_num,person_name);
                        break;
                    }
                    case 2:{
                        schedule[1].show_schedule();
                        int seat_num = Console::input_seat_num();
                        if(seat_num == 0)
                            break;
                        string person_name = Console::input_name();
                        schedule[1].cancel_resv(seat_num,person_name);
                        break;
                    }
                    case 3:{
                        schedule[2].show_schedule();
                        int seat_num = Console::input_seat_num();
                        if(seat_num == 0)
                            break;
                        string person_name = Console::input_name();
                        schedule[2].cancel_resv(seat_num,person_name);
                        break;
                    }
                    case 4:
                        cout << "잘못 선택하셨습니다. 처음 메뉴로 돌아갑니다.\n"; 
                }
            }
        }
        else if(menu == 3){
            for(int i=0; i<3; i++){
                schedule[i].show_schedule();
            }
        }
        else if(menu == 4){
            cout << "예약 시스템을 종료합니다.";
            exit(0);
        }
        else {
            cout << "잘못 입력하셨습니다. 메뉴를 다시 선택해 주세요.\n"; 
        }
        cout << endl; 
    }
}

//header1.h

#ifndef HEADER1_H
#define HEADER1_H
using namespace std;
#include <iostream>
#include "header.h"
#include "header1.h"
#include "header2.h"
class AirlineBook{
    Schedule *schedule;
    int menu;
    int time;
public:
    AirlineBook(){ 
        schedule = new Schedule[3]; 
        schedule[0].set_scname("07");
        schedule[1].set_scname("12");
        schedule[2].set_scname("17");
    }
    ~AirlineBook(){ delete [] schedule; }
    void start();
};
#endif

//header2.cpp

#include"header.h"
#include "header.h"
#include "header1.h"
#include "header2.h"
#include<iostream>
using namespace std;
void Schedule::show_schedule(){
    cout << this->scname << "시:"; 
    for(int i=0; i<8; i++)
        cout << "\t" << seat[i].show_name();
    cout << endl;
} 
 
void Schedule::set_resv(int seat_num, string person_name){
    if(seat[seat_num-1].show_name() != "---")
        cout << "이미 예약된 자리입니다. 처음 메뉴로 돌아갑니다.\n";
    else seat[seat_num-1].set_name(person_name);
}
 
void Schedule::cancel_resv(int seat_num,string person_name){
    if(seat[seat_num-1].show_name() == "---"){
        cout <<  "이미 비어있는 자리입니다. 처음 메뉴로 돌아갑니다.\n";
        return;
    }
    if(seat[seat_num-1].show_name() != person_name){
        cout << "예약된 이름과 일치하지 않습니다. 처음 메뉴로 돌아갑니다.\n";
        return;
    }
    seat[seat_num-1].reset_name();
}

//header2.h

#ifndef HEADER2_H
#define HEADER2_H
using namespace std;
#include <iostream>
#include "header.h"
#include "header1.h"
#include "header2.h"
class Schedule{
    Seat *seat;
    string scname;
    int seat_num;
    string person_name;
public:
    Schedule(){ seat = new Seat[8]; }
    ~Schedule() { delete [] seat; }
    void set_scname(string scname){ this->scname = scname; }
    void show_schedule();
    void set_resv(int seat_num, string person_name);
    void cancel_resv(int seat_num, string person_name);
};

#endif

//main.cpp

#include<iostream>
using namespace std;
 
#include"header.h"
#include"header1.h"
#include"header2.h"

 
int main() {
    AirlineBook *air = new AirlineBook();
    cout << "***** 한성항공에 오신것을 환영합니다 *****\n\n";
    air->start();
    delete air;
}