114
Trang i SỞ GIÁO DỤC VÀ ĐÀO TẠO ĐẮK LẮK TRƯỜNG TRUNG CẤP TÂY NGUYÊN JAVA VÀ ỨNG DỤNG ĐỒ ÁN TÌM HIỂU ỨNG DỤNG NHẬP THÔNG TIN NHÂN VIÊN Học sinh thực hiện: Trịnh Văn Long Giáo viên: TRẦN THỊ LAN Lớp: CNTT7A

Báo cáo tìm hiểu java và một số bài tập ứng dụng

Embed Size (px)

Citation preview

Page 1: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Trang i

SỞ GIÁO DỤC VÀ ĐÀO TẠO ĐẮK LẮK

TRƯỜNG TRUNG CẤP TÂY NGUYÊN

JAVA VÀ ỨNG DỤNGĐỒ ÁN TÌM HIỂU ỨNG DỤNG NHẬP

THÔNG TIN NHÂN VIÊN

Học sinh thực hiện: Trịnh Văn Long

Giáo viên: TRẦN THỊ LAN

Lớp: CNTT7A

Năm học: 2014– 2015

Page 2: Báo cáo tìm hiểu java và một số bài tập ứng dụng

NHẬN XÉT CỦA GIÁO VIÊN

........................................................................................................................................

........................................................................................................................................

........................................................................................................................................

........................................................................................................................................

........................................................................................................................................

........................................................................................................................................

........................................................................................................................................

........................................................................................................................................

........................................................................................................................................

........................................................................................................................................

........................................................................................................................................

........................................................................................................................................

........................................................................................................................................

........................................................................................................................................

........................................................................................................................................

Trang ii

Đăk Lăk, ngày tháng năm 2015

Giáo viên

Trần Thị Lan

Page 3: Báo cáo tìm hiểu java và một số bài tập ứng dụng

LỜI CẢM ƠN

Em xin chân thành cảm ơn sự giúp đỡ nhiệt tình của cô giáo Trần Thị Lan, người

đã cung cấp cho em những kiến thức cơ bản về lập trình java cũng như định hướng cho

em những phương pháp lập trình và cung cấp tài liệu tham khảo, để em có thể hoàn thành

tốt đồ án này.

Em cũng xin gửi lời cảm ơn tới các thầy cô giáo, giảng viên trong Khoa Công

Nghệ Thông Tin – Trường Trung Cấp Tây Nguyên và các thầy cô đã giảng dạy em trong

suốt quá trình học tập tại trường.

Em cũng xin gửi lời cảm ơn đến gia đình, bạn bè luôn động viên giúp đỡ em trong

suốt thời gian học tập và nghiên cứu, đóng góp những kinh nghiệm quý báu trong thời

gian thực hiện đề tài này.

Kính chúc thầy cô mạnh khỏe, công tác tốt, tiếp tục giảng dạy và đào tạo thế hệ trẻ

thành công.

Trang iii

Buôn Ma Thuột, ngày…tháng…năm 2015

Trịnh Văn Long014

Page 4: Báo cáo tìm hiểu java và một số bài tập ứng dụng

MỤC LỤC

CHƯƠNG 1: GIỚI THIỆU NGÔN NGỮ LẬP TRÌNH JAVA.....................................1

I. Đặc điểm ngôn ngữ lập trình Java.....................................................................................1

II. Các kiểu ứng dụng trong Java..........................................................................................4

III. Lập trình căn bản với ngôn ngữ lập trình Java...............................................................5

1. Các kiểu dữ liệu................................................................................................................5

2. Các toán tử........................................................................................................................8

3. Các cấu trúc điều khiển..................................................................................................14

CHƯƠNG 2: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VỚI JAVA ………………........19

I. Lớp và đối tượng.............................................................................................................19

II. Kế thừa lớp....................................................................................................................20

III. Giao diện (interface).....................................................................................................21

IV. Gói (Package)...............................................................................................................21

CHƯƠNG 3: LẬP TRÌNH GIAO DIỆN VỚI AWT/SWING.....................................22

I. Giới thiệu chung về AWT/SWING.................................................................................22

II. Các lớp vật chứa (Container).........................................................................................22

III. Các lớp quản lý quản lý Layout...................................................................................22

IV. Các thành phần giao diện cơ bản.................................................................................23

1. JTextField.......................................................................................................................23

2. JTextField.......................................................................................................................24

3. JTextArea.......................................................................................................................24

4. JButton............................................................................................................................25

5. JCheckBox......................................................................................................................26

Trang iv

Page 5: Báo cáo tìm hiểu java và một số bài tập ứng dụng

6. JRadioButton..................................................................................................................26

CHƯƠNG 4: LẬP TRÌNH CƠ SỞ DỮ LIỆU...............................................................27

I.Giới thiệu JDBC...............................................................................................................27

II.Kiến trúc JDBC...............................................................................................................27

III.Kết nối đến CSDL.........................................................................................................29

IV.Các thao tác cơ bản trên CSDL.....................................................................................29

CHƯƠNG 5: BÀI TẬP MINH HỌA.............................................................................32

I. Lập trình căn bản.............................................................................................................32

Bài 1:..................................................................................................................................32

Bài 2:..................................................................................................................................32

Bài 3:..................................................................................................................................32

Bài 4:..................................................................................................................................33

Bài 5:..................................................................................................................................33

II. Lập trình hướng đối tượng.............................................................................................35

1. Xây dựng lớp..................................................................................................................35

Bài 1:..................................................................................................................................35

Bài 2:..................................................................................................................................36

Bài 3:..................................................................................................................................36

2. Kế thừa...........................................................................................................................41

Bài 1...................................................................................................................................41

Bài 2:...................................................................................................................................43

Bài 3:...................................................................................................................................46

III. Lập trình giao diện.......................................................................................................49

Trang v

Page 6: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Bài 1:..................................................................................................................................49

Bài 2:..................................................................................................................................50

Bài 3:..................................................................................................................................53

Bài 4:..................................................................................................................................58

Bài 5:..................................................................................................................................63

Bài 6:..................................................................................................................................65

Bài 7:..................................................................................................................................68

Bài 8:..................................................................................................................................74

Bài 9:..................................................................................................................................77

TÀI LIỆU THAM KHẢO...............................................................................................89

Trang vi

Page 7: Báo cáo tìm hiểu java và một số bài tập ứng dụng

DANH MỤC CÁC BẢNG, SƠ ĐỒ, HÌNH

HÌNH 1.1 Mô hình compiler của java 3...........................................................................24

HÌNH 4.1 Kiến trúc của JDBC.........................................................................................28

HÌNH 4.2 Các lớp và các giao diện cơ bản trong JDBC API..........................................28

BẢNG 1.1 Dữ liệu kiểu nguyên thuỷ...............................................................................7

BẢNG 1.2 Dữ liệu kiểu tham chiếu ................................................................................7

BẢNG 1.3 Các toán tử số học .........................................................................................9

BẢNG 1.4 Các toán tử Bit..............................................................................................10

BẢNG 1.5 Các toán tử quan hệ .......................................................................................11

BẢNG 1.6 Các toán tử logic............................................................................................12

BẢNG 1.7 Trật tự ưu tiên ................................................................................................14

Trang vii

Page 8: Báo cáo tìm hiểu java và một số bài tập ứng dụng

CHƯƠNG 1: GIỚI THIỆU NGÔN NGỮ LẬP TRÌNH

JAVA

I. Đặc điểm ngôn ngữ lập trình Java

1.Lịch sử ra đời và phát triển của ngôn ngữ Java

Java là một ngôn ngữ lập trình được Sun Microsystems giới thiệu vào tháng 6 năm

1995. Từ đó, nó đã trở thành một công cụ lập trình của các lập trình viên chuyên nghiệp.

Java được xây dựng trên nền tảng của C và C++. Do vậy nó sử dụng các cú pháp của C và

các đặc trưng hướng đối tượng của C++.

Vào năm 1991, một nhóm các kỹ sư của Sun Microsystems có ý định thiết kế một

ngôn ngữ lập trình để điều khiển các thiết bị điện tử như Tivi, máy giặt, lò nướng, … Mặc

dù C và C++ có khả năng làm việc này nhưng trình biên dịch lại phụ thuộc vào từng loại

CPU.

Trình biên dịch thường phải tốn nhiều thời gian để xây dựng nên rất đắt. Vì vậy để

mỗi loại CPU có một trình biên dịch riêng là rất tốn kém. Do đó nhu cầu thực tế đòi hỏi

một ngôn ngữ chạy nhanh, gọn, hiệu quả và độc lập thiết bị tức là có thể chạy trên nhiều

loại CPU khác nhau, dưới các môi trường khác nhau. “Oak” đã ra đời và vào năm 1995

được đổi tên thành Java. Mặc dù mục tiêu ban đầu không phải cho Internet nhưng do đặc

trưng không phụ thuộc thiết bị nên Java đã trở thành ngôn ngữ lập trình cho Internet.

2.Java là gì ?

Java là ngôn ngữ lập trình hướng đối tượng, do vậy không thể dùng Java để viết một

chương trình hướng chức năng. Java có thể giải quyết hầu hết các công việc mà các ngôn

ngữ khác có thể làm được.

Java là ngôn ngữ vừa biên dịch vừa thông dịch. Đầu tiên mã nguồn được biên dịch

bằng công cụ JAVAC để chuyển thành dạng ByteCode. Sau đó được thực thi trên từng

loại máy cụ thể nhờ chương trình thông dịch.

3. Các đặc trưng của Java

Trang 1

Page 9: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Đơn giản

Hướng đối tượng

Độc lập phần cứng và hệ điều hành

Mạnh

Bảo mật

Phân tán

Đa luồng

Động

3.1 Đơn giản

Những người thiết kế mong muốn phát triển một ngôn ngữ dễ học và quen thuộc với

đa số người lập trình. Do vậy Java được loại bỏ các đặc trưng phức tạp của C và C++ như

thao tác con trỏ, thao tác nạp đè (overload),… Java không sử dụng lệnh “goto” cũng như

file header (.h). Cấu trúc “struct” và “union” cũng được loại bỏ khỏi Java.

3.2 Hướng đối tượng

Java được thiết kế xoay quanh mô hình hướng đối tượng. Vì vậy trong Java, tiêu

điểm là dữ liệu và các phương pháp thao tác lên dữ liệu đó. Dữ liệu và các phương pháp

mô tả trạng thái và cách ứng xử của một đối tượng trong Java.

3.3 Độc lập phần cứng và hệ điều hành

Đây là khả năng một chương trình được viết tại một máy nhưng có thể chạy được bất

kỳ đâu. Chúng được thể hiện ở mức mã nguồn và mức nhị phân.

Ở mức mã nguồn, người lập trình cần mô tả kiểu cho mỗi biến. Kiểu dữ liệu trong

Java nhất quán cho tất cả các hệ điều hành và phần cứng khác nhau. Java có riêng một

thư viện các lớp cơ sở. Vì vậy chương trình Java được viết trên một máy có thể dịch và

chạy trơn tru trên các loại máy khác mà không cần viết lại.

Trang 2

Page 10: Báo cáo tìm hiểu java và một số bài tập ứng dụng

HÌNH 1.1 Mô hình compiler của java

Ở mức nhị phân, một chương trình đã biên dịch có thể chạy trên nền khác mà không

cần dịch lại mã nguồn. Tuy vậy cần có phần mềm máy ảo Java (sẽ đề cập đến ở phần sau)

hoạt động như một trình thông dịch tại máy thực thi.

3.4 Mạnh mẽ

Java yêu cầu chặt chẽ về kiểu dữ liệu và phải mô tả rõ ràng khi viết chương trình.

Chúng sẽ kiểm tra lúc biên dịch và cả trong thời gian thông dịch vì vậy Java loại bỏ các

kiểu dữ liệu dễ gây ra lỗi.

3.5 Bảo mật

Java cung cấp một số lớp để kiểm tra bảo mật.

Ở lớp đầu tiên, dữ liệu và các phương pháp được đóng gói bên trong lớp. Chúng chỉ

được truy xuất thông qua các giao diện mà lớp cung cấp. Java không hỗ trợ con trỏ vì vậy

không cho phép truy xuất bộ nhớ trực tiếp. Nó cũng ngăn chặn không cho truy xuất thông

tin bên ngoài của mảng bằng kỹ thuật tràn và cũng cung cấp kỹ thuật dọn rác trong bộ

nhớ. Các đặc trưng này tạo cho Java an toàn và có khả năng cơ động cao.

Trong lớp thứ hai, trình biên dịch kiểm soát để đảm bảo mã an toàn. Lớp thứ ba được

đảm bảo bởi trình thông dịch. Chúng kiểm tra xem bytecode có đảm bảo các qui tắc an

toàn trước khi thực thi. Lớp thứ tư kiểm soát việc nạp các lớp lên bộ nhớ để giám sát việc

vi phạm giới hạn truy xuất trước khi nạp vào hệ thống.

Trang 3

compiler

compiler

compiler

Page 11: Báo cáo tìm hiểu java và một số bài tập ứng dụng

3.6 Phân tán

Java có thể dùng để xây dựng các ứng dụng có thể làm việc trên nhiều phần cứng, hệ

điều hành và giao diện đồ họa. Java được thiết kế cho các ứng dụng chạy trên mạng. Vì

vậy chúng được sử dụng rộng rãi trên Internet, nơi sử dụng nhiều nền tảng khác nhau.

3.7 Đa luồng

Chương trình Java sử dụng kỹ thuật đa tiến trình (Multithread) để thực thi các công

việc đồng thời. Chúng cũng cung cấp giải pháp đồng bộ giữa các tiến trình. Đặc tính hỗ

trợ đa tiến trình này cho phép xây dựng các ứng dụng trên mạng chạy uyển chuyển.

3.8 Động

Java được thiết kế như một ngôn ngữ động để đáp ứng cho những môi trường mở.

Các chương trình Java bổ xung các thông tin cho các đối tượng tại thời gian thực thi. Điều

này cho phép khả năng liên kết động các mã.

II. Các kiểu ứng dụng trong Java

1. Console:

Ứng dụng Console là ứng dụng nhập xuất ở chế độ văn bản tương tự như màn hình

Console của hệ điều hành MS-DOS. Lọai chương trình ứng dụng này thích hợp với những

ai bước đầu làm quen với ngôn ngữ lập trình java. Các ứng dụng kiểu Console thường

được dùng để minh họa các ví dụ cơ bản liên quan đến cú pháp ngôn ngữ, các thuật toán,

và các chương trình ứng dụng không cần thiết đến giao diện người dùng đồ họa.

2. Applet:

Java Applet là loại ứng dụng có thể nhúng và chạy trong trang web của một trình

duyệt web. Từ khi internet mới ra đời, Java Applet cung cấp một khả năng lập trình mạnh

mẽ cho các trang web. Nhưng gần đây khi các chương trình duyệt web đã phát triển với

khả năng lập trình bằng VB Script, Java Script, HTML, DHTML, XML, … cùng với sự

canh tranh khốc liệt của Microsoft và Sun đã làm cho Java Applet lu mờ. Và cho đến bây

giờ gần như các lập trình viên đều không còn “mặn mà” với Java Applet nữa. (trình duyệt

Trang 4

Page 12: Báo cáo tìm hiểu java và một số bài tập ứng dụng

IE đi kèm trong phiên bản Windows 2000 đã không còn mặc nhiên hỗ trợ thực thi một

ứng dụng Java Applet)

3. Desktop bằng AWT và JFC:

Việc phát triển các chương trình ứng dụng có giao diện người dùng đồ họa trực quan

giống như những chương trình được viết dùng ngôn ngữ lập trình VC++ hay Visual Basic

đã được java giải quyết bằng thư viện AWT và JFC. JFC là thư viện rất phong phú và hỗ

trợ mạnh mẽ hơn nhiều so với AWT. JFC giúp cho người lập trình có thể tạo ra một giao

diện trực quan của bất kỳ ứng dụng nào.

4. Ứng dụng web:

Java hỗ trợ mạnh mẽ đối với việc phát triển các ứng dụng Web thông qua công nghệ

J2EE (Java 2 Enterprise Edition). Công nghệ J2EE hoàn toàn có thể tạo ra các ứng dụng

Web một cách hiệu quả không thua kém công nghệ .NET mà Microsft đang quảng cáo.

Hiện nay có rất nhiều trang Web nổi tiếng ở Việt Nam cũng như khắp nơi trên thế giới

được xây dựng và phát triển dựa trên nền công nghệ Java. Số ứng dụng Web được xây

dựng dùng công nghệ Java chắc chắn không ai có thể biết được con số chính xác là bao

nhiêu, nhưng chúng tôi đưa ra đây vài ví dụ để thấy rằng công nghệ Java của Sun là một

“đối thủ đáng gờm” của Microsoft.

5. Ứng dụng nhúng Java:

Sun đưa ra công nghệ J2ME (The Java 2 Platform, Micro Edition J2ME) hỗ trợ phát

triển các chương trình, phần mềm nhúng. J2ME cung cấp một môi trường cho những

chương trình ứng dụng có thể chạy được trên các thiết bị cá nhân như: điện thọai di động,

máy tính bỏ túi PDA hay Palm, cũng như các thiết bị nhúng khác.

III. Lập trình căn bản với ngôn ngữ lập trình Java

1. Các kiểu dữ liệu

Java cung cấp một vài kiểu dữ liệu. Chúng được hỗ trợ trên tất cả các nền.

Trong Java kiểu dữ liệu được chia thành hai loại:

Các kiểu dữ liệu nguyên thủy (primitive)Trang 5

Page 13: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Các kiểu dữ liệu tham chiếu (reference)

1.1 Dữ liệu kiểu nguyên thuỷ

Java cung cấp tám kiểu dữ liệu nguyên thuỷ

Kiểu

dữ liệu

Độ dài

theo số

bit

Phạm vi Mô tả

byte 8 -128 đến 127 Số liệu kiểu byte là một loại

điển hình dùng để lưu trữ một

giá tri bằng một byte. Chúng

được sử dụng rộng rãi khi xử lý

một file văn bản

Char 16 ‘\uoooo’ to ’u\ffff ’ Kiểu Char sử dụng để lưu tên

hoặc các dữ liệu ký tự .Ví dụ tên

ngườI lao động

Boolean 1 “True” hoặc “False” Dữ liệu boolean dùng để lưu các

giá trị “Đúng” hoặc “sai” Ví dụ :

Người lao đông có đáp ứng

được yêu cầu của công ty hay

không ?

short 16 -32768 đến 32767 Kiểu short dùng để lưu các số có

giá trị nhỏ dưới 32767.Ví dụ số

lượng người lao động.

Int 32 -2,147,483,648 đến

+2,147,483,648

Kiểu int dùng để lưu một số có

giá trị lớn đến 2,147,483,648.Ví

dụ tổng lương mà công ty phải

trả cho nhân viên.

Long 64 -9,223,372,036’854,775,808 Kiểu long được sử dụng để lưu

Trang 6

Page 14: Báo cáo tìm hiểu java và một số bài tập ứng dụng

đến

+9,223,372,036’854,775,80

8

một số cố giá trị rất lớn đến

9,223,372,036’854,775,808 .Ví

dụ dân số của một nước

Float 32 -3.40292347E+38 đến

+3.40292347E+38

Kiểu float dùng để lưu các số

thập phân đến 3.40292347E+38

Ví dụ : giá thành sản phẩm

double 64 -

1,79769313486231570E+30

8 đến

+1,79769313486231570E+

308

Kiểu double dùng để lưu các số

thập phân có giá trị lớn đến

1,79769313486231570E+308

Ví dụ giá trị tín dụng của ngân

hàng nhà nước.

BẢNG 1.1 Dữ liệu kiểu nguyên thuỷ

1.2 Kiểu dữ liệu tham chiếu (reference)

Trong Java có 3 kiểu dữ liệu tham chiếu

Kiểu dữ liệu Mô tả

Mảng (Array) Tập hợp các dữ liệu cùng loại.Ví dụ : tên sinh viên

Lớp (Class) Tập hợp các biến và các phương thức.Ví dụ : lớp “Sin-

hviên” chứa toàn bộ các chi tiết của một sinh viên và các

phương thức thực thi trên các chi tiết đó.

Giao diện (Inter-

face)

Là một lớp trừu tượng được tạo ra để bổ sung cho các kế

thừa đa lớp trong Java.

BẢNG 1.2 Dữ liệu kiểu tham chiếu

2. Các toán tử

2.1 Các toán tử

Java cung cấp nhiều dạng toán tử.Chúng bao gồm:

Toán tử số họcTrang 7

Page 15: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Toán tử dạng bit

Toán tử quan hệ

Toán tử luận lý

Toán tử điều kiện

Toán tử gán

2.1.1 Các toán tử số học

Các toán hạng của các toán tử số học phải ở dạng số. Các toán hạng kiểu Boolean

không sử dụng được, song các toán hạng ký tự cho phép sử dụng loại toán tử này. Một vài

kiểu toán tử được liệt kê trong bảng dưới đây.

Toán tử Mô tả

+ Cộng.Trả về giá trị tổng hai toán hạng

Ví dụ 5+3 trả về kết quả là 8

- Trừ

Trả về giá trị khác nhau giữa hai toán hạng hoặc giá trị phủ định của

toán hạng. Ví dụ 5-3 kết quả là 2 và –10 trả về giá trị âm của 10

* Nhân

Trả về giá trị là tích hai toán hạng. Ví dụ 5*3 kết quả là 15

/ Chia

Trả về giá trị là thương của phép chia

Ví dụ 6/3 kết quả là 2

% Phép lấy modulo

Giá trị trả về là phần dư của toán tử chia

Ví dụ 10%3 giá trị trả về là 1

++ Tăng dần

Trang 8

Page 16: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Tăng giá trị của biến lên 1. Ví dụ a++ tương đương với a= a+1

-- Giảm dần

Giảm giá trị của biến 1 đơn vị. Ví dụ a-- tương đương với a=a-1

+= Cộng và gán giá trị

Cộng các giá trị của toán hạng bên trái vào toán hạng bên phải và

gán giá trị trả về vào toán hạng bên trái.

Ví dụ c+=a tương đương c=c+a

-= Trừ và gán giá trị

Trừ các giá trị của toán hạng bên trái vào toán toán hạng bên phải và

gán giá trị trả về vào toán hạng bên trái.

Ví dụ c-= a tương đương vớI c=c-a

*= Nhân và gán

Nhân các giá trị của toán hạng bên trái với toán toán hạng bên phải

và gán giá trị trả về vào toán hạng bên trái.

Ví dụ c *= a tương đương với c=c*a

/= Chia và gán

Chia giá trị của toán hạng bên trái cho toán toán hạng bên phải và

gán giá trị trả về vào toán hạng bên trái.

Ví dụ c /= a tương đương với c=c/a

%= Lấy số dư và gán

Chia giá trị của toán hạng bên trái cho toán toán hạng bên phải và

gán giá trị số dư vào toán hạng bên trái.

Ví dụ c%=a tương đương với c=c%a

Trang 9

Page 17: Báo cáo tìm hiểu java và một số bài tập ứng dụng

BẢNG 1.3 Các toán tử số học

2.1.2 Toán tử Bit

Các toán tử dang Bit cho phép ta tạo những Bit riêng biệt trong các kiểu dữ liệu

nguyên thuỷ. Toán tử Bit dựa trên cơ sở đại số Boolean. Nó thực hiện phép tính trên hai

đối số là các bit để tạo ra một kết qủa mới. Một vài dạng toán tử kiểu này được liệt kê

dưới đây

Toán tử Mô tả

~ Phủ định (NOT)

Trả về giá trị phủ định của một số. Ví dụ a=10 thì ~a=-10

& Toán tử AND

Trả về giá trị là 1 nếu các toán hạng là 1 và 0 trong các trường

hợp khác. Ví dụ nếu a=1và b=0 thì a&b trả về giá trị 0

I Toán tử OR

Trả về giá trị là 1 nếu một trong các toán hạng là 1 và 0 trong các

trường hợp khác. Ví dụ nếu a=1và b=0 thì aIb trả về giá trị 1

^ Exclusive OR

Trả về giá trị là 1 nếu chỉ một trong các toán hạng là 1 và trả về 0

trong các trường hợp khác. Ví dụ nếu a=1và b=1 thì a^b trả về giá

trị 0

>> Dịch sang phải

Chuyển toàn bộ các bít cuả một số sang phải một vị trí, giữ nguyên

dấu của số âm. Toán hạng bên trái là số bị dịch còn số bên phải chỉ

số vị trí mà các bít cần dịch.

Ví dụ x=37 tức là 00011111 vậy x>>2 sẽ là 00000111.

<< Dịch sang trái

Trang 10

Page 18: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Chuyển toàn bộ các bít cuả một số sang trái một vị trí, giữ nguyên

dấu cuả số âm. Toán hạng bên trái là số bị dịch còn số bên phải chỉ

số vị trí mà các bít cần dịch.

BẢNG 1.4 Các toán tử Bit

2.1.3 Các toán tử quan hệ

Các toán tử quan hệ kiểm tra mối quan hệ giữa hai toán hạng. Kết quả của một biểu

thức có dùng các toán tử quan hệ là những giá trị Boolean (logic “đúng” hoặc “sai”). Các

toán tử quan hệ được sử dụng trong các cấu trúc điều khiển.

Toán tử Mô tả

= = So sánh bằng

Toán tử này kiểm tra sự tương đương của hai toán hạng

Ví dụ if (a= =b) trả về giá tri “True” nếu giá trị của a và b như nhau

!= So sánh khác

Kiểm tra sự khác nhau của hai toán hạng

Ví dụ if(a!=b) Trả về giá trị “true” nếu a khác b

> Lớn hơn

Kiểm tra giá trị của toán hạng bên phải lớn hơn toán hạng bên trái

hay không

Ví du if(a>b) . Trả về giá trị “true” nếu a lớn hơn b,ngựơc lai (nhỏ

hơn hoặc bằng ), trả về ‘False’

< Nhỏ hơn

Kiểm tra giá trị của toán hạng bên phải có nhỏ hơn toán hạng bên

trái hay không

Ví du if(a<b) . Trả về giá trị “true” nếu a nhỏ hơn b , ngựơc lại

Trang 11

Page 19: Báo cáo tìm hiểu java và một số bài tập ứng dụng

(lớn hơn hoặc bằng trả về ‘False’

>= Lớn hơn hoặc bằng

Kiểm tra giá trị của toán hạng bên phải có lớn hơn hoặc bằng toán

hạng bên trái hay không

Ví du if(a>=b) . Trả về giá trị “true” nếu a lớn hơn hoặc bằng b ,

ngựơc lại (nhỏ hơn trả về ‘False’

<= Nhỏ hơn hoặc bằng

Kiểm tra giá trị của toán hạng bên phải có nhỏ hơn hoặc bằng toán

hạng bên trái hay không

Ví du if(a<=b) . Trả về giá trị “true” nếu a nhỏ hơn hoặc bằng b ,

ngựơc lại (lớn hơn trả về ‘False’

BẢNG 1.5 Các toán tử quan hệ

2.1.4 Các toán tử logic

Các toán tử logic làm việc với các toán hạng Boolean. Một vài toán tử kiểu này được chỉ

ra dưới đây

Toán tử Mô tả

& Và (AND)

Trả về một giá trị “Đúng” (True) nếu chỉ khi cả hai toán tử có giá trị

“True”

Ví dụ: if(sciencemarks>90) AND (mathmarks>75) thì gán “Y” cho

biến “được nhận học bổng”

I Hoặc (OR)

Trả về giá trị “True” nếu một giá trị là True hoặc cả hai đều là True

Ví dụ Nếu age_category is ‘Senior_citizen’ OR special_category is

‘handicapped’ thì giảm giá tua lữ hành. Giá cũng sẽ được giảm nếu

Trang 12

Page 20: Báo cáo tìm hiểu java và một số bài tập ứng dụng

cả hai điều kiện đều được thỏa mãn

^ XOR

Trả về giá trị True nếu chỉ một trong các giá trị là True, các trường

hợp còn lại cho giá trị False (sai)

! Toán hạng đơn tử NOT. Chuyển giá trị từ True sang False và ngược

lại.

Ví dụ: Quá trình thực thi các dòng lệnh tiếp tục cho đến khi kết thúc

chương trình.

BẢNG 1.6 Các toán tử logic

2.1.5 Các toán tử điều kiện

Toán tử điều kiện là một loại toán tử đặc biệt vì nó gồm ba thành phần cấu thành biểu

thức điều kiện

Cú pháp :

biểu thức 1?biểu thức 2: biểu thức 3;

biểu thức 1

Điều kiện luận lý (Boolean) mà nó trả về giá trị True hoặc False

biểu thức 2

Giá trị trả về nếu biểu thức 1 xác định là True

biểu thức 3

Giá trị trả về nếu biểu thức 1 xác định là False

2.1.6 Toán tử gán

Toán tử gán (=) dùng để gán một giá trị vào một biến. Bạn nên gán nhiều giá trị đến nhiều

biến cùng một lúc.

Trang 13

Page 21: Báo cáo tìm hiểu java và một số bài tập ứng dụng

2.1.7 Thứ tự ưu tiên của các toán tử

Các biểu thức được viết ra nói chung gồm nhiều toán tử. Thứ tự ưu tiên quyết định trật tự

thực hiện các toán tử trên các biểu thức. Bảng dưới đây liệt kê thứ tự thực hiện các toán tử

trong Java

Thứ tự Toán tử

1. Các toán tử đơn như +,-,++,--

2. Các toán tử số học và các toán tử dịch như *,/,+,-,<<,>>

3. Các toán tử quan hệ như >,<,>=,<=,= =,!=

4. Các toán tử logic và Bit như &&,II,&,I,^

5. Các toán tử gán như =,*=,/=,+=,-=

BẢNG 1.7 Trật tự ưu tiên

2.1.8 Thay đổi thứ tự ưu tiên

Để thay đổi thứ tự ưu tiên trên một biểu thức, bạn có thể sử dụng dấu ngoặc đơn ().

Từng phần của biểu thức được giới hạn trong ngoặc đơn được thực hiện trước tiên. Nếu

bạn sử dùng nhiều ngoặc đơn lồng nhau thì toán tử nằm trong ngoặc đơn phía trong sẽ

thực thi trước, sau đó đến các vòng phía ngoài. Nhưng trong phạm vi một ngoặc đơn thì

quy tắc thứ tự ưu tiên vẫn giữ nguyên tác dụng.

3. Các cấu trúc điều khiển

Tất cả các môi trường phát triển ứng dụng đều cung cấp một quy trình ra quyết định

(decision-making) được gọi là điều khiển luồng, nó trực tíếp thực thi các ứng dụng. Điều

khiển luồng cho phép người phát triển phần mềm tạo một ứng dụng dùng để kiểm tra sự

tồn tại của một điều kiện nào đó và ra quyết định phù hợp với điều kiện đó.

Vòng lặp là một cấu trúc chương trình giúp bạn có thể dùng để thực hiện việc lặp lại

các hành động khi thực thi chương trình mà không cần viết lại các đoạn chương trình

nhiều lần.

Điều khiển rẽ nhánhTrang 14

Page 22: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Mệnh đề if-else

Mệnh đề swich-case

Vòng lặp (Loops)

Vòng lặp while

Vòng lặp do-while

Vòng lặp for

3.1 Câu lệnh if-else

Câu lệnh if-else kiểm tra kết quả của một điều kiện và thực thi một thao tác phù hợp trên

cơ sở kết quả đó. Dạng của câu lệnh if-elsse rất đơn giản

Cú pháp

If (conditon)

{ action 1 statements; }

else

{ action 2 statements; }

Condition: Biểu thức Boolean như toán tử so sánh. Biểu thức này trả về giá trị

True hoặc False

action 1: Các dòng lệnh được thực thi khi giá trị trả về là True

else: Từ khoá xác định các câu lệnh tiếp sau được thực hiện nếu điều kiện trả về

giá trị False

action 2: Các câu lệnh được thực thi nếu điều kiện trả về giá trị False

3.2 Câu lệnh switch-case

Phát biểu switch-case có thể được sử dụng tại câu lệnh if-else. Nó được sử dụng trong

tình huống một biểu thức cho ra nhiều kết quả. Việc sử dụng câu lệnh switch-case cho

phép việc lập trình dễ dàng và đơn giản hơn.

Trang 15

Page 23: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Cú pháp

swich (expression)

{

case ‘value’:action 1 statement;

break;

case ‘value’:action 2 statement;

break;

:

:

case ‘valueN’: actionN statement (s);

}

expession - Biến chứa một giá trị xác định

value1,value 2,….valueN: Các giá trị hằng số phù hợp với giá trị trên biến ex-

pression .

action1,action2…actionN: Các phát biểu được thực thi khi một trường hợp tương

ứng có giá trị True

break: Từ khoá được sử dụng để bỏ qua tất cả các câu lệnh sau đó và giành quyền

điều khiển cho cấu trúc bên ngoài switch

default: Từ khóa tuỳ chọn được sử dụng để chỉ rõ các câu lệnh nào được thực

hiện chỉ khi tất cả các trường hợp nhận giá trị False

default - action: Các câu lệnh được thực hiện chỉ khi tất cả các trường hợp nhận

giá trị False

Trang 16

Page 24: Báo cáo tìm hiểu java và một số bài tập ứng dụng

3.3 Vòng lặp While

Vòng lặp while được sử dụng khi vòng lặp được thực hiện mãi cho đến khi điều kiện

thực thi vẫn là True. Số lượng vòng lặp không đựơc xác định trước song nó sẽ phụ thuộc

vào từng điều kiện.

Cú pháp

while(condition)

{

action statement;

:

:

}

condition: Biểu thức Boolean, nó trả về giá trị True hoặc False. Vòng lặp sẽ tiếp tục

cho đến khi nào giá trị True được trả về.

action statement: Các câu lệnh được thực hiện nếu condition nhận giá trị True

3.4 Vòng lặp do-while:

Gần như giống hệt vòng lặp while, ngoại trừ việc nó kiểm tra biểu thức logic sau khi

thực thi khối lệnh lặp. Với vòng lặp while, chuyện gì sẽ xảy ra nếu biểu thức cho giá trị

false ngay lần đầu tiên kiểm tra? Vòng lặp sẽ không thực hiện dù chỉ một lần. Còn với

vòng lặp do, bạn sẽ được đảm bảo là vòng lặp sẽ thực hiện ít nhất 1 lần. Sự khác biệt này

có thể có ích vào nhiều lúc.

3.5 Vòng lặp for:

Vòng lặp for được sử dụng tương tự như vòng lặp while nhưng bạn có thể kiểm soát

được số lần lặp.Vòng lặp for thường được sử dụng khi cần lặp một khối lệnh mà lập trình

viên biết trước sẽ cần lặp bao nhiêu lần

Trang 17

Page 25: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Cú pháp

for (init-stmt; condition; next-stmt) {

body

}

condition: Biểu thức Boolean, nó trả về giá trị True hoặc False. Vòng lặp sẽ tiếp tục cho

đến khi nào giá trị True được trả về

init-stmt: Con số hay biến khởi tạo cho số lần lặp.

next-stmt: con số hay biến tiếp theo của vòng lặp sau khi thân vòng lặp đã được thực hiện

Trang 18

Page 26: Báo cáo tìm hiểu java và một số bài tập ứng dụng

CHƯƠNG 2: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VỚI

JAVA

I. Lớp và đối tượng

Khái niệm

Chúng ta có thể xem lớp như một khuôn mẫu (template) của đối tượng (Object).

Trong đó bao gồm dữ liệu của đối tượng (fields hay properties) và các phương thức(meth-

ods) tác động lên thành phần dữ liệu đó gọi là các phương thức của lớp. Các đối tượng

được xây dựng bởi các lớp nên được gọi là các thể hiện của lớp (class instance).

Khai báo/định nghĩa lớp

class <ClassName>

{

<kiểu dữ liệu> <field_1>;

<kiểu dữ liệu> <field_2>;

constructor

method_1

method_2

}

class: là từ khóa của java

ClassName: là tên chúng ta đặt cho lớp

field_1, field_2: các thuộc tính, các biến, hay các thành phần dữ

liệu của lớp.

constructor: là sự xây dựng, khởi tạo đối tượng lớp.

method_1, method_2: là các phương thức/hàm thể hiện các thao

tác xử lý, tác động lên các thành phần dữ liệu của lớp.Trang 19

Page 27: Báo cáo tìm hiểu java và một số bài tập ứng dụng

II. Kế thừa lớp

Một lớp con (subclass) có thể kế thừa tất cả những vùng dữ liệu và phương thức của

một lớp khác (siêu lớp - superclass). Như vậy việc tạo một lớp mới từ một lớp đã biết sao

cho các thành phần (fields và methods) của lớp cũ cũng sẽ thành các thành phần (fields và

methods) của lớp mới. Khi đó ta gọi lớp mới là lớp dẫn xuất (derived class) từ lớp cũ (su-

perclass). Có thể lớp cũ cũng là lớp được dẫn xuất từ một lớp nào đấy, nhưng đối với lớp

mới vừa tạo thì lớp cũ đó là một lớp siêu lớp trực tiếp (immediate supperclass).

Dùng từ khóa extends để chỉ lớp dẫn xuất.

Khai báo

class A extends B

{

// …

}

Ví dụ:

Class Nguoi () {

String ten;

Int tuoi;

}

Class SinhVien kế thừa từ lớp Nguoi

Class SinhVien () extends Nguoi

{

String lop;

}

Trang 20

Page 28: Báo cáo tìm hiểu java và một số bài tập ứng dụng

III. Giao diện (interface)

Khái niệm

Như chúng ta đã biết một lớp trong java chỉ có một siêu lớp trực tiếp hay một cha duy

nhất (đơn thừa kế). Để tránh đi tính phức tạp của đa thừa kế (multi-inheritance) trong lập

trình hướng đối tượng, Java thay thế bằng giao tiếp (interface). Một lớp có thể có nhiều

giao tiếp (interface) với các lớp khác để

Khai báo

Interface được khai báo như một lớp. Nhưng các thuộc tính của interface là các hằng

(khai báo dùng từ khóa final) và các phương thức của giao tiếp là trừu tượng (mặc dù

không có từ khóa abstract). Trong các lớp có cài đặt các interface ta phải tiến hành cài đặt

cụ thể các phương thức này.

Ví dụ:

public interface sanpham {

static final String nhasx = “Honda VN”;

static final String dienthoai = “08-8123456”;

public int gia(String s_model);

}

IV. Gói (Package)

Khái niệm

Việc đóng gói các lớp lại tạo thành một thư viện dùng chung gọi là package.

Một package có thể chứa một hay nhiều lớp bên trong, đồng thời cũng có thể chứa một

package khác bên trong.

Để khai báo một lớp thuộc một gói nào đấy ta phải dùng từ khóa package.Dòng khai báo

gói phải là dòng đầu tiên trong tập tin khai báo lớp.Các tập tin khai báo lớp trong cùng

một gói phải được lưu trong cùng một thư mục.

Trang 21

Page 29: Báo cáo tìm hiểu java và một số bài tập ứng dụng

CHƯƠNG 3: LẬP TRÌNH GIAO DIỆN VỚI AWT/SWING

I. Giới thiệu chung về AWT/SWING

II. Các lớp vật chứa (Container)

Container là đối tượng vật chứa hay những đối tượng có khả năng quản lý và nhóm

các đối tượng khác lại. Những đối tượng con thuộc thành phần awt như: button, check-

box, radio button, scrollbar, list,… chỉ sử dụng được khi ta đưa nó vào khung chứa (con-

tainer).

Một số đối tượng container trong Java:

Panel: Đối tượng khung chứa đơn giản nhất, dùng để nhóm các đối tượng, thành

phần con lại. Một Panel có thể chứa bên trong một Panel khác.

Frame: khung chứa Frame là một cửa số window hẳn hoi ở mức trên cùng bao gồm

một tiêu đều và một đường biên (border) như các ứng dụng windows thông thường

khác. Khung chứa Frame thường được sử dụng để tạo ra cửa sổ chính của các ứng

dụng.

Dialogs: đây là một cửa sổ dạng hộp hội thoại (cửa sổ dạng này còn được gọi là

pop-up window), cửa sổ dạng này thường được dùng để đưa ra thông báo, hay

dùng để lấy dữ liệu nhập từ ngoài vào thông qua các đối tượng, thành phần trên di-

alog như TextField chẳng hạn. Dialog cũng là một cửa sổ nhưng không đầy đủ

chức năng như đối tượng khung chứa Frame.

ScrollPanes: là một khung chứa tương tự khung chứa Panel, nhưng có thêm 2

thanh trượt giúp ta tổ chức và xem được các đối tượng lớn choán nhiều chỗ trên

màn hình như những hình ảnh hay văn bản nhiều dòng.

III. Các lớp quản lý quản lý Layout

Khung chứa container nhận các đối tượng từ bên ngoài đưa vào và nó phải biết làm

thế nào để tổ chức sắp xếp “chỗ ở” cho các đối tượng đó. Mỗi đối tượng khung chứa đều

có một bộ quản lý chịu trách nhiệm thực hiện công việc đấy đó là bộ quản lý trình bày

(Layout Manager). Các bộ quản lý trình bày mà thư viện cung cấp cho ta bao gồm:

Trang 22

Page 30: Báo cáo tìm hiểu java và một số bài tập ứng dụng

FlowLayout: Sắp xếp các đối tượng từ trái qua phải và từ trên xuống dưới. Các

đối tượng đều giữ nguyên kích thước của mình.

BorderLayout: Các đối tượng được đặt theo các đường viền của khung chứa theo

các cạnh West, East, South, North và Center tức Đông, Tây, Nam, Bắc và Trung

tâm hay Trái, Phải, Trên, Dưới và Giữa tùy theo cách nhìn của chúng ta.

GridLayout: Tạo một khung lưới vô hình với các ô bằng nhau. Các đối tượng sẽ

đặt vừa kích thước với từng ô đó. Thứ tự sắp xếp cũng từ trái qua phải và từ

trên xuống dưới.

GridBagLayout: Tương tự như GridLayout, các đối tượng khung chứa cũng được

đưa vào một lưới vô hình. Tuy nhiên kích thước các đối tượng không nhất thiết

phải vừa với 1 ô mà có thể là 2, 3 ô hay nhiều hơn tùy theo các ràng buộc mà ta chỉ

định thông qua đối tượng

GridBagConstraint. Null Layout: Cách trình bày tự do. Đối với cách trình bày

này người lập trình phải tự động làm tất cả từ việc định kích thước của các đối

tượng, cũng như xác định vị trí của nó trên màn hình. Ta không phụ thuộc vào

những ràng buộc đông, tây , nam, bắc gì cả.

IV. Các thành phần giao diện cơ bản

Yêu cầu:

- Trình bày công dụng của thành phần giao diện cơ bản

- Trình bày các hàm tạo, công dụng

- Trình bày các phương thức, công dụng

1. JTextField

Công dụng: Tạo một ô cho phép người dùng nhập văn bản

Các hàm tạo:

TextField(): Tạo một textfield mới.

TextField(int columns): Tạo một textfield mới với số cột được cho.

TextField(String s): Tạo một textfield mới với chuỗi văn bản được cho.

Trang 23

Page 31: Báo cáo tìm hiểu java và một số bài tập ứng dụng

TextField(String s, int columns): Tạo một textfield mới với nhãn và số cột được

cho.

Các phương thức:

setEchoChar(char) Thiết lập các kí tự được trình bày trong dạng của một kí tự

được cho.

setText(String s) Thiết lập nhãn cho TextField.

getText() Trả về nhãn của TextField.

setEditable(boolean) Xác định trường có thể được soạn thảo hay không. Trường

chỉ được soạn thảo khi giá trị này được đặt là True.

isEditable() Xác định xem trường có đang trong mode soạn thảo hay không. Giá trị

trả về kiểu Boolean.

2. JTextField

Công dụng: Hiển thị chuỗi chỉ đọc

Các hàm tạo:

Label() Tạo một Label trống.

Label(String labeltext) Tạo một Label với văn bản được cho.

Label(String labeltext, int alignment) Tạo một Label với một chế độ canh lề align-

ment được cho, alignment có thể là Label.LEFT, Label.RIGHT hay Label.CEN-

TER.

Các phương thức:

setFont(Font f) Thay đổi phông chữ đang được chọn của Label

setText(String s) Thiết lập nhãn cho Label

getText() Lấy nội dung hiện hành của Label

3. JTextArea

Công dụng: Cho phép người dùng nhập văn bản trên nhiều dòng

Các hàm tạo:

Trang 24

Page 32: Báo cáo tìm hiểu java và một số bài tập ứng dụng

TextArea(): Tạo một TextArea mới.

TextArea(int rows, int cols): Tạo một TextArea mới với số lượng cột và dòng được

cho.

TextArea(String text): Tạo một TextArea mới với nhãn được cho.

TextArea(String text, int rows, int cols): Tạo một TextArea mới với nhãn, số dòng

và số cột được cho.

Các phương thức:

setText(String) Thiết lập nhãn cho TextArea.

getText() Trả về nhãn của TextArea.

setEdiable(boolean) Xác định xem trường có thể được soạn thảo hay không.

Trường có thể được soạn thảo khi giá trị này là True.

isEdiable() Xác định xem trường có đang trong mode soạn thảo được không. Trả

về giá trị là kiểu Boolean.

insertText(String, int) Chèn String được cho vào vị trí index được cho.

replaceText(String, int, int) Thay thế văn bản nằm giữa vị trí int, int được cho.

4. JButton

Công dụng: Là một nút nhấn cho phép người dùng tác động vào chương trình

Các hàm tạo:

Button() Tạo một button mới

Button(String text) Tạo button mới với tên

Các phương thức:

setText(String) Thiết lập nhãn cho button

getText() Trả về nhãn của button

isEdiable() Xác định xem trường có đang trong mode soạn thảo được không. Trả

về giá trị là kiểu Boolean.

Trang 25

Page 33: Báo cáo tìm hiểu java và một số bài tập ứng dụng

5. JCheckBox

Công dụng: Checkbox được sử dụng khi người dùng tiến hành chọn một hay nhiều tùy

chọn

Các hàm tạo:

Checkbox(): Tạo một checkbox trống.

Checkbox(String text): Tạo một checkbox với nhãn được cho.

5. JRadioButton

Công dụng: được sử dụng khi người dùng tiến hành chọn một hay nhiều tùy

Các hàm tạo:

Checkbox(): Tạo một checkbox trống.

Checkbox(String text): Tạo một checkbox với nhãn được cho.

Trang 26

Page 34: Báo cáo tìm hiểu java và một số bài tập ứng dụng

CHƯƠNG 4: LẬP TRÌNH CƠ SỞ DỮ LIỆU

I.Giới thiệu JDBC

Hầu hết các chương trình máy tính hiện này đếu ít nhiều liên quan đến việc truy xuất

thông tin trong các cơ sở dữ liệu. Chính vì thế nên các thao tác hỗ trợ lập trình cơ sở dữ

liệu là chức năng không thể thiếu của các ngôn ngữ lập trình hiện đại, trong đó có Java.

JDBC API là thư viện chứa các lớp và giao diện hỗ trợ lập trình viên Java kết nối và truy

cập đến các hệ cơ sở dữ liệu. Phiên bản JDBC API mới nhất hiện nay là 3.0, là một thành

phần trong J2SE, nằm trong 2 gói thư viện: § java.sql: chứa các lớp và giao diên cơ sở của

JDBC API. § javax.sql: chứa các lớp và giao diện mở rộng. JDBC API cung cấp cơ chế

cho phép một chương trình viết bằng Java có khả năng độc lập với các hệ cơ sở dữ liệu,

có khả năng truy cập đến các hệ cơ sở dữ liệu khác nhau mà không cần viết lại chương

trình. JDBC đơn giản hóa việc tạo và thi hành các câu truy vấn SQL trong chương trình.

II.Kiến trúc JDBC

Kiến trúc của của JDBC tương tự như kiến trúc ODBC do Microsoft xây dựng. Theo kiến

trúc này các thao tác liên quan đến cơ sở dữ liệu trong chương trình được thực hiện thông

qua các JDBC API. Sau đó các JDBC API sẽ truyền các yêu cầu của chương trình đến bộ

quản lý trình điều khiển JDBC, là bộ phận có nhiệm vụ lựa chọn trình điều khiển thích

hợp để có thể làm việc với cơ sở dữ liệu cụ thể mà chương trình muốn kết nối. Như vậy

kiến trúc của JDBC gồm 2 tầng: tầng đầu tiên là các JDBC API, có nhiệm vụ chuyển các

câu lệnh SQL cho bộ quản lý trình điều khiển JDBC; tầng thứ 2 là các JDBC Driver API,

hiện nhiệm vụ liện hệ vớ trình điều khiển của hệ quản trỉ cơ sở dữ liệu cụ thể.

Trang 27

Page 35: Báo cáo tìm hiểu java và một số bài tập ứng dụng

.

HÌNH 4.1 Kiến trúc của JDBC

Hình bên dưới minh họa các lớp và giao diện cơ bản trong JDBC API

Trang 28

Page 36: Báo cáo tìm hiểu java và một số bài tập ứng dụng

HÌNH 4.2 Các lớp và các giao diện cơ bản trong JDBC API

III.Kết nối đến CSDL

Việc kết nối với CSDL bằng JDBC được thực hiện qua hai bước: đăng ký trình điều khiển

JDBC; tiếp theo thực thi phương thức getConnection() của lớp DriverManager.

1.Đăng ký trình điều khiển

Trình điều khiển JDBC được nạp khi mã bytecode của nó được nạp vào JVM. Một cách

đơn giản để thực hiện công việc này là thực thi phương thức Class.forName(“<JDBC

Driver>”).

Ví dụ: để nạp trình điều khiển sử dụng cầu nối ODBC do Sun cung cấp, chúng ta sử dụng

câu lệnh sau

Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”).

2.Thực hiện kết nối

Sau khi đã nạp trình điều khiển JDBC, việc kết nối với CSDL được thực hiện với một

trong các phương thức sau trong lớp DriverManager:

public static Connection getConnection(String url) throws SQLException: thực

hiện kết nối với CSDL được yêu cầu. Bộ quản lý trình điều khiển sẽ tự động lựa

chọn trình điều khiển phù hợp trong số các trình điều khiển đã được nạp.

public static Connection getConnection(String url, String user, String pass) throws

SQLException: tiến hành kết nối tới CSDL với tài khoản user và mật mã pass.

public static Connection getConnection(String url, Properties info) throws SQLEx-

ception: tương tự hai phương thức trên ngoài ra cung cấp thêm các thông tin qui

định thuộc tính kết nối thông qua đối tượng của lớp Properties.Kết quả trả về của

các phương thức trên là một đối tượng của lớp java.sql.Connection được dùng để

đại diện cho kết nối đến CSDL.

Trang 29

Page 37: Báo cáo tìm hiểu java và một số bài tập ứng dụng

IV.Các thao tác cơ bản trên CSDL

Các thao tác truy vấn CSDL chỉ có thể được thực hiện sau khi đã có đối tượng Con-

nection, được tạo ra từ quá trình kết nối vào CSDL. Chúng ta sử dụng đối tượng của lớp

Connection để tạo ra các thể hiện của lớp java.sql.Statement. Sau khi tạo ra các đối tượng

của lớp Statement chúng ta có thể thực hiện các thao tác trong các đối tượng statement

trên connection tương ứng. Nội dung trong một statement chính là các câu SQL. Câu lệnh

SQL trong các statement chỉ được thực hiện khi chúng ta gửi chúng đến CSDL. Nếu câu

lện SQL là một câu truy vấn nội dung thì kết quả trả về sẽ là một thể hiện của lớp ja-

va.sql.ResultSet, ngược lại (các câu lệnh thay đổi nội dung CSDL) sẽ trả về kết quả là mộ

số nguyên. Các đối tượng của lớp ResultSet cho phép chúng ta truy cập đến kết quả trả về

của các câu truy vấn.

Các lớp cơ bản

java.sql.Statement Statement là một trong 3 lớp JDBC cơ bản dùng để thể hiện

một câu lệnh SQL. Mọi thao tác trên CSDL được thực hiện thông qua 3

phương thức của lớp Statement. Phương thức executeQuery() nhận vào 1 tham

số là chuỗi nội dung câu lện SQL và trả về 1 đối tượng kiểu ResultSet. Phương

thức này được sử dụng trong các trường hợp câu lệnh SQL có trả về các kết

quả trong CSDL.

Phương thức executeUpdate() cũng nhận vào 1 tham số là chuỗi nội dung câu

lệnh SQL. Tuy nhiện phương thức này chỉ sử dụng được đối với các cây lệnh

cập nhật nội dung CSDL. Kết quả trả về là số dòng bị tác động bỡi câu lệnh

SQL. Phương thức execute() là trường hợp tổng quát của 2 phương thức trên.

Phương thức nhận vào chuỗi nội dung câu lệnh SQL.

Câu lệnh SQL có thể là câu lệnh truy vấn hoặc cập nhật. Nếu kết quả của câu

lệnh là các dòng trong CSDL thì phương thức trả về giá trị true, ngược lại trả

về giá trị false. Trong trường hợp giá trị true, sau đó chúng ta có thể dùng

phương thức getResultSet() để lấy các dòng kết quả trả về.

Trang 30

Page 38: Báo cáo tìm hiểu java và một số bài tập ứng dụng

java.sql.ResultSet Đối tượng resultset là các dòng dữ liệu trả về của câu lệnh

truy vấn CSDL. Lớp này cung cấp các phương thức để rút trích các cột trong

từng dòng kết quả trả về.

Tất cả các phương thức này đều có dạng: type getType(int | String) Trong đó

tham số có thể là số thứ tự của cột hoặc tên cột cần lấy nội dung. Tại 1 thời

điểm chúng ta chỉ có thể thao tác trên 1 dòng của resultset.

Để thao tác trên dòng tiếp theo chúng ta sử dụng phương thức next(). Phương

thức trả về giá trị true trong trường hợp có dòng tiếp theo, ngược lại trả về giá

trị false.

Trang 31

Page 39: Báo cáo tìm hiểu java và một số bài tập ứng dụng

CHƯƠNG 5: BÀI TẬP MINH HỌA

I. Lập trình căn bản

Bài 1:

Yêu cầu: Viết chương trình in một nội dung ra màn hình

Chương trình: Bai1.java

public class Bai1 {

     public static void main(String[] args) {

      System.out.println("Hello World!");

     }

}

Bài 2:

Yêu cầu: Viết chương trình nhập tên và xuất ra màn hình

Chương trình: Bai2.java

Bài 3:

Yêu cầu: Nhập hai số từ bàn phím và tính tổng

Chương trình: Bai3.java

Trang 32

public class bai2 {public static void main(String[] args) throws Exception {

System.out.println("nhap ten cua ban :");BufferedReader in = new BufferedReader(new InputStream-

Reader(System.in));String string = in.readLine();System.out.print("xin chao "+ string);

}}

Page 40: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Bài 4:

Yêu cầu: Viết chương trình nhập tên, địa chỉ, lớp, xuất thông tin vừa nhập và màn hình

Chương trình: Bai4.java

Bài 5:

Yêu cầu: Viết chương trình giải phương trình bậc hai

Chương trình: Bai5.java

Trang 33

public class bai3 {public static void main(String[] args) throws Exception {

int a, b,ketQua;BufferedReader in = new BufferedReader(new

InputStreamReader(System.in));System.out.println("nhap a :");a = Integer.parseInt(in.readLine());System.out.println("nhap b :");b = Integer.parseInt(in.readLine());ketQua = a+b;System.out.print("Ket qua a+b : "+ ketQua );

}}

public class bai4 {

public static void main(String[] args) throws Exception {// TODO Auto-generated method stubString ten, diaChi, lop;BufferedReader in = new BufferedReader(new

InputStreamReader(System.in));System.out.println("Nhập tên :");ten = in.readLine();System.out.println("Nhập địa chỉ: :");diaChi = in.readLine();System.out.println("Nhập lớp :");lop = in.readLine();System.out.print("Chào bạn " + ten + "," + diaChi + "," + lop);

}

}

Page 41: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Trang 34

public class phuongtrinhbac2 {private static Scanner input;public static void main(String[] args) {

input = new Scanner(System.in);boolean lamLai = true;PhuongTrinh giaiPhuongTrinh = new PhuongTrinh();

while (lamLai == true) {

giaiPhuongTrinh.nhap();giaiPhuongTrinh.kiemTra();

System.out.println("Ban co muon lam lai khong ? 1 : co 2 : khong ");

if (input.nextInt() == 2) {lamLai = false;System.out.println("Ket thuc chuong trinh ");

}}

}}class PhuongTrinh {

public float a, b, c;double x1, x2;double delta;Scanner input = new Scanner(System.in);public void nhap() {

System.out.print("nhap a: ");this.a = input.nextFloat();System.out.print("nhap b: ");this.b = input.nextFloat();System.out.print("nhap c: ");this.c = input.nextFloat();

}public void kiemTra() {

if (a == 0) {if (b == 0) {

System.out.print("phuong trinh vo so nghiem");} else {

System.out.print("phuong trinh co nghiem duy nhat: "

+ nghiemDuyNhat());}

} else {if (tinhDelta() < 0) {

System.out.print("phuong trinh vo nghiem");}

else {if (tinhDelta() == 0) {

System.out.print("phuong trinhg co nghiem kep: "

+ nghiemKep());} else {

System.out.println("phuong trinh co 2 nghiem

Page 42: Báo cáo tìm hiểu java và một số bài tập ứng dụng

II. Lập trình hướng đối tượng

1. Xây dựng lớp

Bài 1:

Yêu cầu: Xây dựng lớp nhân viên bao gồm Mã nhân viên, họ tên nhân viên, địa chỉ,

CBQL

Chương trình: NhanVien.java

Trang 35

public class NhanVien {

int maNV;String hoTen;String diaChi;Boolean CBQl;

public NhanVien(int maNV, String hoTen, String diaChi, Boolean cBQl) {

super();this.maNV = maNV;this.hoTen = hoTen;this.diaChi = diaChi;CBQl = cBQl;

}

}}

}}

public double tinhDelta() {delta = ((Math.pow(b, 2)) - 4 * a * c);return delta;

}

public double nghiemDuyNhat() {

x1 = -c / b;return x1;

}

public double nghiemKep() {x1 = -b / (2 * a);return x1;

}

public void nghiemPhanBiet() {x1 = ((-b + Math.sqrt(delta)) / (2 * a));x2 = ((-b - Math.sqrt(delta)) / (2 * a));System.out.println("x1= " + x1);System.out.println("x2= " + x2);

}}

Page 43: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Bài 2:

Yêu cầu: Xây dựng lớp Sinh viên với các thuộc tính của sinh viên là mã sinh viên, họ tên,

điểm lý thuyết, điểm thực hành. Viết hàm main cho phép thực hiện:

1. Nhập thông tin cho một sinh viên

2. Tính điêm trung bình của sinh viên (điểm trung bình bằng (dlt+dth)/2)

3. Xuất thông tin của sinh viên và kết quả học tập của sinh viên (Đậu khi điểm trung

bình >= 5 ngược lại thì Rớt)

Chương trình: SinhVien.java

Trang 36

public class NhanVien {

int maNV;String hoTen;String diaChi;Boolean CBQl;

public NhanVien(int maNV, String hoTen, String diaChi, Boolean cBQl) {

super();this.maNV = maNV;this.hoTen = hoTen;this.diaChi = diaChi;CBQl = cBQl;

}

public class SinhVien {

int maSinhVien;String hoTen;float diemLyThuyet;float diemThucHanh;float diemTrungBinh;

public SinhVien() {

}

public SinhVien(int maSinhVien, String hoTen, float diemLyThuyet,float diemThucHanh) {

super();this.maSinhVien = maSinhVien;this.hoTen = hoTen;this.diemLyThuyet = diemLyThuyet;this.diemThucHanh = diemThucHanh;

}

public static void main(String[] args) throws NumberFormatException,IOException {

SinhVien mSinhVien = new SinhVien();mSinhVien.Nhap(mSinhVien);System.out.println("Diem trung binh : " + mSinhVien.diemTrung-

Binh);System.out.println(mSinhVien.toString());

}

public void Nhap(SinhVien mSinhVien) throws NumberFormatException,IOException {

BufferedReader input = new BufferedReader(new InputStream-Reader(

System.in));System.out.println("Nhap ma sinh vien : ");mSinhVien.maSinhVien = Integer.parseInt(input.readLine());System.out.println("Nhap ho ten : ");mSinhVien.hoTen = input.readLine();System.out.println("Nhap diem ly thuyet : ");mSinhVien.diemLyThuyet = Float.parseFloat(input.readLine());

Page 44: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Bài 3: Yêu cầu:1. Xây dựng lớp NhanVien như sau:Tên lớp

NhanVien

Các thuộc tính

- maNV : String - soSP : int

Các phương thức

+ NhanVien() + NhanVien (ma: String, sp : int) + getMaNV() : String + setMaNV(ma : String) : void + getSoSP() : int + setSoSP(sp : int) : void + coVuotChuan() : boolean + getTongKet() : String + getLuong(): double + XuatTieuDe() : static void + toString() : String

Trong các hàm khởi tạo và các hàm setSoSP, khi gán giá trị cho thuộc tính soSP thì cần kiểm tra giá trị đó có phải là số dương không, nếu là số dương thì mới gán giá trị cho thuộc tính, ngược lại thì gán bằng 0.

Hàm coVuotChuan() : trả về true nếu soSP > 500, ngược lại trả về false. Giải thích: hàm này dùng để kiểm tra xem số lượng sản phẩm của nhân viên có vượt quá số lượng chuẩn hay không. Hàm getTongKet() : trả về chữ "Vượt" khi soSP > 500, ngược lại để trống (có thể sử dụng

Trang 37

public class SinhVien {

int maSinhVien;String hoTen;float diemLyThuyet;float diemThucHanh;float diemTrungBinh;

public SinhVien() {

}

public SinhVien(int maSinhVien, String hoTen, float diemLyThuyet,float diemThucHanh) {

super();this.maSinhVien = maSinhVien;this.hoTen = hoTen;this.diemLyThuyet = diemLyThuyet;this.diemThucHanh = diemThucHanh;

}

public static void main(String[] args) throws NumberFormatException,IOException {

SinhVien mSinhVien = new SinhVien();mSinhVien.Nhap(mSinhVien);System.out.println("Diem trung binh : " + mSinhVien.diemTrung-

Binh);System.out.println(mSinhVien.toString());

}

public void Nhap(SinhVien mSinhVien) throws NumberFormatException,IOException {

BufferedReader input = new BufferedReader(new InputStream-Reader(

System.in));System.out.println("Nhap ma sinh vien : ");mSinhVien.maSinhVien = Integer.parseInt(input.readLine());System.out.println("Nhap ho ten : ");mSinhVien.hoTen = input.readLine();System.out.println("Nhap diem ly thuyet : ");mSinhVien.diemLyThuyet = Float.parseFloat(input.readLine());

@Overridepublic String toString() {

String a = "SinhVien maSV : " + maSinhVien + ", ho ten : " + hoTen

+ ", diemLyThuyet=" + diemLyThuyet + ", diemThucHanh="

+ diemThucHanh + "\n Ket Qua : ";if (diemTrungBinh >= 5)

a += "Ket qua : Dau";else

a += "Ket qua : Rot";return a;

}

Page 45: Báo cáo tìm hiểu java và một số bài tập ứng dụng

hàm coVuotChuan() để kiểm tra).

Hàm getLuong() : trả về lương của một nhân viên, lương ăn theo sản phẩm với đơn giá cơ bản cho 1 sản phẩm là 20000, và nếu số sản phẩm của nhân viên vượt chuẩn thì phần vượt chuẩn được tính đơn giá là 30000.

Hàm XuatTieuDe() : xuất tiêu đề gồm các cột : mã nhân viên, số sản phẩm, lương, tổng kết.

Hàm toString() : trả về chuỗi chứa thông tin của nhân viên gồm các cột: Mã nhân viên (maNV), Số sản phẩm (soSP), Lương và Tổng kết.

2. Viết hàm main để kiểm tra lớp NhanVien theo yêu cầu sau: Tạo 2 nhân viên với các thuộc tính cho người dùng nhập vào. Xuất ra các thông tin của họ, gồm mã, số sản phẩm, lương, tổng kết.

Chương trình: NhanVien.java

Trang 38

public class NhanVien {String maNhanVien;static String phanXuong;int soSanPham;

public NhanVien() {

}public NhanVien(String maNhanVien, String phanXuong, int soSanPham) {

super();this.maNhanVien = maNhanVien;this.phanXuong = phanXuong;this.soSanPham = soSanPham;

}public String getMaNhanVien() {

return maNhanVien;}

public void setMaNhanVien(String maNhanVien) {this.maNhanVien = maNhanVien;

}

public static String getPhanXuong() {return phanXuong;

}

public void setPhanXuong(String phanXuong) {this.phanXuong = phanXuong;

}public int getSoSanPham() {

return soSanPham;}public void setSoSanPham(int soSanPham) {

Page 46: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Trang 39

public void setSoSanPham(int soSanPham) {this.soSanPham = soSanPham;

}public static int getChuan() {

if (phanXuong.equals("A"))return 300;

elsereturn 500;

}public static int getChuan(String px) {

if (px.equals("A"))return 300;

elsereturn 500;

}public boolean vuotChuan() {

if (phanXuong.equals("A")) {if (soSanPham > 300)

return true;else

return false;} else {

if (soSanPham > 500)return true;

elsereturn false;

}}public int tinhLuong() {

int luong;if (vuotChuan())

luong = soSanPham * 30000;else

luong = soSanPham * 20000;return luong;

}public String toString() {

return maNhanVien;}public String[] getNhanVien() {

if (vuotChuan()) {String[] temp = { maNhanVien, phanXuong, String.val-

ueOf(soSanPham),"x" };

return temp;} else {

String[] temp = { maNhanVien, phanXuong, String.val-ueOf(soSanPham),

"" };return temp;

}

}}

Page 47: Báo cáo tìm hiểu java và một số bài tập ứng dụng

2. Kế thừa

Bài 1

Yêu cầu: Cho các lớp sau:

// Vehicle.java

public class Vehicle{

private int numOfWheels;

public Vehicle(int x){

numOfWheels = x;

}

public void drive() {

System.out.println("Driving a vehicle");

}}

//Car.java

public class Car extends Vehicle{

private int numOfDoors; public Car(int d, int w) {

super(w);

numOfDoors = d;

}

public void drive() {

System.out.println("Driving a car");

}

}

Viết hàm main() sử dụng lớp Car như sau, hãy co biết kết quả chương trình là gì khi viết

theo 2 trường hợp sau sau: Trang 40

Page 48: Báo cáo tìm hiểu java và một số bài tập ứng dụng

TH1:

Car audi = new Car();

Car.drive();

TH2:

Car p = new Car(2, 4);

p.drive();

Chương trình: Main.java, Vehicle.java, Car.java

Trang 41

public class Main {public static void main(String[] args) {

Car audi = new Car() ;Car.drive();

}}

class Vehicle {private int numOfWheels;

public Vehicle(int x) {numOfWheels = x;

}

public void drive() {System.out.println("Driving a vehicle");

}}

// Car.javaclass Car extends Vehicle {

private int numOfDoors;

public Car(int d, int w) {super(w);numOfDoors = d;

}public void drive() {

System.out.println("Driving a car");}

}

Page 49: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Bài 2:

Yêu cầ u :

- Cài đặt các lớp (Class) cho lược đồ sau:

Trong đó:

+ Point, Circle, CircleTest là các class

+ toString(): xuất giá trị x, y, radius của Point hoặc Circle tương ứng (x, y xuất kiểu

tọa độ [x,y])

+ setRadius(): kiểm tra giá trị đưa vào.

+ getDiameter(): tính đường kính hình tròn. + getCircumference(): tính chu vi hình

tròn. + getArea(): tính diện tích hình tròn.

+ Hàm main() yêu cầu nhập một mảng n đối tượng Circle, xuất ra đường kính, chu vi,

diện tích của chúng, kết quả hiển thị 2 số lẻ.

Chương trình: Circle.java

Trang 42public class Circle extends Point {double radius;

public Circle() {}

Page 50: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Trang 43

public class Circle extends Point {double radius;

public Circle() {}

public class Point {

int x, y;

public Point() {}

public Point(int x, int y) {super();this.x = x;this.y = y;

}

/** * @return the x */public int getX() {

return x;}

/** * @param x * the x to set */public void setX(int x) {

this.x = x;}

/** * @return the y */public int getY() {

return y;}

/** * @param y * the y to set */public void setY(int y) {

this.y = y;}

/* * (non-Javadoc) * * @see java.lang.Object#toString() */@Overridepublic String toString() {

return "Point [x=" + x + ", y=" + y + "]";}

}

Page 51: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Point.java

Bài 3:

Yêu cầu:

Trang 44

public class CircleTest {

private static ArrayList<Circle> circles;

public static void main(String[] args) {// TODO Auto-generated method stubnhap();xuat();

}

public static void nhap() {circles = new ArrayList<Circle>();int soPhanTu;int x, y, radius;Scanner input = new Scanner(System.in);System.out.println("Mang cua ban co bao nhieu hinh tron ? ");soPhanTu = input.nextInt();for (int i = 0; i < soPhanTu; i++) {

System.out.println("Hinh tron " + (i + 1));System.out.println("Nhap x ");x = input.nextInt();System.out.println("Nhap y ");y = input.nextInt();System.out.println("Nhap ban kinh : ");radius = input.nextInt();circles.add(new Circle(x, y, radius));

}

}

public static void xuat() {for (int i = 0; i < circles.size(); i++) {

System.out.println("Hinh tron " + (i + 1) + ": " + "Duong kinh : "

+ circles.get(i).getDiameter() + ", Chu vi : "

+ circles.get(i).getCircum-ference() + ", Dien tich : "

+ circles.get(i).getArea());}

}}

Page 52: Báo cáo tìm hiểu java và một số bài tập ứng dụng

a. Xây dựng lớp hình chữ nhật với các thuộc tính là chiều dài, chiều rộng, viết các hàm tính

chu vi, diện tích của nó.

b. Xây dựng lớp hình vuông thừa kế lớp hình chữ nhật.

c. Viết chương trình tính chu vi, diện tích hình vuông với độ dài nhập vào

Chương trình: HinhChuNhat.java

Trang 45

public class HinhChuNhat {int chieuDai;int chieuRong;

public HinhChuNhat() {

}

public HinhChuNhat(int chieuDai, int chieuRong) {

this.chieuDai = chieuDai;this.chieuRong = chieuRong;

}

/** * @return the chieuDai */public int getChieuDai() {

return chieuDai;}

/** * @param chieuDai * the chieuDai to set */public void setChieuDai(int chieuDai) {

this.chieuDai = chieuDai;}

/** * @return the chieuRong */public int getChieuRong() {

return chieuRong;}

/** * @param chieuRong * the chieuRong to set */public void setChieuRong(int chieuRong) {

this.chieuRong = chieuRong;}

public int dienTich() {return chieuDai * chieuRong;

}

Page 53: Báo cáo tìm hiểu java và một số bài tập ứng dụng

HinhVuong.java

Main.java

Trang 46

public class HinhVuong extends HinhChuNhat {public HinhVuong() {

super(); }

public HinhVuong(int chieuDai, int chieuRong) {super(chieuDai, chieuRong);

}}

public class Main {public static void main(String[] args) {

// TODO Auto-generated method stubHinhVuong mHinhVuong = new HinhVuong();nhap(mHinhVuong);xuat(mHinhVuong);

}public static void nhap(HinhVuong hv) {

Scanner input = new Scanner(System.in);System.out.println("Nhap chieu dai : ");hv.setChieuDai(input.nextInt());System.out.println("Nhap chieu rong : ");hv.setChieuRong(input.nextInt());

}public static void xuat(HinhVuong hv) {

System.out.println("Dien tich : " + hv.dienTich() + ", Chu vi : "

+ hv.chuVi());}}

public int dienTich() {return chieuDai * chieuRong;

}

public int chuVi() {return (chieuDai + chieuRong) * 2;

}}

Page 54: Báo cáo tìm hiểu java và một số bài tập ứng dụng

III. Lập trình giao diện

Bài 1:

Yêu cầu:

Chương trình:

Trang 47

public class Bai1 extends JFrame {

public static void main(String[] args) {Bai1 frame = new Bai1();

}public Bai1() {

setTitle("JCheckBox Test");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setResizable(false);setBounds(100, 100, 418, 111);add(jPanel1());setVisible(true);

}public JPanel jPanel1() {

JPanel contentPane = new JPanel();contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));contentPane.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));final JTextField textField = new JTextField();contentPane.add(textField);textField.setColumns(32);final JCheckBox chckbxBold = new JCheckBox("Bold");chckbxBold.addActionListener(new ActionListener() {

@Overridepublic void actionPerformed(ActionEvent arg0) {

if (textField.getFont().isBold())textField.setFont(new Font(null, Font.PLAIN, textField.getFont().getSize()));

elsetextField.setFont(new Font(null, Font.BOLD,

textField.getFont().getSize()));

}});

Page 55: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Kết quả:

Bài2:

Yêu cầu :

Chương trình :

Trang 48

contentPane.add(chckbxBold);JCheckBox chckbxItalic = new JCheckBox("Italic");chckbxItalic.addActionListener(new ActionListener() {

@Overridepublic void actionPerformed(ActionEvent arg0) {

if (textField.getFont().isItalic())textField.setFont(new Font(null, Font.PLAIN,

textField.getFont().getSize()));

elsetextField.setFont(new Font(null, Font.ITALIC,

textField.getFont().getSize()));

}});contentPane.add(chckbxItalic);return contentPane;

}}

public class MyRadioButton extends JFrame {

JTextField textField;

public static void main(String[] args) {

Page 56: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Kết quả:

Trang 49

public class MyRadioButton extends JFrame {

JTextField textField;

public static void main(String[] args) {

private class ButtonClickListener implements ActionListener {

public void actionPerformed(ActionEvent e) {String command = e.getActionCommand();switch (command) {case "Plain":

textField.setFont(new Font(null, Font.PLAIN, textField

.getFont().getSize()));break;

case "Bold":if (textField.getFont().isBold())

textField.setFont(new Font(null, Font.PLAIN, textField

.getFont().getSize()));

elsetextField.setFont(new Font(null, Font.BOLD,

textField.getFont().getSize()));

break;case "Italic":

if (textField.getFont().isItalic())textField.setFont(new Font(null, Font.-PLAIN, textField

.getFont().getSize()));

elsetextField.setFont(new Font(null, Font.ITALIC,

textField.getFont().getSize()));

break;

case "Bold/Italic":textField.setFont(new Font(null, Font.BOLD + Font.ITALIC,

textField.getFont().getSize()));break;

default:break;

}}

}}

Page 57: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Bài 3:Yêu cầu:

Chương trình: GiaiPhuongTrinh.java

Trang 50

public class GiaiPhuongTrinhBac2 {

public float a, b, c;double delta;double x1, x2;String ketQua;static int bienStatic = 0;

public GiaiPhuongTrinhBac2() {

}

Page 58: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Trang 51

public GiaiPhuongTrinhBac2(float a, float b, float c) {this.a = a;this.b = b;this.c = c;

}public float getA() {

return a;}

public float getB() {return b;

}

public float getC() {return c;

}

public double getDelta() {return delta;

}public double getX1() {

return x1;}public double getX2() {

return x2;}public void giai() {

kiemTra();}private void kiemTra() {

if (a == 0) {if (b == 0) { ketQua = "Phương trình vô nghiệm";} else { ketQua = "x1 = " + String.format("%.2f", x1); }

} else {if (tinhDelta() < 0) {

ketQua = "Phương trình vô nghiệm";}

else {if (tinhDelta() == 0) {

ketQua = "x1 = " + String.format("%.2f", x1);} else {

ketQua = "x1 = " + String.for-mat("%.2f", x1) + " , x2 = "

+ String.format("%.2f", x2);}}}}

public double nghiemDuyNhat() {x1 = -c / b;return x1;

}public double nghiemKep() {

x1 = -b / (2 * a);return x1;

}

Page 59: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Main.java

Trang 52

public String nghiemPhanBiet() {x1 = ((-b + Math.sqrt(delta)) / (2 * a));x2 = ((-b - Math.sqrt(delta)) / (2 * a));return x1 + " , " + x2;

}public void setA(float a) {

this.a = a;}public void setB(float b) {

this.b = b;}public void setC(float c) {

this.c = c;}public double tinhDelta() {

delta = ((Math.pow(b, 2)) - 4 * a * c);return delta;

}public String getKetQua() {

return ketQua;}

}

public class Main extends JFrame {

JTextField txtSoA, txtSoB, txtSoC, txtKetQua;JButton btnGiai, btnXoaTrang, btnThoat;GiaiPhuongTrinhBac2 giaiPT;JLabel lblTieuDe;

public static void main(String[] args) {Main main = new Main();GiaiPhuongTrinhBac2.bienStatic = 3;System.out.println("Gia tri cua bien static "

+ GiaiPhuongTrinhBac2.bienStatic);}

public Main() {setTitle("Gia:i phương trình");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(400, 300);add(pannelBorder());setLocationRelativeTo(null);setVisible(true);

}

Page 60: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Trang 53

public JPanel nhap() {

JPanel mJPanel = new JPanel();mJPanel.setLayout(new BoxLayout(mJPanel, BoxLayout.Y_AXIS));Border centerborder = BorderFactory.createLineBorder(Col-

or.RED);TitledBorder centerTitleBorder = new TitledBorder(centerborder,

"nhập a – b- c:");mJPanel.setBorder(centerTitleBorder);

JPanel pA = new JPanel();pA.add(new JLabel("a"));txtSoA = new JTextField(15);pA.add(txtSoA);mJPanel.add(pA);

JPanel pB = new JPanel();pB.add(new JLabel("b"));txtSoB = new JTextField(15);pB.add(txtSoB);mJPanel.add(pB);

JPanel pC = new JPanel();pC.add(new JLabel("c"));txtSoC = new JTextField(15);pC.add(txtSoC);mJPanel.add(pC);

JPanel pKQ = new JPanel();pKQ.add(new JLabel("Kêat qua:"));txtKetQua = new JTextField(15);txtKetQua.setEditable(false);pKQ.add(txtKetQua);mJPanel.add(pKQ);

return mJPanel;}

public JPanel nut() {JPanel mJPanel = new JPanel();mJPanel.setBorder(BorderFactory.createTitledBorder("Chọn tác

vụ"));mJPanel.setBackground(Color.LIGHT_GRAY);Border centerborder = BorderFactory.createLineBorder(Col-

or.RED);TitledBorder centerTitleBorder = new TitledBorder(centerborder,

"Chọn thao tác:");mJPanel.setBorder(centerTitleBorder);btnGiai = new JButton("Gia:i");btnGiai.addActionListener(new ButtonClickListener());mJPanel.add(btnGiai);btnXoaTrang = new JButton("Xóa trắang");btnXoaTrang.addActionListener(new ButtonClickListener());mJPanel.add(btnXoaTrang);btnThoat = new JButton("Thoát");btnThoat.addActionListener(new ButtonClickListener());mJPanel.add(btnThoat);return mJPanel;

}

Page 61: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Trang 54

public JPanel tieuDe() {JPanel mJPanel = new JPanel();lblTieuDe = new JLabel("GIA:I PHƯƠNG TRÌNH BẬC HAI");Font mFont = new Font(null, Font.BOLD, 21);lblTieuDe.setFont(mFont);lblTieuDe.setForeground(Color.BLUE);mJPanel.add(lblTieuDe);return mJPanel;

}

public JPanel pannelBorder() {

JPanel mJPanel = new JPanel(new BorderLayout());mJPanel.add(tieuDe(), BorderLayout.NORTH);mJPanel.add(nhap(), BorderLayout.CENTER);mJPanel.add(nut(), BorderLayout.SOUTH);

return mJPanel;

}

private class ButtonClickListener implements ActionListener {public void actionPerformed(ActionEvent e) {

String command = e.getActionCommand();if (command.equals("Gia:i")) {

giaiPT = new GiaiPhuongTrinhBac2();try {

giaiPT.setA(Float.parse-Float(txtSoA.getText()));

giaiPT.setB(Float.parse-Float(txtSoB.getText()));

giaiPT.setC(Float.parse-Float(txtSoC.getText()));

giaiPT.giai();txtKetQua.setText(giaiPT.getKetQua());

} catch (Exception ex) {JOptionPane.showMessageDialog(null, "Sai định

dạng !");}

} else if (command.equals("Xóa trắang")) {txtSoA.setText(null);txtSoB.setText(null);txtSoC.setText(null);txtKetQua.setText(null);

} else {int ret = JOptionPane.showConfirmDialog(null,

"Bạn có muôan thoát không ?", null,JOptionPane.YES_NO_OPTION);

if (ret == JOptionPane.YES_OPTION)System.exit(0);

}}

}

Page 62: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Kết quả :

Bài 4:

Chương trình : CongTruNhanChia.java

Trang 55

public class CongTruNhanChia extends JFrame {

private JTextField txta;private JTextField txtb;private JRadioButton rdbtnCong;private JRadioButton rdbtnTru;private JRadioButton rdbtnNhan;private JRadioButton rdbtnChia;

private ButtonGroup mButtonGroup;private JTextField txtKetQua;

/** * Launch the application. */public static void main(String[] args) {

CongTruNhanChia frame = new CongTruNhanChia();}

/** * Create the frame. */public CongTruNhanChia() {

setTitle("Cộng trừ nhân chia");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(100, 100, 396, 307);getContentPane().add(pNoiDung());setLocationRelativeTo(null);

Page 63: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Trang 56

private ButtonGroup mButtonGroup;private JTextField txtKetQua;

/** * Launch the application. */public static void main(String[] args) {

CongTruNhanChia frame = new CongTruNhanChia();}

/** * Create the frame. */public CongTruNhanChia() {

setTitle("Cộng trừ nhân chia");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(100, 100, 396, 307);getContentPane().add(pNoiDung());setLocationRelativeTo(null);

JButton btnXoa = new JButton("Xóa");btnXoa.addActionListener(mActionListener);mJPanel.add(btnXoa);

JButton btnThoat = new JButton("Thoát ");btnThoat.addActionListener(mActionListener);mJPanel.add(btnThoat);

btnXoa.setPreferredSize(btnThoat.getPreferredSize());btnGiai.setPreferredSize(btnThoat.getPreferredSize());

return mJPanel;} */public JPanel pNoiDungBenPhai() {

JPanel mJPanel = new JPanel();mJPanel.setBorder(new EmptyBorder(5, 5, 5, 5));mJPanel.setLayout(null);Border mBorder = BorderFactory.createLineBorder(Color.RED);mJPanel.setBorder(new TitledBorder(mBorder, "Nhập 2 sôa a và

b :"));

JLabel lblNhpA = new JLabel("Nhập a : ");lblNhpA.setBounds(15, 20, 52, 14);mJPanel.add(lblNhpA);

txta = new JTextField();txta.setBounds(71, 17, 205, 20);mJPanel.add(txta);txta.setColumns(10);

JLabel lblNhpB = new JLabel("Nhập b :");lblNhpB.setBounds(15, 45, 52, 14);mJPanel.add(lblNhpB);

txtb = new JTextField();txtb.setBounds(71, 48, 205, 20);mJPanel.add(txtb);txtb.setColumns(10);

JPanel pPhepToan = chonPhepToan();pPhepToan.setBounds(71, 79, 154, 88);mJPanel.add(pPhepToan);JLabel lblKetQua = new JLabel("Kêat qua: : ");lblKetQua.setBounds(15, 181, 52, 14);mJPanel.add(lblKetQua);txtKetQua = new JTextField();txtKetQua.setBounds(71, 178, 205, 20);mJPanel.add(txtKetQua);txta.setColumns(10);return mJPanel;

}

Page 64: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Trang 57

public JPanel pChan() {JPanel mJPanel = new JPanel();mJPanel.setBackground(new Color(255, 182, 193));

JPanel p1 = new JPanel();p1.setBackground(Color.BLUE);mJPanel.add(p1);

JPanel p2 = new JPanel();p2.setBackground(Color.RED);p1.setBackground(Color.RED);mJPanel.add(p2);

JPanel p3 = new JPanel();p3.setBackground(Color.BLUE);p1.setBackground(Color.YELLOW);mJPanel.add(p3);

return mJPanel;}

/** * */public JPanel chonPhepToan() {

JPanel panel = new JPanel(new GridLayout(2, 2));

panel.setLayout(new GridLayout(2, 2));panel.setBorder(BorderFactory.createTitledBorder("Chọn phép

toán:"));

mButtonGroup = new ButtonGroup();rdbtnCong = new JRadioButton("Cộng ");mButtonGroup.add(rdbtnCong);panel.add(rdbtnCong);

rdbtnTru = new JRadioButton("Trừ");mButtonGroup.add(rdbtnTru);panel.add(rdbtnTru);

rdbtnNhan = new JRadioButton("Nhân");mButtonGroup.add(rdbtnNhan);panel.add(rdbtnNhan);

rdbtnChia = new JRadioButton("Chia");mButtonGroup.add(rdbtnChia);panel.add(rdbtnChia);return panel;

}

ActionListener mActionListener = new ActionListener() {

@Overridepublic void actionPerformed(ActionEvent e) {

String command = e.getActionCommand();switch (command) {case "Gia:i":

Page 65: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Trang 58

int cong = 0;int tru = 0;int nhan = 0;float chia = 0;try {

cong = Integer.parseInt(txta.getText())+ Integer.par-

seInt(txtb.getText());tru = Integer.parseInt(txta.getText())

- Integer.par-seInt(txtb.getText());

nhan = Integer.parseInt(txta.getText())* Integer.par-

seInt(txtb.getText());chia = Float.parseFloat(txta.getText())

/ Float.parse-Float(txtb.getText());

} catch (NumberFormatException e1) {JOptionPane.showMessageDialog(null, "Sai định

dạng !");break;

}

if (rdbtnCong.isSelected())txtKetQua.setText(String.valueOf(cong));

else if (rdbtnTru.isSelected())txtKetQua.setText(String.valueOf(tru));

else if (rdbtnNhan.isSelected())txtKetQua.setText(String.valueOf(nhan));

else if (rdbtnChia.isSelected())txtKetQua.setText(String.valueOf(chia));

break;

case "Xóa":txta.setText("");txtb.setText("");txtKetQua.setText("");mButtonGroup.clearSelection();

break;case "Thoát":

int ret = JOptionPane.showConfirmDialog(null,"Bạn có muôan thoát không ?", null,JOptionPane.YES_NO_OPTION);

if (ret == JOptionPane.YES_OPTION)System.exit(0);

break;

default:break;

}

}};

}

Page 66: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Kết quả :

Bài 5:

Chương trình :

Trang 59

public class JListDemo extends JFrame {public static void main(String[] args) {

JListDemo mDemo = new JListDemo();}public JListDemo() {

setTitle("JList Demo");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(150, 200);add(panel());

Page 67: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Kết quả

Trang 60

Page 68: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Bài 6:

Chương trình ListEditDemo.java

Trang 61

public class ListEditDemo extends JFrame {private JTextField textField;private DefaultListModel<String> mStrings;private JList list;

/** * Launch the application. */public static void main(String[] args) {

ListEditDemo frame = new ListEditDemo();

}

/** * Create the frame. */public ListEditDemo() {

setTitle("List Edit Demo");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(100, 100, 507, 300);jPanel();setLocationRelativeTo(null);setVisible(true);

}

Page 69: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Trang 62

Page 70: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Trang 63

public JPanel jPanel() {JPanel panel = new JPanel();getContentPane().add(panel, BorderLayout.CENTER);panel.setLayout(null);

JScrollPane scrollPane = new JScrollPane();scrollPane.setBounds(10, 11, 134, 240);panel.add(scrollPane);

mStrings = new DefaultListModel<String>();

list = new JList( mStrings ) ;list.addListSelectionListener(mListener);scrollPane.setViewportView(list);

JPanel panel_1 = new JPanel();panel_1.setBounds(154, 11, 327, 240);panel.add(panel_1);panel_1.setLayout(null);

JLabel lblInputName = new JLabel("Input name");lblInputName.setBounds(10, 11, 70, 22);panel_1.add(lblInputName);

textField = new JTextField();textField.setBounds(75, 12, 235, 20);panel_1.add(textField);textField.setColumns(10);

JButton btnNewButton = new JButton("Add Item");btnNewButton.addActionListener(mActionListener);btnNewButton.setBounds(10, 44, 89, 23);panel_1.add(btnNewButton);

JButton btnRemoveItem = new JButton("Remove Item");btnRemoveItem.addActionListener(mActionListener);btnRemoveItem.setBounds(109, 44, 102, 23);panel_1.add(btnRemoveItem);

JButton btnEditItem = new JButton("Edit Item");btnEditItem.addActionListener(mActionListener);btnEditItem.setBounds(221, 43, 89, 23);panel_1.add(btnEditItem);return panel;

}

private boolean isTextEmpty() {if (textField.getText().equals(""))

return true;else

return false;

}

Page 71: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Trang 64

ActionListener mActionListener = new ActionListener() {

@Overridepublic void actionPerformed(ActionEvent arg0) {

String command = arg0.getActionCommand();switch (command) {case "Add Item":

if (!isTextEmpty()) {if (mStrings.contains(textField.getText()))

JOptionPane.showMessageDialog(null, "Đã có !");

elsemStrings.addEle-

ment(textField.getText());}break;

case "Remove Item":if (list.getSelectedValue() != null) {

int ret = JOptionPane.showConfirmDialog(null,"Xoá " + list.getSelectedValue(),

"Thông báo",JOptionPane.YES_NO_OPTION);

if (ret == JOptionPane.YES_OPTION)mStrings.removeElementAt(list.getSe-

lectedIndex());}break;

case "Edit Item":try {

if (!isTextEmpty())mStrings.setElementAt(textField.get-

Text(),list.getSelectedIndex());

} catch (Exception e) {e.printStackTrace();

}break;

default:break;

}

}};

ListSelectionListener mListener = new ListSelectionListener() {

@Overridepublic void valueChanged(ListSelectionEvent e) {

textField.setText((String) list.getSelectedValue());

}};

}

Page 72: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Kết quả

Bài 7:

Trang 65

Page 73: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Chương trình: ThaoTacJlist.java

Trang 66

public class ThaoTacJlist extends JFrame {

private JPanel contentPane;private JTextField txtNhap;private JList list;private DefaultListModel<Integer> model;private JCheckBox chckbxNhapAm;

/** * Launch the application. */public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {public void run() {

try {ThaoTacJlist frame = new ThaoTacJlist();frame.setVisible(true);

} catch (Exception e) {e.printStackTrace();

}}

});}

public ThaoTacJlist() {setTitle("Thao tác trên Jlist");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(100, 100, 631, 374);contentPane = new JPanel();contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));setContentPane(contentPane);contentPane.setLayout(new BorderLayout(0, 0));

JPanel pNorth = new JPanel();JLabel lblThaoTcTrn = new JLabel("Thao tác trên Jlis - Check-

Box");lblThaoTcTrn.setForeground(Color.BLUE);lblThaoTcTrn.setFont(new Font("Tahoma", Font.PLAIN, 24));pNorth.add(lblThaoTcTrn);contentPane.add(pNorth, BorderLayout.NORTH);

Page 74: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Trang 67

JPanel pCenter = new JPanel();contentPane.add(pCenter);JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT));panel.setBounds(0, 11, 211, 230);Border mBorder = BorderFactory.createLineBorder(Color.RED);pCenter.setLayout(null);panel.setBorder(BorderFactory.createTitledBorder(mBorder,

"Chọn tác vụ "));

pCenter.add(panel);

JButton btnToDenSoChan = new JButton("Tô đen sôa chắvn");btnToDenSoChan.addActionListener(mActionListener);panel.add(btnToDenSoChan);

JButton btnToDenSoLe = new JButton("Tô đen sôa le:");btnToDenSoLe.addActionListener(mActionListener);panel.add(btnToDenSoLe);

JButton btnTenSoNguyenTo = new JButton("Tô đen sôa nguyên tôa");btnTenSoNguyenTo.addActionListener(mActionListener);panel.add(btnTenSoNguyenTo);

JButton btnBoToDen = new JButton("Bo: tô đen");btnBoToDen.addActionListener(mActionListener);panel.add(btnBoToDen);

JButton btnXoa = new JButton("Xóa các giá trị đang tô đen");btnXoa.addActionListener(mActionListener);panel.add(btnXoa);

JButton btnTongGiaTri = new JButton("Tô:ng các giá trị trong list");

btnTongGiaTri.addActionListener(mActionListener);panel.add(btnTongGiaTri);

JPanel panel_1 = new JPanel();panel_1.setBounds(221, 11, 384, 230);pCenter.add(panel_1);panel_1.setBorder(BorderFactory.createTitledBorder(mBorder,

"Nhập thông tin"));panel_1.setLayout(null);

JPanel panel_2 = new JPanel();panel_2.setBounds(10, 19, 363, 33);panel_1.add(panel_2);JButton btnNhap = new JButton("Nhập");btnNhap.addActionListener(mActionListener);btnNhap.addKeyListener(new KeyAdapter() {

@Overridepublic void keyPressed(KeyEvent arg0) {

int key = arg0.getKeyCode();if (key == KeyEvent.VK_ENTER)

nhap();}

});

Page 75: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Trang 68

panel_2.add(btnNhap);

txtNhap = new JTextField();panel_2.add(txtNhap);txtNhap.setColumns(10);

chckbxNhapAm = new JCheckBox("Cho nhập giá trị âm");panel_2.add(chckbxNhapAm);

model = new DefaultListModel<Integer>();list = new JList();list .setModel( model ) ;list.setBounds(0, 0, 110, 111);

JScrollPane mJScrollPane = new JScrollPane();mJScrollPane.setViewportView(list);mJScrollPane.setBounds(10, 54, 363, 165);panel_1.add(mJScrollPane);

JPanel panel_3 = new JPanel();contentPane.add(panel_3, BorderLayout.SOUTH);panel_3.setBorder(mBorder);

JButton btnDong = new JButton("Đóng chương trình");btnDong.addActionListener(mActionListener);panel_3.add(btnDong);

}ActionListener mActionListener = new ActionListener() {

@Overridepublic void actionPerformed(ActionEvent e) {

String commamd = e.getActionCommand();list.setSelectionMode(ListSelectionModel.MUL-

TIPLE_INTERVAL_SELECTION);ArrayList<Integer> a = new ArrayList<Integer>();int[] mSelected;switch (commamd) {case "Tô đen sôa chắvn":

for (int i = 0; i < model.getSize(); i++) {if ((model.getElementAt(i) % 2) == 0)

a.add(i);}mSelected = convertIntegers(a);list.setSelectedIndices(mSelected);break;

case "Tô đen sôa le:":for (int i = 0; i < model.getSize(); i++) {

if ((model.getElementAt(i) % 2) != 0)a.add(i);

}mSelected = convertIntegers(a);list.setSelectedIndices(mSelected);break;

Page 76: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Trang 69

case "Tô đen sôa nguyên tôa":for (int i = 0; i < model.getSize(); i++) {

if (isSoNguyenTo(i))a.add(i);

}mSelected = convertIntegers(a);list.setSelectedIndices(mSelected);break;

case "Bo: tô đen":list.clearSelection();break;

case "Xóa các giá trị đang tô đen":

if (list.getSelectedIndices().length > 0) {int[] selectedIndices = list.getSelecte-

dIndices();for (int i = selectedIndices.length - 1; i >= 0; i--) {

model.removeElementAt(selecte-dIndices[i]);

}}break;

case "Tô:ng các giá trị trong list":list.getSelectedIndices();int tong = 0;for (int j = 0; j < model.size(); j++) {

tong += model.getElementAt(j);}JOptionPane.showMessageDialog(null, "Tô:ng :" +

tong);break;

case "Nhập":nhap();break;

case "Đóng chương trình":

int dong = JOptionPane.showConfirmDialog(null,"Đóng chương trình", "Thông báo",JOptionPane.OK_CANCEL_OPTION);

if (dong == JOptionPane.OK_OPTION)System.exit(1);

break;default:

break;}

}

};

Page 77: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Trang 70

public void nhap() {

try {if (chckbxNhapAm.isSelected())

model.addElement(Integer.par-seInt(txtNhap.getText()));

else {if (Integer.parseInt(txtNhap.getText()) >= 0)

model.addElement(Integer.par-seInt(txtNhap.getText()));

elseJOptionPane.showMessageDialog(null, "Không

thê: nhập sôa âm !");}

} catch (NumberFormatException e) {JOptionPane.showMessageDialog(null, "Sai định dạng !");e.printStackTrace();

} catch (HeadlessException e) {// TODO Auto-generated catch blocke.printStackTrace();

}}

/** * @param i */public boolean isSoNguyenTo(int i) {

int dem = 0;for (int j = 1; j < model.getElementAt(i) / 2; j++) {

if (model.getElementAt(i) % j == 0)dem++;

}if (dem > 0)

return false;else

return true;}

public static int[] convertIntegers(ArrayList<Integer> integers) {int[] ret = new int[integers.size()];for (int i = 0; i < ret.length; i++) {

ret[i] = integers.get(i).intValue();}return ret;

}

}

Page 78: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Kết quả :

Bài 8:

Thiết kế giao diện

Trang 71

Page 79: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Chương trình: Account.java

Trang 72

public class Account extends JFrame {

private DefaultTableModel model;private JTable tabbe;private JTextField txtNumber;private JTextField txtAccout;private JTextField txtMoney;

public static void main(String[] args) {EventQueue.invokeLater(new Runnable() {

public void run() {try {

Account frame = new Account();frame.setVisible(true);

} catch (Exception e) {e.printStackTrace();

}}

});}public Account() {

setTitle("Account");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(100, 100, 450, 300);add(panelBorder());setLocationRelativeTo(null);setVisible(true);

}public JPanel panelNhap() {

JPanel panel = new JPanel();panel.setLayout(new GridLayout(3, 2));

JLabel label1 = new JLabel("Account Number");panel.add(label1);txtNumber = new JTextField();panel.add(txtNumber);

JLabel label2 = new JLabel("Account Name");panel.add(label2);

txtAccout = new JTextField();panel.add(txtAccout);

JLabel label3 = new JLabel("Account Money");panel.add(label3);

txtMoney = new JTextField();panel.add(txtMoney);

return panel;}

Page 80: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Trang 73

public JPanel panelControl() {JPanel panel = new JPanel();

JButton btnAdd = new JButton("Add");btnAdd.addActionListener(mActionListener);panel.add(btnAdd);JButton btnClear = new JButton("Clear");btnClear.addActionListener(mActionListener);panel.add(btnClear);JButton btnEdit = new JButton("Exit");btnEdit.addActionListener(mActionListener);panel.add(btnEdit);

return panel;}public JPanel panelNoiDung() {

JPanel panel = new JPanel();

model = new DefaultTableModel();model.addColumn("Acc Number");model.addColumn("Acc Name");model.addColumn("Acc Money");

JScrollPane mJScrollPane = new JScrollPane();tabbe = new JTable(model);

mJScrollPane.setViewportView(tabbe);panel.add(mJScrollPane);

return panel;}public JPanel panelBorder() {

JPanel panel = new JPanel(new BorderLayout());

panel.add(panelNhap(), BorderLayout.NORTH);panel.add(panelNoiDung(), BorderLayout.CENTER);panel.add(panelControl(), BorderLayout.SOUTH);

return panel;}ActionListener mActionListener = new ActionListener() {

@Overridepublic void actionPerformed(ActionEvent arg0) {

String command = arg0.getActionCommand();switch (command) {case "Add":

String[] newRow = { txtNumber.getText(), txtAc-cout.getText(),

txtMoney.getText() };break;

case "Clear":model.removeRow(tabbe.getSelectedRow());break;

Page 81: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Kết quả :

Bài 9:

Trang 74

case "Exit":int dong = JOptionPane.showConfirmDialog(null,

"Đóng chương trình", "Thông báo",JOptionPane.OK_CANCEL_OPTION);

if (dong == JOptionPane.OK_OPTION)System.exit(1);

break;default:

break;}

}};}

Page 82: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Trang 75

Page 83: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Chương trình: NhanVien.java

Trang 76

public class NhanVien {String maNhanVien;static String phanXuong;int soSanPham;

public NhanVien() {

}public NhanVien(String maNhanVien, String phanXuong, int soSanPham) {

super();this.maNhanVien = maNhanVien;this.phanXuong = phanXuong;this.soSanPham = soSanPham;

}public String getMaNhanVien() {

return maNhanVien;}

public void setMaNhanVien(String maNhanVien) {this.maNhanVien = maNhanVien;

}

public static String getPhanXuong() {return phanXuong;

}

public void setPhanXuong(String phanXuong) {this.phanXuong = phanXuong;

}public int getSoSanPham() {

return soSanPham;}public void setSoSanPham(int soSanPham) {

this.soSanPham = soSanPham;}public static int getChuan() {

if (phanXuong.equals("A"))return 300;

elsereturn 500;

}public static int getChuan(String px) {

if (px.equals("A"))return 300;

elsereturn 500;

}

Page 84: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Trang 77

public boolean vuotChuan() {if (phanXuong.equals("A")) {

if (soSanPham > 300)return true;

elsereturn false;

} else {if (soSanPham > 500)

return true;else

return false;}

}

public int tinhLuong() {int luong;if (vuotChuan())

luong = soSanPham * 30000;else

luong = soSanPham * 20000;return luong;

}

public String toString() {return maNhanVien;

}

public String[] getNhanVien() {if (vuotChuan()) {

String[] temp = { maNhanVien, phanXuong, String.val-ueOf(soSanPham),

"x" };return temp;

} else {String[] temp = { maNhanVien, phanXuong, String.val-

ueOf(soSanPham),"" };

return temp;}

}}

Page 85: Báo cáo tìm hiểu java và một số bài tập ứng dụng

FormNhanVien.java

Trang 78

public class FormNhanVien extends JFrame {

private JPanel contentPane;private JTextField txtMaNV;private JTextField txtSoSP;private JTextField txtSoSPChuan;private JTextField txtTienLuong;private JTable table;

NhanVien mNhanVien;private DefaultTableModel model;final String[] px = { "A", "B", "C", "D" };private JComboBox phanXuong;

public static void main(String[] args) {FormNhanVien frame = new FormNhanVien ();

}public FormNhanVien () {

setTitle("Nhập thông tin nhân viên");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(100, 100, 532, 390);contentPane = new JPanel();contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));setContentPane(contentPane);panelContenPane();setVisible(true);mNhanVien = new NhanVien();

}

public void panelContenPane() {contentPane.setLayout(null);JLabel lblMaNhanVien = new JLabel("Mã NV:");lblMaNhanVien.setBounds(23, 11, 46, 14);contentPane.add(lblMaNhanVien);

txtMaNV = new JTextField();txtMaNV.setBounds(99, 8, 397, 20);contentPane.add(txtMaNV);txtMaNV.setColumns(10);

JLabel lblSoSanPham = new JLabel("Sôa sa:n phâ:m");lblSoSanPham.setBounds(23, 33, 87, 14);contentPane.add(lblSoSanPham);

txtSoSP = new JTextField();txtSoSP.setBounds(99, 30, 212, 20);contentPane.add(txtSoSP);txtSoSP.setColumns(10);

txtSoSPChuan = new JTextField();txtSoSPChuan.setBounds(302, 52, 194, 20);contentPane.add(txtSoSPChuan);txtSoSPChuan.setColumns(10);

Page 86: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Trang 79

JLabel lblPhanXuong = new JLabel("Phân xươ:ng");lblPhanXuong.setBounds(23, 55, 87, 14);contentPane.add(lblPhanXuong);

phanXuong = new JComboBox( px ) ;phanXuong.addItemListener(new ItemListener() {

@Overridepublic void itemStateChanged(ItemEvent arg0) {

txtSoSPChuan.setText(String.valueOf(NhanVien.getChuan(px[phanXuong.getSelectedIn-

dex()])));

}});

phanXuong.setToolTipText("Phân xươ:ng");phanXuong.setBounds(99, 52, 79, 20);contentPane.add(phanXuong);

JLabel lblSoSanPhamChuan = new JLabel("Sôa sa:n phâ:m chuâ:n");lblSoSanPhamChuan.setBounds(187, 55, 124, 14);contentPane.add(lblSoSanPhamChuan);

JLabel lblTinhLuong = new JLabel("Tiêwn lương");lblTinhLuong.setBounds(23, 80, 87, 14);contentPane.add(lblTinhLuong);

txtTienLuong = new JTextField();txtTienLuong.setForeground(new Color(255, 255, 255));txtTienLuong.setBackground(new Color(0, 128, 128));txtTienLuong.setBounds(99, 77, 195, 20);contentPane.add(txtTienLuong);txtTienLuong.setColumns(10);

panelControl();

JScrollPane scrollPane = new JScrollPane();scrollPane.setBounds(23, 147, 473, 194);contentPane.add(scrollPane);

// Tạo dữ liệu nhân viêntaoNhanVien();// Tạo ba:ng nhân viêntable = new JTable(model);

// Cắn giữa cho cột phân xươ:ng và vượt chuâ:nDefaultTableCellRenderer centerRenderer = new DefaultTableCell-

Renderer();centerRenderer.setHorizontalAlignment(JLabel.CENTER);table.getColumnModel().getColumn(1).setCellRenderer(centerRen-

derer);table.getColumnModel().getColumn(3).setCellRenderer(centerRen-

derer);// Đặt sự kiện khi click chuột vào dòng trên ba:ng

Page 87: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Trang 80

// Thêm ba:ng vào scrollPanescrollPane.setViewportView(table);

}

/** * Tạo các nút điêwu kiê:n */public JPanel panelControl() {

JPanel panel = new JPanel();panel.setBounds(23, 103, 473, 33);contentPane.add(panel);

JButton btnTinhLuong = new JButton("Tính lương");btnTinhLuong.addActionListener(mActionListener);panel.add(btnTinhLuong);

JButton btnThem = new JButton("Thêm");btnThem.addActionListener(mActionListener);panel.add(btnThem);

JButton btnXoa = new JButton("Xóa");btnXoa.addActionListener(mActionListener);panel.add(btnXoa);

JButton btnSua = new JButton("Sư:a");btnSua.addActionListener(mActionListener);panel.add(btnSua);

JButton btnDong = new JButton("Đóng");btnDong.addActionListener(mActionListener);panel.add(btnDong);return panel;

}

private void taoNhanVien() {model = new DefaultTableModel();model.addColumn("Mã nhân viên");model.addColumn("Phân xươ:ng");model.addColumn("Sôa SP");model.addColumn("Vượt chuâ:n");

Random mRandom = new Random();

for (int i = 0; i < 100; i++) {String maNV = String.valueOf(mRandom.nextInt(200));String pxuong = px[mRandom.nextInt(3)];int soSP = mRandom.nextInt(2000);

model.addRow(new NhanVien(maNV, pxuong, soSP).getNhan-Vien());

}}

Page 88: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Trang 81

ActionListener mActionListener = new ActionListener() {

@Overridepublic void actionPerformed(ActionEvent arg0) {

String command = arg0.getActionCommand();NhanVien nv1 = null;nv1 = new NhanVien(txtMaNV.getText(),

px[phanXuong.getSelectedIndex()], Integer.-parseInt(txtSoSP

.getText()));txtTienLuong.setText(String.valueOf(nv1.tinhLuong()));switch (command) {case "Tính lương":

if (!maNhanVienKhongRong()) {nv1 = new NhanVien(txtMaNV.getText(),

px[phanXuong.getSelectedIndex()],Integer.par-

seInt(txtSoSP.getText()));txtTienLuong.setText(String.val-

ueOf(nv1.tinhLuong()));} else

JOptionPane.showMessageDialog(null,"Mã nhân viên không được

trôang !");

break;case "Thêm":

if (!maNhanVienKhongRong()) {if (daCo() == false) {

model.addRow(nv1.getNhanVien());JOptionPane.showMessageDialog(null, "Đã

thêm");} else

JOptionPane.showMessageDialog(null, "Đã có");

} elseJOptionPane.showMessageDialog(null,

"Mã nhân viên không được trôang !");

break;case "Xóa":

int traloi = JOptionPane.showConfirmDialog(null,"Xóa nhân viên này ?", "Thông báo",JOptionPane.OK_CANCEL_OPTION);

if (traloi == JOptionPane.OK_OPTION)for (int i = table.getSelectedRows().length -

1; i >= 0; i--) {model.removeRow(table.getSelectedRows()

[i]);}

break;

case "Sư:a":

Page 89: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Trang 82

try {// sư:a mã nhân viên ơ: dòng đang chọn, ơ: cột

đâwu tiênmodel.setValueAt(txtMaNV.getText(), ta-ble.getSelectedRow(), 0);// sư:a phân xươ:ng

model.setValueAt(px[phanXuong.getSelectedIndex()],table.getSelectedRow(), 1);

// sư:a sôa lượng sa:n phâ:mmodel.setValueAt(txtSoSP.getText(), table.getSelectedRow(), 2);

// sư:a vượt chuâ:nif (nv1.vuotChuan())

model.setValueAt("x", table.getSelectedRow(), 3);else

model.setValueAt("", table.getSelectedRow(), 3);JOptionPane.showMessageDialog(null, "Đã

sư:a");} catch (Exception e) {

JOptionPane.showMessageDialog(null, "Hãy chọn dòng câwn sư:a");e.printStackTrace();

}break;

case "Đóng":int traloi2 = JOptionPane.showConfirmDialog(null,

"Đóng ?","Thông báo", JOptionPane.OK_CANCEL_OP-

TION);if (traloi2 == JOptionPane.OK_OPTION)

System.exit(1);break;

default:break;

}

}

/** * @return */protected boolean maNhanVienKhongRong() {

return txtMaNV.getText().equals("");}

/** * */private boolean daCo() {

for (int i = 0; i < table.getModel().getRowCount(); i++) {

if (table.getModel().getValueAt(i, 0).equals(txtMaNV.getText())) {

return true;}

Page 90: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Trang 83

return false;}

};// Sự kiện click vào ba:ngMouseListener mouseListener = new MouseListener() {

@Overridepublic void mouseReleased(MouseEvent arg0) {

// TODO Auto-generated method stub

}

@Overridepublic void mousePressed(MouseEvent arg0) {

// TODO Auto-generated method stub

}

@Overridepublic void mouseExited(MouseEvent arg0) {

// TODO Auto-generated method stub

}

@Overridepublic void mouseEntered(MouseEvent arg0) {

// TODO Auto-generated method stub

}

@Overridepublic void mouseClicked(MouseEvent arg0) {

loadDataToTextFied();}

};

public void loadDataToTextFied() {txtMaNV.setText((String) model.getValueAt(table.getSelect-

edRow(), 0));txtSoSP.setText((String) model.getValueAt(table.getSelect-

edRow(), 2));

String txtpx = (String) model.getValueAt(ta-ble.getSelectedRow(), 1);

phanXuong.setSelectedItem(txtpx);

}

}

Page 91: Báo cáo tìm hiểu java và một số bài tập ứng dụng

Kết quả :

Trang 84

Page 92: Báo cáo tìm hiểu java và một số bài tập ứng dụng

TÀI LIỆU THAM KHẢO

1. Website java2s.com

2. Lập trình hướng đối tượng với java của Đoàn Văn Ban

Trang 85