TRƯỜNG ĐẠI HỌC LÂM NGHIỆP BÀI TẬP LỚN MÔN: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT CHỦ ĐỀ: VIẾT TRÌNH QUẢN LÝ THU THUẾ HÀ NỘI Ngành: Hệ thống thông tin Lớp: K64-HTTT Họ và tên: Đỗ Tuấn Anh Mã Sinh Viên: 1951071186 Hà Nội - 2024 MỤC LỤC I. Xác định bài toán. Đối tượng được quản lý của bài toán gồm:. Xác định thuật toán.
Danh sách liên kết đơn. Nhập danh sách:. In danh sách:. Danh sách liên kết đôi:.
In danh sách:. Xóa sản phẩm ở cuối danh sách. Nhập danh sách trên file. In danh sách.
Xóa phần tử đầu. Đếm phần tử trong ngăn xếp. Đếm phần tử trong ngăn xếp. Nhập danh sách.
Cài đặt chương trình. Danh sách liên kết đơn (Quản lý người nộp thuế). Danh sách liên kết đôi (Quản lý phiếu thu). Xác định bài toán: Bài toán Quản lí thuế nhằm hỗ trợ cho nhân viên nắm rõ thông tin khách hàng, mặt hàng, hóa đơn hàng nhằm giúp cho việc quản lý các hoạt động của cửa hàng thuận tiện và nhanh chóng hơn.
Đồng thời bài toán quản lí bán hàng còn giúp nhân viên của cửa hàng bán sách sắp xếp thống kê khách hàng. Đối tượng được quản lý của bài toán gồm: Người đóng thuế, phiếu thu Trong đó: - Người đóng thuế: mã người đóng thuế, mã thuế, tên công ty, địa chỉ, diện tích, quy mô, người đứng đầu - Phiếu thu: mã phiếu thu, ngày lập, tháng, năm, số tiền cần nộp, số tiền giảm trừ, mã người nộp thuế, họ tên người đóng, số tiền cần đóng = tổng tiền – số tiền giảm trừ Quản lý thu thuế Hà Nội Người đóng thuế Phiếu thu 1.Nhập thông tin: mã người đóng thuế, 1.Nhập thông tin: mã phiếu thu, ngày lập, mã thuế, tên công ty, địa chỉ, diện tích, tháng, năm, số tiền cần nộp, số tiền giảm quy mô, người đứng đầu trừ, mã người nộp thuế, tổng tiền=số tiền 2.In danh sách người đóng thuế cần nộp - tiền giảm trừ, người lập 3.Lưu DS người đóng thuế vào file 2.In DS phiếu thu 4.Đọc DS người đóng thuế từ file 3.Lưu DS phiếu thu vào file 5.Tìm kiếm người đóng thuế theo mã 4.Đọc DS phiếu thu từ file 6.Sắp xếp theo diện tích 5.Tìm kiếm phiếu theo mã phiếu thu 7.Xoá người đóng thuế theo mã 6.Sắp xếp phiếu theo tiền phải đóng tăng 8.Thêm người đóng thuế dần 9.Cho danh sách công ty có địa chỉ tại Hà 7.Xoá phiếu Nội 8.Sửa phiếu III. Xác định thuật toán 1. Danh sách liên kết đơn Để thực hiện các chức năng trên ta cần: Khai báo cấu trúc dữ liệu Khai báo cấu trúc một nút trong danh sách liên kết đơn Khai báo danh sách liên kết đơn Khởi tạo danh sách rỗng Tạo nút mới với thành phần dữ liệu x 1.
Nhập danh sách: * Mô tả thuật toán: o Nhập n danh sách và thông o Cho i chạy từ i=1->n, nếu i<= n thì sau mỗi lần duyệt them 1 phần tử vào sau danh sách o Nếu i>n thì kết thúc thuật toán. * Sơ đồ thuật toán: Begin Nhập n phân tử S Đ Note* p;i=0 i>n i<n Nhập phân tử thứ i End i=i + 1 1. In danh sách: *Mô tả thuật toán: Duyệt từ đầu đến cuối danh sách. Với mỗi lần duyệt, xuất ra màn hình thông tin của khách hàng *Sơ đồ thuật toán: Begin p=Q.Head p=p->next p!=NULL In thông tin thứ i End 1.
Tìm kiếm hóa đơn có mã x *Mô tả thuật toán: •Bước 1: p = DQ.Head; •Bước 2: Lặp trong khi (p!=NULL) và (p->infor.ma != x) thì p = p -> Next; •Bước 3: oNếu p != NULL thì p trỏ đến phần tử cần tìm oNgược lại thì không tìm thấy phần tử cần tìm *Sơ đồ thuật toán : Bắt đầu p = Q.Head p!=Null q = p -> next sai q!= đúng p->infor.tt Hoandoi (p->infor.tt) q = q->next p = p->next Kết thúc 1. Sắp xếp: *Mô tả thuật toán: + Mô tả thuật toán: Sử dụng 2 con trỏ p, q dể duyệt và so sánh với nhau p = Q.Head; Lặp trong khi (p != NULL) q = p -> next; Lặp trong khi (q != NULL) So sánh giá trị của phần tử p và q nếu không đúng trật tự thì hoán đổi giá trị của p và q cho nhau Vd: Sắp xếp tăng dần, nếu p -> infor.tt); q = q -> next; op = p -> next; *Sơ đồ thuật toán: Sai p!=NULL Đúng q = p -> next Sai q! =NULL Đúng Sai p->infor.tt Đúng Hoandoi (p->infor.tt) q = q->next p = p->next Kết thúc 2. Danh sách liên kết đôi: 2.Xử lý nhập: + Mô tả thuật toán Khởi tạo danh sách rỗng Tạo nút mới p với thành phần dữ liệu x Nhập n sản phẩm Duyệt từ i=1 đến i<= n. Với mỗi lần duyệt, lưu 1 phần tử vào p.
Ngược lại i>n thì kết thúc. + Sơ đồ thuật toán: Bắt đầu Nhập i=1 i=i+1 Đúng Sai i<=n Thêm node Nhập dữ liệu Lưu thông tin cho nút p = getnode(x) Kết thúc 2. In danh sách: + Mô tả thuật toán: Duyệt từ đầu đến cuối danh sách. Với mỗi lần duyệt, xuất ra màn hình thông tin của mỗi sản phẩm.
+ Sơ đồ thuật toán: Bắt đầu p= DQ.Head p = p -> next Đúng p!=NULL In thông tin nút thứ 1 Sai Kết thúc 2. Xóa sản phẩm ở cuối danh sách + Mô tả thuật toán: Kiểm tra danh sách không rỗng Lưu phần tử cuối tạm thời vào p Chuyển phần tử cuối tới phần tử bên trái Xóa p Kiểm tra lại danh sách +Sơ đồ: BRt đầu ĐTng DQ.Head==NULL Sai DQ.Tail -> prev DQ.Tail -> next = NULL Kết thTc 3. 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 -Nếu i>n, kết thúc *Sơ đồ: Bắt đầu Nhập i=1 i=i+1 Đúng Sai i<=n Thêm node Lưu thông tin cho nút Nhập dữ liệu p = getnode(x) Kết thúc 3.
In danh sách Duyệt từ phần tử đầu đến cuối danh sách. Với mỗi phần tử ta xuất ra màn hình *Sơ đồ: Bắt đầu p = DQ.Head p = p -> next p != Đúng In thông tin nút NULL thứ i 3. Xóa phần tử đầu -Kiểm tra danh sách không rỗng Kết thúc -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. Begin Tạo node p Đúng Không thể p!= NULL xóa Sai p=new mode p=Q.head->next free(p) End 3.
Đế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 Begin + Sơ đồ thuật toán: Tạo node P=Q.Head d=0 Đúng P!=NULL P>info.