1.1 GIỚI THIỆU VỀ CHƯƠNG TRÌNH Chương trình mà cá nhân em được giao nhiệm vụ xây dựng là chương trình quản lí thư viện cơ bản với một số yêu cầu sau: - Nhập thông tin về sách số đăng ký,
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN TOÁN ỨNG DỤNG VÀ TIN HỌC
BÁO CÁO CÁ NHÂN MÔN KỸ THUẬT LẬP TRÌNH Chủ đề: Xây dựng chương trình quản lí thư viện
Giảng viên hướng dẫn: Nguyễn Thành Nam
Sinh viên thực hiện: Dương Quang Quý 20216956
Trang 2Hà Nội 8/2023
Trang 3Lời mở đầu
Trong học phần Kỹ thuật lập trình được thầy Nguyễn Thành Nam dạy trong kì này, bọn em đã được tiếp thu rất nhiều những kiến thức liên quan tới các nguyên tắc cần có trong lập trình, các nền tảng cơ bản trong các các thức lập trình,vv… Và đây sẽ là thành quả cuối khóa của bọn em trong môn học này bằng bài tập lớn cuối kỳ Mong rằng với những gì bọn em học được có thể truyền tải đầy đủ trong báo cáo của mình và các thầy cô có thể thấy rõ những nỗ lực ấy
Em cũng xin gửi lời cảm ơn đến thầy Nguyễn Thành Nam đã giúp em và các nhóm khác trong quá trình làm bài tập lớn này
Trang 4MỤC LỤC
PHẦN I: MÔ TẢ CẤU TRÚC CHƯƠNG TRÌNH 0
1.1 Giới thiệu về chương trình 1
1.2 Chi tiết về cấu trúc chương trình 1
PHẦN II: CÁC KỸ THUẬT LẬP TRÌNH ĐÃ ỨNG DỤNG 3
PHẦN III: CÁC TÌNH HUỐNG KIỂM THỬ VÀ KẾT QUẢ CHẠY 5
3.1 Phương pháp lây nhiễm qua tập tin và chương trình 5
3.2.2 Truy cập các trang web độc hại 8
3.2.3 Sử dụng các kết nối mạng không an toàn 9
3.3 Phương pháp lây nhiễm qua email và tin nhắn 10
3.3.1 Gửi email độc hại 11
3.3.2 Tin nhắn xâm nhập 11
3.3.3 Sử dụng các liên kết độc hại 11
PHẦN IV: CƠ CHẾ HOẠT ĐỘNG CỦA VIRUS PHẦN MỀM 13
4.1 Quá trình xâm nhập và thiết lập của virus phần mềm 13
Trang 54.1.2 Thiết lập 16
4.2 Các chức năng và hoạt động của virus phần mềm 17
4.2.1 Sao chép và lây lan 17
4.2.2 Ẩn giấu và tự bảo vệ 18
4.2.3 Kiểm soát từ xa 19
4.2.4 Gây hại và tấn công 20
4.3 Cơ chế tự nhân bản và tấn công 20
4.3.1 Sao chép tệp tin 20
4.3.2 Sử dụng mạng và kết nối 20
4.3.3 Sử dụng các phương tiện truyền thông 22
4.4 Cách thức tấn công và gây hại của virus phần mềm 23
4.4.1 Xóa hoặc hủy dữ liệu 23
4.4.2 Mã hóa tệp tin 23
4.4.3 Đánh cắp thông tin 24
4.4.4 Tấn công từ chối dịch vụ (DoS) 25
PHẦN V: PHƯƠNG PHÁP PHÒNG CHỐNG VÀ TIÊU DIỆT VIRUS PHẦN MỀM 26 5.1 Biện pháp phòng ngừa và bảo vệ hệ thống 26
5.2 Công cụ và phần mềm chống virus phổ biến 27
5.3 Quy trình quản lý và xử lý khi bị tấn công virus phần mềm 29
PHẦN VI: KẾT LUẬN 31
Trang 6PHẦN I: MÔ TẢ CẤU TRÚC CHƯƠNG TRÌNH
Trang 71.1 GIỚI THIỆU VỀ CHƯƠNG TRÌNH
Chương trình mà cá nhân em được giao nhiệm vụ xây dựng là chương trình quản lí thư viện cơ bản với một số yêu cầu sau:
- Nhập thông tin về sách (số đăng ký, tên sách, tên các tác giả, nhà xuất bản, năm xuất bản, số ISBN, …)
- Cập nhật được thông tin sách
- Tìm thông tin sách (theo số đăng ký hoặc tên sách hoặc số ISBN) - Sắp xếp: theo số đăng ký, theo nhà xuất bản
- Lưu ra file, đọc từ file
Và sau khi cân nhắc thì em đã thực hiện chương trình bằng ngôn ngữ lập trình Python với có sử dụng thư viện đồ họa Pyqt5 nhằm mục đích để tạo ra màn hình menu để thực hiện các thao tác
Chương trình có thể thực hiện một số các công việc đơn giản như:
Thêm sách mới vào thư viện với thông tin về số đăng ký, tên sách, tác giả, nhà xuất bản, năm xuất bản và số ISBN
Cập nhật thông tin của sách hiện có bằng cách chọn sách trong danh sách và sửa thông tin
Xóa sách khỏi thư viện bằng cách chọn sách trong danh sách và nhấn nút xóa Tìm kiếm sách trong danh sách dựa trên số đăng ký hoặc tên sách
Lưu danh sách sách vào file CSV để lưu trữ dữ liệu Đọc danh sách sách từ file CSV để khôi phục dữ liệu
Trang 81.2 CHI TIẾT VỀ CẤU TRÚC CHƯƠNG TRÌNH
Cấu trúc của chương trình được chia thành 3 lớp chính, với mỗi lớp đảm nhiệm 1 nhiệm vụ:
Trang 91 Lớp `LibraryBook`: Đây là lớp đại diện cho một cuốn sách trong thư viện, với các
thuộc tính quan trọng như số đăng ký, tên sách, tác giả, nhà xuất bản, năm xuất bản và số ISBN Lớp này giúp chương trình dễ dàng lưu trữ và quản lý thông tin về sách
2 Lớp `BookEditDialog`: Đây là một cửa sổ con được sử dụng để cập nhật thông tin
sách Khi người dùng chọn cập nhật cho một cuốn sách cụ thể, cửa sổ này xuất hiện với các trường nhập liệu đã được điền sẵn thông tin của cuốn sách Nếu người dùng nhấn nút "Cập nhật", chương trình sẽ lấy thông tin từ các trường nhập liệu và trả về thông tin sách sau khi cập nhật
3 Lớp `LibraryManager`: Đây là lớp chính của chương trình, biểu diễn cửa sổ chính
của ứng dụng Nó chứa giao diện người dùng để hiển thị danh sách sách trong thư viện và các chức năng quản lý sách Lớp này quản lý danh sách các cuốn sách thông qua thuộc tính `self.books`, nơi mà các đối tượng `LibraryBook` được lưu trữ Chương trình cung cấp các phương thức như `add_book`, `edit_selected_book`, `delete_book`,
`load_from_file`, `save_to_file`, `sort_by_book_number`, `sort_by_publisher` để thực hiện các chức năng quản lý sách
Hàm add_book:
Cấu trúc của hàm `add_book` như sau:
1 Đầu tiên, hàm lấy thông tin từ các trường nhập liệu gồm `book_number`, `book_title`, `authors`, `publisher`, `publication_year`, `isbn`
2 Tiếp theo, hàm kiểm tra xem người dùng đã nhập đầy đủ thông tin của sách hay chưa Nếu có bất kỳ trường nào trống, hàm hiển thị một cửa sổ cảnh báo với thông báo "Vui lòng nhập đầy đủ thông tin sách."
3 Sau đó, hàm kiểm tra tính hợp lệ của năm xuất bản bằng cách kiểm tra xem `publication_year` có phải là một số nguyên không Nếu không phải, hàm hiển thị một cửa sổ cảnh báo với thông báo "Năm xuất bản không hợp lệ."
4 Tiếp theo, hàm kiểm tra tính hợp lệ của số đăng ký bằng cách kiểm tra xem `book_number` có phải là một số nguyên không Nếu không phải, hàm hiển thị một cửa sổ cảnh báo với thông báo "Số đăng ký không hợp lệ Vui lòng nhập số đăng ký là một số nguyên."
Trang 105 Hàm tiếp tục kiểm tra xem số ISBN đã tồn tại trong danh sách sách chưa Nếu số ISBN đã tồn tại, hàm hiển thị một cửa sổ cảnh báo với thông báo "Số ISBN đã tồn tại Vui lòng nhập số ISBN khác."
6 Cuối cùng, hàm kiểm tra xem số đăng ký đã tồn tại trong danh sách sách chưa Nếu số đăng ký đã tồn tại, hàm hiển thị một cửa sổ cảnh báo với thông báo "Số đăng ký đã tồn tại Vui lòng nhập số đăng ký khác."
7 Nếu thông tin nhập vào hợp lệ, hàm tạo một đối tượng `LibraryBook` mới với các thông tin của cuốn sách và thêm vào danh sách sách của thư viện
8 Sau khi thêm sách thành công, hàm gọi phương thức `update_table` để cập nhật hiển thị bảng sách
9 Cuối cùng, hàm gọi phương thức `clear_input_fields` để làm sạch trường nhập liệu để người dùng có thể thêm sách mới
Tóm lại, hàm `add_book` thực hiện việc kiểm tra tính hợp lệ của thông tin sách nhập vào từ người dùng, sau đó thêm sách vào danh sách và cập nhật hiển thị bảng sách
Hàm edit_selected_book:
Nhiệm vụ của hàm này là cho phép người dùng cập nhật thông tin của một cuốn sách đã tồn tại trong danh sách sách của thư viện
Cấu trúc của hàm `edit_selected_book` như sau:
1 Hàm lấy chỉ mục của dòng đang được chọn trên bảng sách bằng cách sử dụng `self.table_widget.currentRow()` Nếu không có dòng nào được chọn (`selected_row < 0`), hàm hiển thị một cửa sổ cảnh báo với thông báo "Vui lòng chọn sách cần cập nhật." 2 Nếu có dòng được chọn (`selected_row >= 0`), hàm lấy thông tin của cuốn sách từ các ô trong dòng đó trên bảng sách Thông tin này bao gồm số đăng ký, tên sách, tác giả, nhà xuất bản, năm xuất bản và số ISBN
3 Tiếp theo, hàm tạo một đối tượng `UpdateBookDialog`, là một hộp thoại đặc biệt để người dùng có thể cập nhật thông tin sách Hộp thoại này được kết nối với cửa sổ chính `self` thông qua tham số `self` trong khai báo `UpdateBookDialog(self)`
4 Sau khi tạo đối tượng `UpdateBookDialog`, hàm gọi phương thức `set_book_info` của `UpdateBookDialog` để thiết lập thông tin sách đã lấy từ bước 2
Trang 115 Hàm mở hộp thoại `UpdateBookDialog` bằng cách gọi `dialog.exec_()` Nếu người dùng chấp nhận cập nhật thông tin sách (nhấn nút "Cập nhật" trong hộp thoại), hàm tiếp tục bước 6
6 Hàm lấy thông tin sách đã được cập nhật từ hộp thoại `UpdateBookDialog` bằng cách gọi phương thức `get_book_info` của `UpdateBookDialog`
7 Sau đó, hàm tạo một đối tượng `LibraryBook` mới với thông tin sách đã cập nhật và gán lại vào vị trí tương ứng trong danh sách sách `self.books`
8 Cuối cùng, hàm gọi phương thức `update_table` để cập nhật hiển thị bảng sách với thông tin sách mới
Tóm lại, hàm `edit_selected_book` cho phép người dùng chọn một cuốn sách trong bảng sách để cập nhật thông tin của cuốn sách đó thông qua hộp thoại `UpdateBookDialog` Sau khi người dùng cập nhật thông tin và xác nhận, hàm cập nhật lại danh sách sách và hiển thị lại bảng sách
Hàm delete_book:
Nhiệm vụ của hàm này là cho phép người dùng xóa một cuốn sách khỏi danh sách sách của thư viện
Cấu trúc của hàm `delete_book` như sau:
1 Hàm lấy chỉ mục của dòng đang được chọn trên bảng sách bằng cách sử dụng `self.table_widget.currentRow()` Nếu không có dòng nào được chọn (`selected_row < 0`), hàm hiển thị một cửa sổ cảnh báo với thông báo "Vui lòng chọn sách cần xóa." 2 Nếu có dòng được chọn (`selected_row >= 0`), hàm xóa cuốn sách tương ứng khỏi danh sách sách `self.books` bằng cách sử dụng lệnh `del self.books[selected_row]` 3 Sau khi xóa, hàm gọi phương thức `update_table` để cập nhật hiển thị bảng sách sau khi cuốn sách đã được xóa
4 Hàm gọi phương thức `clear_input_fields` để xóa dữ liệu trong các trường nhập liệu sau khi cuốn sách đã được xóa
Trang 12Tóm lại, hàm `delete_book` cho phép người dùng chọn một cuốn sách trong bảng sách để xóa khỏi danh sách sách của thư viện Sau khi xóa, hàm cập nhật lại danh sách sách và hiển thị lại bảng sách
Hàm `search_book`
Nhiệm vụ của hàm này là cho phép người dùng tìm kiếm sách theo một từ khóa hoặc chuỗi con trong trường số đăng ký, tên sách hoặc số ISBN Hàm `search_book` thực hiện việc tìm kiếm trong danh sách sách của thư viện và hiển thị kết quả tìm kiếm trên bảng sách
Cấu trúc của hàm `search_book` như sau:
1 Hàm lấy từ khóa tìm kiếm từ trường nhập liệu `self.book_number_input.text()` và lưu vào biến `search_text`
2 Kiểm tra nếu `search_text` không rỗng (`search_text` khác `''`), tức là người dùng đã nhập từ khóa tìm kiếm, thì tiến hành tìm kiếm trong danh sách sách
3 Khởi tạo một danh sách rỗng `result_books` để lưu kết quả tìm kiếm
4 Sử dụng vòng lặp `for` để duyệt qua từng cuốn sách trong danh sách sách `self.books` 5 Kiểm tra xem `search_text` có xuất hiện trong trường số đăng ký, tên sách hoặc số ISBN của cuốn sách đang xét không Nếu có, thêm cuốn sách vào danh sách `result_books`
6 Gọi phương thức `display_search_results(result_books)` để hiển thị kết quả tìm kiếm trên bảng sách
7 Nếu `search_text` rỗng (`search_text` bằng `''`), tức là không có từ khóa tìm kiếm, hàm gọi phương thức `update_table()` để cập nhật hiển thị bảng sách với toàn bộ danh sách sách
Trang 13Thêm sách thành công!
Khi thêm sách có trùng số ISBN thì hệ thống báo lỗi
Trang 14Khi thêm sách có trùng số đăng ký hệ thống cũng báo lỗi
3.2 Cập nhật sách
Chọn sách cần cập nhật
Trang 15Giao diện khi cập nhật sách
Sau khi thay đổi thì sách đã được cập nhật trên hệ thống
Trang 163.3 Xoá sách
Chọn sách cần xóa
Sau khi xóa
Trang 173.4 Sắp xếp theo số đăng ký
Trước khi sắp xếp
Sau khi sắp xếp theo số đăng ký
Trang 183.5 Sắp xếp theo nhà xuất bản
Sau khi sắp xếp theo nhà xuất bản sẽ ưu tiên thứ tự trong bảng chữ cái
3.6 Lưu danh sách
Màn hình lưu danh sách
Trang 19Thông báo khi lưu sách thành công
3.7 Đọc danh sách
Đọc danh sách từ file CSV mình đã lưu
Trang 20Kết quả sau khi thực hiện
3.8 Tìm kiếm sách
Tìm kiếm sách sẽ dựa trên nhập 1 số keyword của sách để tìm kiếm
Màn hình hiện thị thông tin sách sau khi nhập chữ “Đắc”
Trang 21Màn hình sẽ tìm những gợi ý – keyword có số 23
3.9 MỘT SỐ NHỮNG KHUYẾT ĐIỂM CỦA CHƯƠNG TRÌNH
Tuy chương trình đã tương đối hoàn thiện tuy nhiên vẫn còn gặp phải 1 số vấn đề chưa thể khắc phúc Dưới đây là những thiếu sót điển hình của chương trình quản lí thư viện mà em đã xây dựng:
Trang 22Khi cập nhật sách thì có thể nhập được những định dạng không đúng của
chương trình
Ta thay thế số đăng ký 5 thành ký tự “md”
Chương trình sẽ lưu giá trị md vào số đăng ký
Trang 23File CSV không thể mã hóa được ký tự có dấu
Việc file CSV không thể lưu được ký tự có dấu dẫn tới có 2 tình huống xảy ra:
- Tình huống 1: Người dùng nhập các ký tự có dấu và lưu dữ liệu vào file CSV thì hệ thống vẫn sẽ chấp nhận và khi mở file CSV đó trên ứng dụng thì vẫn sẽ truy xuất dữ liệu như cũ Tuy nhiên khi chúng ta mở file CSV đó thì sẽ không được định dạng như chúng ta muốn bởi đã bị mã hóa Dưới đây là ví dụ:
Dữ liệu hiện thị trên hệ thống
Trang 24Dữ liệu đã bị mã hóa trên file CSV
- Tình huống 2 : Trong thực tế, nếu dữ liệu lớn thì người dùng ít sử dụng các thao tác từng bước trên ứng dụng mà sẽ thực hiện nhập hoặc thao tác trên file CSV rồi sẽ truy xuất lên hệ thống Chính vì điều đó nếu người dùng nhập bất cứ thông tin nào có dấu trên danh sách thì sẽ không thể đọc được danh sách trên hệ thống và sẽ bị báo lỗi => Chỉ có thể giới hạn thông tin ở các tác phẩm có thông tin nước ngoài sử dụng thuần chữ cái latin hoặc thông tin sách có thể bị mất dấu Dưới đây là ví dụ:
Trang 25Thông tin nhập trên file CSV có chứa ký tự có dấu (dòng 17)
Chính vì vậy hệ thống đã báo lỗi khi không thể decode được
Trang 26PHẦN IV: KẾT LUẬN
Bài báo cáo này đã thực hiện xây dựng chương trình quản lý thư viện sử dụng các kỹ thuật lập trình và thư viện của Python và PyQt5 Em đã sử dụng lập trình hướng đối tượng để xây dựng các lớp và đối tượng cho sách và quản lý thư viện, từ đó giúp cấu trúc chương trình trở nên rõ ràng và dễ quản lý
Bên cạnh đó, việc sử dụng PyQt5 - một bộ thư viện GUI dựa trên Qt - để xây dựng giao diện người dùng cho ứng dụng đã cung cấp các công cụ và chức năng mạnh mẽ giúp tạo ra một giao diện người dùng tương tác và trực quan
Để lưu trữ và truy xuất thông tin sách, ek đã sử dụng các thao tác đọc và ghi file File I/O giúp lưu trữ dữ liệu dễ dàng và duyệt thông tin trong chương trình
Chương trình cũng được thiết kế để kiểm tra tính hợp lệ của dữ liệu nhập vào như năm xuất bản, số đăng ký và số ISBN Điều này giúp đảm bảo dữ liệu được lưu trữ chính xác và đúng định dạng
Chức năng tìm kiếm sách dựa trên số đăng ký, tên sách và số ISBN đã được tích hợp vào chương trình để hỗ trợ người dùng tìm thấy thông tin sách nhanh chóng Sắp xếp sách theo số đăng ký và nhà xuất bản cũng là một tính năng quan trọng giúp hiển thị thông tin sách một cách có tổ chức và dễ nhìn
Cuối cùng, giao diện người dùng của chương trình được tối ưu hóa với các thành phần như bảng hiển thị thông tin sách, các trường nhập liệu và nút chức năng, giúp tạo ra một giao diện người dùng đơn giản và dễ sử dụng
Tóm lại, sự kết hợp các kỹ thuật lập trình và thư viện trong Python và PyQt5 đã giúp tạo ra một chương trình quản lý thư viện đơn giản, hiệu quả và hữu ích, giúp người dùng quản lý thông tin sách một cách thuận tiện và hiệu quả
Trang 27
PHẦN IV: CƠ CHẾ HOẠT ĐỘNG CỦA VIRUS PHẦN MỀM
Trang 284.1 Quá trình xâm nhập và thiết lập của virus phần mềm
Quá trình xâm nhập và thiết lập của virus phần mềm là giai đoạn quan trọng mà virus sử dụng để xâm nhập vào hệ thống và chuẩn bị môi trường cho hoạt động tiếp theo Để có thể lây nhiễm vào hệ thống, virus phần mềm cần tìm và tận dụng các điểm yếu, lỗ hổng hoặc lỗi trong hệ thống Để có thể hoạt động một cách hiệu quả, virus phần mềm cần thiết lập các tệp tin, mã độc, kết nối mạng hoặc hạt nhân tấn công để có thể giao tiếp, sao chép, lan truyền hoặc tấn công hệ thống.
4.1.1 Xâm nhập
Virus phần mềm thường sử dụng các lỗ hổng bảo mật, lỗi phần mềm, hoặc các kỹ thuật xâm nhập để tiếp cận hệ thống Các lỗ hổng bảo mật là những điểm yếu trong thiết kế, cài đặt hoặc cấu hình của hệ điều hành, các ứng dụng phổ biến hoặc các dịch vụ mạng, cho phép virus phần mềm có thể khai thác để xâm nhập vào hệ thống
Ví dụ, Virus Stuxnet là một loại worm máy tính được thiết kế và triển khai để tấn công các cơ sở hạt nhân của Iran Virus này đã khai thác bốn lỗ hổng bảo mật chưa được biết đến trong Windows để lây nhiễm vào các máy tính điều khiển các thiết bị công nghiệp, đặc biệt là các máy ly tâm làm giàu urani Virus này đã gây ra nhiều thiệt hại và gián đoạn cho chương trình hạt nhân của Iran
Quá trình xâm nhập của virus Stuxnet có thể được mô tả như sau:
Virus Stuxnet được mang vào cơ sở hạt nhân của Iran thông qua các ổ đĩa USB bị nhiễm virus Khi người dùng mở các tập tin đính kèm trong email hoặc kết nối các ổ đĩa USB, virus sẽ khai thác lỗ hổng MS10-046 trong Windows để chạy mã độc