Tài liệu thực hành Lập trình hướng đối tượng - Lab 14: Thao tác với tập tin
Lập trình hướng đối tượng
Thao tác với tập tin
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
HƯỚNG DẪN THỰC HÀNH
Luyện tập với file – getter – đa hình
Giáo viên lý thuyết:
ThS Lê Xuân Định
Giáo viên thực hành:
ThS Lê Xuân Định
ThS Trần Huy Quang
ThS Trần Duy Quang
Trần Minh Khoa
1/10
Lập trình hướng đối tượng
Thao tác với tập tin
1 Mục tiêu
- Làm quen với các luồng nhập xuất tập tin văn bản.
- Viết lớp đơn giản nhất có construct và getter.
- Ứng dụng tính đa hình để quản lý chung các đối tượng thuộc các lớp khác nhau.
2 Tập tin trong C++
C++ xem tập tin là một chuỗi tuần tự các byte (còn được gọi là dòng dữ liệu – stream). Một tập tin sẽ
kết thúc với một kí tự đánh dấu end-of-file hoặc tùy thuộc vào cấu trúc dữ liệu của hệ điều hành biểu
diễn tập tin.
Hình 1 – Góc nhìn của C++ đối với một tập tin n byte [1]
Hình 2 – Một phần cấu trúc phân cấp của cây kế thừa theo mẫu nhập xuất [1]
2/10
Lập trình hướng đối tượng
Thao tác với tập tin
Tutorial 1: Làm quen với việc ghi dữ liệu ra tập tin text.
Yêu cầu: Viết chương trình nhập vào thông tin ngân hàng của 5 khách hàng, lưu vào tập tin clients.txt.
Thông tin của mỗi khách hàng được lưu trên từng dòng.
Mô tả định dạng của tập tin clients.txt cần tạo ra
5
Có 5 khách hàng trong tập
tin này
100
15000000
–
Đỗ Nguyên Kha
Đặng Hoàng Hải
Trương Phước Lộc
–
–
–
Thông tin khách hàng thứ
nhất
200
75950000
–
300
–
90000000
400 – Bùi Tấn Lộc – 78000000
500 Trần Minh Triết
–
-
300000000
Biết rằng thứ tự lưu trữ là:
+ Mã khách hàng: chuỗi có độ dài cố định 3 kí tự.
+ Tên khách hàng: chuỗi có độ dài tối đa 25 kí tự.
+
Số tiền đang có: số nguyên. Có thể âm, dương hoặc
=
0
3/10
Lập trình hướng đối tượng
Chi tiết mã nguồn như sau
Thao tác với tập tin
Mã nguồn hàm main
4/10
Lập trình hướng đối tượng
Thao tác với tập tin
Lớp Client lúc này có thể cài đặt như sau:
5/10
Lập trình hướng đối tượng
Thao tác với tập tin
Những điểm cần chú ý của mã nguồn trên:
1. Duyệt qua danh sách đối tượng
Trong hàm main dòng 55 là kĩ thu ật duyệt đối tượng có từ C++11. Sử dụng từ khóa auto để cho trình
biên dịch tự động suy ra kiểu của đối tượng, sử dụng & để lấy tham chiếu đến nhằm tránh tạo bản sao
khi duyệt qua đối tượng.
2. Chuyển đối tượng sang chuỗi
Sử dụng stringstream có điểm đặc biệt là giống với cout, dùng chung toán tử, nhưng viết biến ra một
stream riêng, khi cần xuất ra tập tin thì chuyển sang chuỗi với hàm str() (mã nguồn lớp client dòng 27).
Tutorial 2: Làm quen với việc đọc tập tin text.
Yêu cầu: Viết chương trình đ ọc thông tin ngân hàng của các khách hàng trong tập tin và hiển
thị ra màn hình.
Mô tả cách thức tổ chức của tập tin clients.txt cần đọc
5
Có 5 khách hàng trong
tập tin này
100 – Đỗ Nguyên Kha –
15000000
Thông tin khách hàng thứ
nhất
200 – Đặng Hoàng Hải – -
75950000
Khách hàng này có số
tiền âm!!!
300 – Trương Phước Lộc –
90000000
400 – Bùi Tấn Lộc – 0.0
Khách hàng này ko có
tiền
500 – Trần Minh Triết - -
300000000
Khách hàng này có số
6/10
Lập trình hướng đối tượng
Thao tác với tập tin
tiền âm!!!
Mã nguồn chi tiết của chương trình như sau
+ Mã nguồn hàm main
7/10
Lập trình hướng đối tượng
Thao tác với tập tin
+ Lớp Client cần bổ sung hàm Parse như sau:
Một số vấn đề cần chú ý từ mã nguồn trên
Cách tách chuỗi
Sử dụng hàm find của std::string để tìm vị trí chuỗi con xuất hiện đầu tiên, sau đó tạo ra chuỗi
con từ các thông tin có được và đưa vào một vector tokens.
8/10
Lập trình hướng đối tượng
Thao tác với tập tin
Tiếp theo, cập nhật vị trí cần tìm ban đầu và lần lượt cho các chuỗi con tìm thấy vào vector
tokens.
Cần chú ý là chuỗi con cuối cùng cần phải được xử lí riêng.
Chuyển chuỗi sang số
Hai hàm chuyển cơ bản là stoi – chuyển chuỗi sang số nguyên và stod – chuyển chuỗi sang số
thực.
3 Bài tập cá nhân
Năm 2030, loài người đã có những bước tiến đáng kể trong việc chinh phục không gian.
Nối tiếp sau sự kiện đưa tàu thăm dò Curiosity lên sao H ỏa vào năm 2014, con người
phái tiếp tàu mẹ Mothership tới nơi này với mục đích xây dựng căn cứ và tạo môi trường
thích hợp cho loài người sinh sống ở đây vào năm 2040.
Hàng ngày, sử dụng công nghệ in 3D, tàu mẹ nhận lệnh từ căn cứ ở Trái Đất và tạo ra các
robot phục vụ những công việc nhất định tại sao Hỏa. Có 3 loại robot được sử dụng chủ
yếu.
• Alpha: Robot công phá, sử dụng năng lượng mặt trời để di chuyển, mỗi 1km sử
dụng 100 W năng lượng, dùng năng lượng nhiệt hạch để phá đá. Để tạo ra cần
5000 J năng lượng, 4 kg vàng, 2 kg sắt, chế tạo trong 2h.
• Beta: Robot vận chuyển, sử dụng năng lượng mặt trời để di chuyển, mỗi 1km sử
dụng 200 W năng lượng. Mỗi robot beta có thể vận chuyển tối đa 50kg đất đá. Để
tạo ra cần 4000 J năng lượng, 6 kg vàng, không cần sắt, chế tạo trong 3h.
• Omega: Robot xây dựng, không có khả năng di chuyển, mỗi khi di chuyển phải
nhờ tới robot Beta. Mỗi h làm việc tốn 300 W năng lượng. Để tạo ra cần 6000 J
năng lượng, 10 kg sắt, không cần vàng, chế tạo trong 15h.
Cuối mỗi ngày, Mothership sẽ gởi thông tin tiêu tốn các tài nguyên của mình dùng trong
chế tạo robot về căn cứ ở Trái Đất để Bộ chỉ huy quyết định phương án tiếp tế tài nguyên.
Sử dụng phương pháp lập trình hướng đối tượng, hãy viết chương trình trợ giúp
tàu mẹ Mothership làm các việc như sau:
9/10
Lập trình hướng đối tượng
Hướng dẫn thực hành
1. Đọc danh sách các robot cần phải chế tạo từ tập tin (xem bên dưới) và tạo ra các
robot tương ứng.
2. Thống kê đã tạo ra tổng cộng bao nhiêu robot, và bao nhiêu con mỗi loại.
3. Thống kê tổng năng lượng đã tiêu thụ, tổng thời gian đã sử dụng để chế tạo toàn
bộ các robot.
4. Ứng với mỗi loại tài nguyên vàng, sắt, thống kê tổng khối lượng đã sử dụng tương
ứng.
5. Cho tất cả những robot Alpha và robot Beta di chuyển 10 km. Thống kê tổng năng
lượng các robot đã tiêu thụ cho việc di chuyển.
Lưu ý:
• Vì lí do hỏng hóc của bộ xử lí trung tâm trong quá trình hạ cánh, tàu mẹ
Mothership không thể thực hiện được phép tính nhân. ( Chỉ sử dụng phép cộng
và phép đóng gói đối tượng.)
• Tuy mỗi loại robot có cấu trúc dữ liệu và hành động khác nhau, nhưng tàu mẹ chỉ
được quyền tạo ra một danh sách robot mà thôi.
• Để kiểm tra loại robot, C++ dùng toán tử typeid để kiểm tra kiểu (lớp), VD
“typeid(*robot)==typeid(Alpha)”. Để sử dụng 1 robot với giao diện cụ
thể, C++ dùng toán tử ép kiểu từ giao diện tổng quát, VD “Alpha* a =
dynamic_cast <Alpha*>(robot)”
Tập tin input mẫu: Dòng đầu cho biết tổng số robot, các dòng còn lại lần lượt là loại
robot phải tạo ra.
7
Beta
Omega
Alpha
Beta
Beta
Omega
Alpha
10
Bạn đang xem tài liệu "Tài liệu thực hành Lập trình hướng đối tượng - Lab 14: Thao tác với tập tin", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
File đính kèm:
tai_lieu_thuc_hanh_lap_trinh_huong_doi_tuong_lab_14_thao_tac.pdf

