42
Bài tập thực hành - Java 1 Trang 1/43 Bài Tập Thực Hành Lập Trình Java Căn Bản Khối: Trung Cấp và Cao Đẳng Năm 2010 Hướng dẫn: Bài tập thực hành được chia làm nhiều Module. Mỗi Module được thiết kế cho thời lượng là 3 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 hoàn 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à.

Bai Tap Java 1

Embed Size (px)

Citation preview

Page 1: Bai Tap Java 1

Bài tập thực hành - Java 1

Trang 1/43

BBààii TTậậpp TThhựựcc HHàànnhh

LLậậpp TTrrììnnhh JJaavvaa CCăănn BBảảnn Khối: Trung Cấp và Cao Đẳng

Năm 2010

Hướng dẫn:

Bài tập thực hành được chia làm nhiều Module.

Mỗi Module được thiết kế cho thời lượng là 3 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 hoàn 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à.

Page 2: Bai Tap Java 1

Bài tập thực hành Java 1 - Module 1

Trang 2/43

Module 1. Program 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 1.

Mục đích: Biết cách cài đặt và sử dụng JDK.

Yêu cầu:

Cài đặt JDK.

Bài 2.

Mục đích: Biết cách xuất dữ liệu đơn giản.

Yêu cầu:

Viết chương trình như bên dưới, sau đó biên dịch và thi hành chương trình.

public class Roses

{

public static void main (String[] args)

{

System.out.println ("Roses are red,\n\tViolets are blue,\n" +

"Sugar is sweet,\n\tBut I have \"commitment issues\",\n\t" +

"So I'd rather just be friends\n\tAt this point in our " +

"relationship.");

}

}

Bài 3.

Mục đích: Lấy dữ liệu nhập từ tham số của hàm main.

Yêu cầu:

Viết chương trình xuất ra dòng chữ Hello <tên>, tên được nhập từ tham số của hàm main.

Bài 4.

Mục đích:

+ Lấy dữ liệu nhập từ tham số của hàm main.

+ Chuyển đổi kiểu dữ liệu từ chuỗi sang số.

Yêu cầu:

Viết chương trình cộng 2 số nguyên. Với 2 số được nhập vào từ tham số của hàm main.

VD: java Cong 3 4

KQ: Tong = 7

HD : Dùng lệnh Integer.parseInt(String s) để chuyển chuỗi thành số nguyên.

Page 3: Bai Tap Java 1

Bài tập thực hành Java 1 - Module 1

Trang 3/43

Bài 5.

Sửa đổi bài trên cho nhập thêm 1 phép toán (+, - , * , /), xuất kết quả tương ứng.

Ví dụ: java PhepTinh 6 – 3

Kết quả: 6 – 3 = 3

Bài 6.

Mục đích: Sử dụng cấu trúc điều khiển.

Yêu cầu:

Viết chương trình giải phương trình bậc nhất ax+b=0, với a, b nhận từ tham số của hàm main.

Bài 7.

Mục đích:

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

Yêu cầu:

Viết chương trình xuất ra tổng các số chẵn từ 1 đến n (n>0), với n nhận từ tham số của hàm

main.

Bài 8.

Mục đích:

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

Yêu cầu:

Viết chương trình in ra giá trị lớn nhất trong một dãy các giá trị nhập vào từ tham số của hàm

main.

Page 4: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 2

Trang 4/43

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 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 =

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

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

Bài 2.

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 là 1/2 chu vi tam giác.

Bài 3.

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 = 222

2

21 yyxx

Bài 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)

Page 5: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 2

Trang 5/43

Bài 5.

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.

Bài 6.

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.

Bài 7.

Mục đích: So sánh hai 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.

Bài 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”.

Bài 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!

Bài 10.

Mục đích: Viết hàm.

Yêu cầu:

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

Bài 11.

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.

Page 6: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 2

Trang 6/43

Bài 12.

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.

Bài 13.

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.

Bài 14.

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.

Bài 15.

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.

Bài 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.

Bài 17.

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.

Page 7: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 3

Trang 7/43

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 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:

// Distance.java

public class Distance{

private double feet;

private double inches;

public Distance() {

feet=inches=0.0;

}

public void calculate(int noofinches) {

feet = noofinches / 12;

inches = noofinches % 12;

System.out.println("\n" + feet + " Feet and " + inches

+ " inches");

}

public static void main( String args[]) {

Distance objdistance = new Distance();

objdistance.calculate();

}

}

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.

Bài 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ì?

// 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

Page 8: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 3

Trang 8/43

// 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" );

Page 9: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 3

Trang 9/43

}

}

// 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);

}

}

Bài 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

Page 10: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 3

Trang 10/43

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;

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

Page 11: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 3

Trang 11/43

}

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

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

}

}

Bài 4.

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.

HinhTron

- bankinh: double

+ HinhTron()

+ HinhTron(r: double)

+ getBanKinh() : double

+ setBanKinh(v : double) : void

+ chuVi(): double

+ dienTich(): double

+ toString(): String

Khi gán giá trị cho thuộc tính bankinh, cần kiểm tra giá trị gán phải >0.

Page 12: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 3

Trang 12/43

Bài 5.

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.

SinhVien

- maSV: string

- hoTen: string

- diemLT: double

- diemTH: double

+ diemTB(): double

+ ketQua(): boolean

+ toString(): string

+ diemTB(): điểm trung bình = (điểm LT+điểm TH)/2.

+ ketQua(): trả về true khi điểm trung bình >=5, ngược lại là false.

+ toString(): trả về chuỗi gồm: mã, họ tên, điểm LT, điểm TH, điểm TB.

Viết hàm main cho phép thực hiện:

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

(ii) 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 hay Rớt).

Bài 6.

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

+ getCanhB() : int

+ setCanhB(v : int) : void

+ getCanhC() : int

+ setCanhC(v : int) : void

+ laTamGiac() : boolean

+ laTamGiac(int, int, int) : boolean

+ getChuVi() : int

+ getDienTich() : double

Trong đó:

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

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

Page 13: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 3

Trang 13/43

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.

Các hàm 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ũ).

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

Hàm 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.

Hàm 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:

+ Tạo đối tượng CHinhTamGiac với 3 cạnh là 3,4,5. Xuất chu vi và diện tích nếu là tam giác.

+ Sửa cạnh thứ nhất thành 10. Xuất chu vi và diện tích nếu vẫn còn là tam giác.

Bài 7.

Yêu cầu:

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

NhanVien

- maNV : String

- soSP : int

+ coVuotChuan() : boolean

+ getTongKet() : String

+ getLuong(): double

+ tieuDe() : static void

+ toString() : String

+ LonHon (nv2 : NhanVien) : boolean

Viết các hàm khởi tạo và các hàm get/set cho các thuộc tính của lớp. Trong hàm khởi tạo và

hàm setSoSP, khi gán giá trị cho thuộc tính soSP thì cần kiểm tra giá trị đó có phải là số

dương không, nếu là số dương thì mới gán giá trị cho thuộc tính, ngược lại thì gán bằng 0.

Hàm coVuotChuan() : trả về true nếu soSP > 500, ngược lại trả về false.

Giải thích: hàm này dùng để kiểm tra xem số lượng sản phẩm của nhân viên có vượt quá số

lượng chuẩn hay không.

Hàm getTongKet() : trả về "Vượt" khi soSP > 500, ngược lại để trống (có thể sử dụng hàm

coVuotChuan() để kiểm tra).

Hàm getLuong() : trả về lương của một nhân viên, lương ăn theo sản phẩm với đơn giá cơ

bản cho 1 sản phẩm là 20000, và nếu số sản phẩm của nhân viên vượt chuẩn thì phần vượt

chuẩn được tính đơn giá là 30000.

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

Hàm toString() : trả về chuỗi chứa thông tin của nhân viên gồm các cột: Mã nhân viên

(maNV), Số sản phẩm (soSP), Lương và Tổng kết.

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

Page 14: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 3

Trang 14/43

Tạo 2 nhân viên với các thuộc tính do 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.

Bài 8.

Yêu cầu:

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

CNhanVien

- mHo : String

- mTen : String

- mSoSP : int

+ getLuong() : double

+ LonHon (nv2 : CNhanVien) : boolean

mHo, mTen, mSoSP lầ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.

Viết các hàm get/set cho các thuộc tính của lớp, riêng hàm setSoSP phải kiểm tra giá trị >0.

Viết các hàm khởi tạo cho lớp, phải kiểm tra số sản phẩm.

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:

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

Viế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.

Bài 9.

Yêu cầu: giáo trình bài 4.1 + 4.2 và tham khảo giá trình trang 228.

(i) Cài đặt cho lược đồ lớp Account như sau :

Account

- acctNumber : long

- name : String

- balance : double

- RATE = 0.035 : final double

+ Account()

+ Account( acctNumber : long, name : String, balance : double )

+ Account( acctNumber : long, name : String )

+ deposit( amount : double ) : boolean

+ withdraw( amount : double, fee : double) : boolean

+ addInterest() : void

Page 15: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 3

Trang 15/43

+ getAccountNumber() : long

+ getBalance() : double

+ toString() : String

+ transfer( acc2 : Account, amount : double, fee : double ): void

+ deposit(amount : double) : hàm trả về true nếu gởi tiền thành công (amount>0).

+ withdraw( amount : double, fee : double) : trả về true nếu rút tiền thành công (amount>0 và

amount+fee<=balance).

+ addInterest() : tính tiền lãi, bằng balance * RATE.

+ toString() : trả về thông tin của account gồm : acctNumber, name, balance.

+ transfer(acc2 : Account, amount : double, fee : double): chuyển một khoản tiền amount (có

phí) từ account này sang account kia.

(ii) Test lớp Account như sau :

- Tạo 3 đối tượng acct1, acct2, acct3 với các giá trị name, acctNumber, balance lần lượt như

sau: {"Ted Murphy", 72354, 102.56}; {"Jane Smith", 69713, 40.00}; {"Edward Demsey",

93757, 759.32}.

- Gởi thêm số tiền cho acct1 là 25.85, cho acct2 là 500.00.

- Rút khỏi acct2 số tiền là 430.75, mức phí 1.50.

- Tính tiền lãi cho acct3.

- Xuất thông tin của acct1, acct2, acct3. (Kiểm tra lại kết quả).

- Chuyển tiền từ acct2 sang cho acct1 số tiền là 100.00, phí chuyển là 1.00.

- Xuất thông tin của acct1, acct2. (Kiểm tra lại kết quả).

Bài 10.

Yêu cầu: giáo trình bài 4.3.

Cho lớp Dice như trong giáo trình (trang 237). Viết lớp PairOfDice, lớp gồm có 2 đối tượng Dice,

mỗi đối tượng có 6 mặt. Viết lớp BoxCars chứa hàm main, trong đó quay đối tượng PairOfDice 1000 lần,

tính và xuất tổng giá trị quay được trong 1000 lần đó.

Bài 11.

Yêu cầu: giáo trình bài 4.6.

Cho sơ đồ lớp đã cài đặt trong giáo trình như sau (xem trang 253, 252, 250) :

Page 16: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 3

Trang 16/43

Thêm vào lớp Student ba thuộc tính là điểm của ba bài kiểm tra. Ngoài ra, còn thêm vào các

hàm sau :

+ Hàm khởi tạo với đầy đủ các thuộc tính.

+ Hàm setTestScore : có hai tham số là test number (có giá trị từ 1 đến 3) và score, hàm này

dùng để gán điểm (score) cho một trong 3 môn tùy theo test number: môn thứ nhất có test number=1,

môn thứ 2 có test number=2, môn thứ 3 có test number=3.

+ Hàm getTestScore có một tham số là test number, hàm trả về score tương ứng với test

number.

+ Hàm average : tính và trả về điểm trung bình của ba bài kiểm tra.

+ Sửa hàm toString sao cho có thông tin của ba bài kiểm tra và điểm trung bình.

Sửa hàm main để test các hàm mới thêm ở lớp Student.

StudentBody

+ main (args : String[]) : void

+ toString() : String

Student

- firstName : String

- lastName : String

- homeAddress : Address

- schoolAddress : Address

+ toString() : String

- streetAddress : String

- city : String

- state : String

- zipCode : long

Address

Page 17: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 4

Trang 17/43

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"); System.out.println (f1 + "\t" + f2 + "\t" + f3 + "\n");

} public static void main (String[] args) {

int a1 = 111; Num a2 = new Num (222);

Page 18: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 4

Trang 18/43

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");

}

}

(bài được Tham khảo trong giáo trình Java Software Solution, chương 5)

Bài 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" );

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

HoSo.tongKet();

n1.xuatHoTen();

n2.xuatHoTen();

n3.xuatHoTen();

n4.xuatHoTen();

}

Page 19: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 4

Trang 19/43

}

Bài 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:

HD: Xem phần cài đặt trong giáo trình Java Software Solution trang 294.

Bài 4.

Yêu cầu:

Làm lại ví dụ Employee và EmployeeTest trong bài giảng, mục Interface.

Page 20: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 5

Trang 20/43

Module 5. Array 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.

Bài 2.

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.

Bài 3.

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.

Bài 4.

Yêu cầu:

NhanVien

- maNV: String

- hoTen: String

- diaChi: String

- cbql: boolean

+ LaCBQL(): boolean

+ inTieuDe(): static void

+ toString(): string

+ LaCBQL(): trả về true nếu là cán bộ quản lý.

+ inTieuDe(): xuất tiêu đề "mã họ tên địa chỉ".

+ toString(): trả về chuỗi gồm: mã, họ tên, địa chỉ.

Viết hàm main cho phép nhập mảng NhanVien, sau đó in ra mã, họ tên của các nhân viên là cán

bộ quản lý.

Page 21: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 5

Trang 21/43

Bài 5.

Mục đích:

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

Yêu cầu:

(i) Sử dụng lớp Circle đã viết trong bài tập 4 Module 3, viết lớp CircleCollection như sau:

CircleCollection

- array: Circle[]

- current: int

+ CircleCollection()

+ CircleCollection( size: int )

+ addCircle( value: Circle ): void

+ getElement( index: int ): Circle

+ setElement( index: int, newValue: Circle ): void

+ getLength(): int

+ toString() : String

(ii) Thêm lớp Test, viết hàm main cho nhập mảng n hình tròn và thực hiện các yêu cầu sau:

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

+ Xuất thông tin hình tròn có diện tích lớn nhất, xuất diện tích lớn nhất.

+ Sắp xếp mảng tăng dần theo diện tích.

HD: Xem cách làm ở ví dụ trong giáo trình: CD.java, CDCollection.java, Tunes.java.

Bài 6.

Mục đích:

Sử dụng ArrayList.

Yêu cầu:

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

dụng ArrayList).

(ii) Thêm lớp Test, viết hàm main cho nhập mảng n nhân viên và thực hiện các yêu cầu sau:

1. Thêm một nhân viên mới vào danh sách.

2. Xuất tổng số nhân viên.

3. Xuất thông tin các nhân viên có số sản phẩm vượt chuẩn.

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

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

6. Xuất thông tin nhân viên có số sản phẩm ít nhất.

7. Xuất thông tin nhân viên có lương cao nhất.

8. Xuất thông tin nhân viên không vượt chuẩn có lương cao nhất.

9. Xuất thông tin tổng lương của tất cả nhân viên.

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

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

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

Page 22: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 5

Trang 22/43

Bài 7.

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.

Bài 8.

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.

Page 23: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 6

Trang 23/43

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();

Bài 2.

Yêu cầu:

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

Page 24: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 6

Trang 24/43

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

Bài 3.

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.

Point

- x : int

- y : int

+ Point ()

+ Point (xValue : int, yValue : int)

+ setX (xValue : int) : void

+ getX() : int

+ setY (yValue : int) : void

+ getY() : int

+ toString() : String

Circle

- radius : double

+ Circle()

+Circle(xValue : int, yValue : int,

radiusValue : double)

+ setRadius (radiusValue : double) : void

+ getRadius(): double

+ getDiameter(): double

+ getCircumference() : double

+ getArea() : double

+ toString() : String

CircleTest

+ main (args : String[]) : void

Page 25: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 6

Trang 25/43

Bài 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.

Page 26: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 7

Trang 26/43

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.

Bài 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.

Bài 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.

Bài 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.

Bài 5.

Mục đích:

Lưu dữ liệu vào tập tin và đọc dữ liệu từ tập tin vào chương trình.

Yêu cầu:

Page 27: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 7

Trang 27/43

Viết chương trình thực hiện việc lưu danh sách nhân viên trong bài tập 6 (module 5), chương

trình cũng cho phép đọc thông tin đã lưu vào chương trình khi chương trình vừa chạy lên.

Page 28: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 8

Trang 28/43

Module 8. Graphic User Interface Nội dung kiến thức thực hành:

+ Bố trí các thành phần trong giao diện

+ Sử dụng một số đối tượng giao diện: JButton, JLabel, JTextField

+ Điều khiển sự kiện

Bài 1.

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

Yêu cầu cho chữ “Continue?” màu đỏ và hai nút có chứa hình. Không cho phép thay đổi kích

thước frame. Khi chương trình vừa chạy lên thì giao diện xuất hiện giữa màn hình.

Xử lý sự kiện: khi người dùng nhấn nút Cancel thì thoát khỏi chương trình.

HD: - Muốn thoát chương trình viết lệnh: System.exit(0);

- Không cho phép thay đổi kích thước frame: setResizable(false);

- Cho frame xuất hiện giữa màn hình:

Dimension d = getToolkit().getScreenSize();

int wLocate = (int)(d.getWidth()/2-this.getWidth()/2);

int hLocate = (int)(d.getHeight()/2-this.getHeight()/2);

setLocation(wLocate, hLocate);

Bài 2.

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

Khi người dùng nhấn vào nút nào thì màu của panel sẽ được đổi tương ứng.

Page 29: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 8

Trang 29/43

Bài 3.

Tương tự bài trên, thiết kế chương trình cho phép người dùng đổi kiểu chữ trong label. Giao diện

chứa 4 nút để thay đổi kiểu chữ là “Times New Roman”, “Arial”, “Courier New”, “Arial Black", mặc định

cho kích thước chữ trong label là 20.

Bài 4.

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

Bài 5.

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

Chương trình cho người dùng nhập số vào 2 ô JTextField đầu tiên, khi nhấn Enter vào một trong

hai ô đó thì chương trình tính thương của chúng và xuất kết quả ra ô RESULT.

Yêu cầu bắt lỗi không nhập liệu và lỗi nhập chữ.

HD: Để chuyển chuỗi thành số nguyên, dùng hàm Integer.parseInt(String), hàm này sẽ phát

sinh ra ngoại lệ là NumberFormatException nếu chuỗi truyền vào không phải chuỗi số.

Bài 6.

Thiết kế giao diện cho chương trình tính bình phương của một số.

Khi người dùng nhấn nút Tính hoặc nhấn Enter trên ô nhập liệu thì chương trình xuất kết quả.

Yêu cầu bắt lỗi không nhập liệu và lỗi nhập chữ.

Bài 7.

Tìm hiểu cách thiết kế giao diện sau:

Page 30: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 8

Trang 30/43

import javax.swing.*; import java.awt.event.*; import java.awt.*; public class frmLogin extends JFrame implements ActionListener { private JTextField txtUserName; private JPasswordField txtPSW; private JButton btnLogin, btnCancel; public frmLogin() { super("Log on Program");

JPanel pTop = new JPanel(); //?? JPanel pCen = new JPanel(new BorderLayout()); //?? JPanel pBot = new JPanel(new FlowLayout(FlowLayout.CENTER, 20, 5)); //?? add(pTop, BorderLayout.NORTH); add(pCen, BorderLayout.CENTER); add(pBot, BorderLayout.SOUTH); pTop.setBorder(BorderFactory.createLineBorder(Color.red)); pBot.setBorder(BorderFactory.createLineBorder(Color.red)); JLabel lblTitle = new JLabel("Logon", SwingConstants.CENTER); lblTitle.setForeground(Color.red); lblTitle.setFont(new Font("Vivaldi", Font.BOLD, 35)); pTop.add(lblTitle); pBot.add(btnLogin = new JButton("Logon", new ImageIcon("Images/Logon.gif"))); pBot.add(btnCancel = new JButton("Exit", new ImageIcon("Images/Exit.gif"))); btnCancel.addActionListener(this); btnLogin.addActionListener(this); btnLogin.setMnemonic('L'); //?? btnCancel.setMnemonic('x'); JPanel pM = new JPanel(); JPanel p1 = new JPanel( new FlowLayout(FlowLayout.RIGHT)); JPanel p2 = new JPanel( new FlowLayout(FlowLayout.RIGHT)); p1.add( new JLabel("User Name :")); p1.add( txtUserName = new JTextField(20)); p2.add( new JLabel("Password :")); p2.add( txtPSW = new JPasswordField(20)); Box b = Box.createVerticalBox(); b.add(Box.createVerticalStrut(30)); b.add(p1); b.add(p2); pM.add(b); //?? pCen.add(pM, BorderLayout.CENTER); JLabel lblIMG = new JLabel(new ImageIcon ("Images/AboutImage.gif"));

Page 31: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 8

Trang 31/43

lblIMG.setBorder(BorderFactory.createLineBorder(Color.red)); pCen.add(lblIMG, BorderLayout.WEST); setDefaultCloseOperation(DISPOSE_ON_CLOSE); setSize(500, 250); setResizable(false); Dimension d = getToolkit().getScreenSize(); int wLocate = (int)(d.getWidth()/2-this.getWidth()/2); int hLocate = (int)(d.getHeight()/2-this.getHeight()/2); setLocation(wLocate, hLocate); setVisible(true); } //============================================================== public void actionPerformed(ActionEvent e) { Object o=e.getSource(); if(o.equals(btnCancel)) { exitProgram(); } else if(o.equals(btnLogin)) { login(); } } //============================================================== private void login() { String user, pass; user = txtUserName.getText().trim(); pass = txtPSW.getText().trim(); if (user.equals("")) { JOptionPane.showMessageDialog(this,"User name must be filled"); txtUserName.requestFocus(); return; } if (pass.equals("")) { JOptionPane.showMessageDialog(this,"Password must be filled"); txtPSW.requestFocus(); return; } if (!user.equals("ABC")) { JOptionPane.showMessageDialog(this,"User not existed."); txtUserName.requestFocus(); return; } if (!pass.equals("123")) { JOptionPane.showMessageDialog(this,"Password is not correct."); txtPSW.requestFocus(); return; } //Neu dungpassword, username. Viec dang nhap thanh cong //Hien thi giao dien chinh len //...(tu viet) this.dispose(); //Dong giao dien login

Page 32: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 8

Trang 32/43

} //============================================================== private void exitProgram() { int selValue = JOptionPane.showConfirmDialog(this, "Are you sure to exit program?", "Confirmation", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if(selValue == JOptionPane.YES_OPTION) System.exit(0); } //============================================================== public static void main (String[] args){new frmLogin();} }

Page 33: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 9

Trang 33/43

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

+ JCheckBox, JRadioButton

+ JComboBox, Jlist

+ Menu

Bài 1.

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.

Bài 2.

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

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

Làm lại bài tập trên nhưng danh sách tên các file hình trong JComboBox được đọc từ file ra.

Page 34: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 9

Trang 34/43

Bài 5.

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

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

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

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

tên như hình bên dưới, khi nhấn nút OK thì thêm vào JList, chú ý trường hợp ô nhập tên để trống.

Page 35: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 9

Trang 35/43

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

Thêm vào chương trình menu.

Bài 8.

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

(i) Viết lớp HinhChuNhat để tính chu vi và diện tích, trong đó có hàm toString() trả về chuỗi chứa

các thông tin là chiều dài, chiều rộng, chu vi, diện tích (mỗi cột cách nhau bởi các khoảng

trắng).

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

Page 36: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 9

Trang 36/43

Yêu cầu xử lý:

+ Nút “Tính”: xuất kết quả tính chu vi và diện tích, chú ý phải thông báo lỗi khi:

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

- Dữ liệu nhập không phải là số.

- Dữ liệu nhập là số âm.

+ Nút “Thêm”: thêm một dòng vào JList với các thông tin như hình. Kiểm tra dữ liệu như nút Tính.

+ Nút “Xóa”: xóa một dòng đang chọn trên JList, yêu cầu chọn trước khi xóa và hỏi xác nhận trước

khi xóa.

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

Bài 10.

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

+ Thuộc tính: loại phí (String), tiền (double).

+ Viết các hàm khởi tạo.

+ Viết các hàm get/set.

+ Hàm toString(): trả về chuỗi chứa 2 thông tin là loại phí và tiền.

(ii) Thiết kế giao diện như hình dưới đây:

Page 37: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 9

Trang 37/43

Yêu cầu xử lý sử dụng lớp ChiPhi:

+ Nút “Thêm”: thêm một dòng vào JList bên dưới với 2 thông tin tương ứng là Loại phí và Tiền

(xem hình). Chú ý không được thêm khi:

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

- Ô nhập tiền không phải số.

- Ô nhập tiền là số âm.

+ Nút “Xóa”: xóa một dòng đang chọn trên JList, yêu cầu chọn trước khi xóa và hỏi xác nhận trước

khi xóa.

+ Nút “Báo cáo”: xuất ra tổng chi phí.

+ Khi chọn 1 dòng trên JList thì hiện thông tin dòng đó lên các ô nhập liệu.

+ Nút “Thoát”: đóng chương trình.

Page 38: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 10

Trang 38/43

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

+ JSlider

+ JSplitPane

+ JTable

+ JTree

Bài 1.

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

Bài 2.

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

nhận lại.

Page 39: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 10

Trang 39/43

Bài 3.

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.

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

Page 40: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 10

Trang 40/43

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

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

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

Page 41: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 10

Trang 41/43

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

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.

Bài 6.

(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:

Page 42: Bai Tap Java 1

Bài tập thực hành Java 1 – Module 10

Trang 42/43

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