Untitled

 avatar
unknown
golang
5 months ago
5.0 kB
6
Indexable
package main

import (
	"fmt"
	"sort"
	"strings"
	"time"
)

// Struct untuk data pasien dan paket layanan
type PaketMCU struct {
	ID   int
	Nama string
	Harga float64
}

type Pasien struct {
	ID       int
	Nama     string
	Tanggal  time.Time
	PaketID  int
	HasilMCU string
}

var paketMCUs []PaketMCU
var pasien []Pasien
var nextPaketID, nextPasienID int = 1, 1

// Fungsi untuk menambah, mengedit, atau menghapus paket MCU
func kelolaPaketMCU() {
	fmt.Println("\n-- Kelola Paket MCU --")
	fmt.Println("1. Tambah Paket")
	fmt.Println("2. Edit Paket")
	fmt.Println("3. Hapus Paket")
	var pilihan int
	fmt.Print("Pilih menu: ")
	fmt.Scanln(&pilihan)

	switch pilihan {
	case 1: // Tambah
		var nama string
		var harga float64
		fmt.Print("Masukkan nama paket: ")
		fmt.Scanln(&nama)
		fmt.Print("Masukkan harga: ")
		fmt.Scanln(&harga)
		paketMCUs = append(paketMCUs, PaketMCU{ID: nextPaketID, Nama: nama, Harga: harga})
		nextPaketID++
		fmt.Println("Paket berhasil ditambahkan!")
	case 2: // Edit
		var id int
		fmt.Print("Masukkan ID paket yang ingin diubah: ")
		fmt.Scanln(&id)
		for i, paket := range paketMCUs {
			if paket.ID == id {
				fmt.Print("Masukkan nama baru: ")
				fmt.Scanln(&paketMCUs[i].Nama)
				fmt.Print("Masukkan harga baru: ")
				fmt.Scanln(&paketMCUs[i].Harga)
				fmt.Println("Paket berhasil diubah!")
				return
			}
		}
		fmt.Println("Paket tidak ditemukan.")
	case 3: // Hapus
		var id int
		fmt.Print("Masukkan ID paket yang ingin dihapus: ")
		fmt.Scanln(&id)
		for i, paket := range paketMCUs {
			if paket.ID == id {
				paketMCUs = append(paketMCUs[:i], paketMCUs[i+1:]...)
				fmt.Println("Paket berhasil dihapus!")
				return
			}
		}
		fmt.Println("Paket tidak ditemukan.")
	default:
		fmt.Println("Pilihan tidak valid.")
	}
}

// Fungsi untuk menambah pasien dan hasil MCU
func tambahPasien() {
	var nama string
	var tanggal string
	var paketID int
	var hasil string

	fmt.Print("Masukkan nama pasien: ")
	fmt.Scanln(&nama)
	fmt.Print("Masukkan tanggal (YYYY-MM-DD): ")
	fmt.Scanln(&tanggal)
	fmt.Print("Masukkan ID paket MCU: ")
	fmt.Scanln(&paketID)
	fmt.Print("Masukkan hasil MCU: ")
	fmt.Scanln(&hasil)

	t, err := time.Parse("2006-01-02", tanggal)
	if err != nil {
		fmt.Println("Format tanggal salah.")
		return
	}

	pasien = append(pasien, Pasien{ID: nextPasienID, Nama: nama, Tanggal: t, PaketID: paketID, HasilMCU: hasil})
	nextPasienID++
	fmt.Println("Data pasien berhasil ditambahkan!")
}

// Fungsi untuk menampilkan laporan pemasukan
func laporanPemasukan() {
	var startDate, endDate string
	fmt.Print("Masukkan tanggal awal (YYYY-MM-DD): ")
	fmt.Scanln(&startDate)
	fmt.Print("Masukkan tanggal akhir (YYYY-MM-DD): ")
	fmt.Scanln(&endDate)

	start, err1 := time.Parse("2006-01-02", startDate)
	end, err2 := time.Parse("2006-01-02", endDate)

	if err1 != nil || err2 != nil {
		fmt.Println("Format tanggal salah.")
		return
	}

	var total float64
	for _, p := range pasien {
		if p.Tanggal.After(start) && p.Tanggal.Before(end) {
			for _, paket := range paketMCUs {
				if p.PaketID == paket.ID {
					total += paket.Harga
				}
			}
		}
	}
	fmt.Printf("Total pemasukan dari %s hingga %s adalah Rp%.2f\n", startDate, endDate, total)
}

// Fungsi untuk pencarian pasien
func cariPasien() {
	fmt.Println("\n-- Cari Pasien --")
	fmt.Println("1. Berdasarkan Nama")
	fmt.Println("2. Berdasarkan Tanggal dan Paket MCU")
	var pilihan int
	fmt.Print("Pilih menu: ")
	fmt.Scanln(&pilihan)

	switch pilihan {
	case 1: // Berdasarkan Nama
		var nama string
		fmt.Print("Masukkan nama pasien: ")
		fmt.Scanln(&nama)
		for _, p := range pasien {
			if strings.Contains(strings.ToLower(p.Nama), strings.ToLower(nama)) {
				fmt.Printf("ID: %d, Nama: %s, Tanggal: %s, Paket ID: %d, Hasil: %s\n",
					p.ID, p.Nama, p.Tanggal.Format("2006-01-02"), p.PaketID, p.HasilMCU)
			}
		}
	case 2: // Berdasarkan Tanggal dan Paket MCU
		var tanggal string
		var paketID int
		fmt.Print("Masukkan tanggal (YYYY-MM-DD): ")
		fmt.Scanln(&tanggal)
		fmt.Print("Masukkan ID paket MCU: ")
		fmt.Scanln(&paketID)

		t, err := time.Parse("2006-01-02", tanggal)
		if err != nil {
			fmt.Println("Format tanggal salah.")
			return
		}

		for _, p := range pasien {
			if p.Tanggal.Equal(t) && p.PaketID == paketID {
				fmt.Printf("ID: %d, Nama: %s, Hasil: %s\n", p.ID, p.Nama, p.HasilMCU)
			}
		}
	default:
		fmt.Println("Pilihan tidak valid.")
	}
}

// Fungsi utama
func main() {
	for {
		fmt.Println("\n-- Aplikasi Medical Check-Up --")
		fmt.Println("1. Kelola Paket MCU")
		fmt.Println("2. Tambah Pasien")
		fmt.Println("3. Laporan Pemasukan")
		fmt.Println("4. Cari Pasien")
		fmt.Println("5. Keluar")
		var pilihan int
		fmt.Print("Pilih menu: ")
		fmt.Scanln(&pilihan)

		switch pilihan {
		case 1:
			kelolaPaketMCU()
		case 2:
			tambahPasien()
		case 3:
			laporanPemasukan()
		case 4:
			cariPasien()
		case 5:
			fmt.Println("Terima kasih telah menggunakan aplikasi!")
			return
		default:
			fmt.Println("Pilihan tidak valid.")
		}
	}
}
Editor is loading...
Leave a Comment