1. Trang chủ
  2. » Thể loại khác

Tự luận cấu trúc dữ liệu và giải thuật it05 ehou

88 10 5
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề 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
Trường học Trường Đại học Mở Hà Nội
Chuyên ngành IT05(Cấu trúc dữ liệu và giải thuật)
Thể loại Đề kiểm tra tự luận
Thành phố Hà Nội
Định dạng
Số trang 88
Dung lượng 108,62 KB

Nội dung

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 1

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)

ĐỀ 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 2

Nguyê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 3

void 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 4

cout << "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 5

struct 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 6

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) { 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 7

cout << "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 8

Mã 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 9

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: ";

cin >> taiNgheMoi->donGia; cout << "Nhap so luong: "; cin >> taiNgheMoi->soLuong; // Tính thành tiền

>thanhTien = tinhThanhTien(>donGia, >soLuong);

Trang 10

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;

cout << " -\n";

Trang 11

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"; 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 13

thô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 14

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 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 15

cin >> 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 16

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 17

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 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 18

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) { 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 19

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);

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 20

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: "; 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 21

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; 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 22

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; 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 23

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) {

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 24

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; }

}// 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 25

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); // 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 26

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(' '); 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 27

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

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 28

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"; 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 29

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;

} 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 30

swap(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 31

cout << "\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 32

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); 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 33

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 getline(cin, taiNgheMoi->tenTaiNghe);

cout << "Nhap nuoc san xuat: ";

Trang 34

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;

while (temp != nullptr) { cout << "Ma tai nghe: " << temp->maTaiNghe << endl;

Trang 35

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; cout << "Ten tai nghe: " << temp->tenTaiNghe << endl; cout << "Nuoc san xuat: " << temp->nuocSX << endl;

Trang 36

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); swap(i->tenTaiNghe, j->tenTaiNghe); swap(i->nuocSX, j->nuocSX);

Trang 37

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; cout << "\nCac tai nghe co don gia > 250.000 dong:\n"; while (temp != nullptr) {

Trang 38

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"; }

}// 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 39

temp = 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 40

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;

// 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;

}

Ngày đăng: 24/09/2024, 10:27

TỪ KHÓA LIÊN QUAN

w