HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG KHOA CÔNG NGHỆ ĐA PHƯƠNG TIỆN BÁO CÁO CUỐI KỲ MÔN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG C++ Đề tài Phát triển phần mềm quản lý sinh viên 2 LỜI CẢM ƠN Đầu tiên, em xin gửi l.
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA CÔNG NGHỆ ĐA PHƯƠNG TIỆN
BÁO CÁO CUỐI KỲ MÔN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG C++
Đề tài: Phát triển phần mềm quản lý sinh viên
Trang 2
2
LỜI CẢM ƠN
Đầu tiên, em xin gửi lời cảm ơn sâu sắc đến Học viện Công nghệ Bưu chính
Viễn thông đã đưa học phần “Lập trình hướng đối tượng với C++” vào trong
chương trình giảng dạy Đặc biệt, em xin gửi lời cảm ơn sâu sắc đến giảng viên
bộ môn thầy Tạ Chí Hiếu đã dạy dỗ, rèn luyện và truyền đạt những kiến thức quý báu cho em trong suốt học kỳ vừa qua Trong thời gian được tham dự lớp học của thầy, em đã được tiếp thu học hỏi thêm nhiều kiến thức bổ ích, học tập được tinh thần làm việc hiệu quả, nghiêm túc Đây thực sự là những điều rất cần thiết và hữu ích cho quá trình học tập và công tác sau này của em
Bộ môn “Lập trình hướng đối tượng với C++” thực sự là một môn học thú
vị và bổ ích Tuy nhiên, hiện nay tình hình dịch bệnh Covid-19 đang diễn biến rất căng thẳng, do đó thời gian học tập, trao đổi và thực hành thực tế trên giảng đường không nhiều Em đã cố gắng hoàn thiện Báo cáo cuối kỳ tuy nhiên những hiểu biết và kỹ năng về môn học này của em vẫn còn nhiều hạn chế Do đó, sản phẩm cuối cùng của đề tài mà em đã lựa chọn còn có những thiếu sót và những khía cạnh chưa chuẩn xác, kính mong giảng viên bộ môn xem xét và góp ý cho em để bài Báo cáo cuối kỳ của em được hoàn thiện hơn
Em xin chân thành cảm ơn!
Trang 33
Contents
LỜI CẢM ƠN 2
A GIỚI THIỆU 7
I Giới thiệu đề tài: 7
II Các chức năng có trong project 7
1 Thêm sinh viên 7
2 Xóa sinh viên 8
3 Sửa thông tin sinh viên 9
4 In danh sách sinh viên 9
B MÔ HÌNH LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG 13
I Giới thiệu về lập trình hướng đối tượng 13
II Đặc điểm của lập trình hướng đối tượng 13
III Một số khái niệm cơ bản của Lập trình hướng đối tượng 13
1 Đối tượng (Object) 13
2 Lớp (Class) 13
3 Đóng gói dữ liệu (Encapsulation) 13
4 Kế thừa (Inheritance) 14
5 Đa hình (Polymorphism) 14
6 Lập trình hướng đối tượng trong C++ 14
C PHÂN TÍCH DỰ ÁN 15
1 Class ngayThangNam 15
1.1 Thuộc tính 15
1.2 Các phương thức: 15
2 Class ThongTinCaNhan 18
2.1 Thuộc tính 18
2.2 Các phương thức 19
3 Class sinhvien: public ThongTinCaNhan (Kế thừa từ class ThongTinCaNhan ) 20
3.1 Thuộc tính 20
3.2 Các phương thức 20
4 Class sinhvienketoan : public sinhvien 22
4.1 Thuộc tính 22
4.2 Các phương thức 22
Trang 44
5 Class sinhviencongnghe : public sinhvien 23
5.1 Thuộc tính 23
5.2 Các phương thức 23
6 Class quanLyDanhSachSinhvien 24
6.1 Thuộc tính 24
6.2 Các phương thức 25
7 Các tính chất hướng đối tượng được thể hiện thông qua chương trình quản lý sinh viên 29
7.1 Tính chất của Hàm bạn ( friend function) 29
7.2 Tính trừu tượng hóa dữ liệu (Data abstraction) liên quan tới việc chỉ cung cấp thông tin cần thiết tới bên ngoài và ẩn chi tiết cơ sở của chúng 29 7.3 Tính đóng gói 30
7.4 Tính kế thừa 31
7.5 Tính đa hình 31
D KẾT LUẬN 33
Trang 55
DANH MỤC HÌNH ẢNH
Hình 1 Giao diện chức năng thêm sinh viên 8
Hình 2 Giao diện xóa sinh viên 8
Hình 3 Giao diện sửa thông tin sinh viên 9
Hình 4 Giao diện in danh sách sinh viên 10
Hình 5 Giao diện in danh sách sinh viên kế toán 10
Hình 6 Giao diện in danh sách sinh viên công nghệ thông tin 11
Hình 7 Giao diện in danh sách sinh viên theo GPA 11
Hình 8 Giao diện in danh sách sinh viên đạt được phần thưởng từ nhà trường 12 Hình 9 Miêu tả thuộc tính class ngày tháng năm 15
Hình 10 Miêu tả hàm khởi tạo tham số mặc định 15
Hình 11 Hàm khởi tạo có tham số 15
Hình 12 Hàm hủy 15
Hình 13 Hàn setter bảo đảm tính trừu tượng của lập trình hướng đối tượng 16
Hình 14 Hàm setter các thuộc tính 16
Hình 15 Hàm lấy đối tượng ngày tháng năm 16
Hình 16 Các hàm bạn 16
Hình 17 Kiểm tra năm nhuận 17
Hình 18 Kiểm tra ngày tháng năm 17
Hình 19 Kiểm tra ngày nhập có hợp lệ hay không 18
Hình 20 Nhập các giá trị cho đối tượng 18
Hình 21 In ra màn hình thông tin dưới dạnh dd/mm/yyyy 18
Hình 22 Các thuộc tính Class Hoten, quequan, ngaysinh 18
Hình 23 Hàm khởi tạo có tham số 19
Hình 24 Khởi tạo không tham số mặc định 19
Hình 25 Hủy đối tượng trả lại bộ nhớ cho máy tính 19
Hình 26 Thiết lập các giá trị thuộc tính cho đối tượng 19
Hình 27 Các hàm getter 19
Hình 28 In thông tin cá nhân 20
Hình 29 Các thuộc tính 20
Hình 30 Hàm khởi tạo mặc định không tham số 20
Hình 31 Hàm khởi tạo có tham số 20
Hình 32 Hàm hủy đối tượng trả bộ nhớ về cho máy tính 20
Hình 33 Các hàm getter 21
Hình 34 Các hàm getter 21
Hình 35 Hàm in thông tin ra màn hình 21
Hình 36 Hàm ảo 22
Hình 37 Hàm ảo 22
Hình 38 Hàm khởi tạo tham số 22
Hình 39 Hàm xét danh hiệu được đa hình nạp chồng 23
Hình 40 Hàm phần thưởng được đa hình nạp chồng 23
Hình 41 Hàm khởi tạo đối tượng sinh viên công nghệ 23
Trang 66
Hình 42 Hàm danh hiệu được đa hình nạp chồng 24
Hình 43 Hàm phần thường được đa hình nạp chồng 24
Hình 44 Các thuộc tính 24
Hình 45 Hàm khởi tạo danh sách 25
Hình 46 Hàm tăng đếm số 25
Hình 47 Hàm tạo một sinh viên mới 25
Hình 48 Tìm sinh viên theo mã 26
Hình 49 Xóa sinh viên theo mã sinh viên 26
Hình 50 Sửa thông tin sinh viên 27
Hình 51 Các sinh viên thuộc khoa CNTT thì xuất ra màn hình 27
Hình 52 Các sinh viên thuộc khoa kế toán xuất ra màn hình 28
Hình 53 In toàn bộ sinh viên ra màn hình 28
Hình 54 Xuất danh sách sinh viên kèm phần thưởng 28
Hình 55 Xuất danh sách sinh viên theo GPA 28
Hình 56 Sắp xếp danh sách sinh viên theo GPA 29
Hình 57 Hàm friend 29
Hình 58 Trường Private 29
Hình 59 Hàm sắp xếp được gọi ở các hàm khác thuộc lớp quanlydanhsachsinhvien 30
Hình 60 Tính đóng gói 30
Hình 61 Tính kế thừa 31
Hình 62 Class sinhvienketoan đa hình từ Class sinhvien 31
Hình 63 Class sinhviencongnghe đa hình từ Class sinhvien 32
Trang 77
A GIỚI THIỆU
I Giới thiệu đề tài:
Với số lượng sinh viên lớn và nhiều thông tin như hiện nay, thì việc bổ sung các chương trình quản lí sinh viên là điều hoàn toàn cần thiết, không chỉ giúp cán
bộ nhân viên cũng như giáo viên nhà trường cập nhật thông tin sinh viên, mà chương trình còn giúp nhà trường đánh giá,xếp hạng, cũng như trao thưởng cho sinh viên có điểm GPA cao
Có một số phương pháp lập trình truyền thống như lập trình tuyến tính, lập trình cấu trúc… Với lập trình tuyến tính thì một số ứng dụng phức tạp không thể thực hiện được Trong đó với lập trình cấu trúc, chúng ta không quản lí được sự thay đổi dữ liệu khi có nhiều chương trình cùng sử dụng một biến chung, không tiết kiệm được tài nguyên… Để khắc phục một số hạn chế trên, người ta xây dựng một số mô hình lập trình tiên tiến hơn trong đó có lập trình hướng đối tượng Với thời lượng quy định của một báo cáo môn học cũng như dự án Nội dung được nêu trong báo cáo sẽ tập trung vào hình lập trình hướng đối tượng
II Các chức năng có trong project
1 Thêm sinh viên
Cán bộ nhân viên sẽ thêm thông tin sinh viên vào danh sách như tên sinh viên, ngày tháng năm sinh, quê quán, điểm số, mã lớp, mã sinh viên
Trang 88
Hình 1 Giao diện chức năng thêm sinh viên
2 Xóa sinh viên
Với những sinh viên sai thông tin, cán bộ nhân viên có thể xóa các sinh viên
có thông tin sai
Hình 2 Giao diện xóa sinh viên
Trang 99
3 Sửa thông tin sinh viên
Cán bộ nhân viên bên cạnh việc xóa toàn bộ dữ liệu thông tin của sinh viên ra khỏi danh sách, thì cán bộ nhân viên cũng có thể sửa từng thông tin của sinh viên
Hình 3 Giao diện sửa thông tin sinh viên
4 In danh sách sinh viên
Chương trình có thể in danh sách sinh viên đã thêm, thậm chí chương trình có thể lọc ra danh sách sinh viên theo ngành, theo GPA tăng dần, danh sách sinh viên đủ điều kiện nhận phần thưởng của nhà trường
Trang 1010
Hình 4 Giao diện in danh sách sinh viên
Hình 5 Giao diện in danh sách sinh viên kế toán
Trang 1111
Hình 6 Giao diện in danh sách sinh viên công nghệ thông tin
Hình 7 Giao diện in danh sách sinh viên theo GPA
Trang 1212
Hình 8 Giao diện in danh sách sinh viên đạt được phần thưởng từ nhà trường
Trang 1313
B MÔ HÌNH LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
I Giới thiệu về lập trình hướng đối tượng
Trong lập trình hướng đối tượng: Người ta coi các thực thể trong chương trình
là các đối tượng và sau đó, người ta trừu tượng hoá đối tượng thành lớp đối tượng
Dữ liệu được tổ chức thành các thuộc tính của lớp
Người ta ngăn chặn việc thay đổi tuỳ tiện dữ liệu trong chương trình bằng các cách giới hạn truy nhập, chỉ cho phép truy nhập dữ liệu thông qua đối tượng, thông qua các phương thức mà đối tượng được cung cấp
Quan hệ giữa các đối tượng là quan hệ ngang hàng hoặc quan hệ kế thừa: Nếu lớp B kế thừa từ lớp A thì A được gọi là lớp cơ sở và B được gọi là lớp dẫn xuất Ngôn ngữ lập trình hướng đối tượng phổ biến hiện nay là Java và C++ Tuy nhiên, C++ mặc dù cũng có những đặc trưng cơ bản của lập trình hướng đối tượng nhưng vẫn không phải là ngôn ngữ lập trình thuần hướng đối tượng
II Đặc điểm của lập trình hướng đối tượng
Đóng gói dữ liệu: dữ liệu luôn được tổ chức thành các thuộc tính của lớp đối tượng Việc truy nhập đến dữ liệu phải thông qua các phương thức của đối tượng lớp
Sử dụng lại mã nguồn: việc sử dụng lại mã nguồn được thể hiện thông qua cơ chế kế thừa Cơ chế này cho phép các lớp đối tượng có thể kế thừa từ các lớp đối tượng khác Khi đó, trong các lớp dẫn xuất, có thể sử dụng các phương thức (mã nguồn) của các lớp cơ sở mà không cần phải định nghĩa lại
III Một số khái niệm cơ bản của Lập trình hướng đối tượng
1 Đối tượng (Object)
Trong lập trình hướng đối tượng, đối tượng được coi là đơn vị cơ bản nhỏ nhất Các dữ liệu và cách xử lí chỉ là thành phần của đối tượng mà không được coi là thực thể Một đối tượng chứa các dữ liệu của riêng nó, đồng thời có các phương thức (hành động) thao tác trên các dữ liệu đó:
Đối tượng = Dữ liệu + Phương thức
2 Lớp (Class)
Khi có nhiều đối tượng giống nhau về mặt dữ liệu và phương thức, chúng được nhóm lại với nhau và gọi chung là lớp: Lớp là sự trừu tượng hoá của đối tượng Đối tượng là một thể hiện của lớp
3 Đóng gói dữ liệu (Encapsulation)
Các dữ liệu được đóng gói vào trong đối tượng Mỗi dữ liệu có một phạm vi truy nhập riêng Không thể truy nhập đến dữ liệu một cách tự do như lập trình
Trang 1414
cấu trúc Muốn truy nhập đến dữ liệu, phải thông qua các đối tượng, nghĩa là phải
sử dụng các phương thức mà đối tượng cung cấp mới có thể truy nhập đến dữ liệu của đối tượng đó Tuy nhiên, vì C++ chỉ là ngôn ngữ lập trình nửa đối tượng, cho nên C++ vẫn cho phép định nghĩa các biến dữ liệu và các hàm tự do, đây là kết quả kế thừa từ ngôn ngữ C, một ngôn ngữ lập trình thuần cấu trúc
4 Kế thừa (Inheritance)
Tính kế thừa của lập trình hướng đối tượng cho phép một lớp có thể kế thừa
từ một số lớp đã tồn tại Khi đó, lớp mới có thể sử dụng dữ liệu và phương thức của các lớp cơ sở như là của mình Ngoài ra, lớp dẫn xuất còn có thể bổ sung thêm một số dữ liệu và phương thức Ưu điểm của kế thừa là khi thay đổi dữ liệu của một lớp, chỉ cần thay đổi các phương thức trong phạm vi lớp cơ sở, mà không cần thay đổi trong các lớp dẫn xuất
5 Đa hình (Polymorphism)
Đa hình là khái niệm luôn đi kèm với kế thừa Do tính kế thừa, một lớp có thể
sử dụng lại các phương thức của lớp khác Tuy nhiên, nếu cần thiết, lớp dẫn xuất cũng có thể định nghĩa lại một số phương thức của lớp cơ sở Đó là sự nạp chồng phương thức trong kế thừa Nhờ sự nạp chồng phương thức này, ta chỉ cần gọi tên phương thức bị nạp chồng từ đối tượng mà không cần quan tâm đó là đối tượng của lớp nào Chương trình sẽ tự động kiểm tra xem đối tượng là thuộc kiểu lớp cơ sở hay thuộc lớp dẫn xuất, sau đó sẽ gọi phương thức tương ứng với lớp
đó Đó là tính đa hình
6 Lập trình hướng đối tượng trong C++
Vì C++ là một ngôn ngữ lập trình được mở rộng từ một ngôn ngữ lập trình cấu trúc C Cho nên, C++ được xem là ngôn ngữ lập trình nửa hướng đối tượng, nửa hướng cấu trúc
Những đặc trưng hướng đối tượng của C++ Cho phép định nghĩa lớp đối tượng Cho phép đóng gói dữ liệu vào các lớp đối tượng Cho phép định nghĩa phạm vi truy nhập dữ liệu của lớp bằng các từ khóa phạm vi: public, protected, private Cho phép kế thừa lớp với các kiểu kế thừa khác nhau tùy vào từ khoá dẫn xuất Cho phép lớp dẫn xuất sử dụng các phương thức của lớp cơ sở (trong phạm
vi quy định) Cho phép định nghĩa chồng phương thức trong lớp dẫn xuất Những hạn chế hướng đối tượng của C++
Những hạn chế này là do C++ được phát triển từ một ngôn ngữ lập trình thuần cấu trúc C Cho phép định nghĩa và sử dụng các biến dữ liệu tự do Cho phép định nghĩa và sử dụng các hàm tự do Ngay cả khi dữ liệu được đóng gói vào lớp, dữ liệu vẫn có thể truy nhập trực tiếp như dữ liệu tự do bởi các hàm bạn, lớp bạn (friend) trong C++
Trang 151.2.1 Hàm khởi tạo không tham số
Hàm khởi tạo không tham số mặc định
Hình 10 Miêu tả hàm khởi tạo tham số mặc định
1.2.2 Hàm khởi tạo có tham số
Khi tạo một đối tượng ngayThangNam mới ta có thể khởi tạo theo giá trị mà người dùng mong muốn bằng cách nhập vào các tham số ngày, thang, nam
Hình 11 Hàm khởi tạo có tham số
Trang 161.2.6 Hàm lấy đối tượng ngayThangNam
Hàm lấy ra đối tượng hiện ngayThangNam với các giá trị hiện tại
Hình 15 Hàm lấy đối tượng ngày tháng năm
1.2.7 Các hàm bạn ( hàm Friend)
Các hàm bạn này được khai báo cho các hàm ngoài phạm vi class có thể sử dụng trực tiếp các trường dữ liệu mà không cần tới các phương thức trừu tượng
Hình 16 Các hàm bạn
1.2.7.1 Kiểm tra năm nhuận
Năm nhuận là năm chia hết cho 4 và không chia hết cho 100 hoặc là năm chia hết cho 400
Trang 1717
Hình 17 Kiểm tra năm nhuận
1.2.7.2 Kiểm tra ngày trong tháng
Hàm trả về số ngày thuộc tháng được đưa vào nhằm hỗ trợ kiểm tra tính hợp
lệ của ngayThangNam nhập vào
Hình 18 Kiểm tra ngày tháng năm
1.2.7.3 Kiểm tra ngày nhập vào có hợp lệ hay không
Nếu ngày hợp lệ thì trả về true còn sai thì trả về false năm >0, tháng >=1,
tháng <=12, ngày phải đúng theo tháng
Trang 1818
Hình 19 Kiểm tra ngày nhập có hợp lệ hay không
1.2.8 Hàm nhập data cho đối tượng từ bàn phím
Hình 20 Nhập các giá trị cho đối tượng
1.2.9 In ngày tháng năm ra màn hình dưới dạng dd/mm/yyyy
Hình 21 In ra màn hình thông tin dưới dạnh dd/mm/yyyy
2 Class ThongTinCaNhan
2.1 Thuộc tính
Hình 22 Các thuộc tính Class Hoten, quequan, ngaysinh
Các thuộc tính thuộc class là hoTen, queQuan, ngaysinh biểu thị cho thông tin
cơ bản của một cá nhân
Trang 1919
2.2 Các phương thức
2.2.1 Hàm khởi tạo có tham số
Hình 23 Hàm khởi tạo có tham số
Khởi tạo một đối tượng ThongTinCaNhan với các thông tin được người dùng yêu cầu
2.2.2 Hàm khởi tạo không có tham số
Hình 24 Khởi tạo không tham số mặc định
Trang 2020
2.2.6 In thông tin cá nhân ra màn hình
Hình 28 In thông tin cá nhân
3 Class sinhvien: public ThongTinCaNhan (Kế thừa từ class
3.2.1 Hàm khởi tạo không tham số
Hình 30 Hàm khởi tạo mặc định không tham số
3.2.2 Hàm khởi tạo có tham số
Khởi tạo đối tượng với các tham số người dùng yêu cầu Ở đây có gọi lại hàm khởi tạo của lớp thông tin cá nhân mà lớp sinh viên kế thừa
Hình 31 Hàm khởi tạo có tham số
.3.2.3 Hàm hủy
Hình 32 Hàm hủy đối tượng trả bộ nhớ về cho máy tính