DANH MỤC HÌNH ẢNHHình 2.1: Hình ảnh kết quả chạy của chương trình con nhập danh sách khách hàng...11 Hình 2.2: Hình ảnh kết quả chạy của chương trình con xuất danh sách khách hàng...12 H
Trang 1BỘ TÀI CHÍNH TRƯỜNG ĐẠI HỌC TÀI CHÍNH MARKETING
KHOA CÔNG NGHỆ THÔNG TIN
ĐỒ ÁN
XÂY DỰNG CHỨC NĂNG TÌM KIẾM VÀ SẮP XẾP TRÊN MẢNG CẤU TRÚC VÀ DANH SÁCH LIÊN KẾT THEO CHỦ ĐỀ ĐƯỢC CHỌN
Giảng viên hướng dẫn: Thầy Nguyễn Quốc Thanh
Sinh viên thực hiện: 2121012043_Nguyễn Khánh Vân
Mã lớp học phần: 2121112001208
Trang 2KHOA CÔNG NGHỆ THÔNG TIN
NGUYỄN KHÁNH VÂN
ĐỒ ÁN XÂY DỰNG CHỨC NĂNG TÌM KIẾM VÀ SẮP XẾP TRÊN MẢNG CẤU TRÚC VÀ DANH SÁCH LIÊN KẾT THEO CHỦ ĐỀ ĐƯỢC CHỌN
CHUYÊN NGÀNH: HỆ THỐNG THÔNG TIN QUẢN LÝ
NGƯỜI HƯỚNG DẪN: THS.NGUYỄN QUỐC THANH
Trang 3MỤC LỤC
Table of Contents
DANH M C B NG Ụ Ả 3
DANH M C HÌNH NH Ụ Ả 4
CH ƯƠ NG 1 GI I THI U Ớ Ệ 6
1.1 Gi i thi u đềề bài ớ ệ 6
1.2 Cấấu trúc 6
1.3 D li u mấẫu (>=10 thông tn đôấi t ữ ệ ượ ng cấền x lý) ử 7
1.4 Các ch c năng ( li t kề ch c năng sẽẫ xấy d ng) ứ ệ ứ ự 8
CH ƯƠ NG 2 TÌM KIẾẾM VÀ SẮẾP XẾẾP TRẾN M NG CẤẾU TRÚC Ả 9
2.1 Nh p danh sách khách hàng ậ 9
2.1.1 Ch ươ ng trình con 9
2.1.2 Kếết qu ch y ả ạ 11
2.2 Xuấất danh sách khách hàng 11
2.2.1 Ch ươ ng trình con 11
2.2.2 Kếết qu ch y ả ạ 12
2.3 Tìm thông tn khách hàng thẽo mã khách hàng ( dùng Linẽar Sẽarch và Binary Sẽarch) 13 2.3.1 Ch ươ ng trình con 13
2.3.2 Kếết qu ch y ả ạ 14
2.3.3 Kếết qu ch y ả ạ 16
2.4 Săấp xềấp danh sách khách hàng thẽo mã khách hàng: 16
2.4.1 Kếết qu khi ch a sắếp xếếp: ả ư 16
2.4.2 Ch ươ ng trình con 16
2.4.3 Kết qu ch y dùng Shaker Sort ả ạ 18
2.4.4 Kếết qu ch y dùng Selecton Sort ả ạ 19
2.4.5 Kếết qu ch y dùng Interchange Sort ả ạ 21
2.4.6 Kếết qu ch y dùng Bubble Sort ả ạ 22
2.4.7 Kếết qu ch y dùng Inserton Sort ả ạ 23
2.4.8 Kếết qu ch y dùng Quick Sort ả ạ 25
2.4.9 Kếết qu ch y dùng Merge Sort ả ạ 28
2.5 Đ ki m tra các ch ể ể ươ ng trình con ta dùng 2 hàm: 28
CH ƯƠ NG 3 TÌM KIẾẾM VÀ SẮẾP XẾẾP TRẾN DANH SÁCH LIẾN KẾẾT 35
3.1 Định nghĩa phần tử danh sách 35
3.1.1 Chương trình con 35
3.2 Định nghĩa danh sách 35
Trang 43.2.1 Chương trình con 35
3.3 Khởi tạo danh sách 35
3.3.1 Chương trình con 35
3.4 Tạo phần tử danh sách 36
3.4.1 Chương trình con 36
3.5 Nhập danh sách khách hàng 36
3.5.1 Chương trình con 36
3.5.2 kết quả chạy 37
3.6 Xuất danh sách khách hàng 38
3.6.1 Chương trình con 38
3.6.2 Kết quả chạy 39
3.7 Đếm số khách hàng có trong danh sách 39
3.7.1 Chương trình con 39
3.7.2 Kết quả chạy 40
3.8 Tìm kiếm thông tin khách hàng có trong danh sách 40
3.8.1 Chương trình con 40
3.8.2 kết quả chạy 41
3.9 sắp xếp danh sách khách hàng theo mã khách hàng 41
3.9.1 chương trình con 41
3.9.2 Danh sách khi chưa sắp xếp: 42
3.9.3 Kết quả chạy dùng Selection Sort 43
3.9.4 Kết quả chạy dùng Interchange Sort 45
3.9.5 Kết quả chạy dùng Bubble Sort 47
3.9.6 Kết quả chạy dùng Insertion Sort 49
3.9.7 Kết quả chạy dùng Quick Sort 51
3.10 Kiểm tra chương trình con 51
3.10.1 Để kiểm tra các chương trình con ta sử dụng 2 hàm: 51
3.10.2 kết quả chạy 55
CHƯƠNG 4 KẾT LUẬN 56
4.1 Các chức năng đã làm được 56
4.2 Các chức năng chưa làm được 56
CH ƯƠ NG 5 TÀI LI U THAM KH O Ệ Ả 58
Trang 5DANH MỤC BẢNG
Bkng 1.1 bkng thông tin khách hàng 5
Trang 6DANH MỤC HÌNH ẢNH
Hình 2.1: Hình ảnh kết quả chạy của chương trình con nhập danh sách khách hàng 11
Hình 2.2: Hình ảnh kết quả chạy của chương trình con xuất danh sách khách hàng 12
Hình 2.3: Hình ảnh kết quả chạy của chương trình con linear search theo mã khách hàng 14
Hình 2.4: hình ảnh kết quả chạy của chương trình con binary search theo mã khách hàng 16
Hình 2.5: Hình ảnh danh sách khách hàng khi chưa được sắp xếp 16
Hình 2.6: Hình ảnh danh sách khách hàng sau khi sắp xếp ( dùng shaker sort ) theo mã khách hàng 18
Hình 2.7: Hình ảnh danh sách khách hàng sau khi sắp xếp ( dùng Selection Sort ) theo mã khách hàng 19
Hình 2.8: Hình ảnh danh sách khách hàng sau khi sắp xếp ( dùng Interchange Sort ) theo mã khách hàng 21
Hình 2.9: Hình ảnh danh sách khách hàng sau khi sắp xếp ( dùng Bubble Sort ) theo mã khách hàng 22
Hình 2.10: Hình ảnh danh sách khách hàng sau khi sắp xếp ( dùng Insertion Sort ) theo mã khách hàng 23
Hình 2.11: Hình ảnh danh sách khách hàng sau khi sắp xếp ( dùng QuickSort Sort ) theo mã khách hàng 25
Hình 2.12: Hình ảnh danh sách khách hàng sau khi sắp xếp ( dùng Merge Sort ) theo mã khách hàng 28
Hình 2.13: Hình ảnh kết quả chạy liệt kê các chức năng trong chương trình và kiểm tra 34
Hình 3.1: Hình ảnh kết quả chạy hàm nhập danh sách khách hàng 38
Hình 3.2: HÌnh ảnh kết quả chạy xuất danh sách khách hàng 39
Hình 3.3: Hình ảnh kết quả chạy đếm số khách hàng có trong danh sách là 40
Hình 3.4: hình ảnh kết quả chạy chức năng tìm kiếm khách hàng theo mã khách hàng
41
Hình 3.5: Hình ảnh danh sách khách hàng khi chưa sắp xếp 42
Hình 3.6: Hình ảnh danh sách khách hàng sau khi sắp xếp ( dùng selection sort ) 43
Hình 3.7 Hình ảnh danh sách khách hàng sau khi sắp xếp (dùng Interchange sort ).: 45
Hình 3.8: Hình ảnh danh sách khách hàng sau khi sắp xếp ( dùng Bubble sort ) 47
Hình 3.9 Hình ảnh danh sách khách hàng sau khi sắp xếp(dùng Insertion sort ).: .49
Hình 3.10: Hình ảnh danh sách khách hàng sau khi sắp xếp ( dùng quick sort ) 51
Hình 3.11: Hình ảnh kết quả chạy liệt kê các chức năng trong chương trình và kiểm tra 55
Trang 8CHƯƠNG 1 GIỚI THIỆU
1.1 Giới thiệu đề bài
Xây dựng chức năng tìm kiếm và sắp xếp trên các cấu trúc và danh sách liên kết hỗ trợ quản lý thông tin khách hàng thân thiết bao gồm: Mã khách hàng(MaKH), Họ (Ho), Tên (Ten), Năm (Nam), Điểm tích luỹ đang có (Diem), Doanh số mua hàng (Doanhso)
1.2 Cấu trúc
Thông tin khách hàng cần quản lý gồm:
MaKH: Mã khách hàng, gồm 1 chuỗi ký tự số có chiều dài 4 ký tự
Ho: Họ và tên chữ lót, chỉ định quản lý các tên tiếng Việt với chiều dài mỗi chữ khoảng
7 ký tự
Ten: Tên, chỉ gồm 1 chữ Việt với chiều dài tối đa khoảng 7 ký tự
Nam: Năm, gồm 1 chuỗi ký tự số có chiều dài 4 ký tự
Diem: Điểm tích luỹ đang có, ghi nhận điểm tích luỹ của các khách hàng
Doanhso: Doanh số mua hàng, ghi nhận doanh số mua hàng của khách hàng Tính theo đơn vị Việt Nam đồng( ngàn đồng )
Cấu trúc dữ liệu hỗ trợ quản lý thông tin khách hàng:
MaKH: chuỗi gồm 4 ký tự số
Ho: chuỗi tối đa 30 ký tự
Ten: Chuỗi tối đa 8 ký tự
Nam: chuỗi gồm 4 ký tự số
Diem: số nguyên không âm (Diem>=0)
Doanhso: số thực dương ( ngàn đồng )
Định nghĩa cấu trúc khách hàng:
Trang 101.4 Các chức năng ( liệt kê chức năng sẽ xây dựng)
Sắp xếp danh sách theo mã khách hàng ( dùng Shaker Sort )
Sắp xếp danh sách theo mã khách hàng ( dùng Selection Sort )
Sắp xếp danh sách theo mã khách hàng ( dùng Interchange Sort )
Sắp xếp danh sách theo mã khách hàng ( dùng Bubble Sort )
Sắp xếp danh sách theo mã khách hàng ( dùng Insertion Sort )
Sắp xếp danh sách theo mã khách hàng ( dùng Quick Sort )
Sắp xếp danh sách theo mã khách hàng ( dùng Merge Sort )
Sắp xếp thông tin khách hàng ( dùng Selection Sort )
Sắp xếp thông tin khách hàng ( dùng Quick Sort )
Trang 11CHƯƠNG 2 TÌM KIẾM VÀ SẮP XẾP TRÊN MẢNG
CẤU TRÚC
2.1 Nhập danh sách khách hàng
2.1.1 Chương trình con
Để nhập danh sách khách hàng, cần xây dựng hai chương trình con gồm:
void nhapKH(KhachHang &kh): hỗ trợ nhập thông tin 1 khách hàng gồm
mã khách hàng, họ, tên, năm quản lý, điểm tích luỹ, doanh số
void nhapdsKH( KhachHang a[], int &n): hỗ trợ nhập danh sách khách hàng
Trang 13Để xuất danh sách khách hàng, cần xây dựng hai chương trình con gồm:
void xuatKH(KhachHang kh): hỗ trợ xuất thông tin 1 khách hàng gồm mã
khách hàng, họ, tên, năm quản lý, điểm tích luỹ, doanh số
void xuatdsKH(KhachHang a[], int n): hỗ trợ xuất danh sách khách hàng.//ctc xuất ô cấu trúc
void xuatKH(KhachHang kh)
{
cout << "\t" << kh.MaKH;
Trang 142.2.2 Kết quk chạy
H2nh 2.2: H2nh ảnh kết quả chạy của chương tr2nh con xuất danh sách khách hàng
Trang 152.3 Tìm thông tin khách hàng theo mã khách hàng ( dùng Linear Search và Binary Search)
2.3.1 Chương trình con
Để tìm thông tin khách hàng theo mã khách hàng, có thể dùng 2 cách Linear Search và Binary Search:
int linearSearch(KhachHang a[], int n, char x[]): tìm kiếm tuyến tính
Int BinarySearch(KhachHang a[], int n, char x[]): tìm kiếm nhị phân
T2m thông tin khách hàng theo mã khách hàng bằng Linear Search:
//ctc tìm thông tin khách hàng theo mã khách hàng
int linearSearch(KhachHang a[], int n, char x[])
Trang 16// ham tim kiem ma khach hang dung binarysearch
int BinarySearch(KhachHang a[], int n, char x[])
{
int left=0;// gan left bang vi tri dau
int right =n-1;// gan right bang vi tri cuoi
int mid=(left+right)/2;
// vi tri giua bang trung binh cong cua left va right
ShakerSort(a, n);
// sap xep lai ma khach hang tu thap den cao
while (left<=right && strcmp(a[mid].MaKH, x)!=0)
// lap neu left<=right va ma khach hang tai vi tri giua khac ma khach hang can tim
Trang 17cout<<" khong ton tai khach hang nay!!! ";
return -1;// tra ve gia tri -1
Trang 18return 0;// tra ve gia tri 0
2.4.1 Kết quk khi chưa sắp xếp:
H2nh 2.5: H2nh ảnh danh sách khách hàng khi chưa được sắp xếp.
2.4.2 Chương trình con
Để sắp xếp danh sách khách hàng theo mã khách hàng, có thể dùng:
+ Shaker Sort: void ShakerSort(KhachHang a[], int n)
+ Selection Sort: void SelectionSort(KhachHang a[], int n)
+ Interchange Sort: void InterchangeSort(KhachHang a[], int n)
+ Bubble Sort: void BubbleSort(KhachHang a[], int n)
Trang 19+ Insertion Sort: void InsertionSort(KhachHang a[],int n)
+ QuickSort Sort: void QuickSort(KhachHang a[], int left, int right)
+ Merge Sort: void mergesort (KhachHang a[], int n)
Sắp xếp danh sách theo mã khách hàng ( dùng Shaker Sort ):
// ctc sap xep danh sach theo ma khach hang dùng ShakerSort
void ShakerSort(KhachHang a[], int n)
{
int first=0;// gán first bằng phan tu đầu tiên
int last =n-1;// gán last bằng phan tu cuối cùng
int k=n-1; // số k gán bằng với khách hàng cuối cùng
while(first<last)// lặp lại nếu first < last
k=i;// dua so k ve vi tri i
}first=k;// vi tri first luc nay duoc gan bang k
Trang 20
for int( j=first; j<last;j++)
// lap j di tu first den last
2.4.3 Kêt quk chạy dùng Shaker Sort
H2nh 2.6: H2nh ảnh danh sách khách hàng sau khi sắp xếp ( dùng shaker sort ) theo
mã khách hàng
Sắp xếp danh sách theo mã khách hàng ( dùng Selection Sort ):
// ctc sap xep danh sach khach hang theo ma khach hang dung selectionsort
Trang 21void SelectionSort(KhachHang a[], int n)
{
int min;
for int ( i = 0; i < n - 1; i++)
{
min = i;// gan min bang i
for int ( j = i + 1; j < n; j++)// lap tu vi tri i+1 den cuoi danh sach
(strcmp(a[j].MaKH , a[min].MaKH)<0)// neu ma khach hang o vi tri j nho if
hon ma khach hang o vi tri min
min = j;// gan min=j de tim ma khach hang nho nhat co trong danh sach hoanvi(a[i], a[min]);// doi cho 2 khach hang
}
}
Trang 222.4.4 Kết quk chạy dùng Selection Sort
H2nh 2.7: H2nh ảnh danh sách khách hàng sau khi sắp xếp ( dùng Selection Sort ) theo mã khách hàng
Sắp xếp danh sách theo mã khách hàng ( dùng Interchange Sort ):
// ctc sap xep danh sach khach hang theo ma khach hang
void InterchangeSort(KhachHang a[], int n)
Trang 23}
}
}
2.4.5 Kết quk chạy dùng Interchange Sort
H2nh 2.8: H2nh ảnh danh sách khách hàng sau khi sắp xếp ( dùng Interchange Sort ) theo mã khách hàng.
Sắp xếp danh sách theo mã khách hàng ( dùng Bubble Sort ):
// sap xep danh sach khach hang theo ma khach hang dung bubblesort
void BubbleSort(KhachHang a[], int n)
Trang 24// neu ma khach hang tai vi tri j> ma khach hang tai vi tri j+1
2.4.6 Kết quk chạy dùng Bubble Sort
H2nh 2.9: H2nh ảnh danh sách khách hàng sau khi sắp xếp ( dùng Bubble Sort ) theo mã khách hàng.
Sắp xếp danh sách theo mã khách hàng ( dùng Insertion Sort ):
//sap xep danh sach khach hang theo ma khach hang dung insertionsort
void InsertionSort(KhachHang a[],int n)
{
KhachHang x;
for int ( i = 1; i < n; i++)// lap tu vi tri i=1
Trang 25{
// gan x bang khach hang thu i
int pos = i - 1;// gan pos bang vi tri i-1
while (pos >= 0 && strcmp(x.MaKH,a[pos].MaKH)<0)
// lap lai neu pos >=0 va ma khach hang tai vi tri pos > x
{
a[pos+1] = a[pos];
pos ;// doi vi tri cua pos
} a[pos+1]=x;// gan x = khach hang tai vi tri pos+1
}
2.4.7 Kết quk chạy dùng Insertion Sort
H2nh 2.10: H2nh ảnh danh sách khách hàng sau khi sắp xếp ( dùng Insertion Sort ) theo mã khách hàng.
Sắp xếp danh sách theo mã khách hàng ( dùng QuickSort Sort ):
void QuickSort(KhachHang a[], int left, int right)
{
Trang 272.4.8 Kết quk chạy dùng Quick Sort
H2nh 2.11: H2nh ảnh danh sách khách hàng sau khi sắp xếp ( dùng QuickSort Sort ) theo mã khách hàng.
Sắp xếp danh sách theo mã khách hàng ( dùng Merge Sort )
Để sắp xếp danh sách khách hàng, cần xây dựng 3 chương trình con gồm:
void distribute(KhachHang a[], int n, int &nb, int &nc,int k): phân phối đều luân phiên các dãy con độ dài k từ mảng a vào 2 mảng con b và c
void merge(KhachHang a[], int nb, int nc, int k): trộn mảng b và c vào mảng a
void mergesort (KhachHang a[], int n): sắp xếp mảng tăng dần
Trang 28for (i=0; (pa<n)&&(i<k); i++,pa++,pb++) {
Trang 29for (; ic<kc; ic++)
Trang 302.4.9 Kết quk chạy dùng Merge Sort
H2nh 2.12: H2nh ảnh danh sách khách hàng sau khi sắp xếp ( dùng Merge Sort ) theo mã khách hàng.
Trang 312.5 Để kiểm tra các chương trình con ta dùng 2 hàm:
int menu(): liệt kê các thao tác được dùng trong chương trình.
int main(): hàm kiểm tra các chương trình con (là chương trình chính)
//ctc xay dung menu
Trang 32KhachHang a[Max]; int n = 0;char x[5];int tam ;
cout<<" nhap so luong khach hang : ";
Trang 35cout<<" \nkhong co chuc nang nay!";
cout<<"\n hay chon chuc nang trong hop menu.";
Trang 36H2nh 2.13: H2nh ảnh kết quả chạy liệt kê các chức năng trong chương tr2nh và kiểm tra.
Trang 37CHƯƠNG 3 TÌM KIẾM VÀ SẮP XẾP TRÊN DANH
tử của danh sách đơn là 1 cấu trúc chứa 2 thông tin:
Thành phần dữ liệu: lưu trữ các thông tin về bản thân phần tử
Thành phần mối liên kết: lưu trữ địa chỉ của phần tử kế tiếp trong danh sách, hoặc lưu trữ giá trị NULL nếu là phần tử cuối danh sách
// ctc dinh nghia phan tu danh sach
Các phần tử trong danh sách sẽ được cấp phát động Biết phần tử đầu tiên
ta sẽ truy xuất được các phần tử tiếp theo
Sử dụng con trỏ Head để lưu trữ địa chỉ đầu tiên của danh sách
Để quản lý địa chỉ cuối cùng trong danh sách ta dùng con trỏ Tail.// ctc dinh nghia danh sach
//ctc khoi tao danh sach
void init_list(danhsachkh *khlist)
{
Trang 38Để nhập danh sách khách hàng ta sử dụng 3 chương trình con
void addfirst(danhsachkh *khlist, khnodetype *n): hỗ trợ thêm 1 node vào đầu danh sách
void nhapkh(KhachHang *kh): nhập thông tin của một khách hàng gồm: mã khách hàng, họ, tên, năm quản lý, điểm tích luỹ, doanh số
void nhapDsKh(KhachHang *kh, danhsachkh *ds): hỗ trợ nhập danh sách khách hàng
// them node khach hang vao dau danh sach
void addfirst(danhsachkh *khlist, khnodetype *n)
Trang 39// nhap thong tin danh sach
void nhapDsKh(KhachHang *kh, danhsachkh *ds)
{
char t='c'; int i=1;
// tao vong lap khi nhap thong tin khach hang ket thuc khi nhap xong while (t == 'C' || t == 'c')
{
kh = new KhachHang;
cout << " nhap thong tin khach hang thu " << i++ << endl;
nhapkh(kh);// nhap thong tin tung khach hang
khnodetype *n;
n= new khnodetype;
n=get_kh(kh);// tao them node thong tin khach hang
addfirst(ds, n);// them vao 1 phan tu o cuoi danh sach
cout << "Nhap tiep (c/k): ";// hoi moi khi nhap xong 1 khach hang cin >> t;
}
}
3.5.2. kết quk chạy