Địa điểm: phòng họp meet Thảo luận về đề tài: Xác định và xây dựng một số lớp trên python phục vụ các chức năng cơ bản trong hệ thống thông tin quản lý bán hàng.. Địa điểm: phòng họp mee
Trang 1TRƯỜNG ĐẠI HỌC THƯƠNG MẠI KHOA HỆ THỐNG THÔNG TIN KINH TẾ VÀ THƯƠNG MẠI ĐIỆN TỬ
- -
BÀI TẬP LỚN HỌC PHẦN: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
ĐỀ TÀI: XÂY DỰNG HỆ THỐNG QUẢN LÝ BÁN HÀNG
Nhóm: 13
Mã lớp học phần: 232_INFO4111_01
Giáo viên hướng dẫn: Th.s Cù Nguyên Giáp
Hà Nội, Ngày 19 Tháng 03 Năm 2024
Trang 2Cộng hòa xã hội chủ nghĩa Việt Nam Độc lập – Tự do – Hạnh phúc
Hà Nội, ngày 20 tháng 2 năm 2024
Biên bản họp nhóm (Lần 1)
1 Thời gian: 21h ngày 20 tháng 2 năm 2024
2 Địa điểm: phòng họp meet
Thảo luận chọn ra nhóm trưởng và đề tài thảo luận.
Cuộc họp kết thúc vào lúc 21h30 cùng ngày.
Thư kí
Thương Phạm Thị Thương
Nhóm trưởng
Thư Nguyễn Minh Thư
Trang 3Cộng hòa xã hội chủ nghĩa Việt Nam Độc lập – Tự do – Hạnh phúc
Hà Nội, ngày 25 tháng 2 năm 2024
Biên bản họp nhóm (Lần 2)
1 Thời gian: 21h ngày 25 tháng 2 năm 2024
2 Địa điểm: phòng họp meet
Phân chia công việc và tiến hành làm thảo luận.
Cuộc họp kết thúc vào lúc 22 giờ cùng ngày.
Cộng hòa xã hội chủ nghĩa Việt Nam
Trang 4Độc lập – Tự do – Hạnh phúc
Hà Nội, ngày 05 tháng 3 năm 2024
Biên bản họp nhóm (Lần 3)
1 Thời gian: 21h ngày 05 tháng 03 năm 2024
2 Địa điểm: phòng họp meet
Thảo luận về đề tài: Xác định và xây dựng một số lớp trên python phục vụ các chức năng
cơ bản trong hệ thống thông tin quản lý bán hàng Tổng hợp các phần code và tiến hành chạy chương trình nhưng vẫn chưa ra được kết quả nhưng mong đợi.
Các thành viên tiếp tục hoàn thiện bài.
Cuộc họp kết thúc vào lúc 21h30 cùng ngày.
BẢNG PHÂN CHIA CÔNG VIỆC
Trang 5STT MSV HỌ TÊN CÔNG VIỆC
ĐÁNH GIÁ CỦA THÀNH VIÊN
ĐÁNH GIÁ CỦA NHÓM TRƯỞNG
Trang 6Trong thời đại bùng nổ công nghệ 4.0 như hiện nay, một hệ thống giúp quản lý việc bán hàng là không thể thiếu trong hoạt động kinh doanh của doanh nghiệp Hệ thống này chính là những phần mềm quản lý bán hàng, giúp cho người dùng đặc biệt là các doanh nghiệp kiểm soát được hàng hóa một cách chặt chẽ hơn Việc quản lý của hệ thống
sẽ được kiểm soát trong tất cả các khâu: Nhập hàng, quản lý đơn hàng, quản lý kho hàng, quản lý nhân viên,chăm sóc khách hàng
Qua thời gian nghiên cứu và tìm hiểu, với mức độ phức tạp và quy mô ứng dụng cộng thêm vào đó là vấn đề về thời gian cho nên em đã quyết định chọn đề tài “Xây dựng
hệ thống quản lý bán hàng” tìm hiểu ngôn ngữ lập trình Python.
Từ ý tưởng áp dụng công nghệ thông tin vào việc quản lý, bớt phần gánh nặng về
sổ sách cũng như đầu óc con người, đề tài này hướng đến xây dựng một hệ thống quản lý bán hàng áp dụng cho các công ty hay cửa hàng, giúp dễ dàng hơn trong công việc quản
lý bán hàng của công ty hay cửa hàng mình Do thời gian có hạn nên bài làm còn gặp phải một số hạn chế, việc trình bày bằng văn bản còn thiếu sót Rất mong nhận được sự thông cảm của thầy.
Trang 7I.TỔNG QUAN
1.1 Mô tả bài toán và đặc tả đề tài:
1.1.1 Mô tả bài toán
- Quản lý bán hàng trong các doanh nghiệp là công việc quan trọng, đòi hỏi bộ phận quản lý phải tiến hành nhiều nghiệp vụ phức tạp.
- Việc ứng dụng CNTT đã mang lại bước đột phá mới cho công tác quản lý bán hàng, giúp doanh nghiệp nắm bắt thông tin về hàng hóa, vật tư, thông tin khách hàng, và trạng thái các đơn đặt hàng một cách chính xác và kịp thời Từ đó người quản lý có thể đưa ra các kế hoạch và quyết định đúng đắn, giảm chi phí và tăng khả năng cạnh tranh, nâng cao kết quả hoạt động sản xuất kinh doanh.
1.1.2 Đặc tả bài toán
Quy trình bán hàng của cửa hàng được bắt đầu từ khi nhận được hàng hóa từ nhà cung cấp, nhân viên sẽ thực hiện tạo mã sản phẩm và nhập thông tin sản phẩm vào hệ thống để lưu trữ Trong quá trình bán hàng, nhân viên có thể thêm, bớt hoặc thay đổi các thông tin về sản phẩm dựa vào thực tế
Mỗi khách hàng khi thực hiện hoạt động mua hàng lần đầu tại cửa hàng sẽ được cung cấp một mã khách hàng để phục vụ cho các lần mua hàng tiếp theo Các thông tin của khách hàng khi được khách hàng cung cấp cũng sẽ được lưu trữ vào hệ thống phục vụ cho các hoạt động ưu đãi của cửa hàng
Khi thực hiện thanh toán, nhân viên sẽ thực hiện tạo một mã hóa đơn riêng cho mỗi hóa đơn Ở lớp này sẽ lưu trữ các thông tin về hóa đơn như: ngày thực hiện giao dịch, danh sách sản phẩm mua (được lưu trữ trong chi tiết hóa đơn), tổng tiền, …Các hóa đơn sẽ được lưu trữ trong một khoảng thời gian nhất định.
II, Thiết kế lớp và xây dựng chương trình chính
2.1 Các Class của một đối tượng
a, Class ConNguoi
Trang 8- Thuộc tính: + ten (Tên)
+ sdt (Số điện thoại)
+ diachi (Địa chỉ)
- Phương thức: hàm khởi tạo ( int ), trả về chuỗi ( str )
b, Class NhanVien
Class NhanVien kế thừa Class connguoi
- Thuộc tính: + ma_nv (Mã nhân viên)
+ ten (Tên nhân viên)
Trang 9+ loai_sp (Loại sản phẩm)
+ dongia (Đơn giá)
- Phương thức: hàm khởi tạo ( int ), trả về chuỗi ( str )
e, Class HoaDon
- Thuộc tính: + ma_hd (Mã hóa đơn)
+ ma_kh (Mã khách hàng)
+ ma_nv (Mã nhân viên)
+ date_created (Ngày tạo)
+ total_amount: Đưa ra tổng giá trị hóa đơn được tính bằng tổng số lượng*đơn giá của tất cả sản phẩm cùng hóa đơn trong chi tiết hóa đơn có cùng mã hóa đơn)
- Phương thức: + hàm khởi tạo ( int ), trả về chuỗi ( str )
+ dongia (Đơn giá)
+ Phương thức: hàm khởi tạo ( int ), trả về chuỗi ( str )
2.2 Các Class Quản Lý
a, Class QuanLyNhanVien:
- Chức năng giúp đối tượng NhanVien tương tác với database
- Phương thức: + display_list ( Tạo danh sách nhân viên)
+ add_new (Thêm nhân viên)
+ delete_by_ma_nv (Xóa nhân viên bởi mã nhân viên)
Trang 10+ update_by_ma_nv (Cập nhật thông tin nhân viên theo mã nhân viên)
+ get_by_ma_nv (Lấy thông tin nhaan viên từ cơ sở dữ liệu) + get_all (Lấy ra danh sách tất cả nhân viên trong cơ sở dữ liệu)
b, Class QuanLyKhachHang:
- Chức năng giúp đối tượng KhacHang tương tác với database
- Phương thức: + display_list ( Tạo danh sách khách hàng)
+ add_new (Thêm khách hàng)
+ delete_by_ma_kh (Xóa khách hàng bởi mã khách hàng) + update_by_ma_kh (Cập nhật thông tin khách hàng theo mã khách hàng)
+ get_by_ma_kh (Lấy thông tin khách hàng từ cơ sở dữ liệu) + get_all (Lấy ra danh sách tất cả khách hàng trong cơ sở dữ liệu)
c, Class QuanLySanPham:
- Chức năng giúp đối tượng SanPham tương tác với database
- Phương thức: + display_list ( Tạo danh sách sản phẩm)
+ add_new (Thêm sản phẩm)
+ delete_by_ma_sp (Xóa nhân viên bởi mã sản phẩm)
+ update_by_ma_sp (Cập nhật thông tin sản phẩm theo mã sản phẩm)
+ get_by_ma_nv (Lấy thông tin sản phẩm từ cơ sở dữ liệu) + get_all (Lấy ra danh sách tất cả sản phẩm trong cơ sở dữ liệu)
d, Class QuanLyHoaDon:
- Chức năng giúp đối tượng HoaDon tương tác với database
- Phương thức: + display_list ( Tạo danh sách hóa đơn)
Trang 12- Hiển thị danh sách khách hàng
- Thêm khách hàng mới
- Xóa khách hàng
- Cập nhật thông tin khách hàng
- Hiển thị danh sách hóa đơn
- Thêm chi tiết hóa đơn
- Xóa chi tiết hóa đơn
- Cập nhật thông tin chi tiết hóa đơn
3.2 Xây dựng cơ sở dữ liệu
Xây dựng cơ sở dữ liệu “qlbanhang” với các bảng sau:
a, Bảng nhanvien:
- Lưu trữ dữ liệu của đối tượng NhanVien
Trang 13Column Name Lưu trữ
- Lưu trữ dữ liệu đối tượng SanPham
- Lưu trữ dữ liệu đối tượng HoaDon
Trang 14- Lưu trữ dữ liệu đối tượng ChiTietHoaDon
def init (self ten sdt diachi, , , ):
self ten ten =
4.2 Class NhanVien và QuanLyNhanVien
from connguoi import ConNguoi
class NhanVien ConNguoi( ):
def init (self ma_nv ten sdt diachi chucvu luongthang, , , , , , ): self ma_nv ma_nv =
super(). init (ten, sdt, diachi)
self chucvu chucvu =
self luongthang luongthang =
defdisplay_list(nhanviens):
fornhanvien innhanviens:
Trang 15@staticmethod
defadd_new(conn ma_nv ten sdt diachi chucvu luongthang, , , , , , ):
cursor conn = cursor()
defdelete_by_ma_nv(conn ma_nv, ):
cursor conn = cursor()
cursor.execute("DELETE FROM nhanvien WHERE MaNV = %s", (ma_nv,)) conn.commit()
"UPDATE nhanvien SET Ten = %s, SDT = %s, DiaChi = %s, ChucVu
= %s, LuongThang = %s WHERE MaNV = %s",
(ten sdt diachi chucvu luongthang ma_nv, , , , , ))
conn.commit()
@staticmethod
defget_by_ma_nv(conn ma_nv, ):
cursor conn = cursor()
cursor.execute("SELECT * FROM nhanvien WHERE MaNV = ?", (ma_nv,)) employee cursor = fetchone()
cursor.close()
returnemployee
@staticmethod
defget_all(conn):
cursor conn = cursor()
cursor.execute("SELECT * FROM nhanvien")
rows cursor = fetchall()
nhanviens = []
forrow inrows:
nhanvien = NhanVien(row[0], row[1], row[2], row[3], row[4], row[5])
nhanviens.append(nhanvien)
Trang 164.3 Class KhachHang và QuanLyKhachHang
from connguoi import ConNguoi
from HoaDon import HoaDon
from HoaDon import QuanLyHoaDon
class KhachHang ConNguoi( ):
sodonhangdathuchien= 0
def init (self ma_kh ten sdt diachi loaikhachhang, , , , , ,
sodonhangdathuchien):
super(). init (ten, sdt, diachi)
self ma_kh ma_kh =
self loaikhachhang loaikhachhang =
self sodonhangdathuchien sodonhangdathuchien =
def str (self):
returnf"Mã khách hàng: {self ma_kh }\n"+ super(). str () +
f"Loại khách hàng: {self loaikhachhang }\nSố# đơn hàng đã thực hiện:
{self sodonhangdathuchien }\n"
class QuanLyKhachHang:
@staticmethod
defdisplay_list(khachhangs):
forkhachhang inkhachhangs:
print(khachhang)
@staticmethod
defadd_new(conn ma_kh ten sdt diachi loaikhachhang, , , , , ,
sodonhangdathuchien):
cursor conn = cursor()
cursor.execute("INSERT INTO khachhang (MaKH, Ten, SDT, DiaChi, LoaiKH, SoDonHangDaThucHien) VALUES (%s %s %s %s %s %s)", , , , , ,
(ma_kh ten sdt diachi loaikhachhang, , , , ,
sodonhangdathuchien))
conn.commit()
@staticmethod
defdelete_by_ma_khach_hang(conn ma_kh, ):
cursor conn = cursor()
cursor.execute("DELETE FROM khachhang WHERE MaKH = %s", (ma_kh)) conn.commit()
@staticmethod
Trang 17cursor conn = cursor()
cursor.execute("UPDATE khachhang SET Ten = %s, SDT = %s, DiaChi =
%s, LoaiKH = %s WHERE MaKH = %s",
(ten sdt diachi loaikhachhang ma_kh, , , , ))
conn.commit()
@staticmethod
defupdate_so_don_hang_da_thuc_hien(conn ma_kh, ):
cursor conn = cursor()
cursor.execute("SELECT COUNT(*) FROM hoadon WHERE MaKH = %s", (ma_kh))
sodonhangdathuchien cursor = fetchone()[ ]0
cursor.execute("UPDATE khachhang SET SoDonHangDaThucHien = %s WHERE MaKH = %s", (sodonhangdathuchien ma_kh, ))
conn.commit()
@staticmethod
defget_by_ma_khach_hang(conn ma_kh, ):
cursor conn = cursor()
cursor.execute("SELECT * FROM khachhang WHERE MaKH = ?", (ma_kh)) customer cursor = fetchone()
cursor.close()
returncustomer
@staticmethod
defget_all(conn):
cursor conn = cursor()
cursor.execute("SELECT * FROM khachhang")
rows cursor = fetchall()
khachhangs = []
forrow inrows:
khachhang = KhachHang(row[0], row[1], row[2], row[3], row[ ])4 khachhang sodonhangdathuchien = row[5] # Cập nhật số# đơn hàng đã thực hiện từ cơ sơ* dữ liệu
khachhangs.append(khachhang)
returnkhachhangs
4.4 Class SanPham và QuanLySanPham
class SanPham:
def init (self ma_sp ten_sp loai_sp dongia, , , , ):
self ma_sp ma_sp =
self ten_sp ten_sp =
self loai_sp loai_sp =
Trang 18def str (self):
returnf"Mã sa*n phẩ*m: {self ma_sp }\nTên sa*n phẩ*m: {self ten_sp }\
nLoại sa*n phẩ*m: {self loai_sp }\nĐơn giá: {self dongia }\n"
class QuanLySanPham:
@staticmethod
defdisplay_list(sanphams):
forsanpham insanphams:
print(sanpham)
@staticmethod
defadd_new(conn ma_sp ten_sp loai_sp dongia, , , , ):
cursor conn = cursor()
cursor.execute("INSERT INTO sanpham (MaSP, TenSP, LoaiSP, DonGia)VALUES (%s %s %s %s)", , , ,
(ma_sp ten_sp loai_sp dongia, , , ))
conn.commit()
@staticmethod
defdelete_by_ma_sp(conn ma_sp, ):
cursor conn = cursor()
cursor.execute("DELETE FROM sanpham WHERE MaSP = %s", (ma_sp,)) conn.commit()
@staticmethod
defupdate_by_ma_sp(conn ma_sp ten_sp loai_sp dongia, , , , ):
cursor conn = cursor()
cursor.execute("UPDATE sanpham SET TenSP = %s, LoaiSP = %s, DonGia = %s WHERE MaSP = %s",
(ten_sp loai_sp dongia ma_sp, , , ))
conn.commit()
defget_by_ma_sp(conn ma_sp, ):
cursor conn = cursor()
cursor.execute("SELECT * FROM sanpham WHERE MaSP = ?", (ma_sp,)) product cursor = fetchone()
cursor.close()
returnproduct
@staticmethod
defget_all(conn):
cursor conn = cursor()
cursor.execute("SELECT * FROM sanpham")
Trang 19sanphams = []
forrow inrows:
sanpham = SanPham(row[0], row[1], row[2], row[ ])3
sanphams.append(sanpham)
returnsanphams
4.5 Class HoaDon và QuanLyHoaDon
from datetime import datetime
from chitiethoadon import ChiTietHoaDon
from chitiethoadon import QuanLyChiTietHoaDon
class HoaDon:
def init (self ma_hd ma_kh ma_nv date_created total_amount, , , , , ): self ma_hd ma_hd =
self ma_kh ma_kh =
self ma_nv ma_nv =
self date_created date_created =
self total_amount total_amount =
def str(self):
return {
'ma_hd': self ma_hd ,
'ma_khach_hang': self ma_kh ,
'ma_nhan_vien': self.ma_nv,
'date_created': self.date_created,
'total_amount': self.total_amount
}
@staticmethod
defcalculate_total(conn ma_hd, ):
cursor conn = cursor()
try:
cursor.execute("SELECT SUM(SoLuong * DonGia) FROM chitiethoadon WHERE MaHD = %s", (ma_hd))
total_amount cursor = fetchone()[ ]0
iftotal_amountisnot None:
cursor.execute("UPDATE hoadon SET TotalAmount = %s WHERE MaHD = %s", (total_amount ma_hd, ))
conn.commit()
finally:
cursor.close()
def str (self):
Trang 20{self ma_nv }\nNgày tạo: {self date_created }\nTố*ng cộng:
{self total_amount }\n"
class QuanLyHoaDon:
@staticmethod
defdisplay_list(hoadons):
forhoadon inhoadons:
print(hoadon)
@staticmethod
defadd_new(conn ma_hd ma_kh ma_nv date_created, , , , ):
cursor conn = cursor()
cursor.execute("INSERT INTO hoadon (MaHD, MaKH, MaNV,
DateCreated) VALUES (%s %s %s %s)", , , ,
(ma_hd ma_kh ma_nv date_created, , , ))
conn.commit()
@staticmethod
defdelete_by_ma_hd(conn ma_hd, ):
cursor conn = cursor()
cursor.execute("DELETE FROM hoadon WHERE MaHD = %s", (ma_hd,)) conn.commit()
@staticmethod
defupdate_by_ma_hd(conn ma_hd ma_kh ma_nv date_created, , , , ):
cursor conn = cursor()
cursor.execute("UPDATE hoadon SET MaKH = %s, MaNV = %s, DateCreated = %s WHERE MaHD = %s",
(ma_kh ma_nv date_created ma_hd, , , ))
conn.commit()
@staticmethod
defcalculate_total(conn ma_hd, ):
cursor conn = cursor()
cursor.execute("SELECT SUM(SoLuong * DonGia) FROM chitiethoadon WHERE MaHD = %s", (ma_hd,))
total_amount cursor = fetchone()[ ]0
iftotal_amountis not None:
cursor.execute("UPDATE hoadon SET TotalAmount = %s WHERE MaHD
= %s", (total_amount ma_hd, ))
conn.commit()
defget_by_ma_hd(conn ma_hd, ):