//import class-class yang diperlukan
import java.io.File;
import java.io.FileOutputStream;
import java.util.Formatter;
import java.util.Scanner;

public class uas {

    //deklarasi scanner untuk pembacaan dari keyboard
    public static Scanner bacaInput = new Scanner(System.in);

    public static void entry(String paramKode, int paramHarga, int paramQty) {
        //deklarasi formatter
        Formatter f;
        try {
            //penghitungan jumlah
            int jumlah = paramHarga * paramQty;
            //penghitungan diskon, apabila jumlah lebih dari 100000
            //maka mendapatkan diskon sebesar 10%
            int diskon = 0;
            if (jumlah > 100000) {
                diskon = (10 * jumlah) / 100;
            }
            //penghitungan netto
            int netto = jumlah - diskon;
            //menginstantiasikan objek dengan nama f dari Formatter 
            //dengan parameter berupa instantiasi FileOutputStream
            //dengan parameter nama file, dan true (agar bisa diappend)
            //append : terus melakukan penambahan pada file text, tidak menimpa
            f = new Formatter(new FileOutputStream("data.txt", true));
            //untuk melakukan penulisan ke file, digunakan fungsi format
            //dengan parameter berupa format dan nilai yang akan dimasukkan
            //%s untuk String 
            //%d untuk integer
            //sedangkan -10 untuk menambahkan spasi setelah penulisan, begitu kira-kira
            //sehingga didapatkan format yang rapi
            f.format("%-10s %-10d %-10d %-10d %-10d %d \n", paramKode, paramHarga, paramQty, jumlah, diskon, netto);
            //penutupan aliran data formatter
            f.close();
        } catch (Exception e) {
            System.err.println("Pesan Error" + e);
        }
    }

    public static void load() {
        //deklarasi scanner
        Scanner bacaFile;
        try {
            //baca data.txt dengan menggunakan scanner
            bacaFile = new Scanner(new File("data.txt"));
            //inisialiasi total netto
            int totalNetto = 0;
            //membuat header, \t untuk tab
            System.out.print("Kode \t");
            System.out.print("Harga \t");
            System.out.print("Qty \t");
            System.out.print("Jumlah \t");
            System.out.print("Diskon \t");
            System.out.println("Netto");

            while (bacaFile.hasNext()) {
                //format pembacaan disesuaikan dengan apa yang akan dibaca
                //next untuk String
                //nextInt untuk int
                //tampilkan isi, \t untuk tab
                //pembacaan untuk kode dan tampilkan
                System.out.print(bacaFile.next() + "\t");
                //pembacaan untuk harga dan tampilkan
                System.out.print(bacaFile.nextInt() + "\t");
                //pembacaan untuk qty dan tampilkan
                System.out.print(bacaFile.nextInt() + "\t");
                //pembacaan untuk jumlah dan tampilkan
                System.out.print(bacaFile.nextInt() + "\t");
                //pembacaan untuk diskon dan tampilkan
                System.out.print(bacaFile.nextInt() + "\t");
                //untuk pembacaan terakhir (netto),
                //akan dimasukkan dulu ke dalam variabel netto
                //bertipe data int
                //ini dilakukan untuk menghitung totalNetto perbaris
                //pembacaan untuk kode dan tampilkan
                int netto = bacaFile.nextInt();
                //mengupdate nilai total netto setiap kali perulangan / perbaris
                totalNetto = totalNetto + netto;
                //tampilkan nilai netto
                System.out.println(netto);
            }
            //penutupan aliran data scanner
            bacaFile.close();
            System.out.println("======================================================");
            //menampilkan nilai totalNetto
            System.out.println("                                  Total " + totalNetto);
        } catch (Exception e) {
            System.err.println("Pesan Error" + e);
        }
    }

    public static void main(String[] args) {
        //pengulangan program selamanya
        while (true) {
            System.out.println("Menu");
            System.out.println("1. Entry");
            System.out.println("2. Load");
            System.out.println("3. Exit");
            System.out.print("Pilihan Anda : ");
            //pembacaan pilihan menu dari input keyboard
            int pilih = bacaInput.nextInt();
            switch (pilih) {
                //jika memilih 1
                case 1:
                    //perulangan sampai pengguna menginputkan S atau s
                    do {
                        System.out.println("======================================================");
                        System.out.println("Entry");
                        System.out.println("======================================================");
                        System.out.print("Kode  : ");
                        //pembacaan inputan dari keyboard, dimasukkan ke dalam
                        //variable kode bertipe String
                        String kode = bacaInput.next();
                        System.out.print("Harga : ");
                        //pembacaan inputan dari keyboard, dimasukkan ke dalam
                        //variable harga bertipe int
                        int harga = bacaInput.nextInt();
                        System.out.print("Qty   : ");
                        //pembacaan inputan dari keyboard, dimasukkan ke dalam
                        //variable qty bertipe int
                        int qty = bacaInput.nextInt();
                        //pemanggilan method entry dengan parameter
                        //kode, harga, qty
                        entry(kode, harga, qty);
                        System.out.println("======================================================");
                        System.out.print("Inputkan selain S untuk entry lagi...");
                    } while (!(bacaInput.next().equalsIgnoreCase("S")));
                    break;
                //jika memilih 2
                case 2:
                    System.out.println("======================================================");
                    System.out.println("Load");
                    System.out.println("======================================================");
                    //pemanggilan method load
                    load();
                    System.out.println("======================================================");
                    break;
                //jika memilih 3
                case 3:
                    //untuk melakukan exit
                    System.exit(0);
                    break;
                //jika memilih selain dari pilihan menu
                default:
                    System.out.println("Salah Menu");
                    break;
            }
        }
    }
}

