Chức năng bài toán :1.Nhập xuất dự liệu của các đối tượng 2.Đọc và lưu danh sách dữ liệu từ file 3.Bổ sung một phần tử vào danh sách 4.loại bỏ một phần tử khỏi danh sách 5.Hiện danh sách
Trang 1TRƯỜNG ĐẠI HỌC MỞ HÀ NỘIKHOA CÔNG NGHỆ THÔNG TIN
-BÁO CÁO TIẾN ĐỘ BÀI TẬP LỚNMÔN: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
TÊN ĐỀ TÀI:
QUẢN LÝ KINH DOANH CỦA CỬA HÀNG THỜI TRANG
Danh sách sinh viên:
Giảng viên hướng dẫn:Ths Nguyễn Thị Quỳnh Như
Trang 2Mục lục
XÁC ĐỊNH BÀI TOÁN 2
XÁC ĐỊNH CTDL BIỂU DIỄN BÀI TOÁN 4
Phần 1: xác định cấu trúc dữ liệu biểu diến bài toán 4
Phần 2: Xác định input và output của chức năng bài toán 6
Phân công nhiệm vụ
Mô tả bài toán cần làm và yêu cầu chi tiết
Phát biểu bài toán
Xác định các đối tượng cần quản lý
Liệt kê các chức năng cần thực hiện
Phần 1 Phân công nhiệm vụ :
1 Trần Kim Quang Vinh : Danh sách liên kết đơn 2 Đức Lộc: Danh sách liên kết đôi
3 Nam Khánh: Ngăn xếp 4 Đức Thành: Hàng đợi Phần 2 Phát biểu bài toán :
Bài toán quản lý kinh doanh của cửa hàng thời trang" là một nhiệm vụ phức tạp và đa chiều, trong đó bạn cần quản lý nhiều đối tượng và khía cạnh khác nhau để đảm bảo hoạt động kinh doanh của cửa hàng được thực hiện một cách hiệu quả và có lợi nhuận Dưới đây là các đối tượng quan trọng cần được quản lý trong bài toán này:
Các đối tượng:
1 Sản phẩm: là những thứ được cung cấp cho khách hàng với các thuộc tính như mã sản phẩm, tên sản phẩm, loại sản phẩm, đơn giá, số lượng, tình trạng sản phẩm (cũ hoặc mới).
2 Hóa đơn: giúp cho nhân viên có thể thống kê dễ dàng về số lượng sản phẩm bán ra theo từng ngày với các thuộc tính như mã hóa đơn, ngày lập, mã khách hàng, mã sản phẩm, số lượng mua, thành tiền.
2
Trang 3Phần 3 Cơ sở dữ liệu bài toán
Phần 4 Chức năng bài toán :
1.Nhập xuất dự liệu của các đối tượng 2.Đọc và lưu danh sách dữ liệu từ file 3.Bổ sung một phần tử vào danh sách 4.loại bỏ một phần tử khỏi danh sách 5.Hiện danh sách sản phẩm cũ và mới
5.Sắp xếp danh sách sản phẩm theo đơn giá giảm dần -tăng dần 6.Sắp xếp danh sách sản phẩm theo số lượng giảm dần-tăng dần 7.Sắp xếp danh sách hóa đơn theo ngày lập tăng dần
8.Sắp xếp danh sách hóa đơn theo số lượng mua giảm dần 9.Tìm kiếm đơn 2 đối tượng theo giá trị bất kì
10.Thống kê số lượng sản phẩm đã bán ra được nhập từ bàn phím 11.Thống kê sản phẩm cũ mà khách hàng đã mua
12.Tính tổng tiền bán ra trong 1 ngày
13.Tìm sản phẩm được mua ít mua nhất-nhiều nhất 14.Tính tổng tiền sản phẩm cũ trong cửa hàng Tuần 2 (24/10)
Trang 4XÁC ĐỊNH CTDL BIỂU DIỄN BÀI TOÁN
1 Mô tả CTDL được tổ chức để lưu trữ cho bài toán ứng với CTDL đượcphân công.
1 Liệt kê Input và Output ứng với từng chức năng đã nêu ở tuần 1
Phần 1: xác định cấu trúc dữ liệu biểu diến bài toán
1.Mô tả ctdl được tổ chức để lưu trữ cho bài toán ứng với ctdl đã được phân công
struct SANPHAM {
int maSanPham, soLuong, donGia;
string tenSanPham, loaiSanPham, tinhTrang;
Trang 5sanPham info; struct nodeSP *next; struct nodeSP *prev; Struct nodeHD *next; Struct nodeHD *prev;
Phần 2: Xác định input và output của chức năng bài toán
Nhập và Xuất dữ liệu của các đối tượng (sản phẩm và hóa đơn):
Trang 6Sản phẩm: Thông tin sản phẩm mới (maSanPham, tenSanPham, loaiSanPham, donGia, soLuong, tinhTrangSanPham).
Hóa đơn: Thông tin hóa đơn mới (maHoaDon, ngayLap, maKhachHang, maSanPham, soLuongMua, thanhTien).
Sản phẩm: Thông tin sản phẩm đã nhập hoặc thông báo lỗi (nếu có) Hóa đơn: Thông tin hóa đơn đã nhập hoặc thông báo lỗi (nếu có) Đọc và Lưu danh sách dữ liệu từ file:
Tên file hoặc đường dẫn tới file chứa dữ liệu Loại đối tượng (sản phẩm hoặc hóa đơn) Output:
Danh sách dữ liệu (sản phẩm hoặc hóa đơn) hoặc thông báo lỗi (nếu có) Bổ Sung một phần tử vào danh sách:
Sản phẩm: Thông tin sản phẩm mới (maSanPham, tenSanPham, loaiSanPham, donGia, soLuong, tinhTrangSanPham).
Hóa đơn: Thông tin hóa đơn mới (maHoaDon, ngayLap, maKhachHang, maSanPham, soLuongMua, thanhTien).
Loại đối tượng (sản phẩm hoặc hóa đơn) Output:
Danh sách sau khi bổ sung hoặc thông báo lỗi (nếu có) Loại bỏ một phần tử khỏi danh sách:
Mã đối tượng cần loại bỏ.
Loại đối tượng (sản phẩm hoặc hóa đơn).
6
Trang 7Danh sách sau khi loại bỏ hoặc thông báo lỗi (nếu có) Hiện danh sách sản phẩm cũ và mới:
Loại sản phẩm (cũ hoặc mới) Output:
Danh sách sản phẩm theo loại hoặc thông báo lỗi (nếu có) Sắp xếp danh sách sản phẩm theo đơn giá giảm dần hoặc tăng dần: Input:
Loại sắp xếp (giảm dần hoặc tăng dần) Output:
Danh sách sản phẩm đã sắp xếp theo loại hoặc thông báo lỗi (nếu có) Sắp xếp danh sách sản phẩm theo số lượng giảm dần hoặc tăng dần: Input:
Loại sắp xếp (giảm dần hoặc tăng dần) Output:
Danh sách sản phẩm đã sắp xếp theo loại hoặc thông báo lỗi (nếu có) Sắp xếp danh sách hóa đơn theo ngày lập tăng dần:
Input: Không cần input.
Output: Danh sách hóa đơn đã sắp xếp theo ngày lập tăng dần hoặc thông báo lỗi (nếu có).
Sắp xếp danh sách hóa đơn theo số lượng mua giảm dần: Input: Không cần input.
Trang 8Output: Danh sách hóa đơn đã sắp xếp theo số lượng mua giảm dần hoặc thông báo lỗi (nếu có).
Tìm kiếm đơn 2 đối tượng theo giá trị bất kì: Input: Giá trị cần tìm kiếm.
Output: Danh sách sản phẩm hoặc hóa đơn thỏa mãn giá trị hoặc thông báo không tìm thấy.
Thống kê số lượng sản phẩm đã bán ra được nhập từ bàn phím: Input: Số lượng cần thống kê.
Output: Số lượng sản phẩm đã bán ra hoặc thông báo lỗi (nếu có) Thống kê sản phẩm cũ mà khách hàng đã mua:
Input: Không cần input.
Output: Danh sách sản phẩm cũ mà khách hàng đã mua hoặc thông báo lỗi (nếu có).
Tính tổng tiền bán ra trong 1 ngày: Input: Ngày cần thống kê.
Output: Tổng tiền bán ra trong ngày hoặc thông báo lỗi (nếu có) Tìm sản phẩm được mua ít mua nhất-nhiều nhất:
Input: Không cần input.
Output: Danh sách sản phẩm được mua ít nhất và nhiều nhất hoặc thông báo lỗi (nếu có).
8
Trang 9Tính tổng tiền sản phẩm cũ trong cửa hàng: Input: Không cần input.
Output: Tổng tiền sản phẩm cũ trong cửa hàng hoặc thông báo lỗi (nếu có) Tuần 3 (31/10)
XÁC ĐỊNH CÁC THUẬT TOÁN
Xây dựng sơ đồ thuật toán biểu diễn cho từng chức năng tương ứng ởtuần 1 và mô tả chi tiết các thuật toán cơ bản được dùng của bài toán
1 Danh sách liên kết đơn (Trần Kim Quang Vinh) a Nhập danh sách
- Sơ đồ :
b Hiện danh sách
Trang 10- Sơ đồ :
c Thuật toán thêm phần tử
Thêm phần tử vào đầu danh sách
Nếu danh sách rỗng thì:
Phần tử đầu tiên chính là phần tử mới thêm vào
Phần tử đầu cũng là phần tử cuối
Nếu danh sách khác rỗng:
Phần tử mới trỏ vào phần tử đầu
Phần tử đầu chính là phần tử mới thêm vào
Thêm phần tử vào cuối danh sách
Nếu danh sách rỗng thì:
Phần tử đầu tiên chính là phần tử mới thêm vào
Phần tử đầu cũng là phần tử cuối
Nếu danh sách khác rỗng:
Phần tử cuối trỏ đến phần tử mới thêm vào
Phần tử mới thêm vào trở thành phần tử cuối mới
Thêm phần tử vào giữa danh sách tại vị trí đã biết
Thêm phần tử p vào sau phần tử q xác định
Nếu phần tử q rỗng Không thêm được⇒
10
Trang 11 Nếu phần tử q khác rỗng:
Phần tử mới trỏ tới phần tử đứng sau phần tử q
Phần tử q trỏ tới phần tử mới thêm vào
Nếu q là phần tử cuối cùng thì phần tử mới trở thành phần tử cuối cùng
- Sơ đồ :
d Thuật toán hủy
Hủy phần tử đầu danh sách
Nếu không có phần tử đầu, không xóa được
Nếu có phần tử đầu:
Lưu phần tử đầu tạm thời → lưu vào p
Chuyển phần tử đầu tới phần tử tiếp theo
Xóa phần tử đã được lưu tạm → xóa p
Nếu danh sách chỉ có một phần tử, khi xóa phần tử đi thì phần tử cuối cùng cũng không còn.
- Sơ đồ :
Trang 12 Hủy phần tử p đứng sau phần tử q xác định trước
Nếu không có phần tử q → không xóa được
Nếu có phần tử q:
Lưu phần tử sau q tạm thời → lưu vào p
Nếu có phần tử p, chuyển con trỏ phần tử q tới phần tử tiếp theo sau p
Xóa phần tử sau q đã được lưu tạm → xóa p
Nếu không có phần tử p thì không xóa được
Nếu p là phần tử cuối thì sau khi xóa p, q trở thành phần tử cuối - Sơ đồ :
12
Trang 13 Hủy một phần tử có khóa k
Bước 1: Tìm phần tử p có khóa k và phần tử q đứng trước nó Bước 2:
Nếu p khác rỗng → hủy p khỏi danh sách
Ngược lại → thông báo không có k - Sơ đồ:
Trang 14e Thuật toán tìm kiếm
Tìm kiếm phần tử có khóa k
Bước 1: p trỏ từ đầu danh sách: p = Q.Head
Bước 2: Kiểm tra danh sách còn phần tử không và nếu chưa tìm thấy
Hoán vị nội dung phần tử
Cho chạy con trỏ p từ đầu đến cuối danh sách
Cho chạy con trỏ q từ sau phần tử p đến cuối danh sách
Trực tiếp hoán đổi thành phần data trong mỗi nút, còn thứ tự liên kết các nút không thay đổi.
- Sơ đồ :
14
Trang 152 Danh sách liên kết đôi (Trần Đức Lộc)
Trang 16
c Thuật toán thêm
Thêm phần tử vào đầu danh sách
Phần tử trước phần tử đầu là phần tử mới
Phần tử đầu chính là phần tử mới chèn vào - Sơ đồ :
16
Trang 17 Thêm phần tử vào cuối danh sách
Nếu danh sách rỗng
Phần tử cuối là phần tử mới thêm
Phần tử cuối cũng là phần tử đầu
Nếu danh sách khác rống
Phần tử sau phần tử cuối là phần tử mới
Phần tử trước phần tử mới là phần tử cuối
Phần tử cuối là phần tử mới chèn - Sơ đồ :
thêm phần tử vào trước q
Nếu phần tử q rỗng thì không thêm được
Nếu phần tử q khác rỗng nghĩa là tồn tại phần tử q
Phần tử sau phần tử mới là q
Trang 18 Nếu tồn tại phần tử p trước q nghĩa là p không phải là phần tử đầu
Thêm phần tử vào sau q
Nếu phần tử q rỗng thì không chèn được
18
Trang 19 Nếu phần tử q khác rỗng nghĩa là tồn tại phần tử q:
d Thuật toán xóa
Xóa phần tử đầu danh sách
Nếu không có phần tử đầu, không xóa được
Nếu danh sách không rỗng:
Trang 20 Lưu phần tử đầu vào p
Phần tử đầu mới là phần tử sau phần tử đầu hiện tại
Phần tử trước phần tử đầu mới là rỗng
Xóa p
Nếu phần tử đầu mới là rỗng thì đuôi cũng là rỗng
Xóa phần tử cuối danh sách
Nếu danh sách không rỗng
Lưu phần tử cuối vào p
Phần tử cuối mới là phần tử trước phần tử cuối hiện tai
Phần tử sau phần tử cuối mới là rỗng
Nếu q không phải là phần tử cuối
Lưu phần tử sau q tạm thời vào p
Phần tử sau q mới sẽ là phần tử sau p
Nếu p là nút cuối thì q sẽ là nút cuối mới, ngược lại thì phần tử trước phần tử sau p mới là phần tử q
Nếu q không phải là phần tử đầu
Lưu phần tử trước q tạm thời vào p
Phần tử trước q mới sẽ là phần tử trước p
Nếu p là nút đầu thì q sẽ là nút đầu mới, ngược lại thì phần tử sau phần tử trước p mới là phần tử q
Xóa p - Sơ đồ :
20
Trang 21 Xóa phần tử có khóa k
Tìm phần tử có khóa k, gọi p là nút chứa khóa k
Nếu p rỗng thì không cần hủy
Ngược lại thì hủy p khỏi danh sách e Thuật toán tìm kiếm
Gọi p là phần tử đầu danh sách
Xét lần lượt từ p đến khi p rỗng, nếu tìm thấy k thì thoát
Hiện p
f Thuật toán sắp xếp
Gọi p là phần tử đầu danh sách, q xuất phát từ p
Xét đến khi q rỗng, nếu p lớn hơn q thì hoán vị
Lặp lại đến khi p rỗng - Sơ đồ :
Trang 22
3 Ngăn xếp (Nguyễn Nam Khánh) a.Nhập danh sách trên file -Khởi tạo danh sách rỗng -Nhập số lượng (n) sách
-Duyệt từng i=1 cho đến khi i<= n Với mỗi 1 phần tử ta thêm 1 thông tin sách vào sau danh sách
Trang 23c.Xóa phần tử đầu
-Kiểm tra danh sách không rỗng -Lưu phần tử đầu vào p
-Chuyển phần tử đầu tới phần tử bên cạnh -Xóa phần tử đã được lưu trong p -> Xóa p
-Kiểm tra: nếu danh sách chỉ có 1 phần tử, khi xóa đi phần tử cuối không còn.
d.Đếm phần tử trong ngăn xếp -Bước 1: khởi tạo biến đếm = 0
Trang 24-Bước 2: Kiểm tra danh sách còn phần tử và duyệt từ phần tử đầu đến phần tử cuối của danh sách
Nếu p -> Info == k thì tăng biến đếm lên 1 In ra màn hình giá trị biến đếm VD: Đếm số sách có giá nhỏ hơn x
+ Sơ đồ thuật toán:
e.Tìm kiếm
- Bước 1: p= Q.Head; //p trỏ từ đầu danh sách
-Bước 2: Kiểm tra danh sách còn phần tử và nếu chưa tìm thấy phần tử thì lặp trong khi (p!=NULL) và (p->Info != k) thì p = p -> Next;
- Bước 3: Nếu p != NULL thì p trỏ đến phần tử cần tìm Ngược lại thì không tìm thấy phần tử cần tìm
*Sơ đồ:
24
Trang 25f.Đếm phần tử trong ngăn xếp -Bước 1: khởi tạo biến đếm = 0
-Bước 2: Kiểm tra danh sách còn phần tử và duyệt từ phần tử đầu đến phần tử cuối của danh sách
Nếu p -> Info == k thì tăng biến đếm lên 1 In ra màn hình giá trị biến đếm VD: Đếm số sách có giá nhỏ hơn x
+ Sơ đồ thuật toán:
4 Hàng đợi (Nguyễn Đức Thành) a Nhập danh sách
*Mô tả thuật toán:
Nhập n danh sách và thông tin
Chạy từ i=1->n thì sau mỗi lần duyệt thêm 1 phần tử vào danh sách -Nếu i>n thì kết thúc thuật toán
*Sơ đồ thuật toán
Trang 26b: Xuất danh sách
*Mô tả thuật toán: Duyệt từ đầu dến cuối danh sách Với mỗi lần duyệt xuất ra màn hình thông tin
*Sơ đồ thuật toán:
c:Thêm dữ liệu vào danh sách *Mô tả thuật toán:
-Nếu hàng đợi rỗng thì p->next = NULL Ta gán Q.Head = Q.Tail = NULL -Nếu hàng đợi khác rỗng ta cho p->next = NULL , Q.Tail->next Ta gán Q.Tail=p
*Sơ đồ thuật toán:
26
Trang 27d:Sắp xếp danh sách hóa đơn theo số lượng *Mô tả thuật toán:
-Gán i=Q.Head -j=i->next(1)
-Trong khi j!=NULL thì
Nếu i->info.sl >j->info.sl thì đổi chỗ i->info.sl và j-<ifo.sl j=j->next
Nếu i!=NULL thì lặp lại(1) Ngược lại thì dừng *Sơ đồ thuật toán:
e: Tìm kiếm hóa đơn theo tên khách hàng
Trang 28*Mô tả thuật toán:
-Khai báo biến để nhập thông tin khách hàng cần tìm
-Duyệt danh sách để tìm phần tử có chứa tên giống tên vừa nhập -Xuất ra màn hình dữ liệu hóa đơn khách hàng vừa tìm được
Tuần 4 (14/11)
KIỂM THỬ - LẬP BỘ TEST
Xây dựng bộ dữ liệu Input
Cho biết kết quả khi chạy từng chức năng tương ứng trên bộ dữ liệu Input đó
menu chức năng:
28
Trang 29Danh sách sản phẩm
Danh sách hóa đơn
Trang 30Thêm đối tượng
30