
∧∞∧ ∧∞∧ ∧∞∧ ∧∞∧ ∧∞∧ ♪
( ・ω・) ・ω・) ・ω・) ・ω・) ・ω・)
(っ )っ )っ )っ )っ )っ
( __フ( __フ( _フ( __フ( __フ
(_/彡 (_/彡 (_/彡 (_/彡 (_/彡
❤ 김춘장이의 위키백과 - 나만의 공부 기록 Tistory ❤
과제를 고민하다
생각해 보면 과제를 할 때마다 요구분석과 시나리오, 설계에서 가장 오랜 시간을 보내고 있다.
다른 학생들을 보면 금방금방 끝내고 코드 짜느라 바빠 보이는데
나는 머리를 쥐어짜며 설계에 온 정신을 다 쏟는다
그래서 코드작성도 쿼리작성도 남들보다 한참 뒤에 시작하는데 부족해 보여 내 스스로가 너무 답답하다😢
메뉴먼저 구현하고 기능 구현하면서 쿼리문이나 요구분석은 그때 그대 하면 된다는데
난 그게 잘 안된다, ㅠㅠ
결국 새벽까지 요구사항 및 정리를 하다가 다음날 오전부터 제대로 코드를 짜기 시작했다

Class 다이어그램

소스코드

package main;
import rentalInfo.programInfo;
public class Main {
public static void main(String[] args) {
// todo : 자동차 렌탈 프로그램
new programInfo();
}
}
package rentalInfo;
import java.util.Scanner;
public class programInfo {
public programInfo(){
boolean flag = true;
while(flag){
programInfoPrt();
int choice = Integer.parseInt(textIO("메뉴 번호"));
switch (choice){
case 1 :
Rental_CarAdd rca = Rental_CarAdd.getInstance();
rca.set_RentalCar();
break;
case 2 :
Rental_contract rct = Rental_contract.getInstance();
rct.Rental_contract();
break;
case 3 :
Rental_Success rss = Rental_Success.getinstance();
rss.get_SuccessRental();
break;
case 4 :
System.out.println("프로그램종료");
flag = false;
break;
default:
System.out.println("다시 입력 ");
}
}
}
public void programInfoPrt(){
System.out.println("1. 렌트 차량 등록");
System.out.println("2. 렌트 예약");
System.out.println("3. 렌트 예약 완료건 전체보기");
System.out.println("4. 종료");
}
public static String textIO(String text){
Scanner in = new Scanner(System.in);
System.out.print("\t" + text + " 입력 >> ");
return in.nextLine();
}
}
package rentalInfo;
import DAO.RentCarDAO;
import DTO.Rental_Car;
public class Rental_CarAdd extends Rental_Car {
// todo : 차량 등록 클래스
private Rental_CarAdd(){};
private static Rental_CarAdd self;
public static Rental_CarAdd getInstance(){
if ( self == null ) self = new Rental_CarAdd();
return self;
}
public String owner_name;
public String owner_phone;
public void set_RentalCar(){
System.out.println("차량 등록 서비스입니다");
Rental_CarAdd newCar = new Rental_CarAdd();
newCar.car_number = programInfo.textIO("차량 번호");
newCar.owner_name = programInfo.textIO("차량 소유자 성함");
newCar.owner_phone = programInfo.textIO("소유자 휴대폰 번호");
newCar.car_title = programInfo.textIO("차량 모델명");
System.out.println("차종은 승용/SUV/승합(11인승이상) 가능합니다");
newCar.car_type = programInfo.textIO("차종 입력");
newCar.car_mnfct = programInfo.textIO("제조사");
newCar.car_fuel = programInfo.textIO("연료 타입");
new RentCarDAO(newCar);
}
}
package rentalInfo;
import java.util.ArrayList;
import DAO.RentContractDAO;
import DTO.Rental_contractDTO;
import DTO.payDTO;
public class Rental_contract extends Rental_contractDTO {
private static Rental_contract self = null;
private Rental_contract() {
}
public static Rental_contract getInstance() {
if (self == null) self = new Rental_contract();
return self;
}
public void Rental_contract() {
RentContractDAO rcDAO = RentContractDAO.getInstance();
Rental_contract rentTmp = new Rental_contract();
System.out.println("차량 예약 메뉴 입니다");
System.out.println("면허종류는 1종대형(승합전용), 1종보통(SUV, 승용), 2종보통(SUV, 승용) 입니다");
try {
rentTmp.setLender_licenseType(programInfo.textIO("종류"));
rcDAO.licenseTpyeCars(rentTmp.getLender_licenseType());
super.contract_list = rcDAO.getList();
if (!contract_list.isEmpty()) {
prt(contract_list);
rentTmp.setLender_name(programInfo.textIO("계약자 이름"));
rentTmp.setLender_age(programInfo.textIO("계약자 나이"));
rentTmp.setLender_phone(programInfo.textIO("계약자 번호"));
rentTmp.setLender_start(programInfo.textIO("대여 시작시간"));
rentTmp.setLender_time(Integer.parseInt(programInfo.textIO("대여 시간")));
rentTmp.setLender_pass(programInfo.textIO("대여자 비밀번호"));
rentTmp.setCar_number(programInfo.textIO("대여 차량번호"));
rentTmp.setLender_licenseNum(programInfo.textIO("운전면허 번호"));
// 총 지불금액 처리 후 대입
int cost = calc_cost(rcDAO.get_Cost(rentTmp.getCar_number()), rentTmp.getLender_time());
rentTmp.setTotal_price(cost);
self = rentTmp;
rcDAO.setSqlquery_DAO();
// rcDAO.status_change(rentTmp.getCar_number());
} else throw new Exception("잘못된 입력입니다");
} catch (Exception e) {}
}
// 차량 조회시 출력문
public static void prt(ArrayList<payDTO> list) {
for (payDTO m : list) {
System.out.println("차량 번호 :" + m.car_number);
System.out.println("차량 모델 :" + m.car_title);
System.out.println("차량 제조사 :" + m.car_mnfct);
System.out.println("차량 연료 :" + m.car_fuel);
System.out.println("하루 요금 :" + m.getDay_price());
System.out.println("초과 요금 :" + m.getOver_price());
}
}
// 총 비용 계산 메서드
public int calc_cost(payDTO payTable, int time){
int result_cost = 0;
try {
int day_cost = payTable.getDay_price();
int over_cost = payTable.getOver_price();
int tmpTime = time - 24;
if (tmpTime <= 0) return result_cost = day_cost;
else if (tmpTime >= 0 && tmpTime <= 24) return result_cost = day_cost + (over_cost * tmpTime);
else if (tmpTime >= 24 && tmpTime <= 48) return result_cost = (day_cost * 2) + ((tmpTime - 24) * over_cost);
else throw new Exception("계산되지 않는 시간입니다 관리자에게 문의하세요");
} catch (Exception e){}
return result_cost;
}
}
package rentalInfo;
import DAO.RentSuccessDAO;
import DTO.Rental_Car;
import java.util.ArrayList;
public class Rental_Success extends Rental_Car {
// todo : 렌트 계약이 완료된 목록을 보여주는 클래스
private Rental_Success() {}
private static Rental_Success self = null;
public static Rental_Success getinstance() {
if (self == null) self = new Rental_Success();
return self;
}
public void get_SuccessRental() {
System.out.println("예약 완료된 차량 리스트 메뉴입니다");
RentSuccessDAO rsd = RentSuccessDAO.getInstance();
rsd.setSqlquery_DAO();
ArrayList<DTO.Rental_Success> list = rsd.getList();
try {
if (list.size() != 0) rental_default_prt(list);
else throw new Exception();
} catch (Exception e) {
System.out.println("확인되는 차량이 없습니다");
}
}
public void rental_default_prt(ArrayList<DTO.Rental_Success> list) {
for (DTO.Rental_Success tmp : list) {
System.out.println("차량번호\t: " + tmp.getCar_number());
System.out.println("계약자이름\t : " + tmp.getLender_name());
System.out.println("대여시작시간\t : " + tmp.getLender_start());
System.out.println("대여종료시간\t : " + tmp.getLender_end());
}
}
}
package DTO;
public class payDTO extends Rental_Car{
// Todo : DB Pay Table DTO
private int day_price;
private int over_price;
public int getDay_price() {
return day_price;
}
public void setDay_price(int day_price) {
this.day_price = day_price;
}
public int getOver_price() {
return over_price;
}
public void setOver_price(int over_price) {
this.over_price = over_price;
}
}
package DTO;
public class Rental_Car {
// todo : Super Class
public String car_number;
public String car_title;
public String car_type;
public String car_mnfct;
public String car_fuel;
public String car_status;
public void rental_default_prt(){
System.out.println("차량 번호 : " + this.car_number);
System.out.println("모델명 : " + this.car_title);
System.out.println("차종 : " + this.car_type);
System.out.println("제조사 : " + this.car_mnfct);
System.out.println("연료타입 : " + this.car_fuel);
System.out.println("대여 상태 : " + this.car_status);
}
}
package DTO;
import java.util.ArrayList;
public class Rental_contractDTO {
public ArrayList<payDTO> contract_list;
private String lender_name =null;
private String lender_age =null;
private String lender_phone =null;
private String lender_start =null;
private int lender_time = 0;
private String lender_pass =null;
private String lender_licenseType =null;
private String lender_licenseNum =null;
private String car_number=null;
public int getTotal_price() { return total_price;}
public void setTotal_price(int total_price) { this.total_price = total_price;}
private int total_price=0;
public String getCar_number() {
return car_number;
}
public void setCar_number(String car_number) {
this.car_number = car_number;
}
public String getLender_name() {
return lender_name;
}
public void setLender_name(String lender_name) {
this.lender_name = lender_name;
}
public String getLender_age() {
return lender_age;
}
public void setLender_age(String lender_age) {
this.lender_age = lender_age;
}
public String getLender_phone() {
return lender_phone;
}
public void setLender_phone(String lender_phone) {
this.lender_phone = lender_phone;
}
public String getLender_start() {
return lender_start;
}
public void setLender_start(String lender_start) {
this.lender_start = lender_start;
}
public int getLender_time() {
return lender_time;
}
public void setLender_time(int lender_time) {
this.lender_time = lender_time;
}
public String getLender_pass() {
return lender_pass;
}
public void setLender_pass(String lender_pass) {
this.lender_pass = lender_pass;
}
public String getLender_licenseType() {
return lender_licenseType;
}
public void setLender_licenseType(String lender_licenseType) {
this.lender_licenseType = lender_licenseType;
}
public String getLender_licenseNum() {
return lender_licenseNum;
}
public void setLender_licenseNum(String lender_licenseNum) {
this.lender_licenseNum = lender_licenseNum;
}
}
package DTO;
public class Rental_Success {
private String car_number;
private String lender_name;
private String lender_start;
private String lender_end;
public String getCar_number() {
return car_number;
}
public void setCar_number(String car_number) {
this.car_number = car_number;
}
public String getLender_name() {
return lender_name;
}
public void setLender_name(String lender_name) {
this.lender_name = lender_name;
}
public String getLender_start() {
return lender_start;
}
public void setLender_start(String lender_start) {
this.lender_start = lender_start;
}
public String getLender_end() {
return lender_end;
}
public void setLender_end(String lender_end) {
this.lender_end = lender_end;
}
}
package DAO;
import rentalInfo.Rental_CarAdd;
public class RentCarDAO extends Resource_DAO{
// todo : 차량 등록을 위한 DAO
public RentCarDAO(Rental_CarAdd newCar){
super.newCar = newCar;
setSqlquery_DAO();
}
@Override
public void setSqlquery_DAO() {
// 차량 등록을 위한 sql query 처리 메서드
boolean trueConn = isConnections();
if (trueConn){
try {
sql = "INSERT INTO RentCar VALUES(?,?,?,?,?,?,?,'N')";
psmt = conn.prepareStatement(sql);
psmt.setString(1, newCar.car_number);
psmt.setString(2, newCar.owner_name);
psmt.setString(3, newCar.owner_phone);
psmt.setString(4, newCar.car_title);
psmt.setString(5, newCar.car_type);
psmt.setString(6, newCar.car_mnfct);
psmt.setString(7, newCar.car_fuel);
psmt.executeQuery();
System.out.println(newCar.car_title + " 등록완료");
} catch (Exception e){
System.out.println("차량 등록 오류");
} finally {
resourcesClose();
}
}
}
}
package DAO;
import java.sql.SQLException;
import java.util.ArrayList;
import DTO.payDTO;
import rentalInfo.Rental_contract;
public class RentContractDAO extends Resource_DAO {
private static RentContractDAO self = null;
private RentContractDAO() {
}
private static ArrayList<payDTO> list = new ArrayList<>();
public static RentContractDAO getInstance() {
if (self == null) self = new RentContractDAO();
return self;
}
public static ArrayList<payDTO> getList() {
if (!list.isEmpty()) return list;
return null;
}
// 사용자가 입력한 면허에 따른 렌트 가능 차의 목록을 가져와서 반환시켜주는 메서드
public void licenseTpyeCars(String license) {
Boolean trueConn = isConnections();
if (trueConn) {
try {
// 1종 보통인지 다른 면허인지 확인
if (license.equals("1종대형")) {
sql = "select * from rPossible_Van";
psmt = conn.prepareStatement(sql);
rs = psmt.executeQuery();
}else if (license.equals("1종보통") || license.equals("2종보통")) {
sql = "select * from rPossible_NotVan";
psmt = conn.prepareStatement(sql);
rs = psmt.executeQuery();
} else {
throw new Exception("잘못된 입력입니다");
}
// 결과 참조 가능하도록 연결
while (rs.next()) {
payDTO tmp = new payDTO();
tmp.car_number = rs.getString("car_number");
tmp.car_title = rs.getString("car_title");
tmp.car_mnfct = rs.getString("car_mnfct");
tmp.car_fuel = rs.getString("car_fuel");
tmp.setDay_price(rs.getInt("day_price"));
tmp.setOver_price(rs.getInt("over_pirce"));
list.add(tmp);
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("차량 조회 실패");
} finally {
resourcesClose();
}
}
}
// 예약 처리를 완료하는 메서드
@Override
public void setSqlquery_DAO() {
Rental_contract rentTmp = Rental_contract.getInstance();
boolean trueConn = isConnections();
if (trueConn) {
try {
sql = "INSERT INTO lender VALUES(?,?,?,TO_DATE(?, 'yyyy-mm-dd hh24:mi'),?,default,?,?,?,?,?)";
psmt = conn.prepareStatement(sql);
psmt.setString(1, rentTmp.getLender_name());
psmt.setString(2, rentTmp.getLender_age());
psmt.setString(3, rentTmp.getLender_phone());
psmt.setString(4, rentTmp.getLender_start());
psmt.setInt(5, rentTmp.getLender_time());
psmt.setString(6, rentTmp.getLender_pass());
psmt.setString(7, rentTmp.getLender_licenseType());
psmt.setString(8, rentTmp.getCar_number());
psmt.setString(9, rentTmp.getLender_licenseNum());
psmt.setInt(10, rentTmp.getTotal_price());
int resultInt = psmt.executeUpdate();
System.out.println(resultInt + "건 예약 되었습니다.");
System.out.println("총 지불금액 : " + rentTmp.getTotal_price()+"입니다");
status_change(rentTmp.getCar_number());
} catch (Exception e) {
System.out.println("차량 등록 오류");
e.printStackTrace();
} finally {
resourcesClose();
}
}
}
// 차량 등록을 위한 sql query 처리 메서드
public void status_change(String car_number) {
boolean trueConn = isConnections();
if (trueConn) {
try {
sql = "update RentCar set car_status='Y' where car_number=?";
psmt = conn.prepareStatement(sql);
psmt.setString(1, car_number);
psmt.executeQuery();
} catch (Exception e) {
System.out.println("차량 등록 오류");
} finally {
resourcesClose();
}
}
}
// 총 계산 메서드
public payDTO get_Cost(String car_number) {
boolean trueConn = isConnections();
try {
if (trueConn) {
sql = "SELECT p.DAY_PRICE AS day_price, p.OVER_PRICE AS OVER_PRICE FROM PAY p INNER JOIN RentCar r ON r.car_type = p.CAR_TYPE WHERE car_number = ?";
psmt = conn.prepareStatement(sql);
psmt.setString(1, car_number);
rs = psmt.executeQuery();
if (rs.next()) {
payDTO tmp = new payDTO();
tmp.setDay_price(rs.getInt("DAY_PRICE"));
tmp.setOver_price(rs.getInt("OVER_PRICE"));
return tmp;
}
}
} catch (SQLException e) {
throw new RuntimeException(e);
} catch (Exception e) {
} finally {
resourcesClose();
}
return null;
}
}
package DAO;
import DTO.Rental_Success;
import java.util.ArrayList;
public class RentSuccessDAO extends Resource_DAO {
private static RentSuccessDAO self = null;
private RentSuccessDAO(){}
private static ArrayList<Rental_Success> list = new ArrayList<>();
public static RentSuccessDAO getInstance(){
if (self == null) self = new RentSuccessDAO();
return self;
}
public static ArrayList<Rental_Success> getList() {
if (list.size() > 0) return list;
return null;
}
@Override
public void setSqlquery_DAO() {
boolean trueConn = isConnections();
if (trueConn) {
try {
sql = "SELECT * FROM Rental_Success";
psmt = conn.prepareStatement(sql);
rs = psmt.executeQuery();
while (rs.next()) {
Rental_Success tmp = new Rental_Success();
tmp.setCar_number(rs.getString("car_number"));
tmp.setLender_name(rs.getString("lender_name"));
tmp.setLender_start(rs.getString("lender_start"));
tmp.setLender_end(rs.getString("lender_end"));
list.add(tmp);
}
} catch (Exception e) {
System.out.println("!!예외발생!!");
e.printStackTrace();
} finally {
resourcesClose();
}
}
}
}
package DAO;
import rentalInfo.Rental_CarAdd;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public abstract class Resource_DAO {
// todo : 리소스 관리 클래스
final static String url = "jdbc:oracle:thin:@192.168.0.70:1521:orcl";
final static String username = "system";
final static String pass = "1111";
static Connection conn = null;
static PreparedStatement psmt = null;
static ResultSet rs = null;
static String sql;
static Rental_CarAdd newCar = null;
// 드라이버로드 생성자
public Resource_DAO(){
try {// 실행중에 발생하는 예외를 처리하여 프로그램 오류가 나지 않게 한다.
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (Exception e) {
System.out.println("Driver Load Failed");// 가 코드에서 드라이버를 로드 못하면 실행
}
}
// 커넥션 시도 리턴값 : 성공/실패
public static boolean isConnections() {
try {
conn = DriverManager.getConnection(url, username, pass);
return true;
} catch (Exception e) {
System.out.println("Connections Failed");
}
return false;
}
// 자원 반납 메서드정의
public static void resourcesClose(){
try {
if ( psmt != null ) psmt.close();
if ( conn != null ) conn.close();
}catch (Exception e){
System.out.println("Resources return Failed");
}
}
// sql 문법 사용 메서드 (추상화)로 진행하여 DB에 접근하는 클래스들은
// 모두 추상화로 재정의해야함
public abstract void setSqlquery_DAO();
}
'👩🏻💻 𝐋𝐚𝐧𝐠𝐮𝐚𝐠𝐞 > ⠀⠀⠀⠀ Jᴀᴠᴀ' 카테고리의 다른 글
2023/11/17 💛 상속과 인터페이스 미니과제 (1) | 2023.11.20 |
---|---|
2023/11/16 🫶 인터페이스와 상속 (0) | 2023.11.20 |
2023/11/14 📌 추상클래스/메서드/상속 과제 (1) | 2023.11.15 |
2023/11/13 🚀 상속과 다형성, 그리고 추상메서드 (0) | 2023.11.14 |
2023/11/12 🦄 학원동호회 - 주말 스터디 (2) | 2023.11.13 |

∧∞∧ ∧∞∧ ∧∞∧ ∧∞∧ ∧∞∧ ♪
( ・ω・) ・ω・) ・ω・) ・ω・) ・ω・)
(っ )っ )っ )っ )っ )っ
( __フ( __フ( _フ( __フ( __フ
(_/彡 (_/彡 (_/彡 (_/彡 (_/彡
❤ 김춘장이의 위키백과 - 나만의 공부 기록 Tistory ❤
과제를 고민하다
생각해 보면 과제를 할 때마다 요구분석과 시나리오, 설계에서 가장 오랜 시간을 보내고 있다.
다른 학생들을 보면 금방금방 끝내고 코드 짜느라 바빠 보이는데
나는 머리를 쥐어짜며 설계에 온 정신을 다 쏟는다
그래서 코드작성도 쿼리작성도 남들보다 한참 뒤에 시작하는데 부족해 보여 내 스스로가 너무 답답하다😢
메뉴먼저 구현하고 기능 구현하면서 쿼리문이나 요구분석은 그때 그대 하면 된다는데
난 그게 잘 안된다, ㅠㅠ
결국 새벽까지 요구사항 및 정리를 하다가 다음날 오전부터 제대로 코드를 짜기 시작했다

Class 다이어그램

소스코드

package main;
import rentalInfo.programInfo;
public class Main {
public static void main(String[] args) {
// todo : 자동차 렌탈 프로그램
new programInfo();
}
}
package rentalInfo;
import java.util.Scanner;
public class programInfo {
public programInfo(){
boolean flag = true;
while(flag){
programInfoPrt();
int choice = Integer.parseInt(textIO("메뉴 번호"));
switch (choice){
case 1 :
Rental_CarAdd rca = Rental_CarAdd.getInstance();
rca.set_RentalCar();
break;
case 2 :
Rental_contract rct = Rental_contract.getInstance();
rct.Rental_contract();
break;
case 3 :
Rental_Success rss = Rental_Success.getinstance();
rss.get_SuccessRental();
break;
case 4 :
System.out.println("프로그램종료");
flag = false;
break;
default:
System.out.println("다시 입력 ");
}
}
}
public void programInfoPrt(){
System.out.println("1. 렌트 차량 등록");
System.out.println("2. 렌트 예약");
System.out.println("3. 렌트 예약 완료건 전체보기");
System.out.println("4. 종료");
}
public static String textIO(String text){
Scanner in = new Scanner(System.in);
System.out.print("\t" + text + " 입력 >> ");
return in.nextLine();
}
}
package rentalInfo;
import DAO.RentCarDAO;
import DTO.Rental_Car;
public class Rental_CarAdd extends Rental_Car {
// todo : 차량 등록 클래스
private Rental_CarAdd(){};
private static Rental_CarAdd self;
public static Rental_CarAdd getInstance(){
if ( self == null ) self = new Rental_CarAdd();
return self;
}
public String owner_name;
public String owner_phone;
public void set_RentalCar(){
System.out.println("차량 등록 서비스입니다");
Rental_CarAdd newCar = new Rental_CarAdd();
newCar.car_number = programInfo.textIO("차량 번호");
newCar.owner_name = programInfo.textIO("차량 소유자 성함");
newCar.owner_phone = programInfo.textIO("소유자 휴대폰 번호");
newCar.car_title = programInfo.textIO("차량 모델명");
System.out.println("차종은 승용/SUV/승합(11인승이상) 가능합니다");
newCar.car_type = programInfo.textIO("차종 입력");
newCar.car_mnfct = programInfo.textIO("제조사");
newCar.car_fuel = programInfo.textIO("연료 타입");
new RentCarDAO(newCar);
}
}
package rentalInfo;
import java.util.ArrayList;
import DAO.RentContractDAO;
import DTO.Rental_contractDTO;
import DTO.payDTO;
public class Rental_contract extends Rental_contractDTO {
private static Rental_contract self = null;
private Rental_contract() {
}
public static Rental_contract getInstance() {
if (self == null) self = new Rental_contract();
return self;
}
public void Rental_contract() {
RentContractDAO rcDAO = RentContractDAO.getInstance();
Rental_contract rentTmp = new Rental_contract();
System.out.println("차량 예약 메뉴 입니다");
System.out.println("면허종류는 1종대형(승합전용), 1종보통(SUV, 승용), 2종보통(SUV, 승용) 입니다");
try {
rentTmp.setLender_licenseType(programInfo.textIO("종류"));
rcDAO.licenseTpyeCars(rentTmp.getLender_licenseType());
super.contract_list = rcDAO.getList();
if (!contract_list.isEmpty()) {
prt(contract_list);
rentTmp.setLender_name(programInfo.textIO("계약자 이름"));
rentTmp.setLender_age(programInfo.textIO("계약자 나이"));
rentTmp.setLender_phone(programInfo.textIO("계약자 번호"));
rentTmp.setLender_start(programInfo.textIO("대여 시작시간"));
rentTmp.setLender_time(Integer.parseInt(programInfo.textIO("대여 시간")));
rentTmp.setLender_pass(programInfo.textIO("대여자 비밀번호"));
rentTmp.setCar_number(programInfo.textIO("대여 차량번호"));
rentTmp.setLender_licenseNum(programInfo.textIO("운전면허 번호"));
// 총 지불금액 처리 후 대입
int cost = calc_cost(rcDAO.get_Cost(rentTmp.getCar_number()), rentTmp.getLender_time());
rentTmp.setTotal_price(cost);
self = rentTmp;
rcDAO.setSqlquery_DAO();
// rcDAO.status_change(rentTmp.getCar_number());
} else throw new Exception("잘못된 입력입니다");
} catch (Exception e) {}
}
// 차량 조회시 출력문
public static void prt(ArrayList<payDTO> list) {
for (payDTO m : list) {
System.out.println("차량 번호 :" + m.car_number);
System.out.println("차량 모델 :" + m.car_title);
System.out.println("차량 제조사 :" + m.car_mnfct);
System.out.println("차량 연료 :" + m.car_fuel);
System.out.println("하루 요금 :" + m.getDay_price());
System.out.println("초과 요금 :" + m.getOver_price());
}
}
// 총 비용 계산 메서드
public int calc_cost(payDTO payTable, int time){
int result_cost = 0;
try {
int day_cost = payTable.getDay_price();
int over_cost = payTable.getOver_price();
int tmpTime = time - 24;
if (tmpTime <= 0) return result_cost = day_cost;
else if (tmpTime >= 0 && tmpTime <= 24) return result_cost = day_cost + (over_cost * tmpTime);
else if (tmpTime >= 24 && tmpTime <= 48) return result_cost = (day_cost * 2) + ((tmpTime - 24) * over_cost);
else throw new Exception("계산되지 않는 시간입니다 관리자에게 문의하세요");
} catch (Exception e){}
return result_cost;
}
}
package rentalInfo;
import DAO.RentSuccessDAO;
import DTO.Rental_Car;
import java.util.ArrayList;
public class Rental_Success extends Rental_Car {
// todo : 렌트 계약이 완료된 목록을 보여주는 클래스
private Rental_Success() {}
private static Rental_Success self = null;
public static Rental_Success getinstance() {
if (self == null) self = new Rental_Success();
return self;
}
public void get_SuccessRental() {
System.out.println("예약 완료된 차량 리스트 메뉴입니다");
RentSuccessDAO rsd = RentSuccessDAO.getInstance();
rsd.setSqlquery_DAO();
ArrayList<DTO.Rental_Success> list = rsd.getList();
try {
if (list.size() != 0) rental_default_prt(list);
else throw new Exception();
} catch (Exception e) {
System.out.println("확인되는 차량이 없습니다");
}
}
public void rental_default_prt(ArrayList<DTO.Rental_Success> list) {
for (DTO.Rental_Success tmp : list) {
System.out.println("차량번호\t: " + tmp.getCar_number());
System.out.println("계약자이름\t : " + tmp.getLender_name());
System.out.println("대여시작시간\t : " + tmp.getLender_start());
System.out.println("대여종료시간\t : " + tmp.getLender_end());
}
}
}
package DTO;
public class payDTO extends Rental_Car{
// Todo : DB Pay Table DTO
private int day_price;
private int over_price;
public int getDay_price() {
return day_price;
}
public void setDay_price(int day_price) {
this.day_price = day_price;
}
public int getOver_price() {
return over_price;
}
public void setOver_price(int over_price) {
this.over_price = over_price;
}
}
package DTO;
public class Rental_Car {
// todo : Super Class
public String car_number;
public String car_title;
public String car_type;
public String car_mnfct;
public String car_fuel;
public String car_status;
public void rental_default_prt(){
System.out.println("차량 번호 : " + this.car_number);
System.out.println("모델명 : " + this.car_title);
System.out.println("차종 : " + this.car_type);
System.out.println("제조사 : " + this.car_mnfct);
System.out.println("연료타입 : " + this.car_fuel);
System.out.println("대여 상태 : " + this.car_status);
}
}
package DTO;
import java.util.ArrayList;
public class Rental_contractDTO {
public ArrayList<payDTO> contract_list;
private String lender_name =null;
private String lender_age =null;
private String lender_phone =null;
private String lender_start =null;
private int lender_time = 0;
private String lender_pass =null;
private String lender_licenseType =null;
private String lender_licenseNum =null;
private String car_number=null;
public int getTotal_price() { return total_price;}
public void setTotal_price(int total_price) { this.total_price = total_price;}
private int total_price=0;
public String getCar_number() {
return car_number;
}
public void setCar_number(String car_number) {
this.car_number = car_number;
}
public String getLender_name() {
return lender_name;
}
public void setLender_name(String lender_name) {
this.lender_name = lender_name;
}
public String getLender_age() {
return lender_age;
}
public void setLender_age(String lender_age) {
this.lender_age = lender_age;
}
public String getLender_phone() {
return lender_phone;
}
public void setLender_phone(String lender_phone) {
this.lender_phone = lender_phone;
}
public String getLender_start() {
return lender_start;
}
public void setLender_start(String lender_start) {
this.lender_start = lender_start;
}
public int getLender_time() {
return lender_time;
}
public void setLender_time(int lender_time) {
this.lender_time = lender_time;
}
public String getLender_pass() {
return lender_pass;
}
public void setLender_pass(String lender_pass) {
this.lender_pass = lender_pass;
}
public String getLender_licenseType() {
return lender_licenseType;
}
public void setLender_licenseType(String lender_licenseType) {
this.lender_licenseType = lender_licenseType;
}
public String getLender_licenseNum() {
return lender_licenseNum;
}
public void setLender_licenseNum(String lender_licenseNum) {
this.lender_licenseNum = lender_licenseNum;
}
}
package DTO;
public class Rental_Success {
private String car_number;
private String lender_name;
private String lender_start;
private String lender_end;
public String getCar_number() {
return car_number;
}
public void setCar_number(String car_number) {
this.car_number = car_number;
}
public String getLender_name() {
return lender_name;
}
public void setLender_name(String lender_name) {
this.lender_name = lender_name;
}
public String getLender_start() {
return lender_start;
}
public void setLender_start(String lender_start) {
this.lender_start = lender_start;
}
public String getLender_end() {
return lender_end;
}
public void setLender_end(String lender_end) {
this.lender_end = lender_end;
}
}
package DAO;
import rentalInfo.Rental_CarAdd;
public class RentCarDAO extends Resource_DAO{
// todo : 차량 등록을 위한 DAO
public RentCarDAO(Rental_CarAdd newCar){
super.newCar = newCar;
setSqlquery_DAO();
}
@Override
public void setSqlquery_DAO() {
// 차량 등록을 위한 sql query 처리 메서드
boolean trueConn = isConnections();
if (trueConn){
try {
sql = "INSERT INTO RentCar VALUES(?,?,?,?,?,?,?,'N')";
psmt = conn.prepareStatement(sql);
psmt.setString(1, newCar.car_number);
psmt.setString(2, newCar.owner_name);
psmt.setString(3, newCar.owner_phone);
psmt.setString(4, newCar.car_title);
psmt.setString(5, newCar.car_type);
psmt.setString(6, newCar.car_mnfct);
psmt.setString(7, newCar.car_fuel);
psmt.executeQuery();
System.out.println(newCar.car_title + " 등록완료");
} catch (Exception e){
System.out.println("차량 등록 오류");
} finally {
resourcesClose();
}
}
}
}
package DAO;
import java.sql.SQLException;
import java.util.ArrayList;
import DTO.payDTO;
import rentalInfo.Rental_contract;
public class RentContractDAO extends Resource_DAO {
private static RentContractDAO self = null;
private RentContractDAO() {
}
private static ArrayList<payDTO> list = new ArrayList<>();
public static RentContractDAO getInstance() {
if (self == null) self = new RentContractDAO();
return self;
}
public static ArrayList<payDTO> getList() {
if (!list.isEmpty()) return list;
return null;
}
// 사용자가 입력한 면허에 따른 렌트 가능 차의 목록을 가져와서 반환시켜주는 메서드
public void licenseTpyeCars(String license) {
Boolean trueConn = isConnections();
if (trueConn) {
try {
// 1종 보통인지 다른 면허인지 확인
if (license.equals("1종대형")) {
sql = "select * from rPossible_Van";
psmt = conn.prepareStatement(sql);
rs = psmt.executeQuery();
}else if (license.equals("1종보통") || license.equals("2종보통")) {
sql = "select * from rPossible_NotVan";
psmt = conn.prepareStatement(sql);
rs = psmt.executeQuery();
} else {
throw new Exception("잘못된 입력입니다");
}
// 결과 참조 가능하도록 연결
while (rs.next()) {
payDTO tmp = new payDTO();
tmp.car_number = rs.getString("car_number");
tmp.car_title = rs.getString("car_title");
tmp.car_mnfct = rs.getString("car_mnfct");
tmp.car_fuel = rs.getString("car_fuel");
tmp.setDay_price(rs.getInt("day_price"));
tmp.setOver_price(rs.getInt("over_pirce"));
list.add(tmp);
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("차량 조회 실패");
} finally {
resourcesClose();
}
}
}
// 예약 처리를 완료하는 메서드
@Override
public void setSqlquery_DAO() {
Rental_contract rentTmp = Rental_contract.getInstance();
boolean trueConn = isConnections();
if (trueConn) {
try {
sql = "INSERT INTO lender VALUES(?,?,?,TO_DATE(?, 'yyyy-mm-dd hh24:mi'),?,default,?,?,?,?,?)";
psmt = conn.prepareStatement(sql);
psmt.setString(1, rentTmp.getLender_name());
psmt.setString(2, rentTmp.getLender_age());
psmt.setString(3, rentTmp.getLender_phone());
psmt.setString(4, rentTmp.getLender_start());
psmt.setInt(5, rentTmp.getLender_time());
psmt.setString(6, rentTmp.getLender_pass());
psmt.setString(7, rentTmp.getLender_licenseType());
psmt.setString(8, rentTmp.getCar_number());
psmt.setString(9, rentTmp.getLender_licenseNum());
psmt.setInt(10, rentTmp.getTotal_price());
int resultInt = psmt.executeUpdate();
System.out.println(resultInt + "건 예약 되었습니다.");
System.out.println("총 지불금액 : " + rentTmp.getTotal_price()+"입니다");
status_change(rentTmp.getCar_number());
} catch (Exception e) {
System.out.println("차량 등록 오류");
e.printStackTrace();
} finally {
resourcesClose();
}
}
}
// 차량 등록을 위한 sql query 처리 메서드
public void status_change(String car_number) {
boolean trueConn = isConnections();
if (trueConn) {
try {
sql = "update RentCar set car_status='Y' where car_number=?";
psmt = conn.prepareStatement(sql);
psmt.setString(1, car_number);
psmt.executeQuery();
} catch (Exception e) {
System.out.println("차량 등록 오류");
} finally {
resourcesClose();
}
}
}
// 총 계산 메서드
public payDTO get_Cost(String car_number) {
boolean trueConn = isConnections();
try {
if (trueConn) {
sql = "SELECT p.DAY_PRICE AS day_price, p.OVER_PRICE AS OVER_PRICE FROM PAY p INNER JOIN RentCar r ON r.car_type = p.CAR_TYPE WHERE car_number = ?";
psmt = conn.prepareStatement(sql);
psmt.setString(1, car_number);
rs = psmt.executeQuery();
if (rs.next()) {
payDTO tmp = new payDTO();
tmp.setDay_price(rs.getInt("DAY_PRICE"));
tmp.setOver_price(rs.getInt("OVER_PRICE"));
return tmp;
}
}
} catch (SQLException e) {
throw new RuntimeException(e);
} catch (Exception e) {
} finally {
resourcesClose();
}
return null;
}
}
package DAO;
import DTO.Rental_Success;
import java.util.ArrayList;
public class RentSuccessDAO extends Resource_DAO {
private static RentSuccessDAO self = null;
private RentSuccessDAO(){}
private static ArrayList<Rental_Success> list = new ArrayList<>();
public static RentSuccessDAO getInstance(){
if (self == null) self = new RentSuccessDAO();
return self;
}
public static ArrayList<Rental_Success> getList() {
if (list.size() > 0) return list;
return null;
}
@Override
public void setSqlquery_DAO() {
boolean trueConn = isConnections();
if (trueConn) {
try {
sql = "SELECT * FROM Rental_Success";
psmt = conn.prepareStatement(sql);
rs = psmt.executeQuery();
while (rs.next()) {
Rental_Success tmp = new Rental_Success();
tmp.setCar_number(rs.getString("car_number"));
tmp.setLender_name(rs.getString("lender_name"));
tmp.setLender_start(rs.getString("lender_start"));
tmp.setLender_end(rs.getString("lender_end"));
list.add(tmp);
}
} catch (Exception e) {
System.out.println("!!예외발생!!");
e.printStackTrace();
} finally {
resourcesClose();
}
}
}
}
package DAO;
import rentalInfo.Rental_CarAdd;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public abstract class Resource_DAO {
// todo : 리소스 관리 클래스
final static String url = "jdbc:oracle:thin:@192.168.0.70:1521:orcl";
final static String username = "system";
final static String pass = "1111";
static Connection conn = null;
static PreparedStatement psmt = null;
static ResultSet rs = null;
static String sql;
static Rental_CarAdd newCar = null;
// 드라이버로드 생성자
public Resource_DAO(){
try {// 실행중에 발생하는 예외를 처리하여 프로그램 오류가 나지 않게 한다.
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (Exception e) {
System.out.println("Driver Load Failed");// 가 코드에서 드라이버를 로드 못하면 실행
}
}
// 커넥션 시도 리턴값 : 성공/실패
public static boolean isConnections() {
try {
conn = DriverManager.getConnection(url, username, pass);
return true;
} catch (Exception e) {
System.out.println("Connections Failed");
}
return false;
}
// 자원 반납 메서드정의
public static void resourcesClose(){
try {
if ( psmt != null ) psmt.close();
if ( conn != null ) conn.close();
}catch (Exception e){
System.out.println("Resources return Failed");
}
}
// sql 문법 사용 메서드 (추상화)로 진행하여 DB에 접근하는 클래스들은
// 모두 추상화로 재정의해야함
public abstract void setSqlquery_DAO();
}
'👩🏻💻 𝐋𝐚𝐧𝐠𝐮𝐚𝐠𝐞 > ⠀⠀⠀⠀ Jᴀᴠᴀ' 카테고리의 다른 글
2023/11/17 💛 상속과 인터페이스 미니과제 (1) | 2023.11.20 |
---|---|
2023/11/16 🫶 인터페이스와 상속 (0) | 2023.11.20 |
2023/11/14 📌 추상클래스/메서드/상속 과제 (1) | 2023.11.15 |
2023/11/13 🚀 상속과 다형성, 그리고 추상메서드 (0) | 2023.11.14 |
2023/11/12 🦄 학원동호회 - 주말 스터디 (2) | 2023.11.13 |