Sistem Informasi Pengingat Jadwal Pengembalian Buku Di Perpustakaan Fmipa Usu Berbasis Sms Gateway
(2)
(3)
(4)
(5)
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)
(6)
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
(7)
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
(8)
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
(9)
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
(10)
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
(11)
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.
(12)
' 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
(13)
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()
(14)
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
(15)
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 = ""
(16)
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()
(17)
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,
(18)
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,
(19)
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,
(20)
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
(21)
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,
(22)
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
(23)
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
(24)
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
(25)
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
(26)
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)
(27)
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,
(28)
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)
(29)
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,
"=================================")
(30)
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())
(31)
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
(32)
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 currentDate As DateTime = DateTime.Now
Dim settingTime As Integer = General.GetSetting("lama_peminjaman")
Dim pDate As DateTime = DateTime.Parse(peminjaman.tanggal.ToString()).AddDays(1)
Dim range As Integer = (currentDate - pDate).TotalDays
General.LogActivity(smsLib.log_file,
String.Format("Code : {0}, Tanggal : {1}",
peminjaman.code, peminjaman.tanggal))
If (range - settingTime) > 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,
(33)
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 DENDA<spasi>KODE") 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)
(34)
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
(35)
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")
(36)
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} {1} {2} {3}", PhoneNo, Message, isSend, ex.Message))
Throw ex End Try
End Function
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
(37)
DAFTAR PUSTAKA
Hakim, Muhammad Lukman. 2015. Rancang Bangun Sistem Pengolahan Data Peminjaman
Dan Pengembalian Buku Perpustakaan Berbasis SMS Gateway. Skripsi Tidak
Diterbitkan
Hidayanto, Dafit Nur. 2013. Perancangan Sistem Informasi Tata Tertib Siswa Pada Smp Negeri
1 Jepara Dengan Menggunakan Sms Gateway. Seminar Riset Unggulan Nasional
Informatika dan Kompute, vol. 2, Maret 2013.
Kadir, Abdul. 2003. Pengenalan Sistem Informasi. Yogyakarta: Andi.
Kristianto, A. 2003. Perancangan Sistem Informasi & Aplikasinya. Yogyakarta: Gava Media.
Kurniawan, Erick. 2010. Cepat Mahir Visual Basic 2010. Yogyakarta: Andi.
Ladjamudin, Al-Bahra Bin. 2005. Analisis dan Desain Sistem Informasi. Yogyakarta: Graha Ilmu.
Pradana, Ryan Oki. 2013. Rancang Bangun Sistem Informasi Pengingat Jadwal Pembayaran
Angsuran Pada Kospin Jasa Cabang Pemalang Berbasis SMS Gateway. Skripsi Tidak
(38)
Rahman, Fajrul. 2012. Perancangan Dan Implementasi Sistem Informasi Kesiswaan Berbasis
SMS Gateway Pada SMK Islamiyah. Skripsi Tidak Diterbitkan.
Wahid, Fathul. 2002. Kamus Istilah Teknologi Informasi. Yogyakarta: Andi Offset.
Williams, B. K. & S. C. Sawyer. 2007. Using Information Technology: Pengenalan Praktis
Dunia Komputer dan Komunikasi. Yogyakarta: Penerbit Andi.
Zakaria, Marcus Teddy dan Josef Widiadhi. 2006. Aplikasi SMS Untuk Berbagai Keperluan. Jakarta: Informatika
(39)
BAB 3
PERANCANGAN SISTEM
3.1Perancangan Sistem
Membangun sebuah sistem pada umumnya diawali oleh perancangan dari sistem tersebut. Perancangan sistem adalah sebuah proses yang secara garis besar meliputi langkah-langkah operasi dalam proses pengolahan data dan prosedur untuk mendukung operasi sistem. Tujuan dari perancangan sistem adalah untuk memenuhi kebutuhan user (pemakai) mengenai gambaran yang jelas tentang perancangan sistem yang akan dibuat serta diimplementasikan.
Menurut Jogiyanto H. M (1991) dalam bukunya “Analisis dan Desain Sistem”, perancangan sistem dapat diartikan seperti berikut :
1. Tahap setelah analisis dari siklus pengembangan sistem. 2. Pendefinisian dari kebutuhan-kebutuhan fungsional. 3. Persiapan untuk rancang bangun implementasi. 4. Menggambarkan bagaimana suatu sistem dibentuk.
5. Yang dapat berupa pengambaran perencanaan dan pembuatan sketsa atau pengaturan dari beberapa elemen yang terpisah ke dalam satu kesatuan yang utuh dan berfungsi.
6. Termasuk menyangkut mengkonfigurasi dari komponen perangkat keras dari suatu sistem.
Secara umum perancangan sistem ini adalah untuk membuat sistem informasi yang akan mengingatkan jadwal pengembalian buku perpustakaan dari buku yang
(40)
27
dipinjam oleh anggota perpustakaan FMIPA USU. Sistem ini dirancang berbasis
SMS Gateway dengan menggunakan MySQL dan bahasa pemrograman Visual
Studio, dimana sistem ini akan membantu untuk mengingatkan para peminjam buku tentang batas waktu pengembalian buku yang dipinjamnya serta memberikan juga informasi mengenai denda yang harus dibayarkan apabila telah melampaui batas waktu peminjaman buku. Sistem ini diharapkan dapat dengan mudah digunakan oleh petugas perpustakaan sehingga akan membantu memudahkan pekerjaannya.
3.2Flowchart Program
Flowchart adalah bagan-bagan yang mempunyai arus yang menggambarkan
langkah-langkah penyelesaian suatu masalah. Flowchart merupakan cara penyajian dari suatu algoritma. (Ladjamudin, 2005). Flowchart disusun dengan simbol. Simbol ini dipakai sebagai alat bantu menggambarkan proses di dalam program. Simbol-simbol yang dipakai dibagi dalam 3 (tiga) kelompok, yaitu :
1. Flow Direction Symbol
Simbol yang digunakan untuk menghubungkan antara simbol yang satu dengan simbol yang lain dan disebut juga connecting line.
2. Processing Symbol
Simbol yang digunakan untuk menunjukkan jenis operasi pengolahan dalam suatu proses/prosedur.
3. Input-Output Symbol
Simbol ini digunakan untuk menunjukkan jenis peralatan yang digunakan sebagai media input atau output.
(41)
28
Berikut adalah alur flowchart untuk sistem yang dibangun beserta penjelasannya.
Start
Pilih Nama Port
Cek Koneksi
Menu
Input Data Buku Isi Data
Buku Database
Lihat Data Buku
List Data Buku Edit dan Hapus Data Input Data Anggota Isi Data Anggot a Database Lihat Data Anggota List Data Anggota Input Data Peminjaman Edit dan Hapus Data Isi Data Peminj aman Database Lihat Data Peminjaman List Data Peminja man Input Data Pengembalian Isi Data Penge mbalia n Database Lihat Data Pengembalian List Data Pengem balian Finish YES YES YES YES YES YES YES YES YES NO NO NO NO NO NO NO NO
Gambar 3.1 Flowchart Program
Dari bagan flowchart diatas, tampak bahwa petugas perpustakaan sebagai admin sistem dapat melakukan beberapa kegiatan. Admin dapat memulai kegiatan pada
(42)
29
sistem setelah modem berhasil dikoneksikan pada PC. Setelah berhasil terkoneksi, admin dapat melihat berbagai data, seperti data buku, anggota, peminjaman buku dan pengembalian buku. Admin juga dapat mengedit untuk merubah data ataupun menghapus beberapa data yang dirasa tidak perlu ada di sistem.
3.3Diagram Konteks Sistem
Berikut adalah diagram konteks dari sistem yang dibangun. Diagram konteks ini hanya menampilkan entitas yang terdapat dalam sistem tersebut, yakni admin, peminjam buku (user), dan sistem.
Gambar 3.2 Diagram Konteks Sistem
3.4Data Flow Diagram (DFD)
Data Flow Diagram adalah diagram yang menggunakan notasi simbol untuk
menggambarkan arus data sistem (Jogiyanto Hartono, 2005, 701). DFD sering digunakan untuk menggambarkan suatu sistem yang telah ada atau sistem yang baru yang akan dikembangkan secara logika dan menjelaskan arus data dari mulai
(43)
30
pemasukan sampai dengan keluaran data tingkatan diagram arus data mulai dari diagram konteks yang menjelaskan secara umum suatu sistem atau batasan sistem dari level 0 dikembangkan menjadi level 1 sampai sistem tergambarkan secara rinci. Berikut adalah diagram level 0 sistem yang dibangun.
Gambar 3.3 DFD Level Nol Sistem
Diagram nol diatas menggambarkan jelas bahwasanya terdapat tiga proses utama dalam aplikasi ini. Yakni input data, peminjaman dan pengembalian buku, serta lihat data-data. Ketiga proses yang saling dikaitkan ini mencakup metode CRUD (Create, Read, Update, dan Delete) dalam database.
(44)
31
3.5DFD Rinci Proses 1: Input Data
Berikut adalah diagram rinci dari proses input data oleh admin yang bersumber dari anggota dan buku-buku yang tersedia di perpustakaan. Proses input data melalui beberapa proses rincian, mulai dari pengambilan data yang valid langsung dari anggota dan berdasarkan buku-buku yang tersedia di perpustakaan, dilanjutkan dengan proses penginputan data, hingga penyimpanan data ke database.
Admin 1.1
Input Data Anggota Anggota
1.2
Input Data Buku Buku
Data Anggota Data Anggota
Data Buku
Data Buku
Gambar 3.4 DFD Rinci Proses 1: Input Data
3.6DFD Rinci Proses 2: Input Data
Diagram rinci berikut akan menjelaskan secara detail bagaimana peminjaman dan pengembalian buku yang dilakukan oleh sistem. Proses peminjaman dilakukan apabila anggota perpustakaan meminjam buku. Sedangkan proses pengembalian dilakukan apabila anggota perpustakaan yang sebelumnya meminjam buku kemudian melakukan pengembalian dari buku yang dipinjamnya di perpustakaan.
(45)
32
Anggota
Buku
2.1 Peminjaman
Admin
Peminjaman
2.2 Pengembalian
2.3 Keterlambatan
Pengembalian & Denda Data Anggota
Data Buku
Input Peminjaman
Input Pengembalian
Data Peminjaman
Data Peminjaman
Data Pengembalian
Data Pengembalian & Denda
Gambar 3.5 DFD Rinci Proses 2: Peminjaman dan Pengembalian
3.7DFD Rinci Proses 3: Lihat Data
Diagram rinci berikut merupakan diagram rinci yang menggambarkan proses akhir dari sistem ini, yaitu proses untuk melihat data-data yang ada pada sistem. Berikut diagram rinci dari proses lihat data.
(46)
33 Anggota Buku Peminjaman Pengembalian & Denda 3.1 Lihat Data Anggota 3.2 Lihat Data Buku
3.3 Lihat Data Peminjaman 3.4 Lihat Data Pengembalian & Denda Admin (Petugas Perpustakaan) Data Anggota Data Buku Data Peminjaman Lihat Data Peminjaman Data Pengembalian & Denda
Lihat Data Anggota
Lihat Data Buku
Lihat Data Pengembalian & Denda
Gambar 3.6 DFD Rinci Proses 3: Lihat Data
3.8Entity Relationship Diagram
Entity Relationship Diagram atau biasa disebut ERD merupakan suatu model
yang menjelaskan hubungan antar-data dalam basis data. Menurut Fathansyah, tahun 1995 ada 3 (tiga) macam simbol yang digunakan dalam ERD, yaitu :
1. Entitas (Entity)
Entitas merupakan individu yang mewakili sesuatu yang nyata eksistensinya dan dapat dibedakan dari sesuatu yang lain. Entitas dapat berupa objek, orang, konsep, abstrak atau kejadian.
2. Relasi (Relationship)
Adalah hubungan atau asosiasi suatu entitas dengan dirinya sendiri atau dengan entitas lainnya. Relationship digambarkan sebagai garis yang menghubungkan
(47)
34
entitas-entitas yang dipandang memiliki hubungan antara satu dengan yang lainnya.
3. Atribut (Atributte)
Atribut mendeskripsikan karakteristik dari suatu entitas. Umumnya penetapan atribut bagi sebah entitas didasarkan pada fakta yang ada.
Menurut Fathansyah, tahun 1995 ada 3 (tiga) macam relasi dalam hubungan atribut dalam satu file, yaitu :
1. Relasi Satu ke Satu (One to One Relationsip)
Hubungan antara file pertama dengan kedua adalah satu banding satu dengan relasi antar keduanya di wakilkan dengan tanda panah tunggal.
2. Relasi Satu ke Banyak (One to Many Relationsip)
Hubungan antara file pertama dengan file kedua adalah satu banding banyak atau dapat pula dibalik, banyak banding satu dengan relasi antara keduanya diwakilkan dengan tanda panah ganda untuk menunjukan hubungan banyak tersebut.
3. Relasi Many ke Many (Many to Many Relationsip)
Hubungan antara file pertama dengan file kedua adalah banyak banding banyak dengan relasi antar keduanya diwakilkan dengan tanda panah ganda untuk menunjukan hubungan banyak tersebut.
(48)
35
Berikut merupakan ERD dari sistem yang dibangun ini.
(49)
BAB 4
IMPLEMENTASI SISTEM
4.1Pengertian Implementasi Sistem
Implementasi sistem atau tahap penerapan sistem adalah kegiatan yang merupakan rangkaian lanjutan dari kegiatan perancangan sistem, implementasi ini dimaksudkan untuk mewujudkan hasil dari perancangan sistem yang sebelumnya telah disetujui. Implementasi sistem juga bertujuan untuk menciptakan sistem baru maupun mengganti sistem yang telah ada.
4.2Tujuan Implementasi Sistem
Adapun tujuan dari implementasi sistem ini adalah untuk menerapkan perancangan yang telah dilakukan terhadap sistem sehingga user dapat memberi masukan demi berkembangnya sistem yang telah dibangun. Pengguna berhak memastikan bahwa pengimplementasian sistem sesuai dengan rancangan sistem yang telah disetujui sebelumnya. Implementasi sistem ini juga bertujuan untuk memastikan sistem berjalan dengan baik, penginstalan sistem dilakukan secara baik dan benar, serta pengontrolan yang dilakukan secara berkelanjutan.
4.3Spesifikasi Perangkat Keras
Perangkat keras merupakan seluruh komponen peralatan yang membentuk suatu sistem komputer serta peralatan lainnya yang memungkinkan komputer dapat
(50)
35
melakukan tugasnya dimana perangkat keras tersebut dapat disentuh dan dilihat secara fisik. Dalam pembuatan sistem pengingat jadwal pengembalian buku ini penulis menggunakan beberapa perangkat keras yang mendukung kinerja sistem, antara lain :
1. Processor Intel® Core™ i3-3217U CPU @1.80GHz
2. Memory RAM yang digunakan 4 GB 3. Kapasitas Hardisk 500 GB
4. SIM Card GSM 5. Modem GSM
6. Handphone yang mendukung AT Command
4.4Spesifikasi Perangkat Lunak
Perangkat lunak adalah sekumpulan instruksi yang memungkinkan perangkat keras untuk dapat memproses data. Perangkat lunak ini tidak berbentuk fisik, melainkan berupa program yang diciptakan melalui perangkat elektronik. Dalam perangkat lunak dikenal dengan apa yang disebut sistem operasi dan program aplikasi. Adapun perangkat lunak yang digunakan dalam membangun sistem ini antara lain :
1. Windows 7 Ultimate 2. Database MySQL
3. XAMPP Control Panel Versi 3.2.1 5. Microsoft Framework .NET versi 4.0 6. Microsoft Visual Studio 2010
(51)
36
4.5Demonstrasi Program
Demonstrasi program akan menjelaskan secara visual bagaimana tampilan dari sistem pengingat jadwal pengembalian buku. Mulai dari tampilan awal, tampilan menu, form tambah data, edit dan hapus data, serta tampilan keluar.
4.5.1 Tampilan awal
Berikut adalah tampilan awal dari sistem pengingat jadwal pengembalian buku berupa halaman untuk melakukan koneksi ke modem. Pada fitur ini akan diperiksa apakah koneksi yang dilakukan kepada modem telah berhasil atau tidak. Apabila berhasil, maka sistem akan berlanjut kepada tampilan menu-menu yang ada.
(52)
37
Gambar 4.2 Tampilan Koneksi Telah Berhasil
4.5.2 Tampilan menu
Ketika admin berhasil melakukan koneksi ke modem, maka admin akan dibawa ke halaman berikutnya yang berisi menu. Terdapat empat menu utama pada halaman ini, yaitu Menu Buku, Menu Anggota, Menu Peminjaman dan Menu Pengembalian.
Menu Buku akan memperlihatkan keseluruhan buku-buku yang ada di perpustakaan dimana dalam menu tersebut juga diberikan fasilitas untuk menambah ataupun mengedit data buku sesuai dengan kebutuhan. Menu Anggota akan memperlihatkan seluruh anggota yang terdaftar pada sistem. Pada menu ini juga diberikan fasilitas untuk menambah maupun mengedit data-data anggota yaitu ada
pada tombol “tambah”.
Menu Peminjaman akan memperlihatkan data-data peminjaman buku mulai dari kode peminjaman, judul buku, pengarang buku, penerbit buku, nama peminjam buku, NIM peminjam buku hingga tanggal peminjaman buku. Seperti menu lainnya,
(53)
38
menu ini juga memberikan fasilitas untuk dapat mengedit data yang ada pada bagian peminjaman.
Menu Pengembalian akan memperlihatkan data-data dari buku yang sudah dikembalikan yang disimpan di database sistem. Menu ini juga memiliki tombol
“tambah” untuk dapat mengedit atau menginput data baru pada bagian pengembalian.
Setiap menu tersebut di atas, disediakan kolom untuk mencari dengan mengklik
tombol “cari” yang telah disediakan untuk dapat mencari data-data tertentu yang
diperlukan. Hal ini akan memudahkan pencarian terhadap data tertentu apabila data yang dimiliki sistem cukup banyak.
(54)
39
Gambar 4.4 Tampilan Menu Anggota
(55)
40
Gambar 4.6 Tampilan Menu Pengembalian
4.5.3 Tampilan form tambah data
Berikut adalah tampilan untuk input data pada sistem. Input data pada sistem terbagi dalam empat bagian, yaitu tambah data buku, input data anggota, input data pengembalian, dan input data peminjaman. Untuk menambah data pada setiap bagian tersebut, admin tinggal mengisi data-data yang dibutuhkan sistem sesuai dengan bagian yang dipilih admin apakah ingin menambah data buku atau lainnya. Setelah mengisi form yang disediakan sistem tersebut, admin dapat mengklik tombol
“simpan” untuk menyimpan data yang telah diisikan tadi ke database sistem atau admin dapat mengklik tombol “batal” untuk melakukan pembatalan terhadap
(56)
41
Gambar 4.7 Tampilan Form Tambah Data Buku
(57)
42
Gambar 4.9 Tampilan Form Tambah Data Peminjaman
Gambar 4.10 Tampilan Form Tambah Data Pengembalian
4.5.4 Tampilan edit dan hapus data
Tampilan edit dan hapus data adalah halaman yang memungkinkan admin untuk mengedit data apabila terjadi kesalahan atau menghapus data apabila data tak lagi
(58)
43
dibutuhkan. Halaman edit dan hapus data diperoleh ketika pengguna mengklik ganda pada data yang hendak diedit atau dihapus.
Gambar 4.11 Tampilan Edit Buku
(59)
44
4.5.5 Tampilan keluar
Tampilan keluar (exit) berada pada menu koneksi. Untuk keluar, admin hanya tinggal
mengklik tombol “disconnect” maka sistem akan berhenti beroperasi karena itu berarti
jaringan internet ke modem sudah terputus.
Gambar 4.13 Tampilan Keluar
4.6Hasil Pengujian Sistem
Pengujian sistem dilakukan dengan memberikan contoh salah satu dari anggota perpustakaan yang namanya sudah tersimpan di database sistem meminjam suatu buku. Berikut adalah ilustrasi nya.
1. Seorang mahasiswa bernama Silvia dengan nomor ponsel tertentu pada tanggal 7 Juni 2016 melakukan peminjaman buku berjudul Logika Matematika dan Ilmu Komputer dengan kode tertentu yang diberikan sistem. Batas pengembalian buku
(60)
45
adalah 10 hari dihitung dari tanggal setelah meminjam buku. Maka sms konfirmasi peminjaman bukunya sebagai berikut.
Gambar 4.14 SMS Konfirmasi
2. Pada tanggal 16 Juni 2016, yaitu H-1 sebelum batas waktu pengembalian buku, sistem akan mengirimkan sms pengingat ke nomor mahasiswa tersebut. Smsnya seperti berikut ini.
(61)
46
3. Kemudian pada tanggal 17 Juni 2016, yaitu pada hari H batas waktu pengembalian buku, maka sistem akan mengirimkan sms pengingat seperti berikut ini.
Gambar 4.16 SMS Pengingat Jadwal Pengembalian Buku Pada Hari H
4. Setelah itu, pada tanggal 18 Juni 2016, yaitu H+1 setelah batas waktu pengembalian buku berakhir maka sistem akan kembali mngirimkan sms pengingat apabila buku belum juga dikembalikan. Pada sms pengingat yang sudah melewati batas waktu pengembalian buku, maka akan diberitahukan juga besaran dendanya. Pada contoh di bawah ini, penulis memberikan contoh sms pengingat jadwal pengembalian buku H+3 dari batas pengembalian, yaitu tanggal 20 Juni 2016. Karena sudah lewat tiga hari maka denda yang harus dibayar adalah 3 x Rp 300 = Rp 900. Berikut smsnya.
(62)
47
Gambar 4.17 SMS Pengingat Jadwal Pengembalian Buku Pada Hari H+3
5. Selain sistem yang mengingatkan, anggota perpustakaan yang meminjam buku juga dapat secara langsung mengetahui besaran denda yang diperolehnya akibat terlambat mengembalikan buku. Format sms yang dipakai adalah DENDA spasi Kode Peminjaman. Berikut contohnya.
Gambar 4.18 SMS Request Denda
Apabila format sms untuk request denda tidak sesuai dengan aturannya atau kode peminjaman dari buku yang dipinjam salah, maka akan muncul sms seperti ini.
(63)
48
Gambar 4.19 SMS Request Denda dengan Kode Peminjaman yang Salah
Maka begitu seterusnya sistem akan berjalan. Tanggal yang dipakai sistem untuk menghitung batas waktu adalah berdasarkan tanggal pada PC (Personal Computer) yang dipakai. Oleh karena itu, penting untuk dilakukan pemeriksaan apakah tanggal pada PC yang digunakan sudah sesuai atau belum agar tidak terjadi kesalahan pada sistem.
6. Apabila anggota perpustakaan yang mengirimkan sms request denda ke sistem namun, format smsnya salah maka akan tampil seperti berikut ini.
(1)
SCHEDULE REMINDER OF INFORMATION SYSTEM FOR RETURNING BOOK IN FMIPA USU LIBRARY
BASED ON SMS GATEWAY
ABSTRACT
FMIPA USU library is one of the libraries in USU which inseparable from many reasonable issues that occur in other libraries. One of them is an issue about borrowing and returning books. This issue appears when the library members forgot about the schedule to return the book that have been borrowed by them. The absence of a reminder schedule system to return the books causes many library members who forgot the schedule to return the books have a risk to get a fine because the limit to return the book is over. Therefore, the reminder information system developed using AT Command and based on SMS Gateway could resolve the issue. The system will give a reminder about the schedule to return the books periodically to all library members of FMIPA USU library who borrow the books. With this, borrowing and returning books to the library can be run properly and smoothly.
(2)
(3)
DAFTAR ISI
... Halaman
Persetujuan ... i
Pernyataan ... ii
Penghargaan ... iii
Abstrak ... iv
Abstract ... v
Daftar Isi... vi
Daftar Gambar ... viii
Bab 1. Pendahuluan ... 1.1 Latar Belakang ... 1
1.2 Perumusan Masalah ... 3
1.3 Batasan Masalah... 3
1.4 Tinjauan Penelitian... 4
1.5 Manfaat Penelitian ... 5
1.6 Metodologi Penelitian ... 5
1.7 Sistematika Penulisan ... 6
Bab 2. Landasan Teori ... 2.1 Sistem ... 8
2.2 Informasi ... 8
2.3 Sistem Informasi ... 9
2.4 SMS (Short Message Service) ... 11
2.4.1 Mekanisme Kerja SMS 12
2.5 Pengenalan SMS Gateway ... 13
2.5.1 Kedudukan SMS Gateway dalam Network GS 15 2.5.2 Cara kerja SMS Gateway 16 2.5.3 Model SMS Gateway 2.6 AT Command ... 19
(4)
Bab 3. Perancangan Sistem ...
3.1 Pengertian Perancangan Sistem ... 24
3.2 Flowchart Program ... 25
3.3 Diagram Konteks Sistem ... 27
3.4 Diagram Flow Diagram... 27
3.5 Diagram Rinci Proses 1: Input Data ... 29
3.6 Diagram Rinci Proses 2: Edit dan Hapus Data ... 29
3.7 Diagram Rinci Proses 3: Lihat Data ... 30
3.8 Entity Relationship Diagram ... 31
Bab 4. Implementasi Sistem ... 4.1 Pengertian Implementasi Sistem ... 34
4.2 Tujuan Implementasi Sistem ... 34
4.3 Spesifikasi Perangkat Keras ... 34
4.4 Spesifikasi Perangkat Lunak ... 35
4.5 Demonstrasi Program 36
4.5.1 Tampilan awal 36
4.5.2 Tampilan Menu 37 4.5.3 Tampilan Form tambah data 40 4.5.4 Tampilan edit dan hapus data 42
4.5.5 Tampilan Keluar 44 4.6 Hasil pengujian sistem 44
Bab 5. Kesimpulan dan Saran ... 5.1 Kesimpulan ... 50
5.2 Saran 51 ... Daftar Pustaka
(5)
DAFTAR GAMBAR
Nomor Gambar Judul ... Halaman
2.1 Mekanisme Kerja SMS ... 12
2.2 SMS Gateway dalam Network GSM ... 15
2.3 Cara Kerja SMS Gateway ... 16
2.4 Tampilan Awal Microsoft Visual Studio 2010 ... 23
3.1 Flowchart Program ... 26
3.2 Diagram Konteks Sistem... 27
3.3 DFD Level Nol Sistem ... 28
3.4 DFD Rinci Proses 1: Input Data ... 29
3.5 DFD Rinci Proses 2: Peminjaman dan Pengembalian ... 30
3.6 DFD Rinci Proses 3: Lihat Data ... 31
3.7 ERD Sistem ... 33
4.1 Tampilan Memilih Koneksi ... 36
4.2 Tampilan Koneksi Telah Berhasil ... 37
4.3 Tampilan Menu Buku ... 38
4.4 Tampilan Menu Anggota ... 39
4.5 Tampilan Menu Peminjaman ... 39
4.6 Tampilan Menu Pengembalian ... 40
4.7 Tampilan Form Tambah Data Buku ... 41
4.8 Tampilan Form Tambah Data Anggota ... 41
4.9 Tampilan Form Tambah Data Peminjaman ... 42
4.10 Tampilan Form Tambah Data Pengembalian ... 42
4.11 Tampilan Edit Buku ... 43
4.12 Tampilan Edit Anggota ... 43
4.13 Tampilan Keluar... 44
4.14 SMS Konfirmasi ... 45
4.15 SMS Pengingat Jadwal Pengembalian H-1 ... 45
(6)
4.18 SMS Request Denda ... 47
4.19 SMS Request Denda dengan Kode Peminjaman Salah ... 48
4.20 SMS Request Denda dengan Format SMS Salah 48
4.21 SMS Request Denda Mengetahui Status Pengembalian
Buku 49
4.22 SMS Request Denda Menunjukkan Status Peminjaman