#include<conio.h>
#include<iostream.h>
#include<string.h>
//mendeklarasikan bagian-bagian didalam simpul
struct simpul// pendeklarasian anggota simpul di dalam simpul adalah sbb
{
//long no;
long nrp;
char nma[20];
char jur[30];
simpul *next;
simpul *prev;
};
//pendeklarasian class senarai(kumpulan fungsi-fungsi untuk operasi simpul)
class senarai // pedeklarasian anggot kls dn fungsi
{
private:
simpul *awal;// pembuatan objek dri simpul berbentuk pointer digunakan sbb acuan pnulisan pembacaan penghapusan pencarian dll
simpul *akhir; //jadi buat penamabahan data simpul selain simpul pertama
simpul *hps;
simpul *sis;
long i;
long nr; // inputan nrp user
char name[20];
char jr[30];
char jawab;
public:
senarai();//konstruktor
~senarai();//destruktor
void tambah(long nr,char name[20],char jr[30]); //d masukan k void isi
void isi();
void tampil();
void tampil2();
void cari();
void hapus();
void ins1();
void ins2();
// void gnti();
}data;
//konstruktor yang mendeklarasikan bahwa pointer awal dan pointer akhir pada saat PROGRAM DIJALANKAN tidak menunjuk ke mana-mana (NULL)
senarai::senarai()
{
awal=NULL;//dfnsi pointer awal pd saat progrm d jalankan pertm kli tdka menunjuk k mana2
akhir=NULL;
}
//destruktor yang mendefinisikan penghapusan seluruh simpul pada saat PROGRAM BERAKHIR, untuk penghematan memori
senarai::~senarai()
{
simpul *dhapus;
while(awal!=NULL)
{
dhapus=awal;
awal=awal->next;
delete dhapus;
}
}
//fungsi untuk tambah data pendefinisian
void senarai::tambah(long nr, char name[20], char jr[30])
{
simpul *baru;// membuat objk baru dari simpul
baru= new simpul;//menunjk pointer baru ke simpul baru
//baru->no=n;
baru->nrp=nr;//menyalin nr yg diinput user ke barunya nrp
strcpy(baru->nma,name); // menyalin name ke barunya nma
strcpy(baru->jur,jr);
if(awal==NULL)
{
awal=baru; //pertama pengisian data simpul , masuk k kondisi ini
baru->prev=NULL;
}
else
{
akhir->next=baru;
baru->prev=akhir;
}
akhir=baru;
akhir->next=NULL;
}
//looping tambah data, selama user memilih "Y"
void senarai::isi()
{
i=1;
do
{
clrscr();
data.tampil();
cout<<endl<<endl<<endl;
cout<<"Data Nama dan NRP"<<endl;
cout<<endl<<"NRP : ";
cin>>nr;
cout<<endl<<"Nama : ";
cin>>name;
if(nr>=6300000 && nr<=6399999)
{
strcpy(jr, "Teknik Informatika");
}
else if(nr>=3300000 && nr<=3399999)
{
strcpy(jr, "Manajemen Informatika");
}
else if (nr>=4300000 && nr<=4399999)
{
strcpy (jr, "Administrasi Perkantoran");
}
else
{
clrscr();
cout<<"Maaf, Data NRP Yang Anda Masukan Salah";
break;
}
//data.gnti();
data.tambah(nr,name,jr);
cout<<endl<<"Apakah Akan Menambah Data (Y/N) : ";
cin>>jawab;
i++;
}
while (jawab=='Y' || jawab=='y');
}
//fungsi tampilkan data yang sudah ada
void senarai::tampil()
{
i=1;
simpul *baca;
baca=awal;
cout<<"ÄÄÄÄÄÄÄPROGRAM STUDI MANAJEMEN INFORMATIKAÄÄÄÄÄÄÄ"<<endl;
while (baca!=NULL)
{
cout<<endl<<i<<". NRP : "<<baca->nrp;
cout<<endl<<ends<<ends<<ends<<"NAMA : "<<baca->nma;
cout<<endl<<ends<<ends<<ends<<"KONSENTRASI : "<<baca->jur;
baca=baca->next;
i++;
}
}
void senarai::tampil2()
{
//i=1;
simpul *baca;
baca=akhir;
cout<<"ÄÄÄÄÄÄÄPROGRAM STUDI MANAJEMEN INFORMATIKAÄÄÄÄÄÄÄ"<<endl;
while (baca!=NULL)
{
cout<<endl<</*i*/" NRP : "<<baca->nrp;
cout<<endl<<ends<<ends<<ends<<"NAMA : "<<baca->nma;
cout<<endl<<ends<<ends<<ends<<"KONSENTRASI : "<<baca->jur;
baca=baca->prev;
//i++;
}
}
//fungsi mencari data berdasarkan "key" nama
void senarai::cari()
{
long g;
simpul *car;
car=awal;
data.tampil();
cout<<endl<<endl<<"Pencarian Berdasarkan NRP"<<endl;
cout<<endl<<"Masukan NRP: ";
cin>>g;
cout<<endl;
while(car!=NULL)
{
if(g==car->nrp)
{
cout<<"DATA YANG ANDA CARI: "<<endl<<endl;
cout<<"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"<<endl;
//cout<<" NO : "<<car->no<<endl;
cout<<" NRP : "<<car->nrp<<endl;
cout<<" Nama : "<<car->nma<<endl;
cout<<" Konsentrasi : "<<car->jur<<endl;
cout<<"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"<<endl;
}
car=car->next;
}
}
//fungsi menghapus data berdasarkan "key" nama
void senarai::hapus()
{
long h;
data.tampil();
cout<<endl<<endl<<"Masukan NRP Data Yang Akan Anda Hapus: ";
cin>>h;
simpul *posisi;
simpul *dat;
simpul *dt;
simpul *seln;
dt=NULL;
hps=NULL;
dat=awal;
while(dat!=NULL)
{
if(h==dat->nrp)
{
dt=dat;
break;
}
hps=dat;
dat=dat->next;
}
posisi=dt;
seln=posisi->next;
//if (posisi!=NULL)
//{
if(hps==NULL)
{
awal=awal->next;
seln->prev=NULL;
//data.gnti();
}
else
{
if(seln==NULL)
{
hps->next=NULL;
akhir=hps;
//data.gnti();
}
else
{
seln->prev=posisi->prev;
hps->next=posisi->next;
//data.gnti();
}
}
delete posisi;
cout<<endl;
data.tampil();
}
void senarai::ins1()
{
long j;
long sisnr;
char sisnm[20];
char sisjr[30];
data.tampil();
cout<<endl<<endl<<"Sebelum NRP Data Apa Anda Akan Menyisipkan Data? ";
cin>>j;
cout<<endl<<"SISIPKAN DATA SEBELUM"<<endl;
cout<<"Masukan NRP : ";
cin>>sisnr;
cout<<endl<<"Masukan Nama: ";
cin>>sisnm;
if(sisnr>=6300000 && sisnr<=6399999)
{
strcpy(sisjr, "Teknik Informatika");
}
else if(sisnr>=3300000 && sisnr<=3399999)
{
strcpy(sisjr, "Manajemen Informatika");
}
else if (sisnr>=4300000 && sisnr<=4399999)
{
strcpy (sisjr, "Administrasi Perkantoran");
}
else
{
clrscr();
cout<<"Maaf, Data NRP Yang Anda Masukan Salah";
goto x;
}
simpul *sisip;
sisip= new simpul;
simpul *car;
simpul *dt;
simpul *posisi;
dt=NULL;
sis=NULL;
car=awal;
sisip->nrp=sisnr;
strcpy(sisip->nma, sisnm);
strcpy(sisip->jur, sisjr);
while(car!=NULL)
{
if(j==car->nrp)
{
dt=car;
break;
}
sis=car;
car=car->next;
}
posisi=dt;
// seln=dt->next;
if(sis==NULL)
{
dt->prev=sisip;
sisip->next=awal;
sisip->prev=NULL;
awal=sisip;
// data.gnti();
}
else
{
// sisip->no=sis->no+1;
sisip->prev=posisi->prev;
posisi->prev=sisip;
sisip->next=sis->next;
sis->next=sisip;
//data.gnti();
}
cout<<endl;
data.tampil();
x:
}
void senarai::ins2()
{
long k;
long sisnr;
char sisnm[20];
char sisjr[30];
data.tampil();
cout<<endl<<endl<<"Setelah NRP Data Apa Anda Akan Menyisipkan Data? ";
cin>>k;
cout<<endl<<"SISIPKAN DATA SETELAH"<<endl;
cout<<"Masukan NRP : ";
cin>>sisnr;
cout<<endl<<"Masukan Nama: ";
cin>>sisnm;
if(sisnr>=6300000 && sisnr<=6399999)
{
strcpy(sisjr, "Teknik Informatika");
}
else if(sisnr>=3300000 && sisnr<=3399999)
{
strcpy(sisjr, "Manajemen Informatika");
}
else if (sisnr>=4300000 && sisnr<=4399999)
{
strcpy (sisjr, "Administrasi Perkantoran");
}
else
{
clrscr();
cout<<"Maaf, Data NRP Yang Anda Masukan Salah";
goto x;
}
simpul *sisip;
sisip= new simpul;
simpul *car;
simpul *dt;
simpul *sis;
dt=NULL;
sis=NULL;
car=awal;
sisip->nrp=sisnr;
strcpy(sisip->nma, sisnm);
strcpy(sisip->jur, sisjr);
while(car!=NULL)
{
if(k==car->nrp)
{
dt=car;
break;
}
// sis=car;
car=car->next;
}
sis=dt->next;
//posisi=dt;
if(sis==NULL)
{
akhir=sisip;
dt->next=sisip;
sisip->prev=dt;
sisip->next=NULL;
//data.gnti();
}
else
{
sis->prev=sisip;
sisip->prev=dt;
sisip->next=dt->next;
dt->next=sisip;
//data.gnti();
}
cout<<endl;
data.tampil();
x:
}
/*void senarai::gnti()
{
simpul *ganti;
ganti=awal;
i=1;
while(ganti!=NULL)
{
ganti->no=i;
i++;
ganti=ganti->next;
}
}*/
//fungsi main menu
void main()
{
char opt1;
char opt2;
menu:
clrscr();
cout<<"ÄÄÄÄÄÄMENU UTAMAÄÄÄÄÄÄÄ"<<endl;
cout<<endl<<endl;
cout<<"1. Input Data Nama Dan Nomor Telepon"<<endl;
cout<<"2. Tampilkan Data Queue"<<endl;
cout<<"3. Tampil Data Stack"<<endl;
cout<<"4. Cari Data No Telepon By Nama"<<endl;
cout<<"5. Hapus Data"<<endl;
cout<<"6. Sisipkan Data Sebelum"<<endl;
cout<<"7. Sisipkan Data Setelah"<<endl;
cout<<"8. Exit"<<endl;
cout<<endl<<"Silakan Masukan Pilihan Anda (Misal.1): ";
cin>>opt1;
if (opt1=='1')
goto a;
else if (opt1=='2')
goto b;
else if (opt1=='3')
goto c;
else if (opt1=='4')
goto d;
else if (opt1=='5')
goto e;
else if (opt1=='6')
goto f;
else if (opt1=='7')
goto g;
else
goto end;
a:
{
clrscr();
data.isi();
cout<<endl<<endl<<"Apakah Akan Kembali Ke Menu Utama (Y/N): ";
cin>>opt2;
if (opt2=='Y' || opt2=='y')
goto menu;
else
goto end;
}
b:
{
clrscr();
data.tampil();
cout<<endl<<endl<<"Apakah Akan Kembali Ke Menu Utama (Y/N): ";
cin>>opt2;
if (opt2=='Y' || opt2=='y')
goto menu;
else
goto end;
}
c:
{
clrscr();
data.tampil2();
cout<<endl<<endl<<"Apakah Akan Kembali Ke Menu Utama (Y/N): ";
cin>>opt2;
if (opt2=='Y' || opt2=='y')
goto menu;
else
goto end;
}
d:
{
clrscr();
data.cari();
cout<<endl<<endl<<"Apakah Akan Kembali Ke Menu Utama (Y/N): ";
cin>>opt2;
if (opt2=='Y' || opt2=='y')
goto menu;
else
goto end;
}
e:
{
clrscr();
data.hapus();
cout<<endl<<endl<<"Apakah Akan Kembali Ke Menu Utama (Y/N): ";
cin>>opt2;
if (opt2=='Y' || opt2=='y')
goto menu;
else
goto end;
}
f:
{
clrscr();
data.ins1();
cout<<endl<<endl<<"Apakah Akan Kembali Ke Menu Utama (Y/N): ";
cin>>opt2;
if (opt2=='Y' || opt2=='y')
goto menu;
else
goto end;
}
g:
{
clrscr();
data.ins2();
cout<<endl<<endl<<"Apakah Akan Kembali Ke Menu Utama (Y/N): ";
cin>>opt2;
if (opt2=='Y' || opt2=='y')
goto menu;
else
goto end;
}
end:
getch();
}
mudah-mudahan postingan ini dapat menjawab pertanyaan dari sahabat blogger dan berguna juga untuk yang lain..
selamat mencoba...