Sabtu, 03 Desember 2016

MMA Data Program



Kali ini saya membuat postingan untuk membuat sebuah program untuk mendata para petarung di MMA Indonesia dengan menggunakan C++, berserta source code dan penjelasan programnya


1.      Berikut adalah tampilan awal dalam program ini, kita diharuskan untuk memasukkan password yang benar dalam hal ini passwordnya adalah “1980”



2.      Setelah kita memasukkan password yang benar makan ini adalah tampilan menu utamanya


3.      Selanjutnya kita akan memilih salah satu dari pilihan-pilihan yang tertera diatas, pertama kita akan mencoba untuk masuk ke menu pilihan Tulis Data. Maka kita tuliskan A untuk memilihnya setelah masuk maka ini adalah tampilannya


4.      Setelah itu kita diminta untuk menginputkan berapa banyak data yang akan kita masukkkan, setelah kita mengisinya maka akan keluar tampilan berikut, disini saya akan memasukkan dua data, lalu setelah kita selesai memasukkan semua data maka akan ada pilihan “Mau menulis lagi?” maka kita jawab y jika kita akan memasukkan data lagi, jika tidak maka kita memasukkan t lalu kita akan kembali lagi ke menu utama.


5.      Setelah kita masuk ke menu utama kita akan mencoba untuk masuk ke pilihan lihat data, maka kita tekan B maka inilah yang akan muncul dan dipaling bawah terdapat pilihan ingin kembali ke menu awal? Jika kita ketik y maka kita akan kembali ke menu utama dan jika kita ketik t maka kita akan kembali ke tampilan memasukkan kode


6.      Setelah kita kembali ke menu utama sekarang kita akan coba masuk ke pilihan mencari data, maka kita ketikkan C didalam pilihan tadi maka inilah yang akan muncul


7.      Lalu kita ketikkan nomor dari fighter yang telah kita masukkan tadi maka tampilan inilah yang akan muncul, dan di pilihan bawah ada pilihan ingin mencari lagi? Kita tekan y jika akan mencari lagi dan t jika tidak akan mencari lagi lalu kita akan kembali ke tampilan menu utama



8.      Setelah kita masuk ke menu utama sekarang kita akan masuk ke update data, maka kita tuliskan D di dalam pilihan tadi maka yang muncul adalah seperti berikut



9.      Setelah kita memasukkan NIP nya maka tampilan NIP itu akan muncul, lalu dibawahnya akan muncul tampilan untuk memasukkan perubahannya seperti ini


10.  Lalu yang terakhir kita akan masuk ke dalam pilihan hapus, maka kita ketikkan E untuk memasuki pilihan hapus, maka yang muncul akan seperti ini



11.  Lalu kita masukkan NIP nya selanjutnya Fighter dengan NIP itu akan terhapus



A.     Penjelasan Source Code
1.      Membuat Class
class data
{
public:
    char namad[50], namab[50], daerah[50], disip[20], kls[20], klm[1];
    int n, no;

    void inputData()
    {
        cout<<"NIP (5 digit)      : ";
        cin>>no;
        cout<<"Nama Depan         : ";
        cin>>namad;
        cout<<"Nama Belakang      : ";
        cin>>namab;
        cout<<"Daerah             : ";
        cin>>daerah;
        cout<<"Jenis Kelamin (L/P): ";
        cin>>klm;
        cout<<"Kelas              : ";
        cin>>kls;
        cout<<"Disiplin Ilmu      : ";
        cin>>disip;

    }
    void outputData()
    {
        cout<<"NIP           : "<<no<<endl;
        cout<<"Nama          : "<<namad<<" "<<namab<<endl;
        cout<<"Daerah        : "<<daerah<<endl;
        cout<<"Kelas         : "<<kls<<endl;
        cout<<"Jenis Kelamin : "<<klm<<endl;
        cout<<"Disiplin Ilmu : "<<disip<<endl;
        cout<<endl<<endl<<endl;
    }
    int getNo()
    {
        return no;
    }
};

            Dalam class, kita membuat sebuah tempat untuk menampung data dan fungsi kita menggunakan “public” agar bias diakses oleh class yang sama ataupun turunannya. Didalamnya kita membuat fungsi input dan output data juga getNo. Sehingga apa yang akan tertulis didalam class ini nantinya akan tersimpan dan dapat dipanggil lagi nantinya.

2.      Membuat Form Masuk
void login()
{
    system ("cls");
start :
    string pass = "";
    char ya, ch;
    kotaklogin();
    system("COLOR 4F");
    gotoxy( 32, 10 );
    cout<<"Masukkan Kode : ";
    ch = _getch();
    while(ch != 13)
    {
        pass.push_back(ch);
        cout << '*';
        ch = _getch();
    }
    if (pass=="1980")
    {
        loading();
        tampilanAwal();
    }
    system ("cls");
    kotakgagal();
    gotoxy( 38, 10 );
    cout<<"KODE SALAH";
    gotoxy( 28, 12 );
    cout<< "Ingin Mencoba Lagi? [Y/T] : ";
    gotoxy( 56, 12 );
    cin>>ya;

    if(ya=='Y' || ya=='y')
    {
        system("cls");
        goto start;
    }
    else
        system("cls");
    return ;
    getch();
}

            Didalam source code diatas kita akan membuat kode, tetapi dengan tampilan nanti hanya bintang (*) yang ditampilkan.  Pertama kita mendeklarasikan variable yang dibutuhkan lalu kita panggil fungsi kotak login yang telah kita buat di fungsi lainnya, fungsi _getch() adalah untuk menunggu input dari keyboard tetapi tidak menampilkan kunci ke konsol. Lalu ch adalah untuk menyimpan apa yang telah dituliskan tadi ke ch tetapi tidak langsung ditampilkan di konsol. While (ch!=13) agar selama user tidak menekan enter didalam keyboard maka pengulangan itu akan terus berjalan jadi didalam sini kita tidak bias menghapus kode yang telah kita masukkan. Pass.push_back(ch) adalah variable dengan tipe data string. Method push_back() menempatkan karakter ditentukan sebagai parameter pada akhir string. Cout “*” karena tidak ada yang telah ditampilkan dari keystroke kita menampilkan tanda bintang (*) untuk setiap tombol. Ch=_getch() adalah untuk membaca keystroke2 dari user. Jika user memasukkan kode 1980 maka akan masuk fungsi loading dilanjutkan ke tampilan awal, jika salah maka akan ada pilihan untuk mencoba lagi.

3.      Loading
void loading()
{
    for(int i=0; i<=100; i++)
    {
        gotoxy(33,10);
        cout<<"Loading . . "<<i<<"%"<<endl;
        system("cls");
    }
    gotoxy(30,10);
    system("cls");
}

            Fungsi ini adalah untuk menampilkan tampilan seperti sedang menunggu atau loading, dengan kita memakai perulangan dengan nilai awal 0 dan batas 100 dengan pernambahan increment.

4.      Menu Utama
void tampilanAwal()
{
    system("cls");
    char pilihan;
    system("COLOR 4F");
    kotaktampilanAwal();
    gotoxy( 28, 5 );
    cout<<"ULTIMATE FIGHTING CHAMPIONSHIP";
    gotoxy( 30, 7 );
    cout<<"MIX MARTIAL ARTS INDONESIA";
    gotoxy( 30, 11 );
    cout<<"A. TULIS DATA ANGGOTA BARU";
    gotoxy( 30, 13 );
    cout<<"B. LIHAT DATA ANGGOTA";
    gotoxy( 30, 15 );
    cout<<"C. CARI DATA ANGGOTA";
    gotoxy( 30, 17 );
    cout<<"D. UPDATE DATA ANGGOTA";
    gotoxy( 30, 19 );
    cout<<"E. HAPUS DATA ANGGOTA";
    gotoxy( 30, 21 );
    cout<<"F. KELUAR";
    gotoxy( 40, 23 );
    cout<<"[   ]";
    gotoxy( 42,23 );
    cin>>pilihan;
    switch(pilihan)
    {
    case 'A' :
        tulisData();
        break;
    case 'B' :
        lihatData();
        break;
    case 'C' :
        cariData();
        break;
    case 'D' :
        updateData();
        break;
    case 'E' :
        hapusData();
        break;
    case 'F' :
        login();
        break;
    }
    getch();
}

            Didalam fungsi diatas kita menuliskan pilihan yang tersedia didalam program ini, yaitu untuk tulis data, lihat data, cari data, update data, dan hapus data. Kita menggunakan switch dan jika user menginputkan A maka program akan berjalan ke fungsi tulis data, begitu seterusnya dengan yang lain.

5.      Membuat Kotak
void kotaklogin()
{
    for(int i=9; i<=11; i++) //garis vertikal
    {
        gotoxy(30,i);
        cout<<char(186);
        gotoxy(53,i);
        cout<<char(186);
    }

    gotoxy(30,8);
    cout<<char(201);
    gotoxy(30,12);
    cout<<char(200);
    gotoxy(53,8);
    cout<<char(187);
    gotoxy(53,12);
    cout<<char(188);

    for(int i=31; i<=52; i++) //garis horizontal
    {
        gotoxy(i,8);
        cout<<char(205);
        gotoxy(i,12);
        cout<<char(205);
    }
}

void kotaktampilanAwal()
{
    for(int i=3; i<=24; i++) //garis vertikal
    {
        gotoxy(18,i);
        cout<<char(186);
        gotoxy(65,i);
        cout<<char(186);
    }

    gotoxy(18,2);
    cout<<char(201);
    gotoxy(18,9);
    cout<<char(204);
    gotoxy(18,25);
    cout<<char(200);
    gotoxy(65,2);
    cout<<char(187);
    gotoxy(65,9);
    cout<<char(185);
    gotoxy(65,25);
    cout<<char(188);

    for(int i=19; i<=64; i++) //garis horizontal
    {
        gotoxy(i,2);
        cout<<char(205);
        gotoxy(i,9);
        cout<<char(205);
        gotoxy(i,25);
        cout<<char(205);
    }
}
void kotakgagal()
{
    for(int i=9; i<=13; i++) //garis vertikal
    {
        gotoxy(26,i);
        cout<<char(186);
        gotoxy(58,i);
        cout<<char(186);
    }

    gotoxy(26,8);
    cout<<char(201);
    gotoxy(26,14);
    cout<<char(200);
    gotoxy(58,8);
    cout<<char(187);
    gotoxy(58,14);
    cout<<char(188);

    for(int i=27; i<=57; i++) //garis horizontal
    {
        gotoxy(i,8);
        cout<<char(205);
        gotoxy(i,14);
        cout<<char(205);
    }
}

            Disini kita akan membuat kotak, yaitu kotak ketika masuk, kotak ketika tampilan menu utama, tampilan kotak ketika input yang dimasukkan salah. Kita hanya menggunakan fungsi gotoxy untuk membuatnya, dan juga char() yaitu untuk memunculkan karakter seperti char(205) adalah karakter dari garis dua horizontal, dengan menggunakan perulangan untuk membuat garis horizontal dan vertical maka kotak pun dapat dibuat.

6.      Menuliskan Data
void tulisData()
{
    system("cls");
mulai :
    int banyak;
    char ya;
    cout<<"Banyak data yang akan dimasukkan : ";
    cin>>banyak;
    for(int a=1; a<=banyak; a++)
    {
        system("cls");
        data.inputData();
        fo.open(namaFile, ios::binary | ios::app);
        fo.write((char*) &data, sizeof (data));
        fo.close();
    }
    cout<<"\nAnda ingin memasukkan data lagi ? [Y/T] = ";
    cin>>ya;
    if(ya=='Y' || ya=='y')
    {
        system("cls");
        goto mulai;
    }
    else
        tampilanAwal();
    getch();
}

            Didalam fungsi tulis data, kita  akan menawarkan kepada user berapa kali dia akan memasukkan data, lalu kita gunakan for sebagai kodefungsi untuk perulangannya, lalu didalam perulangan kita panggil data lalu ke input data. Setelah itu kita buka, karena disini kita akan menulis maka kita menggunakan fo untuk menuliskannya di namaFile, dengan ios binary untuk membukanya dalam mode binary dan ios app yang digunakan untuk menuliskannya didalam data. Apabila sebelumnya sudah ada input di data maka ia akan menuju ke tempat paling dasar di data tadi. Lalu kita tulis dengan alamat data dan keseluruhannya dengan sizeof setelah itu kita tutup. Setelah itu ada pilihan apakah akan memasukkan data lagi? Kalau ya maka akan kembali ke mulai, dan apabila tidak maka akan kembali ke menu utama.

7.      Melihat Data
void lihatData()
{
    system("cls");
    char ya;
    fi.open(namaFile, ios::binary);
    while (fi.read((char*) &data, sizeof(data)))
    {
        data.outputData();
    }
    fi.close();
    cout<<"\nAnda ingin kembali ke menu awal ? [Y/T] = ";
    cin>>ya;
    if(ya=='Y' || ya=='y')
    {
        tampilanAwal();
    }
    else
        login();
    ;

}
            Selanjutnya kita membuat fungsi lihat data, karena disini kita hanya akan melihat saja maka mode pemanggilannya adalah dengan fi kita buka namaFile dengan mode binary. Dan ketika dibaca maka program akan menampilkan data yang tertulis didalam data lalu outputdata yang akan ditampilkan jika sudah maka ditutup lagi. Setelahnya aka nada pilihan untuk kembali ke menu awal jika ditekan y makan akan kembali ke menu awal dan jika t maka akan kembali ke form login.

8.      Mencari Data
void cariData()
{
    system("cls");
    int noDicari, ketemu=0;
    char ya;
    cout<<"Cari No: ";
    cin>>noDicari;
    system("cls");
    fi.open(namaFile, ios::binary);
    while(fi.read( (char*)&data, sizeof(data)))
    {
        if(data.getNo()== noDicari)
        {
            ketemu = 1;
            break;
        }
    }
    if(ketemu == 0)
        cout<<"Fighter dengan NIP : "<<noDicari<<" tidak dapat ditemukan!"<<endl;
    else
    {
        data.outputData();
        cout<<"Fighter dengan NIP : "<<noDicari<<" sudah dimasukkan didalam database!"<<endl;
    }
    fi.close();
    cout<<"\nAnda ingin mengcari data lagi ? [Y/T] = ";
    cin>>ya;
    if(ya=='Y' || ya=='y')
    {
        cariData();
    }
    else
        tampilanAwal();
    return ;
    ;
    cout<<endl;
}

            Pertama kita membuat variable baru dan kita memberikan nilai 0 kepada variable ketemu, lalu kita buat output cari no dengan input ke noDicari, lalu kita baca filenya di data apabila nomor yang dimasukkan ada yang sesuai dengan yang ada didalam data maka nilai ketemu akan menjadi 1, lalu apabila tidak ada yang sesuai maka nilainya akan tetap 0 lalu di fungsi if lah yang akan ditampilkan namun jika nilainya 1 maka di fungsi else yang akan ditampilkan dengan memanggil data lalu ke outputData. Setelahnya ada pilihan untuk mencari lagi jika ditekan y maka dia akan mencari lagi kembali ke fungsi cariData apabila tidak maka akan kembali ke menu utama.

9.      Menghapus Data
void hapusData()
{
    system("cls");
    int noDicari;
    char ya;
    cout<<"Cari NIP : ";
    cin>>noDicari;
    fi.open(namaFile, ios::binary);
    fo.open("cadangan.dat", ios::binary);
    int ketemu=0;
    while (fi.read((char*)&data, sizeof(data)))
    {
        if (data.getNo() != noDicari)
            fo.write((char*)&data, sizeof(data));
        else
            ketemu=1;
    }
    fi.close();
    fo.close();
    remove(namaFile);
    rename("cadangan.dat", namaFile);
    system("cls");
    if(ketemu==1)
        cout<<"Fighter dengan NIP "<<noDicari<<" telah dihapus!"<<endl;
    else
        cout<<"Fighter dengan NIP "<<noDicari<<" tidak dapat ditemukan!"<<endl;
    cout<<"\nAnda ingin menghapus data lagi ? [Y/T] = ";
    cin>>ya;
    if(ya=='Y' || ya=='y')
    {
        hapusData();
    }
    else
        lihatData();
    return ;
    ;
}

            Sama dengan cari data, bedanya disini kita membuka nama file dan juga kita membuat tempat baru lagi yaitu cadangan.dat dan kita tuliskan data nya disana. Apabila nomor yang dimasukkan sesuai maka data dengan nomor itu akan di hapuskan (remove) dan dimasukkan ke cadangan.dat setelah itu kita tampilkan output yang dibutuhkan setelah itu ada pilihan untuk menghapus lagi atau tidak dan sama seperti dalam fungsi yang sebelum-sebelumnya.

10.  Memperbarui Data
void updateData()
{
    system("cls");
    int noDicari;
    char ya;
    cout<<"Cari NIP : ";
    cin>>noDicari;
    fa.open(namaFile);
    while (fa.read((char*) &data, sizeof (data)))
    {
        if(data.getNo() == noDicari)
        {
            system ("cls");
            data.outputData();
            cout<<"Silahkan Masukkan Perubahan Data:"<<endl;
            data.inputData();
            int pos=-1*sizeof(data);
            fa.seekp(pos, ios::cur);
            fa.write((char*) &data, sizeof (data));
            break;
        }
        else
        system ("cls");
            cout<<"Fighter dengan NIP "<<noDicari<<" tidak dapat ditemukan!"<<endl;
    }
    fa.close();
    cout<<"\nAnda ingin mengupdate data lagi ? [Y/T] = ";
    cin>>ya;
    if(ya=='Y' || ya=='y')
    {
        updateData();
    }
    else
        tampilanAwal();
    return ;
    ;
}

            Untuk update data, pertama kita suruh user untuk memasukkan NIP Fighter yang dicari lalu nilainya kita masukkan ke variable noDicari, setelah itu dengan mode fa kita buka namaFile lalu kita baca, lalu apabila ada nomor yang sesuai maka system update akan dijalankan. System update ini dibuat dengan pertama kita buka data lalu outputData lalu kita tulis output silahkan masukkan perubahan data, lalu kita masuk ke data lalu input data, setelah itu kita deklarasikan lagi dengan pos dengan mengarahkannya ke keseluruhan data, lalu kita mengalihkannya ke tempat yang sebelumnya menggunakan seekp dan cur lalu kita tulis data yang baru dan selesai. Jika nomor yang diinputkan tidak diketemukan di data maka tampilan lain yang akan muncul. Setelah selesai lalu ada pilihan untuk mengupdate lagi atau tidak jika y maka akan kembali ke fungsi update jika tidak maka akan kembali ke tampilan awal atau menu utama.

Tidak ada komentar:

Posting Komentar