TRƯỜNG ĐẠI HỌC MỞ HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN ĐỀ KIỂM TRA TỰ LUẬN Môn: IT05(Cấu trúc dữ liệu và giải thuật) Họ tên sinh viên: Ngày sinh: Lớp: ĐỀ SỐ 1 *Đề Bài: Cài đặt chương trình sử dụng danh sách liên kết đơn (hoặc liên kết kép) để quản lý TAINGHE theo yêu cầu sau: *Thông tin TAINGHE gồm: MaTaiNghe(Mã tai nghe), TenTaiNghe(Tên tai nghe), NuocSX(Nước sản xuất), DonGia(Đơn giá), SoLuong(Số lượng), ThanhTien(Thành tiền) Trong đó: ThanhTien = DonGia * SoLuong *Các thao tác cần thực hiện gồm: Yêu cầu 1: Nhập danh sách tai nghe từ bàn phím và lưu vào DSLK Đơn (hoặc DSLK kép) Yêu cầu 2: In danh sách tai nghe đã nhập Yêu cầu 3: Tìm kiếm tai nghe có tên là x nào đó, với x được nhập từ bàn phím Yêu cầu 4: Sắp xếp danh sách tai nghe theo thứ tự tăng dần của đơn giá Yêu cầu 5: Tính tổng tiền của các tai nghe đã nhập Yêu cầu 6: Hiển thị tên các tai nghe có đơn giá > 250.000 đồng Yêu cầu 7: Cho biết tên (hoặc thông tin đầy đủ) của tai nghe có đơn giá cao nhất *Hướng dẫn cách làm bài và nộp bài -Sinh viên tạo 01 file chương trình bằng C/C++ -Đầu mỗi file chương trình phải có đủ thông tin: Mã sinh viên, Họ tên, Lớp -Tên File chính của chương trình được đặt tên theo nguyên tắc sau: Nguyên tắc: Mã SV-Họ tên-Lớp-Số đề.cpp Ví dụ: 1910A001-NguyenThiHa-19A5-De01.cpp HẾT! BÀI LÀM: ĐỀ SỐ 1 YÊU CẦU 1 Mã code #include #include using namespace std; // Cấu trúc lưu thông tin của một tai nghe struct TaiNghe {
Trang 1TRƯỜNG ĐẠI HỌC MỞ HÀ
NỘI
KHOA CÔNG NGHỆTHÔNG TIN
ĐỀ KIỂM TRA TỰ LUẬN
Môn: IT05(Cấu trúc dữ liệu và
giải thuật)
ĐỀ SỐ 1
*Đề Bài: Cài đặt chương trình sử dụng danh sách liên kết đơn (hoặc liên kết kép)
để quản lý TAINGHE theo yêu cầu sau:
*Thông tin TAINGHE gồm: MaTaiNghe(Mã tai nghe), TenTaiNghe(Tên tai
nghe), NuocSX(Nước sản xuất), DonGia(Đơn giá), SoLuong(Số lượng),
ThanhTien(Thành tiền) Trong đó: ThanhTien = DonGia * SoLuong
-Sinh viên tạo 01 file chương trình bằng C/C++
-Đầu mỗi file chương trình phải có đủ thông tin: Mã sinh viên, Họ tên, Lớp
-Tên File chính của chương trình được đặt tên theo nguyên tắc sau:Họ tên sinh viên: Ngày sinh: Lớp:
Trang 2Nguyên tắc: Mã SV-Họ tên-Lớp-Số đề.cppVí dụ: 1910A001-NguyenThiHa-19A5-De01.cpp
HẾT!BÀI LÀM:
ĐỀ SỐ 1YÊU CẦU 1Mã code
#include <iostream>#include <string>using namespace std;// Cấu trúc lưu thông tin của một tai nghestruct TaiNghe {
string maTaiNghe; string tenTaiNghe; string nuocSX; double donGia; int soLuong; double thanhTien; TaiNghe* next;};
// Hàm tính thành tiền cho tai nghedouble tinhThanhTien(double donGia, int soLuong) { return donGia * soLuong;
}// Hàm thêm tai nghe vào danh sách liên kết đơn
Trang 3void themTaiNghe(TaiNghe*& head) { TaiNghe* taiNgheMoi = new TaiNghe(); cout << "Nhap ma tai nghe: ";
cin >> taiNgheMoi->maTaiNghe; cout << "Nhap ten tai nghe: "; cin.ignore();
getline(cin, taiNgheMoi->tenTaiNghe); cout << "Nhap nuoc san xuat: ";
getline(cin, taiNgheMoi->nuocSX); cout << "Nhap don gia: ";
cin >> taiNgheMoi->donGia; cout << "Nhap so luong: "; cin >> taiNgheMoi->soLuong; // Tính thành tiền
>thanhTien = tinhThanhTien(>donGia, >soLuong);
taiNgheMoi->next = head; // Thêm phần tử mới vào đầu danh sách liên kết head = taiNgheMoi;
}// Hàm nhập danh sách tai nghevoid nhapDanhSachTaiNghe(TaiNghe*& head) { int soLuong;
cout << "Nhap so luong tai nghe: "; cin >> soLuong;
for (int i = 0; i < soLuong; ++i) {
Trang 4cout << "Nhap thong tin tai nghe thu " << i + 1 << ":\n"; themTaiNghe(head);
}}int main() { TaiNghe* danhSachTaiNghe = nullptr; // Khởi tạo danh sách liên kết rỗng // Nhập danh sách tai nghe từ bàn phím
nhapDanhSachTaiNghe(danhSachTaiNghe); // Bạn có thể tiếp tục các yêu cầu khác từ đây return 0;
}*** Giải thíchGiải thích:DSLK đơn (Danh sách liên kết đơn): Mỗi phần tử tai nghe được lưu trữ trong một cấu trúc TaiNghe, và có con trỏ next trỏ đến phần tử tiếp theo trong danh sách
nhapDanhSachTaiNghe: Hàm này cho phép nhập thông tin cho một số lượng tai nghe bất kỳ, sau đó mỗi tai nghe sẽ được thêm vào danh sách liên kết đơn
***Yêu cầu 1 ,2.Mã code
#include <iostream>#include <string>#include <iomanip> // Thư viện để định dạng số thựcusing namespace std;
// Cấu trúc lưu thông tin của một tai nghe
Trang 5struct TaiNghe { string maTaiNghe; string tenTaiNghe; string nuocSX; double donGia; int soLuong; double thanhTien; TaiNghe* next;};
// Hàm tính thành tiền cho tai nghedouble tinhThanhTien(double donGia, int soLuong) { return donGia * soLuong;
}// Hàm thêm tai nghe vào danh sách liên kết đơnvoid themTaiNghe(TaiNghe*& head) {
TaiNghe* taiNgheMoi = new TaiNghe(); cout << "Nhap ma tai nghe: ";
cin >> taiNgheMoi->maTaiNghe; cout << "Nhap ten tai nghe: "; cin.ignore();
getline(cin, taiNgheMoi->tenTaiNghe); cout << "Nhap nuoc san xuat: ";
getline(cin, taiNgheMoi->nuocSX); cout << "Nhap don gia: ";
cin >> taiNgheMoi->donGia;
Trang 6cout << "Nhap so luong: "; cin >> taiNgheMoi->soLuong; // Tính thành tiền
>thanhTien = tinhThanhTien(>donGia, >soLuong);
taiNgheMoi->next = head; // Thêm phần tử mới vào đầu danh sách liên kết head = taiNgheMoi;
}// Hàm nhập danh sách tai nghevoid nhapDanhSachTaiNghe(TaiNghe*& head) { int soLuong;
cout << "Nhap so luong tai nghe: "; cin >> soLuong;
for (int i = 0; i < soLuong; ++i) { cout << "Nhap thong tin tai nghe thu " << i + 1 << ":\n"; themTaiNghe(head);
}}// Hàm in danh sách tai nghevoid inDanhSachTaiNghe(TaiNghe* head) { TaiNghe* temp = head;
while (temp != nullptr) { cout << "Ma tai nghe: " << temp->maTaiNghe << endl; cout << "Ten tai nghe: " << temp->tenTaiNghe << endl; cout << "Nuoc san xuat: " << temp->nuocSX << endl;
Trang 7cout << "Don gia: " << fixed << setprecision(0) << temp->donGia << endl; // Hiển thị không dùng ký hiệu khoa học
cout << "So luong: " << temp->soLuong << endl; cout << "Thanh tien: " << fixed << setprecision(0) << temp->thanhTien << endl; // Hiển thị không dùng ký hiệu khoa học
cout << " -\n"; temp = temp->next;
}}int main() { TaiNghe* danhSachTaiNghe = nullptr; // Khởi tạo danh sách liên kết rỗng // Nhập danh sách tai nghe từ bàn phím
nhapDanhSachTaiNghe(danhSachTaiNghe); // In danh sách tai nghe
cout << "\nDanh sach tai nghe vua nhap:\n"; inDanhSachTaiNghe(danhSachTaiNghe); return 0;
}
Giải thích:
Hàm inDanhSachTaiNghe: Hàm này duyệt qua danh sách liên kết và in
thông tin của từng tai nghe ra màn hình, bao gồm mã tai nghe, tên, nước sản xuất, đơn giá, số lượng và thành tiền
Trong main: Sau khi nhập danh sách tai nghe, chương trình sẽ gọi hàm
inDanhSachTaiNghe để hiển thị danh sách vừa nhập.***Yêu cầu 1,2,3
Trang 8Mã code#include <iostream>#include <string>#include <algorithm> // Thư viện để chuyển chuỗi về chữ thường#include <cctype> // Thư viện cho hàm tolower
#include <iomanip>using namespace std;// Cấu trúc lưu thông tin của một tai nghestruct TaiNghe {
string maTaiNghe; string tenTaiNghe; string nuocSX; double donGia; int soLuong; double thanhTien; TaiNghe* next;};
// Hàm chuyển chuỗi thành chữ thườngstring toLowerCase(string str) {
transform(str.begin(), str.end(), str.begin(), ::tolower); return str;
}// Hàm loại bỏ khoảng trắng thừa ở đầu và cuối chuỗistring trim(const string& str) {
size_t first = str.find_first_not_of(' ');
Trang 9if (first == string::npos) return ""; size_t last = str.find_last_not_of(' '); return str.substr(first, last - first + 1);}
// Hàm tính thành tiền cho tai nghedouble tinhThanhTien(double donGia, int soLuong) { return donGia * soLuong;
}// Hàm thêm tai nghe vào danh sách liên kết đơnvoid themTaiNghe(TaiNghe*& head) {
TaiNghe* taiNgheMoi = new TaiNghe(); cout << "Nhap ma tai nghe: ";
cin >> taiNgheMoi->maTaiNghe; cout << "Nhap ten tai nghe: "; cin.ignore(); // Loại bỏ ký tự xuống dòng còn lại getline(cin, taiNgheMoi->tenTaiNghe);
cout << "Nhap nuoc san xuat: "; getline(cin, taiNgheMoi->nuocSX); cout << "Nhap don gia: ";
cin >> taiNgheMoi->donGia; cout << "Nhap so luong: "; cin >> taiNgheMoi->soLuong; // Tính thành tiền
>thanhTien = tinhThanhTien(>donGia, >soLuong);
Trang 10taiNgheMoi->next = head; head = taiNgheMoi;
}// Hàm nhập danh sách tai nghevoid nhapDanhSachTaiNghe(TaiNghe*& head) { int soLuong;
cout << "Nhap so luong tai nghe: "; cin >> soLuong;
for (int i = 0; i < soLuong; ++i) { cout << "Nhap thong tin tai nghe thu " << i + 1 << ":\n"; themTaiNghe(head);
}}// Hàm in danh sách tai nghevoid inDanhSachTaiNghe(TaiNghe* head) { TaiNghe* temp = head;
while (temp != nullptr) { cout << "Ma tai nghe: " << temp->maTaiNghe << endl; cout << "Ten tai nghe: " << temp->tenTaiNghe << endl; cout << "Nuoc san xuat: " << temp->nuocSX << endl; cout << "Don gia: " << fixed << setprecision(0) << temp->donGia << endl; cout << "So luong: " << temp->soLuong << endl;
cout << "Thanh tien: " << fixed << setprecision(0) << temp->thanhTien << endl;
cout << " -\n";
Trang 11temp = temp->next; }
}// Hàm tìm kiếm tai nghe theo từ khóa (chuỗi con)void timKiemTaiNghe(TaiNghe* head, string tuKhoa) { tuKhoa = trim(toLowerCase(tuKhoa)); // Loại bỏ khoảng trắng và chuyển thành chữ thường
TaiNghe* temp = head; bool timThay = false; while (temp != nullptr) { string tenTaiNghe = trim(toLowerCase(temp->tenTaiNghe)); // Loại bỏ khoảng trắng và chuyển tên tai nghe thành chữ thường để so sánh
// Kiểm tra xem từ khóa có nằm trong tên tai nghe hay không if (tenTaiNghe.find(tuKhoa) != string::npos) {
cout << "Da tim thay tai nghe:\n"; cout << "Ma tai nghe: " << temp->maTaiNghe << endl; cout << "Ten tai nghe: " << temp->tenTaiNghe << endl; cout << "Nuoc san xuat: " << temp->nuocSX << endl; cout << "Don gia: " << fixed << setprecision(0) << temp->donGia << endl;
cout << "So luong: " << temp->soLuong << endl; cout << "Thanh tien: " << fixed << setprecision(0) << temp->thanhTien << endl;
cout << " -\n"; timThay = true;
Trang 12} temp = temp->next; }
if (!timThay) { cout << "Khong tim thay tai nghe co tu khoa: " << tuKhoa << endl; }
}int main() { TaiNghe* danhSachTaiNghe = nullptr; // Khởi tạo danh sách liên kết rỗng // Nhập danh sách tai nghe từ bàn phím
nhapDanhSachTaiNghe(danhSachTaiNghe); // In danh sách tai nghe
cout << "\nDanh sach tai nghe vua nhap:\n"; inDanhSachTaiNghe(danhSachTaiNghe); // Tìm kiếm tai nghe theo từ khóa
string tuKhoa; cin.ignore(); // Loại bỏ ký tự xuống dòng còn lại từ lần nhập trước cout << "\nNhap ten tai nghe can tim: ";
getline(cin, tuKhoa); timKiemTaiNghe(danhSachTaiNghe, tuKhoa); return 0;
}
Giải thích:
Hàm timKiemTaiNghe: Hàm này duyệt qua danh sách liên kết để tìm
kiếm tai nghe có tên trùng với giá trị người dùng nhập vào Nếu tìm thấy,
Trang 13thông tin chi tiết của tai nghe đó sẽ được in ra Nếu không, chương trình sẽthông báo rằng không tìm thấy.
Trong main: Sau khi in danh sách tai nghe, chương trình yêu cầu nhập tên
tai nghe cần tìm kiếm, sau đó gọi hàm timKiemTaiNghe để thực hiện tìm kiếm
*** YÊU CẦU 1,2,3,4Mã code
#include <iostream>#include <string>#include <algorithm> // Thư viện để chuyển chuỗi về chữ thường#include <cctype> // Thư viện cho hàm tolower
#include <iomanip>using namespace std;// Cấu trúc lưu thông tin của một tai nghestruct TaiNghe {
string maTaiNghe; string tenTaiNghe; string nuocSX; double donGia; int soLuong; double thanhTien; TaiNghe* next;};
// Hàm chuyển chuỗi thành chữ thườngstring toLowerCase(string str) {
Trang 14transform(str.begin(), str.end(), str.begin(), ::tolower); return str;
}// Hàm loại bỏ khoảng trắng thừa ở đầu và cuối chuỗistring trim(const string& str) {
size_t first = str.find_first_not_of(' '); if (first == string::npos) return ""; size_t last = str.find_last_not_of(' '); return str.substr(first, last - first + 1);}
// Hàm tính thành tiền cho tai nghedouble tinhThanhTien(double donGia, int soLuong) { return donGia * soLuong;
}// Hàm thêm tai nghe vào danh sách liên kết đơnvoid themTaiNghe(TaiNghe*& head) {
TaiNghe* taiNgheMoi = new TaiNghe(); cout << "Nhap ma tai nghe: ";
cin >> taiNgheMoi->maTaiNghe; cout << "Nhap ten tai nghe: "; cin.ignore(); // Loại bỏ ký tự xuống dòng còn lại getline(cin, taiNgheMoi->tenTaiNghe);
cout << "Nhap nuoc san xuat: "; getline(cin, taiNgheMoi->nuocSX); cout << "Nhap don gia: ";
Trang 15cin >> taiNgheMoi->donGia; cout << "Nhap so luong: "; cin >> taiNgheMoi->soLuong; // Tính thành tiền
>thanhTien = tinhThanhTien(>donGia, >soLuong);
taiNgheMoi->next = head; head = taiNgheMoi;
}// Hàm nhập danh sách tai nghevoid nhapDanhSachTaiNghe(TaiNghe*& head) { int soLuong;
cout << "Nhap so luong tai nghe: "; cin >> soLuong;
for (int i = 0; i < soLuong; ++i) { cout << "Nhap thong tin tai nghe thu " << i + 1 << ":\n"; themTaiNghe(head);
}}// Hàm in danh sách tai nghevoid inDanhSachTaiNghe(TaiNghe* head) { TaiNghe* temp = head;
while (temp != nullptr) { cout << "Ma tai nghe: " << temp->maTaiNghe << endl; cout << "Ten tai nghe: " << temp->tenTaiNghe << endl;
Trang 16cout << "Nuoc san xuat: " << temp->nuocSX << endl; cout << "Don gia: " << fixed << setprecision(0) << temp->donGia << endl; cout << "So luong: " << temp->soLuong << endl;
cout << "Thanh tien: " << fixed << setprecision(0) << temp->thanhTien << endl;
cout << " -\n"; temp = temp->next;
}}// Hàm tìm kiếm tai nghe theo từ khóa (chuỗi con)void timKiemTaiNghe(TaiNghe* head, string tuKhoa) { tuKhoa = trim(toLowerCase(tuKhoa)); // Loại bỏ khoảng trắng và chuyển thành chữ thường
TaiNghe* temp = head; bool timThay = false; while (temp != nullptr) { string tenTaiNghe = trim(toLowerCase(temp->tenTaiNghe)); // Loại bỏ khoảng trắng và chuyển tên tai nghe thành chữ thường để so sánh
// Kiểm tra xem từ khóa có nằm trong tên tai nghe hay không if (tenTaiNghe.find(tuKhoa) != string::npos) {
cout << "Da tim thay tai nghe:\n"; cout << "Ma tai nghe: " << temp->maTaiNghe << endl; cout << "Ten tai nghe: " << temp->tenTaiNghe << endl; cout << "Nuoc san xuat: " << temp->nuocSX << endl;
Trang 17cout << "Don gia: " << fixed << setprecision(0) << temp->donGia << endl;
cout << "So luong: " << temp->soLuong << endl; cout << "Thanh tien: " << fixed << setprecision(0) << temp->thanhTien << endl;
cout << " -\n"; timThay = true;
} temp = temp->next; }
if (!timThay) { cout << "Khong tim thay tai nghe co tu khoa: " << tuKhoa << endl; }
}// Hàm hoán đổi thông tin giữa hai tai nghevoid swapTaiNghe(TaiNghe* a, TaiNghe* b) { swap(a->maTaiNghe, b->maTaiNghe); swap(a->tenTaiNghe, b->tenTaiNghe); swap(a->nuocSX, b->nuocSX);
swap(a->donGia, b->donGia); swap(a->soLuong, b->soLuong); swap(a->thanhTien, b->thanhTien);}
// Hàm sắp xếp danh sách tai nghe theo thứ tự tăng dần của đơn giávoid sapXepTaiNgheTheoDonGia(TaiNghe*& head) {
Trang 18if (head == nullptr) return; // Nếu danh sách rỗng thì không làm gì TaiNghe* i = head;
while (i != nullptr) { TaiNghe* j = i->next; while (j != nullptr) { if (i->donGia > j->donGia) { swapTaiNghe(i, j); // Hoán đổi thông tin nếu đơn giá của i lớn hơn j }
j = j->next; }
i = i->next; }
}int main() { TaiNghe* danhSachTaiNghe = nullptr; // Khởi tạo danh sách liên kết rỗng // Nhập danh sách tai nghe từ bàn phím
nhapDanhSachTaiNghe(danhSachTaiNghe); // In danh sách tai nghe
cout << "\nDanh sach tai nghe vua nhap:\n"; inDanhSachTaiNghe(danhSachTaiNghe); // Tìm kiếm tai nghe theo từ khóa
string tuKhoa; cin.ignore(); // Loại bỏ ký tự xuống dòng còn lại từ lần nhập trước cout << "\nNhap ten tai nghe can tim: ";
getline(cin, tuKhoa);
Trang 19timKiemTaiNghe(danhSachTaiNghe, tuKhoa); // Sắp xếp danh sách tai nghe theo đơn giá sapXepTaiNgheTheoDonGia(danhSachTaiNghe); cout << "\nDanh sach tai nghe sau khi sap xep theo don gia tang dan:\n"; inDanhSachTaiNghe(danhSachTaiNghe);
return 0;}
***Yêu cầu 1,2,3,4,5#include <iostream>#include <string>#include <algorithm> // Thêm thư viện này để dùng hàm transform#include <iomanip> // Thư viện để định dạng hiển thị số
using namespace std;// Cấu trúc lưu thông tin của một tai nghestruct TaiNghe {
string maTaiNghe; string tenTaiNghe; string nuocSX; double donGia; int soLuong; double thanhTien; TaiNghe* next;};
// Hàm chuyển chuỗi thành chữ thườngstring toLowerCase(string str) {
Trang 20transform(str.begin(), str.end(), str.begin(), ::tolower); return str;
}// Hàm loại bỏ khoảng trắng thừa ở đầu và cuối chuỗistring trim(const string& str) {
size_t first = str.find_first_not_of(' '); if (first == string::npos) return ""; size_t last = str.find_last_not_of(' '); return str.substr(first, last - first + 1);}
// Hàm thêm tai nghe vào danh sách liên kết đơnvoid themTaiNghe(TaiNghe*& head) {
TaiNghe* taiNgheMoi = new TaiNghe(); cout << "Nhap ma tai nghe: ";
cin >> taiNgheMoi->maTaiNghe; cout << "Nhap ten tai nghe: "; cin.ignore(); // Loại bỏ ký tự xuống dòng còn lại getline(cin, taiNgheMoi->tenTaiNghe);
cout << "Nhap nuoc san xuat: "; getline(cin, taiNgheMoi->nuocSX); cout << "Nhap don gia: ";
cin >> taiNgheMoi->donGia; cout << "Nhap so luong: "; cin >> taiNgheMoi->soLuong; // Tính thành tiền
Trang 21taiNgheMoi->thanhTien = taiNgheMoi->donGia * taiNgheMoi->soLuong; taiNgheMoi->next = head;
head = taiNgheMoi;}
// Hàm nhập danh sách tai nghevoid nhapDanhSachTaiNghe(TaiNghe*& head) { int soLuong;
cout << "Nhap so luong tai nghe: "; cin >> soLuong;
for (int i = 0; i < soLuong; ++i) { cout << "Nhap thong tin tai nghe thu " << i + 1 << ":\n"; themTaiNghe(head);
}}// Hàm in danh sách tai nghevoid inDanhSachTaiNghe(TaiNghe* head) { TaiNghe* temp = head;
while (temp != nullptr) { cout << "Ma tai nghe: " << temp->maTaiNghe << endl; cout << "Ten tai nghe: " << temp->tenTaiNghe << endl; cout << "Nuoc san xuat: " << temp->nuocSX << endl; cout << "Don gia: " << fixed << setprecision(0) << temp->donGia << endl; cout << "So luong: " << temp->soLuong << endl;
cout << "Thanh tien: " << fixed << setprecision(0) << temp->thanhTien << endl;
Trang 22cout << " -\n"; temp = temp->next;
}}// Hàm tìm kiếm tai nghe theo từ khóa (chuỗi con)void timKiemTaiNghe(TaiNghe* head, string tuKhoa) { tuKhoa = trim(toLowerCase(tuKhoa)); // Loại bỏ khoảng trắng và chuyển thành chữ thường
TaiNghe* temp = head; bool timThay = false; while (temp != nullptr) { string tenTaiNghe = trim(toLowerCase(temp->tenTaiNghe)); // Loại bỏ khoảng trắng và chuyển tên tai nghe thành chữ thường để so sánh
// Kiểm tra xem từ khóa có nằm trong tên tai nghe hay không if (tenTaiNghe.find(tuKhoa) != string::npos) {
cout << "Da tim thay tai nghe:\n"; cout << "Ma tai nghe: " << temp->maTaiNghe << endl; cout << "Ten tai nghe: " << temp->tenTaiNghe << endl; cout << "Nuoc san xuat: " << temp->nuocSX << endl; cout << "Don gia: " << fixed << setprecision(0) << temp->donGia << endl;
cout << "So luong: " << temp->soLuong << endl; cout << "Thanh tien: " << fixed << setprecision(0) << temp->thanhTien << endl;
cout << " -\n";
Trang 23timThay = true; }
temp = temp->next; }
if (!timThay) { cout << "Khong tim thay tai nghe co tu khoa: " << tuKhoa << endl; }
}// Hàm hoán đổi thông tin giữa hai tai nghevoid swapTaiNghe(TaiNghe* a, TaiNghe* b) { swap(a->maTaiNghe, b->maTaiNghe); swap(a->tenTaiNghe, b->tenTaiNghe); swap(a->nuocSX, b->nuocSX);
swap(a->donGia, b->donGia); swap(a->soLuong, b->soLuong); swap(a->thanhTien, b->thanhTien);}
// Hàm sắp xếp danh sách tai nghe theo thứ tự tăng dần của đơn giávoid sapXepTaiNgheTheoDonGia(TaiNghe*& head) {
if (head == nullptr) return; // Nếu danh sách rỗng thì không làm gì TaiNghe* i = head;
while (i != nullptr) { TaiNghe* j = i->next; while (j != nullptr) { if (i->donGia > j->donGia) {
Trang 24swapTaiNghe(i, j); // Hoán đổi thông tin nếu đơn giá của i lớn hơn j }
j = j->next; }
i = i->next; }
}// Hàm tính tổng tiền của các tai nghe đã nhậpdouble tinhTongTien(TaiNghe* head) { double tongTien = 0;
TaiNghe* temp = head; while (temp != nullptr) { tongTien += temp->thanhTien; // Cộng dồn thành tiền của từng tai nghe temp = temp->next;
} return tongTien;}
int main() { TaiNghe* danhSachTaiNghe = nullptr; // Khởi tạo danh sách liên kết rỗng // Nhập danh sách tai nghe từ bàn phím
nhapDanhSachTaiNghe(danhSachTaiNghe); // In danh sách tai nghe
cout << "\nDanh sach tai nghe vua nhap:\n"; inDanhSachTaiNghe(danhSachTaiNghe); // Tìm kiếm tai nghe theo từ khóa
Trang 25string tuKhoa; cin.ignore(); // Loại bỏ ký tự xuống dòng còn lại từ lần nhập trước cout << "\nNhap ten tai nghe can tim: ";
getline(cin, tuKhoa); timKiemTaiNghe(danhSachTaiNghe, tuKhoa); // Sắp xếp danh sách tai nghe theo đơn giá sapXepTaiNgheTheoDonGia(danhSachTaiNghe); cout << "\nDanh sach tai nghe sau khi sap xep theo don gia tang dan:\n"; inDanhSachTaiNghe(danhSachTaiNghe);
// Tính tổng tiền của các tai nghe đã nhập double tongTien = tinhTongTien(danhSachTaiNghe); cout << "\nTong tien cua cac tai nghe da nhap: " << fixed << setprecision(0) << tongTien << endl;
return 0;}
*** YÊU CẦU 123456#include <iostream>#include <string>#include <algorithm> // Thư viện cho hàm transform#include <iomanip> // Thư viện để định dạng hiển thị sốusing namespace std;
// Cấu trúc lưu thông tin của một tai nghestruct TaiNghe {
string maTaiNghe; string tenTaiNghe;
Trang 26string nuocSX; double donGia; int soLuong; double thanhTien; TaiNghe* next;};
// Hàm chuyển chuỗi thành chữ thườngstring toLowerCase(string str) {
transform(str.begin(), str.end(), str.begin(), ::tolower); return str;
}// Hàm loại bỏ khoảng trắng thừa ở đầu và cuối chuỗistring trim(const string& str) {
size_t first = str.find_first_not_of(' '); if (first == string::npos) return ""; size_t last = str.find_last_not_of(' '); return str.substr(first, last - first + 1);}
// Hàm thêm tai nghe vào danh sách liên kết đơnvoid themTaiNghe(TaiNghe*& head) {
TaiNghe* taiNgheMoi = new TaiNghe(); cout << "Nhap ma tai nghe: ";
cin >> taiNgheMoi->maTaiNghe; cout << "Nhap ten tai nghe: "; cin.ignore(); // Loại bỏ ký tự xuống dòng còn lại
Trang 27getline(cin, taiNgheMoi->tenTaiNghe); cout << "Nhap nuoc san xuat: ";
getline(cin, taiNgheMoi->nuocSX); cout << "Nhap don gia: ";
cin >> taiNgheMoi->donGia; cout << "Nhap so luong: "; cin >> taiNgheMoi->soLuong; // Tính thành tiền
taiNgheMoi->thanhTien = taiNgheMoi->donGia * taiNgheMoi->soLuong; taiNgheMoi->next = head;
head = taiNgheMoi;}
// Hàm nhập danh sách tai nghevoid nhapDanhSachTaiNghe(TaiNghe*& head) { int soLuong;
cout << "Nhap so luong tai nghe: "; cin >> soLuong;
for (int i = 0; i < soLuong; ++i) { cout << "Nhap thong tin tai nghe thu " << i + 1 << ":\n"; themTaiNghe(head);
}}// Hàm in danh sách tai nghevoid inDanhSachTaiNghe(TaiNghe* head) { TaiNghe* temp = head;
Trang 28while (temp != nullptr) { cout << "Ma tai nghe: " << temp->maTaiNghe << endl; cout << "Ten tai nghe: " << temp->tenTaiNghe << endl; cout << "Nuoc san xuat: " << temp->nuocSX << endl; cout << "Don gia: " << fixed << setprecision(0) << temp->donGia << endl; cout << "So luong: " << temp->soLuong << endl;
cout << "Thanh tien: " << fixed << setprecision(0) << temp->thanhTien << endl;
cout << " -\n"; temp = temp->next;
}}// Hàm tìm kiếm tai nghe theo từ khóa (chuỗi con)void timKiemTaiNghe(TaiNghe* head, string tuKhoa) { tuKhoa = trim(toLowerCase(tuKhoa)); // Loại bỏ khoảng trắng và chuyển thành chữ thường
TaiNghe* temp = head; bool timThay = false; while (temp != nullptr) { string tenTaiNghe = trim(toLowerCase(temp->tenTaiNghe)); // Loại bỏ khoảng trắng và chuyển tên tai nghe thành chữ thường để so sánh
// Kiểm tra xem từ khóa có nằm trong tên tai nghe hay không if (tenTaiNghe.find(tuKhoa) != string::npos) {
cout << "Da tim thay tai nghe:\n"; cout << "Ma tai nghe: " << temp->maTaiNghe << endl;
Trang 29cout << "Ten tai nghe: " << temp->tenTaiNghe << endl; cout << "Nuoc san xuat: " << temp->nuocSX << endl; cout << "Don gia: " << fixed << setprecision(0) << temp->donGia << endl;
cout << "So luong: " << temp->soLuong << endl; cout << "Thanh tien: " << fixed << setprecision(0) << temp->thanhTien << endl;
cout << " -\n"; timThay = true;
} temp = temp->next; }
if (!timThay) { cout << "Khong tim thay tai nghe co tu khoa: " << tuKhoa << endl; }
}// Hàm sắp xếp danh sách tai nghe theo thứ tự tăng dần của đơn giávoid sapXepTaiNgheTheoDonGia(TaiNghe*& head) {
if (head == nullptr) return; // Nếu danh sách rỗng thì không làm gì TaiNghe* i = head;
while (i != nullptr) { TaiNghe* j = i->next; while (j != nullptr) { if (i->donGia > j->donGia) { swap(i->maTaiNghe, j->maTaiNghe);
Trang 30swap(i->tenTaiNghe, j->tenTaiNghe); swap(i->nuocSX, j->nuocSX);
swap(i->donGia, j->donGia); swap(i->soLuong, j->soLuong); swap(i->thanhTien, j->thanhTien); }
j = j->next; }
i = i->next; }
}// Hàm tính tổng tiền của các tai nghe đã nhậpdouble tinhTongTien(TaiNghe* head) { double tongTien = 0;
TaiNghe* temp = head; while (temp != nullptr) { tongTien += temp->thanhTien; // Cộng dồn thành tiền của từng tai nghe temp = temp->next;
} return tongTien;}
// Hàm hiển thị tên các tai nghe có đơn giá > 250.000 đồngvoid hienThiTaiNgheDonGiaCao(TaiNghe* head) {
TaiNghe* temp = head; bool coTaiNghe = false;
Trang 31cout << "\nCac tai nghe co don gia > 250.000 dong:\n"; while (temp != nullptr) {
if (temp->donGia > 250000) { cout << temp->tenTaiNghe << " (Don gia: " << fixed << setprecision(0) << temp->donGia << ")\n";
coTaiNghe = true; }
temp = temp->next; }
if (!coTaiNghe) { cout << "Khong co tai nghe nao co don gia lon hon 250.000 dong.\n"; }
}int main() { TaiNghe* danhSachTaiNghe = nullptr; // Khởi tạo danh sách liên kết rỗng // Nhập danh sách tai nghe từ bàn phím
nhapDanhSachTaiNghe(danhSachTaiNghe); // In danh sách tai nghe
cout << "\nDanh sach tai nghe vua nhap:\n"; inDanhSachTaiNghe(danhSachTaiNghe); // Tìm kiếm tai nghe theo từ khóa
string tuKhoa; cin.ignore(); // Loại bỏ ký tự xuống dòng còn lại từ lần nhập trước cout << "\nNhap ten tai nghe can tim: ";
getline(cin, tuKhoa);
Trang 32timKiemTaiNghe(danhSachTaiNghe, tuKhoa); // Sắp xếp danh sách tai nghe theo đơn giá sapXepTaiNgheTheoDonGia(danhSachTaiNghe); cout << "\nDanh sach tai nghe sau khi sap xep theo don gia tang dan:\n"; inDanhSachTaiNghe(danhSachTaiNghe);
// Tính tổng tiền của các tai nghe đã nhập double tongTien = tinhTongTien(danhSachTaiNghe); cout << "\nTong tien cua cac tai nghe da nhap: " << fixed << setprecision(0) << tongTien << endl;
// Hiển thị tên các tai nghe có đơn giá > 250.000 đồng hienThiTaiNgheDonGiaCao(danhSachTaiNghe); return 0;
}*** Yêu cầu 1234567#include <iostream>#include <string>#include <algorithm> // Thư viện cho hàm transform#include <iomanip> // Thư viện để định dạng hiển thị sốusing namespace std;
// Cấu trúc lưu thông tin của một tai nghestruct TaiNghe {
string maTaiNghe; string tenTaiNghe; string nuocSX; double donGia;
Trang 33int soLuong; double thanhTien; TaiNghe* next;};
// Hàm chuyển chuỗi thành chữ thườngstring toLowerCase(string str) {
transform(str.begin(), str.end(), str.begin(), ::tolower); return str;
}// Hàm loại bỏ khoảng trắng thừa ở đầu và cuối chuỗistring trim(const string& str) {
size_t first = str.find_first_not_of(' '); if (first == string::npos) return ""; size_t last = str.find_last_not_of(' '); return str.substr(first, last - first + 1);}
// Hàm thêm tai nghe vào danh sách liên kết đơnvoid themTaiNghe(TaiNghe*& head) {
TaiNghe* taiNgheMoi = new TaiNghe(); cout << "Nhap ma tai nghe: ";
cin >> taiNgheMoi->maTaiNghe; cout << "Nhap ten tai nghe: "; cin.ignore(); // Loại bỏ ký tự xuống dòng còn lại getline(cin, taiNgheMoi->tenTaiNghe);
cout << "Nhap nuoc san xuat: ";
Trang 34getline(cin, taiNgheMoi->nuocSX); cout << "Nhap don gia: ";
cin >> taiNgheMoi->donGia; cout << "Nhap so luong: "; cin >> taiNgheMoi->soLuong; // Tính thành tiền
taiNgheMoi->thanhTien = taiNgheMoi->donGia * taiNgheMoi->soLuong; taiNgheMoi->next = head;
head = taiNgheMoi;}
// Hàm nhập danh sách tai nghevoid nhapDanhSachTaiNghe(TaiNghe*& head) { int soLuong;
cout << "Nhap so luong tai nghe: "; cin >> soLuong;
for (int i = 0; i < soLuong; ++i) { cout << "Nhap thong tin tai nghe thu " << i + 1 << ":\n"; themTaiNghe(head);
}}// Hàm in danh sách tai nghevoid inDanhSachTaiNghe(TaiNghe* head) { TaiNghe* temp = head;
while (temp != nullptr) { cout << "Ma tai nghe: " << temp->maTaiNghe << endl;
Trang 35cout << "Ten tai nghe: " << temp->tenTaiNghe << endl; cout << "Nuoc san xuat: " << temp->nuocSX << endl; cout << "Don gia: " << fixed << setprecision(0) << temp->donGia << endl; cout << "So luong: " << temp->soLuong << endl;
cout << "Thanh tien: " << fixed << setprecision(0) << temp->thanhTien << endl;
cout << " -\n"; temp = temp->next;
}}// Hàm tìm kiếm tai nghe theo từ khóa (chuỗi con)void timKiemTaiNghe(TaiNghe* head, string tuKhoa) { tuKhoa = trim(toLowerCase(tuKhoa)); // Loại bỏ khoảng trắng và chuyển thành chữ thường
TaiNghe* temp = head; bool timThay = false; while (temp != nullptr) { string tenTaiNghe = trim(toLowerCase(temp->tenTaiNghe)); // Loại bỏ khoảng trắng và chuyển tên tai nghe thành chữ thường để so sánh
// Kiểm tra xem từ khóa có nằm trong tên tai nghe hay không if (tenTaiNghe.find(tuKhoa) != string::npos) {
cout << "Da tim thay tai nghe:\n"; cout << "Ma tai nghe: " << temp->maTaiNghe << endl; cout << "Ten tai nghe: " << temp->tenTaiNghe << endl; cout << "Nuoc san xuat: " << temp->nuocSX << endl;
Trang 36cout << "Don gia: " << fixed << setprecision(0) << temp->donGia << endl;
cout << "So luong: " << temp->soLuong << endl; cout << "Thanh tien: " << fixed << setprecision(0) << temp->thanhTien << endl;
cout << " -\n"; timThay = true;
} temp = temp->next; }
if (!timThay) { cout << "Khong tim thay tai nghe co tu khoa: " << tuKhoa << endl; }
}// Hàm sắp xếp danh sách tai nghe theo thứ tự tăng dần của đơn giávoid sapXepTaiNgheTheoDonGia(TaiNghe*& head) {
if (head == nullptr) return; // Nếu danh sách rỗng thì không làm gì TaiNghe* i = head;
while (i != nullptr) { TaiNghe* j = i->next; while (j != nullptr) { if (i->donGia > j->donGia) { swap(i->maTaiNghe, j->maTaiNghe); swap(i->tenTaiNghe, j->tenTaiNghe); swap(i->nuocSX, j->nuocSX);
Trang 37swap(i->donGia, j->donGia); swap(i->soLuong, j->soLuong); swap(i->thanhTien, j->thanhTien); }
j = j->next; }
i = i->next; }
}// Hàm tính tổng tiền của các tai nghe đã nhậpdouble tinhTongTien(TaiNghe* head) { double tongTien = 0;
TaiNghe* temp = head; while (temp != nullptr) { tongTien += temp->thanhTien; // Cộng dồn thành tiền của từng tai nghe temp = temp->next;
} return tongTien;}
// Hàm hiển thị tên các tai nghe có đơn giá > 250.000 đồngvoid hienThiTaiNgheDonGiaCao(TaiNghe* head) {
TaiNghe* temp = head; bool coTaiNghe = false; cout << "\nCac tai nghe co don gia > 250.000 dong:\n"; while (temp != nullptr) {
Trang 38if (temp->donGia > 250000) { cout << temp->tenTaiNghe << " (Don gia: " << fixed << setprecision(0) << temp->donGia << ")\n";
coTaiNghe = true; }
temp = temp->next; }
if (!coTaiNghe) { cout << "Khong co tai nghe nao co don gia lon hon 250.000 dong.\n"; }
}// Hàm tìm tai nghe có đơn giá cao nhất và hiển thị thông tinvoid hienThiTaiNgheDonGiaCaoNhat(TaiNghe* head) { if (head == nullptr) {
cout << "Danh sach tai nghe rong.\n"; return;
} TaiNghe* temp = head; TaiNghe* taiNgheCaoNhat = head; // Giả sử tai nghe đầu tiên có đơn giá cao nhất
// Duyệt qua danh sách để tìm tai nghe có đơn giá cao nhất while (temp != nullptr) {
if (temp->donGia > taiNgheCaoNhat->donGia) { taiNgheCaoNhat = temp;
}
Trang 39temp = temp->next; }
// Hiển thị thông tin của tai nghe có đơn giá cao nhất cout << "\nThong tin tai nghe co don gia cao nhat:\n"; cout << "Ma tai nghe: " << taiNgheCaoNhat->maTaiNghe << endl; cout << "Ten tai nghe: " << taiNgheCaoNhat->tenTaiNghe << endl; cout << "Nuoc san xuat: " << taiNgheCaoNhat->nuocSX << endl; cout << "Don gia: " << fixed << setprecision(0) << taiNgheCaoNhat->donGia << endl;
cout << "So luong: " << taiNgheCaoNhat->soLuong << endl; cout << "Thanh tien: " << fixed << setprecision(0) << taiNgheCaoNhat->thanhTien << endl;
cout << " -\n";}
int main() { TaiNghe* danhSachTaiNghe = nullptr; // Khởi tạo danh sách liên kết rỗng // Nhập danh sách tai nghe từ bàn phím
nhapDanhSachTaiNghe(danhSachTaiNghe); // In danh sách tai nghe
cout << "\nDanh sach tai nghe vua nhap:\n"; inDanhSachTaiNghe(danhSachTaiNghe); // Tìm kiếm tai nghe theo từ khóa
string tuKhoa; cin.ignore(); // Loại bỏ ký tự xuống dòng còn lại từ lần nhập trước cout << "\nNhap ten tai nghe can tim: ";
Trang 40getline(cin, tuKhoa); timKiemTaiNghe(danhSachTaiNghe, tuKhoa); // Sắp xếp danh sách tai nghe theo đơn giá sapXepTaiNgheTheoDonGia(danhSachTaiNghe); cout << "\nDanh sach tai nghe sau khi sap xep theo don gia tang dan:\n"; inDanhSachTaiNghe(danhSachTaiNghe);
// Tính tổng tiền của các tai nghe đã nhập double tongTien = tinhTongTien(danhSachTaiNghe); cout << "\nTong tien cua cac tai nghe da nhap: " << fixed << setprecision(0) << tongTien << endl;
// Hiển thị tên các tai nghe có đơn giá > 250.000 đồng hienThiTaiNgheDonGiaCao(danhSachTaiNghe); // Hiển thị thông tin tai nghe có đơn giá cao nhất hienThiTaiNgheDonGiaCaoNhat(danhSachTaiNghe); return 0;
}