반응형
Greensky0026
삽질러의 대환장 공사판
Greensky0026
전체 방문자
오늘
어제
  • 분류 전체보기 (241)
    • Language (56)
      • JAVA (13)
      • Swift (38)
      • Kotlin (4)
      • Dart (0)
      • PHP (0)
      • JavaScript (1)
    • IDE & Framework (92)
      • Spring (10)
      • Android (48)
      • iOS (8)
      • NodeJS (1)
      • CodeIgniter (3)
      • Flutter (1)
      • 분류중 (18)
    • Infra (8)
    • Database (12)
    • VCS (4)
    • Debug Log (34)
      • java (7)
      • swift (3)
      • Android (9)
      • Web (7)
      • 삽질기 (7)
    • Others (19)
      • 코딩테스트 풀이 (0)
      • IT 이야기 (18)
    • 쉼터 (2)
    • 개발공부 (14)
      • Network (1)
      • 자료구조와 알고리즘 (2)
      • Code design (8)
      • ETC (1)
      • 아카이브 (1)

블로그 메뉴

    공지사항

    • 프로그래머스 코딩 테스트 관련글 비공개 처리

    인기 글

    태그

    • 공부
    • level1
    • 코딩테스트
    • kotlin
    • JSP
    • 프로그래밍
    • xcode
    • 구축
    • Java
    • Android
    • reduce
    • 프로그래머스
    • 타입
    • swfit
    • IT
    • 개발
    • ios
    • swift
    • 예제
    • map

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    Greensky0026

    삽질러의 대환장 공사판

    JS 상호작용되는 달력 만들기 (4) - 예약달력 (중)
    IDE & Framework/분류중

    JS 상호작용되는 달력 만들기 (4) - 예약달력 (중)

    2021. 6. 1. 02:24
    반응형

    서론

     글이 너무 길어져서 달력과 시간표로 나눠서 작성하게 되었습니다.

    지난번에 이어서 추가로 이어집니다.

     

    개발환경

    •  IDE : Eclipse
    •  사용 언어 : HTML, JSP, Java script, SQL
    •  사용 라이브러리 : JSTL, JSON

     

    목차

    1. 가정

    2. 제약사항

    3. 구조

        ㄱ. HTML

        ㄴ. Java script

    4. 시간표 구성

        ㄱ. 지금 만들어진 달력이 현재 달력인지 확인

        ㄴ. 요일입력에 내용 추가

        ㄷ. 예약불가일자 처리 (1/2) - 요일생성 안

        ㄹ. 예약불가일 예외처리

        ㅁ. 예약가능일 클릭이벤트 추가

        ㅂ. 예약불가일자 처리 (2/2) - 요일생성 밖

    5. 예약정보 출력


    1. 가정

    • 예약되어있는 데이터는 JSONArray로 받아옴
      <%
      JSONArray thisMonthResData = (JSONArray)request.getAttribute("thisMonthResData");
      JSONArray nextMonthResData = (JSONArray)request.getAttribute("nextMonthResData");
      %>
    • JSONArray에 담긴 JSONObject의 키는 date이고, 값은 다음과 같다.
      ArrayList<Integer> startNum;
      ArrayList<Integer> shareTime;
      int totalShareTime;
      • startNum : 해당일의 예약건수들의 시작시간이 오름차순으로 담긴 ArrayList
      • shareTime : 해당일의 예약 건수마다 이용하는 시간이 예약시작시간기준 오름차순 담긴 ArrayList
      • totalShareTime : 해당일에 예약된 총 시간

    2. 제약사항

    • 예약가능 시간 제한. 형식은 hh
      <%
      int startTime = share.getStartTime();
      int endTime = share.getEndTime();
      int totalUsingTime = endTime - startTime;
      %>

    3. 구조

    ㄱ. HTML

    //시간표를 출력할 테이블
    <table id = "timeTable"></table>
    //선택 초기화 버튼
    <button type="button" onclick="tableinit()">초기화</button>

    ㄴ. Java script

    //————time table——————
    var price = "<%=price%>";
    var startTime = "<%=startTime%>";
    var endTime = "<%=endTime%>";
    //사용자가 시간표에서 선택한 시간
    var selectedFirstTime = 24*1;
    var selectedFinalTime = 0*1;
    
    //시간표 제작
    function timeTableMaker(selectedMonth, selectedDate){…};
    //시간표 초기화
    function tableinit(){…};
    //시간표 및 예약시간과 결제시간을 초기화
    function selectedTimeAndTotalPriceInit(){…};

    4. 시간표 구성

    시간표를 만드는 function timeTableMaker(selectedMonth, selectedDate) 함수부터 시작하겠습니다.

    function timeTableMaker(selectedMonth, selectedDate){
    	row = null
    	month = selectedMonth;
    	date = selectedDate;
    	var timeTable = document.getElementById("timeTable");
        
        //...

     달력에서 선택한 셀의 달과 날자를 받아오고, 시간표를 출력할 테이블을 가져오는것부터 시작합니다.

     

    ㄱ. 테이블 초기화

    while(timeTable.rows.length > 0){
    	timeTable.deleteRow(timeTable.rows.length-1);
    }

     

    ㄴ.시간표 테이블 생성

    for (i = 0; i < endTime - startTime; i++){
    	cellTime = startTime*1 + i;
    	cellStartTimeText = cellTime + ":00";
    	cellEndTimeText = (cellTime + 1) + ":00";
    	inputCellText = cellStartTimeText + " ~ " +  cellEndTimeText;
    			
    	row = timeTable.insertRow();
    	cell = row.insertCell();
    	cell.setAttribute('id', cellTime);
    	cell.innerHTML = inputCellText;
    }
    • 시작시간부터 1시간씩 순차적으로 셀을 생성합니다.
    • 셀의 id는 행의 시작시간입니다.

     

    ㄷ. 시간표 테이블의 클릭이벤트

    cell.onclick = function(){
    	cellTime = this.getAttribute('id');
    	cellTime = cellTime*1;
        //...

    ㄴ의 for문 하단에 입력하게 됩니다.

     

    a. 선택한 시간을 전역변수에 저장 

    //예약일시 입력처리
    if (selectedFirstTime != 24 && selectedFinalTime != 0){
    	if(cellTime < selectedFirstTime - 1){
    		alert("연속한 시간만 예약가능합니다.");
    		return false;
    	}
    	if (cellTime > selectedFinalTime + 1){
    		alert("연속한 시간만 예약가능합니다.");
    		console.log(cellTime + ">" + selectedFinalTime + 1)
    		return false;
    	}
    }
    • 예약시간을 selectedFirstTime, selectedFinalTime 변수에 저장합니다.
    • 퐁당선택을 하지 못하도록 예외처리를 합니다.
    • 연속된 선택을 저장하기 쉽게 시작시간과 마지막시간 두종류의 변수를 사용합니다.
    • 유효하지 않은 선택일경우 false를 반환하여 이후 이벤트들이 적용되지 않도록 합니다.

     

    b. 선택된 셀의 색상 변경

    this.bgColor = "#fbedaa";
    if (cellTime < selectedFirstTime) {
    	selectedFirstTime = cellTime
    }
    if (cellTime > selectedFinalTime) {
    	selectedFinalTime = cellTime
    }

    연속된 선택시 알맞게 selectedFirstTime와 selectedFinalTime를 갱신합니다.


    5.  예약정보 출력

    //하단의 예약일시에 시간 표시
    resTime  = selectedFirstTime + ":00 ~ " + (selectedFinalTime + 1) + ":00";
    resTimeForm = document.getElementById("selectedTime");
    resTimeForm.value = resTime;
    				
    //하단의 결제정보에 가격정보 표시
    useTime = (selectedFinalTime + 1) - selectedFirstTime;
    	
    useTimeForm = document.getElementById("totalPrice");
    useTimeForm.value = useTime * price;

    6.  결제정보 초기화

    function tableinit(){
    	timeTableMaker(selectedMonth, selectedDate);
    	selectedTimeAndTotalPriceInit();
    	buildCalendar();
    }
    function selectedTimeAndTotalPriceInit(){
    	resDateForm = document.getElementById("selectedDate");
    	resTimeForm = document.getElementById("selectedTime");
    	resTimeForm.value = "";
    	resDateForm.value = "";
    	
    	useTimeForm = document.getElementById("totalPrice");
    	useTimeForm.value = "";
    	
    	selectedFirstTime = 24*1;
    	selectedFinalTime = 0*1;
    }

     초기화 버튼이 호출하는 함수입니다.

    하단에 입력된 결제정보 및 달력과 시간표를 초기화합니다.

     

     

     

    반응형
    저작자표시 (새창열림)

    'IDE & Framework > 분류중' 카테고리의 다른 글

    JSP-톰캣 DataSource-server context를 사용한 DB connect  (0) 2021.06.02
    JS 상호작용되는 달력 만들기 (5) - 예약달력 (하)  (0) 2021.06.01
    JS 상호작용되는 달력 만들기 (3) - 예약달력 (상)  (5) 2021.06.01
    JS 상호작용되는 달력 만들기 (2) - 날짜 검색 달력  (1) 2021.05.31
    JS 상호작용되는 달력 만들기 (1) - 시작하며  (1) 2021.05.31
      'IDE & Framework/분류중' 카테고리의 다른 글
      • JSP-톰캣 DataSource-server context를 사용한 DB connect
      • JS 상호작용되는 달력 만들기 (5) - 예약달력 (하)
      • JS 상호작용되는 달력 만들기 (3) - 예약달력 (상)
      • JS 상호작용되는 달력 만들기 (2) - 날짜 검색 달력
      Greensky0026
      Greensky0026
      점이 모여 선이 된다. 내 삽질도 언젠간 거대한 지하 도시가 되겠지!

      티스토리툴바