Mô tả dữ liệu: a Các loại thực thể: KhachHang Khách hàng DonDatHang Đơn đặt hàng ChiTietDonDatHang Chi tiết đơn đặt hàng SanPham Sản phẩm DinhMucSanXuat Định mức sản xuất CongNo Công nợ
Trang 1Thực hiện chương trình: Võ Hòa Đoàn
Ngày cập nhật sau cùng: Ngày 26 tháng 10 năm 2004
XYZ là một Công Ty hoạt động theo mô hình phục vụ, được mô tả như sau:
Khách hàng ký các đơn đặt hàng để gia công các sản phẩm nào đó.Nguyên liệu sẽ do
khách hàng cung cấp để sản xuất và khi sản xuất xong thì Công ty sẽ giao sản phẩm được sản xuất cho khách hàng theo các đơn hàng đã ký Việc tính lượng tồn nguyên liệu tồn còn lại dựa theo định mức sản xuất là bao nhiêu, các nguyên liệu nào để cho ra 1 đơn vị sản phẩm
Quản lý việc thanh toán (tiền gia công), công nợ khách hàng vàquản lý tồn nguyên liệu mà công ty còn giữ của khách hàng sau khi đã trừ các nguyên liệu sản xuất và giao các sản phẩm Chương trình được viết trên ngôn ngữ Visual Basic, kết nối với Cơ sở dữ liệu Access; cùng với
2 phần mềm Data Widgets để hiển thị dữ liệu lên lưới và Crystal Report 8.5 để lập báo cáo Chúng em đã được sự hướng dẫn tận tình của thầy Phạm Ngọc Linh cũng như ý kiến đóng góp quý báo của các bạn Tuy nhiên thới gian và kinh nghiệm có hạn nên chương trìng không tránh khỏi thiếu sót, hạn chế Rất mong được sự góp ý của quý thầy cô và ý kiến của các bạn
Trang 2Chương trình kết nối trên Cơ sở dữ liệu Access
Để kết nối với các hệ quản trị cơ sở dữ liệu bằng đối tượng ADO phải dùng
chuỗi chuổi kết nối ( SQLConn ) thông qua trình điều khiển Provider:
SQLConn = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source=
<”đường dẫn.Tên database”> Persist Security Info=False "
Đối tượng Connection:
Dùng để kết nối các hệ quản trị cơ sở dữ liệu, thực thi câc lệnh SQL(insert, update, delete) thông qua phương thức Execute
Có thể tạo đối tượng connection thông qua nhiều cách:
Dim Conn as new ADODB.Connection Thực thi câu lệnh SQL
<Đối tượng connection”>.Execute <”Câu lệnh SQL”>
Ví dụ: Với câu lện SQL:
Str = " insert into GIAONHAN values('" & Trim(cboSoPhieu) & "','" &
Trim(cboSoDDH) & "','" & Trim(txtNgay) & "')"
Conn.Execute Str
Đối tượng Recordset :
Dùng để thực thi lấy mẫu tin từ cơ sở dữ liệu thông qua câu lệnh SQL Select
Có thể tạo đối tượng Recordset bằng cách:
Dim Rst as new ADODB Recordset Câu lệnh SQL:
strSQL = " select TenkhachHang From KhachHang "
Thực thi câu lệnh SQL
<“Đối tượng Recordset”>.open <”Câu lệnh SQL”>,<”Đối tượng connection”>
Trang 3ví dụ: Rst.Open strSQL ,Conn
I MÔ TẢ CÁC PHIẾU:
1 Phiếu nhập nguyên liệu:
Nguyên liệu được Khách Hàng cung cấp sau khi Công ty và khách hàng thoả thuận việc gia công sản phẩm mà khách hàng yêu cầu
Nguyên liệu Số lượng ĐVT
2 Đơn đặt hàng:
Sản phẩm ĐVT Số lượng Đơn giá
3 Phiếu giao nhận:
Trang 4PHÂN TÍCH THÀNH PHẦN DỮ LIỆU CỦA ỨNG DỤNG:
1 Sơ đồ quan niệm dữ liệu:
Trang 5Hình 1: Sơ đồ Quan niệm dữ liệu của ứng dụng ĐƠN HÀNG GIA CÔNG
2 Mô tả dữ liệu:
a) Các loại thực thể:
KhachHang Khách hàng DonDatHang Đơn đặt hàng ChiTietDonDatHang Chi tiết đơn đặt hàng SanPham Sản phẩm
DinhMucSanXuat Định mức sản xuất CongNo Công nợ
GiaoNhan Giao nhận ChiTietGiaoNhan Chi tiết giao nhận NguyenLieu Nguyên liệu ThanhToan Thanh toán
Trang 6b) Mô tả các loại thực thể:
b1) Thực thể Khách hàng:
Thuộc tính Diễn giải Kiểu Ràng buộc MaKhachHang Mã khách hàng Text Khoá chính TenKhachHang Tên khách hàng Text
DiaChi Địa chỉ Text DienThoai Điện thoại Text b2) Thực thể đơn đặt hàng:
Thuộc tính Diễn giải Kiểu Ràng buộc SoDonDatHang Số đơn đặt hàng Text Khoá chính MaKhachHang Mã khách hàng Text Khoá ngoại NgayKiKet Ngày kí kết Date
DienThoai Điện thoại String b3) Thực thể Chi tiết đơn đặt hàng:
Thuộc tính Diễn giải Kiểu Ràng buộc SoDonDatHang Số đơn đặt hàng Text Khoá chính SanPham Sản phẩm Text Khoá ngoại SoLuongDatHang SL đặt hàng Number
DonGia Đơn giá Number HanGia Hạn giao Date() b4) Thực thể Sản phẩm:
Thuộc tính Diễn giải Kiểu Ràng buộc SanPham Sản phẩm Text Khoá chính TenSanPham Tên sản phẩm Text
DonViTinh Đơn vị tính Number DonGia Đơn giá Number b5) Thực thể Định mức sản xuất:
Trang 7b6) Thực thể công nợ:
Thuộc tính Diễn giải Kiểu Ràng buộc NgayCongNo Ngày công nợ Date() Khoá chính MaKhachHang Mã khách hàng Text Khoá ngoại TienCongNo Tiền công nợ Number
b7) Thực thể Giao Nhận:
Thuộc tính Diễn giải Kiểu Ràng buộc SoPhieu Số phiếụ Text Khoá chính SoDonDatHang Số đơn đặt hàng Text Khoá ngoại NgayGiao Ngày giao Number
b8) Thực thể Chi tiết giao nhận:
Thuộc tính Diễn giải Kiểu Ràng buộc SoPhieu Số phiếu Text Khoá ngoại SanPham Sản phẩm Text Khoá ngoại SoLuong Số lượng Number
DonGia Đơn giá Number b9) Thực thể Nguyên Liệu:
Thuộc tính Diễn giải Kiểu Ràng buộc NguyenLieu Nguyên liệu Text Khoá chính Ten NguyenLieu Tên nguyên liệu Text
DonViTinh Đơn vị tính Number b10) Thực thể Thanh Toán:
Thuộc tính Diễn giải Kiểu Ràng buộc SoThanhToan Số thanh toán Text Khoá chính NgayThanhToan Ngày thanh toán Date() Khoá ngoại
Trang 8Thuộc tính Diễn giải Kiểu Ràng buộc MaKhachHang Mã khách hàng Text Khoá ngoại NguyenLieu Nguyên liệu Text Khoá ngoại SoLuongTon Số lượng tồn Number
NgayTon Ngày tồn Date() b12) Thực thể Nhập xuất nguyên liệu:
Thuộc tính Diễn giải Kiểu Ràng buộc SoHoaDonNhap Số hoá đơn nhập Text Khoá chính MaKhachHang Mã khách hàng Text Khoá ngoại NgayNhap Ngày nhập Date()
b13) Thực thể Chi tiết nguyên liệu:
Thuộc tính Diễn giải Kiểu Ràng buộc SoHoaDonNhap Số hoá đơn nhập Text Khoá ngoại NguyenLieu Nguyên liệu Text Khoá ngoại SoLuong Số lượng Date()
c) Ràng buộc toàn vẹn:
KHOÁ CHÍNH:
R1-01: id(CongNo) = sttCNO R1-02: id(KhachHang) = MaKhachHang R1-03: id(DonDatHang) = SoDDH R1-04: id(ChiTietDonDathang) = sttDDH R1-05: id(SanPham) = SanPham
R1-06: id(DinhMucSanXuat) = sttSX R1-07: id(GiaoNhan) = SoPhieu R1-08: id(ChiTietGiaoNhan) = sttGiaoNhan R1-09: id(ThanhToan) = SoTT
R1-10: id(Ton) = sttTon R1-11: id(NhapXuatNguyenLieu) = SoHDN R1-12: id(ChiTietNguyenLieu) = sttHDN R1-13: id(NguyenLieu) = NguyenLieu
Trang 9RÀNG BUỘC MIỀN GÁI TRỊ:
R2-01: (CTDDH.SoDDH>0) and (CTDDH.SLDH>0) and (CTDDH.DG>0)
R2-02: (SP.DVT> 0 ) and (SP.DG > 0) R2-03: (DMSX.SLSX > 0)
R2-04: (GN.NgGiao < DDH.NgKK) R2-05: (CTNL.SL > 0)
R2-06: (NL.DVT > 0) R2-07: (TT.TienTT > 0)
RÀNG BUỘC GIỮA CÁC THUỘC TÍNH TRONG THỰC THỂ:
R3-0: CNOCK = CNODK + TIENNO - TIENTHU
R3-0: SLTonCK = SLTonDK + NHAP - XUAT
R3-0: Tiền đặt hàng = CTDDH.SLDH * CTDDH.DG R3-0: Tiền giao nhận = CTGN.SL * CTGN.DG R3-0: Số tiền nợ đầu kì ( CNODK ) của tháng này phải bằng số tiền nợ cuối kì ( CNOCK ) của tháng trước
R3-0: Số lượng tồn đầu kì ( SLTonDK ) của tah1ng này phải bằng số lựơng tồn cuối kì ( SLTonCK ) của tháng trước
PHÂN TÍCH THÀNH PHẦN XỬ LÝ CỦA ỨNG DỤNG:
XL1: Cập nhật Nguyên liệu
XL2: Cập nhật phiếu Nhập nguyên liệu
XL3: Cập nhật đơn đặt hàng
XL4: Cập nhật Phiếu giao nhận
XL5: Cập nhật Phiếu thanh toán XL6: Tính Công nợ Khách hàng
XL7: Tính Tồn Nguyên liệu
MÔ TẢ CÁC XỬ LÝ:
Qui tắc : Số lượng nhập trong tháng t của NL n bằng tổng số lượng của CTNL
trong tháng t có liên quan đến NL n
Trang 10Qui tắc : Số lượng Sản phẩm Khách hàng đặt trong tháng t bằng tổng số sản
phẩm của CTDDH trong tháng t có liên quan đến sản phẩm đó
_Tên xử lý : XL4:
Chức năng : Cập nhật phiếu Giao nhận
Input : SoP p, SoDDH h, GN, CTGN, DDH, CTDDH
Output : GN
Qui tắc : Số lượng giao nhận sản phẩm trong tháng t bằng tổng số lượng giao
nhận của CTGN trong tháng t liên quan đến Sản phẩm đó
_Tên xử lý : XL5 Chức năng : Cập nhật phiếu thanh toán
Input : SoTT, MKH, TTOAN, KH Output : TTOAN
Qui tắc : Số tiền thanh toán trong tháng t bằng tổng tiền thanh toán của
TTOAN trong tháng t có liên quan đến KH k
Output : TON
Qui tắc : TONCK = TONDK + NHAP - XUAT
III THIẾT KẾ DỮ LIỆU :
1 Sơ đồ Logic dữ liệu:
Trang 11DienThoai Điện thoại SoDonDatHang Số đơn đặt hàng NgayKiKet Ngày kí kết SanPham Sản phẩm TenSanPham Tên sản phẩm DonViTinh Đơn vị tính DonGia Đơn giá SoPhieu Số phiếu
Trang 12HanGiao Hạn giao SoLuong Số lượng SoLuongSanXuat Số lượng sản xuất SoLuongTon Số lượng tồn NgayTon Ngày tồn
3 Mô tả các bảng:
3.1) Khách hàng
Thuộc tính:
Thuộc tính Kiểu Khóa MaKhachHang Text Chính TenKhachHang Text
DiaChi Text DienThoai Text
Chỉ mục:
Chỉ mục Thuộc tính Thứ tự KHACHHANG_PK MakhachHang ASC
3.2) Công nợ:
Thuộc tính:
Thuộc tính Kiểu Khóa NgayCongNo Text Chính
Trang 13MaKhachHang
ASC CONGNO_FK MaKhachHang ASC
Khoá ngoại:
Khoá ngoại Bảng tham chiếu Khoá nội MaKhachHang KhachHang MaKhachHang 3.3) Đơn đặt hàng
Thuộc tính:
Thuộc tính Kiểu Khóa SoDonDatHang Text Chính MaKhachHang Text Ngoại NgayKiKet Date()
Chỉ mục:
Chỉ mục Thuộc tính Thứ tự DONDATHANG_PK SoDonDatHang
MaKhachHang ASC DONDATHANG_FK MaKhachHang ASC
Khoá ngoại:
Khoá ngoại Bảng tham chiếu Khoá nội MaKhachHang KhachHang MaKhachHang 3.4) Chi tiết Đơn đặt hàng
Thuộc tính:
Trang 14Chỉ mục:
Chỉ mục Thuộc tính Thứ tự CTDONDATHANG_PK SoDonDatHang
SanPham
ASC CTDONDATHANG_FK SanPham ASC
Khoá ngoại:
Khoá ngoại Bảng tham chiếu Khoá nội SoDonDatHang DonDatHang SoDonDatHang SanPham SanPham SanPham
3.5) Tồn :
Thuộc tính:
Thuộc tính Kiểu Khóa MaKhachHang Text Ngoại NguyenLieu Text Ngoại SoLuongTon Number
NgayTon Date()
Chỉ mục:
Chỉ mục Thuộc tính Thứ tự TON_PK MaKhachHang
NguyenLieu
ASC TON_FK NguyenLieu ASC
Khoá ngoại:
Khoá ngoại Bảng tham chiếu Khoá nội MaKhachHang KhachHang MaKhachHang
Trang 15Chỉ mục:
Chỉ mục Thuộc tính Thứ tự SANPHAM_PK SanPham ASC
SanPham
ASC DMSX _FK SanPham ASC
Khoá ngoại:
Khoá ngoại Bảng tham chiếu Khoá nội NguyenLieu NguyenLieu NguyenLieu SanPham SanPham SanPham
3.8) Giao Nhận:
Thuộc tính:
Trang 16SoDonDatHang ASC GIAONHAN_FK SoDonDatHang ASC
Thuộc tính Kiểu Khóa
SoLuong Number DonGia Number
Chỉ mục:
Chỉ mục Thuộc tính Thứ tự CTGN_PK SoPhieu
SanPham
ASC CTGN_FK SanPham ASC
Khoá ngoại:
Khoá ngoại Bảng tham chiếu Khoá nội SoPhieu GiaoNhan SoPhieu SanPham SanPham SanPham
3.10) Nguyên liệu:
Trang 17DonViTinh Number
Chỉ mục:
Chỉ mục Thuộc tính Thứ tự NGUYENLIEU_PK NguyenLieu ASC
3.11) Thanh toán:
Thuộc tính:
Thuộc tính Kiểu Khóa SoThanhToan Text Chính NgayThanhToan Date()
MaKhachHang Text Ngoại TienThanhToan Number
Chỉ mục:
Chỉ mục Thuộc tính Thứ tự THANHTOAN_PK SoThanhToan
MaKhachHang ASC THANHTOAN_FK MaKhachHang ASC
Trang 18MaKhachHang
ASC NXNL_FK MaKhachHang ASC
Chỉ mục:
Chỉ mục Thuộc tính Thứ tự CTGN_PK SoPhieu
SanPham
ASC CTGN_FK SanPham ASC
Khoá ngoại:
Khoá ngoại Bảng tham chiếu Khoá nội SoHoaDonNhap NXNguyenLieu SoPhieu NguyenLieu NguyenLieu SanPham
4 MÔ TẢ CÁC RÀNG BUỘC TOÀN VẸN :
4.1) KHÓA CHÍNH :
R1-01 : id( CONGNO ) = NgayCN R1-02 : id( KHACHANG ) = MKH R1-03 : id( NGUYENLIEU ) = NL R1-04 : id( DONDATHANG ) = SDDH, MAKH
Trang 19R1-07 : id( DINHMUCSANXUAT ) = NL, SP R1-08 : id( GIAONHAN ) = SPhieu, SDDH R1-09 : id( CHITIETGIAONHAN ) = SPhieu, SP R1-10 : id( THANHTOAN ) = SoTT, MKH R1-11 : id( TON ) = MKH, NL
R1-12 : id( NHAPXUATNGUYENLIEU ) = SoDDH, MKH R1-13 : id( CHITIETNGUYENLIEU ) = SoHDN, NL
4.2) RÀNG BUỘC VỀ MIỀN GIÁ TRỊ:
R2-01 : (CTDDH.SLDH > 0) and (CTDDH.DG > 0) R2-02 : (SP.DG > 0)
R2-03 : (DMSX.SLSX > 0) R2-04 : (CNO.TienCNO > 0) R2-05 : (CTGN.SL > 0) and (CTGN.DG > 0) R2-06 : (TToan.TToan > 0)
Trang 20Menu Đặt hàng Khách hàng đặt đơn hàng mới
Menu Giao nhận Giao hàng cho Khách hàng
Menu Nhập xuất Nguyên liệu Nhập nguyên liệu từ khách hàng
2 Màn hình Đặt hàng:
Trang 21Hình 4: Màn hình Đơn đặt hàng mới
Source code lấy Mã KH lên combobox:
Dim sqlMKH As String sqlMKH = "Select MaKhachHang from KhachHang order by MaKhachHang asc"
Set rsMKH = New ADODB.Recordset
rsMKH.Open sqlMKH, Conn, adOpenKeyset, adLockOptimistic
Dim Cnn As New ADODB.Connection
strSQL = "SELECT ChiTietDonDatHang.SanPham, SanPham.TenSanPham, SanPham.DonViTinh, ChiTietDonDatHang.SoLuongDatHang,
Trang 22Cnn.Open SQLConn ' KHÔNG DÙNG BIẾN Conn
Rst.Open strSQL, Conn, adOpenKeyset, adLockOptimistic
Source code khi nhấn nút mới số DDH sẽ tự tăng:
Private Sub cmdmoi_Click() txtSDDH.SetFocus
Dim SQLddh As String SQLddh = "select sodondathang from dondathang "
Set rsDDH = New ADODB.Recordset rsDDH.CursorLocation = adUseClient rsDDH.Open SQLddh, Conn, 0, 3 SDDH = Mid(Trim(txtSDDH.Text), 2, 2) txtSDDH.Text = SDDH & "DDH" & rsDDH.RecordCount + 1 End Sub
: Khi nhấn nút lưu thì sẽ gọi màn hình Đặt hàng mới để nhập thêm thông tin của sản phẩm mới:
: Lưu dữ liệu mới xuống cơ sở dữ liệu
Source code Lưu dữ liệu:
Private Sub cmdLuu_Click() Dim Rs As New ADODB.Recordset Dim rs1 As New ADODB.Recordset Dim SQL2 As String
Dim SQL3 As String
Trang 23If Trim(frm1DatHang.txtSDDH) = "" Or Trim(Trim(frm1DatHang.cboMKH)) = ""
Or Trim(cboSP) = "" Then MsgBox " Xin nhap dau du thong tin truoc khi luu ", vbOKOnly + vbExclamation, "THONG BAO"
Me.MousePointer = 0 End If
SQL2 = " insert into KHACHHANG values('" &
Trim(frm1DatHang.cboMKH) & "','" & Trim(frm1DatHang.txtTKH) & "','" &
Trim(frm1DatHang.txtDiachi) & "','" & Trim(frm1DatHang.txtDienthoai) & "')"
SQL3 = " insert into DONDATHANG values(' " &
Trim(frm1DatHang.txtSDDH) & " ',' " & Trim(frm1DatHang.cboMKH) & " ',' " &
Trim(frm1DatHang.txtNgayKK) & " ')"
SQL4 = " insert into CHITIETDONDATHANG values(' " &
Trim(frm1DatHang.txtSDDH) & " ',' " & Trim(cboSP) & " ',' " & Trim(txtSl) & " ',' "
& Trim(txtDG) & " ',' " & Trim(frm1DatHang.txtHanGiao) & " ') "
Conn.Execute SQL2 Conn.Execute SQL3 Conn.Execute SQL4 SQL5 = " update DONDATHANG set MAKHCHHANG='" &
Trim(frm1DatHang.cboMKH) & "', TENKHACHHANG='" &
Trim(frm1DatHang.txtTKH) & "', NGAYKIKET='" &
Trim(frm1DatHang.txtNgayKK) & "',HANGIAO='" &
Trim(frm1DatHang.txtHanGiao) & "' WHERE SODONDATHANG='" &
Trim(frm1DatHang.txtSDDH) & "'"
SQL6 = " update KHACHHANG set MAKHACHHANG='" &
Trim(frm1DatHang.cboMKH) & "',TENKHACHHANG='" &
Trim(frm1DatHang.txtTKH) & ",DIACHI='" & Trim(frm1DatHang.txtDiachi) &
"',DIENTHOAI='" & Trim(frm1DatHang.txtDienthoai) & "'"
SQL7 = " update CHITIETDONDATHANG set SODONDATHANG='" &
Trim(frm1DatHang.txtSDDH) & "',SANPHAM='" & Trim(cboSP) &
"',SOLUONGDATHANG='" & Trim(txtSl) & "',DONGIA='" & Trim(txtDG) &
"',HANGIAO='" & Trim(frm1DatHang.txtHanGiao) & "'"
Conn.Execute SQL5 Conn.Execute SQL6 Conn.Execute SQL7 End Sub