D4 Akuntansi Bisnis Digital

Ujian Tengah Semester
Pengantar Programming

Jawaban lengkap berbasis MATLAB — flowchart, pseudocode, source code, dan data uji untuk ketiga tugas.

Tonton Animasi Interaktif (video.html) Unduh File Video MP4 (19.4 MB)
Tugas 1 — Transaksi Penjualan · 30 poin Tugas 2 — Persediaan Barang · 35 poin Tugas 3 — Piutang Pelanggan · 35 poin
1

Program Transaksi Penjualan Digital

Menghitung subtotal, diskon, dan total pembayaran berdasarkan kategori transaksi pelanggan.

Bobot: 30 Poin

Flowchart — Tugas 1

Alur program transaksi penjualan digital

MULAI INPUT: namaPelanggan, namaBarang hargaSatuan, jumlahBarang hargaSatuan < 0 ? YA Error: Harga < 0 (tidak boleh negatif) SELESAI TIDAK jumlahBarang < 0 ? YA Error: Jumlah < 0 (tidak boleh negatif) SELESAI TIDAK subtotal = hargaSatuan × jumlahBarang Tentukan Kategori & Diskon (<500rb / <1jt / <2jt / >=2jt) nilaiDiskon = subtotal × diskon | totalBayar = subtotal - diskon OUTPUT: Struk Transaksi Lengkap SELESAI

Pseudocode — Tugas 1

Deskripsi algoritma dalam bahasa Indonesia

MULAI TAMPILKAN judul program MASUKKAN namaPelanggan, namaBarang, hargaSatuan, jumlahBarang JIKA hargaSatuan < 0 MAKA TAMPILKAN "Error: Harga satuan tidak boleh negatif!" JIKA TIDAK, JIKA jumlahBarang < 0 MAKA TAMPILKAN "Error: Jumlah barang tidak boleh negatif!" JIKA TIDAK subtotal ← hargaSatuan × jumlahBarang JIKA subtotal < 500.000 MAKA diskon ← 0% | kategori ← "Regular" JIKA TIDAK, JIKA subtotal < 1.000.000 MAKA diskon ← 5% | kategori ← "Silver" JIKA TIDAK, JIKA subtotal < 2.000.000 MAKA diskon ← 10% | kategori ← "Gold" JIKA TIDAK diskon ← 15% | kategori ← "Platinum" AKHIR JIKA nilaiDiskon ← subtotal × diskon totalPembayaran ← subtotal - nilaiDiskon TAMPILKAN struk transaksi: nama pelanggan, nama barang, harga, jumlah subtotal, persentase diskon, nilai diskon total pembayaran, kategori transaksi AKHIR JIKA SELESAI

Source Code MATLAB — tugas1.m

Program siap jalankan di MATLAB / Octave

% ================================================
% TUGAS 1 — Program Transaksi Penjualan Digital
% D4 Akuntansi Bisnis Digital
% ================================================
clc
clear

namaPelanggan = input("Nama pelanggan: ", "s");
namaBarang    = input("Nama barang: ", "s");
hargaSatuan   = input("Harga satuan: ");
jumlahBarang  = input("Jumlah barang: ");

if hargaSatuan < 0
    disp("Harga satuan tidak boleh negatif")
elseif jumlahBarang < 0
    disp("Jumlah barang tidak boleh negatif")
else

    subtotal = hargaSatuan * jumlahBarang;

    if subtotal < 500000
        diskon = 0;
        kategori = "Regular";
    elseif subtotal < 1000000
        diskon = 0.05;
        kategori = "Silver";
    elseif subtotal < 2000000
        diskon = 0.10;
        kategori = "Gold";
    else
        diskon = 0.15;
        kategori = "Platinum";
    end

    nilaidiskon     = subtotal * diskon;
    totalpembayaran = subtotal - nilaidiskon;

    disp(" ")
    disp(" ")
    disp("========================================")
    disp("       STRUK TRANSAKSI PENJUALAN")
    disp("========================================")
    disp("Pelanggan    : " + namaPelanggan)
    disp("Barang       : " + namaBarang)
    disp("Harga Satuan : Rp" + hargaSatuan)
    disp("Jumlah       : " + jumlahBarang)
    disp("----------------------------------------")
    disp("SUBTOTAL     : Rp" + subtotal)
    disp("DISKON       : " + (diskon * 100) + "%")
    disp("NILAI DISKON : Rp" + nilaidiskon)
    disp("----------------------------------------")
    disp("TOTAL BAYAR  : Rp" + totalpembayaran)
    disp("----------------------------------------")
    disp("KATEGORI     : " + kategori)
    disp("========================================")
end

Data Uji — Tugas 1

Minimal 4 transaksi, semua kategori diskon muncul

NoPelangganBarangHarga SatuanJumlahSubtotalDiskonNilai DiskonTotal BayarKategori
1AndiBuku TulisRp25.00010Rp250.0000%Rp0Rp250.000Regular
2BudiMouse WirelessRp150.0005Rp750.0005%Rp37.500Rp712.500Silver
3CitraKeyboard RGBRp500.0003Rp1.500.00010%Rp150.000Rp1.350.000Gold
4DikaMonitor LEDRp2.500.0001Rp2.500.00015%Rp375.000Rp2.125.000Platinum
2

Rekap Persediaan Barang

Memantau stok akhir setiap barang dan membuat ringkasan status seluruh persediaan toko.

Bobot: 35 Poin

Flowchart — Tugas 2

Alur program rekap persediaan barang

MULAI INPUT: jumlahJenis barang jumlahJenis <= 0 ? YA Error: Jenis <= 0 (harus lebih dari 0) SELESAI TIDAK Inisialisasi: totalStokAkhir=0, Habis=0, Restock=0, Aman=0, minStok=Inf, i=1 i <= jumlahJenis ? (WHILE Loop) TIDAK YA INPUT: namaBarang, stokAwal, masuk, terjual Nilai < 0 atau terjual > (awal+masuk)? YA Peringatan: Data tidak valid! TIDAK stokAkhir = stokAwal + masuk - terjual Tentukan Status & minStok (Habis / Segera Restock / Aman) Tampilkan stokAkhir & status barang Update totalStok & minStok | i = i + 1 OUTPUT: Ringkasan Seluruh Persediaan (Total stok, jumlah tiap status, barang min) SELESAI

Pseudocode — Tugas 2

Deskripsi algoritma dalam bahasa Indonesia

MULAI MASUKKAN jumlahJenis JIKA jumlahJenis ≤ 0 MAKA TAMPILKAN "Error: jumlah jenis harus lebih dari 0" JIKA TIDAK totalStokAkhir ← 0 | jumlahHabis ← 0 | jumlahRestock ← 0 | jumlahAman ← 0 minStok ← ∞ | minBarang ← "" i ← 1 SELAMA i ≤ jumlahJenis LAKUKAN MASUKKAN namaBarang, stokAwal, barangMasuk, barangTerjual JIKA stokAwal < 0 ATAU barangMasuk < 0 ATAU barangTerjual < 0 MAKA TAMPILKAN "Peringatan: nilai tidak boleh negatif" JIKA TIDAK, JIKA barangTerjual > (stokAwal + barangMasuk) MAKA TAMPILKAN "Peringatan: barang terjual melebihi stok (data tidak valid)" JIKA TIDAK stokAkhir ← stokAwal + barangMasuk - barangTerjual JIKA stokAkhir = 0 → status ← "Habis" | jumlahHabis ← jumlahHabis + 1 JIKA TIDAK, JIKA stokAkhir ≤ 10 → status ← "Segera Restock" | jumlahRestock ← jumlahRestock + 1 JIKA TIDAK → status ← "Aman" | jumlahAman ← jumlahAman + 1 totalStokAkhir ← totalStokAkhir + stokAkhir TAMPILKAN stokAkhir dan status barang ini JIKA stokAkhir < minStok → update minStok dan minBarang AKHIR JIKA i ← i + 1 AKHIR SELAMA TAMPILKAN ringkasan: total stok akhir seluruh barang jumlah barang tiap status (Habis, Segera Restock, Aman) nama barang dengan stok paling sedikit AKHIR JIKA SELESAI

Source Code MATLAB — tugas2.m

Program rekap persediaan barang dengan perulangan while

% ================================================
% TUGAS 2 — Rekap Persediaan Barang
% D4 Akuntansi Bisnis Digital
% ================================================
clc
clear

jumlahJenis = input("Jumlah jenis barang: ");

if jumlahJenis <= 0
    disp("Jumlah jenis barang tidak boleh nol atau negatif")
else

    totalStokAkhir = 0;
    jumlahHabis    = 0;
    jumlahRestock  = 0;
    jumlahAman     = 0;
    minStok        = Inf;
    minBarang      = "";

    i = 1;
    while i <= jumlahJenis

        disp(" ")
        disp("--- Barang ke-" + i + " ---")
        namaBarang    = input("Nama barang    : ", "s");
        stokAwal      = input("Stok awal      : ");
        barangMasuk   = input("Barang masuk   : ");
        barangTerjual = input("Barang terjual : ");

        if stokAwal < 0 || barangMasuk < 0 || barangTerjual < 0
            disp("Jumlah stok/barang tidak boleh negatif")
        elseif barangTerjual > (stokAwal + barangMasuk)
            disp("Barang terjual melebihi stok yang ada (data tidak valid)")
        else

            stokAkhir = stokAwal + barangMasuk - barangTerjual;

            if stokAkhir == 0
                status = "Habis";
                jumlahHabis = jumlahHabis + 1;
            elseif stokAkhir <= 10
                status = "Segera Restock";
                jumlahRestock = jumlahRestock + 1;
            else
                status = "Aman";
                jumlahAman = jumlahAman + 1;
            end

            totalStokAkhir = totalStokAkhir + stokAkhir;

            disp("----------------------------------------")
            disp("Barang       : " + namaBarang)
            disp("Stok Awal    : " + stokAwal)
            disp("Masuk        : " + barangMasuk)
            disp("Terjual      : " + barangTerjual)
            disp("----------------------------------------")
            disp("STOK AKHIR   : " + stokAkhir)
            disp("STATUS       : " + status)
            disp("----------------------------------------")

            if stokAkhir < minStok
                minStok   = stokAkhir;
                minBarang = namaBarang;
            end

        end

        i = i + 1;
    end

    disp(" ")
    disp("========================================")
    disp("       LAPORAN PERSEDIAAN BARANG")
    disp("========================================")
    disp("Total Stok Akhir Seluruh : " + totalStokAkhir)
    disp("Status 'Habis'           : " + jumlahHabis)
    disp("Status 'Segera Restock'  : " + jumlahRestock)
    disp("Status 'Aman'            : " + jumlahAman)
    disp("----------------------------------------")
    disp("Stok Paling Sedikit      : " + minBarang + " (" + minStok + " unit)")
    disp("========================================")

end

Data Uji — Tugas 2

5 jenis barang dengan status Habis, Segera Restock, dan Aman

NoNama BarangStok AwalBarang MasukBarang TerjualStok AkhirStatus
1Flashdisk 32GB2010300Habis
2Kabel HDMI105105Segera Restock
3Mousepad1551010Segera Restock
4Web Cam HD30101525Aman
5Headset Gaming25151030Aman

Hasil Rekapitulasi: Total = 70 · Habis = 1 · Restock = 2 · Aman = 2 · Stok Terkecil: Flashdisk 32GB (0 unit)

3

Analisis Piutang Pelanggan

Menghitung sisa piutang dan mengelompokkan status penagihan berdasarkan umur piutang.

Bobot: 35 Poin

Flowchart — Tugas 3

Alur program analisis piutang pelanggan

MULAI INPUT: jumlahPelanggan jumlahPelanggan <= 0 ? YA Error: Jumlah <= 0 (harus lebih dari 0) SELESAI TIDAK Inisialisasi: totalTagihan=0, totalBayar=0, totalSisa=0, Lunas=0, BelumLunas=0, i=1 i <= jumlahPelanggan ? (WHILE Loop) TIDAK YA INPUT: nama, tagihan, pembayaran, umurPiutang Ada nilai negatif ? YA Peringatan: Nilai tidak boleh negatif! TIDAK pembayaran >= tagihan ? YA sisaPiutang = 0 Status: Lunas | Lunas++ TIDAK sisaPiutang = tagihan - bayar | BelumLunas++ Tentukan Kategori Umur (Lancar / Perhatian / Tertunda / Prioritas) Tampilkan Sisa Piutang & Status Kategori Update totalSisa & maxSisa | i = i + 1 OUTPUT: Rekap Piutang Seluruh Pelanggan (Total tagihan, bayar, sisa, lunas, belum, prioritas) SELESAI

Pseudocode — Tugas 3

Deskripsi algoritma dalam bahasa Indonesia

MULAI MASUKKAN jumlahPelanggan JIKA jumlahPelanggan ≤ 0 MAKA TAMPILKAN "Error: jumlah pelanggan harus lebih dari 0" JIKA TIDAK totalTagihan ← 0 | totalPembayaran ← 0 | totalSisaPiutang ← 0 jumlahLunas ← 0 | jumlahBelumLunas ← 0 | totalPrioritas ← 0 maxSisa ← -1 | pelangganTerbesar ← "" i ← 1 SELAMA i ≤ jumlahPelanggan LAKUKAN MASUKKAN namaPelanggan, nilaiTagihan, pembayaran, umurPiutang JIKA nilaiTagihan < 0 ATAU pembayaran < 0 ATAU umurPiutang < 0 MAKA TAMPILKAN "Peringatan: nilai tidak boleh negatif" JIKA TIDAK totalTagihan ← totalTagihan + nilaiTagihan totalPembayaran ← totalPembayaran + pembayaran JIKA pembayaran ≥ nilaiTagihan MAKA sisaPiutang ← 0 | statusKategori ← "Lunas" | jumlahLunas ← jumlahLunas + 1 JIKA TIDAK sisaPiutang ← nilaiTagihan - pembayaran jumlahBelumLunas ← jumlahBelumLunas + 1 JIKA umurPiutang ≤ 30 → statusKategori ← "Lancar" JIKA TIDAK, JIKA umurPiutang ≤ 60 → statusKategori ← "Perhatian" JIKA TIDAK, JIKA umurPiutang ≤ 90 → statusKategori ← "Tertunda" JIKA TIDAK → statusKategori ← "Prioritas Penagihan" totalPrioritas ← totalPrioritas + sisaPiutang AKHIR JIKA AKHIR JIKA totalSisaPiutang ← totalSisaPiutang + sisaPiutang TAMPILKAN sisa piutang dan status/kategori JIKA sisaPiutang > maxSisa DAN sisaPiutang > 0 → update maxSisa dan pelangganTerbesar AKHIR JIKA i ← i + 1 AKHIR SELAMA TAMPILKAN rekapitulasi: total tagihan, total pembayaran, total sisa piutang jumlah pelanggan Lunas dan Belum Lunas pelanggan dengan sisa piutang terbesar total piutang Prioritas Penagihan AKHIR JIKA SELESAI

Source Code MATLAB — tugas3.m

Program analisis piutang pelanggan dengan perulangan while

% ================================================
% TUGAS 3 — Analisis Piutang Pelanggan
% D4 Akuntansi Bisnis Digital
% ================================================
clc
clear

jumlahPelanggan = input("Jumlah pelanggan: ");

if jumlahPelanggan <= 0
    disp("Jumlah pelanggan tidak boleh nol atau negatif")
else

    totalTagihan      = 0;
    totalPembayaran   = 0;
    totalSisaPiutang  = 0;
    jumlahLunas       = 0;
    jumlahBelumLunas  = 0;
    totalPrioritas    = 0;
    maxSisa           = -1;
    pelangganTerbesar = "";

    i = 1;
    while i <= jumlahPelanggan

        disp(" ")
        disp("--- Pelanggan ke-" + i + " ---")
        namaPelanggan = input("Nama pelanggan  : ", "s");
        nilaiTagihan  = input("Nilai tagihan   : ");
        pembayaran    = input("Pembayaran      : ");
        umurPiutang   = input("Umur piutang (hari): ");

        if nilaiTagihan < 0 || pembayaran < 0 || umurPiutang < 0
            disp("Nilai tagihan, pembayaran, dan umur piutang tidak boleh negatif")
        else

            totalTagihan    = totalTagihan + nilaiTagihan;
            totalPembayaran = totalPembayaran + pembayaran;

            if pembayaran >= nilaiTagihan
                sisaPiutang    = 0;
                statusKategori = "Lunas";
                jumlahLunas    = jumlahLunas + 1;
            else
                sisaPiutang      = nilaiTagihan - pembayaran;
                jumlahBelumLunas = jumlahBelumLunas + 1;

                if umurPiutang <= 30
                    statusKategori = "Lancar";
                elseif umurPiutang <= 60
                    statusKategori = "Perhatian";
                elseif umurPiutang <= 90
                    statusKategori = "Tertunda";
                else
                    statusKategori = "Prioritas Penagihan";
                    totalPrioritas = totalPrioritas + sisaPiutang;
                end
            end

            totalSisaPiutang = totalSisaPiutang + sisaPiutang;

            disp("----------------------------------------")
            disp("Pelanggan    : " + namaPelanggan)
            disp("Tagihan      : Rp" + nilaiTagihan)
            disp("Pembayaran   : Rp" + pembayaran)
            disp("Umur Piutang : " + umurPiutang + " hari")
            disp("----------------------------------------")
            disp("SISA PIUTANG : Rp" + sisaPiutang)
            disp("STATUS       : " + statusKategori)
            disp("----------------------------------------")

            if sisaPiutang > maxSisa
                maxSisa           = sisaPiutang;
                pelangganTerbesar = namaPelanggan;
            end

        end

        i = i + 1;
    end

    disp(" ")
    disp("========================================")
    disp("       REKAPITULASI PIUTANG USAHA")
    disp("========================================")
    disp("Total Nilai Tagihan      : Rp" + totalTagihan)
    disp("Total Pembayaran Masuk   : Rp" + totalPembayaran)
    disp("Total Sisa Piutang       : Rp" + totalSisaPiutang)
    disp("----------------------------------------")
    disp("Pelanggan Lunas          : " + jumlahLunas)
    disp("Pelanggan Belum Lunas    : " + jumlahBelumLunas)
    disp("Total Piutang Prioritas  : Rp" + totalPrioritas)
    disp("----------------------------------------")
    disp("Piutang Terbesar         : " + pelangganTerbesar + " (Rp" + maxSisa + ")")
    disp("========================================")

end

Data Uji — Tugas 3

6 pelanggan mencakup semua kategori umur piutang + Lunas

NoNama PelangganNilai TagihanPembayaranUmur (Hari)Sisa PiutangStatus / Kategori
1PT Maju JayaRp5.000.000Rp5.000.00015Rp0Lunas
2Toko BerkahRp4.000.000Rp1.000.00020Rp3.000.000Lancar
3CV SentosaRp6.000.000Rp2.000.00045Rp4.000.000Perhatian
4Digital KreasiRp3.500.000Rp500.00075Rp3.000.000Tertunda
5Bintang AbadiRp8.000.000Rp1.000.000120Rp7.000.000Prioritas Penagihan
6Surya MandiriRp2.000.000Rp0100Rp2.000.000Prioritas Penagihan

Hasil Rekapitulasi: Tagihan Rp28.500.000 · Bayar Rp9.500.000 · Sisa Rp19.000.000 · Lunas 1 · Belum 5 · Terbesar: Bintang Abadi (Rp7.000.000) · Prioritas: Rp9.000.000