Đánh giá ảnh hưởng của chiều cao khối đắp đến ứng xử của ...
Khối: Đại Học Và Cao Đẳng - Tailieuhoctap.vn
-
Upload
khangminh22 -
Category
Documents
-
view
3 -
download
0
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(); } }