Lập trình JAVA Lập trình JAVA Lập trình JAVA Lập trình JAVA Lập trình JAVA Lập trình JAVA Lập trình JAVA Lập trình JAVA Lập trình JAVA Lập trình JAVA Lập trình JAVA Lập trình JAVA Lập trình JAVA Lập trình JAVA Lập trình JAVA Lập trình JAVA Lập trình JAVA Lập trình JAVA Lập trình JAVA Lập trình JAVA Lập trình JAVA Lập trình JAVA Lập trình JAVA Lập trình JAVA Lập trình JAVA Lập trình JAVA Lập trình JAVA Lập trình JAVA Lập trình JAVA Lập trình JAVA Lập trình JAVA Lập trình JAVA Lập trình JAVA Lập trình JAVA Lập trình JAVA
Trang 1Module 4: 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ì?
Trang 2// 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" );
}
}
Trang 3// 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;
Trang 4System.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() {
Trang 5return 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
Trang 6+ 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)
Trang 7+ 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:
Trang 8Số sản phẩm Đơn giá
ế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
Trang 9- 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: