반응형

* chage

옵션

설명

-i

chage설정 내용을 확인

-m

새로운 패스워드를 변경할 수 있는 최소일수

-M

유효한 패스워드의 최대일수

-W

사용자가 패스워드를 바꿀때까지 경고할 일수

-E

뒤의 만료일 날짜 시간을 정해준다

-d

사용자가 패스워드를 변경한 마지막 일자



 

* groupadd

옵션

설명

-r

시스템에 사용되는 gid를 부여, 500번 이하의 가장 빠른 gid를 생성

-g

그룹에 gid를 지정 합니다.


 

* groupmod

옵션

설명

-g

change the group ID to GID

-h

display this help message and exit

-n

change the name to NEW_GROUP

-o

allow to use a duplicate (non-unique) GID

-p

change the password to this (encrypted) PASSWORD

-R

directory to chroot into

 


* RPM

자주 사용하는 RPM 명령어 옵션

설치 : rpm -Uvh 패키지파일이름.rpm

U (대문자) 패키지가 설치/업그레이드

v 설치과정의 확인

h 설치진행과정을 "#"마크로 화면에 출력

삭제 : rpm -e 패키지이름

이미 설치된 패키지 질의

rpm -qa 패키지 이름 패키지가 설치되었는지 확인

rpm qf 파일의 절대경로 파일이 어느 패키지에 포함된 것인지 확인

 

아직 설치되지 않은 rpm 파일에 대한 질의

rpm qlp 패키지파일이름.rpm 패키지 파일에 어떤 파일들이 포함되었는지 확인

rpm qip 패키지파일이름.rpm 패키지 파일의 상세정보

 

파일 압축

명령어

설명

xz

확장명 xz로 압축하거나 풀어줌

최신 압축 명령으로 압축률이 뛰어남

bzip2

확장명 bz2로 압축하거나 풀어줌

bunzip2

확장명 bz2로 압축을 풀어줌

bzip2 -d

gzip

확장명 gz로 압축하거나 풀어줌

gunzip

확장명 gz로 압축을 풀어줌

gzip d

zip

Windows 호환

확장명 zip 으로 압축하거나 풀어줌

unzip

Windows 호환

zip으로 묶은 압축을 풀어줌

 

파일 묶기

명령어

설명

tar

확장명 tar로 묶음 파일을 만들어 주거나 묶음을 풀어줌

동작

설명

c

새로운 묶음을 만들어줌

x

묶인 파일 압축 해제

t

묶음을 풀기 전에 묶인 경로를 보여줌

C

지정된 디렉터리에 압축을 품

옵션

설명

f

이름 지정

v

파일이 묶이거나 풀리는 과정을 보여줌

J

tar+xz

z

tar + gzip

j

tar + bzip2


반응형

'리눅스' 카테고리의 다른 글

우분투 설치 및 Nvidia 그래픽 드라이버 설치  (0) 2021.09.22
리눅스 기본 개념 정리  (0) 2017.05.28
가상 머신 종류  (0) 2017.05.28
반응형

4.1 시작과 종료

종료하는 방법

 바탕 화면의 [사용자 이름]  [컴퓨터 끄기]  <컴퓨터 끄기>

 터미널/콘솔에서 시스템 종료 명령 입력 (shutdown P now , halt p , init 0)

 

시스템 재부팅

 바탕 화면의 [사용자 이름]  [컴퓨터 끄기]  <다시 시작>

 터미널/콘솔에서 시스템 재부팅 명령 입력 (shutdown -r now , reboot , init 6)

 

로그아웃

 바탕 화면의 [사용자 이름]  [로그아웃]

 터미널/콘솔에서 시스템 종료 명령 입력 (logout / exit)

 

가상 콘솔

가상 모니터로 총 6개의 가상 콘솔을 제공

단축키 : Ctrl + Alt + F2 ~ F6

 

런레벨

init 명령어 뒤에 붙는 숫자를 런레벨이라고 함


런 레벨 모드를 확일 할 때는 /lib/systemd/system 디렉터리의 runlevel?.target 파일을 확인

 

자동완성과 히스토리

자동 완성 : 파일명의 일부만 입력 후 Tab 키를 눌러 나머지 파일명을 자동으로 완성하는 기능

도스 키 : 이전에 입력한 명령어를 상/하 화살표 키를 이용해서 다시 나타내는 기능을 말함

히스토리(history) : 이전에 입력한 명령어를 출력해 주는 명령어

 

에디터의 사용

vi 에디터 사용법 개요도


 

명령모드 -> 입력 모드

i

현재 커서의 위치부터 입력

I

현재 커서의 맨 앞에서부터 입력

a

현재 커서의 위치 다음칸부터 입력

A

현재 커서 줄의 맨 마지막부터 입력

명령 모드에서 커서를 이동

h

커서를 한 칸 왼쪽으로 이동

j

커서를 한 칸 아래로 이동

k

커서를 한 칸 위로 이동

l

커서를 오른쪽으로 한 칸 이동

명령 모드에서 삭제, 복사, 붙여 넣기

x

현재 커서가 위치한 글자 삭제

X

현재 커서가 위치한 앞 글자 삭제

dd

현재 커서의 행 삭제

숫자 dd

현재 커서부터 숫자만큼의 행 삭제

yy

현재 커서가 있는 행을 복사

숫자 yy

현재 커서부터 숫자만큼의 행을 복사

p

복사한 내용을 현재 행 이후에 붙여 넣기

P

복사한 내용을 현재 행 이전에 붙여 넣기

도움말 사용법

man 명렁어를 입력하면 도움말 출력

 

마운트와 CD/DVD  USB 메모리의 활용

물리적인 장치를 특정한 위치에 연결 시켜 주는 과정

 

4.2 리눅스 기본 명령어

명령어

설명

ls

해당 디렉터리에 있는 파일의 목록을 나열

cd

디렉터리 이동

pwd

현재 디렉터리의 전체 경로를 출력

rm

파일이나 디렉터리 삭제

cp

파일이나 디렉터리 복사

touch

크기가 0인 새 파일 생성, 이미 존재하는 경우 수정 시간 변경

mv

파일과 디렉터리의 이름을 변경하거나 위치 이동시 사용

mkdir

새로운 디렉터리 생성

rmdir

디렉터리 삭제

cat

텍스트로 작성된 파일을 화면에 출력

head , tail

텍스트로 작성된 파일의 앞 10 , 혹은 마지막 10행만 출력

more

텍스트로 작성된 파일을 화면에 페이지 단위로 출력

less

more 와 용도가 비슷하고 기능이 확장 됨

추가로 page up/ page down 키도 사용 가능

file

해당 파일이 어떤 종류의 파일인지 표시

clear

명령 창을 깨끗하게 지워줌

4.3 사용자 관리와 파일 속성

파일의 리스트와 파일 속성

파일 유형

디렉터리일 경우에는 d, 일반적인 파일일 경우에는 가 표시

 

파일 허가권

3개씩 끊어서 읽음 (rw-, r--, ...)  3개의 덩어리로 구성

첫 번째는 소유자의 파일 접근 권한

두 번째는 그룹의 파일 접근 권한

세 번째는 그 외의 사용자의 파일 접근 권한

숫자로도 표시가능 (8진수)

 

사용자와 그룹 관련 명령어

명령어

설명

useradd

새로운 사용자 추가

passwd

사용자의 비밀번호를 지정하거나 변경

usermod

사용자의 속성을 변경

userdel

사용자를 삭제

chage

사용자의 암호를 주기적으로 변경하도록 설정

groups

사용자가 소속된 그룹을 보여줌

groupadd

그룹을 새로 생성

groupmod

그룹의 속성을 변경

groupdel

그룹 삭제

gpasswd

그룹의 암호 설정, 그룹 관리 수행

 

 

파일과 디렉터리 소유와 허가권

명령어

설명

chmod

파일 허가권 변경

chown, chgrp

파일의 소유권을 바꾸는 명령어

 

링크 생성

명령어

설명

ln file1 file2

file1 file2의 이름으로 하드링크를 만듦

ln s file1 file2

file1 file2의 이름으로 소프트 링크를 만듦

 

프로그램 설치를 위한 RPM

RPM : Windows setup.exe와 비슷한 설치 파일로 확장명은 *.rpm이며, 이를 패키지라고 부름

파일의 의미 : 패키지 이름-버전-릴리즈번호.페도라버전.아키텍처.rpm

 

4.4 리눅스 관리자를 위한 명령어

파일 위치 검색

find [경로][옵션][조건][action] : 기본 파일 찾기

which 실행파일이름 : path에 설정된 디렉터리만 검색

whereis 실행파일이름 : 실행파일, 소스, man 페이지 파일까지 검색

locate 파일이름 : 파일 목록 데이터베이스에서 검색

 

시스템 설정

날짜 및 설정(system-config-date)

네트워크 설정 (system-config-network)

방화벽 설정(system-config-firewall)

서비스 설정(system-config-services)

그 외 설정

system-config-keyboard : 키보드 설정

system-config-printer : 프린터 설정

system-config-services : 서비스의 가동/중지를 설정

system-config-users : 사용자 설정

system-config-bind : 네임 서버 설정

system-config-display : X 윈도우 환경 설정

system-config-httpd : 웹 서버 설정

system-config-samba : 삼바 서버 설정

 

CRON  AT

cron

주기적으로 반복되는 일을 자동으로 실행할 수 있도록 시스템 작업을 예약해 놓는 것

관련된 데몬 서비스 : crond

관련 파일 : /etc/crontab

형식 : 분 시 일 월 요일 사용자 실행명령

 

at

일회성 작업 예약

예약해 놓으면 한 번만 실행되고 소멸

예약 : at 시간

 

4.5 네트워크 관련 설정과 명령어

네트워크 관련 필수 개념

TCP/IP : 컴퓨터끼리 네트워크 상으로 의사소통을 하는 프로토콜 중 가장 널리 사용되는 프로토콜의 한 종류

호스트 이름(Hostname)과 도메인 이름(Domain name) : 호스트 이름은 각각의 컴퓨터에 지정된 이름이다. 도메인 이름(또는 도메인 주소) hanbit.co.kr

IP 주소 : 각 컴퓨터의 랜카드에 부여되는 중복되지 않는 유일한 주소, 4바이트로 이루어져 있으며, 각 자리는 0~255까지의 숫자로 이루어진다.

네트워크 주소 : 같은 네트워크에 속해 있는 공통된 주소이다.

브로드캐스트 주소 : 내부 네트워크의 모든 컴퓨터가 듣게 되는 주소로 현재 주소의 제일 끝자리를 255로 바꾼 주소이다.

게이트웨이, 라우터 : 네트워크 간에 데이터를 전송하는 컴퓨터 또는 장비를 말하며 Vmware의 게이트웨이 주소는 192.168.111.2로 고정되어 있다.

넷마스크, 클래스 : 네트워크의 규모를 결정해 준다.

DNS(Domain Name System)서버 주소 : URL을 해당 컴퓨터의 IP주소로 변환해 주는 서버이다.

 

서비스와 소켓

서비스

시스템과 독자적으로 구동되어 제공하는 프로세스

ex >웹 서버(httpd), DB 서버(mysqld), FTP 서버(vsftpd) 

실행 및 종료는 대개 systemctl start/stop/restart 서비스이름으로 사용

서비스의 실행 스크립트 파일은 /usr/lib/systemd/system/ 디렉터리에 서비스이름.service 라는 이름으로 확인


 

소켓

서비스는 항상 가동되지만, 소켓은 외부에서 특정 서비스를 요청할 경우에 systemd가 구동 후 요청이 끝나면 소켓도 종료

소켓으로 설정된 서비스를 요청할 때는 systemd가 서비스를 새로 구동하는데 시간이 소요 되므로 처음 연결되는 시간이 앞에서 설명한 서비스에 비교했을 때 약간 더 걸릴 수 있음

소켓과 관련된 스크립트 파일 : /usr/lib/systemd/system/ 디렉터리에 소켓이름.socket

 

모듈의 개념과 커널 컴파일의 필요성

모듈 : 필요할 때마다 호출하여 사용되는 코드


 

커널 컴파일 순서

 

 

반응형

'리눅스' 카테고리의 다른 글

우분투 설치 및 Nvidia 그래픽 드라이버 설치  (0) 2021.09.22
리눅스 기본 명령어  (0) 2017.05.28
가상 머신 종류  (0) 2017.05.28
반응형

1. Virtual Box

- innotek 에서 제작된 소프트웨어로 현재 오라클에서 상용 및 사유

- 지원 : 리눅스, OS X, 솔라리스, 윈도우

- 32비트 가상화 소프트웨어

- open source

- VMWare 워크 스테이션 및 마이크로소프트 Virtual PC 에 비해 기능이 적음

- 원격 데스크톱 프로토콜, iSCSI 지원 및 RDP를 거치는 원격 장치의 USB 지원과 같이 원격으로 가상 컴퓨터를 제어 가능

 

2. Parallels

- Parallels 사의 macOS용 가상화 프로그램

- 개인 사용자에 특화

- mac 사용자가 많이 사용

 

3. VMware

- 많이 알려져 있는 상용 소프트웨어

- 여러 가상 머신을 다룰 수 있음

- 깔끔한 UI

- 지원되는 외부 디바이스 다양

- 실제 PC에서는 동작하지만 VMWare에서는 동작하지 않는 경우도 있음

 

장점

- 한 대의 컴퓨터에서 여러 운영체제를 동시에 수행 가능

- 게스트 컴퓨터는 호스트 컴퓨터에 영향을 주지 않음

- 호스트 게스트 또는 게스트 게스트 끼리 서로 연결 및 통신 가능(네트워크 기능)

- 게스트 컴퓨터들의 상태를 원하는 대로 저장 및 복원 가능(스냅샷)

 

단점

- 가상으로 생성하여 사용하므로 실제 컴퓨터보다 속도가 느림

- HOST 컴퓨터의 자원을 빌려 사용하므로, HOST 컴퓨터의 성능에 영향을 주며, HOST 컴퓨터의 성능에 영향을 받음

 

 

Virtual Box

Parallels

VMWare

HostOS

Windows, Linux, Solaris, Mac

Windows, Linux, Mac

Windows, Linux, Mac

Guest OS

DOS, Windows, Linux, Solaris

DOS, Windows, Linux, OS2

DOS, Windows, Linux, Solaris, FreeBSD

제공사

Oracle

Parallels IP Holdings

VMWare

라이센스

무료(오픈소스)

유료($49 ~ $79)

쉐어웨어/상용($79 ~ $189)

 

4. QEMU

- Fabrice Bellard가 만든 소프트웨어

- 32비트 이외의 기종을 위해 만들어진 스택 전체를 가상 머신 위에서 실행 가능

- 동적 변환기 사용

- 사용자 모드 에뮬레이션과 완전한 컴퓨터 시스템 모드 에뮬레이션을 지원

 

* 사용자 모드 에뮬레이션

- 다른 명령어 집합으로 컴파일 된 단일 리눅스, 다윈, macOS X 프로세스 실행 가능

 

* 완전한 컴퓨터 시스템 모드 에뮬레이션

- 프로세서와 가상 주변 기기들을 포함한 완전한 컴퓨터 시스템을 에뮬레이트

- 한 컴퓨터에 여러 개의 가상 컴퓨터의 가상 호스팅을 제공하는데 사용

- 리눅스, 도스, BSD 와 같은 많은 게스트 운영체제들을 지원

 

5. Windows Virtual PC

- microsoft 사에서 제공되는 기능 제한이 없는 소프트웨어

- 단순한 유아이에 비해 필요한 기능을 모두 제공하고 있음

반응형

'리눅스' 카테고리의 다른 글

우분투 설치 및 Nvidia 그래픽 드라이버 설치  (0) 2021.09.22
리눅스 기본 명령어  (0) 2017.05.28
리눅스 기본 개념 정리  (0) 2017.05.28
반응형


앱 :

특정한 업무를 수행하기 위해 고안된 일련의 컴퓨터 프로그램 집합으로 쉽게 말해서 응용프로그램이라고도 함. 컴퓨터에서 쓰는 워드 프로세서나 파워포인트 같은 것들이 일반적인 앱이라고 할 수 있다. 모바일에서 쓰는 앱은 네이티브 앱이라고 한다.

네이티브 앱 :

스마트폰 OS에서 제공하는 별도의 프로그래밍 언어와 SDK를 제작된 앱.

예> 카카오톡, 라인 ...

장점

 앱스토어 등록 가능 -> 전세계의 사용자가 이용 가능

 스마트 폰에 탑재된 모든 하드웨어 기능 사용 가능

단점

 개발자 등록 및 회비

 웹앱에 비해 업데이트가 복잡


웹앱 :

웹앱은 초창기에 브라우저를 통해서 실행되는 응용 어플리케이션의 의미였으나

아이폰이 도입되면서 많은 의미 변화를 가졌다.

아이폰 진영의 웹앱

- 브라우저를 통해 실행하는 앱

- 웹기술의 장점을 활용하여 네이티브 앱의 사용자 경험을 제공해 주는 웹 페이지

안드로이드 진영의 웹앱

- html5 웹 표준을 사용하여 웹 브라우저에서 실행되는 콘텐츠

- 배포하는 방법에 따라 클라이언트 사이드앱과 웹표준을 사용해서 브라우저에서 실행시키는 웹앱으로 구분

* 호스티드 앱과 패키지드 앱으로 세분화 시킴

호스티드

패키지드

서비스

제공 방식

온라인 상태에서 URL 접속을

통해 실행

실행에 필요한 모든 웹 문서와 파일들을 하나의 ZIP파일로 압축하여 제공

웹 서버

필요

불필요

장점

유지보수가 편리

로컬 실행으로 인해 더 많은 API 사용 가능

단점

항상 온라인 상태 유지

모바일 기기의 API 사용에 제약

수정사항이 있을 경우

-> 마켓에 재등록 필요


네이티브

웹앱

개발 환경

아이폰 : 매킨토시 필요

안드로이드 폰 : 멀티 플랫폼

기존에 사용하던 웹 개발 환경

모든 운영체제 가능

사용언어

아이폰 : Object – C

안드로이드 폰 : 자바

HTML, CSS, 자바 스크립트

개발자 비용

아이폰 : 99 달러

안드로이드 폰 : 35 달러

무료

배포

앱스토어/ 구글 플레이

브라우저가 설치된 환경

결제

시스템

앱스토어 판매 수익

독자 결제 구축 또는 광고 수익

하드웨어

지원

모든 기능 활용

제한적

업데이트

검수 받아야 함

즉시 반영

UI

풍부한 UI 가능

제한적


하이브리드 웹앱 :

웹앱과 네이티브앱의 장점을 결합하여 만든 앱
웹 표준 기술을 그대로 사용하여 웹앱을 개발 후 오픈 소스 프레임워크를 
 이용하여 네이티브 앱으로 변환 시켜 배포되는 앱 형식
앱 개발시 모바일 웹 환경이 적합하다면 하이브리드 앱을 사용하는 것이 유리
 ex> 하나N뱅크(하나은행의 뱅킹 앱), 머니멘토(신한은행의 가계부 앱)
* 오픈 소스 크로스 프레임워크 : 서로 다른 플랫폼의 개발 환경에서 한쪽이 다른 쪽의 환경에서 실행될 수 잇도록 변환시켜주는 무려 변환 개발 환경
 ex> 폰갭


반응형
반응형

자바를 이용한 출석부 클래스 파일을 UI 및 기능에 따라 다음과 같이 구분을 해보았습니다.

Database와 Util은 데이터베이스 관련 파일이고 나머지는 이름 그대로 그 기능을 수행합니다.


데이터베이스에 아무것도 없는 초기 시작화면 입니다 메뉴바에 과목관리와 학생관리를 이용하여

과목 및 학생 추가를 할 수 있습니다.


학생관련 프레임으로 추가 수정 삭제 검색 다 가능합니다.


아까 메인 화면에서 프로그래밍이라는 과목을 추가해서 선택한 후의 화면입니다

수강학생이 아무도 없어서 출석을 체크할 수 없습니다. 메뉴에서 학생 관리를 눌러 학생추가 삭제를 할 수 있습니다.

추가 후 화면으로 콤보 박스를 통해 출석 여부를 저장할 수 있으며,

Jcalander를 사용하여 날짜를 선택 가능합니다.

저장후 통계화면으로


다음과 같은 화면이 나오게 됩니다.

통계는 출석의 메뉴에 있습니다.



반응형

'자바 > 프로젝트' 카테고리의 다른 글

JAVA를 이용한 출석부 #1  (2) 2016.01.22
반응형

지난 여름 방학 때 자바를 이용해서 출석부를 만들었습니다.

기능을 크게 

1. 과목 추가

2. 학생 추가

3. 출석 관리

4. 통계


이 네가지로 만들었고

개발 환경으로는

DB : Mysql

OS : Window 10

개발 Tool : Eclipse Mars


사용하였습니다.


반응형

'자바 > 프로젝트' 카테고리의 다른 글

JAVA를 이용한 출석부 #2  (14) 2016.01.24
반응형

1. 다음과 같이 “Let’s study Java”라는 문자열을 타이틀로 가지고 프레임의 크기가 400 * 200인 스윙 프로그램을 작성하라.

package chapter8;

import javax.swing.*;

import java.awt.*;

public class FrameSample extends JFrame{

FrameSample(){

setTitle("Let's study Java");

setSize(400,200);

setVisible(true);

}

public static void main(String[] args){

FrameSample fs =new FrameSample();

fs.setDefaultCloseOperation(fs.EXIT_ON_CLOSE);

}

}

실행결과


2. BorderLayout을 사용하여 컴포넌트 사이의 수평 간격이 5픽셀, 수직 간격이 7 픽셀이 되도록 다음과 같은 스윙 응용 프로그램을 작성하라. 

package chapter8;

import javax.swing.*;

import java.awt.*;

public class BorderLayoutSample extends JFrame{

BorderLayoutSample(){

setTitle("BorderLayout Practice");

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Container contentPane = getContentPane();

contentPane.setLayout(new BorderLayout(5,7));

contentPane.add(new JButton("North"), BorderLayout.NORTH);

contentPane.add(new JButton("West"), BorderLayout.WEST);

contentPane.add(new JButton("Center"), BorderLayout.CENTER);

contentPane.add(new JButton("East"), BorderLayout.EAST);

contentPane.add(new JButton("South"), BorderLayout.SOUTH);

setSize(400,200);

setVisible(true);

}

public static void main(String[] args){

BorderLayoutSample bl = new BorderLayoutSample();

}

}

실행결과


3. 컨텐트팬에 FlowLayout 배치 관리자를 지정하고 그림과 같이 JLabel과 JButton 컴포넌트를 이용하여 산술문을 출력하는 스윙 프로그램을 작성하라.

package chapter8;

import java.awt.*;

import javax.swing.*;

public class FlowLayoutSample extends JFrame {

public FlowLayoutSample() {

setTitle("FlowLayout Practice");

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Container c = getContentPane();

c.setLayout(new FlowLayout());

c.add(new JLabel("100"));

c.add(new JLabel("+"));

c.add(new JLabel("200"));

c.add(new JButton("="));

c.add(new JLabel("300"));

setSize(400,100);

setVisible(true);

}

public static void main(String[] args) {

FlowLayoutSample fl= new FlowLayoutSample();

}

}

실행결과


4. 예제 8-5의 소스코드를 수정하여 각 버튼의 배경색을 다음 그림과 같이 설정하라.

package chapter8;

import javax.swing.*;

import java.awt.*;

public class TenColorButtonFrame extends JFrame{

TenColorButtonFrame(){

setTitle("Ten Color Button Frame");

setSize(500,200);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Container c = getContentPane();

c.setLayout(new GridLayout(1,10));


for(int i=0;i<10;i++){

Color [] color = {Color.RED, Color.ORANGE, Color.YELLOW,

                Color.GREEN, Color.CYAN, Color.BLUE,

                Color.MAGENTA, Color.GRAY, Color.PINK, Color.LIGHT_GRAY};

String text = Integer.toString(i);

JButton button = new JButton(text);

button.setOpaque(true);

button.setBackground(color[i]);

c.add(button);

}

setVisible(true);

}

public static void main(String[] args){

TenColorButtonFrame gl = new TenColorButtonFrame();

}

}

실행결과


5. GridLayout을 이용하여 다음 그림과 같이 Color.WHITE, Color.Gray, Color.RED 등 Color 클래스에 선언된 16개의 색을 배경색으로 하는 4 * 4 판을 구성하라.

package chapter8;

import java.awt.*;

import javax.swing.*;

public class GridLayoutSamples extends JFrame {

public GridLayoutSamples() {

setTitle("4x4 Color Frame");

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Container c = getContentPane();

c.setLayout(new GridLayout(4, 4));

JLabel [] label = new JLabel [16];

Color [] color = {Color.RED, Color.ORANGE, Color.YELLOW, Color.GREEN,

Color.CYAN, Color.BLUE, Color.MAGENTA, Color.GRAY,

Color.PINK, Color.LIGHT_GRAY, Color.WHITE, Color.DARK_GRAY,

Color.BLACK, Color.ORANGE, Color.BLUE,Color.MAGENTA}; 


for(int i=0; i<label.length; i++) {

label[i] = new JLabel(Integer.toString(i));

label[i].setOpaque(true);

label[i].setBackground(color[i]);

c.add(label[i]);

}

setSize(500,200);

setVisible(true);

}

public static void main(String[] args) {

GridLayoutSamples gl = new GridLayoutSamples();

}


}

실행결과



6. 20개의 10 * 10 크기의 JLabel 컴포넌트가 프레임 내의 (50,50)에서 (250,250)영역 내 랜덤한 위치에 출력되도록 스윙 프로그램을 작성하라. 프레임의 크기를 300 *300으로 하고, JLabel의 배경색은 모두 파란색으로 하라.

package chapter8;

import javax.swing.*;

import java.awt.*;

public class RandomLabels extends JFrame {

RandomLabels(){

setTitle("Random Labels");

setSize(300,300);

Container c = new Container();

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

for(int i=0;i<20;i++){

JLabel label = new JLabel();

int x = (int)(Math.random()*200) + 50;

int y = (int)(Math.random()*200) + 50;

label.setBounds(x, y, 10, 10);

label.setOpaque(true);;

label.setBackground(Color.BLUE);

c.add(label);

}

this.add(c);

setVisible(true);

}

public static void main(String[] args){

RandomLabels rl = new RandomLabels();

}

}

실행결과



반응형
반응형

1. Scanner를 사용하여 5개의 실수 값을 사용자로부터 입력받아 벡터에 저장하라. 그러고 나서 벡터를 검색하여 가장 큰 수를 출력하는 프로그램을 작성하라.

코드

package chapter7;

import java.util.*;

public class VectorBig {

public static void main(String[] args) {

Vector<Double> v = new Vector<Double>();

Scanner scanner = new Scanner(System.in);

for (int i = 0; i < 5; i++) {

double d = scanner.nextDouble();

v.add(d);

}

double max = v.get(0);

for(int i=0;i<5;i++){

if(max < v.get(i)) max = v.get(i);

}

System.out.println("가장 큰 수는 " + max);

}

}

실행결과


2. Scanner를 이용하여 학점(‘’, ‘’, ‘’, ‘’, ‘’)을 5개만 8자로 입력받아 ArrayList에 저장하라. 그리고 나서 다시 ArrayList를 검색하여 5개의 학점을 점수로 변환하여 출력하는 프로그램을 작성하라.

코드

package chapter7;

import java.util.*;

public class ArrayListCode {

public static void main(String[] args) {

ArrayList<String> al = new ArrayList<String>();

Scanner scanner = new Scanner(System.in);

System.out.print("빈 칸으로 분리하여 5개의 학점을 입력(A/B/C/D/F)>>");

for (int i = 0; i < 5; i++) {

String s = scanner.next();

al.add(s);

switch (s) {

case "A":

System.out.print("4.0" + " ");

break;

case "B":

System.out.print("3.0" + " ");

break;

case "C":

System.out.print("2.0" + " ");

break;

case "D":

System.out.print("1.0" + " ");

break;

case "F" :

System.out.print("0.0" + " ");

break;

}

}

}

}

실행결과


3. 5개의 나라 이름과 인구를 입력받아 해시맵에 저장하고, 가장 인구가 많은 나라를 검색하여 출력하는 프로그램을 작성하라. 이때 다음 해시맵을 이용하라.

코드

package chapter7;

import java.util.*;

public class HashMapNation {

public static void main(String[] args){

System.out.println("나라 이름과 인구를 5개 입력하세요(예 : Korea 5000)");

HashMap<String, Integer> h = new HashMap<String,Integer>();

Scanner scanner = new Scanner(System.in);

for(int i=0;i<5;i++){

System.out.print("나라 이름, 인구 >>");

String nation = scanner.next();

int population = scanner.nextInt();

h.put(nation,population);

}

int max = 0;

String nation = "";

Set<String> names = h.keySet();

Iterator<String> it = names.iterator();

while(it.hasNext()){

String name = it.next();

int n = h.get(name);

if(max < n){

max = n;

nation = name;

}

}

System.out.println("제일 인구가 많은 나라는 (" + nation +"," + max +")");

}

}

실행결과



4. 한 어린이의 키를 2000년부터 209년 사이에 1년 단위로 입력받아 벡터에 저장하라. 그리고 가장 키가 많이 자란 연도를 출력하라.

코드

package chapter7;

import java.util.*;

public class TallManager {

public static void main(String[] args){

Vector<Integer> v = new Vector<Integer>();

Scanner scanner = new Scanner(System.in);

System.out.println("2000 ~ 2009년 까지 1년단위로 키(cm)를 입력>>");

for(int i = 0; i <10;i++)

v.add(scanner.nextInt());

int max = v.get(1) - v.get(0);

int year = 0;

for(int i=0;i<9;i++){

int x = v.get(i+1) - v.get(i);

if(max<x){

max = x;

year = 2000 +i;

}

}

System.out.println("가장 키가 많이 자란 년도는 " + year + "년 " + max +"cm");

}

}

실행결과



5. Location 클래스는 2차원 평면에서 하나의 위치(x,y)를 표현한다. Location 객체로 쥐가 이동한 각 위치를 저장하고 이들로부터 총 이동 거리를 구하고자 한다. ArrayList 컬렉션에 쥐의 위치(Location 객체)를 5개 입력받아 삽입한 후 총 8이를 구하라. 시작위치는 (0,0)이며, (0,0)위치로 돌아온다.

코드

package chapter7;

import java.util.*;

class Location {

private int x, y;

public Location() {}

public Location(int x, int y) {this.x = x; this.y = y;}

public int getX() {return x;}

public int getY() {return y;}

}

public class TravelManager {

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

ArrayList<Location> al = new ArrayList<Location>();

System.out.println("쥐가 이동한 위치(x,y)를 5개 입력하라.");

al.add(new Location(0, 0));

for (int i = 0; i < 5; i++) {

System.out.print(">>");

al.add(new Location(scanner.nextInt(), scanner.nextInt()));

}

al.add(new Location(0, 0));

double sum, tz = 0;

for (int i = 1; i < al.size(); i++) {

Location p = al.get(i - 1);// 이전 위치

double x = p.getX();

double y = p.getY();


Location p2 = al.get(i);// 현재 위치

double x2 = p2.getX();

double y2 = p2.getY();


double tx = x2 - x;

double ty = y2 - y;


sum = (tx * tx) + (ty * ty); // 피타고라스 정리

tz = tz + Math.sqrt(sum); // 제곱근, 이동거리 누적

}

System.out.println("총 이동 거리는 " + tz);

}

}

실행결과


6.  고객의 이름과 포인트 점수를 관리하는 프로그램을 해시맵을 이용하여 작성하라. 이 프로그램은 고객의 이름과 포인트를 누적하여 관리한다. 한 고개의 입력이 끝나면 현재까지의 모든 고객의 포인트 점수를 출력한다.

코드

package chapter7;

import java.util.*;

public class CustomManager {

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

HashMap<String, Integer> h = new HashMap<String, Integer>();

System.out.println("** 포인트 관리 프로그램입니다 **");

while (true) {

System.out.print("이름과 포인터 입력>>");

String name = scanner.next();

int point = scanner.nextInt();

if (h.containsKey(name)) { 

h.put(name, h.get(name) + point);

} else {

h.put(name, point);

}

Set<String> key = h.keySet();

Iterator<String> it = key.iterator();

while (it.hasNext()) {

String n = it.next();

int p = h.get(n);

System.out.print("(" + n + "," + p + ")");

}

System.out.println();

}

}

}

실행결과


반응형

+ Recent posts