BO TAI CHINH TRUONG DAI HOC TAI CHINH — MARKETING KHOA CONG NGHE THONG TIN I*[ TRƯỜNG ĐẠI HỌC TÀI CHÍNH - MARKETING ĐỎ ÁN CUỎI KỲ MÔN CƠ SỞ DỮ LIỆU VÀ GIẢI THUẬT Đề tài: CÁU TRÚC HỖ TRỢ QUẢN LÍ DANH MỤC SAN PHAM BAN LA DIEN THOAI GVHD: Th.S Nguyễn Quốc Thanh SVTH: Huỳnh Hoàng Trầm MSSV:2221004326
Lớp: 22DHT03
Tp.HCM, tháng 2 năm 2023
Trang 2
NHAN XET CUA GIANG VIEN
Trang 4
DANH MUC HINH ANH
HÌNH 2.1: KET QUA CHAY CUA CHUONG TRINH NHAP.uo ccccccccccccscccsesecessesssessessessessensecttessse ees HINH 2.2: KET QUA CHAY CUA CHƯƠNG TRÌNH XUẤT
HINH 2.3: KET QUA CHAY CUA TRUONG HGP | LINEAR SEARCH
HÌNH 2.4: KET QUA CHAY CUA TRUONG HGP 2 LINEAR SEARCH .u cccccccccccccccsecceeeeseneeecneenees 8 HINH 2.5: KET QUA CHAY CUA TRUONG HOP | LINEAR SEARCH BẰNG THƯƠNG HIỆU 9 HÌNH 2.6:KÉT QUÁ CHẠY CỦA TRƯỜNG HOP 2 LINEAR SEARCH BANG THƯƠNG HIỆU 9 HÌNH 2.7: KET QUA CHAY CUA TRUONG HGP 1 BINARY SEARCH Lc Qn nhờ 11 HÌNH 2.8: KET QUA CHAY CUA TRUONG HGP 2 BINARY SEARCH cc nn nhờ 11 HiNH 2.9: KET QUA CHAY CUA TRUONG HGP 1 BINARY SEARCH BẰNG THƯƠNG HIỆU 12 HÌNH 2.10: KÉT QUÁ CHẠY CỦA TRƯỜNG HOP 2 BINARY SEARCH BANG THUONG HIEU 12
HiNH 2.11: KET QUA CHAY CUA TRUGNG HOP l LINAER SEARCH CẢI TIỀN 55-¿ 14 HÌNH 2.12: KÉT QUÁ CHẠY CỦA TRƯỜNG HOP 2 LINAER SEARCH CAI TIEN w.cccccccceeeeeeeees 14 HÌNH 2.13: KÉT QUÁ CHẠY CỦA CHƯƠNG TRÌNH SẮP XÉP SHAKER SORT c co cóc 16 HÌNH 2.14: KÉT QUÁ CHẠY CỦA CHƯƠNG TRÌNH SẮP XÉP SELECTION SORT ò 17
HÌNH 2.15: KÉT QUÁ CHẠY CỦA CHƯƠNG TRÌNH SẮP XÉP INTERCHANGE SORI 19
HÌNH 2.16: KET QUA CHAY CUA CHUGNG TRÌNH SẮP XÉP BUBBLE SORT cccccộ 20 HÌNH 2.17: KÉT QUÁ CHẠY CỦA CHƯƠNG TRÌNH SẮP XÉP ÏNSERTION SORT cc¿ 21 HÌNH 2.18: KÉT QUÁ CHẠY CỦA CHƯƠNG TRÌNH SẮP XÉP QUICK SORI c 275555: 23 HÌNH 2.19: KÉT QUÁ CHẠY CỦA CHƯƠNG TRÌNH SẮP XÉP MERGE SORI (co cằ 26 HÌNH 2.20:KẾT QUẢ CHẠY CỦA CHƯƠNG TRÌNH XÓA SẢN PHẢM 2 2c 2c che 27 HÌNH 3.1: KẾT QUÁ CHẠY CHƯƠNG TRÌNH NHẬP -L- L2 Q22 E21 121111 112112 11 tk He 32 HÌNH 3.2: KẾT QUÁ CHẠY CỦA CHƯƠNG TRÌNH XUẤTT L2 2: 22222112 2E 2E HH r 33
HÌNH 3.3:KÉT QUÁ CHẠY CỦA TRƯỜNG HỢP l LINEAR SEARCH Là Q Tnhh nh 35 HÌNH 3.4: KÉT QUẢ CHẠY CUA TRUONG HGP 2 LINEAR SEARCH 2c Q Tnhh He 35 HiNH 3.5: KET QUA CHAY CUA TRUONG HGP 1 LINEAR SEARCH BẰNG TÊN THƯƠNG HIỆU 37 HÌNH 3.6:KÉT QUÁ CHẠY CỦA TRƯỜNG HỢP 2 LINEAR SEARCH BANG TEN THUONG HIEU 37 HÌNH 3.7:KÉT QUÁ CHẠY CHƯƠNG TRÌNH SẮP XÉP BẰNG SELECTION SORT c cà 39 HÌNH 3.8: KÉT QUẢ CHẠY CHƯƠNG TRÌNH SẮP XÉP BẰNG ÏNTERCHANGE SORT 40 HÌNH 3.9: KÉT QUẢ CHẠY CHƯƠNG TRÌNH SẮP XÉP BẰNG BUBBLE SORIT c (co cà 42 HÌNH 3.10: KÉT QUÁ CHẠY CHƯƠNG TRÌNH SẮP XÉP BẰNG INSERTION SORIT 44
Trang 7Ll Giới thiệu :
Xây dựng chương trình nhằm tìm kiếm và sắp xếp thông tin trên các cầu trúc giúp hỗ trợ quản lí danh mục sản phẩm điện thoại Thông tin điện thoại bao gồm: Mã sản phẩm, thương hiệu, ROM (Read Only Memory), RAM (Ramdom Access Memory), s6
SIM, giá tiền
1.2 Cấu trúc :
Thông tin của điện thoại can quan li:
MaSP: Mã sản phẩm, dùng đề phân biệt từng sản phẩm điện thoại (giống thương hiệu hoặc khác), gồm một chuỗi kí tự số gồm 13 kí tự Trong đó, 2-3 kí tự đầu qui định quốc gia sản xuất
Thuonghieu: Thương hiệu của điện thoại, chỉ quản lí các tên tiếng Anh với chiều đài tối đa khoảng 7 ký tự
RƠM: Dung lương bộ nhớ ROM của điện thoại, có thể lưu trữ nhiều gigabyte (GB) tu 1-256 GB
RAM: Dung lượng bộ nhớ RAM của điện thoại, chỉ lưu trữ được vài megabyte (MB) chỉ có 4-8 MB mỗi chip
SoSIM: Số điện thoại, gồm một chuỗi kí tự số gồm 10 kí tự Số SIM có thể có sự trùng nhau
Gia: Giá tiền của mỗi chiếc điện thoại, gồm một chuỗi kí tự với chiều đài tối đa 10 kí tự Ngăn cách các số hàng nghìn là dấu chấm, với đơn vị giá tiên là vnđ
Trang 8Định nghĩa cấu trúc điện thoại: struct Dienthoai
{
char MaSP[13]; char Thuonghieu[10]; char SoSIM[15]; int ROM; int RAM; float Gia;
k
1.3 Dữ liệu mẫu:
STT Mã SP Thuong |ROM| RA Số SIM Giá tiền hiệu M l 2200 Samsung 210 |8 0332049368 31 triệu vnđ 2 2202 Oppo 200 |8 0333474809 5.9 triệu vnđ 3 2204 Iphone 220_ |6 0353480465 25.9 triệu vnđ 4 2220 Samsung 186 |4 0333484849 16.8 triệu vnđ 5 2222 Vivo 173 |4 0335280965 5 triệu vnđ 6 2121 Redmi 164 |6 0363480454 3.9 triệu vnđ 7 2304 Iphone 240 |8 0353680684 39.7 triệu vnđ 8 2337 Oppo 180 |6 0343234567 3 triệu vnđ 9_ 12967 Samsung 200 |8 0332463890 18 triệu vnđ 10 | 3000 Vivo 178 |4 0972653845 2.5 triệu vnđ
1.4 Các chức năng :
Các chức năng trong mảng cấu trúc : -_ Nhập danh sách điện thoại - _ Xuất danh sách điện thoại
- _ Tìm thông tin điện thoại theo Mã sản phẩm (dùng Linear Search và Binary Search)
- Tim thông tin điện thoại theo Tên thương hiệu (dung Linear Search va Binary Search)
- Sap xép danh sach theo Ma san pham (dting Shaker Sort) - Sắp xếp đanh sách theo Mã sản phẩm (dùng Selection Sort) - _ Sắp xếp đanh sách theo Mã sản phẩm (dùng Interchange Sort) - _ Sắp xếp đanh sách theo Mã sản phẩm (dùng Bubble Sort) - Sap xép danh sach theo Ma san pham (dung Insertion Sort) - _ Sắp xếp đanh sách theo Mã sản phẩm ( đùng Quick Sort) -_ Sắp xếp danh sách theo Mã sản phâm (dùng Merge Sort)
Trang 9Xóa sản phâm điện thoại dựa vào biên phụ vi tri Các chức năng trên danh sách liên kết :
Nhập danh sách điện thoại Xuất danh sách điện thoại
Trang 102.1 Nhập danh sách diện thoại : 2.1.1 Chương trình con :
Đề nhập danh sách điện thoại, ta cần xây đựng 2 chương trình con gồm:
- _ void Nhap_o (Dienthoai &b): Hỗ trợ nhập thông tin của sản phẩm điện thoại gom MaSP, Thuonghieu, ROM, RAM, SoSIM, Gia
Trang 112.1.2 Kiểm tra : (Hàm main kiểm tra ctc)
/Hàm chính int main()
{
//Khai bao mang so nguyen 100 phab tur< Dienthoai arr[100];
Intn=2; /Hàm nhập máng
Nhap(arr, n);
return 0; system("pause");
2.1.3 Kết quả chạy :
pham: 2202
thoai: Samsung
220A
a dien thoai: Iphone
Trang 122.2 Xuất danh sách điện thoại : 2.2.1 Chương trình con :
Đề xuất danh sách điện thoại, ta cũng cần phải xây dựng 2 chương trình con, bao gồm: - void Xuat_o (Dienthoai b): Hỗ trợ xuất các thông tin đã nhập của một sản
phẩm điện thoại
- void Xuat ( Dienthoai arr[], int n): H6 tro xuat mang san pham dién thoại
//Dinh nghia ham xuaHé
void Xuat_o(Dienthoai b)
{
cout << b.MaSP << "\t"; cout <<b.Thuonghieu <<"\t";
cout << b.ROM << "(GB)" << "\t"; cout << b.RAM << "(MB)" <<"\t";
cout << b.SoSIM << "\t"; cout << b.Gia <<" (trieu)" << "\t"; } //Định nghĩa hàm xuầHmang void Xuat(Dienthoai arr[], int n) for (int 1 = 031 < n;i++) { Xuat_o(arr[i]); cout << endl;
2.2.2 Kiểm tra: (Hàm main kiểm tra ctc) /Hàm chính int main() //Khai bao mang so nguyen 100 pha tử< Dienthoal arr[100]; Intn= 2; //Hàm nhập máng Nhap(arr, n); //Hàm xuàHmáng
Cout <<" DANH SACH THONG TIN CUA DIEN
Trang 13Xuat(arr, n); return 0; system("pause"); z 2.2.3 Kết quả chạy: DANH SACH THONG TIN CUA DIEN THOAI MA SP THUONG HIEU ROM RAM 2202 Samsung 2204
Hình 2.2: Kết quả chạy của chương trình xuất
2.3 Tìm kiếm điện thoại bằng mã sản phẩm với Linear Search : 2.3.1 Chương trình con :
Thực hiện tìm kiếm với khóa chính là Mã sản phẩm (dữ liệu khóa)
Để tìm thông tin của điện thoại dựa theo mã sản phẩm, ta cần xây dựng như sau: - void LinearSearch ( Dienthoai arr[],int n, char x[] ) : Giải thuật tìm kiếm bằng
tuyến tính, hồ trợ tìm ra điện thoại với mã sản phâm có được
/Định nghĩa hàm LinearSearch theo mã sán phầm int LinearSearch(Dienthoai arr[], int n, char x[])
{
inti=0;
while (stremp(arr[i].MaSP,x) !=0 && i <n)
{ it; }
if G <n)
{
}
return -1; return 1;
2.3.2 Kiểm tra : (Hàm main kiểm tra ctc)
/Hàm chính int main()
//Khai bao mang so nguyen 100 phab tur< Dienthoai arr[100];
Trang 14//Kiêm tra LinearSearch char MaSP[13];
cout << "Nhap ma SP can tim: "; cin.getline(MaSP, 13);
int 1 = LinearSearch(arr, n, MaSP); if (i >= 0)
cout << "Ket qua tim kiem: " << endl; Xuat_o(arr[i]); else { cout << "Khong co thong tin " << endl; } return 0; system("pause");
2.3.3 Kết quả chạy :
x
¢ Trường hợp L: Tim thay
Nhap ma SP can tim: 2204 Ket qua tim kiem: 2204 Iphone Hình 2.3: Kết quả chạy của Trường hợp | Linear Search e Truong hop 2: Khong tim thay : 2206
Hình 2.4: Kết quả chạy của Trường hợp 2 Linear Search
2.4 Tìm kiếm sản phẩm điện thoại bằng Tên thương hiệu với Linear Search : 2.4.1 Chương trình con :
Chúng ta thực hiện tìm kiếm với khóa là Tên thương hiệu
Để tìm thông tin điện thoại dựa theo Tên thương hiệu, ta cần xây dựng như sau: - void LinearSearch2(Dienthoai arr[], int n): Giải thuật tìm kiếm bằng tuyến tinh,
hỗ trợ tìm ra sản phẩm dựa trên tên thương hiệu có được
//Tìm sán phẩm điện thoại theo Tên thương hiệu
Trang 15inti=0; while (<n && stremp(tendt, arr[i] Thuonghieu) != 0) it; if(i<n) Xuat_o(arr[1]);
else cout << "Khong tim thay san pham” << endl;
2.4.2 Kiểm tra : (Hàm main kiểm tra ctc) // Ham chinh int main() { //Khai bao máng sôHguyên 100 phâẩB tử< Dienthoal arr[100]; Intn= 3; //Hàm nhập máng Nhap(arr, n); LinearSearch2(arr, n); system( pause”); } 2.4.3 Kết quả chạy : ¢ Trường hợp 1: Tim thay | két qua
ten thuong hieu can ti
Ipho - 2
Hình 2.5: Kết quả chạy của Trường hợp 1 Linear Search bằng thương hiệu ¢ Trường hợp 2: Không tìm thấy
Hình 2.6:Kết quả chạy của Trường hợp 2 Linear Search bằng thương hiệu
2.5 Tìm kiếm sản phẩm điện thoại bằng mã sản phẩm với Binary Search:
2.5.1 Chương trình con :
Chúng ta thực hiện tìm kiếm với khóa chính là Mã sản phẩm (đữ liệu khóa)
Dé tim thông tin cua điện thoại dựa theo mã sản phâm, cân xây dựng như sau: - void BinarySearch (Dienthoai arr [], int n, char x[]): Giải thuật tìm kiếm nhị
phan, hỗ trợ tìm điện thoại đựa trên mã sản phầm //Dinh nghia ham Binary Search theo mã sán phầm int BinarySearch(Dienthoai arr[], int n, char x[])
Trang 16Dé tai : Quan lí sản phâm điện thoại
{
int left = 0; int right =n - 1; int mid = (left + right) / 2;
while ((left <= right) && stremp(arr[mid].MaSP, x) !=
0) {
if (stremp(arr[imid].MaSP, x) > 0) right = mid - 1;
mid = (left + right) / 2;
}
else
{
left = mid + 1; mid = (left + right) / 2;
} }
if (left > right)
return -Ï; }
return mid;
}
2.5.2 Kiểm tra: (Hàm main kiểm tra ctc)
/Hàm chính int main()
//Khai bao máng sôHiguyên 100 phầB tử< Dienthoai arr[100];
intn = 2; /Hàm nhập máng Nhap(arr, n);
//Kiém tra LinearSearch char MaSP[13];
cout << "\nNhap ma SP can tim: "; cin >> MaSP;
int 1 = BinarySearch(arr, n, MaSP); if (i >= 0)
{
cout << "\nKet qua tim kiem: " << endl; Xuat_o(arr[i]);
Trang 17{
cout << "Khong co thong tin " << endl;
} return 0; system("pause"); 2.5.3 Kết quả chạy : ¢ Truong hop 1: Tim thay Hình 2.7: Kết quả chạy của Trường hợp | Binary Search Trường hợp 2: Không tìm thấy
Hình 2.8: Kết quả chạy của Trường hợp 2 Binary Search
2.6 Tìm kiếm sản phẩm điện thoại dựa vào tên thương hiệu với Binary Search:
2.6.1 Chương trình con:
Chúng ta thực hiện tìm kiếm sàn phâm với khóa là Tên thương hiệu
Đề sắp xếp sản phâm bằng Tên thương hiệu, ta cần thực hiện như sau :
- void BinarySearch2 (Dienthoai arr[], int n); Gidi thuật tìm kiếm nhị phân, hỗ trợ tim kiém san pham bang tén thuong hiéu
Trang 18else
left = mid + 1;
mid = (left + right) / 2;
} } if (eft > night) cout << "\nKhong tim thay san pham" << endl; else Xuat_o(arr[mid]); 2.6.2 Kiểm tra : (Hàm main kiểm tra cfc) // Ham chinh int main()
//Khai bao mang s6Hguyén 100 pha tử< Dienthoal arr[100]; Intn= 3; //Hàm nhập máng Nhap(arr, n); Xuat(arr, n); BinarySearch?2(arr, n); system("pause");
2.6.3 Kết quả chạy :
¢ Truong hop 1:Tim thay san pham
Trang 19//Dinh nghia ham Linear Search cai tiéH
int LinearSearch1(Dienthoai arr[], int n) t char masp[10]; cout << "\nNhap ma san pham can tim: "; cin.getline(masp, 10); inti=0; while (stremp(masp,arr[i].MaSP)!=0 && stremp(masp,arr[n- 1-i].MaSP)!=0 && i<n/2) t 1†+; } 1 (stremp(masp,arr[1].MaSP)==0) refumn 1; }
1Ý (stremp(masp,arr[n- 1-1].MaSP)==0) return (n - 1 - 1);
} return -1;
2.7.2 Kiểm tra : (Hàm main kiểm tra cfc) // Hàm chính int main() { //Khai bao mang sôHguyên 100 phầB tử< Dienthoai arr[100]; Intn= 3;
//Hàm nhập máng
Nhap(arr, n);
Xuat(arr, n); int i=LinearSearch 1 (arr, n); ifG==-l) cout << "\nKhong tim thay san pham " << endl; else cout << "\nKet qua tim thay: " << endl]; Xuat_o(arr[1]); }
Trang 202.7.3 Kết quả chạy :
¢ Trường hợp I: Tìm thấy sản phẩm
Nhap ma san pham can tim: 2204
qua tim thay:
Iphone
Hình 2.11: Kết quả chạy của Trường hợp 1 Linaer Search cải tiễn
e Trường hợp 2 : Không tìm thấy kết quả
Nhap ma san pham can tim: 2121 Khong tim thay san pham
Hình 2.12: Kết quả chạy của Trường hợp 2 Linaer Search cải tiến 2.8 Sắp xếp điện thoại dựa vào mã sản phẩm với Shaker Sort : 2.8.1 Chương trình con : Thực hiện sắp xếp đựa vào Mã sản phẩm (Mã khóa) Đề sắp xếp điện thoại bằng mã sản phẩm, ta thực hiện như sau: - _ void Hoanvi (Dienthoai&a, Dienthoai&b):Hỗ trợ đôi chỗ hai phần tử khi sắp xếp - void ShakerSort (Dienthoai arr[] , int n , char x[]): H6 trợ sắp xêp, theo chu ki | lần 2 lượt đi và về
- Lượt đi: đây phân tử bé nhât về dau day
- Lượt về: đây phần tử lớn nhất về cuối dãy //Dinh nghĩa hàm hoán vi
void Hoanvi(Dienthoai& a, Dienthoai& b)
{
Dienthoai t = a; a=b; b=t } //Dinh nghia ham ShakerS ort theo m4 san phar void ShakerS ort(Dienthoai arr[], int n) { int left = 0; int right =n - 1; Intk=n - l; while (left < nght)
{