반응형

개요

 

이번에는 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;
		}
	}
}

 


 

반응형

+ Recent posts