class Soal2
{

public static void main (String[] args)
{
//variables
boolean keluar=true;
String[][] mahasiswa= new String[10][11];
String[][] matkul= new String[10][2];
int rec_mhsw = 0;
int rec_mk = 0;
int pil1;
int pil2;

//looping until exit
while (keluar)
{
MenuUtama mu=new MenuUtama(); //mu=construct
MenuUtama
MenuTambah mt=new MenuTambah(); //mt=construct
MenuTambah
Pilihan2 p2=new Pilihan2(); //p2=construct Pilihan2

pil1 = mu.createMenuUtama(); //panggil method
mu.createMenuUtama

switch (pil1)
{
case 1:
//Mahasiswa

pil2 = mt.createMenuTambah(); //panggil
method mt.createMenuTambah
mahasiswa=p2.Jalankan1
(pil1,pil2,mahasiswa,rec_mhsw);//method Jalankan1

if(pil2==1)
{ rec_mhsw++; }

break;

case 2:
//Mata Kuliah

pil2 = mt.createMenuTambah(); //panggil
method mt.createMenuTambah
matkul=p2.Jalankan1
(pil1,pil2,matkul,rec_mk);//method Jalankan1

if(pil2==1)
{ rec_mk++; }
break;

case 3:
//Pendaftaran kuliah

pil2 = mt.createMenuTambah(); //panggil
method mt.createMenuTambah
mahasiswa=p2.Jalankan2
(pil2,mahasiswa,matkul,rec_mhsw,rec_mk);

break;

case 4:
keluar=false;
break;
}
}
}
}

class MenuUtama
{
/*constructor
public MenuUtama()
{
}*/

int pilihan1;

int createMenuUtama()
{
/*scan input:
1. Pendaftaran Mahasiswa
2. Data mata kuliah
3. Pendaftaran kuliah
4. Keluar */

try {
InputStreamReader rdr = new InputStreamReader
(System.in);
BufferedReader console = new BufferedReader (rdr);

System.out.println ("\nMENU UTAMA \n\nMasukkan
pilihan anda (1-4)");
System.out.println ("\n1. Pendaftaran Mahasiswa");
System.out.println ("2. Data Mata Kuliah");
System.out.println ("3. Pendaftaran Kuliah");
System.out.println ("4. Keluar");

String pil = console.readLine();
pilihan1 = Integer.parseInt(pil);

}

catch (IOException ioe) {
System.err.println ("I/O error");
System.err.println (ioe);
System.exit (1);
}

catch (NumberFormatException e) {
System.err.println ("Format error input angka");
System.err.println (e);
System.exit (1);
}

//return pilihan1
return pilihan1;

}
}

class MenuTambah
{
/*constructor
public MenuTambah()
{
}*/

int pilihan2;

int createMenuTambah()
{
/*scan input:
1. Tambah Data
2. Ubah Data
3. List Data
4. Batal */

try {
InputStreamReader rdr = new InputStreamReader
(System.in);
BufferedReader console = new BufferedReader (rdr);

System.out.println ("\nMENU TAMBAH / UBAH DATA
\n\nMasukkan pilihan anda (1-4)");
System.out.println ("\n1. Tambah Data");
System.out.println ("2. Ubah Data");
System.out.println ("3. List Data");
System.out.println ("4. Batal");

String pil = console.readLine();
pilihan2 = Integer.parseInt(pil);

}

catch (IOException ioe) {
System.err.println ("I/O error");
System.err.println (ioe);
System.exit (1);
}

catch (NumberFormatException e) {
System.err.println ("Format error input angka");
System.err.println (e);
System.exit (1);
}

//return pilihan2
return pilihan2;
}
}

class Tampilan
{
InputStreamReader rdr = new InputStreamReader (System.in);
BufferedReader console = new BufferedReader (rdr);

void Tampilan1(String judul, String jenis, String field0,
String[][] data, int rec_data)
{
int no;
System.out.println("\n"+judul+" "+jenis);
System.out.println("\nDaftar "+jenis);
System.out.println("No\t"+field0+"\t\tNama");
System.out.println
("====================================================");

for (int k = 0; k < rec_data; k++)
{
no=k+1;
System.out.println(no+"\t"+data[k][0]
+"\t\t"+data[k][1]);
}
}

void Tampilan2(String[][] mahasiswa, int id)
{
//variables
int no;
int kod;
int nam;
String
garis="====================================================";

System.out.println("NIM :" + mahasiswa[id][0]);
System.out.println("Nama :" + mahasiswa[id][1]);
int k=Integer.parseInt(mahasiswa[id][2]);
System.out.println("\nTerdaftar pada mata kuliah :");
System.out.println("No\tKode\t\tNama");
System.out.println(garis);

for (int i = 0; i < k; i++)
{
no=i+1;
kod=i+3;
nam=kod+4;
System.out.println(no+"\t"+mahasiswa[id][kod]
+"\t\t"+mahasiswa[id][nam]);
}
System.out.println(garis);

}

String Input1(String judul)
{
String isian="";

try {
System.out.print(judul);
isian= console.readLine();
}
catch (IOException ioe) {
System.err.println ("I/O error");
System.err.println (ioe);
System.exit (1);
}

catch (NumberFormatException e) {
System.err.println ("Format error input angka");
System.err.println (e);
System.exit (1);
}

return isian;
}

}

class Pilihan2
{
/*constructor
public Pilihan2()
{
}*/

String[][] Jalankan1(int pilihan1, int pilihan2, String[][]
data, int rec_data)
{
Tampilan tp=new Tampilan(); //tp=construct Tampilan

//variables
String jenis;
String field0;
if(pilihan1==1)
{
jenis="mahasiswa";
field0="NIM ";
}
else
{
jenis="mata kuliah";
field0="Kode ";
}
int no;
int k;
String isi;

switch (pilihan2)
{
case 1:
//tambah data

if(rec_data<10)
{
System.out.println
("\nMenambah Data " + jenis);
data[rec_data][0]= tp.Input1
("\nMasukkan "+field0+jenis+" :");
data[rec_data][1]= tp.Input1
("\nMasukkan Nama "+jenis+" :");
if(pilihan1==1) {
data[rec_data][2]="0"; }
rec_data++;
}
else
{
System.out.println("Maaf.
Jumlah " + jenis
+ " sudah maksimal.");
}
break;

case 2:
//ubah data

tp.Tampilan1("Mengubah
Data",jenis,field0,data,rec_data);

isi=tp.Input1("\nMasukkan no
urut "+jenis+" :");
no=Integer.parseInt(isi);
no=no-1;
data[no][0]= tp.Input1
("\nMasukkan "+field0+jenis+" :");
data[no][1]= tp.Input1("\nMasukkan
Nama "+jenis+" :");
break;

case 3:
//list data

tp.Tampilan1("Melihat
Data",jenis,field0,data,rec_data);
break;

case 4:
break;
}
return data;
}

String[][] Jalankan2(int pilihan2, String[][] mahasiswa,
String[][] matkul, int rec_mhsw, int rec_mk)
{
Tampilan tp=new Tampilan(); //tp=construct Tampilan
DecimalFormat fmt=new DecimalFormat("###0");

//variables
int no;
int k;
int nomk;
String isi;
int id_mhsw,id_mk,id_daftar,kod,nam;

switch (pilihan2)
{
case 1:
//tambah data

tp.Tampilan1("Melihat
Data","mahasiswa","NIM",mahasiswa,rec_mhsw);

isi=tp.Input1("\nMasukkan no urut
mahasiswa :");
no=Integer.parseInt(isi);
no=no-1;
tp.Tampilan2(mahasiswa,no);
k=Integer.parseInt(mahasiswa[no][2]);

if(k<4)
{
kod=k+3;
nam=kod+4;

tp.Tampilan1("Melihat
Data","mata kuliah","Kode",matkul,rec_mk);

isi=tp.Input1("\nMasukkan no
urut mata kuliah :");
nomk=Integer.parseInt(isi);
nomk=nomk-1;

//masukkan data tambahan
mahasiswa[no][kod]=matkul
[nomk][0];
mahasiswa[no][nam]=matkul
[nomk][1];
k++;
mahasiswa[no][2]=fmt.format
(k);
}
else
{
System.out.println("Maaf.
Sudah mengambil 4 mata kuliah.");
}

break;

case 2:
//ubah data

tp.Tampilan1("Melihat
Data","mahasiswa","NIM",mahasiswa,rec_mhsw);

isi=tp.Input1("\nMasukkan no urut
mahasiswa :");
no=Integer.parseInt(isi);
id_mhsw=no-1;
tp.Tampilan2(mahasiswa,id_mhsw);
k=Integer.parseInt(mahasiswa[id_mhsw]
[2]);

//input no urut mk terdaftar
isi=tp.Input1("\nMasukkan no urut
mata kuliah terdaftar :");
id_daftar=Integer.parseInt(isi);
kod=id_daftar+2;
nam=kod+4;

tp.Tampilan1("Melihat Data","mata
kuliah","Kode",matkul,rec_mk);

isi=tp.Input1("\nMasukkan no urut
mata kuliah :");
nomk=Integer.parseInt(isi);
nomk=nomk-1;

//ganti data
mahasiswa[id_mhsw][kod]=matkul[nomk]
[0];
mahasiswa[id_mhsw][nam]=matkul[nomk]
[1];

break;

case 3:
//list data

tp.Tampilan1("Melihat
Data","mahasiswa","NIM",mahasiswa,rec_mhsw);

isi=tp.Input1("\nMasukkan no urut
mahasiswa :");
no=Integer.parseInt(isi);
id_mhsw=no-1;
tp.Tampilan2(mahasiswa,id_mhsw);

break;

case 4:
break;

}
return mahasiswa;