TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
    KHOA CÔNG NGHỆ THÔNG TIN
    BỘ MÔN CÔNG NGHỆ PHẦN MỀM
    HỆ CHÍNH QUI
    MÔN: KỸ THUẬT LẬP TRÌNH
    GVLT: TS. ĐINH BÁ TIẾN




           HƯỚNG DẪN THỰC HÀNH

       TUẦN 08 – ĐỌC XUẤT FILE
NGUYỄN SƠN HOÀNG QUỐC
NGUYỄN HOÀNG KHAI
HỒ TUẤN THANH




        TP.HCM, ngày 28 tháng 04 năm 2011
htthanh@fit.hcmus.edu.vn


                                                        MỤC LỤC
1     Nội dung ...................................................................................................................... 3
2     Kỹ thuật đọc ghi file .................................................................................................... 3
    2.1    Đọc xuất file đơn giản ............................................................................................ 3
      2.1.1      Đọc dữ liệu file ................................................................................................ 3
      2.1.2      Ghi dữ liệu xuống file ..................................................................................... 6
    2.2    Đọc xuất mảng phân số .......................................................................................... 7
3     Pragma once .............................................................................................................. 11
    3.1    Bản chất của include ............................................................................................ 11
    3.2    Pragma once– Anh là ai ....................................................................................... 13
4     Bài tập trên lớp .......................................................................................................... 14
5     Bài tập về nhà ............................................................................................................ 15




                                                                                                                          Trang 2
htthanh@fit.hcmus.edu.vn


1 Nội dung
  -   Kỹ thuật đọc ghi file.
  -   Pragma once: anh là ai?
  -   Bài tập trên lớp
  -   Bài tập về nhà


2 Kỹ thuật đọc ghi file
2.1 Đọc xuất file đơn giản
  - Giả ta có một file input.txt chứa các thông tin được bố trí như sau:
       o Một số nguyên
       o Một số thực
       o Một chuỗi ko có khoảng trắng
       o Một chuỗi có khoảng trắng




  - Vấn đề: làm sao đọc file lên + làm sao ghi xuống file theo định dạng như vậy?

2.1.1 Đọc dữ liệu file
  - Nhớ:




  - Mở file. Lưu ý:


                                                                            Trang 3
htthanh@fit.hcmus.edu.vn

        o Ở đây thay vì truyền vào tên file, có thể truyền vào đường dẫn tuyệt đối của
          file.
        o Nếu chỉ truyền vào tên file, thì file input.txt phải đặt trong thư mục chứa
          source code.




        o Rất dễ nhầm lẫn giữa input.txt.txt và input.txt nếu trên máy tính của mình
          thiết lập Hide well-known extensions (ẩn các phần đuôi thông dụng).




  - Đọc dữ liệu: tương tự cin




                                                                             Trang 4
htthanh@fit.hcmus.edu.vn




  - Ở đây ta thấy có dòng boDoc.get()
       o Nếu bỏ (đánh dấu ghi chú) dòng này  khi đọc lên ten = chuỗi rỗng  kết
          quả khi ghi file




        o Do đó, cần thêm dòng code boDoc.get() sau khi đọc maso




                                                                        Trang 5
htthanh@fit.hcmus.edu.vn




  - Làm xong nhớ đóng file




2.1.2 Ghi dữ liệu xuống file
  - Nhớ:




  - Mở file




                               Trang 6
htthanh@fit.hcmus.edu.vn

  - Ghi dữ liệu xuống tương tự như cout




  - Làm xong nhớ đóng file




2.2 Đọc xuất mảng phân số
  - Giả sử ta có file MPS_In.txt chứa mảng các phân số có cấu trúc như sau:
       o Số phần tử
       o Danh sách các phân số




  - Vấn đề: làm sao đọc được dữ liệu từ file đó lên và ghi được file như vậy
  - Ở đây, ta bố trí project có 5 file:
       o Main.cpp: chứa hàm main


                                                                               Trang 7
htthanh@fit.hcmus.edu.vn

       o PhanSo.h và PhanSo.cpp: khai báo struct + khai báo và định nghĩa hàm
         đọc ghi phân số
       o MangPhanSo.h và MangPhanSo.cpp: khai báo struct + khai báo và định
         nghĩa hàm đọc ghi mảng phân số
  - PhanSo.h:




  - PhanSo.cpp:




                                                                       Trang 8
htthanh@fit.hcmus.edu.vn

  - MangPhanSo.h:




  - MangPhanSo.cpp:




                           Trang 9
htthanh@fit.hcmus.edu.vn




  - Main.cpp:




                           Trang 10
htthanh@fit.hcmus.edu.vn

  - Ghi tiếp file cũ  tự tìm hiểu (append mode ofstream C++)


3 Pragma once
  - Giả sử ta có 5 file như trong phần hướng dẫn trước. Bây giờ, thử bỏ 2 câu
    #pragma once trong 2 file .h. Trong file Main.cpp có đoạn code sau:




  - Tại sao? Vì sao thế ? 

3.1 Bản chất của include
  - Bản chất của include là sự thay thế. Tức là chỗ nào có include thì khi biên dịch,
    trình biên dịch sẽ lấy đoạn code trong file được include thay thế cho dòng include.
    Chẳng hạn. Với file Main.cpp sau:




  - Tương đương với:

                                                                             Trang 11
htthanh@fit.hcmus.edu.vn




  - Như vậy với file Main.cpp ban đầu:




  - Tương đương với:




                                         Trang 12
htthanh@fit.hcmus.edu.vn




  - Rõ ràng, nhìn vào đây ta thấy PhanSo được khai báo 2 lần  báo lỗi là phải 

3.2 Pragma once– Anh là ai
  - Pragma once là câu lệnh do Microsoft đưa ra, ngụ ý rằng: nếu file này đã include
    rồi thì ko cần include nữa  tránh lỗi include file PhanSo.h đến 2 lần.
  - Pragmace once ko nằm trong chuẩn của C/C++, nên một số trình biên dịch sẽ ko
    hiểu câu lệnh này.
  - Nó tương đương với việc:

                                                                            Trang 13
htthanh@fit.hcmus.edu.vn




  - _PHANSO_H_ ở đây có ý nghĩa là một chuỗi duy nhất  ko được trong một
    project, có 2 file .h mà ta define cùng 1 chuỗi này.


4 Bài tập trên lớp
  - Viết chương trình:
    1. Đọc vào một danh sách liên kết các phân số từ file DSPhanSo.in
    2. Xuất danh sách ra màn hình.
    3. Tìm ra phân số lớn nhất. Xuất phân số lớn nhất ra file PhanSoLonNhat.out.
    4. Xuất danh sách phân số ra file DSPhanSo.out
  - Yêu cầu:
       o Chia hàm, chia file
       o Struct
       o Danh sách liên kết
       o Dùng ifndef… (ko dùng pragma once




                                                                          Trang 14
htthanh@fit.hcmus.edu.vn


5 Bài tập về nhà
  1. Dữ liệu:
        a. Qui định cấu trúc file dữ liệu cho bài tập lớn
        b. Nhập dữ liệu mẫu cho các file
  2. Lập trình:
        a. Thực hiện các chức năng đọc các file dữ liệu lên
        b. Thực hiện các chức năng ghi dữ liệu xuống file (khi người dùng chọn chức
            năng thoát. VD: Quản trị viên chọn menu Thoat (thực hiện ghi dữ liệu
            xuống ở đây) Quay về menu hỏi đăng nhập, đăng ký hay Thoat
  3. Nộp bài:
        a. Thư mục Data: các file dữ liệu
        b. Thư mục Source Code: source code của yêu cầu (2) ở trên.
        c. Nén cả 2 thư mục thì 1 file nén duy nhất.




                                                                          Trang 15

nhập xuất file 2 c++

  • 1.
    TRƯỜNG ĐẠI HỌCKHOA HỌC TỰ NHIÊN TP.HCM KHOA CÔNG NGHỆ THÔNG TIN BỘ MÔN CÔNG NGHỆ PHẦN MỀM HỆ CHÍNH QUI MÔN: KỸ THUẬT LẬP TRÌNH GVLT: TS. ĐINH BÁ TIẾN HƯỚNG DẪN THỰC HÀNH TUẦN 08 – ĐỌC XUẤT FILE NGUYỄN SƠN HOÀNG QUỐC NGUYỄN HOÀNG KHAI HỒ TUẤN THANH TP.HCM, ngày 28 tháng 04 năm 2011
  • 2.
    htthanh@fit.hcmus.edu.vn MỤC LỤC 1 Nội dung ...................................................................................................................... 3 2 Kỹ thuật đọc ghi file .................................................................................................... 3 2.1 Đọc xuất file đơn giản ............................................................................................ 3 2.1.1 Đọc dữ liệu file ................................................................................................ 3 2.1.2 Ghi dữ liệu xuống file ..................................................................................... 6 2.2 Đọc xuất mảng phân số .......................................................................................... 7 3 Pragma once .............................................................................................................. 11 3.1 Bản chất của include ............................................................................................ 11 3.2 Pragma once– Anh là ai ....................................................................................... 13 4 Bài tập trên lớp .......................................................................................................... 14 5 Bài tập về nhà ............................................................................................................ 15 Trang 2
  • 3.
    htthanh@fit.hcmus.edu.vn 1 Nội dung - Kỹ thuật đọc ghi file. - Pragma once: anh là ai? - Bài tập trên lớp - Bài tập về nhà 2 Kỹ thuật đọc ghi file 2.1 Đọc xuất file đơn giản - Giả ta có một file input.txt chứa các thông tin được bố trí như sau: o Một số nguyên o Một số thực o Một chuỗi ko có khoảng trắng o Một chuỗi có khoảng trắng - Vấn đề: làm sao đọc file lên + làm sao ghi xuống file theo định dạng như vậy? 2.1.1 Đọc dữ liệu file - Nhớ: - Mở file. Lưu ý: Trang 3
  • 4.
    htthanh@fit.hcmus.edu.vn o Ở đây thay vì truyền vào tên file, có thể truyền vào đường dẫn tuyệt đối của file. o Nếu chỉ truyền vào tên file, thì file input.txt phải đặt trong thư mục chứa source code. o Rất dễ nhầm lẫn giữa input.txt.txt và input.txt nếu trên máy tính của mình thiết lập Hide well-known extensions (ẩn các phần đuôi thông dụng). - Đọc dữ liệu: tương tự cin Trang 4
  • 5.
    htthanh@fit.hcmus.edu.vn -Ở đây ta thấy có dòng boDoc.get() o Nếu bỏ (đánh dấu ghi chú) dòng này  khi đọc lên ten = chuỗi rỗng  kết quả khi ghi file o Do đó, cần thêm dòng code boDoc.get() sau khi đọc maso Trang 5
  • 6.
    htthanh@fit.hcmus.edu.vn -Làm xong nhớ đóng file 2.1.2 Ghi dữ liệu xuống file - Nhớ: - Mở file Trang 6
  • 7.
    htthanh@fit.hcmus.edu.vn -Ghi dữ liệu xuống tương tự như cout - Làm xong nhớ đóng file 2.2 Đọc xuất mảng phân số - Giả sử ta có file MPS_In.txt chứa mảng các phân số có cấu trúc như sau: o Số phần tử o Danh sách các phân số - Vấn đề: làm sao đọc được dữ liệu từ file đó lên và ghi được file như vậy - Ở đây, ta bố trí project có 5 file: o Main.cpp: chứa hàm main Trang 7
  • 8.
    htthanh@fit.hcmus.edu.vn o PhanSo.h và PhanSo.cpp: khai báo struct + khai báo và định nghĩa hàm đọc ghi phân số o MangPhanSo.h và MangPhanSo.cpp: khai báo struct + khai báo và định nghĩa hàm đọc ghi mảng phân số - PhanSo.h: - PhanSo.cpp: Trang 8
  • 9.
    htthanh@fit.hcmus.edu.vn -MangPhanSo.h: - MangPhanSo.cpp: Trang 9
  • 10.
    htthanh@fit.hcmus.edu.vn -Main.cpp: Trang 10
  • 11.
    htthanh@fit.hcmus.edu.vn -Ghi tiếp file cũ  tự tìm hiểu (append mode ofstream C++) 3 Pragma once - Giả sử ta có 5 file như trong phần hướng dẫn trước. Bây giờ, thử bỏ 2 câu #pragma once trong 2 file .h. Trong file Main.cpp có đoạn code sau: - Tại sao? Vì sao thế ?  3.1 Bản chất của include - Bản chất của include là sự thay thế. Tức là chỗ nào có include thì khi biên dịch, trình biên dịch sẽ lấy đoạn code trong file được include thay thế cho dòng include. Chẳng hạn. Với file Main.cpp sau: - Tương đương với: Trang 11
  • 12.
    htthanh@fit.hcmus.edu.vn -Như vậy với file Main.cpp ban đầu: - Tương đương với: Trang 12
  • 13.
    htthanh@fit.hcmus.edu.vn -Rõ ràng, nhìn vào đây ta thấy PhanSo được khai báo 2 lần  báo lỗi là phải  3.2 Pragma once– Anh là ai - Pragma once là câu lệnh do Microsoft đưa ra, ngụ ý rằng: nếu file này đã include rồi thì ko cần include nữa  tránh lỗi include file PhanSo.h đến 2 lần. - Pragmace once ko nằm trong chuẩn của C/C++, nên một số trình biên dịch sẽ ko hiểu câu lệnh này. - Nó tương đương với việc: Trang 13
  • 14.
    htthanh@fit.hcmus.edu.vn -_PHANSO_H_ ở đây có ý nghĩa là một chuỗi duy nhất  ko được trong một project, có 2 file .h mà ta define cùng 1 chuỗi này. 4 Bài tập trên lớp - Viết chương trình: 1. Đọc vào một danh sách liên kết các phân số từ file DSPhanSo.in 2. Xuất danh sách ra màn hình. 3. Tìm ra phân số lớn nhất. Xuất phân số lớn nhất ra file PhanSoLonNhat.out. 4. Xuất danh sách phân số ra file DSPhanSo.out - Yêu cầu: o Chia hàm, chia file o Struct o Danh sách liên kết o Dùng ifndef… (ko dùng pragma once Trang 14
  • 15.
    htthanh@fit.hcmus.edu.vn 5 Bài tậpvề nhà 1. Dữ liệu: a. Qui định cấu trúc file dữ liệu cho bài tập lớn b. Nhập dữ liệu mẫu cho các file 2. Lập trình: a. Thực hiện các chức năng đọc các file dữ liệu lên b. Thực hiện các chức năng ghi dữ liệu xuống file (khi người dùng chọn chức năng thoát. VD: Quản trị viên chọn menu Thoat (thực hiện ghi dữ liệu xuống ở đây) Quay về menu hỏi đăng nhập, đăng ký hay Thoat 3. Nộp bài: a. Thư mục Data: các file dữ liệu b. Thư mục Source Code: source code của yêu cầu (2) ở trên. c. Nén cả 2 thư mục thì 1 file nén duy nhất. Trang 15