Tải bản đầy đủ (.doc) (26 trang)

phần mềm ngôn ngữ visual basic 6 0 vào quản lý csdl bằng microsoft access 97

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (141.09 KB, 26 trang )

ĐỒ ÁN TỐT NGHIỆP SỬ DỤNG GIAO TIẾP CỔNG COM VÀ SOUD CARD LÀM HỘP THƯ THOẠI
II. PHẦN MỀM VISUAL BASIC
VOICE MAIL SERVICE
Phần mền được viết bằng ngôn ngữ Visual Basic 6.0 và quản lý CSDL bằng
Microsoft Access 97.
Chương trình sử dụng Active X Microsoft Comm Control 6.0 để giao tiếp mạch ngoài
thông qua cổng COM nhằm trao đổi tín hiệu giữa máy tính và mạch giao tiếp cổng COM.
Chương trình còn sử dụng Active X Microsoft MultiMedia Control 6.0 để quản lý các
bản tin, như phát ra những câu thông báo hoặc ghi âm những tin nhắn từ khách hàng và
phát những tin nhắn.
Chương trình còn sử dụng Microsoft ActiveX Data Object 2.1 Library để tạo kết nối
với CSDL Access Dulieu.MDB để quản lý các hộp tin cũng như ghi lại những bản tin
hoạc phát lại những bản tin đã ghi.
1. Giao diện chương trình chính FrmMain.frm
a. Giao diện Phần Mền:
Hình II.1 : Giao diện chương trình chính.
Lê Bá Thiện Lớp Tin 99 Trang
64
ĐỒ ÁN TỐT NGHIỆP SỬ DỤNG GIAO TIẾP CỔNG COM VÀ SOUD CARD LÀM HỘP THƯ THOẠI
b. Phần Code FrmMain.frm:
Option Explicit
Dim item As ListItem
Dim hLogFile As Integer
Dim StartTime As Date
Dim Read_BANTIN As String
Dim dGiobd As String
Dim c_Sql As String
Dim TinSo As Integer
Dim ResMail As ADODB.Recordset
Dim ResRead As ADODB.Recordset
Dim ResKT As ADODB.Recordset


Dim i As Long
Private Sub Form_Load()
Dim CommPort As String, Handshaking As String, Settings As String
On Error Resume Next
PlayGA.DeviceType = "WaveAudio"
PlayGA.RecordMode = mciRecordOverwrite
PlayGA.Notify = False
PlayGA.Wait = False
PlayGA.Shareable = False
PhoneLine.State_Xuly = "XULY"

Set ResMail = New ADODB.Recordset
Set ResRead = New ADODB.Recordset
Set ResKT = New ADODB.Recordset
Set cConnection = New ADODB.Connection
cConnection.Provider = "Microsoft.Jet.OLEDB.4.0"
cConnection.Open "c:\hopthu\Dulieu.mdb"
c_Sql = "Select * from MAIL"
ResMail.ActiveConnection = cConnection
ResMail.LockType = adLockOptimistic
ResMail.CursorType = adOpenKeyset
ResMail.ActiveConnection = cConnection
ResMail.Source = c_Sql

ResRead.ActiveConnection = cConnection
ResRead.LockType = adLockOptimistic
ResRead.CursorType = adOpenKeyset
Lê Bá Thiện Lớp Tin 99 Trang
65
ĐỒ ÁN TỐT NGHIỆP SỬ DỤNG GIAO TIẾP CỔNG COM VÀ SOUD CARD LÀM HỘP THƯ THOẠI

ResRead.ActiveConnection = cConnection

ResKT.ActiveConnection = cConnection
ResKT.LockType = adLockOptimistic
ResKT.CursorType = adOpenKeyset
ResKT.ActiveConnection = cConnection
PhoneLine.IsPlay = False

'Set cac che do
PhoneLine.bIsCalling = False
PhoneLine.cSM = ""
PhoneLine.D_DTMF = ""
PhoneLine.cFileWave = ""
PhoneLine.State_Line = "IDLE"
frmMain.Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2
Settings = GetSetting(App.Title, "Properties", "Settings", "") '
frmTerminal.MSComm1.Settings]\
If Settings <> "" Then
MSComm1.Settings = Settings
If Err Then
MsgBox Error$, 48
Exit Sub
End If
End If

CommPort = GetSetting(App.Title, "Properties", "CommPort", "") '
frmTerminal.MSComm1.CommPort
If CommPort <> "" Then MSComm1.CommPort = CommPort

Handshaking = GetSetting(App.Title, "Properties", "Handshaking", "")

'frmTerminal.MSComm1.Handshaking
If Handshaking <> "" Then
MSComm1.Handshaking = Handshaking
If Err Then
MsgBox Error$, 48
Exit Sub
End If
End If

Echo = GetSetting(App.Title, "Properties", "Echo", "") ' Echo
Call Open_Com

With ImageList1
.ImageHeight = 32
.ImageWidth = 32
.ListImages.Add Picture:=Icon
Lê Bá Thiện Lớp Tin 99 Trang
66
ĐỒ ÁN TỐT NGHIỆP SỬ DỤNG GIAO TIẾP CỔNG COM VÀ SOUD CARD LÀM HỘP THƯ THOẠI
End With

With ImageList2
.ImageHeight = 16
.ImageWidth = 16
.ListImages.Add Picture:=Icon
End With
With ListView2
.HideSelection = False
.Icons = ImageList1
.SmallIcons = ImageList2

End With
With ListView1
.HideSelection = False
.Icons = ImageList1
.SmallIcons = ImageList2
End With
ResMail.Source = "SELECT * FROM MAIL WHERE NGAY >= CDATE('" +
CStr(Date) + "')-3 ORDER BY ID DESC"
ResMail.Open
ResMail.MoveFirst
Do While Not ResMail.EOF
If ResMail!Status = "YES" Then
Set item = ListView1.ListItems.Add(i, , CStr(ResMail!SM), 1, 1)
Else
Set item = ListView1.ListItems.Add(i, , CStr(ResMail!SM), 2, 1)
End If
item.SubItems(1) = Trim(ResMail!Mail_Box)
item.SubItems(2) = Trim(ResMail!NGAY)
item.SubItems(3) = Trim(CStr(ResMail!Gio_BD))
item.SubItems(4) = Trim(CStr(ResMail!Gio_KT))
ResMail.MoveNext
i = i + 1
Loop
ListView1.SetFocus
ResMail.Close
On Error GoTo 0
End Sub
' Thủ tục mở cổng Com, với tốc độ 2400, 8 bit data , Không kiểm tra chẳn lẻ, 1 bit stop
Private Sub Open_Com()
On Error Resume Next

MSComm1.PortOpen = Not MSComm1.PortOpen
sbrStatus.Panels(1).Text = "Status COM1: ON"
Lê Bá Thiện Lớp Tin 99 Trang
67
ĐỒ ÁN TỐT NGHIỆP SỬ DỤNG GIAO TIẾP CỔNG COM VÀ SOUD CARD LÀM HỘP THƯ THOẠI
sbrStatus.Panels(2).Text = "Setting : 2400,8,n,1"
If Err Then MsgBox Error$, 48
End Sub
' Thủ tục Giới thiệu tác giả
Private Sub mnuAbout_Click()
Load frmAbout
frmAbout.Show vbModal
End Sub
' Thủ tục kết thúc chương trình
Private Sub mnuExit_Click()
End
End Sub
' Gọi FInput để quản lý dữ liệu
Private Sub mnuInput_Click()
Load fInput
fInput.Show vbModal
End Sub
' Thủ tục OnComm để nhận tín hiệu từ mạch Giao tiếp cổng COM
Private Static Sub MSComm1_OnComm()
Dim EVMsg$
Dim ERMsg$
Select Case MSComm1.CommEvent
Case comEvReceive
Dim D_Signal As Integer
D_Signal = Asc(MSComm1.Input)

If PhoneLine.State_Line = "RECC" Then Exit Sub
If PhoneLine.State_Line = "STIN" Then Exit Sub
If D_Signal = 10 Then D_Signal = 0
D_Signal = Trim(CStr(D_Signal))
If PhoneLine.IsPlay = True Then
PhoneLine.IsPlay = False
PlayGA.Command = "Stop"
PlayGA.Command = "Close"
End If
Select Case D_Signal
Case "0"
If PhoneLine.State_Xuly = "NGHE" Then
Lê Bá Thiện Lớp Tin 99 Trang
68
ĐỒ ÁN TỐT NGHIỆP SỬ DỤNG GIAO TIẾP CỔNG COM VÀ SOUD CARD LÀM HỘP THƯ THOẠI
Call StopWave
ResRead.Delete
ResRead.Update
Read_BANTIN = ""
Call PlayGA_Done(0)
Endif
Case "14"
PhoneLine.bIsCalling = True
Case "15"
If PhoneLine.bIsCalling = True Then
PhoneLine.cSM = PhoneLine.D_DTMF
End If
Case "20"
PhoneLine.State_Line = "BUSY"
Call Pro_Led

PhoneLine.cSM = PhoneLine.D_DTMF
PhoneLine.D_DTMF = ""
PhoneLine.bIsCalling = False
PhoneLine.cFileWave = ""
Call PlayWave(PATH_TBAO + "tbao1.wav")
Case "21"
PlayGA.Command = "Stop"
If PhoneLine.State_Line = "SAVE" Then
PlayGA.Command = "Save"
Call Save_Mail
End If
If PhoneLine.State_Line = "LIST" Then
ResRead.Close
End If
PlayGA.Command = "Close"
PhoneLine.State_Line = "IDLE"
Call Pro_Led
Case "11"
If PhoneLine.State_Xuly = "NGHE" Then
Call StopWave
ResRead.MovePrevious
Sleep (500)
Read_BANTIN = ""
Call PlayGA_Done(0)
Else
If Not PhoneLine.State_Line = "LIST" Then
D_Signal = "*"
PhoneLine.D_DTMF = PhoneLine.D_DTMF & D_Signal
End If
End If

Case "12"
Lê Bá Thiện Lớp Tin 99 Trang
69
ĐỒ ÁN TỐT NGHIỆP SỬ DỤNG GIAO TIẾP CỔNG COM VÀ SOUD CARD LÀM HỘP THƯ THOẠI
If PhoneLine.State_Xuly = "NGHE" Then
Call StopWave
ResRead.MovePrevious
Sleep (500)
Read_BANTIN = ""
Call PlayGA_Done(0)
Else
If Not (PhoneLine.State_Line = "LIST") Then
D_Signal = "#"
PhoneLine.D_DTMF = PhoneLine.D_DTMF & D_Signal
Call Pro_Mail
End If
End If
Case Else
PhoneLine.D_DTMF = PhoneLine.D_DTMF & D_Signal
End Select
End Select
End Sub
' Thủ tục ghi thông tin cuộc nhắn vào cơ sở dữ liệu
Private Sub Save_Mail()
ResMail.Open
ResMail.AddNew
ResMail!Mail_Box = Left(PhoneLine.cMailNo, 3)
ResMail!Gio_BD = PhoneLine.cGio_Bd
ResMail!File_Wave = PhoneLine.cFileWave
ResMail!Status = PhoneLine.cStatus

ResMail!SM = PhoneLine.cSM
ResMail.Update
Call Add_ListView
ResMail.Close
End Sub
'Thủ tục hiển thò một cuộc gọi trên ListView
Private Sub Add_ListView()
If ResMail!Status = "YES" Then
Set item = ListView1.ListItems.Add(i, , CStr(ResMail!SM), 1, 1)
Else
Set item = ListView1.ListItems.Add(i, , CStr(ResMail!SM), 2, 1)
End If
item.SubItems(1) = Trim(ResMail!Mail_Box)
item.SubItems(2) = Trim(ResMail!NGAY)
item.SubItems(3) = Trim(CStr(ResMail!Gio_BD))
item.SubItems(4) = Trim(CStr(ResMail!Gio_KT))
ListView1.Refresh
Lê Bá Thiện Lớp Tin 99 Trang
70
ĐỒ ÁN TỐT NGHIỆP SỬ DỤNG GIAO TIẾP CỔNG COM VÀ SOUD CARD LÀM HỘP THƯ THOẠI
i = i + 1
End Sub
' Thủ tục xử lý khách hàng nhấn chức năng nhắn tin hoặc nghe tin
Private Sub Pro_Mail()
If InStr(1, PhoneLine.D_DTMF, "*", vbTextCompare) = 0 Then
Exit Sub
End If
PhoneLine.D_DTMF = Mid(PhoneLine.D_DTMF, InStr(1, PhoneLine.D_DTMF,
"*", vbTextCompare), Len(PhoneLine.D_DTMF) - InStr(1, PhoneLine.D_DTMF, "*",
vbTextCompare) + 1)

Label5.Caption = PhoneLine.D_DTMF
If InStr(2, PhoneLine.D_DTMF, "*", vbTextCompare) < 1 Then
If Len(PhoneLine.D_DTMF) > 4 Then
PhoneLine.cMailNo = Mid(PhoneLine.D_DTMF, InStr(1,
PhoneLine.D_DTMF, "*", vbTextCompare) + 1, InStr(2, PhoneLine.D_DTMF, "#",
vbTextCompare) - 2)
If Check_Mail_Pw(PhoneLine.cMailNo, "") Then
PhoneLine.cGio_Bd = Time
PhoneLine.cStatus = "NEW"
PhoneLine.State_Line = "RECC"
Call Pro_Led
Call PlayWave(PATH_TBAO + "tbao2.wav")
Else
Call PlayWave(PATH_TBAO + "rec_kct.wav")
End If
End If
Else
If Len(PhoneLine.D_DTMF) > 5 Then
PhoneLine.cMailNo = Mid(PhoneLine.D_DTMF, InStr(1,
PhoneLine.D_DTMF, "*", vbTextCompare) + 1, InStr(3, PhoneLine.D_DTMF, "*",
vbTextCompare) - 2)
PhoneLine.cMailPw = Mid(PhoneLine.D_DTMF, InStr(3,
PhoneLine.D_DTMF, "*", vbTextCompare) + 1, InStr(3, PhoneLine.D_DTMF, "#",
vbTextCompare) - InStr(3, PhoneLine.D_DTMF, "*", vbTextCompare) - 1)
If Check_Mail_Pw(PhoneLine.cMailNo, PhoneLine.cMailPw) Then
PhoneLine.State_Line = "LIST"
Call Pro_Led
Call Out_Read_Mail
Else
Call PlayWave(PATH_TBAO + "list_kct.wav")

End If
End If
End If
PhoneLine.D_DTMF = ""
Lê Bá Thiện Lớp Tin 99 Trang
71
ĐỒ ÁN TỐT NGHIỆP SỬ DỤNG GIAO TIẾP CỔNG COM VÀ SOUD CARD LÀM HỘP THƯ THOẠI
End Sub
‘ Thủ tục hiển thò đèn trên giao diện khi khách hàng nghe tin hoặc nhắn tin
Private Sub Pro_Led()
Select Case PhoneLine.State_Line
Case "IDLE"
S_Led(2).BackColor = &H80000005
S_Led(3).BackColor = &H80000005
S_Led(4).BackColor = &H80000005
Case "BUSY"
S_Led(2).BackColor = &HFF0000
S_Led(3).BackColor = &H80000005
S_Led(4).BackColor = &H80000005
Case "LIST"
S_Led(2).BackColor = &HFF0000
S_Led(3).BackColor = &HFF0000
S_Led(4).BackColor = &H80000005
Case "RECC"
S_Led(2).BackColor = &HFF0000
S_Led(3).BackColor = &H80000005
S_Led(4).BackColor = &HFF0000
End Select
End Sub
‘Thủ rục chơi file wave có tên là cFile

Private Sub PlayWave(ByVal cFile As String)
PlayGA.Command = "Close"
PlayGA.FileName = cFile
PlayGA.Command = "Open"
PlayGA.FileName = cFile
PlayGA.Command = "Play"
PhoneLine.IsPlay = True
End Sub
‘ Thủ tục ghi âm thanh lời nhắn
Private Sub RecordWave()
Dim PathDir As String
Dim PathDirT As String
Dim cFileName As String
PathDirT = DATA_PATH & "\T" & Trim(CStr(Month(Date))) &
Trim(CStr(Year(Date))) & "\"
dGiobd = Time
cFileName = CreateFile()
PathDir = GetPath(cFileName)
CreateDir (PathDirT)
Lê Bá Thiện Lớp Tin 99 Trang
72
ĐỒ ÁN TỐT NGHIỆP SỬ DỤNG GIAO TIẾP CỔNG COM VÀ SOUD CARD LÀM HỘP THƯ THOẠI
CreateDir (PathDir)
PhoneLine.cFileWave = cFileName
PlayGA.Command = "Close"
PlayGA.FileName = cFileName
PlayGA.Command = "Open"
PlayGA.Command = "Record"
End Sub
‘ Thủ tục ngừng chơi file wave hoặc ghi âm thanh

Private Sub StopWave()
PlayGA.Command = "Save"
PlayGA.Command = "Stop"
PlayGA.Command = "Close"
End Sub
‘Thủ tục tạo file tại thời điểm bắt đầu ghi.
Private Function CreateFileWave() As String
Dim PathDirM, PathDirT, PathDirN As String
PathDirM = DATA_PATH & "\" & Trim(PhoneLine.cMailNo)
PathDirT = PathDirM & "\T" & Trim(CStr(Month(Date))) &
Trim(CStr(Year(Date)))
PathDirN = PathDirT & "\" & Trim(CStr(Day(Date))) & Trim(CStr(Month(Date))) &
Trim(CStr(Year(Date)))
CreateDir (PathDirM)
CreateDir (PathDirT)
CreateDir (PathDirN)
CreateFileWave = PathDirN & "\" & Trim(CStr(Hour(dGiobd))) & "h" &
Trim(CStr(Minute(dGiobd))) & "p" & Trim(CStr(Second(dGiobd))) & ".wav"
End Function
‘ Thủ tục tạo thư mục
Private Sub CreateDir(ByVal sDir As String)
If Not FileExists(sDir & "*.*") Then
CreateFolder (sDir)
End If
End Sub
‘ Hàm lấy đường dẫn khi xác đònh được một file nào đó
Private Function GetPath(ByVal sFile As String) As String
Dim i As Integer
i = InStrRev(sFile, "\")
If i > 0 Then

GetPath = Left$(sFile, i)
End If
Lê Bá Thiện Lớp Tin 99 Trang
73
ĐỒ ÁN TỐT NGHIỆP SỬ DỤNG GIAO TIẾP CỔNG COM VÀ SOUD CARD LÀM HỘP THƯ THOẠI
End Function
‘ Hàm tạo File
Private Function CreateFile() As String
CreateFile = DATA_PATH & "\T" & Trim(CStr(Month(Date))) &
Trim(CStr(Year(Date))) & "\" & Trim(CStr(Day(Date))) & Trim(CStr(Month(Date)))
& Trim(CStr(Year(Date))) & "\" & Trim(CStr(Hour(dGiobd))) & "h" &
Trim(CStr(Minute(dGiobd))) & "p" & Trim(CStr(Second(dGiobd))) & ".wav"
End Function
‘ Đây là tình huống của MCI sẽ được gọi khi MCI kết thúc việc chơi một file ưave nào
đó.
Private Sub PlayGA_Done(NotifyCode As Integer)
Dim READ_WAVE As String
READ_WAVE = ""
Select Case PhoneLine.State_Line
Case "RECC"
PlayGA.Command = "Stop"
PlayGA.Command = "Close"
PhoneLine.State_Line = "SAVE"
PhoneLine.IsPlay = False
Call RecordWave
Case "LIST"
If ResRead.RecordCount > 0 Then
If Len(Read_BANTIN) = 0 Then
Label5.Caption = Read_BANTIN
Read_BANTIN = "SDT " + SO_TEXT(Trim(ResRead!SM))

Read_BANTIN = Read_BANTIN + " NL " +
SO_TEXT(CStr(Hour(ResRead!Gio_BD))) + " GIO "
Read_BANTIN = Read_BANTIN + SO_TEXT(CStr(Minute(ResRead!
Gio_BD))) + " PHUT "
Read_BANTIN = Read_BANTIN + " NGAY " +
SO_TEXT(CStr(Day(ResRead!NGAY)))
Read_BANTIN = Read_BANTIN + " THANG " +
SO_TEXT(CStr(Month(ResRead!NGAY)))
'Read_BANTIN = Read_BANTIN + " NAM " +
SO_TEXT(CStr(Year(ResRead!NGAY)))
Read_BANTIN = Read_BANTIN + " ND " + Trim(ResRead!File_Wave)
MsgBox "dung"
If InStr(1, Read_BANTIN, " ") > 0 Then
READ_WAVE = PATH_TBAO + Trim(Left(Read_BANTIN, InStr(1,
Read_BANTIN, " "))) + ".WAV"
Lê Bá Thiện Lớp Tin 99 Trang
74
ĐỒ ÁN TỐT NGHIỆP SỬ DỤNG GIAO TIẾP CỔNG COM VÀ SOUD CARD LÀM HỘP THƯ THOẠI
Read_BANTIN = Trim(Right(Read_BANTIN, Len(Read_BANTIN) -
InStr(1, Read_BANTIN, " ")))
PhoneLine.State_Xuly = "NGHE"
Call PlayWave(Trim(READ_WAVE))
End If
Else
If InStr(1, Read_BANTIN, " ") > 0 Then
READ_WAVE = PATH_TBAO + Trim(Left(Read_BANTIN, InStr(1,
Read_BANTIN, " "))) + ".WAV"
Read_BANTIN = Trim(Right(Read_BANTIN, Len(Read_BANTIN) -
InStr(1, Read_BANTIN, " ")))
PhoneLine.State_Xuly = "NGHE"

Call PlayWave(Trim(READ_WAVE))
Else
READ_WAVE = Read_BANTIN
Call PlayWave(Trim(READ_WAVE))
PhoneLine.State_Xuly = "NGHE"
Read_BANTIN = ""
If ResRead.EOF Or ResRead.BOF Then
ResRead.MoveFirst
Else
ResRead.MoveNext
End If
End If
End If
End If
End Select
End Sub
‘ Đây là thủ tục lấy những bản tin khi khách hàng nhập vào MailBox và PW
Private Sub Out_Read_Mail()
Dim TBao_SoTin As String
Dim j As Integer
j = 1
ResRead.Source = "SELECT * FROM MAIL WHERE MAIL_BOX = '" +
Trim(PhoneLine.cMailNo) + "' ORDER BY ID DESC"
ResRead.Open
TBao_SoTin = PATH_TBAO + "SLTin5.wav"
If ResRead.RecordCount < 5 Then
TBao_SoTin = PATH_TBAO + "SLTin" + Trim(CStr(ResRead.RecordCount)) +
".Wav"
End If
If ResRead.RecordCount > 0 Then

PhoneLine.State_Line = "LIST"
Lê Bá Thiện Lớp Tin 99 Trang
75
ĐỒ ÁN TỐT NGHIỆP SỬ DỤNG GIAO TIẾP CỔNG COM VÀ SOUD CARD LÀM HỘP THƯ THOẠI
Read_BANTIN = ""
'Call PlayWave(Trim(ResRead!File_Wave))
TinSo = 1
Call PlayWave(Trim(TBao_SoTin))
ResRead.MoveFirst
ListView2.ListItems.Clear
Do While Not ResRead.EOF
If ResRead!Status = "YES" Then
Set item = ListView2.ListItems.Add(j, , CStr(ResRead!SM), 1, 1)
Else
Set item = ListView2.ListItems.Add(j, , CStr(ResRead!SM), 2, 1)
End If
item.SubItems(1) = Trim(ResRead!Mail_Box)
item.SubItems(2) = Trim(ResRead!NGAY)
item.SubItems(3) = Trim(CStr(ResRead!Gio_BD))
item.SubItems(4) = Trim(CStr(ResRead!Gio_KT))
ResRead.MoveNext
j = j + 1
If j > 5 Then Exit Do
Loop
ListView2.SetFocus
ResRead.MoveFirst
Else
Call PlayWave(PATH_TBAO + "kc_tin.wav")
PhoneLine.State_Line = "OTIN"
End If

End Sub
‘Hàm kiểm tra MailBox và PW nếu đúng thì trả về True và nếu sai trả về False
Private Function Check_Mail_Pw(ByVal cMailBox As String, ByVal cPw As
String) As Boolean
Dim bDung As Boolean
bDung = False
If Len(Trim(cMailBox)) > 0 Then
ResKT.Source = "SELECT * FROM HOPTHU WHERE MAIL = '" + cMailBox +
"'"
End If
If Len(Trim(cPw)) > 0 Then
ResKT.Source = ResKT.Source + "AND PW = '" + cPw + "'"
End If
ResKT.Open
If ResKT.RecordCount > 0 Then
bDung = True
End If
ResKT.Close
Lê Bá Thiện Lớp Tin 99 Trang
76
ĐỒ ÁN TỐT NGHIỆP SỬ DỤNG GIAO TIẾP CỔNG COM VÀ SOUD CARD LÀM HỘP THƯ THOẠI
Check_Mail_Pw = bDung
End Function
‘ Hàm tách một chuổi thành chuổi ký tự rời rạc
‘ vd: “058822888” -> “0 5 8 8 2 2 8 8 8”
Private Function SO_TEXT(ByVal cSDT As String) As String
Dim cSDT_Text As String
cSDT_Text = ""
Do
cSDT_Text = cSDT_Text + " " + Left(cSDT, 1)

cSDT = Mid(cSDT, 2)
Loop Until Len(cSDT) < 1
SO_TEXT = Trim(cSDT_Text)
End Function
2 .Form Quản lý hộp tin FINPUT.FRM
a. Giao diện Quản lý Hộp tin fInput.frm:
Hình II.2 : Giao diện quản lý Hộp tin.
b. Phần Code finput.frm
Option Explicit
Dim ResBox As New ADODB.Recordset
Dim BNew As Boolean
‘ Đây là thủ tục xoá hộp tin
Private Sub CmdDele_Click()
If ResBox.RecordCount = 0 Then
Exit Sub
End If
ResBox.Delete
Call CmdNext_Click
Lê Bá Thiện Lớp Tin 99 Trang
77
ĐỒ ÁN TỐT NGHIỆP SỬ DỤNG GIAO TIẾP CỔNG COM VÀ SOUD CARD LÀM HỘP THƯ THOẠI
Call View_Refresh
End Sub
‘ Thủ tục thoát
Private Sub CmdExit_Click()
Unload Me
End Sub
‘ Thủ tục trở về mẫu tin đầu tiên
Private Sub CmdFirst_Click()
If ResBox.RecordCount = 0 Then

Exit Sub
End If
ResBox.MoveFirst
Call View_Refresh
End Sub
‘ Thủ tục đến mẫu tin cuối cùng
Private Sub CmdLast_Click()
If ResBox.RecordCount = 0 Then
Exit Sub
End If
ResBox.MoveLast
Call View_Refresh
End Sub
‘ Thủ tục tạo mẫu tin mới
Private Sub CmdNew_Click()
TxtMail.Text = ""
TxtPW.Text = " "
TxtUser.Text = " "
BNew = True
End Sub
‘ Thủ tục dòch đến mẫu tin kế tiếp
Private Sub CmdNext_Click()
If ResBox.RecordCount = 0 Then
Exit Sub
End If
ResBox.MoveNext
If ResBox.EOF Then
ResBox.MoveLast
End If
Call View_Refresh

Lê Bá Thiện Lớp Tin 99 Trang
78
ĐỒ ÁN TỐT NGHIỆP SỬ DỤNG GIAO TIẾP CỔNG COM VÀ SOUD CARD LÀM HỘP THƯ THOẠI
End Sub
‘ Thủ tục trở lại mẫu tin phía trước
Private Sub CmdPrev_Click()
If ResBox.RecordCount = 0 Then
Exit Sub
End If
ResBox.MovePrevious
If ResBox.BOF Then
ResBox.MoveFirst
End If
Call View_Refresh
End Sub
‘ Thủ tục save mẫu tin mới hoặc chỉnh sửa
Private Sub CmdSave_Click()
If Len(TxtMail.Text) > 3 Or Len(TxtMail.Text) = 0 Or Len(TxtPW.Text) > 3 Or
Len(TxtPW.Text) = 0 Then
MsgBox "B¹n h·y xem l¹i D÷ liƯu nhËp vµo kh«ng ®óng! ", vbOKOnly, "Th«ng b¸o"
Exit Sub
End If
If BNew = True Then
ResBox.AddNew
'ResBox.MoveLast
End If
Call Update_Data
ResBox.Update
BNew = False
End Sub

Private Sub Form_Load()

Set ResBox = New ADODB.Recordset
ResBox.ActiveConnection = cConnection
ResBox.LockType = adLockOptimistic
ResBox.CursorType = adOpenKeyset
ResBox.ActiveConnection = cConnection
ResBox.Source = "SELECT * FROM HOPTHU"
ResBox.Open

If ResBox.RecordCount > 0 Then
ResBox.MoveLast
Lê Bá Thiện Lớp Tin 99 Trang
79
ĐỒ ÁN TỐT NGHIỆP SỬ DỤNG GIAO TIẾP CỔNG COM VÀ SOUD CARD LÀM HỘP THƯ THOẠI
Call View_Refresh
End If
BNew = False
End Sub
‘ thủ tục này chuyển dữ liệu ra màn hiønh
Private Sub View_Refresh()
TxtMail.Text = Trim(ResBox!Mail)
TxtPW.Text = Trim(ResBox!Pw)
TxtUser.Text = Trim(ResBox!User)
Me.Refresh
End Sub
‘Thủ tục update dữ liệu
Private Sub Update_Data()
ResBox!Mail = Trim(TxtMail.Text)
ResBox!Pw = Trim(TxtPW.Text)

ResBox!User = Trim(TxtUser.Text)
End Sub
‘ Thủ tục đóng ReCordset lại trước khi thoát khỏi form
Private Sub Form_Unload(Cancel As Integer)
ResBox.Close
End Sub
c. Phần Code ModLBT.bas:
Option Explicit
Public Echo As Boolean
Public CancelSend As Integer
Declare Sub SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal
hWndInsertAfter As Long, ByVal x As Long, ByVal Y As Long, ByVal cx As Long,
ByVal cy As Long, ByVal wFlags As Long)
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal
lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Lê Bá Thiện Lớp Tin 99 Trang
80
ĐỒ ÁN TỐT NGHIỆP SỬ DỤNG GIAO TIẾP CỔNG COM VÀ SOUD CARD LÀM HỘP THƯ THOẠI
Public Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As
Long
Public Declare Function CreateDirectory Lib "kernel32" Alias "CreateDirectoryA"
(ByVal lpPathName As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As
Long
Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" _
(lpszSoundName As Any, ByVal uFlags As Long) As Long
Public cConnection As ADODB.Connection
Private Const MAX_PATH = 260
Private Const INVALID_HANDLE_VALUE = -1
Public Const PATH_TBAO = "C:\HOPTHU\TBAO\"

Public Type LINEINFO
D_DTMF As String
State_Line As String * 4
State_Xuly As String * 4
cMailPw As String
IsPlay As Boolean
bIsCalling As Boolean
cSM As String
cMailNo As String
cGio_Bd As String
cStatus As String
cFileWave As String
End Type
Public PhoneLine As LINEINFO
Public Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Public Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
Lê Bá Thiện Lớp Tin 99 Trang
81
ĐỒ ÁN TỐT NGHIỆP SỬ DỤNG GIAO TIẾP CỔNG COM VÀ SOUD CARD LÀM HỘP THƯ THOẠI
dwReserved0 As Long
dwReserved1 As Long

cFileName As String * MAX_PATH
cAlternate As String * 14
End Type
Public Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type
Public Const HWND_TOPMOST = -1
Public Const HWND_NOTOPMOST = -2
Public Const SWP_NOACTIVATE = &H10
Public Const SWP_SHOWWINDOW = &H40
Public Const DATA_PATH = "C:\HOPTHU\DATA"
Global Const SND_ASYNC = &H1
Global Const SND_NODEFAULT = &H2
Global Const SND_MEMORY = &H4
Global Const SND_SYNC = &H0
Global Const SND_LOOP = &H8
Global Const SND_NOSTOP = &H10
‘Hàm nhận 1 file trả về kích thước của file đó
Public Function FileLen(ByVal sFile As String) As Long
Dim r As Long
Dim uFIND_DATA As WIN32_FIND_DATA
r = FindFirstFile(sFile, uFIND_DATA)
If r = INVALID_HANDLE_VALUE Then
FileLen = 0
Else
FileLen = uFIND_DATA.nFileSizeLow
Call FindClose(r)
End If

End Function
‘Hàm nhận tên File trả về true nếu có file, trả false nếu không có file
Public Function FileExists(ByVal sFile As String) As Boolean
Dim r As Long
Dim uFIND_DATA As WIN32_FIND_DATA
Lê Bá Thiện Lớp Tin 99 Trang
82
ĐỒ ÁN TỐT NGHIỆP SỬ DỤNG GIAO TIẾP CỔNG COM VÀ SOUD CARD LÀM HỘP THƯ THOẠI
r = FindFirstFile(sFile, uFIND_DATA)
If r = INVALID_HANDLE_VALUE Then
FileExists = False
Else
FileExists = True
Call FindClose(r)
End If
End Function
‘ Hàm tại Thư mục theo đường dẫn
Public Function CreateFolder(ByVal sFolder As String) As Boolean
Dim f As Long
Dim uSEC_FOLDER As SECURITY_ATTRIBUTES
f = CreateDirectory(sFolder, uSEC_FOLDER)
If f = INVALID_HANDLE_VALUE Then
CreateFolder = False
Else
CreateFolder = True
End If
End Function
3. Lưu đồ hoạt động của hệ thống Voice Mail Service:
a. Giải thuật của Hộp thư thoại:
Lê Bá Thiện Lớp Tin 99 Trang

83
Bắt Đầu
Thuê Bao A gọi vào
Hộp tin
Nghe lời Chào
Nghe hoặc Ghi
Xin quý khách đọc
tin nhắn
Bấm *HHH#
Bấm *HHH*PPP#
Hộp tin có Không?
Hộp tin có Không?
Thông báo
“Không có hộp tin này”
Nghe Tin Nhắn
“Bạn bấm *,# , 0”
Nghe tin Trước
Xoá Tin Nghe tin Sau
Kết Thúc
Gác Máy?
Ghi
Không


Không
Bấm *
Bấm 0
Bấm #
Chưa
Gác

Nghe
Đang ghi Tin
nhắn
Lưu Thông Tin
Tin Nhắn vào CSDL
Gác Máy?
Nghe tin kế
Chưa
Gác
ĐỒ ÁN TỐT NGHIỆP SỬ DỤNG GIAO TIẾP CỔNG COM VÀ SOUD CARD LÀM HỘP THƯ THOẠI
Diễn giải:
• Khi Khách hàng muốn nhắn tin, khách hàng thực hiện các bước sau:
- Khách hàng quay số điện thoại vào hộp thư thoại.
- Sau khi lời chào và hướng dẫn sử dụng, khách hàng bấm *HHH# để nhắn tin cho
hộp thư có số thứ tự là HHH.
Ví dụ : muốn nhắn tin cho hộp thư 888, khách hàng chỉ cần quay đến số hộp thư thoại
và nghe lời chào và hướng dẫn, khách hàng chỉ cần bấm *888# và bắt đầu nghe thông
báo bạn nhắn vào hộp tin 888 khi sau tiếng beep thì bắt đầu khách hàng nhắn tin.
- Sau khi nhắn tin xong, Khách hàng gác máy kết thúc quá trình nhắn tin.
• Khi muốn nghe tin nhắn, khách hàng thực hiện các bước sau:
Lê Bá Thiện Lớp Tin 99 Trang
84
ĐỒ ÁN TỐT NGHIỆP SỬ DỤNG GIAO TIẾP CỔNG COM VÀ SOUD CARD LÀM HỘP THƯ THOẠI
- Khách hàng quay số vào họpp thư thoại.
- Sau khi nghe lời chào và hướng dẫn sử dụng, khách hàng bấm *HHH *PPP# để
nghe tin nhắn có hộp thư là HHH và PPP.
Ví dụ: muốn nghe các tin nhắn của hộp thứ 888 và có password là 888 thì khách hàng
quay số đến hộp thư thoại và nghe lời chào và hướng dẫn sử dụng , khách hàng bấm
*888*888# thì hộp tin sẽ đọc từng tin nhắn từ mới xuông cũ.
- Trong khi nghe tin nhắn, khách hàng muốn nghe tin nhắn phía trước khách hàng

bấm phím “*” , khách hàng bấm phím “#” thì nghe tin nhắn kết tiếp, bấm phím
“0” thì xoá tin nhắn đó.
- Sau khi nghe tin nhắn xong, khách hàng gác máy là kết thúc quá trình nghe tin
nhắn.

b. Thuật toán Chương trình Voice Mail Service:
Lê Bá Thiện Lớp Tin 99 Trang
85
'Khoi tao
D_DTMF ="", bIsCalling = False
State_Xuly = "XULY",
State_Line = "IDLE"
Bắt Đầu
d_signal = Trim(CStr(ASC(MSCOM1.input)))
Event
'Khi có dữ liệu vào
d_signal = "*"?
Kết Thúc
Chạy Thủ tục "*"
Chạy Thủ tục "#"
Chạy Thủ tục "14"
Chạy Thủ tục "15"
Chạy Thủ tục "20"
Chạy Thủ tục "21"
D_DTMF = D_DTMF + D_signal
d_signal = "#"?
d_signal = "14"?
d_signal = "15"?
d_signal = "20"?
d_signal = "21"?

Yes?
No?
No?
No?
No?
No?
No?
Yes?
Yes?
Yes?
Yes?
Yes?
Chạy Thủ tục "0"
d_signal = "0"?
No?
Yes?
ĐỒ ÁN TỐT NGHIỆP SỬ DỤNG GIAO TIẾP CỔNG COM VÀ SOUD CARD LÀM HỘP THƯ THOẠI
Thủ tục Khi nhấn phím "*":
Lê Bá Thiện Lớp Tin 99 Trang
86
Bắt Đầu
State_Xuly = "NGHE"
Lùi lại bản tin phía trước
ResRead.MovePrevious
Phát Bản tin.
Kết Thúc
D_DTMF = D_DTMF + "*"
Yes?
No?
ĐỒ ÁN TỐT NGHIỆP SỬ DỤNG GIAO TIẾP CỔNG COM VÀ SOUD CARD LÀM HỘP THƯ THOẠI

Thủ tục Khi nhấn phím "0":
Thủ tục Khi nhận giá trò "14":
Thủ tục Khi nhận giá trò "15":
Lê Bá Thiện Lớp Tin 99 Trang
87
Bắt Đầu
bIsCalling = True
Kết Thúc
Bắt Đầu
bIsCalling = True?
'Lưu số máy gọi đến
cSM = D_DTMF
Kết Thúc
Yes?
No?
DTMF = D_DTMF + "0"
Bắt Đầu
State_Xuly = "NGHE"
Xoá bản tin hiện tại
ResRead.Delete
Phát Bản tin.
Kết Thúc
Yes?
No?
ĐỒ ÁN TỐT NGHIỆP SỬ DỤNG GIAO TIẾP CỔNG COM VÀ SOUD CARD LÀM HỘP THƯ THOẠI
Thủ tục Khi nhận giá trò “20”:
Thủ tục Khi nhận giá trò “21”:
Thủ tục Khi nhấn phím "#":
Lê Bá Thiện Lớp Tin 99 Trang
88

Bắt Đầu
Phát Câu Thông báo 1
"Kính Chào quý Khách gọi đến"
Kết Thúc
Bắt Đầu
Reset các Biến dữ liệu.
Trở về trạng thái ban đầu
Kết Thúc
Gác máy
Chạy Thủ tục Pro_Mail
Bắt Đầu
State_Xuly = "NGHE"?
Xoá bản tin hiện tại
ResRead. MoveNext
Phát Bản tin.
Kết Thúc
No?
Yes?

×