Sistem Informasi Pengingat Jadwal Pengembalian Buku Di Perpustakaan Fmipa Usu Berbasis Sms Gateway

Universitas Sumatera Utara

Universitas Sumatera Utara

Universitas Sumatera Utara

Universitas Sumatera Utara

LAMPIRAN

Listing Program
FormUtama.vb
Public Class FormUtama
Dim ucHome As UcHome
Dim ucConnection As UcConnection
Dim ucBook As UcBook
Dim ucAnggota As UcAnggota
Dim ucPeminjaman As UcPeminjaman
Dim ucPengembalian As UcPengembalian
Public smsBackgroundProcess As SMSBackgroundProcess
Public Sub New()

' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
smsBackgroundProcess = New SMSBackgroundProcess()
smsBackgroundProcess.RunSMSBackgroundProcess()
End Sub
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs)
Handles MyBase.Load
ucConnection = New UcConnection()
ucConnection.Dock = DockStyle.Fill
ucConnection.Location = New Point(0, 0)
ucConnection.Visible = True
panelContent.Controls.Add(ucConnection)
ucBook = New UcBook()
ucBook.Dock = DockStyle.Fill
ucBook.Location = New Point(0, 0)
ucBook.Visible = True
panelContent.Controls.Add(ucBook)
ucAnggota = New UcAnggota()
ucAnggota.Dock = DockStyle.Fill

ucAnggota.Location = New Point(0, 0)
ucAnggota.Visible = True
panelContent.Controls.Add(ucAnggota)
ucPeminjaman = New UcPeminjaman()
ucPeminjaman.Dock = DockStyle.Fill
ucPeminjaman.Location = New Point(0, 0)
ucPeminjaman.Visible = True
panelContent.Controls.Add(ucPeminjaman)
ucPengembalian = New UcPengembalian()
ucPengembalian.Dock = DockStyle.Fill
ucPengembalian.Location = New Point(0, 0)

Universitas Sumatera Utara

ucPengembalian.Visible = True
panelContent.Controls.Add(ucPengembalian)
RemoveUC()
ucConnection.Visible = True
End Sub
Private Sub RemoveUC()

For Each item As Control In panelContent.Controls
If
item.GetType().BaseType.FullName.Equals("System.Windows.Forms.UserControl")
Then
Dim uc As UserControl
uc = CType(item, UserControl)
uc.Visible = False
End If
Next
End Sub
Private Sub tsbConnection_Click(sender As System.Object, e As
System.EventArgs) Handles tsbConnection.Click
If Not ucConnection.Visible Then
RemoveUC()
ucConnection.Visible = True
End If
End Sub
Private Sub tsbHome_Click(sender As System.Object, e As System.EventArgs)
Handles tsbHome.Click
If Not ucHome.Visible Then

RemoveUC()
ucHome.Visible = True
End If
End Sub
Private Sub tsbBuku_Click(sender As System.Object, e As System.EventArgs)
Handles tsbBuku.Click
If Not ucBook.Visible Then
RemoveUC()
ucBook.Visible = True
ucBook.LoadData()
End If
End Sub
Private Sub tsbAnggota_Click(sender As System.Object, e As
System.EventArgs) Handles tsbAnggota.Click
If Not ucAnggota.Visible Then
RemoveUC()
ucAnggota.Visible = True
ucAnggota.LoadData()
End If
End Sub

Private Sub tsbPeminjaman_Click(sender As System.Object, e As
System.EventArgs) Handles tsbPeminjaman.Click
If Not ucPeminjaman.Visible Then
RemoveUC()
ucPeminjaman.Visible = True
ucPeminjaman.LoadData()
End If
End Sub

Universitas Sumatera Utara

Private Sub tsbPengembalian_Click(sender As System.Object, e As
System.EventArgs) Handles tsbPengembalian.Click
If Not ucPengembalian.Visible Then
RemoveUC()
ucPengembalian.Visible = True
ucPengembalian.LoadData()
End If
End Sub
Private Sub FormUtama_FormClosed(sender As System.Object, e As

System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed
If Not IsNothing(smsBackgroundProcess.port) Then
smsBackgroundProcess.ClosePort()
End If
End Sub
End Class

FrmAddAnggota.vb
Public Class FrmAddAnggota
Dim database As DatabaseEntities
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
database = New DatabaseEntities()
End Sub
Private Sub btnSave_Click(sender As System.Object, e As System.EventArgs)
Handles btnSave.Click
If txtNama.Text = "" Then
General.ErrorMessage("Nama tidak boleh kosong!")

Return
End If
If txtNIM.Text = "" Then
General.ErrorMessage("Nim tidak boleh kosong!")
Return
End If
If cmbFakultas.SelectedIndex < 0 Then
General.ErrorMessage("Silahkan pilih Fakultas Anda!")
Return
End If
If cmbProdi.SelectedIndex < 0 Then
General.ErrorMessage("Silahkan pilih Program Studi Anda!")
Return
End If
If txtTmpLahir.Text = "" Then
General.ErrorMessage("Tempat lahir tidak boleh kosong!")
Return
End If
If txtNoHp.Text = "" Then
General.ErrorMessage("No hp tidak boleh kosong!")


Universitas Sumatera Utara

Return
End If
Try
Dim prodi As prodi = cmbProdi.SelectedItem
Dim anggota As anggota = New anggota()
anggota.nama = txtNama.Text
anggota.nim = txtNIM.Text
anggota.id_prodi = prodi.id_prodi
anggota.tempat_lahir = txtTmpLahir.Text
anggota.tanggal_lahir = dtpTanggalLahir.Value
anggota.no_hp = txtNoHp.Text
database.anggota.AddObject(anggota)
database.SaveChanges()
Me.DialogResult = Windows.Forms.DialogResult.OK
Catch ex As Exception
General.ErrorMessage(ex.Message)
End Try

End Sub
Private Sub btnBatal_Click(sender As System.Object, e As System.EventArgs)
Handles btnBatal.Click
Me.DialogResult = Windows.Forms.DialogResult.Cancel
End Sub
Private Sub FrmAddAnggota_Load(sender As System.Object, e As
System.EventArgs) Handles MyBase.Load
Dim fakultas = (From f In database.fakultas
Select f).ToList()
cmbFakultas.DataSource = fakultas
cmbFakultas.ValueMember = "nama"
End Sub
Private Sub cmbFakultas_SelectedValueChanged(sender As System.Object, e As
System.EventArgs) Handles cmbFakultas.SelectedValueChanged
Dim selectedFakultas As fakultas = cmbFakultas.SelectedItem
Dim prodi = (From p In database.prodi
Where p.id_fakultas = selectedFakultas.id_fakultas
Select p).ToList()
cmbProdi.DataSource = prodi
cmbProdi.ValueMember = "nama"

End If
End Sub
Private Sub txtNama_TextChanged(sender As System.Object, e As
System.EventArgs) Handles txtNama.TextChanged
End Sub
End Class

FrmAddBook.vb
Public Class FrmAddBook
Dim database As DatabaseEntities

Universitas Sumatera Utara

Private Sub FrmAddBook_Load(sender As System.Object, e As System.EventArgs)
Handles MyBase.Load
database = New DatabaseEntities()
End Sub
Private Sub btnBatal_Click(sender As System.Object, e As System.EventArgs)
Handles btnBatal.Click
Me.DialogResult = Windows.Forms.DialogResult.Cancel

End Sub
Private Sub btnSave_Click(sender As System.Object, e As System.EventArgs)
Handles btnSave.Click
If txtISBN.Text = "" Then
General.ErrorMessage("ISBN buku tidak boleh kosong!")
Return
End If
If txtCode.Text = "" Then
General.ErrorMessage("Kode buku tidak boleh kosong!")
Return
End If
If txtJudul.Text = "" Then
General.ErrorMessage("Judul buku tidak boleh kosong!")
Return
End If
If txtPengarang.Text = "" Then
General.ErrorMessage("Pengarang buku tidak boleh kosong!")
Return
End If
If txtPenerbit.Text = "" Then
General.ErrorMessage("Penerbit buku tidak boleh kosong!")
Return
End If
Dim jumlah As Integer
If txtJumlah.Text = "" Or Not Integer.TryParse(txtJumlah.Text, jumlah)
Then
General.ErrorMessage("Jumlah buku tidak valid!")
Return
End If
For i As Integer = 1 To jumlah
Dim book As buku = New buku()
book.isbn = txtISBN.Text
book.code = txtCode.Text.ToUpper() & i
book.judul_buku = txtJudul.Text
book.pengarang = txtPengarang.Text
book.penerbit = txtPenerbit.Text
book.unit = i
book.status = True
database.AddTobuku(book)
Next
database.SaveChanges()
Me.DialogResult = Windows.Forms.DialogResult.OK
End Sub

Universitas Sumatera Utara

Private Sub txtISBN_TextChanged(sender As System.Object, e As
System.EventArgs) Handles txtISBN.TextChanged
End Sub
End Class

FrmAddPeminjaman.vb
Public Class FrmAddPeminjaman
Dim database As DatabaseEntities
Dim book As buku
Dim anggota As anggota
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
database = New DatabaseEntities()
End Sub
Private Sub btnBatal_Click(sender As System.Object, e As System.EventArgs)
Handles btnBatal.Click
Me.DialogResult = Windows.Forms.DialogResult.Cancel
End Sub
Private Sub btnSave_Click(sender As System.Object, e As System.EventArgs)
Handles btnSave.Click
If IsNothing(book) Then
General.ErrorMessage("Silihkan pilih buku yang akan dipinjam!")
Return
End If
If IsNothing(anggota) Then
General.ErrorMessage("Silahkan pilih anggota yang meminjam buku!")
Return
End If
If book.status = False Then
General.ErrorMessage("Buku tidak tersedia")
Return
End If
Dim peminjaman As peminjaman = New peminjaman()
peminjaman.code = txtCode.Text
peminjaman.tanggal = dtpTanggal.Value
peminjaman.id_anggota = anggota.id_anggota
peminjaman.id_buku = book.id_buku
peminjaman.no_hp = txtAnggotaHp.Text
peminjaman.konfirmasi = False
database.peminjaman.AddObject(peminjaman)
book.status = False
database.ObjectStateManager.ChangeObjectState(book,
EntityState.Modified)
database.SaveChanges()
Me.DialogResult = Windows.Forms.DialogResult.OK
End Sub

Universitas Sumatera Utara

Private Sub FrmAddPeminjaman_Load(sender As System.Object, e As
System.EventArgs) Handles MyBase.Load
Dim code As String = "P" & DateTime.Now.ToString("MM")
Dim data = (From p In database.peminjaman
Where p.code.ToLower.StartsWith(code.ToLower)
Order By p.code Descending
Select p).FirstOrDefault()
txtCode.Text = code
End Sub
Private Sub pctSearchBuku_Click(sender As System.Object, e As
System.EventArgs) Handles pctSearchBuku.Click
Dim frmSearchBook As FrmSearchBook = New FrmSearchBook()
Dim result As DialogResult = frmSearchBook.ShowDialog()
If result = Windows.Forms.DialogResult.OK Then
book = (From b In database.buku
Where b.id_buku = frmSearchBook.book.id_buku
Select b).FirstOrDefault()
txtBukuJudul.Text = book.judul_buku
txtBukuPengarang.Text = book.pengarang()
txtBukuPenerbit.Text = book.penerbit
txtBukuUnit.Text = book.unit
End If
End Sub
Private Sub pctSearchAnggota_Click(sender As System.Object, e As
System.EventArgs) Handles pctSearchAnggota.Click
Dim frmSearchAnggota As FrmSearchAnggota = New FrmSearchAnggota()
Dim result As DialogResult = frmSearchAnggota.ShowDialog()
If result = Windows.Forms.DialogResult.OK Then
anggota = frmSearchAnggota.anggota
txtAnggotaNim.Text = anggota.nim
txtAnggotaNama.Text = anggota.nama
txtAnggotaFakultas.Text = anggota.prodi.fakultas.nama
txtAnggotaProdi.Text = anggota.prodi.nama
txtAnggotaHp.Text = anggota.no_hp
End If
End Sub
Private Sub txtCode_TextChanged(sender As System.Object, e As
System.EventArgs) Handles txtCode.TextChanged
End Sub
End Class

FrmEditAnggota.vb
Public Class FrmEditAnggota
Dim database As DatabaseEntities
Dim IsEdit As Boolean
Public anggota As anggota
Public Sub New()
' This call is required by the designer.
InitializeComponent()

Universitas Sumatera Utara

' Add any initialization after the InitializeComponent() call.
database = New DatabaseEntities()
IsEdit = False
anggota = New anggota()
End Sub
Private Sub FrmEditAnggota_Load(sender As System.Object, e As
System.EventArgs) Handles MyBase.Load
Dim fakultas = (From f In database.fakultas
Select f).ToList()
cmbFakultas.DataSource = fakultas
cmbFakultas.ValueMember = "nama"
Dim prodi = (From p In database.prodi
Where p.id_fakultas = anggota.prodi.id_fakultas
Select p).ToList()
cmbProdi.DataSource = prodi
cmbProdi.ValueMember = "nama"
txtNama.Text = anggota.nama
txtNIM.Text = anggota.nim
cmbFakultas.SelectedValue = anggota.prodi.fakultas.nama
cmbProdi.SelectedValue = anggota.prodi.nama
txtTmpLahir.Text = anggota.tempat_lahir
dtpTanggalLahir.Value = anggota.tanggal_lahir
txtNoHp.Text = anggota.no_hp
txtNama.Enabled = IsEdit
txtNIM.Enabled = IsEdit
cmbFakultas.Enabled = IsEdit
cmbProdi.Enabled = IsEdit
txtTmpLahir.Enabled = IsEdit
dtpTanggalLahir.Enabled = IsEdit
txtNoHp.Enabled = IsEdit
btnSave.Text = "&Edit"
End Sub
Private Sub btnBatal_Click(sender As System.Object, e As System.EventArgs)
Handles btnBatal.Click
Me.DialogResult = Windows.Forms.DialogResult.Cancel
End Sub
Private Sub btnSave_Click(sender As System.Object, e As System.EventArgs)
Handles btnSave.Click
If IsEdit Then
If txtNama.Text = "" Then
General.ErrorMessage("Nama tidak boleh kosong!")
Return
End If
If txtNIM.Text = "" Then
General.ErrorMessage("Nim tidak boleh kosong!")
Return
End If
If cmbFakultas.SelectedIndex < 0 Then

Universitas Sumatera Utara

General.ErrorMessage("Silahkan pilih Fakultas Anda!")
Return
End If
If cmbProdi.SelectedIndex < 0 Then
General.ErrorMessage("Silahkan pilih Program Studi Anda!")
Return
End If
If txtTmpLahir.Text = "" Then
General.ErrorMessage("Tempat lahir tidak boleh kosong!")
Return
End If
If txtNoHp.Text = "" Then
General.ErrorMessage("No hp tidak boleh kosong!")
Return
End If
Dim prodi As prodi = cmbProdi.SelectedItem
Dim temp As anggota = (From a In database.anggota
Where a.id_anggota = anggota.id_anggota
Select a).First()
temp.nama = txtNama.Text
temp.nim = txtNIM.Text
temp.id_prodi = prodi.id_prodi
temp.tempat_lahir = txtTmpLahir.Text
temp.tanggal_lahir = dtpTanggalLahir.Value
temp.no_hp = txtNoHp.Text
If IsNothing(temp.EntityKey) Or temp.EntityKey.IsTemporary Then
database.anggota.AddObject(temp)
End If
database.ObjectStateManager.ChangeObjectState(temp,
EntityState.Modified)
database.SaveChanges()
Me.DialogResult = Windows.Forms.DialogResult.OK
Else
IsEdit = True
txtNama.Enabled = IsEdit
txtNIM.Enabled = IsEdit
cmbFakultas.Enabled = IsEdit
cmbProdi.Enabled = IsEdit
txtTmpLahir.Enabled = IsEdit
dtpTanggalLahir.Enabled = IsEdit
txtNoHp.Enabled = IsEdit
btnSave.Text = "&Simpan"
End If
End Sub
Private Sub cmbFakultas_SelectedIndexChanged(sender As System.Object, e As
System.EventArgs) Handles cmbFakultas.SelectedIndexChanged
Dim selectedFakultas As fakultas = cmbFakultas.SelectedItem
Dim prodi = (From p In database.prodi
Where p.id_fakultas = selectedFakultas.id_fakultas
Select p).ToList()

Universitas Sumatera Utara

cmbProdi.DataSource = prodi
End Sub
Private Sub txtNama_TextChanged(sender As System.Object, e As
System.EventArgs) Handles txtNama.TextChanged
End Sub
End Class

FrmEditBook.vb
Public Class FrmEditBook
Public book As buku
Dim database As DatabaseEntities
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
book = New buku
database = New DatabaseEntities()
End Sub
Private Sub FrmEditBook_Load(sender As System.Object, e As
System.EventArgs) Handles MyBase.Load
txtISBN.Text = book.isbn
txtCode.Text = book.code
txtJudul.Text = book.judul_buku
txtPengarang.Text = book.pengarang
txtPenerbit.Text = book.penerbit
cmbStatus.SelectedItem = IIf(book.status = True, "tersedia", "tidak
tersedia")
End Sub
Private Sub btnSave_Click(sender As System.Object, e As System.EventArgs)
Handles btnSave.Click
If txtISBN.Text = "" Then
General.ErrorMessage("ISBN buku tidak boleh kosong!")
Return
End If
If txtCode.Text = "" Then
General.ErrorMessage("Kode buku tidak boleh kosong!")
Return
End If
If txtJudul.Text = "" Then
General.ErrorMessage("Judul buku tidak boleh kosong!")
Return
End If
If txtPengarang.Text = "" Then
General.ErrorMessage("Pengarang buku tidak boleh kosong!")
Return
End If
If txtPenerbit.Text = "" Then
General.ErrorMessage("Penerbit buku tidak boleh kosong!")
Return

Universitas Sumatera Utara

End If
Dim buku As buku = (From b In database.buku
Where b.id_buku = book.id_buku
Select b).FirstOrDefault()
buku.isbn = txtISBN.Text
buku.code = txtCode.Text.ToUpper()
buku.judul_buku = txtJudul.Text
buku.pengarang = txtPengarang.Text
buku.penerbit = txtPenerbit.Text
buku.status = If(cmbStatus.Text.Equals("tersedia"), True, False)
database.SaveChanges()
Me.DialogResult = Windows.Forms.DialogResult.OK
End Sub
Private Sub btnBatal_Click(sender As System.Object, e As System.EventArgs)
Handles btnBatal.Click
Me.DialogResult = Windows.Forms.DialogResult.Cancel
End Sub
Private Sub txtISBN_TextChanged(sender As System.Object, e As
System.EventArgs) Handles txtISBN.TextChanged
End Sub
End Class

FrmPengembalian.vb
ublic Class FrmPengembalian
Dim database As DatabaseEntities
Dim peminjaman As peminjaman
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
database = New DatabaseEntities()
End Sub
Private Sub FrmPengembalian_Load(sender As System.Object, e As
System.EventArgs) Handles MyBase.Load
Dim listCode = (From p In database.peminjaman
Where p.pengembalian.Count = 0
Select p).ToList()
cmbCode.DataSource = listCode
cmbCode.ValueMember = "code"
txtTanggalPeminjaman.Text = ""
txtDenda.Text = ""
txtBukuJudul.Text = ""
txtBukuPengarang.Text = ""
txtBukuPenerbit.Text = ""
txtBukuUnit.Text = ""

Universitas Sumatera Utara

txtAnggotaNim.Text = ""
txtAnggotaNama.Text = ""
txtAnggotaFakultas.Text = ""
txtAnggotaProdi.Text = ""
txtAnggotaHp.Text = ""
End Sub
Private Sub cmbCode_SelectedIndexChanged(sender As System.Object, e As
System.EventArgs) Handles cmbCode.SelectedIndexChanged
If Not IsNothing(peminjaman) Then
Dim settingTime As Integer =
General.GetSetting("lama_peminjaman")
Dim settingDenda As Decimal =
General.GetSetting("denda_per_hari")
Dim denda As Integer
Dim dateNow As DateTime = DateTime.Now
Dim pDate As DateTime =
DateTime.Parse(peminjaman.tanggal.ToString()).AddDays(1)
Dim range As Integer = (dateNow - pDate).TotalDays
If (range > settingTime) Then
denda = (range - settingTime) * settingDenda
Else
denda = 0
End If
txtTanggalPeminjaman.Text = pDate.ToShortDateString()
txtDenda.Text = denda
txtBukuJudul.Text = peminjaman.buku.judul_buku
txtBukuPengarang.Text = peminjaman.buku.pengarang
txtBukuPenerbit.Text = peminjaman.buku.penerbit
txtBukuUnit.Text = peminjaman.buku.unit
txtAnggotaNim.Text = peminjaman.anggota.nim
txtAnggotaNama.Text = peminjaman.anggota.nama
txtAnggotaFakultas.Text =
peminjaman.anggota.prodi.fakultas.nama
txtAnggotaProdi.Text = peminjaman.anggota.prodi.nama
txtAnggotaHp.Text = peminjaman.anggota.no_hp
End If
End If
End Sub
Private Sub btnBatal_Click(sender As System.Object, e As System.EventArgs)
Handles btnBatal.Click
Me.DialogResult = Windows.Forms.DialogResult.Cancel
End Sub
Private Sub btnSave_Click(sender As System.Object, e As System.EventArgs)
Handles btnSave.Click
If IsNothing(peminjaman) Then
General.ErrorMessage("Silahkan pilih code peminjaman!")
Return
End If
Dim book = (From b In database.buku
Where b.id_buku = peminjaman.id_buku
Select b).FirstOrDefault()

Universitas Sumatera Utara

book.status = True
database.SaveChanges()
Me.DialogResult = Windows.Forms.DialogResult.OK
End Sub
Private Sub pctSearchPeminjaman_Click(sender As System.Object, e As
System.EventArgs) Handles pctSearchPeminjaman.Click
Dim frmSearchPeminjaman As FrmSearchPeminjaman = New
FrmSearchPeminjaman()
Dim result As DialogResult = frmSearchPeminjaman.ShowDialog()
If result = Windows.Forms.DialogResult.OK Then
peminjaman = (From p In database.peminjaman
Where p.id_peminjaman =
frmSearchPeminjaman.peminjaman.id_peminjaman
Select p).FirstOrDefault()
cmbCode.SelectedItem = peminjaman
End If
End Sub
End Class

FrmSearchAnggota.vb
Public Class FrmSearchAnggota
Dim database As DatabaseEntities
Public anggota As anggota
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
database = New DatabaseEntities()
anggota = New anggota()
End Sub
Private Sub LoadData()
Dim search As String = txtCari.Text
Dim data
If search = "" Then
data = (From a In database.anggota
Select id_anggota = a.id_anggota,
nim = a.nim,
nama = a.nama,
fakultas = a.prodi.fakultas.nama,
prodi = a.prodi.nama,
tempat_lahir = a.tempat_lahir,
tanggal_lahir = a.tanggal_lahir,
no_hp = a.no_hp).ToList()
Else
data = (From a In database.anggota
Where a.nama.ToLower().Contains(search.ToLower())
Select id_anggota = a.id_anggota,
nim = a.nim,
nama = a.nama,
fakultas = a.prodi.fakultas.nama,
prodi = a.prodi.nama,
tempat_lahir = a.tempat_lahir,

Universitas Sumatera Utara

tanggal_lahir = a.tanggal_lahir,
no_hp = a.no_hp).ToList()
End If
dataGrid.DataSource = data
End Sub
Private Sub btnCancel_Click(sender As System.Object, e As System.EventArgs)
Handles btnCancel.Click
Me.DialogResult = Windows.Forms.DialogResult.Cancel
End Sub
Private Sub BtnCari_Click(sender As System.Object, e As System.EventArgs)
Handles BtnCari.Click
LoadData()
End Sub
Private Sub FrmSearchAnggota_Load(sender As System.Object, e As
System.EventArgs) Handles MyBase.Load
LoadData()
End Sub
Private Sub txtCari_TextChanged(sender As System.Object, e As
System.EventArgs) Handles txtCari.TextChanged
End Sub
End Class

FrmSearchBook.vb
Public Class FrmSearchBook
Dim database As DatabaseEntities
Public book As buku
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
database = New DatabaseEntities()
book = New buku()
LoadData()
End Sub
Private Sub LoadData()
Dim search As String = txtCari.Text
Dim data
If search = "" Then
data = (From b In database.buku
Select id_buku = b.id_buku,
judul_buku = b.judul_buku,
pengarang = b.pengarang,
penerbit = b.penerbit,
unit = b.unit,
status = If(b.status = True, "tersedia", "tidak
tersedia")).ToList()
Else
data = (From b In database.buku
Where b.judul_buku.ToLower().Contains(search.ToLower()) Or
b.pengarang.ToLower().Contains(search.ToLower())
Select id_buku = b.id_buku,

Universitas Sumatera Utara

judul_buku = b.judul_buku,
pengarang = b.pengarang,
penerbit = b.penerbit,
unit = b.unit,
status = If(b.status = True, "tersedia", "tidak
tersedia")).ToList()
End If
End Sub
Private Sub BtnCari_Click(sender As System.Object, e As System.EventArgs)
Handles BtnCari.Click
LoadData()
End Sub
Private Sub btnCancel_Click(sender As System.Object, e As System.EventArgs)
Handles btnCancel.Click
Me.DialogResult = Windows.Forms.DialogResult.Cancel
End Sub
Private Sub txtCari_TextChanged(sender As System.Object, e As
System.EventArgs) Handles txtCari.TextChanged
End Sub
End Class

FrmSearchPeminjaman.vb
Public Class FrmSearchPeminjaman
Dim database As DatabaseEntities
Public peminjaman As peminjaman
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
database = New DatabaseEntities()
peminjaman = New peminjaman()
End Sub
Public Sub LoadData()
Dim search As String = txtCari.Text
Dim data
If search = "" Then
data = (From p In database.peminjaman
Where p.pengembalian.Count = 0
Select id_peminjaman = p.id_peminjaman,
code = p.code,
tanggal = p.tanggal,
judul_buku = p.buku.judul_buku,
pengarang = p.buku.pengarang,
penerbit = p.buku.penerbit,
nama = p.anggota.nama,
nim = p.anggota.nim).ToList()
Else
data = (From p In database.peminjaman
Where (p.code.ToLower.Contains(search.ToLower()) Or
p.anggota.nama.ToLower.Contains(search.ToLower)) And p.pengembalian.Count = 0
Select id_peminjaman = p.id_peminjaman,
code = p.code,

Universitas Sumatera Utara

tanggal = p.tanggal,
judul_buku = p.buku.judul_buku,
pengarang = p.buku.pengarang,
penerbit = p.buku.penerbit,
nama = p.anggota.nama,
nim = p.anggota.nim).ToList()
End If
End Sub
Private Sub BtnCari_Click(sender As System.Object, e As System.EventArgs)
Handles BtnCari.Click
LoadData()
End Sub
Private Sub FrmSearchPeminjaman_Load(sender As System.Object, e As
System.EventArgs) Handles MyBase.Load
LoadData()
End Sub
Private Sub btnCancel_Click(sender As System.Object, e As System.EventArgs)
Handles btnCancel.Click
Me.DialogResult = Windows.Forms.DialogResult.Cancel
End Sub
Private Sub txtCari_TextChanged(sender As System.Object, e As
System.EventArgs) Handles txtCari.TextChanged
End Sub
End Class

FrmSearchPeminjaman.vb
Public Class FrmSearchPeminjaman
Dim database As DatabaseEntities
Public peminjaman As peminjaman
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
database = New DatabaseEntities()
peminjaman = New peminjaman()
End Sub
Public Sub LoadData()
Dim search As String = txtCari.Text
Dim data
If search = "" Then
data = (From p In database.peminjaman
Where p.pengembalian.Count = 0
Select id_peminjaman = p.id_peminjaman,
code = p.code,
tanggal = p.tanggal,
judul_buku = p.buku.judul_buku,
pengarang = p.buku.pengarang,
penerbit = p.buku.penerbit,
nama = p.anggota.nama,
nim = p.anggota.nim).ToList()
Else

Universitas Sumatera Utara

data = (From p In database.peminjaman
Where (p.code.ToLower.Contains(search.ToLower()) Or
p.anggota.nama.ToLower.Contains(search.ToLower)) And p.pengembalian.Count = 0
Select id_peminjaman = p.id_peminjaman,
code = p.code,
tanggal = p.tanggal,
judul_buku = p.buku.judul_buku,
pengarang = p.buku.pengarang,
penerbit = p.buku.penerbit,
nama = p.anggota.nama,
nim = p.anggota.nim).ToList()
End If
End Sub
Private Sub BtnCari_Click(sender As System.Object, e As System.EventArgs)
Handles BtnCari.Click
LoadData()
End Sub
Private Sub FrmSearchPeminjaman_Load(sender As System.Object, e As
System.EventArgs) Handles MyBase.Load
LoadData()
End Sub

FrmUcAnggota.vb
Public Class UcAnggota
Dim database As DatabaseEntities
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
database = New DatabaseEntities()
End Sub
Public Sub LoadData()
Dim search As String = txtCari.Text
Dim data
If search = "" Then
data = (From a In database.anggota
Order By a.nim Ascending
Select id_anggota = a.id_anggota,
nim = a.nim,
nama = a.nama,
fakultas = a.prodi.fakultas.nama,
prodi = a.prodi.nama,
tempat_lahir = a.tempat_lahir,
tanggal_lahir = a.tanggal_lahir,
no_hp = a.no_hp).ToList()
Else
data = (From a In database.anggota
Order By a.nim Ascending
Where a.nama.ToLower().Contains(search.ToLower()) Or
a.nim.ToLower().Contains(search.ToLower())
Select id_anggota = a.id_anggota,
nim = a.nim,
nama = a.nama,

Universitas Sumatera Utara

fakultas = a.prodi.fakultas.nama,
prodi = a.prodi.nama,
tempat_lahir = a.tempat_lahir,
tanggal_lahir = a.tanggal_lahir,
no_hp = a.no_hp).ToList()
End If
dataGrid.DataSource = data
End Sub
Private Sub UcAnggota_Load(sender As System.Object, e As System.EventArgs)
Handles MyBase.Load
LoadData()
End Sub
Private Sub btnCari_Click(sender As System.Object, e As System.EventArgs)
Handles btnCari.Click
LoadData()
End Sub
Private Sub btnAdd_Click(sender As System.Object, e As System.EventArgs)
Handles btnAdd.Click
Dim frmAddAnggota As FrmAddAnggota = New FrmAddAnggota()
Dim result As DialogResult = frmAddAnggota.ShowDialog()
If result = DialogResult.OK Then
LoadData()
End If
End Sub
Private Sub dataGrid_CellContentDoubleClick(sender As System.Object, e As
System.Windows.Forms.DataGridViewCellEventArgs) Handles
dataGrid.CellContentDoubleClick
Dim id_anggota As Integer = dataGrid.Rows(e.RowIndex).Cells(0).Value
Dim anggota As anggota = (From a In database.anggota
Where a.id_anggota = id_anggota
Select a).FirstOrDefault()
Dim frmEditAnggota As FrmEditAnggota = New FrmEditAnggota()
Dim result As DialogResult
frmEditAnggota.anggota = anggota
result = frmEditAnggota.ShowDialog()
If result = DialogResult.OK Then
LoadData()
End If
End Sub
Private Sub btnDelete_Click(sender As System.Object, e As System.EventArgs)
Handles btnDelete.Click
Dim id As Integer =
dataGrid.Rows(dataGrid.SelectedCells(0).RowIndex).Cells(0).Value
Dim name As String =
dataGrid.Rows(dataGrid.SelectedCells(0).RowIndex).Cells(2).Value
Dim result As DialogResult = MessageBox.Show(String.Format("Apakah Anda
ingin menghapus data anggota {0}", name), "Konfirmasi",
MessageBoxButtons.YesNo, MessageBoxIcon.Information)
If result = DialogResult.Yes Then
Dim anggota = (From a In database.anggota
Where a.id_anggota = id).FirstOrDefault()

Universitas Sumatera Utara

database.anggota.DeleteObject(anggota)
database.SaveChanges()
LoadData()
End If
End Sub
Private Sub txtCari_TextChanged(sender As System.Object, e As
System.EventArgs) Handles txtCari.TextChanged
End Sub
End Class

FrmUcBook.vb
Public Class UcBook
Dim database As DatabaseEntities
Private Sub UcBook_Load(sender As System.Object, e As System.EventArgs)
Handles MyBase.Load
database = New DatabaseEntities()
End Sub
Public Sub LoadData()
Dim search As String = txtCari.Text
Dim data
If search = "" Then
data = (From b In database.buku
Order By b.judul_buku Ascending
Select id_buku = b.id_buku,
judul_buku = b.judul_buku,
pengarang = b.pengarang,
penerbit = b.penerbit,
unit = b.unit,
isbn = b.isbn,
code = b.code,
status = If(b.status = True, "tersedia", "tidak
tersedia")).ToList()
Else
data = (From b In database.buku
Order By b.judul_buku Ascending
Where b.judul_buku.ToLower().Contains(search.ToLower()) Or
b.pengarang.ToLower().Contains(search.ToLower())
Select id_buku = b.id_buku,
judul_buku = b.judul_buku,
pengarang = b.pengarang,
penerbit = b.penerbit,
unit = b.unit,
isbn = b.isbn,
code = b.code,
status = If(b.status = True, "tersedia", "tidak
tersedia")).ToList()
End If
dataGrid.DataSource = data
End Sub
Private Sub btnAdd_Click(sender As System.Object, e As System.EventArgs)
Handles btnAdd.Click
Dim frmAddBook = New FrmAddBook()
Dim result As DialogResult

Universitas Sumatera Utara

result = frmAddBook.ShowDialog()
If result = DialogResult.OK Then
LoadData()
End If
End Sub
Private Sub dataGrid_CellDoubleClick(sender As System.Object, e As
System.Windows.Forms.DataGridViewCellEventArgs) Handles
dataGrid.CellDoubleClick
Dim frmEdit As FrmEditBook = New FrmEditBook()
Dim id_buku As Integer = dataGrid.Rows(e.RowIndex).Cells(0).Value
frmEdit.book = (From b In database.buku
Where b.id_buku = id_buku
Select b).FirstOrDefault()
Dim result As DialogResult
result = frmEdit.ShowDialog()
If result = DialogResult.OK Then
LoadData()
End If
End Sub
Private Sub btnCari_Click(sender As System.Object, e As System.EventArgs)
Handles btnCari.Click
LoadData()
End Sub
Private Sub txtCari_TextChanged(sender As System.Object, e As
System.EventArgs) Handles txtCari.TextChanged
End Sub
End Class

FrmUcConnection.vb
Imports System.IO.Ports
Imports System.Management
Public Class UcConnection
Dim port As SerialPort
Dim SMSGateway As SMSLib
Dim formUtama As FormUtama
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
SMSGateway = New SMSLib()
formUtama = New FormUtama()
End Sub
Private Sub UcConnection_Load(sender As System.Object, e As
System.EventArgs) Handles MyBase.Load
Try
formUtama = Me.Parent.Parent
Next
cmbPort.ValueMember = "Name"

Universitas Sumatera Utara

Catch err As ManagementException
MessageBox.Show("An error occurred while querying for WMI data:
" & err.Message)
End Try
port = formUtama.smsBackgroundProcess.port
rdbSIM.Checked = True
formUtama.smsBackgroundProcess.SIM_STORAGE = True
Catch ex As Exception
General.ErrorLog(ex.Message)
End Try
End Sub
Private Sub rdbSIM_CheckedChanged(sender As System.Object, e As
System.EventArgs) Handles rdbSIM.CheckedChanged
formUtama.smsBackgroundProcess.SIM_STORAGE = True
End Sub
Private Sub rdbDevice_CheckedChanged(sender As System.Object, e As
System.EventArgs) Handles rdbDevice.CheckedChanged
formUtama.smsBackgroundProcess.SIM_STORAGE = False
End Sub
Private Sub btnConnect_Click(sender As System.Object, e As
System.EventArgs) Handles btnConnect.Click
Try
If btnConnect.Text.Equals("Connect") Then
Me.port =
formUtama.smsBackgroundProcess.smsLib.OpenPort(port.Port, baundRate, dataBits,
readTimeout, writeTimeout)
If Not IsNothing(Me.port) Then
formUtama.statusBar.Text = "Status : Connected to " +
cmbPort.Text
Else
formUtama.statusBar.Text = "Status : Invalid port settings"
End If
formUtama.smsBackgroundProcess.port = Me.port
btnConnect.Text = "Disconnect"
gboPortSetting.Enabled = False
Else
formUtama.smsBackgroundProcess.ClosePort()
btnConnect.Text = "Connect"
gboPortSetting.Enabled = True
End If
Catch ex As Exception
formUtama.statusBar.Text = "Status : " & ex.Message
End Try
End Sub
Private Sub cmbPort_SelectedIndexChanged(sender As System.Object, e As
System.EventArgs) Handles cmbPort.SelectedIndexChanged
End Sub
End Class
Public Class PortName
Property Name As String
Property Port As String
End Class

Universitas Sumatera Utara

FrmUcHome.vb
Public Class UcHome
Private Sub Label1_Click(sender As System.Object, e As System.EventArgs)
Handles Label1.Click
End Sub
End Class

FrmUcPeminjaman.vb
Public Class UcPeminjaman
Dim database As DatabaseEntities
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
database = New DatabaseEntities()
End Sub

Private Sub UcPeminjaman_Load(sender As System.Object, e As
System.EventArgs) Handles MyBase.Load
End Sub
Public Sub LoadData()
Dim search As String = txtCari.Text
Dim data
If search = "" Then
data = (From p In database.peminjaman
Where p.pengembalian.Count = 0
Select id_peminjaman = p.id_peminjaman,
code = p.code,
tanggal = p.tanggal,
judul_buku = p.buku.judul_buku,
pengarang = p.buku.pengarang,
penerbit = p.buku.penerbit,
nama = p.anggota.nama,
nim = p.anggota.nim).ToList()
Else
data = (From p In database.peminjaman
Where p.code.ToLower.Contains(search.ToLower()) Or
p.anggota.nama.ToLower.Contains(search.ToLower) And p.pengembalian.Count = 0
Select id_peminjaman = p.id_peminjaman,
code = p.code,
tanggal = p.tanggal,
judul_buku = p.buku.judul_buku,
pengarang = p.buku.pengarang,
penerbit = p.buku.penerbit,
nama = p.anggota.nama,
nim = p.anggota.nim).ToList()
End If
End Sub
Private Sub btnCari_Click(sender As System.Object, e As System.EventArgs)
Handles btnCari.Click

Universitas Sumatera Utara

LoadData()
End Sub
Private Sub btnAdd_Click(sender As System.Object, e As System.EventArgs)
Handles btnAdd.Click
Dim frmAddPeminjaman As FrmAddPeminjaman = New FrmAddPeminjaman()
Dim result As DialogResult = frmAddPeminjaman.ShowDialog()
If result = DialogResult.OK Then
LoadData()
End If
End Sub
Private Sub txtCari_TextChanged(sender As System.Object, e As
System.EventArgs) Handles txtCari.TextChanged
End Sub
End Class

FrmUcPengembalian.vb
Public Class UcPengembalian
Dim database As DatabaseEntities
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
database = New DatabaseEntities()
End Sub
Public Sub LoadData()
Dim search As String = txtCari.Text
Dim data
If search = "" Then
data = (From p In database.pengembalian
Select id_pengembalian = p.id_pengembalian,
code = p.peminjaman.code,
tanggal_peminjaman = p.peminjaman.tanggal,
tanggal_pengembalian = p.tanggal,
judul_buku = p.peminjaman.buku.judul_buku,
pengarang = p.peminjaman.buku.pengarang,
penerbit = p.peminjaman.buku.penerbit,
nama = p.peminjaman.anggota.nama,
nim = p.peminjaman.anggota.nim,
denda = p.denda).ToList()
Else
data = (From p In database.pengembalian
Where p.peminjaman.code.ToLower.Contains(search.ToLower())
Or p.peminjaman.anggota.nama.ToLower.Contains(search.ToLower)
Select id_pengembalian = p.id_pengembalian,
code = p.peminjaman.code,
tanggal_peminjaman = p.peminjaman.tanggal,
tanggal_pengembalian = p.tanggal,
judul_buku = p.peminjaman.buku.judul_buku,
pengarang = p.peminjaman.buku.pengarang,
penerbit = p.peminjaman.buku.penerbit,
nama = p.peminjaman.anggota.nama,

Universitas Sumatera Utara

nim = p.peminjaman.anggota.nim,
denda = p.denda).ToList()
End If
End Sub
Private Sub btnAdd_Click(sender As System.Object, e As System.EventArgs)
Handles btnAdd.Click
Dim frmPengembalian As FrmPengembalian = New FrmPengembalian()
Dim result As DialogResult = frmPengembalian.ShowDialog()
If result = DialogResult.OK Then
LoadData()
End If
End Sub
Private Sub txtCari_TextChanged(sender As System.Object, e As
System.EventArgs) Handles txtCari.TextChanged
End Sub
End Class

ShortMessage.vb
Public Class ShortMessage
Public Property Index As Integer
Public Property Status As String
Public Property Sender As String
Public Property Alphabet As String
Public Property Sent As String
Public Property Message As String
End Class

SMSBackgroundProcess.vb
Imports System.IO.Ports
Imports System.Text.RegularExpressions
Imports System.Threading
Public Class SMSBackgroundProcess
Public port As SerialPort
Public smsLib As ATLib.SMSLib
Public SIM_STORAGE As Boolean
Dim database As DatabaseEntities
Public Sub New()
smsLib = New ATLib.SMSLib()
SIM_STORAGE = True
database = New DatabaseEntities()
End Sub

Public Sub ClosePort()
smsLib.ClosePort(Me.port)
End Sub
Public Function SendMultiPageSMS(sender As String, message As String)
While message.Length > 160
Dim part As String = message.Substring(0, 160)
message = message.Substring(160)
If Not smsLib.SendMessage(Me.port, sender, part) Then

Universitas Sumatera Utara

Return False
End If
End While
Return smsLib.SendMessage(Me.port, sender, message)
End Function
Public Sub RunSMSBackgroundProcess()
Dim bgProcess = New Thread(New ThreadStart(AddressOf SMSGateway))
bgProcess.IsBackground = True
bgProcess.Start()
End Sub
Public Sub SMSGateway()
While True
ConfirmationProcess()
ReadSMS()
Thread.Sleep(3000)
End While
End Sub
Private Sub ConfirmationProcess()
'While True
Try
If Not IsNothing(Me.port) Then
'mengirim sms konfirmasi telah melakukan peminjaman buku
smsLib.log_file = "ConfirmationProcess_"
General.LogActivity(smsLib.log_file, "Start Confirmation
Process")
Dim listPeminjaman As List(Of peminjaman) = (From p In
database.peminjaman
Where p.konfirmasi
= False
Select p).ToList()
General.LogActivity(smsLib.log_file, String.Format("{0} data
peminjaman ditemukan", listPeminjaman.Count))
For Each item In listPeminjaman
General.LogActivity(smsLib.log_file,
String.Format("Receiver : {0}, NIM : {1}, No : {2},
Code Pemesanan : {3}",
item.anggota.nama, item.anggota.nim,
item.no_hp, item.code))
Dim tanggalTenggang As DateTime =
DateTime.Parse(item.tanggal.ToString).AddDays(General.GetSetting("lama_peminjam
an"))
Dim message As String = String.Format("Terima kasih telah
melakukan peminjaman. Kode peminjaman Anda {0}. Tenggang waktu peminjaman {1}",
item.code,
tanggalTenggang.ToShortDateString())
If smsLib.SendMessage(Me.port, item.no_hp, message) Then
item.konfirmasi = True
database.SaveChanges()
General.LogActivity(smsLib.log_file, "Success")
Else
General.LogActivity(smsLib.log_file, "Failed")
End If
Next
General.LogActivity(smsLib.log_file,
"=================================")
'mengirimkan sms peringatan tenggang waktu

Universitas Sumatera Utara

smsLib.log_file = "RemainderProcess_"
General.LogActivity(smsLib.log_file, "Start Reminder Process")
listPeminjaman = (From p In database.peminjaman
Where p.konfirmasi = True And
p.pengembalian.Count = 0 And p.denda = False
Select p).ToList()
General.LogActivity(smsLib.log_file, String.Format("{0} data
peminjaman", listPeminjaman.Count))
For Each item In listPeminjaman
If Not (item.sent_date = DateTime.Now.Date) Or
IsNothing(item.sent_date) Then
General.LogActivity(smsLib.log_file,
String.Format("code {0}, tanggal {1}", item.code, item.tanggal.ToString()))
Dim currentDate As DateTime = DateTime.Now
Dim settingTime As Integer =
General.GetSetting("lama_peminjaman")
Dim pDate As DateTime =
DateTime.Parse(item.tanggal.ToString()).AddDays(1)
Dim range As Integer = (currentDate - pDate).TotalDays
'pengecekan waktu tenggang -1
If (settingTime - range) = 1 Then
General.LogActivity(smsLib.log_file,
String.Format("Receiver : {0}, NIM : {1}, No :
{2}, Code Pemesanan : {3}",
item.anggota.nama,
item.anggota.nim, item.no_hp, item.code))
Dim message As String = String.Format("Masa
peminjaman Anda dengan kode {0}," &
"judul {1},
akan berakhir pada tanggal {2}. " &
"Silahkan
lakukan pengembalian buku.",
item.code,
item.buku.judul_buku, pDate.AddDays(settingTime - 1).ToShortDateString())
If SendMultiPageSMS(item.no_hp, message) Then
item.sent_date = Date.Now
database.SaveChanges()
General.LogActivity(smsLib.log_file, "Success")
Else
General.LogActivity(smsLib.log_file, "Failed")
End If
'pengecekan waktu tenggang pada hari ini
ElseIf (range - settingTime) = 0 Then
General.LogActivity(smsLib.log_file,
String.Format("Receiver : {0}, NIM : {1}, No :
{2}, Code Pemesanan : {3}",
item.anggota.nama,
item.anggota.nim, item.no_hp, item.code))
Dim message As String = String.Format("Masa
peminjaman Anda dengan kode {0}," &
"judul {1},
akan berakhir pada hari ini {2}. " &
"Silahkan
lakukan pengembalian buku.",
item.code,
item.buku.judul_buku, currentDate.ToShortDateString())

Universitas Sumatera Utara

If SendMultiPageSMS(item.no_hp, message) Then
item.sent_date = Date.Now
database.SaveChanges()
General.LogActivity(smsLib.log_file, "Success")
Else
General.LogActivity(smsLib.log_file, "Failed")
End If
'pengecekan waktu tenggang telah habis dan
dikenakan denda
ElseIf (range - settingTime) > 0 Then
Dim settingDenda As Decimal =
General.GetSetting("denda_per_hari")
Dim denda As Integer = (range - settingTime) *
settingDenda
General.LogActivity(smsLib.log_file,
String.Format("Receiver : {0}, NIM : {1}, No :
{2}, Code Pemesanan : {3}",
item.anggota.nama,
item.anggota.nim, item.no_hp, item.code))
Dim message As String = String.Format("Masa
peminjaman Anda dengan kode {0}," &
"judul {1},
telah berakhir pada tanggal {2}, dengan denda {3}. " &
"Silahkan
lakukan pengembalian buku.",
item.code,
item.buku.judul_buku, pDate.AddDays(settingTime - 1).ToShortDateString(),
denda)
If SendMultiPageSMS(item.no_hp, message) Then
item.sent_date = Date.Now
item.denda = True
database.SaveChanges()
General.LogActivity(smsLib.log_file, "Success")
Else
General.LogActivity(smsLib.log_file, "Failed")
End If
End If
End If
database.Refresh(Objects.RefreshMode.ClientWins, item)
Next
General.LogActivity(smsLib.log_file,
"=================================")
End If
Catch ex As Exception
General.ErrorLog(ex.Message)
End Try
'Thread.Sleep(2000)
'End While
End Sub
Private Sub ReadSMS()
'While True
Dim messages As List(Of ATLib.ShortMessage) = Nothing
Try
If Not IsNothing(Me.port) Then
smsLib.log_file = "ReadSMS_"

Universitas Sumatera Utara

General.LogActivity(smsLib.log_file, "Start Read SMS Process")
Dim input As String = smsLib.ReadSMS(port, SIM_STORAGE)
messages = ParseMessages(input)
General.LogActivity(smsLib.log_file, String.Format("Diterima
{0} sms.", messages.Count))
If messages.Count > 0 Then
For Each msg In messages
Dim cmd As Integer = 0
If ValidateSMS(msg, cmd) Then
If cmd = CMD_DENDA Then
General.LogActivity(smsLib.log_file, "REQUEST
DENDA")
Console.WriteLine("DENDA")
Dim pesan As String() = msg.Message.Split(New
Char() {" "c})
General.LogActivity(smsLib.log_file,
String.Format("Sender : {0},
message : {1}",
msg.Sender,
msg.Message))
If pesan.Length = 2 Then
Dim code As String = pesan(1)
Dim peminjaman As peminjaman = (From p In
database.peminjaman
Where
p.code.ToLower().Equals(code.ToLower())
Select
p).FirstOrDefault()
If Not IsNothing(peminjaman) Then
If peminjaman.pengembalian.Count 0 Then
Dim settingDenda As Decimal =
General.GetSetting("denda_per_hari")
Dim denda As Integer = (range settingTime) * settingDenda
Dim message As String =
String.Format("Denda Anda untuk peminjaman {0} sebesar Rp. {1}",
peminjaman.code, denda)
General.LogActivity(smsLib.log_file,

Universitas Sumatera Utara

String.Format("Message :
{0}", message))
If smsLib.SendMessage(Me.port,
msg.Sender, message) Then
General.LogActivity(smsLib.log_file, "Success")
Else
General.LogActivity(smsLib.log_file, "Failed")
End If
Else
Dim message As String =
String.Format("Peminjaman Anda belum melewati tenggang waktu. " &
"Batas akhir pengembalian {0}", pDate.AddDays(settingTime).ToShortDateString())
General.LogActivity(smsLib.log_file,
String.Format("Message :
{0}", message))
If smsLib.SendMessage(Me.port,
msg.Sender, message) Then
General.LogActivity(smsLib.log_file, "Success")
Else
General.LogActivity(smsLib.log_file, "Failed")
End If
End If
Else
General.LogActivity(smsLib.log_file, String.Format("Kode {0} sudah di
kembalikan", code))
smsLib.SendMessage(port,
msg.Sender, "Pengembalian sudah dilakukan")
End If
Else
General.LogActivity(smsLib.log_file,
String.Format("Kode {0} tidak ditemukan", code))
smsLib.SendMessage(port, msg.Sender,
"Code peminjaman tidak ditemukan")
End If
Else
General.LogActivity(smsLib.log_file,
String.Format("Format tidak benar. {0}", msg.Message))
smsLib.SendMessage(port, msg.Sender,
"Format SMS Anda salah. Format yang benar DENDAKODE")
End If
End If
End If
Next
End If
General.LogActivity(smsLib.log_file,
"=================================")
End If
Catch ex As Exception
General.ErrorLog(ex.Message)
End Try
'Thread.Sleep(2000)
'End While

Universitas Sumatera Utara

End Sub
Private Function ValidateSMS(message As ATLib.ShortMessage, ByRef cmdType
As Integer)
Dim check As Boolean = False
Dim pesan As String() = message.Message.Split(New Char() {" "c})
Dim cmd As String = pesan(0).ToUpper()
If (cmd = "DENDA") Then
check = True
cmdType = CMD_DENDA
End If
Return check
End Function
End Class

SMSLib.vb
Imports System.IO.Ports
Imports System.Threading
Imports System.Text
Public Class SMSLib
Public receiveNow As AutoResetEvent
Public log_file As String
Shared readNow As AutoResetEvent = New AutoResetEvent(False)
Public Sub New()
Me.log_file = "SMSLib_"
End Sub
Public Function OpenPort(portName As String, baudRate As Integer, dataBits
As Integer,
readTimeout As Integer, writeTimeout As Integer)
receiveNow = New AutoResetEvent(True)
Dim port As System.IO.Ports.SerialPort = New SerialPort()
Try
port.PortName = portName
port.BaudRate = baudRate
port.DataBits = dataBits
port.ReadTimeout = readTimeout
port.WriteTimeout = writeTimeout
port.StopBits = StopBits.One
port.Parity = Parity.None
port.Encoding = Encoding.GetEncoding("iso-8859-1")
AddHandler port.DataReceived, AddressOf port_DataReceived
port.Open()
port.DtrEnable = True
port.RtsEnable = True
Catch ex As Exception
General.ErrorMessage(ex.Message)
Throw ex
End Try
Return port
End Function
Public Sub port_DataReceived(sender As Object, e As
SerialDataReceivedEventArgs)

Universitas Sumatera Utara

Try
If e.EventType = SerialData.Chars Then
receiveNow.Set()
End If
Catch ex As Exception
Throw ex
End Try
End Sub
Public Function ReadResponse(port As SerialPort, timeout As Integer)
Dim buffer As String = String.Empty
Try
Do
If receiveNow.WaitOne(timeout, False) Then
Dim t As String = port.ReadExisting()
buffer &= t
Else
If buffer.Length > 0 Then
Throw New ApplicationException("Response received is
incomplete.")
Else
Throw New ApplicationException("No data received from
phone.")
End If
End If
Loop While (Not buffer.EndsWith("\r\nOK\r\n") And Not
buffer.EndsWith("\r\n> ") And Not buffer.EndsWith("\r\nERROR\r\n"))
Catch ex As Exception
Throw ex
End Try
Return buffer
End Function
Public Function ExecCommand(port As SerialPort, command As String,
responseTimeout As Integer, errorMessage As String)
Try
port.DiscardOutBuffer()
port.DiscardInBuffer()
receiveNow.Reset()
port.Write(command & "\r")
Dim input As String = ReadResponse(port, responseTimeout)
If ((input.Length = 0) Or Not (input.EndsWith("\r\nOK\r\n") Or
input.EndsWith("\r\n> "))) Then
Throw New ApplicationException("No success message was
received.")
End If
Return input
Catch ex As Exception
Throw New ApplicationException(errorMessage, ex)
End Try
End Function
Public Function SendMessage(port As SerialPort, PhoneNo As String, Message
As String)
Dim isSend As Boolean = False
Try
General.LogActivity(Me.log_file, String.Format("Sending message"))
Dim recievedData As String = ExecCommand(port, "AT", 1000, "No
phone connected")

Universitas Sumatera Utara

recievedData = ExecCommand(port, "AT+CMGF=1", 1000, "Failed to set
message format.")
Dim command As String = "AT+CMGS=\"" + PhoneNo + " \ ""
recievedData = ExecCommand(port, command, 1000, "Failed to accept
phoneNo")
command = Message & Char.ConvertFromUtf32(26) & "\r"
recievedData = ExecCommand(port, command, 20000, "Failed to send
message")
If recievedData.EndsWith("\r\nOK\r\n") Then
isSend = True
ElseIf recievedData.Contains("ERROR") Then
isSend = False
End If
General.LogActivity(Me.log_file, String.Format("{0} {1} {2}",
PhoneNo, Message, isSend))
Return isSend
Catch ex As Exception
General.LogActivity(Me.log_file, String.Format("{0}
{3}", PhoneNo, Message, isSend, ex.Message))
Throw ex
End Try
End Function

{1}

{2}

Public Function ReadSMS(port As SerialPort, sim_storage As Boolean)
Try
General.LogActivity(Me.log_file, "Read SMS")
'Check connection
ExecCommand(port, "AT", 1000, "No phone connected")
'Use message format "Text mode"
ExecCommand(port, "AT+CMGF=1", 1000, "Failed to set message
format.")
If sim_storage Then
ExecCommand(port, "AT+CPMS=""SM""", 1000, "Failed to select
message storage")
Else
ExecCommand(port, "AT+CPMS=""ME""", 1000, "Failed to select
message storage")
End If
'Read the messages
Dim input As String = ExecCommand(port, "AT+CMGL=""REC UNREAD""",
5000, "Failed to read the messages.")
Return input
Catch ex As Exception
General.LogActivity(Me.log_file, ex.Message)
Return Nothing
End Try
End Function
Public Sub ClosePort(ByRef port As SerialPort)
Try
port.Close()
RemoveHandler port.DataReceived, AddressOf port_DataReceived
port = Nothing
Catch ex As Exception
Throw ex
End Try
End Sub
End Class

Universitas Sumatera Utara