Membuat sistem manajemen turnamen futsal dengan Java bagian 2: Diagram kelas dan Implementasi program

Pengantar

Dalam rangkaian artikel kali ini, kita akan membuat sistem manajemen turnamen futsal dengan bahasa pemrograman Java tanpa menggunakan bantuan pustaka / library. Kita murni akan menerapkan prinsip OOP.

Saya memisahkan kedalam bagian:

Membuat diagram kelas

Berdasarkan fitur dari artikel Gambaran kasus, kita akan membuat 6 kelas dengan relasi seperti berikut:

Implementasi Program

1. Kelas orang:

import java.io.*;
import java.util.*;

public class orang implements Serializable {
	//attribut
	private String nama;
	private String nomor_hp;


	//konstruktor
	orang(String nama, String nmr)
	//urutan input->nama,jenis kelamin,nomor hp
	{
		this.nama = nama;
		nomor_hp = nmr;
	}


	//get dan set
	//nama
	public String getnama()
	{
		return nama;
	}
	public void setnama(String nama)
	{
		this.nama = nama;
	}
	//nomor hp
	public String getnmrhp()
	{
		return nomor_hp;
	}
	public void setnmr(String nmr)
	{
		nomor_hp = nmr;
	}


	//print atribut
	public void printattribut()
	{
		System.out.println("Nama          : "+nama);
		System.out.println("Nomor Hp      : "+nomor_hp);
	}
}

2. Kelas pemain:

import java.io.*;
import java.util.*;

public class pemain extends orang implements Serializable{
	//atribut
	private String nim;
	private String nmr_pemain;
	private int jum_gol;
	private int cur_kuning;
	private int jum_kuning;
	private int jum_merah;
	private int match_delay;


	//konstruktor
	pemain(String nama,String nh,String nim,String np)
	/*urutan input->nama,jenis kelamin,nomor hp,nim,nomor pemain
	 * asumsi jum gol, cur kuning,jum kuning,jum merah,match delay semuanya = 0
	   pada saat melahirkan obyek baru, makanya gak di cantumin di konstruktor*/
	{
		super(nama,nh);
		this.nim = nim;
		nmr_pemain = np;
	}


	//get dan set
	//nim
	public String getnim()
	{
		return nim;
	}
	public void setnim(String nim)
	{
		this.nim = nim;
	}
	//nomor pemain
	public String getnmrpemain()
	{
		return nmr_pemain;
	}
	public void setnmrpemain(String np)
	{
		nmr_pemain = np;
	}
	//current kuning
	public int getcurkuning()
	{
		return cur_kuning;
	}
	public void addcurkuning(int ck) {
		cur_kuning += ck;
		if (cur_kuning >= 2) {
            cur_kuning = 0;
            match_delay = 2;
		}
	}
	//jumlah gol
	public int getjumgol()
	{
		return jum_gol;
	}
	public void setjumgol(int jg)
	{
		jum_gol = jg;
	}
    public void addjumgol(int jg) {
        jum_gol += jg;
    }
	//jumlah kuning
	public int getjumkuning()
	{
		return jum_kuning;
	}
	public void setjumkuning(int jk)
	{
		jum_kuning = jk;
	}
	public void addjumkuning(int jk) {
        jum_kuning += jk;
	}
	//jumlah merah
	public int getjummerah()
	{
		return jum_merah;
	}
	public void setjummerah(int jm)
	{
		jum_merah = jm;
	}
	public void addjummerah(int jm) {
        jum_merah += jm;
	}
	//match delay
	public int getdelay()
	{
		return match_delay;
	}
	public void setdelay(int md)
	{
		match_delay = md;
	}
	public void decreasedelay(int md) {
        match_delay -= md;
        if (match_delay < 0)
            match_delay = 0;
	}

	//print atribut
	public void printattribut()
	{
		//super.printattribut();
		System.out.println("NIM                     : "+nim);
		System.out.println("Nomor Pemain            : "+nmr_pemain);
		System.out.println("Jumlah Gol              : "+jum_gol);
		System.out.println("Jumlah krt kuning skrg  : "+jum_gol);
		System.out.println("Jumlah total krt kuning : "+jum_kuning);
		System.out.println("Jumlah krt merah        : "+jum_merah);
		System.out.println("Match_delay             : "+match_delay);

	}
}

3. Kelas tim:

import java.io.*;
import java.util.*;

public class tim implements Serializable {

  // Anfang Attribute
  private String namaTim;
  private int nmrTim;
  private pemain kapten;
  private ArrayList<pemain> listPemain;
  private int jmlPemain;
  private String deskripsi;
  private int menang;
  private int kalah;
  private int seri;
  private int goal;
  private int kebobolan;
  private boolean adaKapten;

  //method
  tim(){
    listPemain = new ArrayList<pemain>();
  	jmlPemain = 0;
  	menang = 0;
  	kalah = 0;
  	seri = 0;
  	goal = 0;
  	kebobolan = 0;
  	adaKapten = false;
  }

  tim (String namaTim, String deskripsi) {
    this.namaTim = namaTim;
    this.deskripsi = deskripsi;
    listPemain = new ArrayList<pemain>();
  	jmlPemain = 0;
  	menang = 0;
  	kalah = 0;
  	seri = 0;
  	goal = 0;
  	kebobolan = 0;
    adaKapten = false;
  }

  public void setNamaTim(String namaTim) {
    this.namaTim= namaTim;
  }

  public String getNamaTim() {
    return namaTim;
  }

  public void setNmrTim(int nmrTim) {
    this.nmrTim = nmrTim;
  }

  public int getNmrTim() {
    return nmrTim;
  }

  public void setKapten(pemain kapten) {
    this.kapten = kapten;
    adaKapten = true;
  }

  public pemain getKapten() {
    return kapten;
  }

  public boolean getAdaKapten() {
    return adaKapten;
  }

  public pemain getPemain(int ind) {
    return listPemain.get(ind);
  }

  public int getJmlPemain() {
    return jmlPemain;
  }

  public String getDeskripsi() {
    return deskripsi;
  }

  public void setDeskripsi(String deskripsi) {
    this.deskripsi = deskripsi;
  }

  public void addPemainTim(pemain pemains) {
	listPemain.add(pemains);
	jmlPemain++;
  }

  public void deletePemainTim(int nomor){
    if (adaKapten) {
        if (kapten.getnama().equals(listPemain.get(nomor).getnama())) {
            adaKapten = false;
        }
    }
    listPemain.remove(nomor);
    jmlPemain--;
  }

  public void printAttribut() {
	System.out.println("Nama Tim      : "+namaTim);
  	System.out.println("Kapten        : "+kapten);
	System.out.println("Jumlah Pemain : "+jmlPemain);
  }

  public void topScoreTim() {
	int maks = 0;
	for (int i=0;i<jmlPemain;i++){ if (listPemain.get(i).getjumgol() > maks){
			maks = listPemain.get(i).getjumgol();
		}
  	}
  }

  public void refreshMatchDelay() {
	for (int i=0;i<jmlPemain;i++){
        listPemain.get(i).decreasedelay(1);
  	}
  }

  public ArrayList<pemain> cariPemainBisaMain() {
    ArrayList<pemain> tmp = new ArrayList<pemain>();
    for (int i = 0; i < jmlPemain; i++) {
        if (listPemain.get(i).getdelay() == 0)
            tmp.add(listPemain.get(i));
    }
    return tmp;
  }

  public int getTotalKMerah() {
    int total = 0;
    for (int i=0;i<jmlPemain;i++){
		total = total + listPemain.get(i).getjummerah();
  	}
  	return total;
  }

  public int getTotalKKuning() {
    int total=0;
    for (int i=0;i<jmlPemain;i++){
		total = total + listPemain.get(i).getjumkuning();
  	}
  	return total;
  }

  public int getTotalMain() {
    return menang+kalah+seri;
  }

  public int getMenang() {
    return menang;
  }

  public int getKalah() {
    return kalah;
  }

  public int getSeri() {
    return seri;
  }

  public void addMenang() {
    menang++;
  }

  public void addKalah() {
	kalah++;
  }

  public void addSeri() {
	seri++;
  }

  public void addGoal(int x) {
	goal += x;
  }

  public void addKebobolan(int x) {
	kebobolan += x;
  }

  public int getGoal() {
    return goal;
  }

  public int getKebobolan() {
    return kebobolan;
  }

  public int getSelisihGoal() {
    return (goal-kebobolan);
  }
}

4. Kelas pertandingan:

import java.io.*;
import java.util.*;

class Pertandingan implements Serializable {

    private tim tim1;
    private tim tim2;
    private String jadwal;
    private String lapangan;
    private int skor_tim1;
    private int skor_tim2;
    private boolean selesai;
    private ArrayList<pemain> list_penggolTim1;
    private ArrayList<pemain> list_penggolTim2;
    private ArrayList<pemain> list_kartuKuningTim1;
    private ArrayList<pemain> list_kartuKuningTim2;

    Pertandingan() {
        selesai = false;
        list_penggolTim1 = new ArrayList<pemain>();
        list_penggolTim2 = new ArrayList<pemain>();
        list_kartuKuningTim1 = new ArrayList<pemain>();
        list_kartuKuningTim2 = new ArrayList<pemain>();
    }

    Pertandingan(tim tim1, tim tim2, String jadwal, String lapangan) {
        this.tim1 = tim1;
        this.tim2 = tim2;
        this.jadwal = jadwal;
        this.lapangan = lapangan;
        skor_tim1 = 0;
        skor_tim2 = 0;
        selesai = false;
    }

    tim getTim1() {
        return tim1;
    }

    tim getTim2() {
        return tim2;
    }

    String getJadwal() {
        return jadwal;
    }

    String getLapangan() {
        return lapangan;
    }

    int getSkor_tim1() {
        return skor_tim1;
    }

    int getSkor_tim2() {
        return skor_tim2;
    }

    boolean getSelesai() {
        return selesai;
    }

    void setTim1(tim tim1) {
        this.tim1 = tim1;
    }

    void setTim2(tim tim2) {
        this.tim2 = tim2;
    }

    void setJadwal(String jadwal) {
        this.jadwal = jadwal;
    }

    void setLapangan(String lapangan) {
        this.lapangan = lapangan;
    }

    void setSkor_tim1(int skor_tim1) {
        this.skor_tim1 = skor_tim1;
    }

    void setSkor_tim2(int skor_tim2) {
        this.skor_tim2 = skor_tim2;
    }

    void addPenggolTim1(pemain goaler) {
        list_penggolTim1.add(goaler);
    }

    void addPenggolTim2(pemain goaler) {
        list_penggolTim2.add(goaler);
    }

    void addKartuKuningTim1(pemain goaler) {
        list_kartuKuningTim1.add(goaler);
    }

    void addKartuKuningTim2(pemain goaler) {
        list_kartuKuningTim2.add(goaler);
    }

    //return true kalau berhasil wrap-up match
    //return false kalau gagal wrap-up match karena sebelumnya sudah di-wrap-up
    boolean wrapping_up() {
        if (!selesai) {
            selesai = true;
            if (skor_tim1 > skor_tim2) {
                tim1.addMenang();
                tim2.addKalah();
            }
            else if (skor_tim1 < skor_tim2) {
                tim1.addKalah();
                tim2.addMenang();
            }
            else {
                tim1.addSeri();
                tim2.addSeri();
            }
            for (int i = 0; i < list_penggolTim1.size(); i++)
                list_penggolTim1.get(i).addjumgol(1);
            for (int i = 0; i < list_penggolTim2.size(); i++)
                list_penggolTim2.get(i).addjumgol(1);
            for (int i = 0; i < list_kartuKuningTim1.size(); i++) {
                list_kartuKuningTim1.get(i).addjumkuning(1);
                list_kartuKuningTim1.get(i).addcurkuning(1);
            }
            for (int i = 0; i < list_kartuKuningTim2.size(); i++) {
                list_kartuKuningTim2.get(i).addjumkuning(1);
                list_kartuKuningTim2.get(i).addcurkuning(1);
            }
            return true;
        }
        else return false;
    }
}

5. Kelas turnamen:

import java.io.*;
import java.util.*;

class turnamen implements Serializable {

    private String nama;
    private String deskripsi;
    private int jumlah_tim;
    private int minPemain;
    private int maxPemain;
    private int round;
    private int maxRound;
    private boolean isActive;
    private boolean registerMode;
    private tim pemenang;
    private ArrayList<tim> list_tim;
    private ArrayList<Integer> list_nmrtim;
    private ArrayList<Pertandingan> list_pertandingan;
    private ArrayList< ArrayList<Pertandingan> > list_pastPertandingan;
    private ArrayList<String> list_lapangan;

    turnamen() {
        round = 0;
        jumlah_tim = 0;
        isActive = false;
        registerMode = true;
        pemenang = new tim("belum ada pemenang", "belum ada pemenang");
        list_tim = new ArrayList<tim>();
        list_nmrtim = new ArrayList<Integer>();
        list_pertandingan = new ArrayList<Pertandingan>();
        list_pastPertandingan = new ArrayList< ArrayList<Pertandingan> >();
        list_lapangan = new ArrayList<String>();
    }

    turnamen(String nama, String deskripsi, int maxPemain, int minPemain) {
        this.nama = nama;
        this.deskripsi = deskripsi;
        this.maxPemain = maxPemain;
        this.minPemain = minPemain;
        round = 0;
        jumlah_tim = 0;
        isActive = false;
        registerMode = true;
        pemenang = new tim("belum ada pemenang", "belum ada pemenang");
        list_tim = new ArrayList<tim>();
        list_nmrtim = new ArrayList<Integer>();
        list_pertandingan = new ArrayList<Pertandingan>();
        list_pastPertandingan = new ArrayList< ArrayList<Pertandingan> >();
        list_lapangan = new ArrayList<String>();
    }

    public boolean getIsActive() {
        return isActive;
    }

    public void setIsActive(boolean a) {
        isActive = a;
    }

    public boolean getRegisterMode() {
        return registerMode;
    }

    public void setRegisterMode(boolean a) {
        registerMode = a;
    }

    public tim getPemenang() {
        return pemenang;
    }

    public void setPemenang(tim pemenang) {
        this.pemenang = pemenang;
    }

    String getNama() {
        return nama;
    }

    String getDeskripsi() {
        return deskripsi;
    }

    tim getTim(int ind) {
        return list_tim.get(ind);
    }

    int getMaxRound() {
        return maxRound;
    }

    int getRound() {
        return round;
    }

    int getJumlahTim() {
        return jumlah_tim;
    }

    int getMaxPemain() {
        return maxPemain;
    }

    int getMinPemain() {
        return minPemain;
    }

    ArrayList<tim> getListTim() {
        return list_tim;
    }

    ArrayList<Integer> getListNmrTim() {
        return list_nmrtim;
    }

    ArrayList<Pertandingan> getListPertandingan() {
        return list_pertandingan;
    }

    ArrayList< ArrayList<Pertandingan> > getListPastPertandingan() {
        return list_pastPertandingan;
    }

    ArrayList<String> list_lapangan() {
        return list_lapangan;
    }

    void setNama(String nama) {
        this.nama = nama;
    }

    void setDeskripsi(String deskripsi) {
        this.deskripsi = deskripsi;
    }

    void setJumlahTim(int jumlah_tim) {
        this.jumlah_tim = jumlah_tim;
    }

    void setRound(int round) {
        this.round = round;
    }

    void setMaxPemain(int maxPemain) {
        this.maxPemain = maxPemain;
    }

    void addTim(tim newTim) {
        list_tim.add(newTim);
        jumlah_tim++;
    }

    void addLapangan(String newLapangan) {
        list_lapangan.add(newLapangan);
    }

    void deleteLapangan(int index) {
        list_lapangan.remove(index);
    }

    void deleteTim(int index) {
        list_tim.remove(index);
        jumlah_tim--;
    }

    void shuffleTim(Random randomGenerator) {
        randomGenerator = new Random();
        int jmlh = list_nmrtim.size();
        for (int i = 0; i < (jmlh-1); i++) { int tmp = randomGenerator.nextInt(jmlh-i); int tmp2 = list_nmrtim.get(tmp).intValue(); int tmp3 = list_nmrtim.get(jmlh-i-1).intValue(); list_nmrtim.remove(tmp); list_nmrtim.add(tmp, new Integer(tmp3)); list_nmrtim.remove(jmlh-i-1); list_nmrtim.add(jmlh-i-1, new Integer(tmp2)); } } private int isPerfect(int a) { int x = 2; while (a > x)
            x *= 2;
        return (x / 2);
    }

    public void calculatePostRegistration() {
        registerMode = false;
        //Inisialisasi Seed
        for (int i = 0; i < list_tim.size(); i++) {
            list_nmrtim.add(new Integer(i));
            list_tim.get(i).setNmrTim(i);
        }

        //Menghitung maxRound
        int perfectNumber = isPerfect(list_nmrtim.size());
        if (perfectNumber == list_nmrtim.size())
            maxRound = 0;
        else
            maxRound = 1;
        while(perfectNumber != 1) {
            maxRound++;
            perfectNumber /= 2;
        }
    }

    //buat debug
    public void refereshNomorTim() {
        list_nmrtim.clear();
        for (int i = 0; i < list_tim.size(); i++) list_nmrtim.add(i); } public void buatPertandingan() { Pertandingan tmp; int perfectNumber = isPerfect(list_nmrtim.size()); if (round > 0) {
            if (perfectNumber == list_nmrtim.size()) {
                for (int i = 0; i < (list_nmrtim.size() / 2); i++) {
                    int tmplg = list_nmrtim.get(1 + i*2 - i);
                    list_nmrtim.remove(1 + i*2 - i);
                    list_nmrtim.add(new Integer(tmplg));
                }
            }
            else {//
                int x = list_nmrtim.size() - perfectNumber;
                int decideMode = (x-1) / (perfectNumber / 2);
                int earlyMatch = ((x-1) % (perfectNumber / 2)) + 1;
                if (decideMode == 0) {
                    for (int i = 0; i < earlyMatch; i++) {
                        int tmplg = list_nmrtim.get(2 + i*3 - i).intValue();
                        list_nmrtim.remove(2 + i*3 - i);
                        list_nmrtim.add(new Integer(tmplg));
                    }
                }
                else {
                    for (int i = 0; i < earlyMatch; i++) {
                        int tmplg = list_nmrtim.get(1 + i*2);
                        list_nmrtim.remove(1 + i*2);
                        list_nmrtim.add(new Integer(tmplg));
                        tmplg = list_nmrtim.get(2 + i*2);
                        list_nmrtim.remove(2 + i*2);
                        list_nmrtim.add(new Integer(tmplg));
                    }
                    for (int i = 0; i < (4 - earlyMatch); i++) {
                        int tmplg = list_nmrtim.get((2*earlyMatch-1)+(3+3*i)).intValue();
                        list_nmrtim.remove((2*earlyMatch-1)+(3+3*i));
                        list_nmrtim.add(new Integer(tmplg));
                    }
                }
            }
            int ukur = list_nmrtim.size();
            if (perfectNumber == ukur) {
                for (int i = ukur / 2; i < ukur; i++)
                    list_nmrtim.remove(ukur/2);
            }
            else {
                for (int i = perfectNumber; i < ukur; i++)
                    list_nmrtim.remove(perfectNumber);
            }
        }
        round++;
		Random randomGenerator = new Random();
		shuffleTim(randomGenerator);
        perfectNumber = isPerfect(list_nmrtim.size());
        if (perfectNumber == list_nmrtim.size()) {
            for (int i = 0; i < (list_nmrtim.size() / 2); i++) {
                tmp = new Pertandingan();
                tmp.setTim1(list_tim.get(list_nmrtim.get(i*2).intValue()));
                tmp.setTim2(list_tim.get(list_nmrtim.get(i*2+1).intValue()));
                list_pertandingan.add(tmp);
            }
        }
        else {
            int x = list_nmrtim.size() - perfectNumber;
            int decideMode = (x-1) / (perfectNumber / 2);
            int earlyMatch = ((x-1) % (perfectNumber / 2)) + 1;
            if (decideMode == 0) {
                for (int i = 0; i < earlyMatch; i++) {
                    tmp = new Pertandingan();
                    tmp.setTim1(list_tim.get(list_nmrtim.get(1 + (i*3)).intValue()));
                    tmp.setTim2(list_tim.get(list_nmrtim.get(2 + (i*3)).intValue()));
                    list_pertandingan.add(tmp);
                }
            }
            else {
                for (int i = 0; i < earlyMatch; i++) {
                    tmp = new Pertandingan();
                    tmp.setTim1(list_tim.get(list_nmrtim.get(i*4).intValue()));
                    tmp.setTim2(list_tim.get(list_nmrtim.get(i*4+1).intValue()));
                    list_pertandingan.add(tmp);
                    tmp = new Pertandingan();
                    tmp.setTim1(list_tim.get(list_nmrtim.get(i*4+2).intValue()));
                    tmp.setTim2(list_tim.get(list_nmrtim.get(i*4+3).intValue()));
                    list_pertandingan.add(tmp);
                }
                for (int i = 0; i < (4 - earlyMatch); i++) {
                    tmp = new Pertandingan();
                    tmp.setTim1(list_tim.get(list_nmrtim.get(earlyMatch*perfectNumber/2+(i*3)).intValue()));
                    tmp.setTim1(list_tim.get(list_nmrtim.get(earlyMatch*perfectNumber/2+(i*3)+1).intValue()));
                    list_pertandingan.add(tmp);
                }
            }
        }
    }
}

6. Kelas driver:

import java.io.*;
import java.util.*;
import java.lang.*;

public class driver {

    private static turnamen curTourney;
    private static ArrayList<turnamen> pastTourney;
    private static Random randomGenerator;

	//fungsi baca string
	public static String bacaString()
	{
		BufferedReader bacadata = new BufferedReader(new InputStreamReader(System.in));
		String temp = "";
		try {
			temp = bacadata.readLine();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return temp;
	}

	//fungsi untuk mem-pause command prompt
	public static void pausing() {
		BufferedReader bacadata = new BufferedReader(new InputStreamReader(System.in));
		String temp = "";
		try {
			temp = bacadata.readLine();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}


	//fungsi baca integer
	public static int bacaInteger()
	{
		return Integer.parseInt(bacaString());
	}

	//fungsi baca double
	public static double bacaDouble()
	{
		return Double.parseDouble(bacaString());
	}

	//fungsi baca float
	public static float bacaFloat()
	{
		return Float.parseFloat(bacaString());
	}

	//fungsi yang selalu dijalankan pada awal program
	public static void inisialisasi() {
        curTourney = new turnamen();
        pastTourney = new ArrayList<turnamen>();
        randomGenerator = new Random();
	}

	//fungsi yang menanyakan pertanyaan yang butuh jawaban y atau n
	public static boolean ynquestion(String question) {
        boolean ulang = true;
        String jawab;
        do {
            System.out.print(question);
            jawab = bacaString();
            if (jawab.length() > 1)
                System.out.println("Input pilihan harus y atau n");
            else if ((jawab.charAt(0) != 'y') && (jawab.charAt(0) != 'n') && (jawab.charAt(0) != 'Y') && (jawab.charAt(0) != 'N'))
                System.out.println("Input pilihan harus y atau n");
            else
                ulang = false;
        } while(ulang);
        if ((jawab.charAt(0) == 'y') || (jawab.charAt(0) == 'Y'))
            return true;
        else
            return false;
	}

	//fungsi untuk menghapus turnamen yang sedang berjalan sekarang
	public static boolean hapusTurnamen() {
        boolean jadi;
        System.out.println("=================Futsal Manajemen=================");
        System.out.println("=== Hapus Turnamen");
        System.out.println("");
        System.out.println("				>> " + curTourney.getNama() + " <<"); System.out.println(""); System.out.println("Nama Turnamen : " + curTourney.getNama()); System.out.println("Deskripsi Turnamen : " + curTourney.getDeskripsi()); System.out.println("Max Pemain/Tim : " + curTourney.getMaxPemain()); System.out.println(""); if (ynquestion("Apakah anda yakin menghapus turnamen ini (y/n)? ")) { curTourney.setIsActive(false); if (ynquestion("Apakah anda ingin menyimpan data turnamen secara permanen di Arsip Turnamen Lama? ")) pastTourney.add(curTourney); return true; } else return false; } //fungsi untuk mendaftarkan tim baru pada turnamen sekarang public static void tambahTim() { String nama; String deskripsi; System.out.println("=================Futsal Manajemen================="); System.out.println("=== Tambah Tim"); System.out.println(""); System.out.println(" >> " + curTourney.getNama() + " <<");
        System.out.println("");
        System.out.print("Nama Tim          : ");
        nama = bacaString();
        System.out.print("Deskripsi Tim     : ");
        deskripsi = bacaString();
        System.out.println("");
        System.out.println("Tim telah terdaftar!");
        tim tmp = new tim(nama, deskripsi);
        curTourney.addTim(tmp);
	}

	//fungsi pertanyaan yang membutuhkan jawaban 
	public static String ubahDataString(String question) {
        String inputan;
        System.out.print(question);
        inputan = bacaString();
        return inputan;
	}

	//fungsi untuk mengubah kapten suatu tim
	public static void ubahKaptenTim(tim timNow) {
        if (timNow.getJmlPemain() < 1) {
            System.out.println("Belum ada pemain di tim ini yang terdaftar");
            pausing();
            return;
        }
        int pil;
        boolean ulang;
        do {
            System.out.print("Pilih Kapten Tim Baru (input indeks pemain)   : ");
            try {
                pil = bacaInteger();
                ulang = false;
                if ((pil < 1) || (pil > timNow.getJmlPemain())) {
                    System.out.println("Input pilihan harus sesuai list pemain");
                    ulang = true;
                }
            } catch (NumberFormatException e) {
                System.out.println("Input pilihan harus angka");
                pil = 0;
                ulang = true;
            }
        } while(ulang);
        timNow.setKapten(timNow.getPemain(pil-1));
	}

	//fungsi untuk mendaftarkan pemain baru ke suatu tim
	public static void tambahPemain(tim timNow) {
        int pil;
        boolean ulang;
        System.out.println("=================Futsal Manajemen=================");
        System.out.println("=== Tambah Pemain");
        System.out.println("");
        System.out.println("				>> " + curTourney.getNama() + " <<"); System.out.println(""); System.out.print("Nomor Pemain : "); String nmrPemain = bacaString(); System.out.print("Nama Pemain : "); String namaPemain = bacaString(); System.out.print("NIM : "); String nimPemain = bacaString(); System.out.print("Nomor HP : "); String nmrHP = bacaString(); pemain tmp = new pemain(namaPemain, nmrHP, nimPemain, nmrPemain); timNow.addPemainTim(tmp); System.out.println(""); System.out.println("Pemain berhasil didaftarkan!"); System.out.println(""); } //fungsi untuk mengubah data pemain - part 1 public static void ubahDataPemainLagi(pemain pemainNow, int modez) { do { int pil; boolean ulang; System.out.println("=================Futsal Manajemen================="); System.out.println("=== Tambah Pemain"); System.out.println(""); System.out.println(" >> " + curTourney.getNama() + " <<"); System.out.println(""); System.out.println("Nomor Punggung : " + pemainNow.getnmrpemain()); System.out.println("Nama Pemain : " + pemainNow.getnama()); System.out.println("NIM : " + pemainNow.getnim()); System.out.println("Nomor HP : " + pemainNow.getnmrhp()); System.out.println("Goal : " + pemainNow.getjumgol()); System.out.println("Kartu Kuning : " + pemainNow.getjumkuning()); System.out.println("Kartu Merah : " + pemainNow.getjummerah()); System.out.println(""); if (modez == 1) { System.out.println("1. Ubah Nomor Punggung"); System.out.println("2. Ubah Nama pemain"); System.out.println("3. Ubah NIM"); System.out.println("4. Ubah Nomor HP"); } System.out.println("0. Kembali ke Pengaturan Tim"); System.out.println(""); System.out.println(""); do { System.out.print("Pilihan : "); try { pil = bacaInteger(); if ((pil >= 0) && (pil <= 5))
                    ulang = false;
                else {
                    System.out.println("Input pilihan harus sesuai pilihan menu");
                    ulang = true;
                }
            } catch (NumberFormatException e) {
                System.out.println("Input pilihan harus angka");
                pil = 0;
                ulang = true;
            }
        } while(ulang);
        if ((pil == 1) && (modez == 1))
            pemainNow.setnmrpemain(ubahDataString("Nomor Pemain Baru    : "));
        else if ((pil == 2) && (modez == 1))
            pemainNow.setnama(ubahDataString("Nama Pemain Baru     : "));
        else if ((pil == 3) && (modez == 1))
            pemainNow.setnim(ubahDataString("NIM Pemain Baru      : "));
        else if ((pil == 4) && (modez == 1))
            pemainNow.setnmr(ubahDataString("Nomor HP Pemain Baru : "));
        else if (pil == 0)
            return;
        } while(true);
	}

	//fungsi untuk mengubah data pemain - part 2
	public static void ubahDataPemain(tim timNow, int modez) {
        if (timNow.getJmlPemain() < 1) {
            System.out.println("Belum ada pemain di tim ini yang terdaftar");
            pausing();
            return;
        }
        int pil;
        boolean ulang;
        do {
            System.out.print("Pilih Data Pemain yang ingin diubah (input indeks pemain)   : ");
            try {
                pil = bacaInteger();
                ulang = false;
                if ((pil < 1) || (pil > timNow.getJmlPemain())) {
                    System.out.println("Input pilihan harus sesuai list pemain");
                    ulang = true;
                }
            } catch (NumberFormatException e) {
                System.out.println("Input pilihan harus angka");
                pil = 0;
                ulang = true;
            }
        } while(ulang);
        ubahDataPemainLagi(timNow.getPemain(pil-1), 1);
	}

	//fungsi untuk men-delete suatu pemain pada suatu tim
	public static void deletePemainTim(tim timNow) {
        if (timNow.getJmlPemain() < 1) {
            System.out.println("Belum ada pemain di tim ini yang terdaftar");
            pausing();
            return;
        }
        int pil;
        boolean ulang;
        do {
            System.out.print("Pilih pemain yang dihapus (input indeks pemain)   : ");
            try {
                pil = bacaInteger();
                ulang = false;
                if ((pil < 1) || (pil > timNow.getJmlPemain())) {
                    System.out.println("Input pilihan harus sesuai list pemain");
                    ulang = true;
                }
            } catch (NumberFormatException e) {
                System.out.println("Input pilihan harus angka");
                pil = 0;
                ulang = true;
            }
        } while(ulang);
        timNow.deletePemainTim(pil-1);
	}

	//fungsi yang mengeluarkan menu pengaturan tim - part 1
	public static void aturTimSpesifik(int ind) {
        do {
        int pil;
        boolean ulang;
        tim timNow = curTourney.getTim(ind-1);
        System.out.println("=================Futsal Manajemen=================");
        System.out.println("=== Pengaturan Tim");
        System.out.println("");
        System.out.println("				>> " + curTourney.getNama() + " <<");
        System.out.println("");
        System.out.println("Nama Tim        : ");
        System.out.println(timNow.getNamaTim());
        System.out.println("");
        System.out.println("Deskripsi Tim   : ");
        System.out.println(timNow.getDeskripsi());
        System.out.println("");
        System.out.println("Kapten Tim      : ");
        if (timNow.getAdaKapten()) {
            System.out.println(timNow.getKapten().getnama());
        }
        else System.out.println("Belum ada Kapten");
        System.out.println("");
        System.out.println("Jumlah Menang   : " + timNow.getMenang());
        System.out.println("Jumlah Kalah    : " + timNow.getKalah());
        System.out.println("Jumlah Seri     : " + timNow.getSeri());
        System.out.println("Jumlah Goal     : " + timNow.getGoal());
        System.out.println("Jumlah Kebobolan: " + timNow.getKebobolan());
        System.out.println("");
        System.out.println("| No. | Nama Pemain                   | NP | KK | MK |");
        System.out.println("------------------------------------------------------");
        for (int i = 0; i < timNow.getJmlPemain(); i++) {
            System.out.print("| ");
            if (i < 9)
                System.out.print("0");
            String nama = timNow.getPemain(i).getnama();
            System.out.print((i+1) + ". | " + nama);
            for (int j = 0; j < (30 - nama.length()); j++) System.out.print(" "); System.out.print("| " + timNow.getPemain(i).getnmrpemain()); System.out.print(" | " + timNow.getPemain(i).getjumkuning()); System.out.println(" | " + timNow.getPemain(i).getjummerah() + " |"); } System.out.println(""); System.out.println("1. Ubah Nama Tim"); System.out.println("2. Ubah Deskripsi Tim"); System.out.println("3. Ubah Kapten Tim"); System.out.println("4. Tambah Pemain"); System.out.println("5. Lihat Data Pemain"); System.out.println("6. Hapus Pemain"); System.out.println("0. Kembali ke Menu Tim"); System.out.println(""); System.out.println(""); do { System.out.print("Pilihan : "); try { pil = bacaInteger(); if ((pil >= 0) && (pil <= 6))
                    ulang = false;
                else {
                    System.out.println("Input pilihan harus sesuai pilihan menu");
                    ulang = true;
                }
            } catch (NumberFormatException e) {
                System.out.println("Input pilihan harus angka");
                pil = 0;
                ulang = true;
            }
        } while(ulang);
        if (pil == 1) {
            timNow.setNamaTim(ubahDataString("Nama Baru Tim         : "));
        }
        else if (pil == 2) {
            timNow.setDeskripsi(ubahDataString("Deskripsi Baru Tim    : "));
        }
        else if (pil == 3) {
            ubahKaptenTim(timNow);
        }
        else if (pil == 4) {
            tambahPemain(timNow);
        }
        else if (pil == 5) {
            ubahDataPemain(timNow, 1);
        }
        else if (pil == 6) {
            deletePemainTim(timNow);
        }
        else if (pil == 0)
            return;
        } while (true);
	}

	//fungsi yang mengeluarkan menu pengaturan tim - part 2
	public static void pengaturanTim() {
        if (curTourney.getJumlahTim() < 1) { System.out.println("Belum ada tim yang terdaftar"); pausing(); return; } int pil; boolean ulang; System.out.println("=================Futsal Manajemen================="); System.out.println("=== Pengaturan Tim"); System.out.println(""); System.out.println(" >> " + curTourney.getNama() + " <<");
        System.out.println("");
        for (int i = 0; i < curTourney.getListTim().size() ; i++)
            System.out.println((i+1) + ". " + curTourney.getListTim().get(i).getNamaTim());
        System.out.println("");
        do {
            System.out.print("Pilih tim yang ingin diatur   : ");
            try {
                pil = bacaInteger();
                ulang = false;
                if ((pil < 1) || (pil > curTourney.getListTim().size())) {
                    System.out.println("Input pilihan harus sesuai list tim");
                    ulang = true;
                }
            } catch (NumberFormatException e) {
                System.out.println("Input pilihan harus angka");
                pil = 0;
                ulang = true;
            }
        } while(ulang);
        aturTimSpesifik(pil);
	}

	public static void hapusTim() {
        if (curTourney.getJumlahTim() < 1) { System.out.println("Belum ada tim yang terdaftar"); pausing(); return; } int pil; boolean ulang; System.out.println("=================Futsal Manajemen================="); System.out.println("=== Hapus Tim"); System.out.println(""); System.out.println(" >> " + curTourney.getNama() + " <<");
        System.out.println("");
        for (int i = 0; i < curTourney.getListTim().size() ; i++)
            System.out.println((i+1) + ". " + curTourney.getListTim().get(i).getNamaTim());
        System.out.println("");
        do {
            System.out.print("Hapus Tim ke (input nomor tim)  : ");
            try {
                pil = bacaInteger();
                ulang = false;
                if ((pil < 1) || (pil > curTourney.getListTim().size())) {
                    System.out.println("Input pilihan harus sesuai list tim");
                    ulang = true;
                }
            } catch (NumberFormatException e) {
                System.out.println("Input pilihan harus angka");
                pil = 0;
                ulang = true;
            }
        } while(ulang);
        String tmp = "Apakah yakin menghapus Tim " + curTourney.getListTim().get(pil-1).getNamaTim() + " (y/n)? ";
        if (ynquestion(tmp)) {
            curTourney.deleteTim(pil-1);
            System.out.println("");
            System.out.println("Tim berhasil dihapus!");
            System.out.println("");
        }
	}

    public static void liatDetailTim() {
        if (curTourney.getJumlahTim() < 1) {
            System.out.println("Belum ada tim yang terdaftar");
            pausing();
            return;
        }
        int pil;
        boolean ulang;
        do {
            System.out.print("Pilih tim (input indeks tim)      : ");
            try {
                pil = bacaInteger();
                ulang = false;
                if ((pil < 1) || (pil > curTourney.getJumlahTim())) {
                    System.out.println("Input pilihan harus sesuai list tim");
                    ulang = true;
                }
            } catch (NumberFormatException e) {
                System.out.println("Input pilihan harus angka");
                pil = 0;
                ulang = true;
            }
        } while(ulang);
        tim timNow = curTourney.getTim(pil-1);
        do {
        System.out.println("=================Futsal Manajemen=================");
        System.out.println("=== Detail Tim");
        System.out.println("");
        System.out.println("				>> " + curTourney.getNama() + " <<");
        System.out.println("");
        System.out.println("Nama Tim        : ");
        System.out.println(timNow.getNamaTim());
        System.out.println("");
        System.out.println("Deskripsi Tim   : ");
        System.out.println(timNow.getDeskripsi());
        System.out.println("");
        System.out.println("Kapten Tim      : ");
        if (timNow.getAdaKapten()) {
            System.out.println(timNow.getKapten().getnama());
        }
        else System.out.println("Belum ada Kapten");
        System.out.println("");
        System.out.println("Jumlah Menang   : " + timNow.getMenang());
        System.out.println("Jumlah Kalah    : " + timNow.getKalah());
        System.out.println("Jumlah Seri     : " + timNow.getSeri());
        System.out.println("Jumlah Goal     : " + timNow.getGoal());
        System.out.println("Jumlah Kebobolan: " + timNow.getKebobolan());
        System.out.println("");
        System.out.println("| No. | Nama Pemain                   | NP | KK | MK |");
        System.out.println("------------------------------------------------------");
        for (int i = 0; i < timNow.getJmlPemain(); i++) {
            System.out.print("| ");
            if (i < 9)
                System.out.print("0");
            String nama = timNow.getPemain(i).getnama();
            System.out.print((i+1) + ". | " + nama);
            for (int j = 0; j < (30 - nama.length()); j++) System.out.print(" "); System.out.print("| " + timNow.getPemain(i).getnmrpemain()); System.out.print(" | " + timNow.getPemain(i).getjumkuning()); System.out.println(" | " + timNow.getPemain(i).getjummerah() + " |"); } System.out.println(""); System.out.println("1. Lihat Data Pemain"); System.out.println("0. Kembali ke Menu Tim"); do { System.out.print("Pilihan : "); try { pil = bacaInteger(); if ((pil >= 0) && (pil <= 1)) ulang = false; else { System.out.println("Input pilihan harus sesuai pilihan menu"); ulang = true; } } catch (NumberFormatException e) { System.out.println("Input pilihan harus angka"); pil = 0; ulang = true; } } while(ulang); if (pil == 1) ubahDataPemain(timNow, 0); else if (pil == 0) return; } while (true); } public static void menuTim() { int pil; boolean ulang; do { do { System.out.println("=================Futsal Manajemen================="); System.out.println("=== Menu Tim"); System.out.println(""); System.out.println(" >> " + curTourney.getNama() + " <<");
                System.out.println("");
                System.out.println("Daftar Tim");
                System.out.println("----------");
                for (int i = 0; i < curTourney.getListTim().size() ; i++)
                    System.out.println((i+1) + ". " + curTourney.getListTim().get(i).getNamaTim());
                System.out.println("");
                System.out.println("1. Liat Detail Tim");
                if (curTourney.getRegisterMode())
                    System.out.println("2. Tambah Tim");
                if (curTourney.getRegisterMode())
                    System.out.println("3. Pengaturan Tim");
                if (curTourney.getRegisterMode())
                    System.out.println("4. Hapus Tim");
                System.out.println("0. Kembali ke Menu Turnamen");
                System.out.println("");
                System.out.println("");
                System.out.print("pilihan : ");
                try {
                    pil = bacaInteger();
                    if (pil == 1 || pil == 2 || pil == 3 || pil == 4 || pil == 0) {
                        ulang = false;
                    }
                    else {
                        System.out.println("Input pilihan harus 1 atau 0");
                        ulang = true;
                    }
                } catch (NumberFormatException e) {
                    System.out.println("Input pilihan harus angka");
                    pil = 0;
                    ulang = true;
                }
            } while(ulang);
            if (pil == 1)
                liatDetailTim();
            else if (pil == 2)
                tambahTim();
            else if (pil == 3)
                pengaturanTim();
            else if (pil == 4)
                hapusTim();
            else if (pil == 0)
                return;
        } while (true);
	}

    public static String inputTanggal() {
        int tgl;
        int bulan;
        boolean ulang;
        do {
            ulang = false;
            System.out.print("Masukkan Tanggal (1-31)   : ");
            try {
                tgl = bacaInteger();
                if ((tgl < 1) || (tgl > 31))
                    System.out.println("Tanggal tidak valid");
            } catch (NumberFormatException e) {
                System.out.println("Input pilihan harus angka");
                tgl = 0;
                ulang = true;
            }
        } while(ulang);
        do {
            ulang = false;
            System.out.print("Masukkan Bulan (1-12)     : ");
            try {
                bulan = bacaInteger();
                if ((bulan < 1) || (bulan > 12))
                    System.out.println("Bulan tidak valid");
            } catch (NumberFormatException e) {
                System.out.println("Input pilihan harus angka");
                bulan = 0;
                ulang = true;
            }
        } while(ulang);
        String kembali = tgl + "-" + bulan;
        return kembali;
    }

    public static int pilihPertandingan() {
        int pil;
        boolean ulang;
        do {
            System.out.print("Pilih Pertandingan yang ingin dilaporkan (input indeks Pertandingan)   : ");
            try {
                pil = bacaInteger();
                ulang = false;
                if ((pil < 1) || (pil > curTourney.getListPertandingan().size())) {
                    System.out.println("Input pilihan harus sesuai list pertandingan");
                    ulang = true;
                }
            } catch (NumberFormatException e) {
                System.out.println("Input pilihan harus angka");
                pil = 0;
                ulang = true;
            }
        } while(ulang);
        return pil;
    }

    public static void laporPertandingan() {
        if (curTourney.getListPertandingan().size() < 1) {
            System.out.println("Tidak ada pertandingan yang perlu dilaporkan");
            pausing();
            return;
        }
        int ind = pilihPertandingan()-1;
        Pertandingan tmp = curTourney.getListPertandingan().get(ind);
        int skorTim1;
        int skorTim2;
        boolean ulang;
        do {
        do {
            ulang = false;
            System.out.print("Skor " + tmp.getTim1().getNamaTim() + " : ");
            try {
                skorTim1 = bacaInteger();
            } catch (NumberFormatException e) {
                System.out.println("Input pilihan harus angka");
                skorTim1 = 0;
                ulang = true;
            }
        } while(ulang);
        do {
            ulang = false;
            System.out.print("Skor " + tmp.getTim2().getNamaTim() + " : ");
            try {
                skorTim2 = bacaInteger();
            } catch (NumberFormatException e) {
                System.out.println("Input pilihan harus angka");
                skorTim2 = 0;
                ulang = true;
            }
        } while(ulang);
        if (skorTim1 == skorTim2) {
            ulang = true;
            System.out.println("Skor antar kedua tim tidak boleh seri");
        }
        } while(ulang);
        tmp.setSkor_tim1(skorTim1);
        tmp.setSkor_tim2(skorTim2);
        System.out.println("Daftar Pemain Tim " + tmp.getTim1().getNamaTim());
        System.out.println("| No. | Nama Pemain                   | NP | KK | MK |");
        System.out.println("------------------------------------------------------");
        for (int i = 0; i < tmp.getTim1().getJmlPemain(); i++) {
            System.out.print("| ");
            if (i < 9)
                System.out.print("0");
            String nama = tmp.getTim1().getPemain(i).getnama();
            System.out.print((i+1) + ". | " + nama);
            for (int j = 0; j < (30 - nama.length()); j++)
                System.out.print(" ");
            System.out.print("| " + tmp.getTim1().getPemain(i).getnmrpemain());
            System.out.print(" | " + tmp.getTim1().getPemain(i).getjumkuning());
            System.out.println(" | " + tmp.getTim1().getPemain(i).getjummerah() + " |");
        }
        System.out.println("");
        System.out.println("Masukkan data penggol Tim 1");
        for (int i = 0; i < skorTim1; i++) {
            int inputGoaler;
            do {
                ulang = false;
                System.out.print("Goal " + (i+1) + " : ");
                try {
                    inputGoaler = bacaInteger();
                    if ((inputGoaler < 1) || (inputGoaler > tmp.getTim1().getJmlPemain())) {
                        System.out.println("Input harus sesuai dengan list pemain");
                        ulang = true;
                    }
                } catch (NumberFormatException e) {
                    System.out.println("Input pilihan harus angka");
                    inputGoaler = 0;
                    ulang = true;
                }
            } while (ulang);
            tmp.addPenggolTim1(tmp.getTim1().getPemain(inputGoaler-1));
        }
        System.out.println("Daftar Pemain Tim " + tmp.getTim2().getNamaTim());
        System.out.println("| No. | Nama Pemain                   | NP | KK | MK |");
        System.out.println("------------------------------------------------------");
        for (int i = 0; i < tmp.getTim2().getJmlPemain(); i++) {
            System.out.print("| ");
            if (i < 9)
                System.out.print("0");
            String nama = tmp.getTim2().getPemain(i).getnama();
            System.out.print((i+1) + ". | " + nama);
            for (int j = 0; j < (30 - nama.length()); j++)
                System.out.print(" ");
            System.out.print("| " + tmp.getTim2().getPemain(i).getnmrpemain());
            System.out.print(" | " + tmp.getTim2().getPemain(i).getjumkuning());
            System.out.println(" | " + tmp.getTim2().getPemain(i).getjummerah() + " |");
        }
        System.out.println("");
        System.out.println("Masukkan data penggol Tim 2");
        for (int i = 0; i < skorTim2; i++) {
            int inputGoaler;
            do {
                ulang = false;
                System.out.print("Goal " + (i+1) + " : ");
                try {
                    inputGoaler = bacaInteger();
                    if ((inputGoaler < 1) || (inputGoaler > tmp.getTim2().getJmlPemain())) {
                        System.out.println("Input harus sesuai dengan list pemain");
                        ulang = true;
                    }
                } catch (NumberFormatException e) {
                    System.out.println("Input pilihan harus angka");
                    inputGoaler = 0;
                    ulang = true;
                }
            } while (ulang);
            tmp.addPenggolTim2(tmp.getTim2().getPemain(inputGoaler-1));
        }
        if ((curTourney.getMaxRound() - curTourney.getRound()) == 0) {
            if (skorTim1 > skorTim2)
                curTourney.setPemenang(tmp.getTim1());
            else
                curTourney.setPemenang(tmp.getTim2());
        }
        if(skorTim2 > skorTim1) {
            int ind1 = -1;
            int ind2 = -1;
            for(int i = 0; i < curTourney.getListNmrTim().size(); i++) {
                if (curTourney.getListNmrTim().get(i).intValue() == tmp.getTim1().getNmrTim())
                    ind1 = i;
                else if (curTourney.getListNmrTim().get(i).intValue() == tmp.getTim2().getNmrTim())
                    ind2 = i;
            }
            int tmp2 = curTourney.getListNmrTim().get(ind1).intValue();
            int tmp3 = curTourney.getListNmrTim().get(ind2).intValue();
            curTourney.getListNmrTim().remove(ind1);
            curTourney.getListNmrTim().add(ind1, new Integer(tmp3));
            curTourney.getListNmrTim().remove(ind2);
            curTourney.getListNmrTim().add(ind2, new Integer(tmp2));
        }
        tmp.wrapping_up();
        curTourney.getListPastPertandingan().get(curTourney.getRound()-1).add(curTourney.getListPertandingan().get(ind));
        curTourney.getListPertandingan().remove(ind);
    }

    public static void liatPast() {
        System.out.println("");
        System.out.println("---------------");
        for (int i = 1; i <= curTourney.getListPastPertandingan().size(); i++) {
            System.out.print("RONDE : ");
            if (i == curTourney.getMaxRound())
                System.out.println("FINAL");
            else if (i == (curTourney.getMaxRound()-1))
                System.out.println("SEMIFINAL");
            else
                System.out.println(curTourney.getRound());
            System.out.println("---------------");
            for (int j = 0; j < curTourney.getListPastPertandingan().get(i-1).size(); j++) { Pertandingan tmp = curTourney.getListPastPertandingan().get(i-1).get(j); System.out.print(tmp.getTim1().getNamaTim()); System.out.print(" " + tmp.getSkor_tim1() + " vs " + tmp.getSkor_tim2() + " "); System.out.println(tmp.getTim2().getNamaTim()); } } System.out.println(""); pausing(); } public static void menuPertandingan() { int pil; boolean ulang; do { do { System.out.println("=================Futsal Manajemen================="); System.out.println("=== Menu Pertandingan"); System.out.println(""); System.out.println(" >> " + curTourney.getNama() + " <<");
                System.out.println("");
                if (curTourney.getPemenang().getNamaTim().equals("belum ada pemenang")) {
                    System.out.print("RONDE : ");
                    int bedaRound = curTourney.getMaxRound() - curTourney.getRound();
                    if (bedaRound == 0)
                        System.out.println("FINAL");
                    else if (bedaRound == 1)
                        System.out.println("SEMIFINAL");
                    else
                        System.out.println(curTourney.getRound());
                    System.out.println("");
                    System.out.println("Daftar Pertandingan");
                    System.out.println("-------------------");
                    for (int i = 0; i < curTourney.getListPertandingan().size() ; i++) { Pertandingan tmp = curTourney.getListPertandingan().get(i); System.out.println((i+1) + ". " + tmp.getTim1().getNamaTim() + " vs " + tmp.getTim2().getNamaTim()); System.out.println("Jadwal Pertandingan : " + tmp.getJadwal()); System.out.println("Lapangan : " + tmp.getLapangan()); } } else System.out.println("Pemenang Turnamen : " + curTourney.getPemenang().getNamaTim()); System.out.println(""); if (curTourney.getPemenang().getNamaTim().equals("belum ada pemenang")) { System.out.println("1. Buat Pertandingan"); System.out.println("2. Ubah Jadwal Pertandingan"); System.out.println("3. Ubah Lapangan Pertandingan"); System.out.println("4. Lapor Pertandingan"); } System.out.println("5. Lihat Pertandingan Sebelumnya"); System.out.println("0. Kembali ke Menu Turnamen"); System.out.println(""); System.out.println(""); System.out.print("pilihan : "); try { pil = bacaInteger(); if ((pil >= 0) && (pil <= 5)) { ulang = false; } else { System.out.println("Input pilihan harus sesuai nomor pilihan"); ulang = true; } } catch (NumberFormatException e) { System.out.println("Input pilihan harus angka"); pil = 0; ulang = true; } } while(ulang); if (pil == 1) { if (curTourney.getListPertandingan().size() > 0) {
                    System.out.println("Pertandingan pada ronde ini belum selesai!");
                    System.out.println("");
                }
                else {
                    curTourney.buatPertandingan();
                    ArrayList<Pertandingan> waw = new ArrayList<Pertandingan>();
                    curTourney.getListPastPertandingan().add(waw);
                    System.out.println("Pertandingan berhasil dibuat!");
                    System.out.println("");
                }
            }
            else if (pil == 2) {
                Pertandingan tmp = curTourney.getListPertandingan().get(pilihPertandingan()-1);
                tmp.setJadwal(inputTanggal());
            }
            else if (pil == 3) {
                Pertandingan tmp = curTourney.getListPertandingan().get(pilihPertandingan()-1);
                tmp.setLapangan(ubahDataString("Lapangan baru : "));
            }
            else if (pil == 4) {
                laporPertandingan();
            }
            else if (pil == 5) {
                liatPast();
            }
            else if (pil == 0)
                return;
        } while (true);
	}

	public static boolean checkRegistrationValid() {
        boolean valid = true;
        if (curTourney.getJumlahTim() < 2) {
            System.out.println("Jumlah Tim harus lebih dari satu.");
            System.out.println("");
            valid = false;
        }
        ArrayList<String> timKurang = new ArrayList<String>();
        ArrayList<String> timLebih = new ArrayList<String>();
        for (int i = 0; i < curTourney.getJumlahTim(); i++) {
            if (curTourney.getTim(i).getJmlPemain() < curTourney.getMinPemain()) timKurang.add(curTourney.getTim(i).getNamaTim()); else if (curTourney.getTim(i).getJmlPemain() > curTourney.getMaxPemain())
                timLebih.add(curTourney.getTim(i).getNamaTim());
        }
        if (timKurang.size() > 0) {
            System.out.println("Berikut ini tim dengan anggota kurang dari batas minimal");
            for (int i = 0; i < timKurang.size(); i++) System.out.println((i+1) + ". " + timKurang.get(i)); System.out.println(""); valid = false; } if (timLebih.size() > 0) {
            System.out.println("Berikut ini tim dengan anggota lebih dari batas maksimal");
            for (int i = 0; i < timLebih.size(); i++)
                System.out.println((i+1) + ". " + timLebih.get(i));
            System.out.println("");
            valid = false;
        }
        if (!valid) {
            System.out.println("Karena syarat tim masih ada yang belum dipenuhi,\nTurnamen masih belum bisa dimulai.");
            pausing();
            return false;
        }
        else
            return true;
	}

	public static void lihatTopSkor() {
        int highest = 0;
        for (int i = 0; i < curTourney.getJumlahTim(); i++) {
            for (int j = 0; j < curTourney.getListTim().get(i).getJmlPemain(); j++) { if (curTourney.getListTim().get(i).getPemain(j).getjumgol() > highest)
                    highest = curTourney.getListTim().get(i).getPemain(j).getjumgol();
            }
        }
        for (int k = highest; k > 0; k--) {
            boolean exist = false;
            for (int i = 0; i < curTourney.getJumlahTim(); i++) {
                for (int j = 0; j < curTourney.getListTim().get(i).getJmlPemain(); j++) { if (curTourney.getListTim().get(i).getPemain(j).getjumgol() == k) { if (!exist) { System.out.println(k + " GOL"); System.out.println("-------"); } if (exist) { System.out.print(", "); } if (!exist) { exist = true; } System.out.print(curTourney.getListTim().get(i).getPemain(j).getnama()); System.out.print("(" + curTourney.getListTim().get(i).getNamaTim() + ")"); } } } System.out.println(""); } pausing(); } public static void menuTurnamen() { int pil; boolean ulang; do { do { System.out.println("=================Futsal Manajemen================="); System.out.println("=== Menu Turnamen"); System.out.println(""); System.out.println(" >> " + curTourney.getNama() + " <<");
                System.out.println("");
                System.out.println("Nama Turnamen       : " + curTourney.getNama());
                System.out.println("Deskripsi Turnamen  : " + curTourney.getDeskripsi());
                System.out.println("Max Pemain/Tim      : " + curTourney.getMaxPemain());
                System.out.println("Min Pemain/Tim      : " + curTourney.getMinPemain());
                if (curTourney.getRegisterMode())
                    System.out.println("Ronde               : Belum Dimulai");
                else if (curTourney.getPemenang().getNamaTim().equals("belum ada pemenang"))
                    System.out.println("Ronde               : " + curTourney.getRound());
                else
                    System.out.println("Pemenang Turnamen   : " + curTourney.getPemenang().getNamaTim());
                System.out.println("");
                System.out.println("1. Daftar Tim");
                if (curTourney.getRegisterMode())
                    System.out.println("2. Mulai Turnamen");
                else
                    System.out.println("2. Daftar Pertandingan");
                System.out.println("3. Lihat Top Skor");
                System.out.println("9. Hapus Turnamen");
                System.out.println("0. Kembali ke Menu Utama");
                System.out.println("");
                System.out.println("");
                System.out.print("pilihan : ");
                try {
                    pil = bacaInteger();
                    if (pil == 1 || pil == 2 || pil == 3 || pil == 9 || pil == 0) {
                        ulang = false;
                    }
                    else {
                        System.out.println("Input pilihan harus 1 atau 2 atau 0");
                        ulang = true;
                    }
                } catch (NumberFormatException e) {
                    System.out.println("Input pilihan harus angka");
                    pil = 0;
                    ulang = true;
                }
            } while(ulang);
            if (pil == 1) {
                menuTim();
            }
            else if (pil == 2) {
                if (curTourney.getRegisterMode())
                    if (checkRegistrationValid()) {
                        System.out.println("Registrasi valid.");
                        if (ynquestion("Apakah anda yakin mau mengakhiri registrasi (y/n)? ")) {
                            curTourney.shuffleTim(randomGenerator);
                            curTourney.calculatePostRegistration();
                        }
                    }
                    else;
                else
                    menuPertandingan();
            }
            else if (pil == 3) {
                lihatTopSkor();
            }
            else if (pil == 9) {
                if(hapusTurnamen())
                    return;
            }
            else if (pil == 0)
                return;
        } while(true);
	}

	public static void buatTurnamen() {
        String nama;
        String deskripsi;
        int maxPemain;
        int minPemain;
        boolean ulang;
        System.out.println("=================Futsal Manajemen=================");
        System.out.println("=== Buat Turnamen");
        System.out.println("");
        System.out.print("Nama Turnamen       : ");
        nama = bacaString();
        System.out.print("Deskripsi turnamen  : ");
        deskripsi = bacaString();
        do {
            ulang = false;
            System.out.print("Max Pemain/Tim      : ");
            try {
                maxPemain = bacaInteger();
                if (maxPemain < 0) {
                    System.out.println("Input bilangan tidak boleh negatif");
                    ulang = true;
                }
            } catch (NumberFormatException e) {
                System.out.println("Input pilihan harus angka");
                maxPemain = 0;
                ulang = true;
            }
        } while (ulang);
        do {
            ulang = false;
            System.out.print("Min Pemain/Tim      : ");
            try {
                minPemain = bacaInteger();
                if (minPemain < 0) { System.out.println("Input bilangan tidak boleh negatif"); ulang = true; } else if (minPemain > maxPemain) {
                    System.out.println("Minimum Pemain tidak boleh lebih dari Maksimum Pemain");
                    ulang = true;
                }
            } catch (NumberFormatException e) {
                System.out.println("Input pilihan harus angka");
                minPemain = 0;
                ulang = true;
            }
        } while (ulang);
        curTourney = new turnamen(nama, deskripsi, maxPemain, minPemain);
        curTourney.setIsActive(true);
        System.out.println("");
        System.out.println("Turnamen berhasil dibuat!");
        System.out.println("");
	}

	public static void liatTurnamenDahoeloe() {
        int pil;
        boolean ulang;
        do {
            do {
                System.out.println("=================Futsal Manajemen=================");
                System.out.println("=== Turnamen Lama");
                System.out.println("");
                for (int i = 0; i < pastTourney.size(); i++)
                    System.out.println((i+1) + ". " + pastTourney.get(i).getNama());
                System.out.println("");
                System.out.println("0. Kembali ke Menu Utama");
                System.out.println("");
                System.out.print("pilihan : ");
                try {
                    pil = bacaInteger();
                    if (pil == 0) {
                        ulang = false;
                    }
                    else {
                        System.out.println("Input pilihan harus 0");
                        ulang = true;
                    }
                } catch (NumberFormatException e) {
                    System.out.println("Input pilihan harus angka");
                    pil = 0;
                    ulang = true;
                }
            } while(ulang);
            if (pil == 0)
                return;
        } while(true);
	}

    public static void mainMenu() {
        int pil;
        boolean ulang;
        do {
            do {
                System.out.println("=================Futsal Manajemen=================");
                System.out.println("=== Menu Utama");
                System.out.println("");
                if (!curTourney.getIsActive())
                    System.out.println("Tidak ada turnamen yang berlangsung.");
                else {
                    System.out.println("Nama Turnamen       : " + curTourney.getNama());
                    System.out.println("Deskripsi Turnamen  : " + curTourney.getDeskripsi());
                    System.out.println("Max Pemain/Tim      : " + curTourney.getMaxPemain());
                    System.out.println("Min Pemain/Tim      : " + curTourney.getMinPemain());
                    if (curTourney.getRegisterMode())
                        System.out.println("Ronde               : Belum Dimulai");
                    else if (curTourney.getPemenang().getNamaTim().equals("belum ada pemenang"))
                        System.out.println("Ronde               : " + curTourney.getRound());
                    else
                        System.out.println("Pemenang Turnamen   : " + curTourney.getPemenang().getNamaTim());
                }
                System.out.println("");
                if (!curTourney.getIsActive())
                    System.out.println("1. Buat Turnamen");
                else
                    System.out.println("1. Masuk Menu Turnamen");
                System.out.println("2. Lihat Turnamen-Turnamen Lama");
                System.out.println("0. Keluar");
                System.out.println("");
                System.out.println("");
                System.out.print("pilihan : ");
                try {
                    pil = bacaInteger();
                    if (pil == 1 || pil == 2 || pil == 0) {
                        ulang = false;
                    }
                    else {
                        System.out.println("Input pilihan harus 1 atau 2 atau 0");
                        ulang = true;
                    }
                } catch (NumberFormatException e) {
                    System.out.println("Input pilihan harus angka");
                    pil = 0;
                    ulang = true;
                }
            } while(ulang);
            if (pil == 1)
                if (!curTourney.getIsActive())
                    buatTurnamen();
                else
                    menuTurnamen();
            else if (pil == 2)
                liatTurnamenDahoeloe();
            else if (pil == 0)
                return;
        } while(true);
    }

    public static void saving() {
        try {
            FileOutputStream f_out = new FileOutputStream("tournamentSave.data");
            ObjectOutputStream obj_out = new ObjectOutputStream (f_out);
            obj_out.writeObject(curTourney);
            obj_out.flush();
            obj_out.close();
            f_out = new FileOutputStream("tournamentPastSave.data");
            obj_out = new ObjectOutputStream (f_out);
            for (int i = 0; i < pastTourney.size(); i++)
                obj_out.writeObject(pastTourney.get(i));
            turnamen eofMark = new turnamen("eof", "buat mark", -981, -981);
            obj_out.writeObject(eofMark);
            obj_out.flush();
            obj_out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void loading() {
        try {
            FileInputStream f_in = new FileInputStream("tournamentSave.data");
            ObjectInputStream obj_in = new ObjectInputStream(f_in);
            curTourney = (turnamen) obj_in.readObject();
            f_in = new FileInputStream("tournamentPastSave.data");
            obj_in = new ObjectInputStream(f_in);
            turnamen tmp = (turnamen) obj_in.readObject();
            while(tmp.getMaxPemain() != -981) {
                pastTourney.add(tmp);
                tmp = (turnamen) obj_in.readObject();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static void forDebug() {
        curTourney.setRound(0);
        curTourney.refereshNomorTim();
        curTourney.getListPertandingan().clear();
    }

	//main
	public static void main(String args[])throws IOException{
        inisialisasi();
        loading();
        //forDebug();
        mainMenu();
        saving();
	}
}

Leave a comment