package date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Ex02 {
public static void main(String[] args) throws ParseException {
// java.util.Date
// 다양한 데이터를 구성할 때 primitive나 String이 아닌 것 중에서 가장 많이 사용하는 자료형
// 컴퓨터는 1970년 1월 1일을 0시 0분 0초를 기준으로 지난 시간을 초단위로 계산한다
// 자바에서는 1초 대신 1/1000 초(millisecond)로 기록한다
Date today = new Date();
System.out.println(today);
long ln1 = today.getTime();
System.out.printf("ln1 : %,d\n", ln1);
// 날짜를 문자열 형식으로 간편하게 바꿔주는 자료형 : SimpleDateFormat
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String s1 = sdf.format(today); // today를 위 형식에 맞춰 문자열로 변환
System.out.println(s1);
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy년 MM월 dd일 hh시 mm분 ss초");
String s2 = sdf2.format(today);
System.out.println("지금은 " + s2 + "입니다");
Date d2 = sdf.parse("2022-12-25");
System.out.println(d2);
}
}
package movie2;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class Main {
static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
static void prepareDummy() throws ParseException {
Movie t1 = new Movie("블랙아담", "자움 콜렛 세라",
"드웨인 존슨,노아 센티네오,피어스 브로스넌,퀸테사 스윈들".split(","),
"액션", 125, sdf.parse("2022-10-19"), 7.63);
Movie t2 = new Movie("A", "B", "C,D,E".split(","), "F", 100, sdf.parse("2000-01-01"), 10.0);
Movie t3 = new Movie("G", "H", "I,J".split(","), "K", 100, sdf.parse("2000-05-05"), 3.14);
Movie t4 = new Movie("분노의 질주", "??", "빈 디젤,드웨인 존슨".split(","), "K", 100, sdf.parse("2000-05-05"), 3.14);
Handler.arr[0] = t1; // static이므로 객체 생성 없이 속성이나 기능에 접근할 수 있다
Handler.arr[1] = t2;
Handler.arr[2] = t3;
Handler.arr[3] = t4;
}
public static void main(String[] args) throws ParseException {
prepareDummy();
int select, row;
String keyword;
Scanner sc = new Scanner(System.in);
do {
System.out.println("1. 목록");
System.out.println("2. 단일검색");
System.out.println("3. 다중검색");
System.out.println("4. 추가");
System.out.println("5. 삭제");
System.out.println("0. 종료");
System.out.print("메뉴 선택 >>> ");
select = Integer.parseInt(sc.nextLine());
switch(select) {
case 1: System.out.println(Handler.getList()); break;
case 2:
System.out.print("검색어를 입력 : ");
keyword = sc.nextLine();
System.out.println(Handler.search(keyword));
break;
case 3:
System.out.print("검색어를 입력 : ");
keyword = sc.nextLine();
System.out.println(Handler.searchList(keyword));
break;
case 4:
Movie ob = input(sc);
row = Handler.insert(ob);
System.out.println(row == 1 ? "추가 성공" : "추가 실패");
break;
case 5:
System.out.println(Handler.getList());
System.out.print("삭제할 영화의 제목을 입력하세요 : ");
keyword = sc.nextLine();
row = Handler.delete(keyword);
System.out.println(row == 1 ? "삭제 성공" : "삭제 실패");
break;
}
} while(select != 0);
sc.close();
} // end of main
static Movie input(Scanner sc) throws ParseException {
String title; // 제목
String director; // 감독
String[] actors; // 배우
String genre; // 장르
int runningTime; // 러닝타임(분)
Date openningDate; // 개봉일자
double grade; // 평점
System.out.print("제목 : "); title = sc.nextLine();
System.out.print("감독 : "); director = sc.nextLine();
System.out.print("배우 : "); actors = sc.nextLine().split(",");
System.out.print("장르 : "); genre = sc.nextLine();
System.out.print("러닝타임(분) : "); runningTime = Integer.parseInt(sc.nextLine());
System.out.print("개봉일자 : "); openningDate = sdf.parse(sc.nextLine());
System.out.print("평점 : "); grade = Double.parseDouble(sc.nextLine());
Movie ob = new Movie(title, director, actors, genre, runningTime, openningDate, grade);
return ob;
}
}
package movie2;
public class Handler {
static Movie[] arr = new Movie[10];
static String getList() {
String result = "";
for(int i = 0; i < arr.length; i++) {
if(arr[i] != null) {
result += (i + 1) + ") ";
result += arr[i].getInfo();
result += "\n";
}
}
return result;
}
static String search(String keyword) {
String result = "검색 결과를 찾을 수 없습니다";
for(int i = 0; i < arr.length; i++) {
if(arr[i] != null && arr[i].getDetail().contains(keyword)) {
// i번째 칸이 빈칸이 아니고, i번째 요소의 내용에 keyword가 포함되어 있으면
result = arr[i].getDetail();
break; // 원하는 요소를 하나 찾았다면 더이상 반복하지 않는다
}
}
return result;
}
static String searchList(String keyword) {
String result = "";
for(int i = 0; i < arr.length; i++) {
if(arr[i] != null && arr[i].getDetail().contains(keyword)) {
// i번째 칸이 빈칸이 아니고, i번째 요소의 내용에 keyword가 포함되어 있으면
result += arr[i].getInfo() + "\n";
// 원하는 요소를 찾고나서 다른 요소도 추가로 검색하여 결과에 누적시킨다
}
}
return result;
}
static int insert(Movie ob) {
for(int i = 0; i < arr.length; i++) {
if(arr[i] == null) {
arr[i] = ob;
return 1;
}
}
return 0;
}
static int delete(String keyword) {
for(int i = 0; i < arr.length; i++) {
if(arr[i] != null && arr[i].title.equals(keyword)) {
arr[i] = null;
return 1;
}
}
return 0;
}
}
package movie2;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Movie {
String title; // 제목
String director; // 감독
String[] actors; // 배우
String genre; // 장르
int runningTime; // 러닝타임(분)
Date openningDate; // 개봉일자
double grade; // 평점
// 클래스의 모든 멤버필드를 매개변수로 전달받아서, 객체를 생성하는 생성자 자동으로 만들기
// source - generate constructor using fields
Movie(String title, String director, String[] actors, String genre,
int runningTime, Date openningDate, double grade) {
this.title = title;
this.director = director;
this.actors = actors;
this.genre = genre;
this.runningTime = runningTime;
this.openningDate = openningDate;
this.grade = grade;
}
String getInfo() { // 목록에서 사용할 간략한 정보만 문자열로 반환
String form = "[%s] %s, %s (%.2f)";
String result = String.format(form, title, actors[0], actors[1], grade);
return result;
}
String getDetail() { // 검색에서 사용할 상세한 정보를 모두 문자열로 반환
SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일");
String form = "-----------------------\n";
form += "제목 : %s\n";
form += "감독 : %s\n";
form += "출연 : %s\n"; // 배열을 문자열로 변환하는 추가 함수를 활용해야함
form += "장르 : %s\n";
form += "상영시간 : %d분\n";
form += "개봉일자 : %s\n"; // yyyy년 MM월 dd일 형식으로 반환해야 함
form += "평점 : %.2f\n";
form += "-----------------------\n";
String result = String.format(form, title, director,
arrToString(actors), genre, runningTime,
sdf.format(openningDate), grade);
return result;
}
String arrToString(String[] arr) { // 배우 목록이 배열이므로, 문자열로 변환해야 출력할 수 있다
String result = "";
for(int i = 0; i < arr.length; i++) {
result += arr[i];
if(i != arr.length - 1) {
result += ", ";
}
}
return result;
}
}
프로그램을 어떻게 하면 효율적으로 생성할 수 있을지를 잘 생각해본다.