반응형
개요
이번에는 C++의 class를 활용한 간단한 비행기 예약 프로그래밍을 개발해 보도록 하겠습니다.
필요한 조건
// 비행기 예약 프로그램
// 목적 여러 개의 클래스와 객체들 생성 연습
// -클래스 사이의 상속관계는 없다. 해도 그만 안 해도 그만인 경우
// -항공사이름 "연세 항공"
// 좌석이 10개 좌석을 가진 비행기 4대
// 서울 ~ 대구 단일구간
// 운행 횟수: 06, 12, 20 조건 : 같은 사람이 같은 비행기를 예약할 수 없음
// 예약은 구간예약
// 예약 : 비행시간, 사용자 이름, 좌석 번호
// 취소 : 비행시간, 사용자이름, 좌석 번호
// 출력 : 예약된 좌석 상황
// 클래스A : 각 비행기마다 스케줄 객체 생성 3개
// 스케줄 클래스 : 하나의 스케줄 생성 : 10 좌석 예약, 취소, 출력
// 좌석클래스 :하나 좌석을 구현하는 클래스 (예약자 저장, 좌석에 대한 예약 취소)
// 메뉴 출력 클래스 ( 좌석선택메뉴, 시간 메뉴, 비행기 선택...... 메뉴 보여주기 기능)
코드
#include <iostream>
#include <string.h>
using namespace std;
// 비행기 예약 프로그램
// 목적 여러 개의 클래스와 객체들 생성 연습
// -클래스 사이의 상속관계는 없다. 해도그만 안해도 그만인 경우
// -항공사이름 "연세항공"
// 좌석이 10개 좌석을 가진 비행기 4대
// 서울 ~ 대구 단일구간
// 운행 횟수: 06, 12, 20 조건 : 같은 사람이 같은 비행기를 예약 할 수 없음
// 예약은 구간예약
// 예약 : 비행시간, 사용자이름, 좌석 번호
// 취소 : 비행시간, 사용자이름, 좌석 번호
// 출력 : 예약된 좌석 상황
// 클래스A : 각 비행기마다 스케줄 객체 생성 3개
// 스케줄 클래스 : 하나의 스케줄 생성 : 10좌석 예약,취소,출력
// 좌석클래스 :하나좌석을 구현하는 클래스 (예약자 저장, 좌석에 대한 예약취소)
// 메뉴 출력 클래스 ( 좌석선택메뉴, 시간메뉴, 비행기선택...... 메뉴 보여주기 기능)
class Menu {
public:
static int sche_show();
static int seat_show();
static string reservation_name();
static int show();
static int Air_show();
};
int Menu::Air_show() {
cout << "-------------------------------------" << endl;
cout << "1~3번 까지의 비행기 중 하나를 선택하시오." << endl;
cout << "-------------------------------------" << endl;
int in;
cin >> in;
return in;
}
int Menu::show() {
cout << "--------------------------------------" << endl;
cout << " 1. 예약" << endl;
cout << " 2. 예약 취소" << endl;
cout << " 3. 예약 현황" << endl;
cout << " 4. 종료" << endl;
cout << "--------------------------------------" << endl;
int in;
cin >> in;
return in;
}
int Menu::sche_show(){
int in;
cout << "-------------------------------------" << endl;
cout << "1. 06시 " << endl;
cout << "2. 12시 " << endl;
cout << "3. 18시 " << endl;
cout << "-------------------------------------" << endl;
cin >> in;
return in;
}
int Menu::seat_show() {
int in;
cout << "-------------------------------------" << endl;
cout << "1~10번 까지의 좌석 번호를 입력하시오." << endl;
cout << "-------------------------------------" << endl;
cin >> in;
return in;
}
string Menu::reservation_name() {
string s;
cout << "-------------------------------------" << endl;
cout << "예약자의 이름을 입력 하시오." << endl;
cout << "-------------------------------------" << endl;
cin >> s;
return s;
}
class Seat {
string name;
int number;
public:
Seat() {
set_name(" -----");
set_number(number);
}
string get_name() {
return name;
}
void set_name(string name) {
this->name = name;
}
void set_number(int number) {
this->number = number;
}
int get_number() {
return number;
}
};
class Schedule {
int time;
Seat* se;
public:
Schedule(int time) {
se = new Seat[10];
this->time = time;
}
~Schedule() {
delete[] se;
}
void show_reserve() {
cout << "\t\t" << time <<"시 비행기" << endl<<endl;
for (int i = 0; i < 10; i++) {
se[i].set_number(i + 1);
cout <<se[i].get_number()<<"."<<se[i].get_name() << " ";
}
cout << endl;
}
string get_get_name() {
return se->get_name();
}
void set_Time(int time) {
this->time = time;
}
void reserve(int number,string name) {
se[number - 1].set_name(name);
}
void cancle(int number, string name) {
se[number - 1].set_name(" Empty");
}
};
class AirPlane {
int number;
Schedule* sche1,* sche2,* sche3;
public:
AirPlane(int number) {
this->number = number;
sche1 = new Schedule(06);
sche2 = new Schedule(12);
sche3 = new Schedule(18);
}
~AirPlane() { delete[] sche1, sche2, sche3; }
void reserved(int time) {
if (time == 1) {
sche1->show_reserve();
int seat_number = Menu::seat_show();
string name = Menu::reservation_name();
string name2 = sche1->get_get_name();
if (name != name2) {
sche1->reserve(seat_number, name);
}
else {
cout << "예약자 이름이 중복 되었습니다!" << endl;
}
}
else if (time == 2) {
sche2->show_reserve();
int seat_number = Menu::seat_show();
string name = Menu::reservation_name();
string name2 = sche1->get_get_name();
if (name != name2) {
sche2->reserve(seat_number, name);
}
else {
cout << "예약자 이름이 중복 되었습니다!" << endl;
}
}
else if (time == 3) {
sche3->show_reserve();
int seat_number = Menu::seat_show();
string name = Menu::reservation_name();
string name2 = sche1->get_get_name();
if (name != name2) {
sche3->reserve(seat_number, name);
}
else {
cout << "예약자 이름이 중복 되었습니다!" << endl;
}
}
}
void cancle(int time) {
if (time == 1) {
sche1->show_reserve();
int seat_number = Menu::seat_show();
string name = Menu::reservation_name();
sche1->cancle(seat_number, name);
}
else if (time == 2) {
sche2->show_reserve();
int seat_number = Menu::seat_show();
string name = Menu::reservation_name();
sche2->cancle(seat_number, name);
}
else if (time == 3) {
sche3->show_reserve();
int seat_number = Menu::seat_show();
string name = Menu::reservation_name();
sche3->cancle(seat_number, name);
}
}
void show_Info() {
sche1->show_reserve();
sche2->show_reserve();
sche3->show_reserve();
}
};
int main() {
cout << "\t\t\t\t\t\t" << "연세 항공에 오신걸 환영 합니다" << endl;
cout << "\t\t\t\t\t\t" << "서울 - 제주 운행중입니다" << endl;
AirPlane* a[3];
for (int i = 0; i < 3; i++) {
a[i] = new AirPlane(i+1);
}
while (1) {
int Menu_number = Menu::show();
if (Menu_number == 1) {
int Air_number = Menu::Air_show();
cout << "\t\t" << Air_number << "번 비행기를 선택하셨습니다." << endl;
int sche_number = Menu::sche_show();
if (sche_number == 1) {
a[Air_number -1]->reserved(sche_number);
}
else if (sche_number == 2) {
a[Air_number - 1]->reserved(sche_number);
}
else if (sche_number == 3) {
a[Air_number - 1]->reserved(sche_number);
}
}
else if (Menu_number == 2) {
int Air_number = Menu::Air_show();
cout << "\t\t" << Air_number << "번 비행기를 선택하셨습니다." << endl;
int sche_number = Menu::sche_show();
if (sche_number == 1) {
a[Air_number - 1]->cancle(sche_number);
}
else if (sche_number == 2) {
a[Air_number - 1]->cancle(sche_number);
}
else if (sche_number == 3) {
a[Air_number - 1]->cancle(sche_number);
}
}
else if (Menu_number == 3) {
for (int i = 0; i < 4; i++) {
cout <<"\t\t"<< i + 1 << "번 비행기 예약 현황" << endl << endl;;
a[i]->show_Info();
cout << "----------------------------------------------" << endl;
}
}
else if (Menu_number == 4) {
break;
}
else {
cout << "다른 값을 입력 하셨습니다" << endl;
}
}
}
반응형
'알고리즘 & 자료구조 > C++' 카테고리의 다른 글
C++ (클래스와 파일,백터를 이용한 Hangman Game) (0) | 2020.05.13 |
---|---|
C++ (클래스와 생성자를 이용한 몬스터 게임) (0) | 2020.04.26 |
C++ (클래스와 백터를 이용한Hangman Game) (0) | 2020.04.24 |
C++ (기본 C언어 문법을 이용한 숫자 맞추기 게임) (0) | 2020.04.09 |