/* Program Data Praktikum 102FM ITB */

#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <conio.h>
#include <string>
using namespace std;

void Masuk_Data();
void Lihat_Data();
void Edit_Data();
void Edit_File();
void Hapus_Data();
void Buat_File();
void Hapus_File();

char del[5] = "del";
char file[20];
char command[20];
char f_prak[20];
char c_prak[20]; // c = code (dalam bentuk NIM)
char nama[50];
char shift[20];
char kelas[50];
int w = 0, l = 0;
int line = 0;

// variabel untuk data nilai (dan juga bisa diisi komentar):
char line1[50] = " ";
char line2[50] = " ";
char line3[50] = " ";
char line4[50] = " ";
char line5[50] = " ";
char line6[50] = " ";

int main() // menu utama
{
	int pilih;
	system("cls");
	cout << "\n\t\tPROGRAM DATA PRAKTIKUM 102FM ITB\n" << endl;
	cout << "\n\t<1> Tambah Data Praktikan" << endl;
	cout << "\n\t<2> Lihat/Cari Data Praktikan" << endl;
	cout << "\n\t<3> Edit Data Praktikan" << endl;
	cout << "\n\t<4> Hapus Data" << endl;
	cout << "\n\t<0> Keluar" << endl;
	cout << "\n\n\tMasukkan Pilihan: "; cin >> pilih;
	switch(pilih)
	{
	   case 0: 
       exit(1); break;
	   case 1: 
       Masuk_Data(); break;
	   case 2: 
       Lihat_Data(); break;
	   case 3: 
       Edit_Data(); break;
	   case 4: 
       Hapus_Data(); break;
	   default: 
       main();
	}   
	return 0;
}

void Masuk_Data() // fungsi untuk menambah/memasukkan data awal praktikan
{
	int b = 0;
	l = 0; w = 0;
	system("cls");
	cout << "\n\t\t\tTAMBAH DATA PRAKTIKAN" << endl;
	cout << "\n\n\tKode Praktikan (NIM) #: ";
	cin >> c_prak;
	while(b != 9)
	{
		if(c_prak[b] == '\0' && b != 8)
		{
			cout << "\n\n\tKode praktikan (NIM) minimal 8 digit..." << endl;
			getch();
			main();
		}
		b++;
	}
	Buat_File(); // memasukkan data ke file *.txt
	// membuat agar file ini dapat dicari:
	ifstream find(file);
	find >> f_prak;
	while(c_prak[l] != '\0')
	{
		if(c_prak[l] != f_prak[l])
		{
			l = 0;
			break;
		}
		l++;
	}
	find.close();
	if(c_prak[l] == f_prak[l] && c_prak[l] == '\0')
	{
		cout << "\n\n\tData mahasiswa ini sudah ada dalam berkas..." << endl;
		getch();
		main();
	}
	else
	{
	   cin.ignore(1);
      cout << "\n\tNama Praktikan: ";
		cin.getline(nama,50);
		cout << "\n\n\tPilihan Shift: ";
		cin.getline(shift,20);
		cout << "\n\tKelas (K...)/Dosen: ";
		cin.getline(kelas,50);
		cout << "\n\n\t[Masukkan data nilai:]\n" << endl;
		cout << "\tUntuk sementara ini ada 6 baris yang dapat diisi." << endl;
		cout << "\tTiap baris bersesuaian dengan praktikum tertentu.\n" << endl;
		line = 0;
		while(line != 1)
		{
			line++;
			cout << "\tPraktikum_1: "; cin.getline(line1,50);
			cout << "\tPraktikum_2: "; cin.getline(line2,50);
			cout << "\tPraktikum_3: "; cin.getline(line3,50);
			cout << "\tPraktikum_4: "; cin.getline(line4,50);
			cout << "\tPraktikum_5: "; cin.getline(line5,50);
			cout << "\tPraktikum_6: "; cin.getline(line6,50);
		}
		ofstream save(file);
		save << c_prak << endl;
		save << nama << endl;
		save << shift << endl;
		save << kelas << endl;
		save << line1 << endl;
		save << line2 << endl;
		save << line3 << endl;
		save << line4 << endl;
		save << line5 << endl;
		save << line6 << endl;
		save.close();
		cout << "\n\tSeluruh informasi telah disimpan...";
		getch();
	}
	main();
}

void Lihat_Data() // fungsi untuk melihat data yang tersimpan
{
   l = 0; w = 0;
   system("cls");
   cout << "\n\t\t\tLIHAT DATA PRAKTIKAN" << endl;
   cout << "\n\n\tMasukkan NIM #: ";
   cin >> c_prak;
   // Mencari berkas:
   Buat_File();
   ifstream find(file);
   while(w != 1000)
   {  // ulang sampai 1000 kali atau data ditemukan
      find >> f_prak;
      while(c_prak[l] != '\0')
      {  
         if(c_prak[l] != f_prak[l]) 
         {
            l = 0;
            break;
         }
         l++;
      }
      if(c_prak[l] == f_prak[l] && c_prak[l] == '\0') break;
      w++;
   }
   find.close();
   if(c_prak[l] == f_prak[l] && c_prak[l] == '\0')
   {  // bila berkas ditemukan, lakukan fungsi berikut:
      Buat_File();
      ifstream get(file);
      get >> c_prak;
      get.ignore(1);
      get.getline(nama,50);
      get.getline(shift,20);
      get.getline(kelas,50);
      get.getline(line1,50);
      get.getline(line2,50);
      get.getline(line3,50);   
      get.getline(line4,50);   
      get.getline(line5,50);   
      get.getline(line6,50);
      get.close();
      cout << "\n\n\tNama Praktikan: " << nama << endl;
      cout << "\n\tPilihan Shift: " << shift << endl;
      cout << "\n\tKelas/Dosen: " << kelas << "\n\n";
      cout << "\tPraktikum_1: " << line1 << endl;
      cout << "\tPraktikum_2: " << line2 << endl;
      cout << "\tPraktikum_3: " << line3 << endl;
      cout << "\tPraktikum_4: " << line4 << endl;
      cout << "\tPraktikum_5: " << line5 << endl;
      cout << "\tPraktikum_6: " << line6 << endl;
      cout << "\n\n\tTekan Sembarang tombol untuk kembali...";
      getch();
      main();
   }
   else
   {
      cout << "\n\n\tData mahasiswa tidak ada dalam berkas...";
      getch();
      main();
   }
}

void Edit_Data() // fungsi untuk memanggil data tersimpan yang akan diubah
{
   l = 0; w = 0;
   system("cls");
   cout << "\n\t\t\tEDIT DATA PRAKTIKAN" << endl;
   cout << "\n\n\tMasukkan NIM #: ";
   cin >> c_prak;
   Buat_File();
   ifstream find(file);
   while(w != 1000)
   {
      find >> f_prak;
      while(c_prak[l] != '\0')
      {
         if(c_prak[l] != f_prak[l]) 
         {
            l = 0;
            break;
         }
         l++;
      }
      if(c_prak[l] == f_prak[l] && c_prak[l] == '\0') break;
      w++;
   }
   find.close();
   if(c_prak[l] == f_prak[l] && c_prak[l] == '\0')
   {
      Buat_File();
      Edit_File();
   }
   else
   {
      cout << "\n\n\tData mahasiswa tidak ada dalam berkas..." << endl;
      getch();
      main();
   }
}

void Edit_File() // fungsi untuk mengubah data tersimpan yang telah spesifik
{  
   char edit;
   system("cls");
   ifstream get(file);
   get >> c_prak;
   get.ignore(1);
   get.getline(nama,50);
   get.getline(shift,20);
   get.getline(kelas,50);
   get.getline(line1,50);
   get.getline(line2,50);
   get.getline(line3,50);   
   get.getline(line4,50);   
   get.getline(line5,50);   
   get.getline(line6,50);               
   get.close();
   cout << "\n\n\t<A> Nama Praktikan: " << nama << endl;
   cout << "\n\t<B> Pilihan shift: " << shift << endl;
   cout << "\n\t<C> Kelas: " << kelas << "\n\n";
   cout << "\t<1> Praktikum_1: " << line1 << endl;
   cout << "\t<2> Praktikum_2: " << line2 << endl;
   cout << "\t<3> Praktikum_3: " << line3 << endl;
   cout << "\t<4> Praktikum_4: " << line4 << endl;
   cout << "\t<5> Praktikum_5: " << line5 << endl;
   cout << "\t<6> Praktikum_6: " << line6 << endl;
   cout << "\n\tMasukkan kode baris yang akan diedit atau <0> untuk keluar: ";
   cin >> edit;
   system("cls");
   cout << "\n\t\t\tEDIT DATA PRAKTIKAN" << endl;
   if(edit == 'A' || edit == 'a')
   {
      cout << "\n\n\tUbah nama: <"      << nama << "> ";
      cin.ignore(1); cin.getline(nama,50);
   }
   else if (edit == 'B' || edit == 'b')
   {
      cout << "\n\n\tUbah shift: <"      << shift << "> ";
      cin.ignore(1); cin.getline(shift,20);
   }
   else if(edit == 'C' || edit == 'c')
   {
      cout << "\n\n\tUbah kelas: <"         << kelas << "> ";
      cin.ignore(1); cin.getline(kelas,50);
   }
   else if(edit == '1')
   {
      cout << "\n\n\tUbah nilai_1: <"            << line1 << "> ";
      cin.ignore(1); cin.getline(line1,50);
   }
   else if(edit == '2')
   {
      cout << "\n\n\tUbah nilai_2: <"            << line2 << "> ";
      cin.ignore(1); cin.getline(line2,50);
   }
   else if(edit == '3')
   {
      cout << "\n\n\tUbah nilai_3: <"            << line3 << "> ";
      cin.ignore(1); cin.getline(line3,50);
   }
   else if(edit == '4')
   {
      cout << "\n\n\tUbah nilai_4: <"            << line4 << "> ";
      cin.ignore(1); cin.getline(line4,50);
   }
   else if(edit == '5')
   {
      cout << "\n\n\tUbah nilai_5: <"            << line5 << "> ";
      cin.ignore(1); cin.getline(line5,50);
   }
   else if(edit == '6')
   {
      cout << "\n\n\tUbah nilai_6: <"            << line6 << "> ";
      cin.ignore(1); cin.getline(line6,50);
   }    
   else if(edit == '0')
   {
      main();
   }
   else
   {
      Edit_File();
   }
   ofstream save(file);
   save << c_prak << endl;
   save << nama << endl;
   save << shift << endl;
   save << kelas << endl;
   save << line1 << endl;
   save << line2 << endl;
   save << line3 << endl;
   save << line4 << endl;
   save << line5 << endl;
   save << line6 << endl;
   save.close();
   Edit_File();
}

void Hapus_Data() // menghapus data dalam berkas tertentu
{
   l = 0; w = 0;
   system("cls");
   cout << "\n\t\tHAPUS DATA *.TXT" << endl;
   cout << "\n\n\tMasukkan NIM #: ";
   cin >> c_prak;
   Buat_File();
   ifstream find(file);
   while(w != 1000)
   {
      find >> f_prak;
      while(c_prak[l] != '\0')
      {
         if(c_prak[l] != f_prak[l]) 
         {
            l = 0;
            break;
         }
         l++;
      }
      if(c_prak[l] == f_prak[l] && c_prak[l] == '\0') break;
      w++;
   }
   find.close();
   if(c_prak[l] == f_prak[l] && c_prak[l] == '\0')
   {
      Hapus_File();
      cout << "\n\n\tData mahasiswa tersebut berhasil dihapus..." << endl;
      getch();
      main();
   }
   else
   {
      cout << "\n\n\tData mahasiswa tidak ada dalam berkas..." << endl;
      getch();
      main();
   }
}         
                                                                           
void Buat_File() // fungsi untuk membuat file data_praktikan.txt
{
	strcpy(file,c_prak);
	strcat(file,".txt");
}

void Hapus_File() // menghapus berkas
{
	strcpy(command,del);
	strcat(command,file);
	system(command);
}
