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