우아한 프로그래밍
article thumbnail

1. 소스코드

#include <iostream>
#include <iostream>
#include <vector>
#include <string>
#include <list>


// 어드민 패스워드
#define ADMIN_PSSWORD 1111

// 영화관 크기
#define ROW 5
#define COL 5

using namespace std;

enum UserMenu { MOVIE_SEARCH = 1, RESERVE_LIST, RESERVE, RESERVE_CANCEL, ADMIN_MODE, EXIT };
enum AdminMenu { ADD_MOVIE = 1, DELETE_MOVIE, GO_MAIN};


// 상영관
class Theater {
	private:
	
		int seat[ROW][COL];   // 좌석		
	public:
		int a;
		Theater() {
			for (int i = 0; i < ROW; i++) {
				for (int j = 0; j < COL; j++) {
					seat[i][j] = -1;
				}
			}
		}	

		// 시트정보 세팅
		void setSeat(int v, int row, int col) {
			seat[row][col] = v;
		}

		// 시트정보 조회
		int getSeat(int row, int col) {
			return seat[row][col];
		}

		// 시트정보 출력
		void printSeat() {
			cout << "=========== 스크린 방향 =============\n";
			for (int i = 0; i < ROW; i++) {
				for (int j = 0; j < COL; j++) {
					if (seat[i][j] == -1)  cout << "□";
					else cout << "■";	
					cout << "\t";
				}	
				cout << "\n";
			}
			cout << "===================================\n";
		}
};


// 영화
class Movie {	
	private: 
		int id; // 영화 고유 번호
		string name; // 영화이름
		string genre; // 장르
		Theater theater; // 상영관		
	public:
		Movie(int _id, string _name, string _genre, Theater _theater) {
			id = _id;
			name = _name;
			genre = _genre;			
			theater = _theater;
		}
		int getId() { return id; }
		string getName() { return name; }
		Theater* getTheater() { return &theater; }
		string getGenre() { return genre; }
		Movie() {}			
};


// 영화관
class Cinema {

	private :		
		int genId = 1000; // 발급용 아이디
		list<Movie> movieList; // 영화목록
	public:
	
	Cinema() {}

	// 아이디 생성
	int generateId() {
		return genId++;
	}

	// 타이틀 호출
	void showTitle() {
		cout << "=========== ○○○○ 시네마 영화 예약관리스템 =============\n";
	}

	// 메뉴출력
	void showMenu() {
		cout << "=====================\n";
		cout << "1. 영화검색\n";
		cout << "2. 예약목록\n";
		cout << "3. 예약\n";
		cout << "4. 예약취소\n";
		cout << "5. 관리자모드\n";
		cout << "6. 종료\n";
		cout << "=====================\n";
	}

	// 관리자 메뉴 출력
	void showAdminMenu() {
		cout << "=====================\n";
		cout << "1. 영화추가\n";
		cout << "2. 영화삭제\n";		
		cout << "3. 메인으로\n";
		cout << "=====================\n";
	}

	// 메뉴입력
	int inputMenu() {
		int menuNum = -1;
		cout << "입력 >> ";
		cin >> menuNum;
		return menuNum;
	}

	// 종료
	void _exit() {
		exit(0);
	}

	// 영화검색
	void searchMovie() {
		cout << "( 영화검색 )\n";

		cout << "==================================================\n";
		cout << "고유번호" << "\t\t" << "제목" << "\t\t" << "장르" << "\n";
		
		list<Movie>::iterator it;		
		for (it = movieList.begin(); it != movieList.end(); ++it) {
			cout << it->getId() << "\t\t" << it->getName() << "\t\t" << it->getGenre() << "\n";
		}	
		cout << "--------------------------------------------------\n";
	}

	// 예약조회
	void listReserve(int _tempId) {
		int tempId;
		cout << "( 예약조회 )\n";
		searchMovie();

		if (movieList.size() == 0) {
			cout << "< 상영중인 영화가 없습니다. >\n";
			return;
		}

		if (_tempId == -1) {
			cout << "예약조회 할 영화 고유번호 >> ";
			cin >> tempId;
		}
		else {
			tempId = _tempId;
		}
		


		list<Movie>::iterator it;
		for (it = movieList.begin(); it != movieList.end(); ++it) {
			if (it->getId() == tempId) {
				Theater* theater = it->getTheater();
				(*theater).printSeat();
				break;
			}
		}

	}

	// 예약
	void reserveMovie() {
		int tempId;
		int row, col;
		cout << "( 영화예약 )\n";				
		cout << "예약 할 영화 고유번호 >> ";
		cin >> tempId;
		listReserve(tempId);
		cout << "좌석번호(행^열) >> ";
		cin >> row >> col;

		list<Movie>::iterator it;
		for (it = movieList.begin(); it != movieList.end(); ++it) {
			if (it->getId() == tempId) {
				Theater* theater = it->getTheater();

				if ((*theater).getSeat(row, col) == 1) {
					cout << "이미 예약된 좌석입니다.\n";
					goto EXIT;
				}

				(*theater).setSeat(1, row, col);

				cout << "예약되었습니다.\n";
				break;
			}
		}

		EXIT: NULL;

	}

	// 예약취소
	void reserveCancel() {
		int tempId;
		int row, col;
		cout << "( 예약취소 )\n";
		
		cout << "예약 취소 할 영화 고유번호 >> ";
		cin >> tempId;
		listReserve(tempId);
		cout << "좌석번호(행^열) >> ";
		cin >> row >> col;

		list<Movie>::iterator it;
		for (it = movieList.begin(); it != movieList.end(); ++it) {
			if (it->getId() == tempId) {
				Theater* theater = it->getTheater();

				if ((*theater).getSeat(row, col) == -1) {
					cout << "예약되지 않은 좌석은 취소 할 수 없습니다.\n";
					goto EXIT;
				}

				(*theater).setSeat(-1, row, col);
				cout << "예약취소 되었습니다.\n";
				break;
			}
		}

		EXIT: NULL;
	
	}

	// 영화추가
	void addMovie() {

		string name;
		string genre;

		cout << "( 영화추가 )\n";
		cout << "제목 >> ";
		cin >> name;
		cout << "장르 >> ";
		cin >> genre;		

		Movie movie = Movie(generateId(), name, genre, Theater());

		movieList.push_back(movie);
	}


	// 영화삭제
	void deleteMovie() {
		int tempId;
		cout << "( 영화삭제 )\n";
		searchMovie();
		cout << "삭제 할 영화 고유번호 >> ";
		cin >> tempId;

		list<Movie>::iterator it;
		for (it = movieList.begin(); it != movieList.end(); ++it) {
			if (it->getId() == tempId) {
				movieList.erase(it);
				break;
			}
		}		
	}

	// 관리자 모드
	void changeAdminMode() {
		int password = 0;
		cout << "관리자 암호를 입력 >> ";
		cin >> password;

		if (password != ADMIN_PSSWORD) {
			cout << "패스워드가 일치하지 않습니다.\n";
			return;
		}

		while (true) {

			showAdminMenu();
			int menuNum = inputMenu();
			switch (menuNum) {
			case ADD_MOVIE:
				addMovie();
				break;
			case DELETE_MOVIE:
				deleteMovie();
				break;		
			case GO_MAIN:
				return; break;
			default:
				break;
			}
		}
	}
		
	// 초기화
	void initialize() {

		


		// 타이틀 출력
		showTitle();

		while (true) {

			// 메뉴출력
			showMenu();
			// 사용자로 부터 메뉴 번호 입력받음.
			int menuNum = inputMenu();

			// 메뉴에 따른 메소드 실행
			switch (menuNum)
			{
			case MOVIE_SEARCH:
				searchMovie();
				break;
			case RESERVE_LIST:
				listReserve(-1);
				break;
			case RESERVE:
				reserveMovie();
				break;
			case RESERVE_CANCEL:
				reserveCancel();
				break;
			case ADMIN_MODE:
				changeAdminMode();
				break;
			case EXIT:
				_exit();
				break;
			default:
				break;
			}
		}

	}

};

int main()
{
	Cinema cinema = Cinema();
	cinema.initialize();
}

 

2. 실행화면

profile

우아한 프로그래밍

@자바조아!

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!