TRƯỜNG ĐẠI HỌC ĐIỆN LỰCKHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO CHUYÊN ĐỀ HỌC PHẦN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG ĐỀ TÀI : XÂY DỰNG CHƯƠNG TRÌNH QUẢN LÝ DOANH NGHIỆP NHẬN SINH VIÊN THỰC TẬP Sinh viê
Trang 1TRƯỜNG ĐẠI HỌC ĐIỆN LỰC
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO CHUYÊN ĐỀ HỌC PHẦN
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
ĐỀ TÀI :
XÂY DỰNG CHƯƠNG TRÌNH QUẢN LÝ DOANH NGHIỆP
NHẬN SINH VIÊN THỰC TẬP
Sinh viên thực hiện: NGUYỄN ANH ĐỨC
Giảng Viên Hướng Dẫn: ThS NGUYỄN ĐÌNH THÁI
Ngành: CÔNG NGHỆ THÔNG TIN
Môn học: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Hà Nội, tháng 8 năm 2024
Trang 2PHIẾU CHẤM ĐIỂM
Sinh viên thực hiện
Họ và tên sinh viên Nội dung thực hiện Chữ ký
lý doanh nghiệp nhận sinh viên thực tập
Giảng viên chấm
Họ và tên giảng viên Điểm Ghi chú
Giảng viên chấm 1
(Ký, ghi rõ họ tên)
Giảng viên chấm 2
(Ký, ghi rõ họ tên)
Ý kiến của GVHD:………
………
………
Trang 3I Mô tả tóm tắt báo cáo đề tài
- Xây dựng chương trình quản lý doanh nghiệp nhận sinh viên thực tập với các yêu cầu:
Nhập thông tin doanh nghiệp
Xây dựng phương thức nhập xuất
Xây dựng Hàm khởi tạo không có tham số, gán các giá trị thuộc tính mặc định
Xây dựng Hàm khởi tạo có tham số
Xây dựng Hàm hủy
Định dạng lại đầu ra ngày/tháng/năm
Xuất danh sách doanh nghiệp nhận số lượng sinh viên trong khoảng [a,b]
và sắp xếp theo thứ tự giảm dần
II Nội dung thực hiện
- Chương I: Giới thiệu chung
- Chương II: Phân tích và Lập trình
- Chương III: Kiểm thử và Kết luận
III Kết quả đạt được
- Hoàn thành đề cương chuyên đề học phần môn Lập trình hướng đối tượng
- Xây dựng được chương trình hoàn chỉnh, đơn giản phù hợp
Giảng viên hướng dẫn
ThS Nguyễn Đình Thái
Sinh viên thực hiện
Nguyễn Anh Đức
Trang 4MỤC LỤC
LỜI NÓI ĐẦU 2
CHƯƠNG I: GIỚI THIỆU CHUNG 3
I LÝ DO VÀ MỤC ĐÍCH 3
II ĐỊNH NGHĨA BÀI TOÁN: 3
CHƯƠNG II: PHÂN TÍCH VÀ LẬP TRÌNH 4
I PHÂN TÍCH 4
II LẬP TRÌNH 4
1 Lập cơ sở dữ liệu doanh nghiệp 4
2 Phương thức nhập dữ liệu đầu vào 6
3 Phương thức xuất dữ liệu 8
CHƯƠNG III: KIỂM THỬ VÀ KẾT LUẬN 13
I KIỂM THỬ CHƯƠNG TRÌNH 13
1.Tạo cơ sở dữ liệu doanh nghiệp và hiển thị 13
2 Hiển thị danh sách doanh nghiệp nhận sinh viên thực tập trong khoảng [a, b] và sắp xếp theo thứ tự giảm dần 13
II KẾT LUẬN 14
1 Kết quả 14
2 Bài học rút ra 14
TÀI LIỆU THAM KHẢO 16
Trang 5LỜI CẢM ƠN
Đề tài “ Xây dựng chương trình quản lý doanh nghiệp nhận sinh viên thực tập” là kết quả của qua trình nghiên cứu và thực hiện của em trong suốt
tin, Trường Đại học Điện lực Để hoàn thành đề tài này, em đã nhận được sự quan tâm, giúp đỡ quý báu từ Quý thầy cô cùng các bạn đồng học
Trước hết, em xin cám ơn Khoa Công nghệ thông tin, Trường Đại học Điện lực đã tạo môi trường học tập và rèn luyện thuận lợi, trang bị cho em những kiến thức và kỹ năng bổ ích, giúp em có thể áp dụng và hoàn thành tốt báo cáo này
Đặc biệt, em xin gửi lời cám ơn sâu sắc tới thầy Nguyễn Đình Thái, người
đã trực tiếp hướng dẫn và chỉ bảo em trong suốt quá trình học tập và nghiên cứu Với sự tận tâm và nhiệt huyết trong công việc, cô đã trao đổi và hỗ trợ góp
ý kịp thời, đúng đắn, giúp em vượt qua khó khăn và hoàn thiện báo cáo đề tài một cách tốt nhất
Em cũng xin trân trọng cảm ơn Ban giám hiệu cùng toàn thể thầy cô giáo Trường đại học Điện lực đã tạo cơ hội cho em được học tập, nghiên cứu tại trường, giúp em có thêm những kiến thức và kinh nghiệm thực tế để phục vụ cho quá trình thực hiện báo cáo
Em xin chân thành cảm ơn !
Hà Nội, ngày 04 tháng 8 năm 2024
Sinh viên thực hiện
Nguyễn Anh Đức
Trang 6LỜI NÓI ĐẦU
Hiện nay, Công nghệ thông tin (CNTT) đã được ứng dụng rộng khắp trên mọi lĩnh vực, từ các cơ quan chính phủ tới các tổ chức, doanh nghiệp Tin học hóa đã trở thành yếu tố quyết định trong hoạt động của các đơn vị này, tạo ra những bước đột phá mạnh mẽ và mang tính then chốt Nhờ ứng dụng CNTT, chúng ta có thể nâng cao hiệu suất công việc mà vẫn giảm thiểu chi phí và công sức so với phương pháp truyền thống
Một ví dụ cụ thể là việc sử dụng CNTT trong quản lý thông tin về các các doanh nghiệp có thể nhận được một số lượng sinh viên thực tập theo yêu cầu nhất định Để thực hiện điều đó một cách hiệu quả, việc xây dựng một chương trình hệ thống và quản lý thông tin các doanh nghiệp là cần thiết Với lý do này,
em đã thực hiện đề tài “Xây dựng chương trình quản lý doanh nghiệp nhận sinh viên thực tập” nhằm cung cấp giải pháp cho vấn đề trên Chương trình này
sẽ giúp người quản lý và sinh viên dễ dàng xem, tìm kiếm và kiểm tra thông tin
về các doanh nghiệp phù hợp với những yêu cầu đặt ra
Mặc dù đã nỗ lực hết mình trong quá trình tìm hiểu, phân tích và thiết kế chương trình nhưng chắc chắn không tránh khỏi những thiếu sót Em rất mong nhận được sự thông cảm và góp ý của quý thầy cô để hoàn thiện chương trình hơn nữa
Em xin chân thành cảm ơn
Trang 7CHƯƠNG I: GIỚI THIỆU CHUNG
I LÝ DO VÀ MỤC ĐÍCH
- Để đáp ứng yêu cầu môn học cũng như mong muốn tìm hiểu, mở rộng kiến thức về ngôn ngữ lập trình nói chung và môn lập trình hướng đối tượng nói riêng Em đã hướng tới xây dựng một chương trình có những tiêu chí như:
Chương trình đơn giản, hiệu quả
Có tính thực tế, khả khi
Áp dụng được kiến thức đã học
- Với những tiêu chí trên, em đã chọn chủ đề “Xây dựng chương trình quản lý doanh nghiệp nhận sinh viên thực tập” để thực hiện.
- Đây là một chủ đề có nhiều hướng đi và ý tưởng có thể phát triển thêm nếu cần
II ĐỊNH NGHĨA BÀI TOÁN:
- Đầu vào: Nhập dữ liệu về doanh nghiệp bao gồm:
Số lượng doanh nghiệp
Mã doanh nghiệp
Tên doanh nghiệp
Ngày thành lập định dạng (d/m/yyy)
Số lượng sinh viên có thể nhận thực tập
- Đầu ra bao gồm:
Ngày thành lập định dạng (dd/mm/yyyy)
Xuất danh sách sinh viên có thể nhận thực tập trong đoạn [a,b] theo thứ tự giảm dần
Trang 8CHƯƠNG II: PHÂN TÍCH VÀ LẬP TRÌNH
I PHÂN TÍCH
Để có thể tạo ra một chương trình có thể đạt được các yếu tố đã nêu ra ở
là môi trường phát triển tích hợp (IDE) phổ biến cho lập trình C và C++
thiện với người dùng, đơn giản và dễ học cho cả người mới bắt đầu cũng như với những lập trình viên có kinh nghiệm Hơn nữa, ngôn ngữ lập trình Dev C++
là một IDE rất nhẹ, không yêu cầu tài nguyên hệ thống lớn, có thể chạy tốt trên hầu hết tất cả các máy tính văn phòng và yếu hiện nay tại Việt Nam
Mặt khác, ngôn ngữ lập trình Dev C++ có tích hợp rất nhiều công cụ, tiện ích và quan trọng nhất là nó miễn phí, ai cũng có thể tiếp cận và sử dụng dễ dàng
II LẬP TRÌNH
1 Lập cơ sở dữ liệu doanh nghiệp
- Để lập được cở sở dữ liệu về các doanh nghiệp nhận sinh viên thực tập cho việc quản lý, ta có thể làm từng bước như sau:
Thêm vào thư viện và không gian tên:
- #include <bits/stdc++.h>: Thư viện này bao gồm hầu hết các thư viện chuẩn của C++ Sử dụng thư viện này giúp đơn giản hóa việc include các thư viện khác, nhưng nó không phải là cách tối ưu về mặt hiệu suất và không nên dùng trong các dự án lớn
- using namespace std;: Điều này cho phép bạn sử dụng các thành phần trong không gian tên std (như string, cout, endl, v.v.) mà không cần phải ghi std:: trước mỗi thành phần đó
Trang 9 Khai báo thông tin liên quan tới doanh nghiệp
- Company là một lớp có các thuộc tính riêng tư (private) và đây là các
thông tin liên quan tới công ty, cụ thể như sau:
maCongTy: Mã doanh nghiệp
tenCongTy: Tên doanh nghiệp
ngayThanhLap: Ngày thành lập doanh nghiệp
soLuong: Số lượng sinh viên có thể nhận
Định dạng lại đầu ra của ngày tháng
một định dạng nhất quán, đảm bảo ngày, tháng, và năm luôn có đúng số chữ
số cần thiết (2 chữ số cho ngày và tháng, 4 chữ số cho năm)
- Cách hoạt động cụ thể như sau:
Kiểm tra rỗng: Nếu date là chuỗi rỗng, phương thức trả về chuỗi
rỗng
Trang 10 Tách ngày, tháng, năm: Phương thức sử dụng sscanf để tách chuỗi
thành công, nó trả về chuỗi rỗng
Định dạng lại ngày: Phương thức sử dụng ostringstream và các hàm
tháng, và năm được định dạng đúng với 2 chữ số cho ngày, tháng và 4 chữ số cho năm
Trả về chuỗi đã định dạng: Phương thức trả về chuỗi ngày đã được
Các Contructors và Destructor
- Company(): Constructor mặc định, khởi tạo các thuộc tính của Company với
giá trị rỗng hoặc 0
- Company(const string& id, const string& name, const string& date, int capacity): Constructor có tham số, khởi tạo các thuộc tính của Company với các
giá trị được cung cấp Ngày thành lập được định dạng qua phương thức formatDate
- ~Company(): Destructor, được gọi khi đối tượng Company bị hủy Destructor này không làm gì cụ thể nhưng được định nghĩa để tuân theo quy ước lập trình tốt
2 Phương thức nhập dữ liệu đầu vào
Nhập mã doanh nghiệp
Trang 11- Đoạn code này yêu cầu người dùng nhập mã doanh nghiệp và kiểm tra xem
mã này có chứa khoảng trắng hay không
- getline(cin, maCongTy): Nhập một dòng từ bàn phím và lưu vào biến
maCongTy.
- maCongTy.find(' ') != string::npos: Kiểm tra xem chuỗi maCongTy có chứa
ký tự khoảng trắng (' ') hay không Nếu có, yêu cầu người dùng nhập lại
không chứa khoảng trắng
Nhập tên doanh nghiệp
- Người dùng được yêu cầu nhập tên doanh nghiệp và giá trị này được lưu vào biến tenCongTy
Nhập ngày thành lập
(ngày/tháng/năm), người dùng có thể để trống nếu không có thông tin này
- ngayThanhLap = formatDate(ngayThanhLap): Ngày thành lập được định dạng lại thông qua phương thức formatDate
Nhập số lượng sinh viên có thể nhận
Trang 12- Người dùng được yêu cầu nhập số lượng sinh viên có thể nhận, với giá trị nằm trong khoảng từ 0 đến 100
- getline(cin, input): Nhập giá trị từ người dùng dưới dạng chuỗi và lưu vào
- if (input.empty()): Nếu người dùng không nhập gì (input rỗng), giá trị
soLuong sẽ được gán là 0 và kết thúc vòng lặp.
- stringstream ss(input): Chuyển đổi chuỗi input thành một luồng chuỗi (stringstream) để chuyển đổi từ chuỗi sang số nguyên
- if (ss >> temp && temp >= 0 && temp <= 100): Kiểm tra nếu giá trị nhập vào là một số nguyên hợp lệ và nằm trong khoảng 0-100, gán giá trị đó cho
soLuong và kết thúc vòng lặp.
- Nếu giá trị nhập không hợp lệ, người dùng sẽ được yêu cầu nhập lại cho đến khi nhập đúng
3 Phương thức xuất dữ liệu
Hiển thị danh sách doanh nghiệp
Trang 13- Hàm static bool return : Đây là một hàm tĩnh (static) dùng để so sánh hai
b, ngược lại trả về false Điều này có nghĩa là khi sắp xếp các công ty theo thứ
- cin.ignore (): dùng để xóa ký tự newline còn lại trong bộ đệm sau khi nhập n
Trang 14- Vòng lặp for chạy từ đến 0 n-1, mỗi lần lặp sẽ nhập thông tin cho một công ty
mới và thêm nó vào vector companies
- Phần này dùng để in tiêu đề các cột trong bảng danh sách bao gồm mã doanh nghiệp, tên doanh nghiệp, ngày thành lập và số lượng sinh viên
- setw(): để thiết lập độ rộng của cột, left để căn lề trái văn bản trong các cột
- string(71, '-'): tạo ra một chuỗi gồm 71 ký tự '-' để làm dòng phân cách
Hiển thị danh sách doanh nghiệp nhận số sinh viên trong đoạn [a,b] và sắp xếp theo thứ tự giảm dần
- Đoạn mã này thực hiện theo các bước sau: hiển thị danh sách các công ty, lọc
Trang 15- Đoạn code này lặp qua từng công ty trong danh sách companies và gọi
- companies.size(): Trả về số lượng phần tử trong vector companies
- companies[i]: Truy cập từng công ty trong danh sách theo chỉ số i
dựa trên số lượng sinh viên mà công ty có thể nhận
- cin >> a >> b;: Lấy giá trị và từ người dùnga b
- vector<Company> filteredCompanies: Tạo một vector filteredCompanies
để lưu trữ các công ty thỏa mãn điều kiện lọc
danh sách filteredCompanies
- filteredCompanies.push_back(companies[i]): Thêm công ty companies[i] vào cuối vector filteredCompanies
- Sau khi lọc, các công ty trong filteredCompanies được sắp xếp theo số lượng sinh viên có thể nhận (Capacity)
- sort(filteredCompanies.begin(), filteredCompanies.end(),
Company::compareByCapacity): Hàm sort sắp xếp các phần tử trong vector
filteredCompanies từ begin() đến end() sử dụng hàm so sánh
Company::compareByCapacity
Trang 16- Đoạn code này in tiêu đề bảng và một dòng phân cách trước khi in danh sách công ty đã lọc và sắp xếp
- setw(15), setw(20), setw(14): Định nghĩa độ rộng cột khi in ra bảng
- string(71, '-'): Tạo ra một chuỗi 71 ký tự dấu gạch ngang ( ) để làm đường
-phân cách giữa tiêu đề bảng và dữ liệu
tin chi tiết của từng công ty bằng cách gọi phương thức output()
Trang 17CHƯƠNG III: KIỂM THỬ VÀ KẾT LUẬN
I KIỂM THỬ CHƯƠNG TRÌNH
1.Tạo cơ sở dữ liệu doanh nghiệp và hiển thị
Nhập thông tin doanh nghiệp
Kết quả hiển thị
2 Hiển thị danh sách doanh nghiệp nhận sinh viên thực tập trong khoảng [a, b] và sắp xếp theo thứ tự giảm dần:
Nhập khoảng [a, b]: 60 80
Trang 18 Kết quả trả về là có
Nhập khoảng [a, b]: 30 60
Kết quả trả về là không có doanh nghiệp nào
II KẾT LUẬN
1 Kết quả
Chương trình đã xây dựng hoàn thành, đáp ứng tương đối tốt với yêu cầu bài toán đặt ra
Đã ứng dụng được một phần kiến thức đã học để thực hiện một chương trình đơn giản
2 Bài học rút ra
Môn Lập trình hướng đối tượng là một môn rất quan trọng với khối lượng kiến thức tương đối lớn và tính ứng dụng đa dạng Do đó, chương trình chưa thể ứng dụng hết các kiến thức, thuật toán vào chương trình
Chương trình vẫn còn nhiều thiếu sót, có thể tiếp tục hoàn thiện và nâng cấp thêm trong tương lai
Tóm lại, qua việc thực hiện nghiên cứu đề tài “Xây dựng chương trình quản lý doanh nghiệp nhận sinh viên thực tập” Em đã học hỏi được rất nhiều
kĩ năng hay cũng như kiến thức bổ ích Bên cạnh đó, việc làm nghiên cứu giúp
em được trau dồi kiến thức, nâng cao khả năng làm việc
Trang 19thực hiện được những ý tưởng đó Mặc dù em đã cố gắng để xây dựng một chương trình hoàn chỉnh nhất, đẹp nhất nhưng trong quá trình xây dựng chương trình em khó tránh khỏi những thiếu sót Vì vậy em rất mong rằng thầy cô đóng góp ý kiến để em có thể hoàn thành bài báo cáo một cách hoàn chỉnh và chỉnh chu nhất
quá trình thực hiện đề tài
Một lần nữa em xin chân thành cảm ơn !
Trang 20TÀI LIỆU THAM KHẢO
1 Lê Minh Hoàng (2012) Lập trình C++ cơ bản và nâng cao NXB Giáo dục Việt Nam, Hà Nội
2 Nguyễn Hữu Tuấn (2014) Giáo trình Lập trình hướng đối tượng C++ NXB Khoa học và Kỹ thuật, Hà Nội
3 Nguyễn Văn Ba (2015), Lập trình hướng đối tượng với C++ NXB Đại học Quốc gia Hà Nội, Hà Nội