Định nghĩa lớp Test và phương thức main để khởi tạo các đối tượng của lớp trên và in ra màn hình các thuộc tính bằng phương thức get.. Các thuộc tính và phương thức xử lý ở lớp sách sinh
Trang 1TONG LIEN DOAN LAO ĐỘNG VIỆT NAM
TRUONG DAI HQC TON DUC THANG
KHOA CONG NGHE THONG TIN
DAI HOC TON BUC THANG
BAO CAO CUOI KY MON LAP TRÌNH HƯỚNG ĐÓI TƯỢNG
QUAN LY CUA HANG BAN SACH
Người hướng dân: VÕ HOÀNG QUẦN
Người thực hiện PHAM VAN QUOC VINH — 52000166
Lớp : 20050201
Khoá : 24
THÀNH PHÓ HÒ CHÍ MINH, NĂM 2021
Trang 2TONG LIEN DOAN LAO ĐỘNG VIỆT NAM
TRUONG DAI HQC TON DUC THANG
KHOA CONG NGHE THONG TIN
DAI HOC TON BUC THANG
BAO CAO CUOI KY MON LAP TRÌNH HƯỚNG ĐÓI TƯỢNG
QUAN LY CUA HANG BAN SACH
Người hướng dân: VÕ HOÀNG QUẦN
Người thực hiện PHAM VAN QUOC VĨNH - 52000166
Lớp : 20050201
Khoá : 24
THÀNH PHÓ HÒ CHÍ MINH, NĂM 2021
Trang 3LỜI CẢM ƠN
Để hoàn thành bài tiêu luận này, không thể không kế đến sự hướng dẫn của
Giáng viên Võ Hoảng Quân đã đứng lớp và hướng dẫn cho sinh viên chúng em đi từ những cái cơ bản nhất của môn Lập trình hướng Đôi tượng, đồng thời cũng có một phần rất lớn của Thầy Dung Cẩm Quang phụ trách phần thực hành Và giờ chúng em
có thê có đủ kiến thức đề hoàn thành bài cáo cáo cuối kỳ này, em xin cảm ơn!
Do đây cũng là lần đầu tiên em làm một bài báo cáo cuôỗi kỳ nên không thé tránh khỏi những sai sót không đáng có, mặc dù em đã hạn chế đến mức tối đa những sai sót
Em rất mong nhận được những góp ý cũng như nhận xét của thầy dé bài báo cáo của
em có thê hoàn thiện hơn Cuôỗi cùng em xin chân thành cảm ơn!
Trang 4Ngoài ra, trong đồ án còn sử dụng một số nhận xét, đánh giá cũng như số liệu của các tác giá khác, cơ quan tô chức khác đều có trích dẫn và chú thích nguồn gốc
Nếu phát hiện có bất kỳ sự gian lận nào tôi xin hoàn toàn chịu trách nhiệm
về nội dung đồ án của mình Trường đại học Tôn Đức Thắng không liên quan đến những vi phạm tác quyền, bản quyền do tôi gây ra trong quá trình thực hiện (nếu có)
TP Hồ Chí Minh, ngày 24 tháng 07 năm 2021
Tác giả (ký tên và ghỉ rõ họ tên)
Phạm Văn Quốc Vĩnh
Trang 51H
PHAN XAC NHAN VA DANH GIA CUA GIANG VIEN
Phần xác nhận của GV hướng dẫn
Tp Hồ Chí Minh ngày tháng năm
(kí và phi họ tên)
Phần đánh giá của GV chấm bài
Tp Hồ Chí Minh ngày tháng năm
(kí và phi họ tên)
Trang 6TÓM TAT
Trong bài báo cáo này có 2 phân, phần I sẽ đi tìm hiểu chung về OOP bao gồm
những kiến thức cơ bản và một số phần code đề minh họa cho phân lý thuyết Phần 2 là câu hỏi lập trình mở, đòi hỏi vận dụng những kiến thức đã học để giải thích các vẫn đề
của đề bài, vẽ sơ đồ UML cũng như viết code hoàn chính
Trang 7MỤC LỤC LỜI CẢM ƠN 5 2222212211 2122122112112122122 121111 ere i PHAN XAC NHAN VA DANH GIA CUA GIANG VIEN . ccccsserree iii TÓM TẮTT S22 252 112212211221121112111 1121101122111 re iv MỤC LỤC 222 22112211222112211221122 210211221221122121212 2e I CHƯƠNG 1 — BAL LAM PHAN Looieeccecccssscsssesssesssesssessvntssisstesrvesisessicsssteetunetiveseeessses 2
PD Câu Í Q.20 2221222112222 2 222 2 [2 CÂu2 0 2 0122222222 22212 ererre 5 CHƯƠNG 2 - BÀI LÀM PHÂN 2 52-222 221222122112211221221122121121112122 xe 7 2.1 Câu Í 2.22220222222222 12222 ra 7 2.2 CÂU 2 0.0.2 0 2n H222 eo 14
23 Câu Q.0 H222 2121 ee 15 2.4 — CÂU Ả Q.00 0122212 2n H222 21121 ee 21
Trang 8CHUONG 1 - BAI LAM PHAN 1
1.1 Cau 1: Java
a Trinh bày quy tắc đặt tên biến trong Java và cho ví dụ cụ thê một số tên biến
b Trình bày 03 trong số các kiểu dữ liệu nguyên thủy (primitive type) có trong Java
c Lập trình giải bài toán theo yêu cầu sau:
® Định nghĩa một lớp Calculator
e Định nghĩa phương thức public static boolean checkPrime(int n) dé kiém tra một số n truyền vào có là số nguyên tô hay không? Nếu có thì phương thức tra vé true, nguoc lai tra vé false
e Dinh nghia phuong thirc public static int calSumPrime(int n) dé tinh tông tat cả các số nguyên tô bé hơn hoặc bằng n truyền vào
e Viết phương thức main đề kiểm tra lại các phương thức vừa định nghĩa trên
Bài làm
Trong Java có các quy tắc đặt tên biến như sau:
- _ Ký tự bắt đầu của tên biến phải là chữ cái, dấu gạch dưới ( ) hoặc ký tự dola ($) và không bắt đầu bằng số
Vi du: name, name, $name
=> Các tên biến sai: 5name, (@name, #name
- _ Không được có khoảng trắng giữa các ký tự của biến
Ví dụ: dayOfBirth, day Of Binth
= Các tên biến sai: day Of Birth
- _ Không chứa các ký tự đặt biệt trong tên biến như !, @, #, %, &,
=> Các tên biến sai: n@me, Count#
- _ Không đặt tên biến trùng với các keyword của Java
Vi du: abstract, for, if, do, while, int, float, boolean,
Trang 9Có nhiều kiêu dữ liệu nguyên thủy trong Java nhưng tôi xin trình bày 03 trong các kiêu dữ liệu đó:
Kiểu dữ liệu int: dùng để biểu diễn các giá trị nguyên 32 bit nằm trong khoảng từ -2,147,483,648 đến 2,147,483,647 Khi mới khởi tạo thì được gán giá trị mặc định là 0 Ví dụ: 0, I, 2, -3, -5,
Kiểu dữ liệu double: dùng để biểu diễn các số thực, tuy nhiên vùng giá trị rộng hơn kiêu float Dùng để biểu diễn số thực 64 bít thay vì chỉ 32 bít như
kiéu float Mac định một số thực trong Java sẽ được hiểu là mang kiểu double
Kiéu dit ligu boolean: day 1a kiéu di liéu logic chira l trong 2 giá trị là
‘true’ hodc ‘false’ Va gia tri mac định của kiểu boolean khi mới được khởi tạo là false
Trang 10public class Calculator
Trang 111.2 Câu 2: Lớp và đối tượng
a Định nghĩa lớp SinhVien với các yêu cầu sau:
e Chứa ít nhất 03 thuộc tính bất kỳ (thuộc tính phải phù hợp với đối tượng là
sinh viên) với access modifier la private
e Chứa ít nhất 02 phương thức khởi tạo bất kỳ
e Chứa các phương thức get, set cho đối tượng
b Định nghĩa lớp Test và phương thức main để khởi tạo các đối tượng của lớp trên
và in ra màn hình các thuộc tính bằng phương thức get
Bài làm
public class SinhVien
{
private String studentID;
private String studentName;
private int birthYear;
Trang 12public int getBirthYear(){
public void setBirthYear(int birthYear) {
this birthYear = birthYear;
}
public class Test
{
public static void main(String[] args) {
SinhVien sinhVienl = new SinhVien("52000123",
"Nguyen Van A", 2002);
System.out.println("Student ID: " +
sinhVienl.getStudentID());
System.out.println("Student Name: " +
sinhVienl.getStudentName()); System.out.println("Student Birth Year: " +
sinhVienl.getBirthYear());
Trang 13CHUONG 2 - BAI LAM PHAN 2
2.1 Cau 1
Sinh viên viết đặc tả về đề tài Quản lý cửa hàng bán sách Trong đó, một lớp sách
và hai lớp kế thừa từ sách là sách văn học và tạp chí Các thuộc tính và phương thức xử lý ở lớp sách sinh viên tự định nghĩa, trong đó có 01 thuộc tính là giá gốc của sách, ít nhất 02 thuộc tính bất kỳ (phù hợp đối tượng là sách), 02 phương thức khởi tạo bất kỳ, 01 phương thức abstract dùng để tính giá bán và 02 phương thức xử lý do sinh viên tự định nghĩa thêm (Các phương thức khởi tạo, getter/setter, toString, equals không được tính là phương thức xử ly)
Đối với lớp con sách văn học có ít nhất 02 thuộc tính là Tác giả và Năm xuất bản,
có 02 phương thức khởi tạo, 01 phương thức tính giá bán và 02 phương thức
xử lý khác Phương thức tính bán của sách văn học là giá gốc + 5% thuế Các phương thức xử lý khác do sinh viên tự định nghĩa thêm
Đối với lớp con tạp chí có ít nhất 02 thuộc tính là Ngày xuất bản và Nhà xuất
bản, có 02 phương thức khởi tạo, 01 phương thức tính giá bán và 02 phương thức xử lý khác Phương thức tính bán của tạp chí là giá gốc + 10% thuế Các phương thức xử ly khác sinh viên tự định nghĩa thêm
Trong đặc tả phải giải thích: các thuộc tính trong bài là gì, các phương thức trong bai la gi, overload ở đâu, override ở đầu, tính kế thừa/đa hình/trừu tượng ở đâu,
Bài làm
Theo như đề bài, phải thiết kế 3 lớp, bao gồm l lớp Sach là /ớp cha (và cũng
là lớp abstract do chứa các phương thức abstraet) và 2 lớp con kế thừa từ lớp Sach
là SachVanHoc và TapChi
Giải thích cụ thê các phương thức và thuộc tính của mỗi lớp như sau:
Trang 14* Lớp Sach:
- Thuộc tính:
© protected String tenSach: tén cua sach
© protected double giaGoe: giá gốc của sách
©_ protected int soLuongConLai: số lượng sách còn lại của cửa hàng
- Phương thức:
©_ Phương thức khởi tạo:
“_ public Sach(): phương thức khởi tạo không có tham số
= public Sach(String tenSach, double giaGoc, int
soLuongConLai): phương thức khởi tạo có đầy đủ tham sô
*Ở đây ta thấy được tính overloading (nạp chồng phương thức) (nằm trong tính đa hình) ở constructor, có 2 consfrucfor đặt tên giống nhau nhưng tham số truyền vào khác nhau
© Phuong thic getter va setter:
" public String getTenSach(): phương thức get tên sách
"public double getGiaGoc(): phuong thức get giá gốc
"public int getSoLuongConLai(): phương thức get số lượng sách còn lại
" publïic void sefTenSach(String tenSach): phương thức set tên sách
" public void setGiaGoc(double giaGoc): phuong thu set gia goc cua sach
Trang 15public void setSoLuongConLai(int soLuongConLai): phương thức set sô lượng sách còn lại
©_ Phương thức xử lý:
public abstract double tinhGiaBan(): phương thức abstracf
dung dé tinh gia bán, mỗi loại sách có giá tính khác nhau và sẽ được định nghĩa sau
public abstract double giamGia(): phương thic abstract tinh
số tiền giảm giá, mỗi loại sách có cách giảm giá khác nhau và
sẽ được định nghĩa sau
public abstract double soTienPhaiTra(): phương thức abstract tinh tông số tiền phải tra sau khi đã trừ giảm giá
public boolean kiemTra(): phương thức kiêm tra xem quyền sách cần tìm còn trong cửa hàng không, nêu số sách còn lại lớn hơn 0 tức còn sách thì trả về true, ngược lại nếu số sách còn lại bằng 0 tức đã hết sách thì trá về false
©_ Phương thức toStrinng:
public String toString(: phương thức toString để trả về chuỗi đại diện của đối tượng (ở đây là Sách) theo định dạng mình mong muôn
Trang 16*Lớp SachVanHoc (kế /hừa từ lớp Sach):
- Thuộc tính:
© private String tacGia: tac gia cua sach
© private int namXuatBan: nam xuat ban cua sách
- Phương thức:
©_ Phương thức khởi tạo:
=" public SachVanHoc(String tenSach, double giaGoc, int soLuongConLai, String tacGia, int nam XuatBan): phuong thức khởi tạo có đầy đủ tham số
= public SachVanHoc(String tacGia, int namXuatBan): phương thức khởi tạo chỉ có 2 tham số truyền vào
*Ở đây ta thấy được tính overloading (nạp chồng phương thức) (nằm trong tính đa hình) 6 constructor, cé 2 constructor được đặt tên giống nhau nhưng tham số truyền vào khác nhau
©_ Phương thức gectter và setter:
" public String getTacGia(): phuong thức get tác giả của sách
=" public int getNamXuatBan(): phuong thie get nam xuat ban cua sach
" publïc void sefTacGia(String tacGia): phương thức set tác giả của sách
« public void setNamXuatBan(int namXuatBan): phuong thức set năm xuất bán
Trang 17*Ở class này ta cĩ 2 thuộc tính private sẽ ẩn di với các lớp khác Muốn truy xuất ta dùng các phương thức public getter
public double giamGia(): overriding (ghi dé) lai phirong
thc abstract giamGia() ở lớp Sach Được định nghĩa là nêu
lượng sách trong kho lớn hơn hoặc bằng 20 quyền thì sẽ giảm giá 5% trên tơng giá bán đã bao gơm thuế
public double soTienPhaiTra(Q): overriding (ghi dé) lại
phương thức abstracf soTienPhạTra() ở lớp Sach Được định nghĩa là trá về sơ tiền cần thanh tốn cuối cùng bao gồm
tơng giá bán (đã tính thuế) trừ đi giảm giá (nếu cĩ)
*7a lại thấy tính đa hình ở việc ghỉ đè phương thức: cùng là phương thức giống tên nhau nhưng ở mỗi class khác nhau lại thực hiện chức năng khác nhau
Trang 18*Lớp TapChi (kế thừa từ lớp Sach):
- Thuộc tính:
o private String ngayXuatBan: ngay xuat bản của tạp chí
o private String nhaXuatBan: nha xuat ban cua tap chi
- Phương thức:
©_ Phương thức khởi tạo:
=" public TapChi(String tenSach, double giaGoc, int soLuongConLai, String ngayXuatBan, String
nhaXuatBan): phương thức khởi tạo có đầy đủ tham số
"_ public TapChi(String ngayXuatBan, String nhaXuatBan): phương thức khởi tạo chỉ có 2 tham số truyền vào
*Ở đây ta thấy được tính overloading (nạp chồng phương thức) (nằm trong tính đa hình) ở constructor, có 2 construcfor được đặt tên giống nhau nhưng tham số truyền vào khác nhau
©_ Phương thức gectter và setter:
«public String getNgay XuatBan(): phương thức get ngày xuất bản của tạp chí
"public String getNhaXuatBan(): phuong thirc get nha xuat ban cua tap chi
= public void setNgayXuatBan(String ngay XuatBan): phương thức set ngày xuất bản của tap chí
" publïic void se€NhaXuatBan(String nhaXuatBan): phương thức set nhà xuất bản của tạp chí
Trang 19*Ở class này ta cĩ 2 thuộc tính private sẽ ẩn di với các lớp khác Muốn truy xuất ta dùng các phương thức public getter
public double giamGia(): overriding (ghi de) lai phương
thc abstract giamGia() ở lớp Sach Được định nghĩa là nêu
lượng tạp chí trong kho lớn hơn hoặc bằng 10 quyền thì sẽ giám giá 2.5% trên tổng giá bán đã bao gồm thuế
public double soTienPhaiTra(Q): overriding (ghi dé) lại
phương thức abstracf soTienPhạTra() ở lớp Sach Được định nghĩa là trả về sơ tiền cần thanh tốn cuối cùng bao gồm
tơng giá bán (đã tính thuế) trừ đi giảm giá (nếu cĩ)
*Ta lai thấy tính đa hình ở việc ghi đè phương thức cùng là phương thức giống tên nhau nhưng ở mỗi class khác nhau lại thực hiện chức năng khác nhau