BỘ GIÁO DỤC VÀ ĐÀO TẠOTRƯỜNG ĐẠI HỌC HÒA BÌNH BÀI TẬP LỚN TÊN HỌC PHẦN: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT ĐỀ TÀI: XÂY DỰNG BÀI TOÁN QUẢN LÝ KHÁCH HÀNG SỬ DỤNG CẤU TRÚC LIÊN KẾT ĐƠN KẾT HỢP
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC HÒA BÌNH
BÀI TẬP LỚN TÊN HỌC PHẦN: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
ĐỀ TÀI: XÂY DỰNG BÀI TOÁN QUẢN LÝ KHÁCH HÀNG SỬ DỤNG CẤU TRÚC LIÊN KẾT ĐƠN KẾT HỢP VỚI THUẬT TOÁN SẮP XẾP NỔI BỌT VÀ TÌM KIẾM TUYẾN TÍNH
Giáo viên hướng dẫn: ĐỖ NGỌC ĐIỆP
Sinh viên thực hiện:
1 522CNT1059 Hoàng Trung Nguyên 522CNT
Trang 2BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC HÒA BÌNH
BÀI TIỂU LUẬN
TÊN HỌC PHẦN: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
DỤNG CẤU TRÚC LIÊN KẾT ĐƠN KẾT HỢP VỚI THUẬT TOÁN SẮP XẾP NỔI BỌT VÀ TÌM KIẾM TUYẾN TÍNH
Điểm Bằng
Số Bằng Chữ
9
Hoàng Trung Nguyên 20/10/2004
CÁN BỘ CHẤM THI
Hà Nội, năm 2024
Trang 3LỜI NÓI ĐẦU
Trong bối cảnh kỷ nguyên số hiện nay, công nghệ thông tin đóng vai trò then chốt trong mọi lĩnh vực của cuộc sống, đặc biệt là trong quản lý và xử lý thông tin Việc quản lý khách hàng một cách hiệu quả không chỉ giúp doanh nghiệp nắm bắt được nhu cầu và mong muốn của khách hàng mà còn tạo nền tảng cho sự phát triển bền vững và cạnh tranh trên thị trường
Cấu trúc dữ liệu và giải thuật là những nền tảng cơ bản của khoa học máy tính, quyết định hiệu suất và khả năng mở rộng của các hệ thống phần mềm Việc lựa chọn cấu trúc dữ liệu phù hợp và áp dụng các thuật toán tối ưu không chỉ cải thiện hiệu năng của hệ thống mà còn giúp tiết kiệm tài nguyên và tăng trải nghiệm người dùng Xuất phát từ những lý do đó, em đã chọn đề tài "Xây dựng bài toán quản lý khách hàng sử dụng cấu trúc liên kết đơn kết hợp với danh sách thuật toán sắp xếp nổi bọt và tìm kiếm tuyến tính" cho bài tiểu luận này Đề tài tập trung vào việc ứng dụng các kiến thức cơ bản về cấu trúc dữ liệu liên kết đơn và các thuật toán sắp xếp, tìm kiếm
cơ bản để xây dựng một hệ thống quản lý khách hàng đơn giản nhưng hiệu quả Qua bài tiểu luận, em mong muốn:
Hiểu rõ hơn về cách triển khai cấu trúc liên kết đơn trong lập trình
Nắm vững nguyên lý hoạt động của thuật toán sắp xếp nổi bọt và tìm kiếm tuyến tính
Ứng dụng các kiến thức đã học vào việc giải quyết một bài toán thực tế
Đánh giá hiệu suất của hệ thống và đề xuất các hướng cải tiến trong tương lai
Em xin chân thành cảm ơn thầy cô và các bạn đã dành thời gian đọc và góp ý cho bài tiểu luận này Sự hướng dẫn và hỗ trợ của thầy cô là động lực để em hoàn thành tốt bài tập này Em hy vọng rằng bài tiểu luận sẽ mang lại những kiến thức hữu ích và góp phần vào việc học tập và nghiên cứu của bản thân
Trang 4MỤC LỤC
LỜI NÓI ĐẦU 3
I GIỚI THIỆU 8
1.1 Bối cảnh và tầm quan trọng của quản lý khách hàng 8
1.2 Vai trò của cấu trúc dữ liệu và thuật toán trong quản lý dữ liệu 8
1.3 Lý do chọn cấu trúc liên kết đơn và các thuật toán cơ bản 8
1.4 Mục tiêu của bài tiểu luận 8
1.5 Ý nghĩa thực tiễn của đề tài 8
II CƠ SỞ LÝ THUYẾT 9
2.1 Cấu trúc liên kết đơn 9
2.1.1 Khái niệm 9
2.1.2 Cách hoạt động 9
2.1.3 Ưu và nhược điểm 9
2.2 Thuật toán sắp xếp nổi bọt 9
2.2.1 Nguyên lý hoạt động 9
2.2.2 Độ phức tạp 9
2.2.3 Ứng dụng 10
2.3 Tìm kiếm tuyến tính 10
2.3.1 Nguyên lý hoạt động 10
2.3.2 Độ phức tạp 10
2.3.3 Ứng dụng 10
III PHÂN TÍCH YÊU CẦU HỆ THỐNG QUẢN LÝ KHÁCH HÀNG 10
3.1 Chức năng hệ thống 10
Trang 53.1.1 Thêm khách hàng 10
3.1.2 Xóa khách hàng 10
3.1.3 Sửa thông tin khách hàng 10
3.1.4 Tìm kiếm khách hàng 10
3.1.5 Sắp xếp danh sách khách hàng 11
3.2 Mô hình dữ liệu 11
IV THIẾT KẾ HỆ THỐNG 11
4.1 Thiết kế cấu trúc dữ liệu 11
4.1.1 Định nghĩa cấu trúc khách hàng 11
4.1.2 Triển khai danh sách liên kết đơn 11
4.2 Thiết kế thuật toán 12
4.2.1 Thuật toán thêm, xóa, sửa 12
4.2.2 Thuật toán sắp xếp nổi bọt trên danh sách liên kết đơn 14
4.2.3 Thuật toán tìm kiếm tuyến tính 14
V CÀI ĐẶT VÀ TRIỂN KHAI 14
5.1 Môi trường phát triển 14
5.2 Mã nguồn và giải thích 14
5.2.1 Cấu trúc dữ liệu 14
5.2.2 Chức năng hệ thống 14
5.3 Giao diện người dùng 15
5.4 Ví dụ minh họa 16
VI KIỂM THỬ VÀ ĐÁNH GIÁ 17
6.1 Kết quả kiểm thử chức năng 17
6.2 Đánh giá hiệu năng 17
Trang 66.2.1 Thời gian thực thi 17
6.2.2 Sử dụng bộ nhớ 17
6.3 Nhận xét 18
VII KẾT LUẬN 18
7.1 Kết luận 18
TÀI LIỆU THAM KHẢO 18
Trang 7MỤC LỤC HÌNH ẢNH (Đánh tự động nếu có)
Hình 1 Giao diện người dùng
Hình 2 Danh sách trước khi sắp xếp
Hình 3 Danh sách sau khi sắp xếp
Hình 4 Tìm kiếm khách hàng
Hình 5 Xóa khách hàng
Hình 6 Thêm khách hàng
Trang 8I GIỚI THIỆU 1.1 Bối cảnh và tầm quan trọng của quản lý khách hàng
Trong kỷ nguyên số hóa hiện nay, dữ liệu được coi là tài sản quý giá của mỗi doanh nghiệp Việc thu thập, quản lý và phân tích dữ liệu khách hàng không chỉ giúp doanh nghiệp hiểu rõ hơn về nhu cầu và hành vi của khách hàng mà còn tạo ra lợi thế cạnh tranh trên thị trường Quản lý khách hàng hiệu quả giúp tăng cường mối quan hệ giữa doanh nghiệp và khách hàng, cải thiện chất lượng dịch vụ và thúc đẩy doanh số bán hàng
1.2 Vai trò của cấu trúc dữ liệu và thuật toán trong quản lý dữ liệu
Cấu trúc dữ liệu và thuật toán là nền tảng của mọi hệ thống phần mềm Việc lựa chọn cấu trúc dữ liệu phù hợp ảnh hưởng trực tiếp đến hiệu suất và khả năng mở rộng của hệ thống Thuật toán hiệu quả giúp tối ưu hóa quá trình xử lý dữ liệu, giảm thiểu thời gian thực thi và sử dụng tài nguyên hợp lý
1.3 Lý do chọn cấu trúc liên kết đơn và các thuật toán cơ bản
Mặc dù có nhiều cấu trúc dữ liệu và thuật toán phức tạp hơn, nhưng cấu trúc liên kết đơn cùng với thuật toán sắp xếp nổi bọt và tìm kiếm tuyến tính vẫn giữ vai trò quan trọng trong việc giáo dục và nghiên cứu Chúng giúp người học nắm bắt các khái niệm cơ bản, hiểu rõ nguyên lý hoạt động và áp dụng chúng vào các bài toán thực tế
1.4 Mục tiêu của bài tiểu luận
Phân tích và triển khai: Xây dựng một hệ thống quản lý khách hàng sử dụng
cấu trúc liên kết đơn, kết hợp với các thuật toán cơ bản
Đánh giá hiệu suất: Phân tích độ phức tạp của các thuật toán được sử dụng và
đánh giá hiệu suất của hệ thống
Ứng dụng thực tế: Minh họa cách áp dụng cấu trúc dữ liệu và thuật toán vào
một bài toán cụ thể trong quản lý thông tin
1.5 Ý nghĩa thực tiễn của đề tài
Việc xây dựng hệ thống quản lý khách hàng bằng cách sử dụng các cấu trúc dữ liệu và thuật toán cơ bản không chỉ giúp củng cố kiến thức đã học mà còn tạo tiền đề cho việc nghiên cứu và phát triển các hệ thống phức tạp hơn Đề tài này cũng giúp người học hiểu rõ hơn về tầm quan trọng của việc lựa chọn cấu trúc
dữ liệu và thuật toán phù hợp trong việc giải quyết các bài toán thực tế
Trang 9II CƠ SỞ LÝ THUYẾT 2.1 Cấu trúc liên kết đơn
2.1.1 Khái niệm
Cấu trúc liên kết đơn (singly linked list) là một loại danh sách liên kết, trong đó mỗi phần tử (node) chứa dữ liệu và một con trỏ trỏ đến phần tử kế tiếp Phần tử cuối cùng trỏ đến null, đánh dấu sự kết thúc của danh sách
2.1.2 Cách hoạt động
Thêm phần tử: Có thể thêm vào đầu, cuối hoặc giữa danh sách bằng cách điều
chỉnh các con trỏ
Xóa phần tử: Tìm phần tử cần xóa và điều chỉnh con trỏ của phần tử trước nó.
Duyệt danh sách: Bắt đầu từ đầu danh sách, sử dụng con trỏ để truy cập các
phần tử kế tiếp
2.1.3 Ưu và nhược điểm
Ưu điểm:
o Linh hoạt trong việc thêm và xóa phần tử
o Sử dụng bộ nhớ hiệu quả hơn so với mảng khi kích thước danh sách thay đổi thường xuyên
Nhược điểm:
o Truy cập ngẫu nhiên không hiệu quả (O(n))
o Tốn thêm bộ nhớ cho các con trỏ
2.2 Thuật toán sắp xếp nổi bọt
2.2.1 Nguyên lý hoạt động
Thuật toán sắp xếp nổi bọt (bubble sort) là một thuật toán sắp xếp đơn giản Nó hoạt động bằng cách so sánh từng cặp phần tử liền kề và hoán đổi chúng nếu chúng ở sai thứ tự Quá trình này được lặp lại cho đến khi danh sách được sắp xếp
2.2.2 Độ phức tạp
Thời gian: O(n^2) trong trường hợp trung bình và xấu nhất.
Không gian: O(1), không cần bộ nhớ bổ sung.
Trang 102.2.3 Ứng dụng
Thích hợp cho các bộ dữ liệu nhỏ hoặc khi đơn giản là yếu tố quan trọng hơn hiệu suất
2.3 Tìm kiếm tuyến tính
2.3.1 Nguyên lý hoạt động
Tìm kiếm tuyến tính (linear search) duyệt qua từng phần tử trong danh sách và so sánh với giá trị cần tìm cho đến khi tìm thấy hoặc kết thúc danh sách
2.3.2 Độ phức tạp
Thời gian: O(n) trong trường hợp trung bình và xấu nhất.
Không gian: O(1).
2.3.3 Ứng dụng
Sử dụng khi danh sách không được sắp xếp hoặc khi kích thước danh sách nhỏ
III PHÂN TÍCH YÊU CẦU HỆ THỐNG QUẢN LÝ KHÁCH HÀNG 3.1 Chức năng hệ thống
3.1.1 Thêm khách hàng
Nhập thông tin khách hàng: ID, tên, địa chỉ, số điện thoại
Thêm vào danh sách liên kết đơn
3.1.2 Xóa khách hàng
Nhập ID của khách hàng cần xóa
Tìm kiếm và xóa khách hàng khỏi danh sách
3.1.3 Sửa thông tin khách hàng
Nhập ID của khách hàng cần sửa
Cập nhật thông tin mới cho khách hàng
3.1.4 Tìm kiếm khách hàng
Nhập ID hoặc tên khách hàng cần tìm
Sử dụng tìm kiếm tuyến tính để tìm và hiển thị thông tin
Trang 113.1.5 Sắp xếp danh sách khách hàng
Sắp xếp danh sách theo ID hoặc tên
Sử dụng thuật toán sắp xếp nổi bọt trên danh sách liên kết đơn
3.2 Mô hình dữ liệu
ID: Số nguyên duy nhất xác định khách hàng.
Tên: Chuỗi ký tự chứa tên khách hàng.
Địa chỉ: Chuỗi ký tự chứa địa chỉ.
Số điện thoại: Chuỗi ký tự chứa số điện thoại.
IV THIẾT KẾ HỆ THỐNG 4.1 Thiết kế cấu trúc dữ liệu
4.1.1 Định nghĩa cấu trúc khách hàng
struct Customer {
int id;
string name;
string address;
string phone;
Customer* next;
};
4.1.2 Triển khai danh sách liên kết đơn
Sử dụng con trỏ head để trỏ đến đầu danh sách
Mỗi khách hàng (node) chứa con trỏ next trỏ đến khách hàng tiếp theo
Trang 124.2 Thiết kế thuật toán
4.2.1 Thuật toán thêm, xóa, sửa
Thêm:
o Tạo khách hàng mới
o Gán next của khách hàng mới bằng head
o Cập nhật head trỏ đến khách hàng mới
o Code
Customer* createCustomer(int id, string name, string diachi, string SDT) { Customer* newCustomer = new Customer();
newCustomer->id = id;
newCustomer->name = name;
newCustomer->diachi = diachi;
newCustomer->SDT = SDT;
newCustomer->next = nullptr;
return newCustomer;
Xóa:
o Duyệt danh sách để tìm khách hàng
o Điều chỉnh con trỏ của khách hàng trước đó
o Xóa khách hàng khỏi bộ nhớ
o Code
// xoa theo ID
void deleteCustomer(Customer*& head, int id) {
Customer* temp = head;
Customer* prev = nullptr;
// neu node dau la node can xoa
if (temp != nullptr && temp->id == id) {
Trang 13head = temp->next;
delete temp;
cout << "Da xoa khach hang co ID " << id << endl;
return; }
Sửa:
o Tìm khách hàng theo ID
o Cập nhật các thuộc tính cần sửa
o Code
// sua khach hang
void editCustomer(Customer* head, int id) {
Customer* temp = head;
while (temp != nullptr) {
if (temp->id == id) {
cout << "Nhap ten moi: ";
getline(cin, temp->name);
cout << "Nhap dia chi moi: ";
getline(cin, temp->diachi);
cout << "Nhap so dien thoai moi: ";
getline(cin, temp->SDT);
cout << "Da cap nhat thong tin khach hang có ID " << id << endl; return;
}
temp = temp->next;
}
cout << "Khong tim thay khach hang co ID " << id << endl;
}
Trang 144.2.2 Thuật toán sắp xếp nổi bọt trên danh sách liên kết đơn
Sử dụng hai con trỏ để duyệt danh sách
So sánh các phần tử liền kề và hoán đổi dữ liệu nếu cần
Lặp lại cho đến khi danh sách được sắp xếp
4.2.3 Thuật toán tìm kiếm tuyến tính
Duyệt qua từng phần tử từ head
So sánh ID hoặc tên với giá trị cần tìm
Dừng lại khi tìm thấy hoặc kết thúc danh sách
V CÀI ĐẶT VÀ TRIỂN KHAI 5.1 Môi trường phát triển
Ngôn ngữ lập trình: C++
Công cụ: Trình biên dịch GCC/G++, IDE như Visual Studio Code,
Code::Blocks
5.2 Mã nguồn và giải thích
5.2.1 Cấu trúc dữ liệu
Định nghĩa cấu trúc Customer
Khởi tạo con trỏ head trỏ đến danh sách khách hàng
5.2.2 Chức năng hệ thống
Thêm khách hàng: Hàm addCustomer.
o Yêu cầu nhập thông tin từ người dùng
o Tạo khách hàng mới và thêm vào danh sách
o Code
Xóa khách hàng: Hàm deleteCustomer.
o Nhập ID khách hàng cần xóa
o Duyệt danh sách và xóa khách hàng
Trang 15 Sửa thông tin khách hàng: Hàm editCustomer.
o Nhập ID khách hàng cần sửa
o Tìm kiếm và cập nhật thông tin
Tìm kiếm khách hàng: Hàm searchCustomer.
o Nhập ID hoặc tên cần tìm
o Sử dụng tìm kiếm tuyến tính
Sắp xếp danh sách khách hàng: Hàm bubbleSort.
o Thực hiện sắp xếp nổi bọt trên danh sách
Hiển thị danh sách: Hàm displayCustomers.
o Duyệt danh sách và in ra thông tin khách hàng
5.3 Giao diện người dùng
Sử dụng menu trong hàm main để tương tác với người dùng
Hiển thị các lựa chọn và xử lý tương ứng
Hình 1 Giao diện người dùng
Trang 165.4 Ví dụ minh họa
Hình 2 Danh sách trước khi sắp xếp Hình 3 Danh sách sau khi sắp xếp
Hình 4 Tìm kiếm khách hàng
Trang 17Hình 5 Xóa khách hàng Hình 6 Thêm khách hàng
VI KIỂM THỬ VÀ ĐÁNH GIÁ 6.1 Kết quả kiểm thử chức năng
Thêm khách hàng: Kiểm tra thêm mới và kiểm tra danh sách.
Xóa khách hàng: Thử xóa khách hàng tồn tại và không tồn tại.
Sửa thông tin: Kiểm tra cập nhật thông tin đúng cách.
Tìm kiếm: Tìm kiếm khách hàng với các giá trị khác nhau.
Sắp xếp: Kiểm tra danh sách sau khi sắp xếp.
6.2 Đánh giá hiệu năng
6.2.1 Thời gian thực thi
Đo thời gian thực thi các chức năng với số lượng khách hàng khác nhau
So sánh thời gian trước và sau khi sắp xếp
6.2.2 Sử dụng bộ nhớ
Phân tích việc sử dụng bộ nhớ của chương trình
Đảm bảo không có rò rỉ bộ nhớ
Trang 186.3 Nhận xét
Hệ thống hoạt động đúng chức năng
Hiệu suất chấp nhận được với bộ dữ liệu nhỏ
Có thể cải thiện hiệu suất với các thuật toán và cấu trúc dữ liệu khác
VII KẾT LUẬN 7.1 Kết luận
Xây dựng thành công hệ thống quản lý khách hàng sử dụng cấu trúc liên kết đơn
Các chức năng thêm, xóa, sửa, tìm kiếm và sắp xếp hoạt động đúng
Hiểu rõ hơn về cách triển khai cấu trúc và thuật toán cơ bản
TÀI LIỆU THAM KHẢO
1 Nguyễn Hữu Tuấn, (2017) Cấu trúc dữ liệu và giải thuật, Nhà xuất bản Khoa học và Kỹ thuật
2 Nguyễn Văn Ba, (2018), "Ứng dụng thuật toán sắp xếp nổi bọt trong quản lý
dữ liệu", *Tạp chí Khoa học và Công nghệ*, 56(4), 123-130
3 Nguyễn Văn Hạnh & Trần Thị Thu (2020), Lập trình cấu trúc dữ liệu và
giải thuật, Nhà xuất bản Giáo dục Việt Nam.