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

(1)

(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