ngodingdulu

Membuat Aplikasi Kalkulator dengan VB.NET (Source Code Lengkap)

Oleh Afa HernandesDiperbarui 6 menit baca

Seri · Bagian 3 dari 3VB.NET untuk Pemula
  1. 1Contoh Desain Form VB.NET Sederhana untuk Pemula
  2. 2Cara Menggunakan Timer Otomatis di VB.NET
  3. 3Membuat Aplikasi Kalkulator dengan VB.NET (Source Code Lengkap)
Daftar isi

Kalkulator adalah project klasik untuk belajar VB.NET dan Windows Forms. Dari satu aplikasi sederhana, Anda belajar membaca input dari TextBox, menangani klik Button, memakai fungsi matematika dari class Math, dan menampilkan hasil.

Di tutorial ini kita membuat tiga versi kalkulator dengan logika perhitungan yang sama, tetapi cara memilih operasinya berbeda:

  1. Kalkulator 1: setiap operasi punya tombol sendiri (Button)
  2. Kalkulator 2: operasi dipilih dari daftar (ComboBox)
  3. Kalkulator 3: operasi dipilih dengan pilihan bulat (RadioButton)

Operasi yang didukung: tambah, kurang, kali, bagi, pangkat, mod, akar, sin, cos, tan, log, dan membandingkan dua bilangan.

Persiapan

  • Visual Studio Community (gratis) dengan workload .NET desktop development
  • Buat project baru dengan template Windows Forms App dan bahasa Visual Basic

Langkah 1: Buat modul perhitungan

Agar ketiga kalkulator tidak menulis ulang kode yang sama, logika perhitungan kita taruh di satu Module. Klik kanan project → Add → Module…, beri nama Kalkulator.vb, lalu isi:

Kalkulator.vb
Imports System.Globalization
Imports System.Linq
Imports System.Windows.Forms
Public Module Kalkulator
' Mengubah teks menjadi angka. Menerima koma maupun titik sebagai pemisah desimal.
Public Function BacaAngka(teks As String, ByRef nilai As Double) As Boolean
Return Double.TryParse(teks.Trim().Replace(",", "."), NumberStyles.Float,
CultureInfo.InvariantCulture, nilai)
End Function
' Menghitung hasil operasi. Sin/Cos/Tan/Akar/Log hanya memakai Bilangan 1.
Public Function Hitung(b1 As Double, b2 As Double, operasi As String) As String
Select Case operasi
Case "Tambah" : Return (b1 + b2).ToString()
Case "Kurang" : Return (b1 - b2).ToString()
Case "Kali" : Return (b1 * b2).ToString()
Case "Bagi"
If b2 = 0 Then Return "Tidak bisa dibagi nol"
Return (b1 / b2).ToString()
Case "Mod"
If b2 = 0 Then Return "Tidak bisa dibagi nol"
Return (b1 Mod b2).ToString()
Case "Pangkat" : Return Math.Pow(b1, b2).ToString()
Case "Akar"
If b1 < 0 Then Return "Akar bilangan negatif tidak terdefinisi"
Return Math.Sqrt(b1).ToString()
Case "Sin" : Return Math.Round(Math.Sin(b1 * Math.PI / 180), 4).ToString()
Case "Cos" : Return Math.Round(Math.Cos(b1 * Math.PI / 180), 4).ToString()
Case "Tan" : Return Math.Round(Math.Tan(b1 * Math.PI / 180), 4).ToString()
Case "Log"
If b1 <= 0 Then Return "Log hanya untuk bilangan positif"
Return Math.Round(Math.Log10(b1), 4).ToString()
Case "Compare"
If b1 > b2 Then Return "Bilangan 1 lebih besar"
If b1 < b2 Then Return "Bilangan 2 lebih besar"
Return "Kedua bilangan sama"
Case Else
Return "Operasi tidak dikenal"
End Select
End Function
' Membaca input dari form, memvalidasi, lalu menampilkan hasil. Dipakai oleh ketiga form.
Public Sub Proses(txtBil1 As TextBox, txtBil2 As TextBox, txtHasil As TextBox, operasi As String)
Dim b1, b2 As Double
If Not BacaAngka(txtBil1.Text, b1) Then
MessageBox.Show("Bilangan 1 harus berupa angka.", "Input tidak valid",
MessageBoxButtons.OK, MessageBoxIcon.Warning)
txtBil1.Focus()
Return
End If
' Sin, Cos, Tan, Akar, dan Log hanya butuh Bilangan 1
Dim cukupSatu As Boolean = {"Sin", "Cos", "Tan", "Akar", "Log"}.Contains(operasi)
If Not cukupSatu AndAlso Not BacaAngka(txtBil2.Text, b2) Then
MessageBox.Show("Bilangan 2 harus berupa angka.", "Input tidak valid",
MessageBoxButtons.OK, MessageBoxIcon.Warning)
txtBil2.Focus()
Return
End If
txtHasil.Text = Hitung(b1, b2, operasi)
End Sub
End Module

Beberapa hal penting dari modul ini:

  • Double.TryParse mengembalikan False jika teks bukan angka, sehingga aplikasi tidak crash. Fungsi lama Val() diam-diam menganggap "12abc" sebagai 12, yang bisa menghasilkan jawaban salah tanpa disadari.
  • Koma diganti titik sebelum dibaca dengan InvariantCulture. Di Windows berbahasa Indonesia, titik dianggap pemisah ribuan, sehingga "2.5" bisa terbaca sebagai 25. Dengan cara ini, pengguna boleh mengetik 2,5 maupun 2.5.
  • Sin, Cos, dan Tan di Math memakai radian, jadi derajat dikali Math.PI / 180 lebih dulu. Hasilnya dibulatkan 4 angka di belakang koma agar Sin(30) tampil 0,5, bukan 0,49999999999999994.
  • Pembagian dengan nol dicek manual. Untuk tipe Double, VB.NET tidak memunculkan error, tetapi menghasilkan Infinity atau NaN yang membingungkan pengguna.

Kalkulator 1: menggunakan Button

Aplikasi Kalkulator 1 VB.NET dengan input dua bilangan dan tombol operasi matematika

Susun form seperti gambar, lalu atur properti Name setiap komponen:

Komponen Name Keterangan
TextBox txtBil1, txtBil2 input bilangan
TextBox txtHasil hasil, atur ReadOnly = True
Button btnTambah, btnKurang, btnKali, btnBagi, btnPangkat, btnSin, btnCos, btnTan, btnAkar, btnLog, btnCompare, btnMod tombol operasi
Button btnClean, btnExit bersihkan dan keluar

Lalu isi properti Tag setiap tombol operasi dengan nama operasinya, persis seperti di Select Case: Tambah, Kurang, Kali, Bagi, Pangkat, Sin, Cos, Tan, Akar, Log, Compare, Mod. Dengan begitu, satu handler bisa melayani semua tombol:

Kalkulator1.vb
Public Class Kalkulator1
' Satu handler untuk semua tombol operasi. Nama operasi disimpan di properti Tag tiap tombol.
Private Sub Operasi_Click(sender As Object, e As EventArgs) Handles _
btnTambah.Click, btnKurang.Click, btnKali.Click, btnBagi.Click,
btnPangkat.Click, btnSin.Click, btnCos.Click, btnTan.Click,
btnAkar.Click, btnLog.Click, btnCompare.Click, btnMod.Click
Dim tombol As Button = DirectCast(sender, Button)
Proses(txtBil1, txtBil2, txtHasil, tombol.Tag.ToString())
End Sub
Private Sub btnClean_Click(sender As Object, e As EventArgs) Handles btnClean.Click
txtBil1.Clear()
txtBil2.Clear()
txtHasil.Clear()
txtBil1.Focus()
End Sub
Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
Close()
End Sub
End Class

Parameter sender berisi komponen yang memicu event, dalam hal ini tombol yang diklik. Versi lama tutorial ini memakai 12 prosedur terpisah yang isinya hampir sama. Dengan Handles yang mendaftarkan banyak tombol sekaligus, kodenya jauh lebih ringkas dan mudah dirawat.

Kalkulator 2: menggunakan ComboBox

Aplikasi Kalkulator 2 VB.NET dengan ComboBox untuk memilih proses

Komponen: txtBil1, txtBil2, txtHasil, ComboBox cboProses, serta tombol btnClean dan btnExit. Daftar operasi diisi saat form dimuat, dan perhitungan berjalan otomatis setiap kali pilihan berubah:

Kalkulator2.vb
Public Class Kalkulator2
Private Sub Kalkulator2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
cboProses.DropDownStyle = ComboBoxStyle.DropDownList ' pengguna tidak bisa mengetik bebas
cboProses.Items.AddRange(New Object() {
"Tambah", "Kurang", "Kali", "Bagi", "Pangkat", "Mod",
"Akar", "Sin", "Cos", "Tan", "Log", "Compare"})
End Sub
Private Sub cboProses_SelectedIndexChanged(sender As Object, e As EventArgs) _
Handles cboProses.SelectedIndexChanged
If cboProses.SelectedIndex >= 0 Then
Proses(txtBil1, txtBil2, txtHasil, cboProses.Text)
End If
End Sub
Private Sub btnClean_Click(sender As Object, e As EventArgs) Handles btnClean.Click
txtBil1.Clear()
txtBil2.Clear()
txtHasil.Clear()
cboProses.SelectedIndex = -1
End Sub
Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
Close()
End Sub
End Class

DropDownStyle = DropDownList memastikan pengguna hanya bisa memilih dari daftar, sehingga tidak ada operasi yang salah ketik.

Kalkulator 3: menggunakan RadioButton

Aplikasi Kalkulator 3 VB.NET dengan pilihan proses berupa RadioButton

Letakkan semua RadioButton di dalam satu GroupBox bernama grpProses, supaya hanya satu yang bisa dipilih. Beri nama rbTambah, rbKurang, dan seterusnya, lalu isi Tag masing-masing dengan nama operasinya (sama seperti tombol di Kalkulator 1).

Kalkulator3.vb
Public Class Kalkulator3
' CheckedChanged terpanggil dua kali saat pilihan berpindah (yang lama & yang baru),
' jadi hanya proses RadioButton yang sedang tercentang.
Private Sub Radio_CheckedChanged(sender As Object, e As EventArgs) Handles _
rbTambah.CheckedChanged, rbKurang.CheckedChanged, rbKali.CheckedChanged,
rbBagi.CheckedChanged, rbPangkat.CheckedChanged, rbAkar.CheckedChanged,
rbMod.CheckedChanged, rbSin.CheckedChanged, rbCos.CheckedChanged,
rbTan.CheckedChanged, rbLog.CheckedChanged, rbCompare.CheckedChanged
Dim rb As RadioButton = DirectCast(sender, RadioButton)
If rb.Checked Then
Proses(txtBil1, txtBil2, txtHasil, rb.Tag.ToString())
End If
End Sub
Private Sub btnClean_Click(sender As Object, e As EventArgs) Handles btnClean.Click
txtBil1.Clear()
txtBil2.Clear()
txtHasil.Clear()
For Each rb In grpProses.Controls.OfType(Of RadioButton)()
rb.Checked = False
Next
End Sub
Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
Close()
End Sub
End Class

Jam di pojok kanan atas Kalkulator 3 dibuat dengan komponen Timer. Caranya dibahas di Cara Menggunakan Timer Otomatis di VB.NET.

Contoh hasil perhitungan

Logika di modul Kalkulator.vb sudah kami uji dengan hasil berikut:

Input Operasi Hasil
10 dan 4 Tambah / Kurang / Kali 14 / 6 / 40
10 dan 4 Bagi / Mod / Pangkat 2,5 / 2 / 10000
5 dan 0 Bagi Tidak bisa dibagi nol
30 Sin 0,5
60 / 45 Cos / Tan 0,5 / 1
16 / −4 Akar 4 / Akar bilangan negatif tidak terdefinisi
1000 Log 3
2 dan 9 Compare Bilangan 2 lebih besar

Tanda desimal yang tampil (koma atau titik) mengikuti pengaturan bahasa Windows Anda.

Error yang sering muncul

Handles clause requires a WithEvents variable defined in the containing type. Nama komponen di Handles tidak sama dengan properti Name di form. Periksa ejaannya, misalnya btnTambah dan bukan btntambah1.

NullReferenceException di tombol.Tag.ToString(). Properti Tag salah satu tombol atau RadioButton masih kosong. Isi Tag semua komponen operasi.

Hasil menampilkan “Operasi tidak dikenal”. Isi Tag atau item ComboBox berbeda dengan teks di Select Case, misalnya tambah (huruf kecil) atau ada spasi di belakangnya.

'Closet' is not declared. Versi lama tutorial ini memuat salah ketik Closet() di tombol Exit. Yang benar adalah Close().

Pertanyaan yang sering diajukan

Apa bedanya Windows Forms App dan Windows Forms App (.NET Framework)? Keduanya bisa dipakai dan kodenya sama. Versi .NET lebih baru dan direkomendasikan untuk project baru. Versi .NET Framework cocok jika tugas atau kampus Anda mensyaratkan .NET Framework 4.x.

Bagaimana menambah operasi baru, misalnya faktorial? Tambahkan satu Case "Faktorial" di fungsi Hitung, lalu tambahkan tombol, item ComboBox, atau RadioButton dengan Tag Faktorial. Kode di ketiga form tidak perlu diubah.

Kesimpulan

Ketiga kalkulator berbagi satu modul Kalkulator.vb. Yang berbeda hanya cara memilih operasi: Button, ComboBox, atau RadioButton. Pola ini mengajarkan tiga kebiasaan baik: validasi input dengan TryParse, satu handler untuk banyak kontrol lewat sender dan Tag, serta memisahkan logika dari tampilan.

Lihat juga bagian sebelumnya di seri VB.NET untuk Pemula: Contoh Desain Form VB.NET Sederhana.

Bagikan:WhatsAppTelegramXFacebook
Membuat GUI Python dengan Qt Designer
DesktopTutorial

Membuat GUI Python dengan Qt Designer

Pada tutorial bahasa pemrograman kali ini, saya akan membagikan sebuah tutorialTutorial Cara Membuat GUI Python Menggunakan Qt Designer.

17 Maret 20211 mnt

Cara Install PyQt5 di Python
DesktopTutorial

Cara Install PyQt5 di Python

Pada tutorial bahasa pemrograman kali ini, saya akan membagikan sebuah tutorial tentang Tutorial Cara Install PyQt 5 Python di Windows Linux dan Mac Os.

16 Maret 20211 mnt

Enter bukaEsc tutupHalaman pencarian