Khối: Đại Học Và Cao Đẳng - Tailieuhoctap.vn

73
Đại Hc Công NghĐồng Nai Khoa Công NghThông Tin Trang 1 Khi: Đại Hc Và Cao Đẳng Năm 2013 Hướng dn: Bài tp thực hành được chia theo Module Mi Module được thiết kế cho thời lượng là 312 tiết thc hành ti lp vi shướng dn ca ging viên. Tùy theo stiết phân b, mi tun hc có ththc hin nhiu Module. Sinh viên phi làm tt ccác bài tp trong các Module tuần tương ứng. Những sinh viên chưa hòan tt phn bài tp ti lp có trách nhi m tlàm tiếp tc nhà. Các bài có du (*) là các bài tp nâng cao dành cho sinh viên khá gi i.

Transcript of Khối: Đại Học Và Cao Đẳng - Tailieuhoctap.vn

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 1

Khối: Đại Học Và Cao Đẳng

Năm 2013

Hướng dẫn:

Bài tập thực hành được chia theo Module

Mỗi Module được thiết kế cho thời lượng là 312 tiết thực hành tại lớp

với sự hướng dẫn của giảng viên.

Tùy theo số tiết phân bổ, mỗi tuần học có thể thực hiện nhiều Module.

Sinh viên phải làm tất cả các bài tập trong các Module ở tuần tương ứng.

Những sinh viên chưa hòan tất phần bài tập tại lớp có trách nhiệm tự làm

tiếp tục ở nhà.

Các bài có dấu (*) là các bài tập nâng cao dành cho sinh viên khá giỏi.

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 2

MỤC LỤC

Module 1: Program and Statement ................................................................................. 3

Module 2: Objects and Primitive data .......................................................................... 22

Module 3: Writing Class ................................................................................................ 29

Module 4: Enhancing Class ........................................................................................... 38

Module 5: Array and Collections .................................................................................. 43

Module 6: Inheritance .................................................................................................... 48

Module 7: Exception – IO Stream ................................................................................. 51

Module 8: Graphic User Interface ................................................................................ 54

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 3

Module 1: Program and Statement

Nội dung kiến thức thực hành:

+ Sử dụng JDK để biên dịch và thực thi chương trình.

+ Sử dụng Eclipse để soạn thảo, biên dịch và thực thi chương trình.

+ Khai báo và sử dụng biến, đối tượng.

+ Sử dụng các cấu trúc điều khiển.

+ Nhận dữ liệu từ đối số hàm main.

Bài tập 1:

Mục đích:

- Download và cài đặt được JDK.

Yêu cầu:

- Hãy tải và cài đặt JDK

Hướng dẫn:

Để biên dịch được các source code Java, máy tính của chúng ta phải có máy Ảo Java

Để có được máy Ảo Java các bạn vào link bên dưới để download bộ JDK

http://www.oracle.com/technetwork/java/javase/downloads/index.html

Sau khi click vào đường link bên trên, danh mục JAVA Kit sẽ hiển thị như hình bên dưới:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 4

chọn JDK để Download, sau khi click chọn Download thì một màn hình mới sẽ được hiển thị ra,

trong màn hình mới này tùy vào cấu hình của máy tính mà chúng ta chọn tập tin Download cho

hợp lý.

Giả sử rằng máy tính của bạn 32bits, bạn sẽ chọn Windows x86 để load. Sau khi load và cài đặt

thành công bạn vào Control Panel để kiểm tra xem máy ảo Java đã được cài đặt vào máy hay

chưa. Nếu có biểu tượng Java như hình bên dưới thì coi như bạn đã cài đặt thành công:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 5

Bài tập 2:

Mục đích:

- Thiết lập được biến môi trường để chạy java ở cơ chế command-line.

Yêu cầu:

- Hãy thiết lập biến môi trường để chạy được java ở cơ chế command -line

Hướng dẫn:

1. Bấm chuột phải vào biểu tượng Computer/ chọn Properties

2. Một cửa sổ mới hiện lên, chúng ta chọn Advanced System Settings

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 6

3. Cửa sổ System Properties sẽ hiển thị ra, chúng ta vào tab Advanced, click chọn button

Environment Variables…Cửa sổ Environment variables sẽ hiển thị như hình bên dưới:

4. Trong mục System variables, click chọn button New.

Mục Variable name, chúng ta nhập vào biến JAVA_HOME

Mục Variable value, chúng ta copy đường dẫn cài đặt JDK vào đây, trong ví dụ này thì JDK

được cài đặt như hình minh họa. Tức là nếu máy của bạn cài JDK ở đâu thì copy paste đường

dẫn đó vào mục này.

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 7

Sau khi chọn OK, bạn quan sát trong vùng System Variables, biến JAVA_HOME và giá trị của

nó sẽ xuất hiện như hình minh họa bên dưới:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 8

5. Bước tiếp theo, các bạn tìm tới biến Path trong mục System variables, click chọn Edit:

Trong mục Variable value, các bạn di chuyển tới cuối, nhập vào các giá trị như hình minh họa :

;%JAVA_HOME%\bin;.;

6. Kiểm tra lại cấu hình có chính xác hay không:

Để kiểm tra xem máy tính của bạn đang cài JDK version bao nhiêu, vào Start/ Run. Hoặc gõ tổ

hợp phím Windows+R để hiển thị cửa sổ Run, trong cửa sổ này các bạn gõ vào lệnh cmd rồi

nhấn phím Enter.

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 9

Gõ java –version để kiểm tra JDK version.

Gõ javac –version để kiểm tra javac version.

Bài tập 3:

Mục đích:

- Viết được chương trình Java bằng notepad và biên dịch bằng command - line

Yêu cầu:

1. Đánh đoạn code sau sử dụng Notepad:

class Welcome

{

public static void main(String []arg)

{

System.out.println("\nMy first Java Program");

}

}

2. Chọn menu File Save As và đánh tên file ‘Welcome.java’ (giống tên của class)

3. Chọn Start Run và đánh lệnh ‘cmd’ vào trong hộp thoại Run

4. Click vào button OK để cửa sổ command prompt xuất hiện. Thay đổi đường dẫn thư mục

lưu file trong bước 3.

5. Biên dịch chương trình sử dụng lệnh ‘javac’

6. Chạy chương trình sử dụng ‘java’

Hướng dẫn:

Bài tập 4:

Mục đích:

- Sử dụng được Eclipse

-

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 10

Yêu cầu:

1.Khởi động Eclipse

Sau khi download và giải nén, các bạn khởi động Eclipse sẽ có giao diện như hình bên dưới:

Để thiết lập Perspective: Vào menu Window / Open Perspective / chọn Other…

Trong cửa sổ Open Perspective các bạn chọn Java sau đó nhấn nút OK.

- Cách tạo Java Project:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 11

-Vào menu File / New / Java Project

Trong mục Project name của cửa sổ New Java Project: Bạn nhập tên project vào mục này,

sau đó nhấn Finish.

Bây giờ ta tiến hành tạo 1 class tên là HelloTeo113. Các bạn bấm chuột phải vào Project / New/

chọn Class (xem hình minh họa bên dưới).

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 12

Cửa sổ New Java Class sẽ xuất hiện như bên dưới:

Nhấn Finish để tạo Class.

Các bạn quan sát trong hàm main, ở đây Ta viết dòng lệnh:

System.out.println("HI...I'm Teo 113");

Hàm này có tác dụng xuất dữ liệu ra màn hình trên những dòng khác nhau.

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 13

Để biên dịch và thực thi chương trình, ta vào menu Run/Run (hoặc nhấn tổ hợp phím Ctrl+ F11)

Sau khi chọn Run, các bạn quan sát cửa sổ Console ở bên dưới, kết quả sẽ được hiển thị ra như

hình minh họa.

- Chú ý: Nếu như trong Project của bạn có chứa Font chữ tiếng việt thì nhớ cấu hình dạng

UTF-8

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 14

Từ menu Project/ chọn Properties (xem hình minh họa bên trên). Sau khi chọn Properties thì cửa

sổ Properties for test sẽ hiển thị ra (ở đây test là tên Project). Các bạn chọn Resource/ chọn

UTF-8 như hình bên dưới, sau đó chọn OK để thiết lập cấu hình.

Mặc định mỗi một Project, Eclipse thiết lập mặc định “Build Automatically”, Nếu trong có trình

biên dịch mà xuất hiện những lỗi mà chúng ta không hiểu biết nguyên nhân vì sao thì ta có thể

vào menu Project/ Clean

Cửa sổ Clean sẽ xuất hiện như hình bên dưới, nếu muốn clean toàn bộ Project thì bạn chọn

“Clean all projects”, còn nếu muốn chỉ clean những project riêng lẻ thì bạn chọn “clean projects

selected below”. Nhấn OK để tiến hành Clean.

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 15

Các bạn để ý rằng, nếu như muốn tự mình Build Project thì hãy unchecked “Build

Automatically”. Lúc này các mục Build All, Build Project…sẽ được hiển thị cho phép chúng ta

chọn lựa chúng.

Một số editing template hay dùng:

Gõ sysout sau đó nhấn Ctrl-Spacebar sẽ cho System.out.println();

Gõ main sau đó nhấn Ctrl-Spacebar sẽ cho public static void main(String[] args) {}

….Để tìm hiểu thêm, vào menu Window->Reference

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 16

Các phím tắt hay dùng: Trong Eclipse, vào menu Help->Key Assitst hoặc nhấn tổ hợp

Ctrl-Shift-L để hiển thị.

1. Thực thi chương trình:

Nhấn chuộ phải lên lớp cần chạy, chọn menu Run As-> Java Application.

2. Mở Project trong Eclipse

Eclipse không hỗ trợ mở project trực tiếp nên bạn không có kiểu “double-click-for –

open” thường thấy, mà bạn phải import project vào workspace như sau:

Vào menu File->Import rồi chọn như hình

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 17

Nhấn Next. Sau đó nhấn nút Browse để tìm đến thư mục chứa project.

Chọn Project cần import rồi nhấn Finish

3. Export file jar tự chạy(executable jar file) trong eclipse

Nhấn chuột phải lên Project cần export, chọn Export.

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 18

Chọn Runnable JAR file như hình. Nhấn Next

Chọn Lauch configuration. Chọn thư mục chứa cũng như tên file jar. Nhấn Finish.

Thực thi jar file dưới dạng command-line:

Nếu Project của bạn ở cơ chế GUI thì bạn có thể mở file jar của bạn bằng Java Plaform

SE library như hình.

Hướng dẫn:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 19

Bài tập 5:

Mục đích:

- Thao tác với toán tử trong Java.

Yêu cầu: import java.util.*;

public class MathOps {

//method to print a string and an int

static void printInt(String s, int i) {

System.out.println(s + " = " + i);

}

//method to print a string and a float

static void printFloat(String s, float f) {

System.out.println(s + " = " + f);

}

public static void main(String[] args) {

Random random = new Random();

int i, j, k;

//Choose value from 1 to 100

j = random.nextInt (100) + 1;

k = random.nextInt (100) + 1;

printInt("j", j);

printInt("k" , k);

i = j + k; printInt("j + k", i);

i = j - k; printInt("j - k", i);

i = j/ k; printInt("j/k", i);

i = j * k; printInt("j * k", i);

i = j % k; printInt("j % k", i);

j %= k; printInt("j %= k" , j);

// Floating-point number tetts

float u, v, w; // also applies to doubles

v = random.nextFloat ();

w = random.nextFloat ();

printFloat("v", v);

printFloat("w", w);

u = v + w; printFloat("v + w", u); // contd…

u = v - w; printFloat("v - w", u);

u = v * w; printFloat("v * w", u);

u = v / w; printFloat("v/w", u);

//The following also works for char, byte, short, int, long, and double

u += v; printFloat("u += v", u);

u -= v; printFloat("u -= v", u);

u *= v; printFloat("u *= v", u);

u /= v; printFloat("u /= v", u);

}

}

Kết quả được xuất ra là gì? Giải thích các toán tử trên.

Hướng dẫn:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 20

Bài tập 6:

Mục đích:

- Thao tác với toán tử tự động tăng giảm

Yêu cầu:

public class AutoInc_DecOps {

public static void main(String[] args) {

int i = 1;

System.out.println("i : " + i);

System.out.println("++i : " + ++i); // Pre-increment

System.out.println("i++ : " + i++); // Post-increment

System.out.println("i : " + i);

System.out.println("--i : " + --i); // Pre-decrement

System.out.println("i-- : " + i--); // Post-decrement

System.out.println("i : " + i);

}

}

Kết quả được xuất ra là gì? Giải thích.

Hướng dẫn:

Bài tập 7:

Mục đích:

- Thao tác với toán tử logic

Yêu cầu:

import java.util.*;

public class Rel_LogOps {

public static void main(String[] args) {

Random random = new Random();

int i = random.nextInt (100);

int j = random.nextInt (100);

// Using Relational Operators

System.out.println("i = " + i);

System.out.println("j = " + j);

System.out.println("i > j is " + (i > j));

System.out.println("i < j is " + (i < j));

System.out.println("i >= j is " + (i >= j));

System.out.println("i <= j is " + (i <= j));

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 21

System.out.println("i == j is " + (i == j));

System.out.println("i != j is " + (i != j));

//Using Logical Operators

System.out.println("(i < 10) && (j<10) is " +

((i<10)&&(j<10)) );

System.out.println("(i < 10) || (j<10) is " +

((i<10)||(j<10)) );

}

}

Kết quả được xuất ra là gì? Giải thích

Hướng dẫn:

Bài tập 8:

Mục đích:

- Ôn luyện lại cấu trúc điều khiển

Yêu cầu:

a) Viết chương trình in ra tổng của 10 số chẵn đầu tiên (sử dụng vòng lặp for hoặc while)

b) Viết chương trình in ra những số lẻ từ 1 đến 99.

c) Viết chương trình xuất ra tổng các số là bội số của 7 (từ 1 đến 100)

d) Viết chương trình in ra tổng 1+2+3….+n với n được nhập từ tham số command line

e) Viết chương trình in ra tổng 1+3+5….+n nếu n là số chẳn, 2+4+6+….n nếu n là số lẻ.

Giá trị n được nhập vào từ tham số command line

f) Viết chương trình in ra giá trị lớn nhất và nhỏ nhất trong một dãy các giá trị user đã nhập

vào từ tham số command line.

g) Viết chương trình giải phương trình bậc 1 với hệ số a, b được nhập vào bởi user từ tham

số command line.

h) Viết chương trình đọc một giá trị nguyên từ bàn phím và in ra số đó là số chẵn, lẻ hoặc

zero

i) Viết chương trình in ra bội số của 3 từ 300 đến 3

j) Viết chương trình in ra số lần kí tự „a‟ xuất hiện trong một chuỗi.

k) Vẽ các hình bên dưới:

Hướng dẫn:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 22

Module 2: Objects and Primitive data

Nội dung kiến thức thực hành:

- Dùng lớp Scanner để nhập dữ liệu

- Sử dụng lớp Math

- Sử dụng lớp String, lớp Character

- Viết hàm (method)

- Viết hàm overload

Bài tập 1:

Mục đích:

- Sử dụng lớp Scanner để nhập số.

- Định dạng xuất.

- Sử dụng lớp Math.

Yêu cầu:

Viết chương trình tính thể tích và diện tích bề mặt của một hình cầu với bán kính r nhập vào

(r>=0). Kết quả chỉ cần lấy 4 chữ số thập phân. Công thức tính:

Thể tích =

Diện tích bề mặt = 4PI*r2

HD: Dùng lớp DecialFormat để định dạng kết quả với 4 chữ số thập phân:

DecialFormat df = new DecialFormat ("0.####");

Hướng dẫn:

Bài tập 2:

Mục đích:

Yêu cầu:

Viết chương trình cho nhập vào kích thước 3 cạnh a, b, c của một tam giác. Tính và

xuất diện tích của tam giác, sử dụng công thức Heron. Trước khi tính phải kiểm tra xem 3

số a, b, c có lập thành một tam giác không (a, b, c lập thành tam giác khi tổng 2 số bất kỳ

luôn lớn hơn số còn lại).

HD: Diện tích = , biết s bằng 1/2 chu vi tam giác.

Hướng dẫn:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 23

Bài tập 3:

Mục đích:

Yêu cầu:

Viết chương trình tính khoảng cách giữa 2 điểm có tọa độ (x1,y1) và (x2,y2), biết công thức để

tính khoảng cách là: distance =

Hướng dẫn:

Bài tập 4:

Mục đích:

+ Nhập chuỗi.

+ Lấy từng kí tự trong chuỗi.

Yêu cầu:

Viết chương trình cho nhập một chuỗi và in ra các ký tự trong chuỗi đó ra màn hình,

mỗi ký tự trên một dòng.

HD: dùng hàm charAt(int)

Hướng dẫn:

Bài tập 5:

Mục đích:

Yêu cầu:

Viết chương trình cho nhập một chuỗi và đếm số khoảng trắng có trong chuỗi đó.

HD: dùng hàm isSpace(char) của lớp Character để kiểm tra khoảng trắng.

Hướng dẫn:

Bài tập 6:

Mục đích:

Yêu cầu:

Viết chương trình cho nhập một chuỗi và in ra các ký tự chữ cái (a-z hoặc A-Z) có trong

chuỗi.

HD: dùng hàm isLetter(char) của lớp Character để kiểm tra chữ cái.

Hướng dẫn:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 24

Bài tập 7:

Mục đích:

- So sánh 2 chuỗi

Yêu cầu:

Viết chương trình cho nhập vào hai chuỗi, kiểm tra xem hai chuỗi có bằng nhau không,

không phân biệt chữ hoa chữ thường.

Hướng dẫn:

Bài tập 8:

Mục đích:

- Nối chuỗi

Yêu cầu:

Viết chương trình cho nhập một chuỗi và một số nguyên n. Chương trình in ra một chuỗi

mới là chuỗi được ghép từ n lần chuỗi đã nhập. Nếu n<2 thì xuất ra chuỗi gốc. Ví dụ nhập “hi”

và 4, kết quả xuất ra “hihihihi”.

Hướng dẫn:

Bài tập 9:

Mục đích:

- Tách chuỗi

Yêu cầu:

Viết chương trình cho nhập vào một chuỗi, tách chuỗi này thành các chuỗi con dựa

vào khoảng trắng, xuất kết quả thành từng dòng.

Ví dụ: nhập s = Xin Chao ban!

Xuất kết quả:

Xin

Chao

ban!

Hướng dẫn:

Bài tập 10 :

Mục đích:

- Viết hàm

Yêu cầu:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 25

(i) Viết một hàm có tên square, hàm có 1 tham số x kiểu số thực. Hàm này tính toán và

trả về bình phương của x.

(ii) Đưa hàm trên vào một chương trình và nó được gọi thực hiện bởi hàm main. Test

hàm vừa viết bằng cách thực hiện vài lần, mỗi lần với các giá trị truyền khác nhau.

Hướng dẫn:

Bài tập 11:

Mục đích:

Yêu cầu:

Viết chương trình trong đó có một hàm sẽ nhận một tham số nguyên, hàm trả về giá trị

false nếu số đó là số chẵn, ngược lại trả về giá trị true.

Test hàm vừa viết bằng cách thực hiện vài lần, mỗi lần với các giá trị truyền khác nhau.

Hướng dẫn:

-

Bài tập 12:

Mục đích:

Yêu cầu:

Viết chương trình giải phương trình bậc hai ax2 + bx + c = 0, viết hàm tính delta.

Hướng dẫn:

Bài tập 13:

Mục đích:

Yêu cầu:

Viết hàm alarm in ra các chuỗi “Alarm!”, mỗi chuỗi trên một dòng. Hàm alarm có

một tham số kiểu số nguyên biểu thị cho số dòng cần in, nếu số này nhỏ hơn 1 thì in ra câu

thông báo lỗi.

Test hàm vừa viết bằng cách thực hiện vài lần, mỗi lần với giá trị truyền khác nhau.

Hướng dẫn:

Bài tập 14:

Mục đích:

Yêu cầu:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 26

Viết hàm sumRange, hàm có hai tham số kiểu số nguyên biểu thị cho khoảng giá trị.

Nếu tham số thứ hai nhỏ hơn tham số thứ nhất thì xuất ra một thông báo lỗi và trả ra giá trị 0,

ngược lại hàm trả về tổng của các giá trị trong khoảng đó.

Test hàm vừa viết bằng cách thực hiện vài lần, mỗi lần với các giá trị truyền khác nhau.

Hướng dẫn:

Bài tập 15:

Mục đích:

Yêu cầu:

Viết hàm countA, hàm này nhận một tham số kiểu String và trả về số lần xuất hiện ký tự

„A‟ trong chuỗi đó.

Test hàm vừa viết bằng cách thực hiện vài lần, mỗi lần với giá trị truyền khác nhau.

Hướng dẫn:

Bài tập 16:

Mục đích:

- Viết hàm overload.

Yêu cầu:

(i) Viết hàm average, hàm có hai tham số kiểu số nguyên, hàm trả về giá trị trung bình của hai số đó.

(ii) Overload hàm average với ba tham số nguyên, hàm trả về giá trị trung bình của ba số đó.

Test các hàm vừa viết bằng cách thực hiện vài lần, mỗi lần với các giá trị truyền khác nhau.

Hướng dẫn:

Bài tập 17:

Mục đích:

Yêu cầu:

Viết hàm multiConcat, hàm nhận một tham số kiểu String và một số nguyên n, hàm

trả về một chuỗi mới là chuỗi được ghép từ n lần chuỗi trong tham số. Nếu n<2 thì xuất ra

chuỗi gốc.

Ví dụ gọi hàm multiConcat(“hi”,4) kết quả xuất ra “hihihihi”. Test hàm vừa viết

bằng cách thực hiện vài lần, mỗi lần với các giá trị truyền cho hàm khác nhau.

Hướng dẫn:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 27

Bài tập 18:

Mục đích:

Yêu cầu:

Viết chương trình xuất ra dãy số Fibonacci, Yêu cầu phải viết 2 phương thức. Phương

thức 1 dùng để trả về số Fibonacci tại vị trí thứ k bất kỳ. Phương thức 2 dùng để xuất dãy số

Fibonacci từ 1n.

Dãy Fibonacci : 1 1 2 3 5 8 13 21 34 …

- Số Fib thứ k = (số Fib thứ k-1) + (số Fib thứ k-2), tức là 13 =8+5, 21=13+8

- 2 số Fib đầu tiên trong dãy luôn luôn là 1

Hướng dẫn:

Bài tập 19:

Mục đích:

Yêu cầu:

Hãy viết phương thức tên Panlyndrome nhận 1 tham số có kiểu String và trả về true nếu

tham số là chuỗi panlyndrome (chuỗi panlyndrome là chuỗi có chuỗi đảo ngược bằng chính nó,

ví dụ madam)

Hướng dẫn:

public static boolean isPanlyndrome(String s)

{

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

{

if(s.charAt(i)!=s.charAt(s.length()-i-1))

return false;

}

return true;

}

Bài tập 20:

Mục đích:

Yêu cầu:

Viết một hàm đặt tên là NegativeNumberInStrings(String str). Hàm này có đối số

truyền vào là một chuỗi bất kỳ, Hãy viết lệnh để xuất ra các số nguyên âm trong chuỗi.

Ví dụ: Nếu nhập vào chuỗi “abc-5xyz-12k9l--p” thì hàm phải xuất ra được 2 số nguyên âm đó

là -5 và -12

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 28

Hướng dẫn:

Bài tập 21:

Mục đích:

Yêu cầu:

Viết chương trình chơi game đoán số, mô tả game như sau:

- Khởi tạo ban đầu người chơi có 5 điểm

- Máy tự động Random ngẫu nhiên 1 số từ 0->5 (số này sẽ không xuất ra, chỉ dùng để so

sánh với số số mà người chơi đoán

- Người chơi đoán số, Nếu đoán đúng thì + 1 điểm vào điểm khởi tạo, ngược lại -1 điểm (Chú

ý là có xuất thông báo khi người chơi đoán trúng hay đoán sai)

- Khi người chơi không còn điểm nào thì thông báo Game Over

- Nếu người chơi tích lũy được 10 điểm thì thông báo Congratulations! You Win!

Hướng dẫn:

Random rd=new Random();

int so=rd.nextInt(6);

Bài tập 22:

Mục đích:

Yêu cầu:

Viết hàm để xuất ra 5 hình bên dưới (Viết 5 hàm riêng biệt, mỗi hàm chứa 2 vòng lặp)

Hướng dẫn:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 29

Module 3: Writing Class

Nội dung kiến thức thực hành:

- Khai báo và sử dụng lớp

- Viết các lớp với mối quan hệ composition

Bài tập 1:

Mục đích:

- Tìm hiểu cách viết lớp trong Java.

Yêu cầu:

Cho lớp Distance như sau:

Tìm hiểu lớp này và giải thích kết quả. Nếu chương trình bị lỗi, hãy sửa lỗi.

Hướng dẫn:

-

Bài tập 2:

Mục đích:

- Biết cách viết và sử dụng overloaded constructors.

Yêu cầu:

- Cho các lớp sau, hãy tìm hiểu và giải thích cách sử dụng lớp Time. Cho biết kết quả của

chương trình là gì?

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 30

// Time.java

import java.text.DecimalFormat;

public class Time {

private int hour; // 0 - 23

private int minute; // 0 - 59

private int second; // 0 - 59

// Time constructor initializes each instance variable to zero. Ensures that Time object

// starts in a consistent state.

public Time() {

setTime( 0, 0, 0 );

}

// Time constructor: hour supplied, minute and second defaulted to 0

public Time( int h ) {

setTime( h, 0, 0 );

}

// Time constructor: hour and minute supplied, second defaulted to 0

public Time( int h, int m ) {

setTime( h, m, 0 );

}

// Time constructor: hour, minute and second supplied

public Time( int h, int m, int s ) {

setTime( h, m, s );

}

// Time constructor: another Time object supplied

public Time( Time time ) {

setTime( time.hour, time.minute, time.second );

}

// Set a new time value using universal time. Perform

// validity checks on data. Set invalid values to zero.

private void setTime( int h, int m, int s ) {

// hour = ( ( h >= 0 && h < 24 ) ? h : 0 );

if (( h >= 0 && h < 24 ))

hour = h;

else hour =0;

minute = ( ( m >= 0 && m < 60 ) ? m : 0 );

second = ( ( s >= 0 && s < 60 ) ? s : 0 );

}

// convert to String in universal-time format

public String toUniversalString() {

DecimalFormat twoDigits = new DecimalFormat( "00" );

return twoDigits.format( hour ) + ":" + twoDigits.format( minute ) + ":" +

twoDigits.format( second );

}

// convert to String in standard-time format

public String toString() {

DecimalFormat twoDigits = new DecimalFormat( "00" );

return ( (hour == 12 || hour == 0) ? 12 : hour % 12 ) + ":" + twoDigits.format( minute ) +

":" + twoDigits.format( second ) + ( hour < 12 ? " AM" : " PM" );

}

}

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 31

// TimeTest.java

import javax.swing.*;

public class TimeTest {

// test constructors of class Time2

public static void main( String args[] ) {

Time t1, t2, t3, t4, t5, t6;

t1 = new Time(); // 00:00:00

t2 = new Time( 2 ); // 02:00:00

t3 = new Time( 21, 34 ); // 21:34:00

t4 = new Time( 12, 25, 42 ); // 12:25:42

t5 = new Time( 27, 74, 99 ); // 00:00:00

t6 = new Time( t4 ); // 12:25:42

String output="";

output = "Constructed with: " + "\nt1: all arguments defaulted" + "\n " + t1.toUniversalString() + "\n " +

t1.toString();

output += "\nt2: hour specified; minute and " + "second defaulted" + "\n " + t2.toUniversalString() + "\n

" + t2.toString();

output += "\nt3: hour and minute specified; " + "second defaulted" + "\n " + t3.toUniversalString() + "\n

" + t3.toString();

output += "\nt4: hour, minute, and second specified" + "\n " + t4.toUniversalString() + "\n " +

t4.toString();

output += "\nt5: all invalid values specified" + "\n " + t5.toUniversalString() + "\n " + t5.toString();

output += "\nt6: Time2 object t4 specified" + "\n " + t6.toUniversalString() + "\n " + t6.toString();

JOptionPane.showMessageDialog( null, output, "Demonstrating Overloaded Constructors",

JOptionPane.INFORMATION_MESSAGE );

System.exit(0);

}

}

Hướng dẫn:

Bài tập 3:

Mục đích:

- Biết cách viết và sử dụng lớp thành phần (composition class).

Yêu cầu:

- Cho các lớp sau, hãy tìm hiểu và giải thích cách sử dụng lớp Date, lớp Employee. Cho

biết kết quả của chương trình là gì?

// Date.java

public class Date {

private int month; // 1-12

private int day; // 1-31 based on month

private int year; // any year

public Date( int theMonth, int theDay, int theYear ) {

if ( theMonth > 0 && theMonth <= 12 ) // validate month

month = theMonth;

else {

month = 1;

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 32

System.out.println( "Month " + theMonth + " invalid. Set to month 1." );

}

year = theYear; // could validate year

day = checkDay( theDay ); // validate day

System.out.println( "Date object constructor for date " + toString() );

}

private int checkDay( int testDay ) {

int daysPerMonth[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

// check if day in range for month

if ( testDay > 0 && testDay <= daysPerMonth[ month ] )

return testDay;

// check for leap year

if ( month == 2 && testDay == 29 && ( year % 400 == 0 ||

( year % 4 == 0 && year % 100 != 0 ) ) )

return testDay;

System.out.println( "Day " + testDay + " invalid. Set to day 1." );

return 1; // leave object in consistent state

}

// Create a String of the form month/day/year

public String toDateString() {

return month + "/" + day + "/" + year;

}

}

// Employee.java

public class Employee {

private String firstName;

private String lastName;

private Date birthDate;

private Date hireDate;

// constructor to initialize name, birth date and hire date

public Employee() {

firstName=””;

lastName=””;

birthDate=new Date(0,0,0);

hireDate=new Date(0,0,0);

}

public Employee( String first, String last, Date dateOfBirth, Date dateOfHire) {

firstName = first;

lastName = last;

birthDate = dateOfBirth;

hireDate = dateOfHire;

}

// convert Employee to String format

public String toEmployeeString() {

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 33

return lastName + ", " + firstName + " Hired: " + hireDate.toDateString() + " Birthday: " +

birthDate.toDateString();

}

}

//EmployeeTest.java

import javax.swing.JOptionPane;

public class EmployeeTest {

public static void main( String args[] ) {

Date birth = new Date( 7, 24, 1949 );

Date hire = new Date( 3, 12, 1988 );

Employee employee = new Employee( "Bob", "Jones", birth, hire );

JOptionPane.showMessageDialog( null, employee.toEmployeeString(),

"Testing Class Employee", JOptionPane.INFORMATION_MESSAGE );

System.exit( 0 );

}

}

Hướng dẫn:

-

Bài tập 4:

Mục đích:

Yêu cầu:

Viết lớp HinhTron dùng để tính diện tích và chu vi hình tròn từ bán kính. Viết hàm main

để test lớp này.

Hướng dẫn:

Bài tập 5:

Mục đích:

-

Yêu cầu:

(i) Xây dựng lớp CHinhTamGiac như sau:

CHinhTamGiac

- ma : int

- mb : int

- mc : int

+ CHinhTamGiac()

+ CHinhTamGiac(a: int, b: int, c: int)

+ getCanhA() : int

+ setCanhA(v : int) : void

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 34

+ getCanhB() : int

+ setCanhB(v : int) : void

+ getCanhC() : int

+ setCanhC(v : int) : void

+ laTamGiac() : boolean

+ laTamGiac(int, int, int) : boolean

+ getChuVi() : int

+ getDienTich() : double

Trong đó:

ộc tính ma, mb, mc là ba cạnh của tam giác.

ởi tạo CHinhTamGiac(int, int, int): yêu cầu kiểm tra:

o nếu giá trị truyền có số âm thì thông báo và gán thuộc tính tương ứng bằng 0;

o nếu 3 giá trị truyền vào không lập thành một hình tam giác thì thông báo "Không

phải hình tam giác" và gán 3 thuộc tính bằng 0.

HD : ba giá trị lập thành một hình tam giác khi và chỉ khi tổng hai cạnh bất kỳ luôn lớn

hơn cạnh còn lại.

setCanhA, setCanhB, setCanhC cũng yêu cầu phải kiểm tra giá trị gán có là

số dương và lập thành tam giác hay không, nếu không thì không gán (giữ lại giá trị cũ).

getChuVi(), getDienTich(): tính chu vi và diện tích của tam giác.

laTamGiac(): trả về giá trị true khi ba giá trị ma, mb, mc lập thành một hình tam

giác, ngược lại trả về giá trị false.

laTamGiac(int, int, int): trả về giá trị true khi ba giá trị a, b, c lập thành một

hình tam giác, ngược lại trả về giá trị false.

(ii) Viết hàm main để kiểm tra lớp CHinhTamGiac theo yêu cầu sau:

Cho nhập vào 3 giá trị số nguyên và khởi tạo hình tam giác có các cạnh ứng với 3 giá trị

này, nếu 3 giá trị này không lập thành tam giác thì thông báo, ngược lại thì tính và xuất ra chu vi

và diện tích của nó.

Hướng dẫn:

Bài tập 6:

Mục đích:

-

Yêu cầu:

(i) Xây dựng lớp NhanVien như sau:

NhanVien

- maNV : String

- soSP : int

+ NhanVien()

+ NhanVien (ma: String, sp : int)

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 35

+ getMaNV() : String

+ setMaNV(ma : String) : void

+ getSoSP() : int

+ setSoSP(sp : int) : void

+ coVuotChuan() : boolean

+ getTongKet() : String

+ getLuong(): double

+ XuatTieuDe() : static void

+ toString() : String

rong 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.

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.

getTongKet() : trả về chữ "Vượt" khi soSP > 500, ngược lại để trống (có thể sử

dụng hàm coVuotChuan() để kiểm tra).

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.

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.

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.

(ii) 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.

Hướng dẫn:

Bài tập 7:

Mục đích:

Yêu cầu:

(i) Xây dựng lớp CNhanVien, biết:

ần lượt là các thuộc tính họ, tên và số sản phẩm của nhân viên.

ết hàm khởi tạo CNhanVien(String, String, int), hàm này sẽ khởi tạo họ, tên, số sản

phẩm của nhân viên; hàm phải kiểm tra số sản phẩm là số lớn hơn hoặc bằng 0, nếu là số

âm thì gán giá trị cho mSoSP bằng 0.

ết các hàm lấy và gán giá trị cho thuộc tính của lớp (các hàm get/set).

ết hàm getLuong() để tính lương cho nhân viên, lương = số sản phẩm * đơn giá, với

đơn giá tùy thuộc vào số sản phẩm như sau:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 36

Số sản phẩm

Đơn giá

1 - 199

0.5

200 - 399

0.55

400 - 599

0.6

600 trở lên

0.65

ết hàm LonHon(CNhanVien nv2): hàm này trả về giá trị true khi số sản phẩm (mSoSP)

lớn hơn số sản phẩm của nv2, ngược lại trả về false

(ii) Viết hàm main sử dụng lớp CNhanVien theo yêu cầu sau:

Cho người dùng nhập vào 2 nhân viên, mỗi nhân viên nhập vào họ, tên, số sản phẩm của

họ. Hãy tính và xuất ra lương của từng nhân viên. So sánh và xuất ra thông báo nhân viên nào

có số sản phẩm nhiều hơn và nhiều hơn bao nhiêu. Dùng 2 cách so sánh: dùng hàm LonHon và

không dùng hàm LonHon.

Hướng dẫn:

Bài tập 8:

Mục đích:

-

Yêu cầu:

Xây dựng lớp SinhVien 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:

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

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

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

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

Hướng dẫn:

Bài tập 9:

Mục đích:

-

Yêu cầu:

Xây dựng lớp NhanVien, biết cấu trúc của một nhân viên như sau:

- Mã NV: kiểu số nguyên

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 37

- Họ tên: kiểu chuỗi.

- Địa chỉ: kiểu chuỗi.

- CBQL: kiểu logic, có giá trị true nếu nhân viên này là cán bộ quản lý.

Viết hàm main cho phép khởi tạo một số đối tượng thuộc lớp NhanVien, sau đó in ra mã, họ tên

của các nhân viên là cán bộ quản lý.

Hướng dẫn:

Bài tập 10:

Mục đích:

- Viết các lớp với mối quan hệ cấu thành, tập hợp (aggregation)

Yêu cầu:

Cho lược đồ các lớp như sau :

Hãy cài đặt theo mô hình này. Viết hàm main cho nhập vào một số Student và xuất ra các thông

tin đó.

Hướng dẫn:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 38

Module 4: Enhancing Class

Nội dung kiến thức thực hành:

- Cách truyền tham số trong Java

- Cách sử dụng từ khóa static

- Viết Interface và thực thi

Bài 1:

Mục đích:

- Hiểu cách truyền tham số cho hàm trong Java.

Yêu cầu:

Cho các lớp dưới đây, cho biết kết quả chương trình và giải thích.

// Num.java

public class Num

{

private int value;

public Num (int update)

{

value = update;

}

public void setValue (int update)

{

value = update;

}

public String toString ()

{

return value + "";

}

}

// ParameterTester.java

public class ParameterTester

{

public static void changeValues (int f1, Num f2, Num f3)

{

System.out.println ("Before changing the values:");

System.out.println ("f1\tf2\tf3");

System.out.println (f1 + "\t" + f2 + "\t" + f3 + "\n");

f1 = 999;

f2.setValue (888);

f3 = new Num (777);

System.out.println ("After changing the values:");

System.out.println ("f1\tf2\tf3");

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 39

System.out.println (f1 + "\t" + f2 + "\t" + f3 + "\n");

}

public static void main (String[] args)

{

int a1 = 111;

Num a2 = new Num (222);

Num a3 = new Num (333);

System.out.println ("Before calling changeValues:");

System.out.println ("a1\t a2\t a3");

System.out.println (a1 + "\t" + a2 + "\t" + a3 + "\n");

changeValues (a1, a2, a3); System.out.println ("After calling changeValues:");

System.out.println ("a1\t a2\t a3");

System.out.println (a1 + "\t" + a2 + "\t" + a3 + "\n");

}

}

Hướng dẫn:

Bài tập 2:

Mục đích:

- Hiểu cách sử dụng thuộc tính và hàm static.

Yêu cầu:

Cho các lớp dưới đây, cho biết kết quả chương trình và giải thích.

// NhanSu.java

class HoSo {

static int soNguoi;

String hoTen;

HoSo( String ht ){

hoTen = ht;

soNguoi++;

}

static void tongKet(){

System.out.println( "Ho khau nay co " + soNguoi +" nguoi" );

}

void xuatHoTen(){

System.out.println( hoTen );

}

}

public class NhanSu{

public static void main( String argv[] ){

HoSo n1 = new HoSo( "Tran Van Lang" );

HoSo n2 = new HoSo( "Le Thi Binh Minh" );

HoSo n3 = new HoSo( "Tran Thuy Thuc Trinh" );

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 40

HoSo n4 = new HoSo( "Tran Thuy Anh Quynh" );

HoSo.tongKet();

n1.xuatHoTen();

n2.xuatHoTen();

n3.xuatHoTen();

n4.xuatHoTen();

}

}

Hướng dẫn:

Bài tập 3:

Mục đích:

- Tìm hiểu cách viết và sử dụng interface.

Yêu cầu:

Cài đặt các lớp theo mô hình dưới đây:

Hướng dẫn:

Bài tập 4:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 41

Mục đích:

- Tìm hiểu cách viết và sử dụng interface

Yêu cầu:

- Thiết kế class theo mô hình bên dưới, sinh viên lựa chọn nội dung thích hợp cho từng

phương thức cụ thể.

Hướng dẫn:

Bài tập 5:

Mục đích:

- Tìm hiểu cách viết abstract class

Yêu cầu:

- Hãy thiết kế class hợp lý theo mô hình UML dưới đây, dấu “-” là private, dấu “#” là

protected, dấu “+” là public

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 42

Viết thêm class TestMain để kiểm tra class Staff, phương thức payday() sẽ xuất toàn bộ

bảng lương chi tiết cho mỗi nhân viên tại thời điểm tính lương, cách tính lương cho mỗi nhân

viên là khác nhau dựa vào các thuộc tính được mô tả trong mỗi class.

Hướng dẫn:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 43

Module 5: Array and Collections

Nội dung kiến thức thực hành:

- Thao tác trên mảng dữ liệu cơ sở

- Thao tác trên mảng đối tượng

- Viết lớp tập hợp sử dụng mảng và ArrayList

- Sắp xếp mảng đối tượng với Comparable interface

Bài 1:

Mục đích:

- Sử dụng mảng.

Yêu cầu:

Viết chương trình cho nhập mảng n số nguyên với các giá trị ngẫu nhiên. Xuất tổng, giá

trị nhỏ nhất của mảng. Sắp xếp mảng.

Yêu cầu viết hàm để xử lý mảng.

Hướng dẫn:

-

Bài tập 2:

Mục đích:

Yêu cầu:

Làm lại bài tập 1 bằng cách viết lớp RandomArray để xử lý mảng.

HD: lớp RandomArray có 2 thuộc tính là mảng số nguyên và vị trí hiện hành, trong đó viết hàm

thêm 1 phần tử vào mảng tại vị trí hiện hành, hàm in mảng, hàm tính tổng mảng, hàm tìm giá trị

nhỏ nhất, hàm sắp xếp mảng.

Hướng dẫn:

-

Bài tập 3:

Mục đích:

-

Yêu cầu:

Làm lại bài tập 2 bằng cách sử dụng ArrayList thay cho mảng thông thường.

HD: lớp RandomArray chỉ có 1 thuộc tính là mảng số nguyên.

Hướng dẫn:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 44

Bài tập 4:

Mục đích:

Yêu cầu:

Thao tác trên mảng số nguyên, viết hàm để thực hiện các yêu cầu sau:

- Nhập / xuất mảng nguyên bất kỳ

- Tìm kiếm giá trị bất kỳ nhập vào từ bàn phím

- Xuất tất cả các số nguyên tố trong mảng

- Sắp xếp mảng: BubbleSort, SelectionSort, InsertionSort, QuickSort

- Xóa một giá trị bất kỳ trong mảng

- Kiểm tra mảng có đối xứng hay không

Hướng dẫn:

Bài tập 5:

Mục đích:

- Viết và sử dụng lớp mảng đối tượng.

Yêu cầu:

(i) Viết lớp Circle, biết lớp có một thuộc tính là radius (bán kính). Viết hàm getArea() tính diện

tích hình tròn, và hàm toString() trả về chuỗi gồm bán kính và diện tích hình tròn. Kiểm tra lớp

Circle.

(ii) Viết lớp CircleCollection, trong đó viết các hàm:

+ addCircle: thêm 1 hình tròn vào mảng;

+getSize: lấy số lượng hình tròn trong mảng;

+getCircle/setCircle: lấy/gán hình tròn tại vị trí xác định trong mảng;

+toString: trả về thông tin của tập các hình tròn trong mảng;

+ Hàm tính tổng diện tích hình tròn;

+ Hàm tìm diện tích lớn nhất;

+ Hàm lấy hình tròn có diện tích nhỏ nhất.

(iii) Viết chương trình tạo một mảng N hình tròn, với bán kính được phát sinh ngẫu nhiên. Thực

hiện các yêu cầu sau:

- Xuất thông tin của các hình tròn đã nhập.

- Xuất tổng diện tích của chúng.

- Xuất diện tích lớn nhất.

- Xuất thông tin hình tròn có diện tích nhỏ nhất.

Hướng dẫn:

Bài tập 6:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 45

Mục đích:

- Sử dụng ArrayList.

Yêu cầu:

Sửa lại bài ví dụ CDColection.java trong giáo trình: sử dụng ArrayList thay cho mảng

thông thường.

Hướng dẫn:

-

Bài tập 7:

Mục đích:

Yêu cầu:

(i) Sử dụng lớp NhanVien đã viết trong bài tập 6 Module 3, viết lớp DanhSachNhanVien với

các yêu cầu sau:

1. Thêm một nhân viên vào danh sách (mỗi nhân viên cho nhập vào mã nhân viên và số

sản phẩm).

2. Lấy thông tin của tất cả nhân viên, xuất dạng bảng với các cột: mã nhân viên, số sản

phẩm, lương, tổng kết.

3. Lấy tổng số nhân viên.

4. Lấy thông tin của các nhân viên có số sản phẩm vượt chuẩn.

5. Đếm số nhân viên có số sản phẩm không vượt chuẩn.

6. Tính tổng lương của các nhân viên vượt chuẩn.

7. Lấy nhân viên có số sản phẩm ít nhất.

8. Lấy nhân viên có lương cao nhất.

9. Lấy nhân viên không vượt chuẩn có lương cao nhất.

10. Lấy tổng lương của tất cả nhân viên.

11. Tìm kiếm nhân viên theo mã nhập vào, trả về nhân viên tìm thấy.

12. Sắp xếp mảng nhân viên tăng dần theo số sản phẩm.

13. Xóa 1 nhân viên tại vị trí nhập vào.

(ii) Viết chương trình cho nhập mảng n nhân viên và thực hiện các yêu cầu trong (i)

Chú ý : tùy chọn sử dụng ArrayList thay hoặc mảng thông thường.

Hướng dẫn:

Bài tập 8:

Mục đích:

Yêu cầu:

- Viết chương trình cho nhập vào danh sách sinh viên của một trường và xuất danh sách đó

theo từng lớp. Biết rằng trường có nhiều lớp và một lớp có nhiều sinh viên. Lớp gồm các

thông tin: mã lớp, tên lớp, sĩ số. Sinh viên gồm các thông tin: mã sinh viên, họ tên, nơi

sinh, mã lớp.

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 46

Hướng dẫn:

Bài tập 9:

Mục đích:

Yêu cầu:

Viết chương trình quản lý bán hàng được mô tả như bên dưới, yêu cầu dùng ArrayList :

Mỗi một danh mục sản phẩm sẽ có nhiều sản phẩm, thông tin danh mục sản phẩm gồm: Mã

danh mục, tên danh mục. Thông tin sản phẩm gồm: mã sản phẩm, tên sản phẩm, giá cả, xuất xứ.

- Viết hàm cho phép thông tin danh mục sản phẩm và sản phẩm

- Xuất danh sản phẩm thuộc một danh mục bất kỳ nhập vào từ bàn phím

- Cho phép cập nhật thông tin sản phẩm

- Xóa sản phẩm bất kỳ trong danh mục

- Thống kê tổng giá trị của các mặt hàng

- Liệt kê các sản phẩm có xuất xứ từ trung quốc

Hướng dẫn:

Bài tập 10:

Mục đích:

Yêu cầu:

Viết chương trình cho phép nhập liên tục các giá trị trong khoảng từ 1100. Sau khi kết

thúc quá trình nhập dữ liệu thì xuất thông tin như yêu cầu bên dưới:

Hướng dẫn:

- Nếu người sử dụng nhập 4,5,4,3, 100,91. Thì 110 sẽ xuất hiện 4 dấu *. 91100 xuất

hiện 2 dấu *. Các vùng còn lại để trống.

Bài tập 11:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 47

Mục đích:

Lưu đối tượng: Object Serializable

Yêu cầu:

- Tất cả các class phải implements Serializable:

o public class Sanpham implements Serializable{…}

o public class DanhMucSanPham implements Serializable{…}

- Viết một class MyFile có 2 phương thức:

o Lưu đối tượng:

public static void luuDoiTuong(Object obj, String fileName)

{

try {

FileOutputStream fOut=new FileOutputStream(fileName);

ObjectOutputStream out=new ObjectOutputStream(fOut);

out.writeObject(obj);

out.close();

}

catch(Exception ex)

{

ex.printStackTrace();

}

}

o Đọc đối tượng

public static Object docDoiTuong(String fileName)

{

try {

FileInputStream fIn=new FileInputStream(fileName);

ObjectInputStream in=new ObjectInputStream(fIn);

Object o=in.readObject();

in.close();

return o;

}

catch(Exception ex)

{

ex.printStackTrace();

}

return null;

}

- Trong testMain:

DanhMucSanPham dsDienTu=(DanhMucSanPham )MyFile.docDoiTuong("luuluu.data");

if(dsDienTu!=null)

System.out.println(dsDienTu);

MyFile.luuDoiTuong(dsDienTu, "luuluu.data");

Hướng dẫn:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 48

Module 6: Inheritance

Nội dung kiến thức thực hành:

- Tạo lớp con kế thừa từ lớp cha .

- Đa hình thông qua kế thừa

Bài 1:

Mục đích:

- Cách viết lớp kế thừa.

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) {

numOfDoors = d;

super(w);

}

public void drive() {

System.out.println(“Driving a car”);

}

}

a. Bổ sung các hàm get/set cho các lớp.

b. Lớp Car bị lỗi biên dịch. Hãy sửa lỗi.

c. Giả sử lớp Car được sửa lỗi, kết quả chương trình là gì khi viết:

TH1:

Car audi = new Car();

Car.drive();

TH2:

Car p = new Car(2, 4);

p.drive();

Hướng dẫn:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 49

Bài tập 2:

Mục đích:

Yêu cầu:

- Cài đặt cho lược đồ sau:

Trong đó:

+ 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ẻ.

Hướng dẫn:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 50

Bài tập 3:

Mục đích:

Yêu cầu:

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.

Hướng dẫn:

Bài tập 4:

Mục đích:

- Viết đa hình thông qua kế thừa

Yêu cầu:

a. Viết lớp Shape, lớp này chỉ có một hàm là draw() không có tham số và không trả về giá trị,

chỉ xuất ra dòng chữ “Drawing a Shape”.

b. Viết lớp Rectangle kế thừa từ lớp Shape. Thêm vào lớp Rectangle hai thuộc tính là chiều dài

và chiều rộng (số nguyên). Viết các hàm khởi tạo và các hàm get/set cho lớp này, chú ý giá trị

gán cho 2 thuộc tính nằm trong [1, 15].

Trong lớp Rectangle, viết lại hàm draw() của lớp Shape để vẽ ra hình chữ nhật bởi các dấu *,

với số lượng dấu * mỗi cạnh tùy thuộc vào các thuộc tính chiều dài và chiều rộng. Ví dụ thuộc

tính chiều dài và chiều rộng lần lượt là 7 và 3 thì hàm draw() vẽ được hình:

*******

* *

******* c. Viết lớp RightTriangle kế thừa từ lớp Shape. Thêm vào lớp RightTriangle một thuộc tính là

cạnh vuông (số nguyên). Viết các hàm khởi tạo và các hàm get/set cho lớp này, chú ý giá trị gán

cho thuộc tính nằm trong [1, 20].

Trong lớp RightTriangle, viết lại hàm draw() của lớp Shape để vẽ ra hình tam giác vuông bởi

các dấu *, với số lượng dấu * mỗi cạnh tùy thuộc vào các thuộc tính cạnh vuông. Ví dụ thuộc

tính cạnh vuông là 4 thì hàm draw() vẽ được hình:

*

**

***

**** d. Viết lớp Artist, lớp này có hàm drawShape(), hàm này không trả về giá trị và có một tham

số kiểu Shape, trong hàm này gọi hàm draw() để vẽ hình tùy theo tham số Shape truyền vào.

e. Viết lớp ArtistDemo, lớp này chứa hàm main(): khai báo biến Shape; dùng biến này để khởi

tạo cho đối tượng Rectangle với chiều dài là 8, chiều rộng là 4; tạo đối tượng Artist để vẽ hình

chữ nhật này; dùng lại biến Shape để khởi tạo cho đối tượng RightTriangle với cạnh là 20,

dùng đối tượng Artist để vẽ hình tam giác này. Viết lại hàm main này với các giá trị chiều dài,

chiều rộng, cạnh vuông do người dùng nhập vào.

Hướng dẫn:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 51

Module 7: Exception – IO Stream

Nội dung kiến thức thực hành:

- Xử lý dữ liệu với try-catch

- Ném ngoại lệ

- Tạo lớp ngoại lệ riêng

- Lưu trữ đối tượng vào tập tin

Bài 1:

Mục đích:

- Kiểm tra dữ liệu nhập của người dùng bằng cách sử dụng try-catch.

Yêu cầu:

Viết chương trình cho nhập vào 2 số nguyên, xuất kết quả phép chia 2 số này. Yêu cầu

kiểm tra việc nhập số (không được nhập chữ), phép chia cho 0.

Hướng dẫn:

Bài tập 2:

Mục đích:

- Kiểm tra dữ liệu nhập của người dùng bằng cách viết lớp xử lý ngoại lệ.

Yêu cầu:

- Làm lại bài 1 với yêu cầu kiểm tra việc nhập 2 số phải là số dương, viết lớp xử lý riêng.

Hướng dẫn:

Bài tập 3:

Mục đích:

- Kiểm tra dữ liệu nhập của người dùng bằng cách viết lớp xử lý ngoại lệ.

Yêu cầu:

- Viết lớp xử lý ngoại lệ StringTooLongException, lớp này giúp thông báo 1 chuỗi nào

đó có quá nhiều ký tự.

- Viết hàm main, cho người dùng nhập vào từng chuỗi cho đến khi người dùng nhập

“DONE”. Khi một chuỗi được nhập vào, cần kiểm tra xem chuỗi đó có vượt quá 20 ký tự

không, nếu vượt thì chương trình thông báo cho người dùng biết và kết thúc chương

trình. Yêu cầu sử dụng lớp StringTooLongException để xử lý lỗi này.

Hướng dẫn:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 52

Bài tập 4:

Mục đích:

- Kiểm tra dữ liệu nhập của người dùng bằng cách viết lớp xử lý ngoại lệ.

Yêu cầu:

- Làm lại bài 3 với yêu cầu nếu người dùng nhập vào một chuỗi vượt quá 20 ký tự thì

chương trình thông báo lỗi và vẫn tiếp tục thực hiện.

Hướng dẫn:

-

Bài tập 5:

Mục đích:

Yêu cầu:

- Hãy tạo một class tên là OutOfRangeException để kiểm tra việc nhập dữ liệu của người

sử dụng. Sinh viên hãy tạo thêm một class để sử dụng OutOfRangException. Ví dụ như

yêu cầu nhập vào 1 số n có giá trị từ -113 tới 113 từ bàn phím, nếu không nằm trong

đoạn giá trị này thì dùng OutOfRangException để thông báo lỗi.

Hướng dẫn:

-

Bài tập 6:

Mục đích:

- Thực hành IOException

Yêu cầu:

a) Viết hàm cho phép lưu tập tin dưới dạng text file, yêu cầu khởi tạo là 10 dòng, mỗi dòng

sẽ có 10 số ngẫu nhiên cách nhau bởi dấu “;”. Xem hình minh họa

b) Tiếp theo viết hàm cho phép đọc tập tin từ câu a, xuất ra tổng giá trị của các phần tử trên

mỗi dòng.

Ghi chú: Trường hợp này có thể phát sinh lỗi IOException.

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 53

Hướng dẫn:

Sinh viên xem cách lưu tập tin dưới dạng TextFile và cách đọc dữ liệu lên. Từ ví dụ này hãy kết

hợp với StringTokenizer hoặc hàm split để tiến hành tách số trong quá trình đọc từng dòng dữ

liệu, cộng dồn các giá trị này là chúng ta sẽ có tổng giá trị các phần tử ngẫu nhiên trên mỗi

dòng.

Hàm lưu TextFile: public static void luuTextFile(String filename)

{

try {

FileOutputStream fOut=new FileOutputStream(filename);

PrintWriter print=new PrintWriter(fOut, true);

Random rd=new Random();

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

{

String line="";

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

{

line+=rd.nextInt(100)+";";

}

print.println(line);

}

print.close();

fOut.close();

}

catch (FileNotFoundException e)

{

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

Hàm đọc TextFile:

public static void docTextFile(String filename)

{

try {

FileInputStream fIn=new FileInputStream(filename);

Scanner sc=new Scanner(fIn);

while(sc.hasNextLine())

{

System.out.println(sc.nextLine());

}

fIn.close();

sc.close();

}

catch(IOException ex)

{

ex.printStackTrace();

}

}

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 54

Module 8: Graphic User Interface

Nội dung kiến thức thực hành:

- Mục đích của Module này giúp các sinh viên hiểu được LayoutManager, Common

Control, Event, DialogBox, Advanced Control

Bài tập 1:

Mục đích:

- Thực hành cách hiển thị cửa sổ Windows trong Java

Yêu cầu:

Hãy hiển thị cửa sổ trên, yêu cầu viết class kế thừa từ JFrame

Hướng dẫn:

Giải thích:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 55

Bài tập 2:

Mục đích:

- Thực hành về FlowLayout

Yêu cầu:

FlowLayout cho phép add các control trên cùng một dòng, khi nào hết chỗ chứa nó sẽ tự

động xuống dòng, ta cũng có thể điều chỉnh hướng xuất hiện của control. Mặc định khi một

JPanel được khởi tạo thì bản thân lớp chứa này sẽ có kiểu Layout là FlowLayout.

Hướng dẫn:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 56

Bài tập 3: Mục đích:

- Thực hành về BoxLayout

Yêu cầu:

BoxLayout cho phép add các control theo dòng hoặc cột, tại mỗi vị trí add nó chỉ chấp

nhận 1 control, do đó muốn xuất hiện nhiều control tại một vị trí thì bạn nên add vị trí đó là 1

JPanel rồi sau đó add các control khác vào JPanel này.

BoxLayout.X_AXIS : Cho phép add các control theo hướng từ trái qua phải.

BoxLayout.Y_AXIS : Cho phép add các control theo hướng từ trên xuống dưới.

BoxLayout sẽ không tự động xuống dòng khi hết chỗ chứa, tức là các control sẽ bị che khuất

nếu như thiếu không gian chứa nó.

Hướng dẫn:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 57

Bài tập 4: Thực hành về BorderLayout Mục đích:

- Thực hành về BoxLayout

Yêu cầu:

BorderLayout giúp chúng ta hiển thị các control theo 5 vùng: North, South, West, East, Center

Nếu như không có 4 vùng : North, West, South, East. Thì vùng Center sẽ tràn đầy cửa sổ, thông

thường khi đưa các control JTable, JTree, ListView, JScrollpane… ta thường đưa vào vùng

Center để nó có thể tự co giãn theo kích thước cửa sổ giúp giao diện đẹp hơn.

Bài tập 5:

Thiết kế giao diện như sau:

Hoạt động: Chương trình cho phép thay đổi định dạng chữ trong ô JTextField khi nhấn chọn

checkbox tương ứng.

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 58

Bài tập 6:

Thiết kế giao diện như sau:

Hoạt động: Chương trình cho phép thay đổi định dạng của chữ trong ô JTextField khi

nhấn chọn radiobutton tương ứng.

Bài tập 7:

Thiết kế giao diện để giải phương trình bậc 2:

Hướng dẫn: Sinh viên phải xác định Layout Manager trước, ta cũng có thể kế hợp các Layout để

thiết kế giao diện, đặt tên control theo yêu cầu bên dưới

Tên Control Tên Biến Control Mô tả

JTextField txtSoa Dùng để nhập giá trị cho a

JTextField txtSob Dùng để nhập giá trị cho b

JTextField txtSoc Dùng để nhập giá trị cho c

JTextField txtKetqua Dùng để hiển thị kết quả

JButton btnGiai Viết lệnh để giải phương trình

JButton btnXoaTrang Xóa toàn bộ dữ liệu trong ô dl

JButton btnThoat Viết lệnh thoát chương trình

JLabel lblTieuDe Giải Phương Trình Bậc 2

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 59

Bài tập 8:

Thiết kế giao diện để thực hiện các phép toán : ‘+’ ‘-’ ‘*’ ‘:’

Khi bấm nút Giải thì tùy thuộc vào phép toán được chọn mà kết quả thực hiện khác nhau.

Bài tập 9:

Thiết kế giao diện như sau:

Hoạt động: Khi người dùng chọn một dòng trên JList thì dòng đó sẽ hiện ra trên JLabel bên

trên. Yêu cầu thiết lập:

+ Nội dung trong JLabel được canh giữa, tạo đường viền, đổi màu nền, đổi màu chữ cho JLabel.

+ Không cho phép chọn nhiều dòng trên JList.

+ Khi chương trình hiện lên thì dòng đầu tiên phải được chọn.

Bài tập 10:

Thiết kế giao diện như sau:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 60

Chương trình cho phép người dùng sao chép các mục chọn trong JList bên trái qua

JList bên phải khi nhấn nút “Copy>>>”.

Dữ liệu trong các JList phải được đọc từ file ra và khi nhấn nút đóng chương trình

thì chương trình sẽ cho phép lưu dữ liệu thay đổi trong JList bên phải vào file.

Thêm vào chương trình menu để lưu, đóng, sao chép.

Bài tập 11:

Thiết kế giao diện như sau:

JComboBox chứa sẵn một số tên file hình, khi chương trình hiện lên thì cho xuất hiện

hình đầu

tiên lên JLabel.

Hoạt động: Khi người dùng chọn tên hình nào trong JComboBox thì chương trình sẽ hiện

hình đó ra label.

Bài tập 12:

Thiết kế giao diện như sau: giao diện gồm 2 JButton và 1 JList có thanh cuộn.

Hoạt động: Chương trình cho phép thêm và xóa một mục trong JList như sau:

+ Khi người dùng nhấn nút “Add Philosopher” thì chương trình hiện ra một cửa sổ cho nhập

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 61

+ Khi người dùng nhấn nút “Remove Selected Philosopher” thì chương trình sẽ xóa mục đang

chọn trong JList, trước khi xóa phải hỏi xác nhận lại, nếu không chọn mục nào để xóa thì phải

thông báo.

Bài tập 13:

Thiết kế giao diện như hình sau:

Yêu cầu xử lý:

+ Khi nhấn nút “Add Item” thì thêm nội dung ô nhập vào JList, cảnh báo người

dùng trường hợp để trống ô nhập hoặc nhập trùng dữ liệu đã có.

+ Khi nhấn nút “Remove Item” thì cho phép xóa các dòng đang chọn trong JList,

trước khi xóa phải hỏi xác nhận lại, cảnh báo người dùng trường hợp không chọn mà xóa.

+ Khi nhấn nút “Edit Item” thì cho phép sửa nội dung dòng đang chọn thành nội

dung mới trong ô nhập liệu.

+ Khi nhấn chọn một dòng trên JList thì hiện nội dung dòng đó lên ô nhập liệu.

Bài tập 14:

Thiết kế giao diện như hình bên dưới và thực hiện các thao tác theo yêu cầu:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 62

- Chương trình cho phép nhập vào các số nguyên từ giao diện trong phần nhập thông tin,

Khi người sử nhập giá trị vào JTextField và click nút “Nhập” thì sẽ cập nhập dữ liệu

xuống JList, Nếu checked vào “Cho nhập số âm” thì các số âm mới được phép đưa vào

JList còn không thì thông báo lỗi.

- Ô Chọn tác vụ, sinh viên phải thực hiện toàn bộ các yêu cầu

- Nút Đóng chương trình: sẽ hiển thị thông báo hỏi người sử dụng có muốn đóng hay

không.

Bài tập 15:

Viết chương trình đổi màu panel dùng JSlider như hình:

Bài tập 16:

Thiết kế giao diện như hình bên dưới:

+ Khi người dùng nhấn nút “Add Philosopher” thì chương trình lần lượt hiện ra các

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 63

cửa sổ cho nhập vào First Name, Last Name và Years, sau đó đưa các thông tin này lên

JTable

+ Khi người dùng nhấn nút “Remove Selected Philosopher” thì chương trình sẽ xóa

mục đang chọn trong JTable, nếu không chọn mục nào để xóa thì phải thông báo, trước khi

xóa phải hỏi xác

Bài tập 17:

Viết chương trình quản lý Account

Bài tập 18:

i. Viết lớp NhanVien với các yêu cầu sau:

Thuộc tính: mã nhân viên (String), phân xưởng (String), số sản phẩm (int).

Các hàm khởi tạo.

Các hàm get/set.

Hàm getChuan(): trả về giá trị 300 nếu là phân xưởng A, còn lại trả về

500. (chỉ có các phân xưởng là A, B, C, D).

Hàm VuotChuan(): trả về true khi số sản phẩm vượt chuẩn (chuẩn tùy theo phân

xưởng), ngược lại trả về false.

Hàm TinhLuong(): trả về lương của nhân viên, lương = số sản phẩm * đơn giá, nếu số

sản phẩm vượt chuẩn thì phần vượt được tính đơn giá là 30000, còn lại tính đơn giá là 20000.

Hàm toString(): trả về mã nhân viên.

ii. Thiết kế giao diện như hình bên dưới

Giao diện cho nhập mã nhân viên, số sản phẩm, chọn phân xưởng. Yêu cầu ô Tiền

lương được định dạng như hình.

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 64

Yêu cầu xử lý:

+ Khi người dùng chọn phân xưởng nào trên combobox thì hiện Số sản phẩm chuẩn tương ứng.

+ Nút “Tính lương”: xuất ra lương của nhân viên đang nhập (xem hình). Yêu cầu

kiểm tra dữ liệu nhập.

+ Nút “Thêm”: thêm nhân viên đang nhập vào JTable với các cột như hình. Chú ý không được

thêm khi: - Không nhập đủ dữ liệu. - Số sản phẩm không phải là số.

- Trùng mã nhân viên.

+ Nút “Xóa”: xóa một nhân viên đang chọn trên JTable. Chú ý phải hỏi trước khi xóa và

không được xóa khi chưa chọn dòng nào.

+ Khi chọn 1 dòng trên JTable thì hiện thông tin nhân viên đó lên các ô nhập liệu (xem hình).

+ Khi người dùng nhấn nút “Sửa” thì chương trình sửa thông tin của nhân viên đang chọn vào

JTable. Chú ý không được sửa khi:

- Không có đủ dữ liệu.

- Số SP không phải là số.

- Trùng mã nhân viên.

Bài tập 19:

Viết chương trình quản lý sản phẩm

Yêu cầu chức năng: Cho phép nhập/ xuất danh mục, danh sách sản phẩm

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 65

- Cho phép cập nhật thông tin

- Cho phép lưu / đọc danh mục sản phẩm

- Yêu cầu sử dụng JMenuBar, JList, JTable, JCombobox, …

Bài tập 20:

(i).Viết lớp SinhVien với yêu cầu sau:

Thuộc tính: mã sinh viên (String), họ tên (String), mã lớp (String), điểm môn 1

(double), điểm môn 2 (double).

Các hàm khởi tạo.

Các hàm get/set.

Hàm DiemTrungBinh(): trả về điểm trung bình của 2 môn học.

Hàm KetQua(): trả về “Đậu” khi điểm trung bình >=5, ngược lại là “Rớt”.

Hàm toString(): trả về mã sinh viên.

(ii) Thiết kế giao diện như hình bên dưới

Giao diện cho nhập mã sinh viên, họ tên, chọn mã lớp, nhập điểm môn 1, môn 2.

Menu Write Data to disk dùng để lưu dữ liệu xuống ổ cứng

Menu Open Data from disk để đọc dữ liệ từ ổ cứng

Menu Exit dùng để thoát chương trình

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 66

Yêu cầu xử lý:

+ Nút “Kết quả”: xuất ra điểm trung bình và kết quả của sinh viên đang nhập (xem hình). Chú ý

ô nhập Điểm môn 1 và môn 2 phải là số.

+ Nút “Thêm”: thêm một sinh viên vào table với các cột như hình. Chú ý không được thêm khi: - Không nhập đủ dữ liệu. - Điểm môn 1 và môn 2 không phải là số.

- Trùng mã sinh viên.

+ Nút “Xóa”: xóa một sinh viên đang chọn trên table. Chú ý phải hỏi trước khi xóa và

không được xóa khi chưa chọn dòng nào.

+ Khi chọn 1 dòng trên table thì hiện thông tin sinh viên đó lên các ô nhập liệu (xem hình).

Bài tập 21:

Thiết kế giao diện và thực hiện như hình bên dưới:

Chương trình cho phép thêm 1 nút con hoặc nút anh em của nút đang chọn khi người dùng nhấn

nút “Add Child” hoặc “Add Sibling”, nút “Delete” sẽ xóa nút đang chọn.

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 67

Bài tập 22:

(i) Viết lớp SinhVien với yêu cầu sau:

Thuộc tính: mã sinh viên (String), họ tên (String), giới tính (boolean), mã lớp

(String).

Các hàm khởi tạo.

Các hàm get/set.

Hàm toString(): trả về chuỗi thông tin gồm: mã sinh viên – họ tên – giới tính. (ii) Thiết kế giao diện như hình bên dưới:

Yêu cầu giao diện: Trên JTree có sẵn nút gốc “DS lop” và các nút con là các mã lớp: NCTH2A,

NCTH2B, NCTH2C, NCTH2K.

Yêu cầu xử lý:

+ Nút “Thêm”: thêm một sinh viên vào lớp đang chọn trên JTree (xem hình). Chú ý không được

thêm khi:

- Không nhập đủ dữ liệu.

- Không chọn mã lớp trên JTree.

- Trùng mã sinh viên.

+ Nút “Xóa”: xóa sinh viên đang chọn trên JTree. Chú ý phải hỏi trước khi xóa và không được

xóa khi:

- Không chọn nút muốn xóa.

- Chọn vào nút gốc hoặc nút mã lớp.

+ Khi chọn nút sinh viên thì hiện thông tin sinh viên đó lên các ô nhập liệu (xem hình).

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 68

Bài tập 23:

Thực hành về tạo Menu. Yêu cầu thiết kế Menu theo hình sau, ứng với mỗi menu item sinh viên

hãy cài đặt coding để hiển thị thông báo là đang chọn menu nào.

Hướng dẫn: JMenuBarJMenuJMenuItem. Phải biết kết hợp các class này.

MenuBar sẽ add Menu, Menu sẽ add MenuItem, rồi gọi setJMenuBar(menuBar);

Yêu cầu giả lập Menu giống như chương trình Foxit Reader:

Menu File có giao diện như trên

Menu Edit có giao diện như trên

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 69

Bài tập 24:

Thực hành về JToolBar, tương tự như câu 12, giả lập Toolbar của chương trình Foxit Reader,

ứng với mỗi lệnh trên JToolBar, sinh viên hãy xuấtt thông báo đang sử dụng chức năng nào.

Hướng dẫn: tạo các JButton rồi add vào JToolBar

Bài tập 25:

Thực hành về Timer class

Dùng class Timer để thiết kế ứng dụng ImageAnimation.

Giao diện sẽ có 2 JButton: Start và Stop. Khi bấm Start chương trình sẽ hiển thị hình ảnh tuần tự

trong mảng 10 hình ảnh có sẵn. Bấm Stop để tạm dừng duyệt hình ảnh. Xem hình yêu cầu

Hướng dẫn: Dùng CardLayout và Timer

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ImageAnimation extends JFrame{ private static final long serialVersionUID = 1L; Timer timer; private int pos=1; public ImageAnimation(String title) { super(title); timer=new Timer(500, null); } public void doShow()

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 70

{ setSize(500,550); setLocationRelativeTo(null); setDefaultCloseOperation(EXIT_ON_CLOSE); addControl(); setVisible(true); } public void addControl() { JPanel pnBorder=new JPanel(); pnBorder.setLayout(new BorderLayout()); JPanel pnNorth=new JPanel(); JButton btnStart=new JButton("Start"); JButton btnStop=new JButton("Stop"); pnNorth.add(btnStart); pnNorth.add(btnStop); pnBorder.add(pnNorth,BorderLayout.NORTH); final JPanel pnCenter=new JPanel(); pnCenter.setLayout(new CardLayout()); pnBorder.add(pnCenter,BorderLayout.CENTER); pnCenter.setBackground(Color.RED); JPanel []pnArr=new JPanel[10]; addImage(pnCenter,pnArr); showImage(pnCenter,"card1"); btnStart.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { timer.start(); timer.addActionListener(new TimerPanel(pnCenter)); } }); btnStop.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { timer.stop(); } }); Container con=getContentPane(); con.add(pnBorder); } private void addImage(JPanel pnCenter,JPanel []pnArr) { for(int i=0;i<pnArr.length;i++) { pnArr[i]=new JPanel(); JLabel lbl=new JLabel(); ImageIcon icon=new ImageIcon("E:\\hoa\\"+i+".jpg"); lbl.setIcon(icon); pnArr[i].add(lbl); pnCenter.add(pnArr[i],"card"+i); } } public void showImage(JPanel pn,String cardName) { CardLayout cl=(CardLayout)pn.getLayout(); cl.show(pn, cardName);

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 71

} private class TimerPanel implements ActionListener { JPanel pn=null; public TimerPanel(JPanel pn) { this.pn=pn; } public void actionPerformed(ActionEvent arg0) { showImage(pn,"card"+pos); pos++; if(pos>=10) pos=1; } } public static void main(String[] args) {; ImageAnimation imgUi=new ImageAnimation("Image Animation!"); imgUi.doShow(); } }

Bài tập 26:

Cải tiến bài tập 10. Chương trình sẽ cho phép đọc danh sách các hình ảnh bất kỳ trong ổ đĩa.

Hướng dẫn:

import java.awt.*; import java.awt.event.*; import java.io.File; import javax.swing.*; public class ImageAnimation2 extends JFrame{

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 72

private static final long serialVersionUID = 1L; Timer timer; private int pos=0; public ImageAnimation2(String title) { super(title); timer=new Timer(500, null); } public void doShow() { setSize(500,550); setLocationRelativeTo(null); setDefaultCloseOperation(EXIT_ON_CLOSE); addControl(); setVisible(true); } public void addControl() { JPanel pnBorder=new JPanel(); pnBorder.setLayout(new BorderLayout()); JPanel pnNorth=new JPanel(); JButton btnBrowser=new JButton("Browser"); JButton btnStart=new JButton("Start"); JButton btnStop=new JButton("Stop"); pnNorth.add(btnBrowser); pnNorth.add(btnStart); pnNorth.add(btnStop); pnBorder.add(pnNorth,BorderLayout.NORTH); final JPanel pnCenter=new JPanel(); pnCenter.setLayout(new CardLayout()); pnBorder.add(pnCenter,BorderLayout.CENTER); pnCenter.setBackground(Color.RED); btnStart.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { timer.start(); timer.addActionListener(new TimerPanel(pnCenter)); } }); btnStop.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { timer.stop(); } }); btnBrowser.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { JFileChooser jfc=new JFileChooser(); jfc.setMultiSelectionEnabled(true); if(jfc.showOpenDialog(null)==JFileChooser.APPROVE_OPTION) { File []files=jfc.getSelectedFiles(); for(int i=0;i< files.length;i++) {

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Trang 73

File f=files[i]; ImageIcon icon=new ImageIcon(f.getPath()); JPanel pn=new JPanel(); JLabel lbl=new JLabel(icon); pn.add(lbl); pnCenter.add(pn,"card"+i); } showImage(pnCenter, "card0"); } } }); Container con=getContentPane(); con.add(pnBorder); } public void showImage(JPanel pn,String cardName) { CardLayout cl=(CardLayout)pn.getLayout(); cl.show(pn, cardName); } private class TimerPanel implements ActionListener { JPanel pn=null; public TimerPanel(JPanel pn) { this.pn=pn; } public void actionPerformed(ActionEvent arg0) { showImage(pn,"card"+pos); pos++; if(pos>=pn.getComponentCount()) pos=0; } } public static void main(String[] args) {; ImageAnimation2 imgUi=new ImageAnimation2("Image Animation!"); imgUi.doShow(); } }