Hệ thống là một tổ chức vận hành theo một mục đích xác định gồm nhiều thành phần trong mối quan hệ với nhau.
Hệ thống bao gồm:
Tập hợp các phần tử ( không phân biệt bản chất của nó ).
Tập hợp các mối quan hệ giữa các phần tử đó ( các quan hệ có nhiều dạng khác nhau như: các quan hệ cơ học, năng lượng, THÔNG TIN Và Các quan hệ khác ràng buộc bởi: kinh tế, thân hữu, pháp luật )
Tạo thành một thể thống nhất để có được những chức hay mục tiêu ( của chính nó hay được con người gán cho ) của hệ thống.
Phân tích là công việc trọng tân chi xây dựng một hệ thông tin. Phân tích hệ thống nhằm xác định nhu cầu thông tin của tổ chức. Nó sẽ giúp cung cấp những dữ liệu cơ sở cho việc thiết kế hệ thống thông tin sau này. Thiết kế hệ thống sẽ cho một phương án tổng thể hay một mô hình đầy đủ của hệ thống thông tin.
Một phương pháp phân tích và thiết kế là sự kết hợp của ba yếu tố:
Một tập hợp các khái niệm, định nghĩa và mô hình, bao gồm các khái niệm cơ bản được sử dụng trong phương pháp cùng với các cách biểu diễn chúng.
Một tiến độ triển khai: bao gồm các bước đi lần lượt, các hoạt động cần làm.
Một công cụ trợ giúp, là một phần mềm giúp cho việc triển khai hệ thống thực hiện theo phương pháp được chặt chẽ và nhanh chóng.
Do đó, khi lập trình để quản lý cửa hàng thuốc tân dược nói riêng hay bất kỳ một hệ thống quản lý nào thì cần phải phân tích và thiết kế hệ thống.
3.1.2. Chức năng nhiệm vụ vủa các đối tượng.
1. Quản lý thuốc.
Chức năng này có nhiệm vụ quản lý chặt chẽ thông tin nhà cung cấp và khách hàng, thông tin về thuốc như mã số thuốc, số lượng, tên thuốc, loại thuốc, công dụng…
Quản lý về quá trình bán thuốc của cửa hàng, nhận đơn hàng từ phía khách hàng, lập danh sách đơn hàng và phân loại khách hàng với các loại thuốc, số lượng, giá cả…
2. Quản lý hóa đơn.
Chức năng quản lý hóa đơn có tác dụng cho biết thông tin về mã hóa đơn, mã thuốc, mã nhà cung cấp, số lượng, ngày xuất nhập, đơn giá, thành tiền, số tiền đó thanh toán, số tiền còn lại mà từ đó người quản lý truy cập được các thông tin cần thiết như số tiền còn nợ của nhà cung cấp, khách hàng, v.v…
3. Quản lý nhà cung cấp.
Quản lý mã nhà cung cấp, tên nhà cung cấp, địa chỉ, điện thoại, số tiền mà cửa hàng còn nợ lại nhà cung cấp, các đơn hàng và cung cấp các thông tin về thuốc.
Quản lý mã khách hàng, tên khách hàng, địa chỉ, điện thoại, các đơn hàng và cung cấp các thông tin về thuốc khi người ta truy cập đến khóa mã khách hàng.
5. Tra cứu và tìm kiếm.
Làm nhiệm vụ tra cứu và tìm kiếm những yêu cầu của người quản lý đưa ra như các thông tin về thuốc, khách hàng, loại thuốc…
3.2. Biểu đồ phân cấp chức năng
QUẢN LÝ CỬA HÀNG THUỐC TÂN DƯỢC
Quản lý NCC và khách hàng Quản lý thuốc Tổng hợp Quản lý hóa đơn Tra cứu và tìm kiếm Nhập xuất Thêm Sửa đổi Nhập xuất Thêm Sửa đổi Hóa đơn nhập/ xuất Thêm Sửa đổi Tìm kiếm theo NCC Tìm kiếm theo KH Tìm kiếm Thống kê Hàng tồn kho
3.3 Biểu đồ luồng dữ liệu mức khung cảnh
Nhà cung cấp và
3.4 Giao diện và code của chương trình
Giao diện chính
Quản lý bán thuốc
Đơn thuốc
Thông tin thuốc
Đơn thuốc Hóa đơn
Code của Menu chính: Option Explicit
Private Sub cmdBan_Click() frmHDB.Show vbModal End Sub
Private Sub cmdNhap_Click() frmHDN.Show vbModal End Sub
Private Sub Form_Load()
Set Conn = New ADODB.Connection
gConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source = " & App.Path & "\data\db1.mdb;" & _
"Persist Security Info = False"
';Jet OLEDB:Database Password=hoanglinh" Conn.CursorLocation = adUseClient
Conn.Open gConnectionString
End Sub
Private Sub cmdThoat_Click() End
End Sub
Private Sub mnBan_Click() frmBaocaoBan.Show vbModal End Sub
Private Sub mnCC_Click() frmNCC.Show vbModal End Sub
Private Sub mnFind_Click() frmFindTh.Show vbModal End Sub
Private Sub mnKh_Click() frmKh.Show vbModal End Sub
Private Sub mnNhap_Click() frmBaocaoNhap.Show vbModal End Sub
Private Sub mnNV_Click() frmNV.Show vbModal End Sub
Private Sub mnTh_Click() ' frmTh.Show vbModal End Sub
Private Sub Picture1_Click() End Sub
Code của Danh sách khách hàng: Option Explicit
Dim Adding As Boolean Dim rs As ADODB.Recordset
Private Sub cmbMaTDo_DropDown()
Call FillCombo("Select TenTDo from TDo", cmbMaTDo) End Sub
Private Sub cmbMaCM_DropDown()
Call FillCombo("Select TenCM from CM", cmbMaCM) End Sub
Private Sub cmdMaCM_Click() frmCM.Show vbModal
End Sub
Private Sub cmdMaTDo_Click() frmTDo.Show vbModal
End Sub
Private Sub Form_Load()
Set rs = New ADODB.Recordset
rs.Open "Select * from NV order by MaNV asc", Conn, adOpenStatic, adLockOptimistic Set Grid1.DataSource = rs Call CenterMyForm(Me) Adding = False txtMaNV.Enabled = False txtDC.Enabled = False txtTenNV.Enabled = False txtDT.Enabled = False mskNS.Enabled = False cmbMaTDo.Enabled = False cmbMaCM.Enabled = False cmbGT.Enabled = False cmdLuu.Enabled = False cmdBoqua.Enabled = False
cmdKetiep.Enabled = True cmdQuaylui.Enabled = True cmbGT.AddItem "Nam" cmbGT.AddItem "Nữ" End Sub
Private Sub CmdBoqua_Click() Adding = False Call ResetValues cmdBoqua.Enabled = False cmdThem.Enabled = True cmdLuu.Enabled = False cmdXoa.Enabled = True cmdQuaylui.Enabled = True cmdKetiep.Enabled = True Call DisplayData txtMaNV.Enabled = False End Sub
Private Sub CmdDong_Click() If Adding Then
If MsgBox("Ban co muon ghi lai du lieu vua nhap khong?", vbYesNo + vbInformation, "Thong bao") = vbYes Then
Call CmdLuu_Click Exit Sub
End If End If
Adding = False Unload Me End Sub
Private Sub CmdLuu_Click() Dim s As String
If Len(Trim(txtMaNV.Text)) = 0 Then
MsgBox "Ban phai nhap ma Nhan vien!", vbInformation, "Thong bao" txtMaNV.SetFocus
Exit Sub End If
'Kiem tra khoa xem da co chua neu chua co thi cho phep ghi vao If rs.RecordCount <> 0 Then
s = "Select MaNV from NV where MaNV='" & Trim(txtMaNV.Text) & "'"
If CheckKey(s) And Adding Then
MsgBox " Ma Nhan vien nay da co, ban phai nhap ma khac!", vbOKOnly, "Thong bao"
txtMaNV.SetFocus txtMaNV.Text = "" Exit Sub End If End If If Len(Trim(txtTenNV.Text)) = 0 Then
MsgBox "Ban phai nhap ten Nhan vien!", vbInformation, "Thong bao" txtTenNV.SetFocus
End If
If Len(Trim(txtDC.Text)) = 0 Then
MsgBox "Ban phai nhap Dia chi!", vbInformation, "Thong bao" txtDC.SetFocus
Exit Sub End If
If Len(Trim(txtDT.Text)) = 0 Then
If MsgBox("Nhan vien nay co So Dien thoai lien lac khong?", vbYesNo, "Luu y") = vbNo Then
txtDT.Text = "(Không có)" Else
MsgBox "Ban phai nhap So dien thoai!", vbInformation, "Thong bao" txtDT.SetFocus Exit Sub End If End If If Len(Trim(cmbMaTDo.Text)) = 0 Then
MsgBox "Ban phai nhap Ten Trinh do cua Nhan vien!", vbInformation, "Thong bao"
cmbMaTDo.SetFocus Exit Sub
End If
If Len(Trim(cmbMaCM.Text)) = 0 Then
MsgBox "Ban phai nhap Ten Chuyen mon cua Nhan vien!", vbInformation, "Thong bao"
Exit Sub End If
If Len(Trim(cmbGT.Text)) = 0 Then
MsgBox "Ban phai nhap Gioi tinh cua Nhan vien!", vbInformation, "Thong bao"
cmbGT.SetFocus Exit Sub
End If
If mskNS.Text = "__/__/__" Then
MsgBox "Ban phai nhap vao Ngay sinh cua Nhan vien!", vbInformation, "Thong bao"
mskNS.SetFocus Exit Sub
End If
If Not IsDate(mskNS.Text) Then
MsgBox "Moi ban nhap lai Ngay sinh!", vbInformation, "Thong bao" mskNS.SetFocus mskNS.Mask = "##/##/##" mskNS.Text = "__/__/__" Exit Sub End If With rs If Adding Then .AddNew !MaNV = txtMaNV.Text
!TenNV = txtTenNV.Text
!MaTDo = GetFieldValues("Select MaTDo from TDo where TenTDo='" & cmbMaTDo.Text & " ' ")
!MaCM = GetFieldValues("Select MaCM from CM where TenCM='" & cmbMaCM.Text & " ' ")
!NS = mskNS.Text !GT = cmbGT.Text !DC = txtDC.Text !DT = txtDT.Text Else !TenNV = txtTenNV.Text
!MaTDo = GetFieldValues("Select MaTDo from TDo where TenTDo='" & cmbMaTDo.Text & " ' ")
!MaCM = GetFieldValues("Select MaCM from CM where TenCM='" & cmbMaCM.Text & " ' ")
!NS = mskNS.Text !GT = cmbGT.Text !DC = txtDC.Text !DT = txtDT.Text End If .Update End With Adding = False cmdXoa.Enabled = True cmdThem.Enabled = True cmdBoqua.Enabled = False cmdKetiep.Enabled = False
cmdQuaylui.Enabled = True cmdLuu.Enabled = False txtMaNV.Enabled = False End Sub
Private Sub Cmdketiep_Click() On Error GoTo errs
cmdQuaylui.Enabled = True cmdLuu.Enabled = True If Not rs.EOF Then rs.MoveNext Else
MsgBox "Day la ho so cuoi cung!", vbInformation, "Thong bao" rs.MoveLast cmdKetiep.Enabled = False End If Call DisplayData txtMaNV.Enabled = False errs: End Sub
Private Sub Cmdquaylui_Click() On Error GoTo errs
cmdKetiep.Enabled = True cmdLuu.Enabled = True If Not rs.BOF Then rs.MovePrevious
Else
MsgBox "Day la ho so dau tien", vbInformation, "Thong bao" rs.MoveFirst cmdQuaylui.Enabled = False End If Call DisplayData txtMaNV.Enabled = False errs: End Sub
Private Sub CmdThem_Click() cmdXoa.Enabled = False cmdBoqua.Enabled = True cmdLuu.Enabled = True cmdKetiep.Enabled = False cmdQuaylui.Enabled = False txtTenNV.Enabled = True txtDC.Enabled = True txtDT.Enabled = True mskNS.Enabled = True cmbGT.Enabled = True cmbMaTDo.Enabled = True cmbMaCM.Enabled = True If Adding Then Call CmdLuu_Click Exit Sub End If
Adding = True Call ResetValues
txtMaNV.Enabled = True txtMaNV.SetFocus
End Sub
Private Sub Cmdxoa_Click()
Dim khanh As ADODB.Recordset Set khanh = New ADODB.Recordset
khanh.Open "Select MaNV from HDN ", Conn, adOpenStatic, adLockOptimistic
cmdLuu.Enabled = False With rs
If .RecordCount <> 0 Then
If MsgBox("Ban co muon xoa ban ghi nay khong", vbYesNo, "Thong bao") = vbYes Then
If khanh.RecordCount <> 0 Then khanh.MoveFirst
Do While (Not khanh.EOF)
If khanh!MaNV = rs!MaNV Then
MsgBox "Ban ghi nay dang duoc dung tai bang HDN, khong xoa duoc!", vbInformation, "Thong bao"
Exit Sub End If
khanh.MoveNext Loop
If khanh!MaNV = rs!MaNV Then
MsgBox "Ban ghi nay dang duoc dung tai bang HDN, khong xoa duoc!", vbInformation, "Thong bao"
Exit Sub End If
End If
khanh.Open "Select MaNV from HDB ", Conn, adOpenStatic, adLockOptimistic
If khanh.RecordCount <> 0 Then khanh.MoveFirst
Do While (Not khanh.EOF)
If khanh!MaNV = rs!MaNV Then
MsgBox "Ban ghi nay dang duoc dung tai bang HDB, khong xoa duoc!", vbInformation, "Thong bao"
Exit Sub End If
khanh.MoveNext Loop
khanh.MoveLast
If khanh!MaNV = rs!MaNV Then
MsgBox "Ban ghi nay dang duoc dung tai bang HDB, khong xoa duoc!", vbInformation, "Thong bao"
Exit Sub End If
End If .Delete
End If Else
MsgBox "Khong con ban ghi nao ca!", vbInformation, "Thong bao"
Exit Sub End If End With End Sub
Private Sub Form_Unload(Cancel As Integer) If Adding Then
If MsgBox("Ban co muon ghi lai ban ghi vua nhap khong?", vbYesNo + vbInformation, "Thong bao") = vbYes Then
Call CmdLuu_Click Cancel = True Exit Sub End If End If Cancel = False End Sub Sub ResetValues() txtMaNV.Text = "" txtTenNV.Text = "" txtDC.Text = "" txtDT.Text = "" cmbMaTDo.Text = "" cmbMaCM.Text = ""
cmbGT.Text = "" mskNS.Mask = "##/##/##" mskNS.Text = "__/__/__" End Sub Sub DisplayData() With rs
If .EOF Or .BOF Then Exit Sub txtMaNV.Text = !MaNV
txtTenNV.Text = !TenNV
cmbMaTDo.Text = GetFieldValues("Select TenTDo from TDo where MaTDo='" & !MaTDo & "'")
cmbMaCM.Text = GetFieldValues("Select TenCM from CM where MaCM='" & !MaCM & "'")
cmbGT.Text = !GT mskNS.Mask = "" mskNS.Text = !NS txtDC.Text = !DC txtDT.Text = !DT End With End Sub
Private Sub Grid1_Click() cmdLuu.Enabled = True cmdKetiep.Enabled = True cmdQuaylui.Enabled = True If Adding Then
If MsgBox("Dang o che do them moi, Chon OK de hien thi du lieu", vbOKCancel + vbInformation, "Thong bao") = vbCancel Then
Exit Sub Else Adding = False cmdBoqua.Enabled = False cmdThem.Enabled = True End If End If txtMaNV.Enabled = False Call DisplayData End Sub
Private Sub Grid1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then
Call Grid1_Click End If
End Sub
Code của Danh sách khách hàng Option icit
Dim Adding As Boolean Dim rs As ADODB.Recordset Private Sub Form_Load()
Set rs = New ADODB.Recordset
rs.Open "Select * from Kh order by MaKh asc", Conn, adOpenStatic, adLockOptimistic
Set Grid1.DataSource = rs Call CenterMyForm(Me) Adding = False
txtMaKh.Enabled = False txtDC.Enabled = False txtTenKh.Enabled = False txtDT.Enabled = False cmdLuu.Enabled = False cmdBoqua.Enabled = False cmdKetiep.Enabled = True cmdQuaylui.Enabled = True End Sub
Private Sub CmdBoqua_Click() Adding = False Call ResetValues cmdBoqua.Enabled = False cmdThem.Enabled = True cmdLuu.Enabled = False cmdXoa.Enabled = True cmdQuaylui.Enabled = True cmdKetiep.Enabled = True Call DisplayData txtMaKh.Enabled = False End Sub
Private Sub CmdDong_Click() If Adding Then
If MsgBox("Ban co muon ghi lai du lieu vua nhap khong?", vbYesNo + vbInformation, "Thong bao") = vbYes Then
Call CmdLuu_Click Exit Sub End If End If Adding = False Unload Me End Sub
Private Sub CmdLuu_Click() Dim s As String
If Len(Trim(txtMaKh.Text)) = 0 Then
MsgBox "Ban phai nhap ma Khach!", vbInformation, "Thong bao" txtMaKh.SetFocus
Exit Sub End If
'Kiem tra khoa xem da co chua neu chua co thi cho phep ghi vao If rs.RecordCount <> 0 Then
s = "Select MaKh from Kh where MaKh='" & Trim(txtMaKh.Text) & "'"
If CheckKey(s) And Adding Then
MsgBox " Ma Khach nay da co, ban phai nhap ma khac!", vbOKOnly, "Thong bao"
txtMaKh.SetFocus txtMaKh.Text = "" Exit Sub
End If End If
If Len(Trim(txtTenKh.Text)) = 0 Then
MsgBox "Ban phai nhap ten Khach!", vbInformation, "Thong bao" txtTenKh.SetFocus
Exit Sub End If
If Len(Trim(txtDT.Text)) = 0 Then
If MsgBox("Khach nay co So Dien thoai lien lac khong?", vbYesNo, "Luu y") = vbNo Then
txtDT.Text = "(Không có)" Else
MsgBox "Ban phai nhap So dien thoai!", vbInformation, "Thong bao" txtDT.SetFocus Exit Sub End If End If If Len(Trim(txtDC.Text)) = 0 Then
If MsgBox("Khach nay co de lai dia chi khong?", vbYesNo, "Luu y") = vbNo Then
txtDC.Text = "(Không có)" Else
MsgBox "Ban phai nhap Dia chi!", vbInformation, "Thong bao" txtDC.SetFocus
Exit Sub End If End If
With rs If Adding Then .AddNew !MaKh = txtMaKh.Text !TenKh = txtTenKh.Text !DC = txtDC.Text !DT = txtDT.Text Else !TenKh = txtTenKh.Text !DC = txtDC.Text !DT = txtDT.Text End If .Update End With Adding = False cmdXoa.Enabled = True cmdThem.Enabled = True cmdBoqua.Enabled = False cmdKetiep.Enabled = False cmdQuaylui.Enabled = True cmdLuu.Enabled = False txtMaKh.Enabled = False End Sub
Private Sub Cmdketiep_Click() On Error GoTo errs
cmdLuu.Enabled = True If Not rs.EOF Then rs.MoveNext Else
MsgBox "Day la ho so cuoi cung!", vbInformation, "Thong bao" rs.MoveLast cmdKetiep.Enabled = False End If Call DisplayData txtMaKh.Enabled = False errs: End Sub
Private Sub Cmdquaylui_Click() On Error GoTo errs
cmdKetiep.Enabled = True cmdLuu.Enabled = True If Not rs.BOF Then rs.MovePrevious Else
MsgBox "Day la ho so dau tien", vbInformation, "Thong bao" rs.MoveFirst cmdQuaylui.Enabled = False End If Call DisplayData txtMaKh.Enabled = False errs:
End Sub
Private Sub CmdThem_Click() cmdXoa.Enabled = False cmdBoqua.Enabled = True cmdLuu.Enabled = True cmdKetiep.Enabled = False cmdQuaylui.Enabled = False txtTenKh.Enabled = True txtDC.Enabled = True txtDT.Enabled = True If Adding Then Call CmdLuu_Click Exit Sub End If Adding = True Call ResetValues txtMaKh.Enabled = True txtMaKh.SetFocus End Sub
Private Sub Cmdxoa_Click()
Dim khanh As ADODB.Recordset Set khanh = New ADODB.Recordset
khanh.Open "Select MaKh from HDB ", Conn, adOpenStatic, adLockOptimistic
With rs
If .RecordCount <> 0 Then
If MsgBox("Ban co muon xoa ban ghi nay khong", vbYesNo, "Thong bao") = vbYes Then
If khanh.RecordCount <> 0 Then khanh.MoveFirst
Do While (Not khanh.EOF)
If khanh!MaKh = rs!MaKh Then
MsgBox "Ban ghi nay dang duoc dung tai bang HDB, khong xoa duoc!", vbInformation, "Thong bao"
Exit Sub End If
khanh.MoveNext Loop
khanh.MoveLast
If khanh!MaKh = rs!MaKh Then
MsgBox "Ban ghi nay dang duoc dung tai bang HDB, khong xoa duoc!", vbInformation, "Thong bao"
Exit Sub End If End If .Delete Call ResetValues End If Else
MsgBox "Khong con ban ghi nao ca!", vbInformation, "Thong bao"
Exit Sub End If End With End Sub
Private Sub Form_Unload(Cancel As Integer) If Adding Then
If MsgBox("Ban co muon ghi lai ban ghi vua nhap khong?", vbYesNo + vbInformation, "Thong bao") = vbYes Then
Call CmdLuu_Click Cancel = True Exit Sub End If End If Cancel = False End Sub Sub ResetValues() txtMaKh.Text = "" txtTenKh.Text = "" txtDC.Text = "" txtDT.Text = "" End Sub Sub DisplayData() With rs
If .EOF Or .BOF Then Exit Sub txtMaKh.Text = !MaKh
txtTenKh.Text = !TenKh txtDC.Text = !DC
txtDT.Text = !DT End With
End Sub
Private Sub Grid1_Click() cmdLuu.Enabled = True cmdKetiep.Enabled = True cmdQuaylui.Enabled = True If Adding Then
If MsgBox("Dang o che do them moi, Chon OK de hien thi du lieu", vbOKCancel + vbInformation, "Thong bao") = vbCancel Then
Exit Sub Else Adding = False cmdBoqua.Enabled = False cmdThem.Enabled = True End If End If txtMaKh.Enabled = False Call DisplayData End Sub
Private Sub Grid1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then
End If End Sub
Danh sách nhà cung cấp
Code của Danh sách nhà cung cấp: Option Explicit
Dim Adding As Boolean Dim rs As ADODB.Recordset Private Sub Form_Load()
Set rs = New ADODB.Recordset
rs.Open "Select * from NCC order by MaNCC asc", Conn, adOpenStatic, adLockOptimistic
Set Grid1.DataSource = rs Call CenterMyForm(Me) Adding = False txtMaNCC.Enabled = False txtDC.Enabled = False txtTenNCC.Enabled = False txtDT.Enabled = False cmdLuu.Enabled = False cmdBoqua.Enabled = False cmdKetiep.Enabled = True cmdQuaylui.Enabled = True End Sub
Private Sub CmdBoqua_Click() Adding = False Call ResetValues cmdBoqua.Enabled = False cmdThem.Enabled = True cmdLuu.Enabled = False cmdXoa.Enabled = True cmdQuaylui.Enabled = True cmdKetiep.Enabled = True Call DisplayData txtMaNCC.Enabled = False End Sub
If Adding Then
If MsgBox("Ban co muon ghi lai du lieu vua nhap khong?", vbYesNo + vbInformation, "Thong bao") = vbYes Then
Call CmdLuu_Click Exit Sub End If End If Adding = False Unload Me End Sub
Private Sub CmdLuu_Click() Dim s As String
If Len(Trim(txtMaNCC.Text)) = 0 Then
MsgBox "Ban phai nhap ma Nha cung cap!", vbInformation, "Thong bao"
txtMaNCC.SetFocus Exit Sub
End If
'Kiem tra khoa xem da co chua neu chua co thi cho phep ghi vao If rs.RecordCount <> 0 Then
s = "Select MaNCC from NCC where MaNCC='" & Trim(txtMaNCC.Text) & "'"
If CheckKey(s) And Adding Then
MsgBox " Ma NCC nay da co, ban phai nhap ma khac!", vbOKOnly, "Thong bao"
txtMaNCC.Text = "" Exit Sub
End If