Việc quản lý của hệ thốngsẽ đượ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..... Từ ý tưởng áp dụng công nghệ t
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 11+ add_new (Thêm hóa đơn)
+ delete_by_ma_hd (Xóa hóa đơn bởi mã hóa đơn)
+ update_by_ma_hd (Cập nhật thông tin hóa đơn theo mã hóa đơn) + get_by_ma_hd (Lấy thông tin hóa đơn từ cơ sở dữ liệu) + get_all (Lấy ra danh sách tất cả hóa đơn trong cơ sở dữ liệu)
e, Class QuanLyChiTietHoaDon:
- Chức năng giúp đối tượng ChiTietHoaDon tương tác với database
- Phương thức: + display_list ( Tạo danh sách chi tiết hóa đơn)
+ add_new (Thêm chi tiết hóa đơn)
+ delete_by_ma_hd_ma_sp (Xóa nhân viên bởi mã nhân viên) + update_by_ma_hd_ma_sp (Cập nhật thông tin chi tiết hóa đơn theo mã hóa đơn và mã sản phẩm)
+ get_by_ma_hd_ma_sp (Lấy thông tin nhaan viên từ cơ sở dữ
Chương trình quản lý bán hàng gồm 6 chức năng:
a, Quản lý nhân viên:
- Hiển thị danh sách nhân viên
- Thêm nhân viên mới
- Xóa nhân viên
- Cập nhật thông tin nhân viên
d, Quản lý hóa đơn:
- Hiển thị danh sách hóa đơn
- Thêm hóa đơn mới
- Xóa hóa đơn
- Cập nhật thông tin hóa đơn
b, Quản lý khách hàng: e, Quản lý chi tiết 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
Column Name Lưu trữ
Trang 13Column Name Lưu trữ
- Lưu trữ dữ liệu đối tượng SanPham
Column Name Lưu trữ
- Lưu trữ dữ liệu đối tượng HoaDon
Column Name Lưu trữ
Trang 14- Lưu trữ dữ liệu đối tượng ChiTietHoaDon
Column Name Lưu trữ
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
def display_list(nhanviens):
for nhanvienin nhanviens:
Trang 15 print(nhanvien)
@staticmethod
def add_new(conn, ma_nv, ten, sdt, diachi, chucvu, luongthang):
cursor = conn.cursor()
def delete_by_ma_nv(conn, ma_nv):
cursor = conn.cursor()
cursor.execute("DELETE FROM nhanvien WHERE MaNV = %s", (ma_nv,))
"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
def get_by_ma_nv(conn, ma_nv):
cursor = conn.cursor()
cursor.execute("SELECT * FROM nhanvien WHERE MaNV = ?", (ma_nv,))
employee = cursor.fetchone()
cursor.close()
return employee
@staticmethod
def get_all(conn):
cursor = conn.cursor()
cursor.execute("SELECT * FROM nhanvien")
rows = cursor.fetchall()
nhanviens = []
for rowin rows:
nhanvien = NhanVien(row[], row[], row[], row[], row[],
row[])
nhanviens.append(nhanvien)
Trang 16 return nhanviens
4.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):
return "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
def display_list(khachhangs):
for khachhangin khachhangs:
print(khachhang)
@staticmethod
def add_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
def delete_by_ma_khach_hang(conn, ma_kh):
cursor = conn.cursor()
cursor.execute("DELETE FROM khachhang WHERE MaKH = %s", (ma_kh))
conn.commit()
@staticmethod
Trang 17 def update_by_ma_khach_hang(conn, ma_kh, ten, sdt, diachi,
loaikhachhang):
cursor = 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
def update_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
def get_by_ma_khach_hang(conn, ma_kh):
cursor = conn.cursor()
cursor.execute("SELECT * FROM khachhang WHERE MaKH = ?", (ma_kh))
customer = cursor.fetchone()
cursor.close()
return customer
@staticmethod
def get_all(conn):
cursor = conn.cursor()
cursor.execute("SELECT * FROM khachhang")
rows = cursor.fetchall()
khachhangs = []
for rowin rows:
khachhang = KhachHang(row[], row[], row[], row[], row[ ])4
khachhang sodonhangdathuchien = row[] # Cập nhật số# đơn hàng đã thực hiện từ cơ sơ* dữ liệu
khachhangs.append(khachhang)
return khachhangs
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 18 self dongia = dongia
def str (self):
return "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
def display_list(sanphams):
for sanpham in sanphams:
print(sanpham)
@staticmethod
def add_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
def delete_by_ma_sp(conn, ma_sp):
cursor = conn.cursor()
cursor.execute("DELETE FROM sanpham WHERE MaSP = %s", (ma_sp,))
conn.commit()
@staticmethod
def update_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()
def get_by_ma_sp(conn, ma_sp):
cursor = conn.cursor()
cursor.execute("SELECT * FROM sanpham WHERE MaSP = ?", (ma_sp,))
product = cursor.fetchone()
cursor.close()
return product
@staticmethod
def get_all(conn):
cursor = conn.cursor()
cursor.execute("SELECT * FROM sanpham")
Trang 19 rows = cursor.fetchall()
sanphams = []
for rowin rows:
sanpham = SanPham(row[ ], row[ ], row[], row[ ])3
sanphams.append(sanpham)
return sanphams
4.5 Class HoaDon và QuanLyHoaDon
fromdatetime importdatetime
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
def calculate_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
if total_amount is not None:
cursor.execute("UPDATE hoadon SET TotalAmount = %s WHERE MaHD = %s", (total_amount, ma_hd))
conn.commit()
finally:
cursor.close()
def str (self):