You are on page 1of 3

ĐẠI HỌC QUỐC GIA HÀ NỘI CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN Độc lập – Tự do – Hạnh phúc

ĐỀ THI CUỐI KỲ
Môn: Lập trình Java (học kỳ hè 2020)
Đề 1
Thời gian: 90 phút

Bài 1 (7đ)
Chương trình quản lý cửa hàng cho thuê truyện được thiết kế gồm có 4 lớp như sau:
Comic, ColorComic, SpecialComic, và ComicStoreManagement
 Lớp Comic (Truyện tranh thường) với các thuộc tính:
o String id (mã truyện),
o String name (tên truyện),
o Boolean available (thông tin truyện còn (true) hay đã có người thuê (false))
o int days (số ngày thuê),
o double price (giá thuê mỗi ngày).
 Lớp ColorComic (Truyện tranh màu) kế thừa từ lớp Comic, thêm các thuộc tính riêng:
o int nPages (số trang).
o boolean latest (có phải tập mới nhất(true) hay không (false))
 Lớp SpecialComic (Truyện tranh đặc biệt) kết thừa từ lớp Comic và có thêm thuộc tính
o int maxDays (số ngày thuê tối đa).
o boolean valuable (Truyện quý hiếm (true) hay không (false))
Hoàn thiện các phương thức sau:
 Phương thức public double getPayment() ở 3 lớp Comic, ColorComic và lớp
SpecialComic, trong đó:
o Tiền thanh toán Truyện tranh thường = Số ngày thuê * giá thuê mỗi ngày
o Tiền thanh toán Truyện tranh màu = Số ngày thuê * giá thuê mỗi ngày * (1 + 0.01* số
trang)
 Trong trường hợp truyện tranh màu là tập mới nhất, tiền thanh toán cộng thêm:
0.1* Số ngày thuê * giá thuê mỗi ngày

o Tiền thanh toán Truyện đặc biệt = Số ngày thuê * giá thuê mỗi ngày
 Trong trường hợp truyện đặc biệt là sách quý hiếm, tiền thanh toán cộng thêm:
0.4*Số ngày thuê *giá thuê mỗi ngày

 Trong trường hợp số ngày thuê vượt quá giới hạn (số ngày thuê > số ngày thuê
tối đa), tiền thanh toán cộng thêm:
0.3*số ngày vượt quá số giới hạn * giá thuê mỗi ngày
(Số ngày vượt quá giới hạn được tính = số ngày thuê – số ngày thuê tối đa

 Phương thức public ArrayList<Comic> readComics(String fileName) ở lớp


ComicStoreManagement để đọc vào thông tin về các truyện tranh trong cửa hàng hiện tại.
- Dòng đầu tiên là số lượng truyện n
- Các dòng tiếp theo là thông tin của n truyện, mỗi thông tin được biểu diễn trên 1 dòng
theo thứ tự:
o id (nếu mã truyện bắt đầu là N ví dụ N001 thì là truyện tranh thường (Comic),
nếu mã truyện bắt đầu bằng C ví dụ C001 thì là truyện tranh màu
(ColorComic), nếu mã truyện là S ví dụ S001 thì là truyện tranh đặc biệt
(SepcialComic).
o name
o available
o days
o price
o nPages (nếu là Truyện tranh màu) maxDays (nếu là Truyện tranh đặc biệt)
o latest (nếu là Truyện tranh màu) valuable (nếu là Truyện tranh đặc biệt)
Ví dụ xem trong file Comics.txt

 Phương thức public void printComicsInfor(ArrayList<Comic> Comics) để in ra thông


tin của mỗi truyện trên 1 dòng.
 Phương thức public void sortByPrice(ArrayList<Comic> Comics) để sắp xếp các truyện
theo mức giá thuê mỗi ngày (price) giảm dần.
 Phương thức public ArrayList <Comic> getAvailableComics(ArrayList <Comic>
Comics) Đưa ra danh sách các truyện chưa được thuê (chưa có người thuê – available = true)
 Phương thức public ArrayList<Comic> filterComicByPrice(ArrayList <Comic>
Comics, double minPrice, double maxPrice) để tìm những truyện có mức giá thuê mỗi
ngày (price) thỏa mãn minPrice ≤ price ≤ maxPrice . Kết quả trả về được sắp giảm dần theo giá
(price).

Bài 2 (3 điểm)
Hoàn thiện các phương thức trong file MatrixCute.java theo các yêu cầu sau:
1. Phương thức public static int[][] inputMatrix(Scanner reader) thực hiện
nhập số nguyên dương n và n*n số nguyên từ bàn phím, kết quả trả về là ma trận kích thước
n*n được nhập từ bàn phím.
2. Phương thức public static boolean isOESumBalance(int[][] matr) thực hiện
kiểm tra ma trận có là ma cân bằng chẵn lẻ hay không, nếu có trả lại giá trị true, ngược lại trả
lại giá trị false. Ma trận cân bằng chẵn lẻ là ma trận có |No – Ne|≤ n, trong đó No tổng các phần
tử lẻ, và Ne là tổng các phần tử chẵn có trong ma trận.
Ví dụ:
Đầu vào: Đầu vào:
3 3
101 100
010 012
101 001
Đầu ra: false Đầu ra: true

3. Phương thức public static boolean isContainsHill(int[][] matr) kiểm tra xem
ma trận có chứa đồi hay không. Nếu có trả lại giá trị true, nếu không trả lại giá trị false. Ma
trận chứa đồi là ma trận có ít nhất 1 phần tử lớn hơn tất cả 8 phần tử xung quanh nó.
Đầu vào: Đầu vào:
3 3
112 100
463 012
211 001
Đầu ra: true Đầu ra: false

----------------------------------------Hết phần đề bài--------------------------------------

Chú ý: Sinh viên đọc cẩn thận các lưu ý sau đây để tránh mắc các lỗi khi làm bài

1. Sinh viên chỉ cần hoàn thiện các phương thức được yêu cầu, tuyệt đối không chỉnh sửa
nguyên mẫu (bao gồm danh sách đối và kiểu dữ liệu trả về) của các phương thức này, chỉ
viết thêm vào phần nội dung phương thức.
2. Sinh viên có thể viết thêm các phương thức phụ trợ khác nếu cần, tuy nhiên tốt nhất tránh
đặt tên trùng với tên các phương thức đã cho.
3. Các phương thức được chấm điểm độc lập, đúng phương thức nào sẽ được điểm phương
thức đó, tuy nhiên cần đảm bảo bài làm có thể biên dịch và chạy được. Các bài có lỗi biên
dịch, hoặc không chạy được sẽ nhận điểm 0.
4. Các phương thức sinh viên chưa làm đến, hoặc không hoàn thiện được thì để lại như
nguyên mẫu ban đầu, không chỉnh sửa, thêm bớt, tránh việc bài không biên dịch được.
5. Khi làm bài sinh viên có thể tự nộp bài và chấm điểm trên 1 bộ test mẫu, kết quả này chỉ là
kết quả tham khảo, bài làm của sinh viên sẽ được chấm lại trên một bộ test khác và thông
báo kết quả sau.
6. Bài được sử dụng để chấm điểm cho sinh viên là bài nộp lần cuối cùng trước khi hết giờ,
các bài nộp trước đó không tính, do vậy sinh viên hết sức chú ý và cẩn trọng khi nộp bài
lần cuối.

You might also like