본문 바로가기
ⓟⓡⓞⓙⓔⓒⓣ

[JAVA] 영화관 프로젝트 (함수 설계)

by heaven00 2021. 8. 3.
728x90

 

 

전체적으로 들어갈 함수 및 클래스 정의 후, 단계별 주석 작성을 한 후, 코딩에 들었갔다

훨씬 수월해지는 좋은 방법인 것 같다.

 

 

 


 

 

 

▷▷ 영화(Movie) 클래스

package theater;
import java.time.*;

public class Movie {//데이터1: 영화 정보 클래스
	private String title; //영화 제목
	private int runTime; //러닝타임
	private String posterURL; //포스터 경로
	private LocalDate release; //영화 개봉 날짜
	
	Movie() {
		title = null;
		runTime = 0;
		posterURL = null;
		release = null;
	}
	
	Movie(String title, int runTime, String posterURL, LocalDate release) {
		this.title = title;
		this.runTime = runTime;
		this.posterURL = posterURL;
		this.release = release;
	}
	
	//각각의 데이터에 대한 set함수
	void setTitle(String title) {
		this.title = title;
	}
	
	void setRunTime(int runTime) {
		this.runTime = runTime;
	}
	
	void setPosterURL(String posterURL) {
		this.posterURL = posterURL;
	}
	
	void setRelease(LocalDate release) {
		this.release = release;
	}
	
	//각각의 데이터에 대한 get함수
	String getTitle() {
		return title;
	}
	
	int getRunTime() {
		return runTime;
	}
	
	String getPosterURL() {
		return posterURL;
	}
	
	String getRelease() {
		return release.toString();
	}
}

 

 

 

 

▷▷ 회원 (Person) 클래스

package theater;

public class Person {//데이터2: 회원가입한 고객 클래스
	private String name; //사용자 이름
	private String phone; //전화번호
	private String birth; //생년월일
	private String id; //아이디
	private String pw; //비밀번호
	
	Person() {
		this.name = null;
		this.phone = null;
		this.birth = null;
		this.id = null;
		this.pw = null;
	}
	
	Person(String name, String phone, String birth, String id, String pw) {
		this.name = name;
		this.phone = phone;
		this.birth = birth;
		this.id = id;
		this.pw = pw;
	}
	
	//각각 데이터에 대한 set 함수
	void setName(String name) {
		this.name = name;
	}
	
	void setPhone(String phone) {
		this.phone = phone;
	}
	
	void setBirth(String birth) {
		this.birth = birth;
	}
	
	void setId(String id) {
		this.id = id;
	}
	
	void setPw(String pw) {
		this.pw = pw;
	}
	
	//각각 데이터에 대한 get 함수
	String getName() {
		return name;
	}
	
	String getPhone() {
		return phone;
	}
	
	String getBirth() {
		return birth;
	}
	
	String getId() {
		return id;
	}
	//비밀번호를 마음대로 get하면 안될 것 같아서
	//비밀번호에 대한 get함수는 만들지 않았다.

}

 

 

 

▷▷ 상영영화 (MovieNow) 클래스

package theater;

public class MovieNow {//데이터3: 현재 상영중인 영화
	private Movie movie; //영화 정보
	private int round; //회차 정보
	private String start; //시작시간 
	private String finish; //끝시간
	private String screenID;//상영관 ID
	
	MovieNow() {
		movie = null;
		round = 0;
		start = null;
		finish = null;
		screenID = null;
	}
	
	MovieNow(Movie movie, int round, String start, String finish, String screenID) {
		this.movie = movie;
		this.round = round;
		this.start = start;
		this.finish = finish;
		this.screenID = screenID;
	}
	
	//각각의 데이터에 대한 set 함수
	void setMovie(Movie movie) {
		this.movie = movie;
	}
	
	void setRound(int round) {
		this.round = round;
	}
	
	void setStart(String start) {
		this.start = start;
	}
	
	void setFinish(String finish) {
		this.finish = finish;
	}
	
	void setScreenID(String screenID) {
		this.screenID = screenID;
	}
	
	//각각의 데이터에 대한 get함
	Movie getMovie() {
		return movie;
	}
	
	int getRound() {
		return round;
	}
	
	String getStart() {
		return start;
	}
	
	String getFinish() {
		return finish;
	}
	
	String getScreenID() {
		return screenID;
	}

}

 

 

 

▷▷ 예매정보 (ReservInfo) 클래스

package theater;

public class ReservInfo {//데이터4: 예매정보 객체
	private Person person; //예매한 고객
	private int round; //영화의 회차 정보
	private String seat; //예매한 좌석
	private String screenID;//상영관 ID
	
	ReservInfo(Person person, int round, String seat, String screenID) {
		this.person = person;
		this.round = round;
		this.seat = seat;
		this.screenID = screenID;
	}
	
	//각각의 데이터에 대한 set 함수
	void setPerson(Person person) {
		this.person = person;
	}
	
	void setRound(int round) {
		this.round = round;
	}
	
	void setSeat(String seat) {
		this.seat = seat;
	}
	
	void setScreenID(String screenID) {
		this.screenID = screenID;
	}
	
	//각각의 데이터에 대한 get함수
	Person getPerson() {
		return person;
	}
	
	int getRound() {
		return round;
	}
	
	String getSeat() {
		return seat;
	}
	
	String getScreenID() {
		return screenID;
	}

}

 

 

 

▷▷ 상영관 (Screen) 클래스

package theater;

public class Screen {//상영관 클래스
	
	
	//상영관 ID
	private String screenID;
	
	Screen(String screenID) throws Exception{
		this.screenID = screenID;
		//상영영화 테이블에 연결
		//예매 정보 테이블에 연결
	}
	
	//상영중인 영화 찾기
	MovieNow searchMovieNow(String title, String screenID) throws Exception {
		MovieNow movieNow = new MovieNow();
		//1. 상영관 id와 영화 제목을 통해 DB에 영화가 상영중인지 검색
		//2. 존재하면 MovieNow 객체 생성
		//3. && 반환
		//4. 존재하지 않으면 익셉션
		return movieNow;
	}
	
	//예매하기
	void booking(ReservInfo reservInfo) {
		//1. GUI에서 예매 정보 객체를 받아 온다
		//2. 받아온 예매 정보 객체를 예매 정보 테이블에 저장한다
	}
	
	//예매 취소
	void cancelReserv(ReservInfo reservInfo) throws Exception{
		//1. searchMovieNow 실행
		//2. GUI에서 전달 받은 reservInfo 객체와
		//3. DB에 저장되어 있는 영화 정보와 사용자가 예매 취소하려는 영화 제목을 비교한다
		//4. 일치한다면 해당 데이터를 삭제한다
		//5. 틀리다면 익셉션을 발생 시킨다
	}
	
	//상영영화 등록하기
	void addPlayingMovie(MovieNow movieNow) {
		//1. GUI를 통해 상영 영화 객체를 받아 온다
		//2. 상영영화 객체를 상영영화 테이블에 저장한다
	}
	
	//상영영화 취소하기
	void deletePlayingMovie(String title) throws Exception{
		//1. GUI에서 상영을 멈추려는 영화의 제목을 받아온다
		//2. searchMovieNow 실행
		//3. 영화를 찾으면
		//4. 해당 데이터 삭재
		//5. 찾지 못하면 익셉션 발생
	}
	
	//상영 영화 정보 수정
	void modifyPlayingMovie(MovieNow movieNow_new) throws Exception {
		//1. GUI에서 수정하려는 상영중인 영화 제목을 받아온다
		//2. 제목을 통해 searchMovieNow 실행
		//3. searchMovieNow에서 익셉션이 발생한다면
		//4. 익셉션 발생
		//5. 수정하려는 데이터를 찾았다면
		//6. 해당 데이터 movieNow_new로 변경
	}

}

 

 

 

▷▷ 영화관 (Theater) 클래스

package theater;
import java.util.ArrayList;
import java.util.Date;

public class Theater {//영화관 클래스
	
	Person personNow = null; //현재 로그인한 사용자
	ArrayList<Screen> screen = new ArrayList<Screen>(9);//상영관 정보
	
	Theater() throws Exception{
		//상영관 테이블과 연결: 미리 DB에 만들어 놓은 테이블
		//고객 정보 테이블과 연결
		//영화 정보 테이블과 연결
		//상영관 객체 인스턴스(DB에서 불러온 정보로 인스턴스)
	}
	
	//상영관에 대한 추가&삭제&수정 함수??
	
	//사용자 검색
	Person searchPerson(String id) throws Exception{
		Person p = new Person();
		//1. 사용자가 입력한 id를 통해 DB에서 사용자 검색
		//2. 일치하는 사용자를 찾으면
		//3. 사용자 객체를 만들어 반환한다
		//4. 일치하는 사용자를 찾지 못하면
		//5. 익셉션 발생
		return p;
	}
	
	//영화 검색
	Movie searchMovie(String title) throws Exception{
		Movie movie = new Movie();
		//1. 영화제목으로 DB에 영화가 존재하는지 검색
		//2. 존재하면 movie 객체 생성후 반환
		//3. 존재하지 않는다면 익셉션 발생
		return movie;
	}
	
	//로그인: boolean?
	void logIn(String id, String pw) throws Exception{
		//1. 사용자가 입력한 로그인 정보를 가져온다
		//2. searchPerson 실행
		//3. 검색한 데이터의 비밀번호와 사용자가 입력한 비밀번호가 일치하는지 확인한다
		//4. 일치하면 현재 로그인한 사용자에 객체 할당
		//5. 일치하지 않으면 익셉션
	}
	
	//로그아웃
	void logOut() {
		//1. personNow를 null로 변경
	}
	
	//회원가입
	void signUp(String name, String phone, String birth, String id, String pw) {
		//1. 입력받은 정보로 Person 객체 생성
		//2. 객체 생성 후 DB 저장
		//3. 현재 로그인한 사용자에 객체 할당
	}
	
	//아이디 중복 검사
	void isExistId(String id) throws Exception{
		//1. DB에 사용자가 사용하려는 아이디가 존재하는지 검색한다
		//2. 존재한다면 익셉션 발생
	}
	
	//영화 정보 등록
	void addMovie(Movie movie) throws Exception{
		//1. GUI에서 movie객체 가져옴
		//2. 영화 검색(이미 등록된 영화인지 체크)
		//3. 검색한 영화와 입력하고자 하는 영화가 같다면
		//4. 익셉션 발생
		//5. 같지 않다면
		//6. DB에 등록
	}
	
	//영화 삭제
	void deleteMovie(String title) throws Exception{
		//1. 영화 제목을 통해 searchMovie 실행
		//2. 익셉션이 발생하지 않는다면(해당 영화 존재) 해당영화 삭제
		//3. 익셉션이 발생했다면 익셉션 발생
	}
	
	//영화 정보 수정
	void modifyMovie(Movie movie) throws Exception{
		//1. 제목을 통해 searchMovie 실행
		//2. 익셉션이 발생하지 않았다면 해당 영화 정보 수정
		//3. 익셉션이 발생했다면 익셉션 발생
	}
	
	//고객 정보 삭제
	void deletePerson(String id) throws Exception{
		//1. id를 통해 searchPerson 실행
		//2. 익셉션이 발생하지 않았다면 해당 사용자 삭제
		//3. 익셉션이 발생했다면 익셉션 발생
	}
	
	//고객 정보 수정
	void modifyPerson(Person p) throws Exception{
		//1. id를 통해 searchPerson 실행
		//2. 익셉션이 발생하지 않았다면 해당 고객 정보 수정
		//3. 익셉션이 발생했다면 익셉션 발생
	}
	
	//총 영화수 count
	int countMovie() {
		//1. 영화 테이블에 저장된 전체 영화 수 가져오기
		//2. 전체 영화 수 반환
		return 0;
	}
	
	//총 고객수 count
	int countPerson() {
		//1. 고객 테이블에 저장된 전체 고객 수 가져오기
		//2.  전체 고객 수 반환
		return 0;
	}

}

 

 

 

 

+) 영화 개봉 날짜를 계산할 때 LocalDate 함수를 사용하기로했다.

처음에는 Date함수를 쓰려고했는데 상수 이용이 애매해져서 오류를 확인할 수 없다고한다.

그래서 대안으로 나온게 LocalDate함수!

 

 

오늘 날짜를 기준으로 몇일 남았는지 계산해보기 (D-Day 계산)

일 단위로만 뜬다

package time;

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.Period;
import java.time.temporal.ChronoUnit;

public class time {
	public static void main(String[] args) {
		
		LocalDate today = LocalDate.now();
		LocalDate Date = LocalDate.of(2021, 2, 21); //ex) 2021.2.21
		
		long days = ChronoUnit.DAYS.between(today, Date);
		System.out.println(days);
	}
}

 

 

 

참고로 나는 전체적인 디자인, GUI 코드 작성, 세부 기능 코딩을 맡았다

 

 

 

728x90

댓글