Dalam bab ini, kita akan menerapkan konsep-konsep yang telah kita pelajari pada studi kasus nyata dan menyelesaikan berbagai masalah menggunakan algoritma dan struktur data yang sesuai. Studi kasus ini dirancang untuk membantu memahami penerapan praktis dari teori yang telah kita pelajari.
7.1 Studi Kasus 1: Sistem Pengelolaan Buku Perpustakaan
Sebuah perpustakaan ingin mengelola koleksi buku mereka secara efisien. Tugas ini melibatkan beberapa operasi dasar seperti penambahan buku baru, pencarian buku berdasarkan judul atau penulis, dan pengurutan buku berdasarkan judul atau tahun terbit.
7.1.1 Struktur Data untuk Mengelola Buku
Kita akan menggunakan array untuk menyimpan daftar buku, di mana setiap buku diwakili oleh sebuah objek yang memiliki atribut seperti judul, penulis, dan tahun terbit.
class Buku:
def __init__(self, judul, penulis, tahun):
self.judul = judul
self.penulis = penulis
self.tahun = tahun
# Contoh daftar buku
daftar_buku = [
Buku("Belajar Python", "A. Surya", 2020),
Buku("Pemrograman Dasar", "B. Purnama", 2018),
Buku("Algoritma dan Struktur Data", "C. Wijaya", 2019)
]
7.1.2 Penambahan Buku Baru
Fungsi untuk menambahkan buku baru ke dalam daftar.
def tambah_buku(daftar_buku, judul, penulis, tahun):
buku_baru = Buku(judul, penulis, tahun)
daftar_buku.append(buku_baru)
print(f"Buku '{judul}' berhasil ditambahkan.")
# Contoh penggunaan
tambah_buku(daftar_buku, "Data Science", "D. Rahman", 2021)
7.1.3 Pencarian Buku
Kita akan menggunakan pencarian linear untuk mencari buku berdasarkan judul atau penulis.
def cari_buku_berdasarkan_judul(daftar_buku, judul):
hasil = []
for buku in daftar_buku:
if buku.judul == judul:
hasil.append(buku)
return hasil
def cari_buku_berdasarkan_penulis(daftar_buku, penulis):
hasil = []
for buku in daftar_buku:
if buku.penulis == penulis:
hasil.append(buku)
return hasil
# Contoh penggunaan
hasil_pencarian = cari_buku_berdasarkan_judul(daftar_buku, "Belajar Python")
for buku in hasil_pencarian:
print(f"Ditemukan buku: {buku.judul} oleh {buku.penulis}, terbit tahun {buku.tahun}")
7.1.4 Pengurutan Buku
Kita akan menggunakan merge sort untuk mengurutkan buku berdasarkan tahun terbit.
def merge_sort_buku(daftar_buku):
if len(daftar_buku) > 1:
mid = len(daftar_buku) // 2
kiri = daftar_buku[:mid]
kanan = daftar_buku[mid:]
merge_sort_buku(kiri)
merge_sort_buku(kanan)
i = j = k = 0
while i < len(kiri) and j < len(kanan):
if kiri[i].tahun < kanan[j].tahun:
daftar_buku[k] = kiri[i]
i += 1
else:
daftar_buku[k] = kanan[j]
j += 1
k += 1
while i < len(kiri):
daftar_buku[k] = kiri[i]
i += 1
k += 1
while j < len(kanan):
daftar_buku[k] = kanan[j]
j += 1
k += 1
return daftar_buku
# Contoh penggunaan
sorted_buku = merge_sort_buku(daftar_buku)
for buku in sorted_buku:
print(f"{buku.judul} oleh {buku.penulis}, terbit tahun {buku.tahun}")
7.2 Studi Kasus 2: Sistem Antrian Rumah Sakit
Rumah sakit ingin mengelola antrian pasien secara efisien. Tugas ini melibatkan operasi dasar seperti menambahkan pasien ke antrian, memanggil pasien untuk pemeriksaan, dan menampilkan daftar pasien yang sedang menunggu.
7.2.1 Struktur Data untuk Mengelola Antrian
Kita akan menggunakan queue untuk mengelola antrian pasien.
class Pasien:
def __init__(self, nama, keluhan):
self.nama = nama
self.keluhan = keluhan
# Contoh antrian pasien
antrian_pasien = []
7.2.2 Menambahkan Pasien ke Antrian
Fungsi untuk menambahkan pasien ke antrian.
def tambah_pasien(antrian, nama, keluhan):
pasien_baru = Pasien(nama, keluhan)
antrian.append(pasien_baru)
print(f"Pasien '{nama}' berhasil ditambahkan ke antrian.")
# Contoh penggunaan
tambah_pasien(antrian_pasien, "Alice", "Demam")
tambah_pasien(antrian_pasien, "Bob", "Batuk")
7.2.3 Memanggil Pasien untuk Pemeriksaan
Fungsi untuk memanggil pasien pertama dari antrian.
def panggil_pasien(antrian):
if antrian:
pasien_dipanggil = antrian.pop(0)
print(f"Memanggil pasien: {pasien_dipanggil.nama} dengan keluhan {pasien_dipanggil.keluhan}")
else:
print("Tidak ada pasien dalam antrian.")
# Contoh penggunaan
panggil_pasien(antrian_pasien)
7.2.4 Menampilkan Daftar Pasien yang Sedang Menunggu
Fungsi untuk menampilkan daftar pasien yang sedang menunggu dalam antrian.
def tampilkan_antrian(antrian):
if antrian:
print("Daftar pasien yang sedang menunggu:")
for pasien in antrian:
print(f"{pasien.nama} dengan keluhan {pasien.keluhan}")
else:
print("Tidak ada pasien dalam antrian.")
# Contoh penggunaan
tampilkan_antrian(antrian_pasien)
7.3 Studi Kasus 3: Sistem Manajemen Inventaris Toko
Sebuah toko ingin mengelola inventaris mereka. Tugas ini melibatkan operasi seperti menambahkan barang baru, mencari barang berdasarkan nama, dan menghapus barang yang telah terjual habis.
7.3.1 Struktur Data untuk Mengelola Inventaris
Kita akan menggunakan dictionary untuk menyimpan informasi barang dalam inventaris.
inventaris = {}
class Barang:
def __init__(self, nama, jumlah, harga):
self.nama = nama
self.jumlah = jumlah
self.harga = harga
7.3.2 Menambahkan Barang Baru
Fungsi untuk menambahkan barang baru ke inventaris.
def tambah_barang(inventaris, nama, jumlah, harga):
if nama in inventaris:
inventaris[nama].jumlah += jumlah
else:
inventaris[nama] = Barang(nama, jumlah, harga)
print(f"Barang '{nama}' berhasil ditambahkan atau diperbarui.")
# Contoh penggunaan
tambah_barang(inventaris, "Pensil", 100, 2000)
tambah_barang(inventaris, "Buku", 50, 10000)
7.3.3 Mencari Barang
Fungsi untuk mencari barang berdasarkan nama.
def cari_barang(inventaris, nama):
if nama in inventaris:
barang = inventaris[nama]
print(f"Barang ditemukan: {barang.nama}, jumlah: {barang.jumlah}, harga: {barang.harga}")
else:
print(f"Barang '{nama}' tidak ditemukan dalam inventaris.")
# Contoh penggunaan
cari_barang(inventaris, "Pensil")
7.3.4 Menghapus Barang yang Terjual Habis
Fungsi untuk menghapus barang yang jumlahnya habis terjual dari inventaris.
def hapus_barang(inventaris, nama):
if nama in inventaris and inventaris[nama].jumlah == 0:
del inventaris[nama]
print(f"Barang '{nama}' berhasil dihapus dari inventaris.")
else:
print(f"Barang '{nama}' tidak ada atau masih memiliki stok.")
# Contoh penggunaan
inventaris["Pensil"].jumlah = 0
hapus_barang(inventaris, "Pensil")
Kesimpulan Bab 7
Pada bab ini, kita telah menerapkan berbagai algoritma dan struktur data untuk menyelesaikan masalah nyata melalui beberapa studi kasus. Studi kasus ini memberikan gambaran tentang bagaimana algoritma dan struktur data digunakan dalam aplikasi dunia nyata untuk memecahkan berbagai masalah dengan cara yang efisien. Dengan memahami dan menerapkan konsep-konsep ini, kita dapat mengembangkan solusi yang lebih baik dan lebih efisien untuk masalah yang kompleks.
Di bab berikutnya, kita akan mengeksplorasi lebih dalam tentang algoritma dan teknik yang lebih maju, serta bagaimana mengoptimalkan kinerja aplikasi kita.