저번에 작업하던 영화 예매 프로그램 중간과정의 마지막 단계인 영화 티켓 예매 파트를 완성했고, 코드가 난잡하게 널려있던 부분을 정리했다.
불필요한 필드 및 메소드는 모두 주석 처리를 했다.
1. 상영관 관리 프로그램 O
2. 영화 상영일정 관리 프로그램 O
3. 영화 티켓 예매 프로그램 O
이로써 완성~
예외처리 할게 널려있지만 일단은 정상적으로 입력시 정확히 작동하는 것을 확인했다.
아래는 각 클래스의 소스코드.
ps. 영화 예매 관리 프로그램에서 예매시 유저를 구분할 수 있는 고유 넘버는 10000으로 시작해서 유저가 추가 될 때마다 +1 씩 고유 넘버가 증가한다.
/*ID:20132071 DATE:2019-05-11*/
package myPackage;
public class Screen
{
private String name;
private int rowNum;
private int seatNum;
public Screen(String name, int rowNum, int seatNum)
{
this.name = name;
this.rowNum = rowNum;
this.seatNum = seatNum;
}
@Override
public String toString()
{
return "Screen [name=" + name + ", rowNum=" + rowNum + ", seatNum=" + seatNum + "]";
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public int getRowNum()
{
return rowNum;
}
public void setRowNum(int rowNum)
{
this.rowNum = rowNum;
}
public int getSeatNum()
{
return seatNum;
}
public void setSeatNum(int seatNum)
{
this.seatNum = seatNum;
}
}
/*ID:20132071 DATE:2019-05-11*/
package myPackage;
import java.util.Scanner;
public class ScreenManager
{
private Screen[] screens;
private int maxCount;
private int count;
public ScreenManager(int maxCount)
{
this.maxCount = maxCount;
this.screens = new Screen[maxCount];
count = 0;
}
public void add()
{
String name = null;
int rowNum = 0, seatNum = 0;
Scanner s = new Scanner(System.in);
if (count == maxCount)
{
System.out.println("상영 가능한 스크린 수가 모두 차있습니다.");
} else
{
System.out.print("상영관 명칭 : ");
name = s.next();
System.out.print("좌석 열수 : ");
rowNum = s.nextInt();
System.out.print("한열의 좌석수 : ");
seatNum = s.nextInt();
System.out.println("# " + name + "이 생성되었습니다.");
System.out.println();
screens[count] = new Screen(name, rowNum, seatNum);
count++;
}
}
public void list()
{
for (int i = 0; i < count; i++)
{
System.out.println(
screens[i].getName() + "[" + screens[i].getRowNum() + "열 / " + screens[i].getSeatNum() + "좌석]");
}
System.out.println();
}
// public void get()
// {
//
// }
public void remove()
{
Scanner s = new Scanner(System.in);
System.out.print("삭제할 상영관 명칭? ");
String input = s.next();
boolean isfound = false;
for (int i = 0; i < count; i++)
{
if (input.equals(screens[i].getName()))
{
System.out.println("# " + input + "이 삭제되었습니다.");
for (int j = i; j < count; j++)
{
screens[j] = screens[j + 1];
}
isfound = true;
count--;
break;
}
}
if (!isfound)
{
System.out.println("삭제할 상영관 명칭이 잘못 된 것 같습니다. 다시 시도해주세요.");
}
System.out.println();
}
public void screenManagerMain()
{
Scanner s = new Scanner(System.in);
int input = -999;
while (input != -1)
{
System.out.print("상영관 메뉴 (1.등록, 2.목록, 3.삭제, 0.메인메뉴) >> ");
input = s.nextInt();
switch (input)
{
case 1:
add();
break;
case 2:
list();
break;
case 3:
remove();
break;
case 0:
input = -1;
break;
default:
System.out.println("입력오류입니다.");
break;
}
}
}
public Screen[] getScreens()
{
if (count == 0)
{
return null;
}
return screens;
}
public void setScreens(Screen[] screens)
{
this.screens = screens;
}
public int getMaxCount()
{
return maxCount;
}
public void setMaxCount(int maxCount)
{
this.maxCount = maxCount;
}
public int getCount()
{
return count;
}
public void setCount(int count)
{
this.count = count;
}
}
/*ID:20132071 DATE:2019-05-11*/
package myPackage;
public class Movie
{
private String title;
private String openDate;
private int playtime;
private String grade;
public Movie(String title, String openDate, int playtime, String grade)
{
this.title = title;
this.openDate = openDate;
this.playtime = playtime;
this.grade = grade;
}
public String getTitle()
{
return title;
}
public void setTitle(String title)
{
this.title = title;
}
public String getOpenDate()
{
return openDate;
}
public void setOpenDate(String openDate)
{
this.openDate = openDate;
}
public int getPlaytime()
{
return playtime;
}
public void setPlaytime(int playtime)
{
this.playtime = playtime;
}
public String getGrade()
{
return grade;
}
public void setGrade(String grade)
{
this.grade = grade;
}
}
/*ID:20132071 DATE:2019-05-11*/
package myPackage;
public class MovieTimetable
{
private Movie movie;
private Screen screen;
private String[] times;
public MovieTimetable(Movie movie, Screen screen, int count)
{
this.movie = movie;
this.screen = screen;
times = new String[count];
}
public void addTime(String t)
{
times = t.split(" ");
}
public void showTime()
{
for (int i = 0; i < times.length; i++)
{
System.out.print(times[i] + " ");
}
}
public Movie getMovie()
{
return movie;
}
public void setMovie(Movie movie)
{
this.movie = movie;
}
public Screen getScreen()
{
return screen;
}
public void setScreen(Screen screen)
{
this.screen = screen;
}
public String[] getTimes()
{
return times;
}
public void setTimes(String[] times)
{
this.times = times;
}
}
/*ID:20132071 DATE:2019-05-11*/
package myPackage;
import java.util.Scanner;
public class TimetableManager
{
private MovieTimetable[] table;
private ScreenManager sm;
private int pos;
public TimetableManager(int n)
{
table = new MovieTimetable[n];
pos = 0;
}
public void add()
{
Scanner s = new Scanner(System.in);
String title, openDate, grade;
int playtime = 0;
Screen sc[] = sm.getScreens();
Movie m = null;
int select = 0;
int mArrayCnt = 1;
title = openDate = grade = null;
while (true)
{
if (sc == null)
{
System.out.println("등록된 상영관이 없습니다. 최소한 하나의 상영관을 등록해주세요.");
return;
}
// 처음 등록 시 조건의 if문
if (pos == 0)
{
System.out.println("**현재 등록된 영화가 없습니다.");
} else
{
Movie mArray[] = new Movie[pos];
for (int i = 0; i < pos; i++)
{
if (i == 0)
{
mArray[i] = table[i].getMovie();
}
if (i > 0)
{
if (!table[i - 1].getMovie().getTitle().equals(table[i].getMovie().getTitle()))
{
mArray[i] = table[i].getMovie();
mArrayCnt++;
}
}
}
for (int i = 0; i < mArrayCnt; i++)
{
System.out.println("[" + (i + 1) + "] " + mArray[i].getTitle() + " " + mArray[i].getOpenDate());
}
System.out.print("0을 입력하면 새로운 영화 등록 선택번호 입력하면 원하는거 등록 : ");
select = s.nextInt();
if (select != 0)
{
m = mArray[select - 1];
}
// 영화 목록 여기서 출력하고 선택을함. 혹은 0
}
// 처음 등록이 아닐 때
if (select == 0)
{
System.out.print("영화제목 : ");
title = s.next();
System.out.print("개봉일 : ");
openDate = s.next();
System.out.print("상영시간 : ");
playtime = s.nextInt();
System.out.print("등급 : ");
grade = s.next();
m = new Movie(title, openDate, playtime, grade);
System.out.println("**신규 영화(" + title + ")가 등록되었습니다.");
}
String temp = null;
boolean isFound = false;
int k = 0;
while (true)
{
System.out.print("상영관 : ");
temp = s.next();
if (!temp.equals("#"))
{
// 예외 처리 및 검색 시작
for (int i = 0; i < pos; i++)
{
if (table[i].getScreen().getName().equals(temp))
{
System.out.println("**" + table[i].getScreen().getName() + "은 이미 상영일정이 등록되어 있습니다.");
isFound = true;
break;
}
}
if (isFound)
{
isFound = false;
continue;
}
for (k = 0; k < sm.getCount(); k++)
{
if (sc[k].getName().equals(temp))
{
break;
}
}
if (k == sm.getCount())
{
System.out.println("**" + temp + "는 미등록된 상영관입니다.");
continue;
}
// 예외 처리 및 검색 끝
} else
{
break;
}
s.nextLine();
System.out.print("상영일정 : ");
temp = s.nextLine();
String timeNumbering[] = temp.split(" ");
table[pos] = new MovieTimetable(m, sc[k], timeNumbering.length);
table[pos].addTime(temp);
pos++;
System.out.println("**상영일정 등록이 완료되었습니다.");
}
// 정렬 알고리즘
for (int i = 0; i < pos - 1; i++)
{
for (int j = 0; j < pos - 1 - i; j++)
{
if (table[j].getMovie().getTitle().compareTo(table[j + 1].getMovie().getTitle()) > 0)
{
//System.out.println("i = " + i + "j = " + j + "pos = " + pos + " ");
MovieTimetable temp1 = table[j];
table[j] = table[j + 1];
table[j + 1] = temp1;
}
}
}
System.out.println();
break;
}
}
public void list()
{
int i = 0;
String name = "";
String isEqualName = null;
int firstNumbering = 1;
while (true)
{
if (i == pos)
break;
isEqualName = table[i].getMovie().getTitle();
if (!name.equals(isEqualName))
{
System.out.print("[" + firstNumbering + "]");
System.out.println(table[i].getMovie().getTitle());
name = table[i].getMovie().getTitle();
firstNumbering++;
}
System.out.print(table[i].getScreen().getName() + " : ");
table[i].showTime();
System.out.println();
i++;
}
System.out.println();
}
public void remove()
{
Scanner s = new Scanner(System.in);
String title = null;
String name = null;
boolean isFound = false;
System.out.print("삭제할 영화제목 ? ");
title = s.next();
System.out.print("삭제할 영화관 ? ");
name = s.next();
for (int i = 0; i < pos; i++)
{
if (table[i].getMovie().getTitle().equals(title) && table[i].getScreen().getName().equals(name))
{
for (int j = i; j < pos; j++)
{
table[j] = table[j + 1];
}
System.out.println(title + "의 " + name + "상영일정이 삭제되었습니다.");
isFound = true;
pos--;
break;
}
}
if (!isFound)
{
System.out.println("영화 제목 또는 영화관의 명칭이 일치하지 않아서 삭제하지 못하였습니다. 다시 시도해주세요.");
}
System.out.println();
}
public void TimetableManagerMain(ScreenManager sm)
{
this.sm = sm;
if (sm.getCount() == 0)
{
System.out.println("최소한 하나의 상영관을 등록하십시오.");
return;
}
Scanner s = new Scanner(System.in);
int input = -999;
while (input != -1)
{
System.out.print("상영일정 메뉴 (1.등록, 2.목록, 3.삭제, 0.메인메뉴 ) >> ");
input = s.nextInt();
switch (input)
{
case 1:
add();
break;
case 2:
list();
break;
case 3:
remove();
break;
case 0:
input = -1;
break;
default:
System.out.println("입력오류입니다.");
break;
}
}
}
public int getPos()
{
return pos;
}
public MovieTimetable[] getMT()
{
return table;
}
/*
* public MovieTimetable get(Movie movie, Screen screen) { for(int i = 0; i <
* pos; i++) { if(table[i].getMovie().equals(movie)) {
*
* }
*
* } return }
*/
}
/*ID:20132071 DATE:2019-05-11*/
package myPackage;
public class Seat
{
private int rowNo, seatNo;
public Seat(int rowNo, int seatNo)
{
this.rowNo = rowNo;
this.seatNo = seatNo;
}
public int getRowNo()
{
return rowNo;
}
public void setRowNo(int rowNo)
{
this.rowNo = rowNo;
}
public int getSeatNo()
{
return seatNo;
}
public void setSeatNo(int seatNo)
{
this.seatNo = seatNo;
}
}
/*ID:20132071 DATE:2019-05-11*/
package myPackage;
public class Ticket
{
private String ticketNo;
private Movie movie;
private Screen screen;
private String playHour;
private Seat[] seats;
public Ticket(String ticketNo, Movie movie, Screen screen, String playHour, Seat seats[])
{
this.ticketNo = ticketNo;
this.movie = movie;
this.screen = screen;
this.playHour = playHour;
this.seats = seats;
}
public String getTicketNo()
{
return ticketNo;
}
public void setTicketNo(String ticketNo)
{
this.ticketNo = ticketNo;
}
public Movie getMovie()
{
return movie;
}
public void setMovie(Movie movie)
{
this.movie = movie;
}
public Screen getScreen()
{
return screen;
}
public void setScreen(Screen screen)
{
this.screen = screen;
}
public String getPlayHour()
{
return playHour;
}
public void setPlayHour(String playHour)
{
this.playHour = playHour;
}
public Seat[] getSeats()
{
return seats;
}
public void setSeats(Seat[] seats)
{
this.seats = seats;
}
}
/*ID:20132071 DATE:2019-05-11*/
package myPackage;
import java.util.Scanner;
public class TicketManager
{
private static int serialCode = 10000;
private TimetableManager tm;
private Ticket[] tickets;
int pos;
public TicketManager(int n)
{
tickets = new Ticket[n];
pos = 0;
}
public void add()
{
Movie p_movie = null;
Screen p_screen = null;
String playHour = null;
String ticketNo = null;
Seat[] p_seat = null;
String title, screen, time;
int selectRow;
String selectSeat = null;
String seats[] = null;
int selectSeats[] = null;
Scanner s = new Scanner(System.in);
boolean switch1, switch2, switch3;
switch1 = switch2 = switch3 = false;
// tm.list(); 디버그용 출력
System.out.print("영화제목 : ");
title = s.next();
System.out.print("상영관 및 상영시간 : ");
screen = s.next();
time = s.next();
for (int i = 0; i < tm.getPos(); i++)
{
if (tm.getMT()[i].getMovie().getTitle().equals(title) && tm.getMT()[i].getScreen().getName().equals(screen))
{
switch1 = true;
for (int j = 0; j < tm.getMT()[i].getTimes().length; j++)
{
if (tm.getMT()[i].getTimes()[j].equals(time))// 이 부분에서 공백을 포함하는지에 따라 오류를 확인해야함
{
p_movie = tm.getMT()[i].getMovie();
p_screen = tm.getMT()[i].getScreen();
playHour = tm.getMT()[i].getTimes()[j];
switch2 = true;
break;
}
}
if (!switch2)
{
System.out.println("영화제목, 상영관 및 상영시간이 일치하는 것이 없습니다. 다시 한번 확인해주세요.");
System.out.println("debug : " + p_movie + " " + title + " " + p_screen + " " + screen + " "
+ playHour + " " + time);
break;
}
}
}
if (!switch1)
{
System.out.println("영화제목, 상영관이 일치하는 것이 없습니다. 다시 한번 확인해주세요.");
System.out.println("debug : " + p_movie + " " + title + " " + p_screen + " " + screen);
return;
}
System.out.println(
"**" + p_screen.getName() + "은 " + p_screen.getRowNum() + "열 " + p_screen.getSeatNum() + "좌석 상영관입니다.");
while (true)
{
System.out.print("열번호 : ");
selectRow = s.nextInt();
System.out.print("좌석 : ");
s.nextLine();
selectSeat = s.nextLine();
seats = selectSeat.split(" ");// 실패하면 null초기화
selectSeats = new int[seats.length];// 실패하면 null초기화
for (int i = 0; i < seats.length; i++)
{
selectSeats[i] = Integer.parseInt(seats[i]);// 실패하면 null초기화
}
if (pos > 0)
{
for (int i = 0; i < pos; i++)
{
for (int j = 0; j < tickets[i].getSeats().length; j++)
{
for (int k = 0; k < selectSeats.length; k++)
{
if (tickets[i].getSeats()[j].getRowNo() == selectRow
&& tickets[i].getSeats()[j].getSeatNo() == selectSeats[k])
{
switch3 = true;
}
}
}
}
if (switch3 == true)
{
System.out.println("이미 예약되어있는 좌석입니다. 다시 선택해주세요.");
seats = null;
selectSeat = null;
selectSeats = null;
System.out.println();
continue;
} else
{
break;
}
} else
{
break;
}
}
System.out.print("예약코드 : ");
ticketNo = s.next();
ticketNo += serialCode;
serialCode++;
p_seat = new Seat[selectSeats.length];
for (int i = 0; i < selectSeats.length; i++)
{
p_seat[i] = new Seat(selectRow, selectSeats[i]);
}
tickets[pos] = new Ticket(ticketNo, p_movie, p_screen, playHour, p_seat);
pos++;
System.out.print("**");
for (int i = 0; i < p_seat.length - 1; i++)
{
System.out.print(p_seat[i].getRowNo() + "열 " + p_seat[i].getSeatNo() + "번, ");
}
System.out
.println(p_seat[p_seat.length - 1].getRowNo() + "열 " + p_seat[p_seat.length - 1].getSeatNo() + "번 좌석");
System.out.println();
}
public void list()
{
Scanner s = new Scanner(System.in);
String ticketNo;
boolean isFound = false;
System.out.print("예약번호 : ");
ticketNo = s.next();
for (int i = 0; i < pos; i++)
{
if (tickets[i].getTicketNo().equals(ticketNo))
{
System.out.println(tickets[i].getMovie().getTitle());
System.out.print(tickets[i].getScreen().getName());
System.out.println(tickets[i].getPlayHour());
System.out.print("**");
for (int j = 0; j < tickets[i].getSeats().length - 1; j++)
{
System.out.print(tickets[i].getSeats()[j].getRowNo() + "열 "
+ tickets[i].getSeats()[j].getSeatNo() + "번, ");
}
System.out.println(tickets[i].getSeats()[tickets[i].getSeats().length - 1].getRowNo() + "열 "
+ tickets[i].getSeats()[tickets[i].getSeats().length - 1].getSeatNo() + "번 좌석");
isFound = true;
break;
}
}
if (!isFound)
{
System.out.println("해당 티켓은 존재하지 않거나 잘못된 이름의 티켓입니다.");
}
System.out.println();
}
/*
* public Ticket get(String ticketNo) { for (int i = 0; i < pos; i++) { if
* (tickets[i].getTicketNo().equals(ticketNo)) { return tickets[i]; } }
* System.out.println("Error : Can't get Ticket Check TicketManager"); return
* null; }
*/
public void remove()
{
Scanner s = new Scanner(System.in);
String ticketNo;
boolean isFound = false;
System.out.print("예약번호 : ");
ticketNo = s.next();
for (int i = 0; i < pos; i++)
{
if (tickets[i].getTicketNo().equals(ticketNo))
{
for (int j = i; j < pos; j++)
{
tickets[j] = tickets[j + 1];
}
System.out.println("예약이 취소되었습니다.");
isFound = true;
pos--;
break;
}
}
if (!isFound)
{
System.out.println("해당 예약번호는 존재하지 않습니다.");
}
System.out.println();
}
public void ticketManagerMain(TimetableManager tm)
{
this.tm = tm;
if (tm.getPos() == 0)
{
System.out.println("최소한 하나의 상영관과 상영영화 일정을 등록하십시오.");
return;
}
Scanner s = new Scanner(System.in);
int input = -999;
while (input != -1)
{
System.out.print("영화티켓 예매 메뉴(1.예매, 2.확인, 3.취소, 0,메인으로) >> ");
input = s.nextInt();
switch (input)
{
case 1:
add();
break;
case 2:
list();
break;
case 3:
remove();
break;
case 0:
System.out.println("프로그램을 종료합니다.");
input = -1;
break;
default:
System.out.println("입력오류입니다.");
break;
}
}
}
}
'Programing > JAVA' 카테고리의 다른 글
[Java]영화관 예매 프로그램 중간과정 (0) | 2019.05.10 |
---|---|
[Java]scanner와 while을 이용한 역으로 점찍기 (0) | 2017.07.13 |
[Java]scanner와 for를 이용한 역으로 점찍기 (0) | 2017.07.13 |
[Java]scanner와 while문을 이용한 점찍기 (0) | 2017.07.13 |
[Java]scanner와 for를 이용한 점찍기 (0) | 2017.07.13 |
irostub
iro의 잡화상점