path


HTML


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
window.onload = function(){
var canvas = document.getElementById('canvas');
if(canvas.getContext){
var context = canvas.getContext('2d');
/*
선 그리기
1. 패스 시작
2. 지정한 패스를 그리기/채우기 메서드 이용
3. 패스 닫기
*/
context.beginPath(); //path 시작
context.moveTo(50,50); //시작점을 옮기는 역할
context.lineTo(80,80); //왼쪽 작은 직선
context.moveTo(140,80);
context.lineTo(170,50);
context.moveTo(60,150);
context.lineTo(170,150);
context.closePath();
context.stroke(); //이거 없으면 안나옴 매우중요함.
}else{
alert('브라우저가 캔버스를 지원하지 않습니다.');
}
};
</script>
</head>
<body>
<canvas id="canvas" width="500" height="300"></canvas>
</body>
</html>


결과











fillRect(3)


HTML


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
window.onload = function(){
var canvas = document.getElementById('canvas');
if(canvas.getContext){
//Context 객체가 그림을 그려줌
var context = canvas.getContext('2d');
//채우기 색상 지정
context.fillStyle ='rgb(200,0,0)';
//색이 칠해져 있는 사각형
context.fillRect(10,10,100,100); //x,y,w,h
//채우기 색상 및 투명도 지정
context.fillStyle = 'rgba(0,0,200,0.5)';
context.fillRect(50,50,100,100); //x,y,w,h
//특정 영역을 지우고 완전 투명
context.clearRect(60,60,40,40);
//선의 색상지정
context.strokeStyle = 'rgb(200,0,250)';
//테두리만 있는 사각형
context.strokeRect(200,50,70,150);
}else{
alert('브라우저가 캔버스를 지원하지 않습니다.');
}
};
</script>
</head>
<body>
<canvas id="canvas" width="500" height="300"></canvas>
</body>
</html>


결과






fillRect(2)


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
window.onload = function(){
var canvas = document.getElementById('canvas');
if(canvas.getContext){
//Context 객체가 그림을 그려줌
var context = canvas.getContext('2d');
//채우기 색상 지정
context.fillStyle ='rgb(200,0,0)';
//색이 칠해져 있는 사각형
context.fillRect(10,10,100,100); //x,y,w,h
}else{
alert('브라우저가 캔버스를 지원하지 않습니다.');
}
};
</script>
</head>
<body>
<canvas id="canvas" width="500" height="300"></canvas>
</body>
</html>



결과





fillRect(1)



<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
window.onload = function(){
var canvas = document.getElementById('canvas');
if(canvas.getContext){
//Context 객체가 그림을 그려줌
var context = canvas.getContext('2d');

//채우기 색상 지정
context.fillStyle ='rgb(200,0,0)';

//색이 칠해져 있는 사각형
context.fillRect(10,10,100,100); //x,y,w,h
}else{
alert('브라우저가 캔버스를 지원하지 않습니다.');
}
};
</script>
</head>
<body>
<canvas id="canvas" width="500" height="300"></canvas>
</body>
</html>





결과










vidio.HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- autoplay : 자동실행,
controls : 제어판 생성 -->
<!-- <video src="../files/river.mp4" width="320" height="240" controls="controls" autoplay="autoplay"></video> -->
<!-- 크롬환경에서 오토플레이가 안될 수 잇습니다. -->
<video src="../files/river.mp4" width="320" height="240" controls="controls" poster="../files/poster.jpg"></video>
<!-- 포스터를 통하여 동영상 재생전에 커버 이미지를 설정할 수 있습니다. -->
<!-- ../files/안에 있는 river.mp4를 재생합니다. 이미지 역시 같은 방식으로 추가합니다. -->
</body>
</html>

결과

poster




river.mp4



audio.html


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<audio controls="controls" autoplay="autoplay">
<source src="../files/old_melody.ogg"></source>
<source src="../files/old_melody.mp3"></source>
</audio>
</body>
</html>

결과









Semantic.html


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>semantic</title>
<link rel="stylesheet" href="style.css" type="text/css">
<!-- style.css 파일을 참고 -->
</head>
<body>
<div id="wrap">
<!-- header: 회사의 로고 , 검색 상자 등 -->
<header id="page_header">
<!-- 제목 -->
<h1>Star Blog</h1>
<!-- nav:페이지 연결 링크,메뉴 -->
<nav>
<ul>
<li><a href="1.html">최근글</a></li>
<li><a href="2.html">이전글</a></li>
<li><a href="3.html">공헌자 글</a></li>
<li><a href="4.html">연락처</a></li>
</ul>
</nav>
</header>
<!-- section 페이지의 논리적영역(내용부분) -->
<section id="posts">
<!-- article 내용부분 -->
<article clasas="post">
<!-- 내용의 머릿말 -->
<header>
<!-- 내용의 작은 제목 -->
<h2>얼마나 많이 기록해 둬야 되겠습니까?</h2>
<p>Posted by Brain on 2018.12.10</p>
</header>
<!-- aside:인용구,덧붙이고 싶은 생각, 관련된 링크 -->
<aside>
<p>&quot;물건을 팔 때는 거절할 기회를 주어선 안 됩니다.&quot;</p>
</aside>
<p>10일 오전 황광희는 자신의 인스타그램에 짧은 영상 하나를 올렸다. 황광희가 입을 벌리면, 입 속에서 마치 ‘보고 싶었어’라는 단어가 쏟아져 나오는 듯한 CG가 재생되는 코믹 영상이다. 황광희는 그동안 자신을 기다려준 팬들을 위한 인사로 이 영상을 올려 웃음을 자아내고 있다.</p>
<!-- 내용의 꼬리말 -->
<footer>
<p>
<a href="comments.html">25 Comments</a>
</p>
</footer>
</article>
</section>
<!-- 사이드바 -->
<section id="sidebar">
<nav>
<h3>이전 글</h3>
<ul>
<li><a href="1.html">2018년1월</a></li>
<li><a href="2.html">2018년2월</a></li>
<li><a href="3.html">2018년3월</a></li>
<li><a href="4.html">2018년4월</a></li>
<li><a href="5.html">2018년5월</a></li>
</ul>
</nav>
</section>
<!-- footer : 저작권이나 사이트 소유자에 대한 정보 ,메뉴 등 -->
<footer id="page_footer">
<p>&copy; Star Blog</p>
<nav>
<ul>
<li><a href="#">홈페이지</a></li>
<li><a href="#">회사소개</a></li>
<li><a href="#">연락처</a></li>
<li><a href="#">게시판</a></li>
</ul>
</nav>
</footer>
</div>
</body>
</html>

















style.css


@charset "UTF-8";
/*여백 및 기본적인 폰트를 설정*/
body{
margin:0;
padding:0;
font-family: Arial,"MS Trebuchet",sans-serif;
}
/* 페이지의 내용을 가운데 놓음*/
#wrap{
width: 960px;
margin:0 auto;
}
/*헤더의 넓이를 정함*/
header#page_header{
width: 100%
}
/* 내비게이션의 리스트 점 제거 */
header#page_header nav ul, footer#page_footer nav ul{
list-style:none;
margin: 0;
padding:0;
}
/* 내비게이션을 가로 바 형태로 만듦 */
header#page_header nav ul li, footer#page_footer nav ul li{
padding:0;
margin: 0 20px 0 0;
display: inline;
}
p{
margin: 0 0 20px 0;
}
/* 가로 방향으로 표시*/
section#posts{
float:left;
width: 74%;
}
section#posts aside{
float:right;
width: 35%;
margin-left: 5%;
font-size: 20px;
line-height: 40px;
}
section#sidebar{
float: left;
width: 25%;
}
/*float를 해제해서 페이지 하단에 안착시킴*/
footer#page_footer{
clear: both;
width: 100%;
text-align: center;
}








CSS 를 잘 분석해 보시기 바랍니다.

간단한 예제 시멘틱 태그와 HTML폼

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 머리말부분 -->
<header>
<!-- 제목과 부제목을 묶어주는 역할 -->
<hgroup>
<!-- h1~h5 숫자가 커질수록 크기가 작아진다. -->
<h1>서울 고등학교 홈페이지</h1>
<h4>우리들만의 즐거운 공간</h4>
</hgroup>
<!-- 메인메뉴,서브 메뉴를 정의할 떄 사용 -->
<nav>
<ul>
<!-- href="#" : 더미태그 -->
<li><a href="#">1학년</a></li>
<li><a href="#">2학년</a></li>
<li><a href="#">3학년</a></li>
</ul>
</nav>
</header>
<!-- 내용 -->
<section>
<!-- 내용의 머릿말 부분 -->
<header>
<h3>이달의 인물</h3>
</header>
<article>
교내 영상제에서 <strong>최우수상</strong> 을받은 <mark>이빛나양</mark>을 만나봅니다.
</article>
</section>
<footer>
&copy; 서울 고등학교
</footer>
</body>
</html>











-- 중첩 테이블 : 중첩 테이블은 varray 와 흡사하지만 중첩 테이블은 선언시에 전체 크기를 명시할 필요가 없음


declare

 type nested_test is table of varchar2(10);

 --위에서 선언한 nested_test 타입 변수

 nested1 nested_test;

begin

 --중첩 테이블에 데이터 저장

 nested1:=nested_test('A','B','C','D');

 dbms_output.put_line(nested1(2));

end;


-- Associative array(index-by table) 연관배열 : 키와 값의 쌍으로 구성된 컬렉션


declare

  type assoc_array_num_type is table of number index by pls_integer;

  --key는 pls_integer 형이며, value는 number형인 요소들로 구성

  --[주의]key에 자료형을 명시할 때 integer로 명시하면 오류 발생

  assoc1 assoc_array_num_type;

begin

  --key는 3, value는 33 저장

  assoc1(3):=33;

  dbms_output.put_line(assoc1(3));

end;


declare

  type assoc_array_str_type2 is table of varchar2(32) index by varchar2(64);

  assoc3 assoc_array_str_type2;

begin

  assoc3('K'):='KOREA';

  dbms_output.put_line(assoc3('K'));

end;


-- 콜렉션을 데이터베이스 객체로 생성

create type alphabet_type as varray(26) of varchar2(2);


-- 데이터베이스 객체로 생성된 콜렉션을 호출함

declare

  test_alph alphabet_type;

begin

  test_alph:=alphabet_type('A','B','C','D');

  dbms_output.put_line(test_alph(1));

end;


-- 레코드 : 각기 다른 데이터 타입을 가질 수 있는 구조 ,프로그래밍 언어와 비교하면 구조체 또는 자바 클래스에 멤버변수만 명시한 형태


declare

  type record1 is record(deptno number not null:=50,

                         dname varchar2(14),

                         loc varchar2(13)

                         );

  --위에 선언한 record1을 받는 변수 선언

  rec1 record1;

begin

  rec1.dname:='레코드';

  rec1.loc:='SEOUL';

  

  --rec1 레코드 값을 dept 테이블에 insert

  INSERT INTO dept VALUES rec1;

  --insert 작업이 정상적으로 수행

  COMMIT;

exception when others then

  Rollback;

end;



-- if 문

declare

  grade char(1);

begin

  grade:='B';

 

  if grade='A' then

    dbms_output.put_line('Excellent');

  elsif grade='B' then

    dbms_output.put_line('Good');

  elsif grade='C' then

    dbms_output.put_line('Fair');

  elsif grade='D' then

    dbms_output.put_line('Poor');

  end if;

end;


-- case 문


declare

  grade char(1);

begin

  grade:='B';

 

  case grade

  when 'A' then

    dbms_output.put_line('Excellent');

  when 'B' then

    dbms_output.put_line('Good');

  when 'C' then

    dbms_output.put_line('Fair');

  when 'D' then

    dbms_output.put_line('Poor');

  else

    dbms_output.put_line('Not Found');

  end case;

end;



-- loop문

declare

  test_number integer;

  result_num integer;

begin

  test_number:=1;


  loop

    result_num:=2*test_number;

    if result_num > 20 then

       exit; --블록 종료

    else

      dbms_output.put_line(result_num);

    end if;

    test_number:=test_number+1;

  end loop;

end;



declare

  test_number integer;

  result_num integer;

begin

  test_number:=1;

  

  loop

    result_num:=2*test_number;

    --exit when 조건

    exit when result_num>20;

    

    dbms_output.put_line(result_num);

    test_number:=test_number + 1;

  end loop;

end; 



-- while-loop문


declare

  test_number integer;

  result_num integer;

begin

  test_number:=1;

  result_num:=0;

  

  while result_num<20 loop

    result_num:=2*test_number;

    dbms_output.put_line(result_num);

    test_number:=test_number+1;

  end loop;

end;


-- for ... loop 문


declare

  test_number integer;

  result_num integer;

begin

  test_number:=1;

  result_num:=0;

 

   for test_number in 1..10 loop

     result_num:=2*test_number;

     dbms_output.put_line(result_num);

  end loop;

end;

----------------------------------------------------

declare

  test_number integer;

  result_num integer;

begin

  test_number:=1;

  result_num:=0;


  for test_number in reverse 1..10 loop 

    result_num:=2*test_number;

    dbms_output.put_line(result_num);

  end loop;

end;


-- ★ 커서 : SELECT 문장을 실행하면 조건에 따라 결과가 추출되는데 결과 집합에 접근하기 위해서 커서(CURSOR) 사용


declare

  cursor emp_csr is

  SELECT empno

  FROM emp

  WHERE deptno=10;

  

  emp_no emp.empno%type;

begin

  open emp_csr;

   

    loop

      fetch emp_csr into emp_no;

      --%notfound : 커서에서만 사용 가능한 속성

      --더 이상 패치(할당)할 로우(행)가 없음을 의미

      exit when emp_csr%notfound;


      dbms_output.put_line(emp_no);

    end loop;

  close emp_csr;

end;


-- PL/SQL 서브프로그램

--데이터베이스 객체로 저장해서 필요할 때마다 호출할 수 있는 형태

--프로시저, 함수


-- 함수

--입력받은 값으로부터 10%의 세율을 얻는 함수

create or replace function tax(p_value in number) --in은 생략가능

  return number

is

begin

  return p_value*0.1;

end;


SELECT TAX(100) FROM dual;

SELECT ename,sal,TAX(sal) tax FROM emp;


--급여와 커미션을 합쳐서 세금 계산


create or replace function tax2(p_sal in emp.sal%type,

                                p_bonus emp.comm%type)

  return number

is

begin

  return (p_sal + nvl(p_bonus,0))*0.1;

end;


SELECT empno,ename,sal,comm,TAX2(sal,comm) AS tax FROM emp;


--급여(보너스 포함)에 대한 세율을 다음과 같이 정의함.

--급여가 월 $1,000보다 적으면 세율을 5% 적용하며,

--$1,000이상 $2,000이하면 10%, $2,000을 초과하면 20%를 적용함


create or replace function tax3(

              p_sal in emp.sal%type,

              p_bonus emp.comm%type)

  return number

is

  l_sum number;

  l_tax number;

begin

  l_sum:=p_sal+nvl(p_bonus,0);


  if l_sum<1000 then

    l_tax:=l_sum*0.05;

  elsif l_sum<=2000 then

    l_tax:=l_sum*0.1;

  else

    l_tax:=l_sum*0.2;

  end if;


  return l_tax;

end;   



SELECT empno,ename,sal,comm,TAX3(sal,comm) as tax FROM emp;


--사원번호를 통해서 급여를 알려주는 함수

create or replace function emp_salaries(emp_no number)

  return number is

  nSalaries number(9);

begin

  nSalaries:=0;

  SELECT sal 

  INTO nSalaries

  FROM emp

  WHERE empno=emp_no;

   

  return nSalaries;

end;


SELECT emp_salaries(7698) FROM dual;


--부서번호를 전달하면 부서명을 구할 수 있는 함수

create or replace function get_dept_name(dept_no number)

  return varchar2 is        

  sDeptName varchar2(30);

begin

  SELECT dname

  INTO sDeptName

  FROM dept

  WHERE deptno=dept_no;

   

  return sDeptName;

end;


SELECT GET_DEPT_NAME(10) FROM dual;

SELECT empno,ename,sal,GET_DEPT_NAME(deptno) "Department Name" FROM emp;


-- 생성된 함수 확인하기

SELECT object_name,object_type FROM user_objects Where object_type='FUNCTION';


-- 작성된 함수의 소스 코드 확인

SELECT text FROM user_source WHERE type='FUNCTION' AND name='TAX';



--<실습문제>

--1)두 숫자를 제공하면 덧셈을 해서 결과값을 반환하는 함수를 정의(add_num)

create or replace function add_num(

              num1 integer,

              num2 integer)

  return integer

is

begin

  return num1+num2;

end;


SELECT ADD_NUM(5,6) FROM dual;

SELECT ename, ADD_NUM(sal,NVL(comm,0)) 실급여

FROM emp;


--2)부서번호를 입력하면 해당 부서에서 근무하는 사원 수를 반환하는 함수를 정의

create or replace function get_emp_count(

            dept_no emp.deptno%type)

  return integer

is

  emp_count integer;

begin

  SELECT COUNT(*) count

  INTO emp_count

  FROM emp

  WHERE deptno=dept_no;

  

  return emp_count;

end;


SELECT deptno,get_emp_count(deptno) FROM dept;


--3)emp테이블의 입사일을 입력하면 근무연차를 구하는 함수를 정의하시오.(소수점 자리는 절삭)

create or replace function get_info_hiredate(

          hire_date emp.hiredate%type)

  return integer

is

begin

  return TRUNC(MONTHS_BETWEEN(SYSDATE,hire_date)/12);

end;


SELECT ename,get_info_hiredate(hiredate) FROM emp;



--4)emp테이블을 이용해서 사원번호를 입력하면 사원의 관리자 이름을 구하는 함수를 정의

create or replace function get_mgr_name(

            emp_no emp.empno%type)

  return varchar2

is

  m_name varchar2(10);

begin

  SELECT ename

  INTO m_name

  FROM emp

  WHERE empno=(SELECT mgr 

               FROM emp 

               WHERE empno=emp_no);

  return m_name;

end;


SELECT empno,ename,mgr 관리자번호,get_mgr_name(empno) 관리자이름 FROM emp;


--5)emp테이블을 이용해서 사원번호를 입력하면 급여등급을 구하는 함수를 정의

create or replace function get_sal_grade(

            emp_no emp.empno%type)

  return char

is

  sgrade char(1);

begin

  SELECT CASE WHEN sal>=4000 AND sal<=5000 THEN 'A'

              WHEN sal>=3000 AND sal<4000 THEN 'B'

              WHEN sal>=2000 AND sal<3000 THEN 'C'

              WHEN sal>=1000 AND sal<2000 THEN 'D'

              ELSE 'F'

          END grade

  INTO sgrade

  FROM emp

  WHERE empno=emp_no;

  

  return sgrade;

end;  


SELECT ename,sal,get_sal_grade(empno) 등급 FROM emp;


create or replace function get_sal_grade2(

            emp_no emp.empno%type)

  return integer

is

  sgrade integer;

begin

  SELECT s.grade

  INTO sgrade

  FROM emp e, salgrade s

  WHERE e.sal BETWEEN s.losal AND s.hisal

  AND e.empno=emp_no;

  

  return sgrade;

end;


SELECT ename,sal,GET_SAL_GRADE2(empno) 등급 FROM emp;

+ Recent posts