Linked List
Monday, April 19, 2010 7:04:36 AM
/ / Deklarasi Kelas
#include <iostream.h> # Include <iostream.h>
#include <string.h> # Include <string.h>
# ifndef KONTAK_H # Ifndef KONTAK_H
# define KONTAK_H # Define KONTAK_H
class Kontak Kontak kelas
{ (
friend istream& operator >>(istream& in, Kontak& P) teman istream & operator>> (istream & dalam, Kontak & P)
{ (
P.Menu(); P. Menu ();
return in; kembali dalam;
} )
friend ostream& operator <<(ostream& out, Kontak& Q) teman ostream & operator <<(ostream & keluar, Kontak & T)
{ (
Q.Menu(); T. Menu ();
return out; kembali keluar;
} )
private: swasta:
Kontak * akar; Kontak * akar;
Kontak * induk; Kontak * Induk;
Kontak * kiri; Kontak * Kiri;
Kontak * kanan; Kontak * Kanan;
char nama[40]; [Nama char 40];
char telp[20]; [Telp char 20];
public: publik:
Kontak(); Kontak ();
~Kontak(); ~ Kontak ();
//============= //=============
int tambah( Kontak * ortu, Kontak * baru ); int Tambah (Kontak * ortu, Kontak * Baru);
Kontak * cari( Kontak * simpul, char * nama ); Kontak * Cari (Kontak * simpul, char * Nama);
void hapus_semua_simpul( Kontak * simpul ); void hapus_semua_simpul (Kontak * simpul);
void tampil( Kontak * simpul ); void tampil (Kontak * simpul);
//============= //=============
int tambah( char * nama, char * telp ); int Tambah (Nama * char, telp * char);
int hapus( char * nama ); int hapus (char * Nama);
int cari( char * nama ); int Cari (Nama char *);
void tampil(); void tampil ();
void cetak_search( Kontak * simpul,char* dicari ); void cetak_search (Kontak * simpul, char * dicari);
void cetak_search(char* dicari); void cetak_search (char * dicari);
//====menu=== Menu //==== ===
void Cover(); Cover void ();
void Menu(); Menu void ();
void Menu_input(); void Menu_input ();
void Background(); Latar Belakang void ();
void Border(); Perbatasan void ();
void Border2(); void Border2 ();
void Wait_box(); void Wait_box ();
void Intro(); Intro void ();
void Keluar(); Keluar void ();
}; );
#endif # Endif
Implementasi.cpp (implementasi pohon biner) Implementasi.cpp (Implementasi Pohon biner)
#include <iostream.h> # Include <iostream.h>
#include <conio.h> # Include <conio.h>
#include <string.h> # Include <string.h>
# include "bt.h" # Include "bt.h"
# include <string.h> # Include <string.h>
# include <stdlib.h> # Include <stdlib.h>
# include <windows.h> # Include <windows.h>
# include <iomanip> # Include <iomanip>
//============================================================================== //================================================ ==============================
// definisi konstruktor dari pohonbiner / / Definisi konstruktor USING pohonbiner
//============================================================================== //================================================ ==============================
Kontak::Kontak() Kontak:: Kontak ()
{ (
akar = NULL; akar = NULL;
} )
//================================== //==================================
Kontak::~Kontak() Kontak:: ~ Kontak ()
{ (
//hapus_semua_simpul(akar); / / Hapus_semua_simpul (akar);
} )
//================================== //==================================
void Kontak::hapus_semua_simpul( Kontak *simpul ) void Kontak:: hapus_semua_simpul (Kontak * simpul)
{ (
if ( simpul) if (simpul)
hapus_semua_simpul( simpul->kiri ); hapus_semua_simpul (simpul-> Kiri);
//hapus_semua_simpul( simpul->kanan ); / / Hapus_semua_simpul Kanan (simpul->);
delete simpul; menghapus simpul;
} )
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////////////////////
//fungsi tambah simpul (untuk pembuatan simpul dan pengisian data ) / / Simpul Tambah Fungsi (untuk Artikel Pembuatan pengisian data Dan simpul)
//dengan nilai balik : 1. / / Value Balik Artikel Baru: 1. data sudah ditambahkan// data sudah ditambahkan / /
// 2. / / 2. data sudah ada// Data sudah Ada / /
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////////////////////
int Kontak::tambah( char *nama,char *telp ) int Kontak:: Tambah (Nama * char, telp * char)
{ (
Kontak * simpul; Kontak * simpul;
simpul = new Kontak; Kontak simpul = baru;
simpul->kiri = NULL; simpul-> Kiri = NULL;
simpul->kanan = NULL; simpul-> Kanan = NULL;
simpul->induk = NULL; simpul-> Induk = NULL;
strcpy(simpul->nama,nama); strcpy (Nama simpul->, Nama);
strcpy(simpul->telp,telp); strcpy (telp simpul->, telp);
if ( akar == NULL ) if (akar == NULL)
{ (
akar = simpul; akar = simpul;
return ( 1 ); kembali (1);
} )
else lain
return ( tambah( akar, simpul ) ); kembali (Tambah (akar, simpul));
} )
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////////////////////
// fungsi tambah (untuk merangkai simpul baru pada pohon) / Tambah / Fungsi (untuk Artikel Artikel Baru merangkai Pohon PADA simpul)
// nilai balik 1. / / Value Balik 1. data sudah ditambahkan data sudah ditambahkan
// 2. / / 2. data sudah ada Data sudah Ada
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////////////////////
int Kontak::tambah( Kontak * ortu, Kontak * baru ) int Kontak:: Tambah (Kontak * ortu, Kontak * Baru)
{ (
if ( strcmp(baru->nama,ortu->nama)==0 ) if (strcmp (Nama Baru->, Nama ortu->) == 0)
{ (
delete baru; menghapus Baru;
return ( 0 ); return (0);
} )
else lain
if ( strcmp(baru->nama,ortu->nama)<0) if (strcmp (Nama Baru->, Nama ortu->) <0)
{ (
if ( !ortu->kiri ) if (! ortu-kiri>)
{ (
ortu->kiri = baru; Kiri ortu-> = Artikel Baru;
baru->induk = ortu; Induk untuk Artikel-> = ortu;
} )
else lain
return ( tambah( ortu->kiri, baru ) ); kembali (Tambah (Kiri ortu->, Baru));
} )
else lain
if ( !ortu->kanan ) if (! Kanan ortu->)
{ (
ortu->kanan = baru; Kanan ortu-> = Artikel Baru;
baru->induk = ortu; Induk untuk Artikel-> = ortu;
} )
else lain
return ( tambah( ortu->kanan, baru ) ); kembali (Tambah (Kanan ortu->, Baru));
return ( 1 ); kembali (1);
} )
// / /
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////////////////////
// fungsi tampil => untuk menampilkan semua data pada node / Tampil / Fungsi => untuk Artikel * Semua data PADA menampilkan node
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////////////////////
void Kontak::tampil() void Kontak:: tampil ()
{//cout<<"aaa"; (/ / Cout <<"aaa";
tampil( akar ); tampil (akar);
//cout << endl; / / Cout <<endl;
} )
void Kontak::tampil( Kontak * simpul ) void Kontak:: tampil (Kontak * simpul)
{HANDLE hConsole; (MENANGANI hConsole;
hConsole = GetStdHandle( STD_OUTPUT_HANDLE ); hConsole = GetStdHandle (STD_OUTPUT_HANDLE);
if ( simpul ) if (simpul)
{ (
if ( simpul->kiri ) tampil( simpul->kiri ); if (simpul-kiri>) tampil (simpul-kiri>);
SetConsoleTextAttribute( hConsole, 116 ); SetConsoleTextAttribute (hConsole, 116);
cout <<" "<< setiosflags(ios::left ) <<setw(25) cout <<"" <<setiosflags (ios:: left) <setw <(25)
<<simpul->nama<<resetiosflags(ios::left) <<simpul-> Nama <<resetiosflags (ios:: kiri)
<<resetiosflags(ios::right)<<setw(33)<< simpul->telp<< endl; <<Resetiosflags (ios:: right) <setw <(33) <<simpul-> telp <<endl;
if ( simpul->kanan ) tampil( simpul->kanan ); if (Kanan simpul->) tampil (Kanan simpul->);
} )
} )
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////////////////////
// hapus() => untuk menghapus node yang diinginkan / / Hapus () => untuk Artikel menghapus node Yang diinginkan
// nilai balik 0. / / Value Balik 0. data tidak ketemu Data tidak ketemu
// 1. / / 1. data ketemu data ketemu
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////////////////////
int Kontak::hapus( char *nama ) int Kontak:: hapus (char * Nama)
{ (
Kontak * simpul_dihapus; Kontak * simpul_dihapus;
simpul_dihapus = cari( akar, nama ); simpul_dihapus = Cari (Akar, Nama);
if ( simpul_dihapus == NULL ) if (simpul_dihapus == NULL)
return (0); return (0);
if ( !simpul_dihapus->kanan ) if (! Kanan simpul_dihapus->)
{ (
if ( !simpul_dihapus->kiri ) if (simpul_dihapus-kiri>!)
{ (
//--simpul yang akan dihapus sebagai daun / / - Simpul Yang dihapus akan keanaeragaman sebagai daun
//--(tidak punya anak) //--( Tidak Punya Anak)
if ( simpul_dihapus == akar ) if (== akar simpul_dihapus)
akar == NULL; akar == NULL;
else lain
if ( simpul_dihapus->induk->kiri == simpul_dihapus ) if (Kiri Induk-> simpul_dihapus-> == simpul_dihapus)
simpul_dihapus->induk->kiri = NULL; simpul_dihapus-> Induk-> Kiri = NULL;
else lain
simpul_dihapus->induk->kanan = NULL; -simpul_dihapus> Induk-> Kanan = NULL;
} )
else lain
{ (
//== simpul yang akan dihapus memilliki anak] / / == Simpul Yang akan keanaeragaman dihapus memilliki Anak]
// dihapus sebelah kiri saja / Sebelah / dihapus saja Kiri
if ( simpul_dihapus == akar ) if (== akar simpul_dihapus)
{ (
akar = simpul_dihapus->kiri; akar = simpul_dihapus-> Kiri;
akar->induk = NULL; akar-> Induk = NULL;
} )
else lain
if ( simpul_dihapus->induk->kiri == simpul_dihapus ) if (Kiri Induk-> simpul_dihapus-> == simpul_dihapus)
{ (
simpul_dihapus->induk->kiri = simpul_dihapus->kiri; simpul_dihapus Kiri-> Induk-> = simpul_dihapus-> Kiri;
simpul_dihapus->kiri->induk = simpul_dihapus->induk; simpul_dihapus-> Kiri-> Induk = simpul_dihapus-> Induk;
} )
else lain
{ (
simpul_dihapus->induk->kanan = simpul_dihapus->kiri; Kanan simpul_dihapus-> Induk-> = simpul_dihapus-> Kiri;
simpul_dihapus->kiri->induk = simpul_dihapus->induk; simpul_dihapus-> Kiri-> Induk = simpul_dihapus-> Induk;
} )
} )
} )
else lain
if ( !simpul_dihapus->kiri ) if (simpul_dihapus-kiri>!)
{ (
//==simpul yang akan dihapus / / == Simpul Yang dihapus akan keanaeragaman
//==mempunyai anak disebelah kanan saja / / == Mempunyai Anak disebelah Kanan saja
if ( simpul_dihapus == akar ) if (== akar simpul_dihapus)
{ (
akar = simpul_dihapus->kanan; akar = simpul_dihapus-> Kanan;
akar->induk = NULL; akar-> Induk = NULL;
} )
else lain
if ( simpul_dihapus->induk->kiri == simpul_dihapus ) if (Kiri Induk-> simpul_dihapus-> == simpul_dihapus)
{ (
simpul_dihapus->induk->kiri= simpul_dihapus->kanan; simpul_dihapus-> Kiri Induk-> = simpul_dihapus-> Kanan;
simpul_dihapus->kanan->induk = simpul_dihapus->induk; simpul_dihapus Induk-> Kanan-> = simpul_dihapus-> Induk;
} )
else lain
{ (
simpul_dihapus->induk->kanan = simpul_dihapus->kanan; simpul_dihapus-> Kanan Induk-> = simpul_dihapus-> Kanan;
simpul_dihapus->kanan->induk = simpul_dihapus->induk; simpul_dihapus Induk-> Kanan-> = simpul_dihapus-> Induk;
} )
} )
else lain
{ (
//simpul yang dihapus / / Yang dihapus simpul
// memiliki dua buah subpohon / / Memiliki buah doa subpohon
Kontak * suksesor = simpul_dihapus->kanan; Kontak * suksesor = simpul_dihapus-> Kanan;
//==cari suksesor / / == Suksesor Cari
while ( suksesor->kiri != NULL ) sementara (suksesor-> Kiri! = NULL)
suksesor = suksesor->kiri; suksesor-suksesor => Kiri;
//== putaran suksesor dari pohon / / == Putaran suksesor USING Pohon
if ( suksesor->induk->kiri == suksesor ) if (Kiri Induk-> suksesor-> == suksesor)
{ (
suksesor->induk->kiri = suksesor->kanan; Kiri Induk-> suksesor-> = suksesor-> Kanan;
suksesor->kanan->induk = suksesor->induk; suksesor-> Kanan-> Induk = suksesor-> Induk;
if(suksesor->kanan==NULL) if (Kanan suksesor-> == NULL)
suksesor->induk->kiri=NULL; suksesor-> Induk-> Kiri = NULL;
} )
else lain
{ (
suksesor->induk->kanan = suksesor->kanan;// Kanan Induk-> suksesor-> = suksesor-> Kanan; / /
suksesor->kanan->induk = suksesor->induk;// Induk Kanan-> suksesor-> = suksesor-> Induk; / /
} )
//data pada suksesor dikopikan ke simpul yang akan dihapus / / Data PADA suksesor dikopikan Ke simpul Yang dihapus akan keanaeragaman
strcpy(simpul_dihapus->nama,suksesor->nama); strcpy (Nama simpul_dihapus->, suksesor-> Nama);
strcpy(simpul_dihapus->telp,suksesor->telp); strcpy (telp simpul_dihapus-> telp, suksesor->);
//ubah simpul yang ditunjuk suksesor ke simpul yang nantinyaa akan dihapus / / Yang ditunjuk Ke ubah simpul suksesor dihapus nantinyaa Yang akan keanaeragaman simpul
simpul_dihapus = suksesor; simpul_dihapus = suksesor;
} )
delete simpul_dihapus; menghapus simpul_dihapus;
return (1); kembali (1);
} )
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////////////////////
// cari() => untuk mencari node berdasarkan parameter nama / / Cari () => untuk Artikel node Mencari berdasarkan Nama parameter
// nilai balik NULL=data tidak ketemu / / Value Balik NULL = data tidak ketemu
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////////////////////
Kontak * Kontak::cari( Kontak * simpul, char *nama ) Kontak * Kontak:: Cari (Kontak * simpul, char * Nama)
{ (
if ( simpul == NULL ) if (simpul == NULL)
return ( NULL ); return (NULL);
else lain
if ( strcmp(nama,simpul->nama)==0 ) if (strcmp (Nama, Nama simpul->) == 0)
return simpul; kembali simpul;
else lain
if (strcmp( nama ,simpul->nama )<0) if (strcmp (Nama, Nama simpul->) <0)
return ( cari( simpul->kiri, nama ) ); kembali (Cari (simpul-> Kiri, Nama));
else lain
return ( cari( simpul->kanan, nama ) ); kembali (Cari Kanan (simpul->, Nama));
} )
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////////////////////
// cari() / / Cari ()
// nilai balik 0. / / Value Balik 0. data tidak ketemu Data tidak ketemu
// 1. / / 1. data ketemu data ketemu
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////////////////////
int Kontak::cari(char *nama) int Kontak:: Cari (char * Nama)
{ (
if(cari(akar,nama)==NULL) if (Cari (Akar, Nama) == NULL)
return 0; return 0;
else lain
return 1; return 1;
} )
gui & menu.cpp (implementasi tampilan untuk program) gui & menu.cpp (Gmail program untuk Artikel Implementasi)
#include <iostream.h> # Include <iostream.h>
#include <conio.h> # Include <conio.h>
#include <string.h> # Include <string.h>
# include "bt.h" # Include "bt.h"
# include <string.h> # Include <string.h>
# include <stdlib.h> # Include <stdlib.h>
# include <windows.h> # Include <windows.h>
# include <iomanip> # Include <iomanip>
#define WAIT(x) Sleep((long)(x)); # Define WAIT (x) tidur ((lama) (x));
#define SECOND 1000 # Define KEDUA 1000
//================================================================================ //================================================ ================================
//fungsi menu untuk menampilkan menu program / / Menu untuk Artikel Fungsi menampilkan program menu
//================================================================================ //================================================ ================================
void Kontak::Menu() void Kontak:: Menu ()
{ (
Kontak ob_kontak; Kontak ob_kontak;
char perintah; char perintah;
char Nama[40]; char Nama [40];
char telpon[20]; [Telpon char 20];
HANDLE hConsole; MENANGANI hConsole;
hConsole = GetStdHandle( STD_OUTPUT_HANDLE ); hConsole = GetStdHandle (STD_OUTPUT_HANDLE);
do melakukan
{ (
textbackground( 15 ); textbackground (15);
clrscr(); clrscr(); clrscr (); clrscr ();
textbackground( 15 ); textbackground (15);
_setcursortype( 0 ); _setcursortype (0);
HANDLE hConsole; MENANGANI hConsole;
hConsole = GetStdHandle( STD_OUTPUT_HANDLE ); hConsole = GetStdHandle (STD_OUTPUT_HANDLE);
clrscr(); clrscr ();
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
//garis tepi atas----------------------- / / Garis tepi ----------------------- Atas
gotoxy( 2, 2 ); gotoxy (2, 2);
cout << char( 201 ); cout <<char (201);
for ( int i = 1; i <= 76; i++ ) for (int i = 1; i <= 76; i + +)
{ (
cout << char( 205 ); cout <<char (205);
} )
cout << char( 187 ); cout <<char (187);
//garis tepi kiri dan kanan------------- / / Garis tepi Kiri Dan Kanan -------------
for ( int t = 3; t <= 23; t++ ) for (int t = 3; <t = 23; t + +)
{ (
gotoxy( 2, t ); cout << char( 186 ) << endl; gotoxy (2 t); cout <<char (186) <<endl;
} )
//tepi kanan---------------------------- / / Kanan tepi ----------------------------
for ( int t = 3; t <= 23; t++ ) for (int t = 3; <t = 23; t + +)
{ (
gotoxy( 79, t ); cout << char( 186 ) << endl; gotoxy (79, t); cout <<char (186) <<endl;
} )
//bawah--------------------------------- / / Arus bawah ---------------------------------
gotoxy( 0, 0 ); gotoxy (0, 0);
cout << " " << char( 200 ); cout <<"" <<char (200);
for ( int i = 1; i <= 76; i++ ) untuk (i int = 1; i <= 76; i + +)
{ (
cout << char( 205 ); cout <<char (205);
} )
cout << char( 188 ); cout <<char (188);
//batas tengah(atas)-------------------- / / Batas Tengah Atas ()--------------------
SetConsoleTextAttribute( hConsole, 127 ); SetConsoleTextAttribute (hConsole, 127);
gotoxy( 11, 7 ); gotoxy (11, 7);
cout << " " << char( 204 ); cout <<"" <<char (204);
for ( int i = 1; i <= 56; i++ ) for (int i = 1; i <= 56; i + +)
{ (
cout << char( 205 ); cout <<char (205);
} )
cout << char( 185 ); cout <<char (185);
gotoxy( 12, 7 ); cout << char( 201 ); gotoxy (12, 7); cout <<char (201);
gotoxy( 69, 7 ); cout << char( 187 ); gotoxy (69, 7); cout <<char (187);
//batas tengah(tengah)------------------ / / Batas Tengah ()------------------ Tengah
SetConsoleTextAttribute( hConsole, 127 ); SetConsoleTextAttribute (hConsole, 127);
gotoxy( 11, 15 ); gotoxy (11, 15);
cout << " " << char( 204 ); cout <<"" <<char (204);
for ( int i = 1; i <= 56; i++ ) for (int i = 1; i <= 56; i + +)
{ (
cout << char( 205 ); cout <<char (205);
} )
cout << char( 200 ); cout <<char (200);
//batas tenga kiri/kanan---------------- / / Batas tenga kiri/kanan----------------
for ( int j = 8; j <= 18; j++ ) for (int j = 8; j <18 =; j + +)
{ (
gotoxy( 12, j ); cout << char( 186 ); gotoxy (12, j); cout <<char (186);
} )
for ( int j = 8; j <= 18; j++ ) for (int j = 8; j <18 =; j + +)
{ (
gotoxy( 69, j ); cout << char( 186 ); gotoxy (69, j); cout <<char (186);
} )
//batas tengah(bawah)-------------------- / / Batas Tengah ()-------------------- Arus bawah
SetConsoleTextAttribute( hConsole, 127 ); SetConsoleTextAttribute (hConsole, 127);
gotoxy( 12, 19 ); gotoxy (12, 19);
cout << char( 200 ); cout <<char (200);
for ( int i = 1; i <= 56; i++ ) for (int i = 1; i <= 56; i + +)
{ (
cout << char( 205 ); cout <<char (205);
} )
cout << char( 185 ); cout <<char (185);
gotoxy( 12, 19 ); cout << char( 200 ); gotoxy (12, 19); cout <<char (200);
gotoxy( 69, 19 ); cout << char( 188 ); gotoxy (69, 19); <cout <char (188);
//desain Cover--------------------------- / / Desain Cover ---------------------------
SetConsoleTextAttribute( hConsole, 120 ); SetConsoleTextAttribute (hConsole, 120);
//atas / / Atas
for ( int i = 3; i <= 6; i++ ) for (int i = 3; i <6 =; i + +)
{ (
gotoxy( 3, i ); cout << "****************************************************************************"; gotoxy (3, i); cout <<"*************************************** *************************************";
} )
//kiri / / Kiri
for ( int i = 7; i <= 19; i++ ) for (int i = 7; i <= 19; i + +)
{ (
gotoxy( 3, i ); cout << "*********"; gotoxy (3, i); cout <<"*********";
} )
//knan / / Knan
for ( int i = 7; i <= 19; i++ ) for (int i = 7; i <= 19; i + +)
{ (
gotoxy( 70, i ); cout << "*********"; gotoxy (70, i); cout <<"*********";
} )
//bwh / / BWH
for ( int i = 20; i <= 23; i++ ) for (int i = 20; i <23 =; i + +)
{ (
gotoxy( 3, i ); cout << "****************************************************************************"; gotoxy (3, i); cout <<"*************************************** *************************************";
} )
SetConsoleTextAttribute( hConsole, 113 ); SetConsoleTextAttribute (hConsole, 113);
gotoxy( 13, 16 ); gotoxy (13, 16);
{ (
cout << "[PHONENUMBER SIMULATION WITH BINARY TREE DATA STRUCTURE]" << endl; cout <<"[PHONENUMBER DENGAN SIMULASI STRUKTUR DATA POHON BINARY]" <<endl;
} )
gotoxy( 28, 18 ); gotoxy (28, 18);
{ (
cout << "[ BY : ZIA, ERWIN, MUSLIM ]" << endl; cout <<"[OLEH: Zia, Erwin, MUSLIM]" <<endl;
} )
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
gotoxy( 13, 9 ); gotoxy (13, 9);
{ (
cout << "00 00 0000 00000 00000 00000 0000 00000 00000 00000" << endl; cout <<"00 00 0000 0000 0 00000 00000 0000 00000 00000 00000 <<endl;
} )
gotoxy( 13, 10 ); gotoxy (13, 10);
{ (
cout << " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0" << endl; cout <<"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0" <<endl;
} )
gotoxy( 13, 11 ); gotoxy (13, 11);
{ (
cout << " 0 000 0 0 00000 0 00000 0000 00000 00000 00000" << endl; cout <<"0 000 0 0 00000 0 00000 0000 00000 00000 00000" <<endl;
} )
gotoxy( 13, 12 ); gotoxy (13, 12);
{ (
cout << " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0" << endl; cout <<"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0" <<endl;
} )
gotoxy( 13, 13 ); gotoxy (13, 13);
{ (
cout << "00 00 0000 0 0 0 0 0 0000 0 0 00000 00000" << endl; cout <<"00 00 0000 0 0 0 0 0 0000 0 0 00000 00000" <<endl;
} )
SetConsoleTextAttribute( hConsole, 116 ); SetConsoleTextAttribute (hConsole, 116);
gotoxy( 3, 24 ); cout << "'L'"; gotoxy (3, 24); cout <<"'L'";
// gotoxy( 33, 24 ); cout << "'*'"; / / Gotoxy (33, 24); cout <<"'*'";
gotoxy( 70, 24 ); cout << "'E'"; gotoxy (70, 24); cout <<"'E'";
SetConsoleTextAttribute( hConsole, 116 ); SetConsoleTextAttribute (hConsole, 116);
gotoxy( 3, 2 ); cout << "'A'"; gotoxy (3, 2); cout <<"'A'";
gotoxy( 33, 2 ); cout << "'D'"; gotoxy (33, 2); cout <<"'D'";
gotoxy( 70, 2 ); cout << "'S'"; gotoxy (70, 2); cout <<"'S'";
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
gotoxy( 6, 24 ); cout << "ist"; gotoxy (6, 24); cout <<"ist";
// gotoxy( 36, 24 ); cout << "***";/// / / Gotoxy (36, 24); cout <<"***";///
gotoxy( 73, 24 ); cout << "xit"; gotoxy (73, 24); cout <<"Keluar";
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
gotoxy( 6, 2 ); cout << "dd"; gotoxy (6, 2); cout <<"dd";
gotoxy( 36, 2 ); cout << "elete"; gotoxy (36, 2); cout <<"elete";
gotoxy( 73, 2 ); cout << "earch"; gotoxy (73, 2); cout <<"earch";
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
perintah = toupper( getch() ); perintah = toupper (getch ());
switch ( perintah ) switch (perintah)
{ (
case 'A': huruf 'A':
atas : Atas:
Menu_input(); Menu_input ();
Border(); Perbatasan ();
SetConsoleTextAttribute( hConsole, 116 ); SetConsoleTextAttribute (hConsole, 116);
gotoxy( 35, 6 ); cout << "TAMBAH KONTAK"; gotoxy (35, 6); cout <<"Tambah Kontak";
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
gotoxy( 21, 13 ); gotoxy (21, 13);
cout << "NAMA : "; cout <<"NAMA:";
gotoxy( 21, 15 ); gotoxy (21, 15);
cout << "TELPON : "; cout <<"telpon:";
gotoxy( 32, 13 ); gotoxy (32, 13);
_setcursortype( 1 ); _setcursortype (1);
//=========== //===========
cin.getline( Nama, 40 ); cin.getline (Nama, 40);
//=========== //===========
gotoxy( 32, 15 ); gotoxy (32, 15);
_setcursortype( 1 ); _setcursortype (1);
//=========== //===========
cin.getline( telpon, 20 ); cin.getline (telpon, 20);
if ( ob_kontak.cari( Nama ) ) if (ob_kontak.cari (Nama))
{ (
Wait_box(); Wait_box ();
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
gotoxy( 21, 13 ); cout << " KONTAK SUDAH ADA!!"; gotoxy (21, 13); cout <<"Kontak SUDAH ADA!"!;
break; break;
} )
ob_kontak.tambah( Nama, telpon ); ob_kontak.tambah (Nama, telpon);
//============= //=============
Wait_box(); Wait_box ();
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
gotoxy( 21, 13 ); gotoxy (21, 13);
cout << " ....UPDATING DATA...."; cout <<"DATA UPDATING .... ....";
WAIT( 0.1 * SECOND ); WAIT (0,1 KEDUA *);
Wait_box(); Wait_box ();
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
gotoxy( 21, 13 ); cout << " TAMBAH LAGI ? = [Y/N] "; gotoxy (21, 13); cout <<"Tambah Lagi? = [Y / N]";
char jawab; char jawab;
jawab = toupper( getch() ); jawab = toupper (getch ());
if ( jawab == 'Y' || jawab == 'y' ) if (jawab == 'jawab | | Y' == 'y')
goto atas; goto Atas;
gotoxy( 21, 13 ); gotoxy (21, 13);
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
cout << " PRESS\"ENTER KEY\" TO CONTINUE"; cout <<"SIARAN \" ENTER KUNCI \ "ATAS LANJUTKAN";
break; break;
case 'D': huruf 'D':
ulang: memprogram ulang:
clrscr(); clrscr ();
Border(); Perbatasan ();
cout << endl << endl; cout <<endl <<endl;
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
gotoxy( 35, 6 ); cout << "HAPUS KONTAK"; gotoxy (35, 6); cout <<"HAPUS Kontak";
gotoxy( 16, 6 ); gotoxy (16, 6);
SetConsoleTextAttribute( hConsole, 116 ); SetConsoleTextAttribute (hConsole, 116);
cout << "NAMA"; cout <<"NAMA";
gotoxy( 56, 6 ); gotoxy (56, 6);
cout << "NOMOR TELPON"; cout <<"Nomor telpon";
cout << endl << endl; cout <<endl <<endl;
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
ob_kontak.tampil(); ob_kontak.tampil ();
cout << endl << " ======================================================================\n"; cout <<endl <<"=========================================== =========================== \ n ";
cout << " NAMA YANG INGIN DIHAPUS : "; cout <<"NAMA YANG DIHAPUS Ingin:";
cin.getline( Nama, 40 ); cin.getline (Nama, 40);
if ( !ob_kontak.cari( Nama ) ) if (! ob_kontak.cari (Nama))
{ (
Menu_input(); Menu_input ();
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
gotoxy( 21, 13 ); cout << " KONTAK TIDAK ADA!!"; gotoxy (21, 13); cout <<"TIDAK ADA Kontak!"!;
gotoxy(21,15);cout<< "...SESUAIKAN DENGAN NAMA PADA KONTAK..."; gotoxy (21,15); cout <<"NAMA Artikel Baru ... SESUAIKAN PADA Kontak ...";
break; break;
} )
ob_kontak.hapus( Nama ); ob_kontak.hapus (Nama);
Wait_box(); Wait_box ();
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
gotoxy( 21, 13 ); cout << " ....UPDATING DATA...."; gotoxy (21, 13); cout <<"DATA UPDATING .... ....";
WAIT( 1 * SECOND ); WAIT (1 KEDUA *);
Wait_box(); Wait_box ();
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
gotoxy( 21, 13 ); cout << " HAPUS LAGI ? = [Y/N] "; gotoxy (21, 13); cout <<"HAPUS Lagi? = [Y / N]";
jawab = toupper( getch() ); jawab = toupper (getch ());
if ( jawab == 'Y' || jawab == 'y' ) if (jawab == 'jawab | | Y' == 'y')
goto ulang; goto perlu memprogram ulang;
gotoxy( 21, 13 ); gotoxy (21, 13);
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
cout << " PRESS\"ENTER KEY\" TO CONTINUE"; cout <<"SIARAN \" ENTER KUNCI \ "ATAS LANJUTKAN";
break; break;
case 'E': kasus 'E':
ob_kontak.Keluar(); ob_kontak.Keluar ();
getch(); getch ();
break; break;
case 'L': huruf 'L':
clrscr(); clrscr ();
Border(); Perbatasan ();
cout << endl << endl; cout <<endl <<endl;
gotoxy( 16, 6 ); gotoxy (16, 6);
SetConsoleTextAttribute( hConsole, 116 ); SetConsoleTextAttribute (hConsole, 116);
cout << "NAMA"; cout <<"NAMA";
gotoxy( 56, 6 ); gotoxy (56, 6);
cout << "NOMOR TELPON"; cout <<"Nomor telpon";
cout << endl << endl; cout <<endl <<endl;
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
ob_kontak.tampil(); ob_kontak.tampil ();
// getch(); / / Getch ();
break; break;
case 'S': huruf 'S':
char dicari[40]; [Dicari char 40];
Border2(); Border2 ();
SetConsoleTextAttribute( hConsole, 116 ); SetConsoleTextAttribute (hConsole, 116);
gotoxy( 35, 6 ); cout << "CARI KONTAK"; gotoxy (35, 6); cout <<"Cari Kontak";
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
gotoxy( 21, 13 ); gotoxy (21, 13);
cout << "NAMA : "; cout <<"NAMA:";
gotoxy( 32, 13 ); gotoxy (32, 13);
_setcursortype( 1 ); _setcursortype (1);
gets( dicari ); mendapat (dicari);
//cout << endl; / / Cout <<endl;
clrscr(); clrscr ();
Border(); Perbatasan ();
cout << endl << endl; cout <<endl <<endl;
SetConsoleTextAttribute( hConsole, 116 ); SetConsoleTextAttribute (hConsole, 116);
gotoxy( 16, 6 ); gotoxy (16, 6);
cout << "NAMA"; cout <<"NAMA";
gotoxy( 56, 6 ); gotoxy (56, 6);
cout << "NOMOR TELPON"; cout <<"Nomor telpon";
cout << endl << endl; cout <<endl <<endl;
ob_kontak.cetak_search( dicari ); ob_kontak.cetak_search (dicari);
break; break;
} )
getch(); getch ();
cin.ignore( 80, '\n' ); cin.ignore (80, '\ n');
} )
while ( perintah != 'E' ); sementara (perintah! = 'E');
} )
================================================= =================================================
main.cpp main.cpp
#include <iostream.h> # Include <iostream.h>
#include <conio.h> # Include <conio.h>
#include <string.h> # Include <string.h>
# include "bt.h" # Include "bt.h"
void main() void main ()
{ (
clrscr(); clrscr ();
Kontak a; Kontak suatu;
cin>>a; cin>> a;
cout<<a; Cout <<a;
getch(); getch ();
} )
#include <iostream.h> # Include <iostream.h>
#include <string.h> # Include <string.h>
# ifndef KONTAK_H # Ifndef KONTAK_H
# define KONTAK_H # Define KONTAK_H
class Kontak Kontak kelas
{ (
friend istream& operator >>(istream& in, Kontak& P) teman istream & operator>> (istream & dalam, Kontak & P)
{ (
P.Menu(); P. Menu ();
return in; kembali dalam;
} )
friend ostream& operator <<(ostream& out, Kontak& Q) teman ostream & operator <<(ostream & keluar, Kontak & T)
{ (
Q.Menu(); T. Menu ();
return out; kembali keluar;
} )
private: swasta:
Kontak * akar; Kontak * akar;
Kontak * induk; Kontak * Induk;
Kontak * kiri; Kontak * Kiri;
Kontak * kanan; Kontak * Kanan;
char nama[40]; [Nama char 40];
char telp[20]; [Telp char 20];
public: publik:
Kontak(); Kontak ();
~Kontak(); ~ Kontak ();
//============= //=============
int tambah( Kontak * ortu, Kontak * baru ); int Tambah (Kontak * ortu, Kontak * Baru);
Kontak * cari( Kontak * simpul, char * nama ); Kontak * Cari (Kontak * simpul, char * Nama);
void hapus_semua_simpul( Kontak * simpul ); void hapus_semua_simpul (Kontak * simpul);
void tampil( Kontak * simpul ); void tampil (Kontak * simpul);
//============= //=============
int tambah( char * nama, char * telp ); int Tambah (Nama * char, telp * char);
int hapus( char * nama ); int hapus (char * Nama);
int cari( char * nama ); int Cari (Nama char *);
void tampil(); void tampil ();
void cetak_search( Kontak * simpul,char* dicari ); void cetak_search (Kontak * simpul, char * dicari);
void cetak_search(char* dicari); void cetak_search (char * dicari);
//====menu=== Menu //==== ===
void Cover(); Cover void ();
void Menu(); Menu void ();
void Menu_input(); void Menu_input ();
void Background(); Latar Belakang void ();
void Border(); Perbatasan void ();
void Border2(); void Border2 ();
void Wait_box(); void Wait_box ();
void Intro(); Intro void ();
void Keluar(); Keluar void ();
}; );
#endif # Endif
Implementasi.cpp (implementasi pohon biner) Implementasi.cpp (Implementasi Pohon biner)
#include <iostream.h> # Include <iostream.h>
#include <conio.h> # Include <conio.h>
#include <string.h> # Include <string.h>
# include "bt.h" # Include "bt.h"
# include <string.h> # Include <string.h>
# include <stdlib.h> # Include <stdlib.h>
# include <windows.h> # Include <windows.h>
# include <iomanip> # Include <iomanip>
//============================================================================== //================================================ ==============================
// definisi konstruktor dari pohonbiner / / Definisi konstruktor USING pohonbiner
//============================================================================== //================================================ ==============================
Kontak::Kontak() Kontak:: Kontak ()
{ (
akar = NULL; akar = NULL;
} )
//================================== //==================================
Kontak::~Kontak() Kontak:: ~ Kontak ()
{ (
//hapus_semua_simpul(akar); / / Hapus_semua_simpul (akar);
} )
//================================== //==================================
void Kontak::hapus_semua_simpul( Kontak *simpul ) void Kontak:: hapus_semua_simpul (Kontak * simpul)
{ (
if ( simpul) if (simpul)
hapus_semua_simpul( simpul->kiri ); hapus_semua_simpul (simpul-> Kiri);
//hapus_semua_simpul( simpul->kanan ); / / Hapus_semua_simpul Kanan (simpul->);
delete simpul; menghapus simpul;
} )
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////////////////////
//fungsi tambah simpul (untuk pembuatan simpul dan pengisian data ) / / Simpul Tambah Fungsi (untuk Artikel Pembuatan pengisian data Dan simpul)
//dengan nilai balik : 1. / / Value Balik Artikel Baru: 1. data sudah ditambahkan// data sudah ditambahkan / /
// 2. / / 2. data sudah ada// Data sudah Ada / /
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////////////////////
int Kontak::tambah( char *nama,char *telp ) int Kontak:: Tambah (Nama * char, telp * char)
{ (
Kontak * simpul; Kontak * simpul;
simpul = new Kontak; Kontak simpul = baru;
simpul->kiri = NULL; simpul-> Kiri = NULL;
simpul->kanan = NULL; simpul-> Kanan = NULL;
simpul->induk = NULL; simpul-> Induk = NULL;
strcpy(simpul->nama,nama); strcpy (Nama simpul->, Nama);
strcpy(simpul->telp,telp); strcpy (telp simpul->, telp);
if ( akar == NULL ) if (akar == NULL)
{ (
akar = simpul; akar = simpul;
return ( 1 ); kembali (1);
} )
else lain
return ( tambah( akar, simpul ) ); kembali (Tambah (akar, simpul));
} )
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////////////////////
// fungsi tambah (untuk merangkai simpul baru pada pohon) / Tambah / Fungsi (untuk Artikel Artikel Baru merangkai Pohon PADA simpul)
// nilai balik 1. / / Value Balik 1. data sudah ditambahkan data sudah ditambahkan
// 2. / / 2. data sudah ada Data sudah Ada
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////////////////////
int Kontak::tambah( Kontak * ortu, Kontak * baru ) int Kontak:: Tambah (Kontak * ortu, Kontak * Baru)
{ (
if ( strcmp(baru->nama,ortu->nama)==0 ) if (strcmp (Nama Baru->, Nama ortu->) == 0)
{ (
delete baru; menghapus Baru;
return ( 0 ); return (0);
} )
else lain
if ( strcmp(baru->nama,ortu->nama)<0) if (strcmp (Nama Baru->, Nama ortu->) <0)
{ (
if ( !ortu->kiri ) if (! ortu-kiri>)
{ (
ortu->kiri = baru; Kiri ortu-> = Artikel Baru;
baru->induk = ortu; Induk untuk Artikel-> = ortu;
} )
else lain
return ( tambah( ortu->kiri, baru ) ); kembali (Tambah (Kiri ortu->, Baru));
} )
else lain
if ( !ortu->kanan ) if (! Kanan ortu->)
{ (
ortu->kanan = baru; Kanan ortu-> = Artikel Baru;
baru->induk = ortu; Induk untuk Artikel-> = ortu;
} )
else lain
return ( tambah( ortu->kanan, baru ) ); kembali (Tambah (Kanan ortu->, Baru));
return ( 1 ); kembali (1);
} )
// / /
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////////////////////
// fungsi tampil => untuk menampilkan semua data pada node / Tampil / Fungsi => untuk Artikel * Semua data PADA menampilkan node
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////////////////////
void Kontak::tampil() void Kontak:: tampil ()
{//cout<<"aaa"; (/ / Cout <<"aaa";
tampil( akar ); tampil (akar);
//cout << endl; / / Cout <<endl;
} )
void Kontak::tampil( Kontak * simpul ) void Kontak:: tampil (Kontak * simpul)
{HANDLE hConsole; (MENANGANI hConsole;
hConsole = GetStdHandle( STD_OUTPUT_HANDLE ); hConsole = GetStdHandle (STD_OUTPUT_HANDLE);
if ( simpul ) if (simpul)
{ (
if ( simpul->kiri ) tampil( simpul->kiri ); if (simpul-kiri>) tampil (simpul-kiri>);
SetConsoleTextAttribute( hConsole, 116 ); SetConsoleTextAttribute (hConsole, 116);
cout <<" "<< setiosflags(ios::left ) <<setw(25) cout <<"" <<setiosflags (ios:: left) <setw <(25)
<<simpul->nama<<resetiosflags(ios::left) <<simpul-> Nama <<resetiosflags (ios:: kiri)
<<resetiosflags(ios::right)<<setw(33)<< simpul->telp<< endl; <<Resetiosflags (ios:: right) <setw <(33) <<simpul-> telp <<endl;
if ( simpul->kanan ) tampil( simpul->kanan ); if (Kanan simpul->) tampil (Kanan simpul->);
} )
} )
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////////////////////
// hapus() => untuk menghapus node yang diinginkan / / Hapus () => untuk Artikel menghapus node Yang diinginkan
// nilai balik 0. / / Value Balik 0. data tidak ketemu Data tidak ketemu
// 1. / / 1. data ketemu data ketemu
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////////////////////
int Kontak::hapus( char *nama ) int Kontak:: hapus (char * Nama)
{ (
Kontak * simpul_dihapus; Kontak * simpul_dihapus;
simpul_dihapus = cari( akar, nama ); simpul_dihapus = Cari (Akar, Nama);
if ( simpul_dihapus == NULL ) if (simpul_dihapus == NULL)
return (0); return (0);
if ( !simpul_dihapus->kanan ) if (! Kanan simpul_dihapus->)
{ (
if ( !simpul_dihapus->kiri ) if (simpul_dihapus-kiri>!)
{ (
//--simpul yang akan dihapus sebagai daun / / - Simpul Yang dihapus akan keanaeragaman sebagai daun
//--(tidak punya anak) //--( Tidak Punya Anak)
if ( simpul_dihapus == akar ) if (== akar simpul_dihapus)
akar == NULL; akar == NULL;
else lain
if ( simpul_dihapus->induk->kiri == simpul_dihapus ) if (Kiri Induk-> simpul_dihapus-> == simpul_dihapus)
simpul_dihapus->induk->kiri = NULL; simpul_dihapus-> Induk-> Kiri = NULL;
else lain
simpul_dihapus->induk->kanan = NULL; -simpul_dihapus> Induk-> Kanan = NULL;
} )
else lain
{ (
//== simpul yang akan dihapus memilliki anak] / / == Simpul Yang akan keanaeragaman dihapus memilliki Anak]
// dihapus sebelah kiri saja / Sebelah / dihapus saja Kiri
if ( simpul_dihapus == akar ) if (== akar simpul_dihapus)
{ (
akar = simpul_dihapus->kiri; akar = simpul_dihapus-> Kiri;
akar->induk = NULL; akar-> Induk = NULL;
} )
else lain
if ( simpul_dihapus->induk->kiri == simpul_dihapus ) if (Kiri Induk-> simpul_dihapus-> == simpul_dihapus)
{ (
simpul_dihapus->induk->kiri = simpul_dihapus->kiri; simpul_dihapus Kiri-> Induk-> = simpul_dihapus-> Kiri;
simpul_dihapus->kiri->induk = simpul_dihapus->induk; simpul_dihapus-> Kiri-> Induk = simpul_dihapus-> Induk;
} )
else lain
{ (
simpul_dihapus->induk->kanan = simpul_dihapus->kiri; Kanan simpul_dihapus-> Induk-> = simpul_dihapus-> Kiri;
simpul_dihapus->kiri->induk = simpul_dihapus->induk; simpul_dihapus-> Kiri-> Induk = simpul_dihapus-> Induk;
} )
} )
} )
else lain
if ( !simpul_dihapus->kiri ) if (simpul_dihapus-kiri>!)
{ (
//==simpul yang akan dihapus / / == Simpul Yang dihapus akan keanaeragaman
//==mempunyai anak disebelah kanan saja / / == Mempunyai Anak disebelah Kanan saja
if ( simpul_dihapus == akar ) if (== akar simpul_dihapus)
{ (
akar = simpul_dihapus->kanan; akar = simpul_dihapus-> Kanan;
akar->induk = NULL; akar-> Induk = NULL;
} )
else lain
if ( simpul_dihapus->induk->kiri == simpul_dihapus ) if (Kiri Induk-> simpul_dihapus-> == simpul_dihapus)
{ (
simpul_dihapus->induk->kiri= simpul_dihapus->kanan; simpul_dihapus-> Kiri Induk-> = simpul_dihapus-> Kanan;
simpul_dihapus->kanan->induk = simpul_dihapus->induk; simpul_dihapus Induk-> Kanan-> = simpul_dihapus-> Induk;
} )
else lain
{ (
simpul_dihapus->induk->kanan = simpul_dihapus->kanan; simpul_dihapus-> Kanan Induk-> = simpul_dihapus-> Kanan;
simpul_dihapus->kanan->induk = simpul_dihapus->induk; simpul_dihapus Induk-> Kanan-> = simpul_dihapus-> Induk;
} )
} )
else lain
{ (
//simpul yang dihapus / / Yang dihapus simpul
// memiliki dua buah subpohon / / Memiliki buah doa subpohon
Kontak * suksesor = simpul_dihapus->kanan; Kontak * suksesor = simpul_dihapus-> Kanan;
//==cari suksesor / / == Suksesor Cari
while ( suksesor->kiri != NULL ) sementara (suksesor-> Kiri! = NULL)
suksesor = suksesor->kiri; suksesor-suksesor => Kiri;
//== putaran suksesor dari pohon / / == Putaran suksesor USING Pohon
if ( suksesor->induk->kiri == suksesor ) if (Kiri Induk-> suksesor-> == suksesor)
{ (
suksesor->induk->kiri = suksesor->kanan; Kiri Induk-> suksesor-> = suksesor-> Kanan;
suksesor->kanan->induk = suksesor->induk; suksesor-> Kanan-> Induk = suksesor-> Induk;
if(suksesor->kanan==NULL) if (Kanan suksesor-> == NULL)
suksesor->induk->kiri=NULL; suksesor-> Induk-> Kiri = NULL;
} )
else lain
{ (
suksesor->induk->kanan = suksesor->kanan;// Kanan Induk-> suksesor-> = suksesor-> Kanan; / /
suksesor->kanan->induk = suksesor->induk;// Induk Kanan-> suksesor-> = suksesor-> Induk; / /
} )
//data pada suksesor dikopikan ke simpul yang akan dihapus / / Data PADA suksesor dikopikan Ke simpul Yang dihapus akan keanaeragaman
strcpy(simpul_dihapus->nama,suksesor->nama); strcpy (Nama simpul_dihapus->, suksesor-> Nama);
strcpy(simpul_dihapus->telp,suksesor->telp); strcpy (telp simpul_dihapus-> telp, suksesor->);
//ubah simpul yang ditunjuk suksesor ke simpul yang nantinyaa akan dihapus / / Yang ditunjuk Ke ubah simpul suksesor dihapus nantinyaa Yang akan keanaeragaman simpul
simpul_dihapus = suksesor; simpul_dihapus = suksesor;
} )
delete simpul_dihapus; menghapus simpul_dihapus;
return (1); kembali (1);
} )
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////////////////////
// cari() => untuk mencari node berdasarkan parameter nama / / Cari () => untuk Artikel node Mencari berdasarkan Nama parameter
// nilai balik NULL=data tidak ketemu / / Value Balik NULL = data tidak ketemu
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////////////////////
Kontak * Kontak::cari( Kontak * simpul, char *nama ) Kontak * Kontak:: Cari (Kontak * simpul, char * Nama)
{ (
if ( simpul == NULL ) if (simpul == NULL)
return ( NULL ); return (NULL);
else lain
if ( strcmp(nama,simpul->nama)==0 ) if (strcmp (Nama, Nama simpul->) == 0)
return simpul; kembali simpul;
else lain
if (strcmp( nama ,simpul->nama )<0) if (strcmp (Nama, Nama simpul->) <0)
return ( cari( simpul->kiri, nama ) ); kembali (Cari (simpul-> Kiri, Nama));
else lain
return ( cari( simpul->kanan, nama ) ); kembali (Cari Kanan (simpul->, Nama));
} )
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////////////////////
// cari() / / Cari ()
// nilai balik 0. / / Value Balik 0. data tidak ketemu Data tidak ketemu
// 1. / / 1. data ketemu data ketemu
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////////////////////
int Kontak::cari(char *nama) int Kontak:: Cari (char * Nama)
{ (
if(cari(akar,nama)==NULL) if (Cari (Akar, Nama) == NULL)
return 0; return 0;
else lain
return 1; return 1;
} )
gui & menu.cpp (implementasi tampilan untuk program) gui & menu.cpp (Gmail program untuk Artikel Implementasi)
#include <iostream.h> # Include <iostream.h>
#include <conio.h> # Include <conio.h>
#include <string.h> # Include <string.h>
# include "bt.h" # Include "bt.h"
# include <string.h> # Include <string.h>
# include <stdlib.h> # Include <stdlib.h>
# include <windows.h> # Include <windows.h>
# include <iomanip> # Include <iomanip>
#define WAIT(x) Sleep((long)(x)); # Define WAIT (x) tidur ((lama) (x));
#define SECOND 1000 # Define KEDUA 1000
//================================================================================ //================================================ ================================
//fungsi menu untuk menampilkan menu program / / Menu untuk Artikel Fungsi menampilkan program menu
//================================================================================ //================================================ ================================
void Kontak::Menu() void Kontak:: Menu ()
{ (
Kontak ob_kontak; Kontak ob_kontak;
char perintah; char perintah;
char Nama[40]; char Nama [40];
char telpon[20]; [Telpon char 20];
HANDLE hConsole; MENANGANI hConsole;
hConsole = GetStdHandle( STD_OUTPUT_HANDLE ); hConsole = GetStdHandle (STD_OUTPUT_HANDLE);
do melakukan
{ (
textbackground( 15 ); textbackground (15);
clrscr(); clrscr(); clrscr (); clrscr ();
textbackground( 15 ); textbackground (15);
_setcursortype( 0 ); _setcursortype (0);
HANDLE hConsole; MENANGANI hConsole;
hConsole = GetStdHandle( STD_OUTPUT_HANDLE ); hConsole = GetStdHandle (STD_OUTPUT_HANDLE);
clrscr(); clrscr ();
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
//garis tepi atas----------------------- / / Garis tepi ----------------------- Atas
gotoxy( 2, 2 ); gotoxy (2, 2);
cout << char( 201 ); cout <<char (201);
for ( int i = 1; i <= 76; i++ ) for (int i = 1; i <= 76; i + +)
{ (
cout << char( 205 ); cout <<char (205);
} )
cout << char( 187 ); cout <<char (187);
//garis tepi kiri dan kanan------------- / / Garis tepi Kiri Dan Kanan -------------
for ( int t = 3; t <= 23; t++ ) for (int t = 3; <t = 23; t + +)
{ (
gotoxy( 2, t ); cout << char( 186 ) << endl; gotoxy (2 t); cout <<char (186) <<endl;
} )
//tepi kanan---------------------------- / / Kanan tepi ----------------------------
for ( int t = 3; t <= 23; t++ ) for (int t = 3; <t = 23; t + +)
{ (
gotoxy( 79, t ); cout << char( 186 ) << endl; gotoxy (79, t); cout <<char (186) <<endl;
} )
//bawah--------------------------------- / / Arus bawah ---------------------------------
gotoxy( 0, 0 ); gotoxy (0, 0);
cout << " " << char( 200 ); cout <<"" <<char (200);
for ( int i = 1; i <= 76; i++ ) untuk (i int = 1; i <= 76; i + +)
{ (
cout << char( 205 ); cout <<char (205);
} )
cout << char( 188 ); cout <<char (188);
//batas tengah(atas)-------------------- / / Batas Tengah Atas ()--------------------
SetConsoleTextAttribute( hConsole, 127 ); SetConsoleTextAttribute (hConsole, 127);
gotoxy( 11, 7 ); gotoxy (11, 7);
cout << " " << char( 204 ); cout <<"" <<char (204);
for ( int i = 1; i <= 56; i++ ) for (int i = 1; i <= 56; i + +)
{ (
cout << char( 205 ); cout <<char (205);
} )
cout << char( 185 ); cout <<char (185);
gotoxy( 12, 7 ); cout << char( 201 ); gotoxy (12, 7); cout <<char (201);
gotoxy( 69, 7 ); cout << char( 187 ); gotoxy (69, 7); cout <<char (187);
//batas tengah(tengah)------------------ / / Batas Tengah ()------------------ Tengah
SetConsoleTextAttribute( hConsole, 127 ); SetConsoleTextAttribute (hConsole, 127);
gotoxy( 11, 15 ); gotoxy (11, 15);
cout << " " << char( 204 ); cout <<"" <<char (204);
for ( int i = 1; i <= 56; i++ ) for (int i = 1; i <= 56; i + +)
{ (
cout << char( 205 ); cout <<char (205);
} )
cout << char( 200 ); cout <<char (200);
//batas tenga kiri/kanan---------------- / / Batas tenga kiri/kanan----------------
for ( int j = 8; j <= 18; j++ ) for (int j = 8; j <18 =; j + +)
{ (
gotoxy( 12, j ); cout << char( 186 ); gotoxy (12, j); cout <<char (186);
} )
for ( int j = 8; j <= 18; j++ ) for (int j = 8; j <18 =; j + +)
{ (
gotoxy( 69, j ); cout << char( 186 ); gotoxy (69, j); cout <<char (186);
} )
//batas tengah(bawah)-------------------- / / Batas Tengah ()-------------------- Arus bawah
SetConsoleTextAttribute( hConsole, 127 ); SetConsoleTextAttribute (hConsole, 127);
gotoxy( 12, 19 ); gotoxy (12, 19);
cout << char( 200 ); cout <<char (200);
for ( int i = 1; i <= 56; i++ ) for (int i = 1; i <= 56; i + +)
{ (
cout << char( 205 ); cout <<char (205);
} )
cout << char( 185 ); cout <<char (185);
gotoxy( 12, 19 ); cout << char( 200 ); gotoxy (12, 19); cout <<char (200);
gotoxy( 69, 19 ); cout << char( 188 ); gotoxy (69, 19); <cout <char (188);
//desain Cover--------------------------- / / Desain Cover ---------------------------
SetConsoleTextAttribute( hConsole, 120 ); SetConsoleTextAttribute (hConsole, 120);
//atas / / Atas
for ( int i = 3; i <= 6; i++ ) for (int i = 3; i <6 =; i + +)
{ (
gotoxy( 3, i ); cout << "****************************************************************************"; gotoxy (3, i); cout <<"*************************************** *************************************";
} )
//kiri / / Kiri
for ( int i = 7; i <= 19; i++ ) for (int i = 7; i <= 19; i + +)
{ (
gotoxy( 3, i ); cout << "*********"; gotoxy (3, i); cout <<"*********";
} )
//knan / / Knan
for ( int i = 7; i <= 19; i++ ) for (int i = 7; i <= 19; i + +)
{ (
gotoxy( 70, i ); cout << "*********"; gotoxy (70, i); cout <<"*********";
} )
//bwh / / BWH
for ( int i = 20; i <= 23; i++ ) for (int i = 20; i <23 =; i + +)
{ (
gotoxy( 3, i ); cout << "****************************************************************************"; gotoxy (3, i); cout <<"*************************************** *************************************";
} )
SetConsoleTextAttribute( hConsole, 113 ); SetConsoleTextAttribute (hConsole, 113);
gotoxy( 13, 16 ); gotoxy (13, 16);
{ (
cout << "[PHONENUMBER SIMULATION WITH BINARY TREE DATA STRUCTURE]" << endl; cout <<"[PHONENUMBER DENGAN SIMULASI STRUKTUR DATA POHON BINARY]" <<endl;
} )
gotoxy( 28, 18 ); gotoxy (28, 18);
{ (
cout << "[ BY : ZIA, ERWIN, MUSLIM ]" << endl; cout <<"[OLEH: Zia, Erwin, MUSLIM]" <<endl;
} )
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
gotoxy( 13, 9 ); gotoxy (13, 9);
{ (
cout << "00 00 0000 00000 00000 00000 0000 00000 00000 00000" << endl; cout <<"00 00 0000 0000 0 00000 00000 0000 00000 00000 00000 <<endl;
} )
gotoxy( 13, 10 ); gotoxy (13, 10);
{ (
cout << " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0" << endl; cout <<"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0" <<endl;
} )
gotoxy( 13, 11 ); gotoxy (13, 11);
{ (
cout << " 0 000 0 0 00000 0 00000 0000 00000 00000 00000" << endl; cout <<"0 000 0 0 00000 0 00000 0000 00000 00000 00000" <<endl;
} )
gotoxy( 13, 12 ); gotoxy (13, 12);
{ (
cout << " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0" << endl; cout <<"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0" <<endl;
} )
gotoxy( 13, 13 ); gotoxy (13, 13);
{ (
cout << "00 00 0000 0 0 0 0 0 0000 0 0 00000 00000" << endl; cout <<"00 00 0000 0 0 0 0 0 0000 0 0 00000 00000" <<endl;
} )
SetConsoleTextAttribute( hConsole, 116 ); SetConsoleTextAttribute (hConsole, 116);
gotoxy( 3, 24 ); cout << "'L'"; gotoxy (3, 24); cout <<"'L'";
// gotoxy( 33, 24 ); cout << "'*'"; / / Gotoxy (33, 24); cout <<"'*'";
gotoxy( 70, 24 ); cout << "'E'"; gotoxy (70, 24); cout <<"'E'";
SetConsoleTextAttribute( hConsole, 116 ); SetConsoleTextAttribute (hConsole, 116);
gotoxy( 3, 2 ); cout << "'A'"; gotoxy (3, 2); cout <<"'A'";
gotoxy( 33, 2 ); cout << "'D'"; gotoxy (33, 2); cout <<"'D'";
gotoxy( 70, 2 ); cout << "'S'"; gotoxy (70, 2); cout <<"'S'";
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
gotoxy( 6, 24 ); cout << "ist"; gotoxy (6, 24); cout <<"ist";
// gotoxy( 36, 24 ); cout << "***";/// / / Gotoxy (36, 24); cout <<"***";///
gotoxy( 73, 24 ); cout << "xit"; gotoxy (73, 24); cout <<"Keluar";
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
gotoxy( 6, 2 ); cout << "dd"; gotoxy (6, 2); cout <<"dd";
gotoxy( 36, 2 ); cout << "elete"; gotoxy (36, 2); cout <<"elete";
gotoxy( 73, 2 ); cout << "earch"; gotoxy (73, 2); cout <<"earch";
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
perintah = toupper( getch() ); perintah = toupper (getch ());
switch ( perintah ) switch (perintah)
{ (
case 'A': huruf 'A':
atas : Atas:
Menu_input(); Menu_input ();
Border(); Perbatasan ();
SetConsoleTextAttribute( hConsole, 116 ); SetConsoleTextAttribute (hConsole, 116);
gotoxy( 35, 6 ); cout << "TAMBAH KONTAK"; gotoxy (35, 6); cout <<"Tambah Kontak";
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
gotoxy( 21, 13 ); gotoxy (21, 13);
cout << "NAMA : "; cout <<"NAMA:";
gotoxy( 21, 15 ); gotoxy (21, 15);
cout << "TELPON : "; cout <<"telpon:";
gotoxy( 32, 13 ); gotoxy (32, 13);
_setcursortype( 1 ); _setcursortype (1);
//=========== //===========
cin.getline( Nama, 40 ); cin.getline (Nama, 40);
//=========== //===========
gotoxy( 32, 15 ); gotoxy (32, 15);
_setcursortype( 1 ); _setcursortype (1);
//=========== //===========
cin.getline( telpon, 20 ); cin.getline (telpon, 20);
if ( ob_kontak.cari( Nama ) ) if (ob_kontak.cari (Nama))
{ (
Wait_box(); Wait_box ();
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
gotoxy( 21, 13 ); cout << " KONTAK SUDAH ADA!!"; gotoxy (21, 13); cout <<"Kontak SUDAH ADA!"!;
break; break;
} )
ob_kontak.tambah( Nama, telpon ); ob_kontak.tambah (Nama, telpon);
//============= //=============
Wait_box(); Wait_box ();
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
gotoxy( 21, 13 ); gotoxy (21, 13);
cout << " ....UPDATING DATA...."; cout <<"DATA UPDATING .... ....";
WAIT( 0.1 * SECOND ); WAIT (0,1 KEDUA *);
Wait_box(); Wait_box ();
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
gotoxy( 21, 13 ); cout << " TAMBAH LAGI ? = [Y/N] "; gotoxy (21, 13); cout <<"Tambah Lagi? = [Y / N]";
char jawab; char jawab;
jawab = toupper( getch() ); jawab = toupper (getch ());
if ( jawab == 'Y' || jawab == 'y' ) if (jawab == 'jawab | | Y' == 'y')
goto atas; goto Atas;
gotoxy( 21, 13 ); gotoxy (21, 13);
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
cout << " PRESS\"ENTER KEY\" TO CONTINUE"; cout <<"SIARAN \" ENTER KUNCI \ "ATAS LANJUTKAN";
break; break;
case 'D': huruf 'D':
ulang: memprogram ulang:
clrscr(); clrscr ();
Border(); Perbatasan ();
cout << endl << endl; cout <<endl <<endl;
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
gotoxy( 35, 6 ); cout << "HAPUS KONTAK"; gotoxy (35, 6); cout <<"HAPUS Kontak";
gotoxy( 16, 6 ); gotoxy (16, 6);
SetConsoleTextAttribute( hConsole, 116 ); SetConsoleTextAttribute (hConsole, 116);
cout << "NAMA"; cout <<"NAMA";
gotoxy( 56, 6 ); gotoxy (56, 6);
cout << "NOMOR TELPON"; cout <<"Nomor telpon";
cout << endl << endl; cout <<endl <<endl;
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
ob_kontak.tampil(); ob_kontak.tampil ();
cout << endl << " ======================================================================\n"; cout <<endl <<"=========================================== =========================== \ n ";
cout << " NAMA YANG INGIN DIHAPUS : "; cout <<"NAMA YANG DIHAPUS Ingin:";
cin.getline( Nama, 40 ); cin.getline (Nama, 40);
if ( !ob_kontak.cari( Nama ) ) if (! ob_kontak.cari (Nama))
{ (
Menu_input(); Menu_input ();
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
gotoxy( 21, 13 ); cout << " KONTAK TIDAK ADA!!"; gotoxy (21, 13); cout <<"TIDAK ADA Kontak!"!;
gotoxy(21,15);cout<< "...SESUAIKAN DENGAN NAMA PADA KONTAK..."; gotoxy (21,15); cout <<"NAMA Artikel Baru ... SESUAIKAN PADA Kontak ...";
break; break;
} )
ob_kontak.hapus( Nama ); ob_kontak.hapus (Nama);
Wait_box(); Wait_box ();
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
gotoxy( 21, 13 ); cout << " ....UPDATING DATA...."; gotoxy (21, 13); cout <<"DATA UPDATING .... ....";
WAIT( 1 * SECOND ); WAIT (1 KEDUA *);
Wait_box(); Wait_box ();
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
gotoxy( 21, 13 ); cout << " HAPUS LAGI ? = [Y/N] "; gotoxy (21, 13); cout <<"HAPUS Lagi? = [Y / N]";
jawab = toupper( getch() ); jawab = toupper (getch ());
if ( jawab == 'Y' || jawab == 'y' ) if (jawab == 'jawab | | Y' == 'y')
goto ulang; goto perlu memprogram ulang;
gotoxy( 21, 13 ); gotoxy (21, 13);
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
cout << " PRESS\"ENTER KEY\" TO CONTINUE"; cout <<"SIARAN \" ENTER KUNCI \ "ATAS LANJUTKAN";
break; break;
case 'E': kasus 'E':
ob_kontak.Keluar(); ob_kontak.Keluar ();
getch(); getch ();
break; break;
case 'L': huruf 'L':
clrscr(); clrscr ();
Border(); Perbatasan ();
cout << endl << endl; cout <<endl <<endl;
gotoxy( 16, 6 ); gotoxy (16, 6);
SetConsoleTextAttribute( hConsole, 116 ); SetConsoleTextAttribute (hConsole, 116);
cout << "NAMA"; cout <<"NAMA";
gotoxy( 56, 6 ); gotoxy (56, 6);
cout << "NOMOR TELPON"; cout <<"Nomor telpon";
cout << endl << endl; cout <<endl <<endl;
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
ob_kontak.tampil(); ob_kontak.tampil ();
// getch(); / / Getch ();
break; break;
case 'S': huruf 'S':
char dicari[40]; [Dicari char 40];
Border2(); Border2 ();
SetConsoleTextAttribute( hConsole, 116 ); SetConsoleTextAttribute (hConsole, 116);
gotoxy( 35, 6 ); cout << "CARI KONTAK"; gotoxy (35, 6); cout <<"Cari Kontak";
SetConsoleTextAttribute( hConsole, 112 ); SetConsoleTextAttribute (hConsole, 112);
gotoxy( 21, 13 ); gotoxy (21, 13);
cout << "NAMA : "; cout <<"NAMA:";
gotoxy( 32, 13 ); gotoxy (32, 13);
_setcursortype( 1 ); _setcursortype (1);
gets( dicari ); mendapat (dicari);
//cout << endl; / / Cout <<endl;
clrscr(); clrscr ();
Border(); Perbatasan ();
cout << endl << endl; cout <<endl <<endl;
SetConsoleTextAttribute( hConsole, 116 ); SetConsoleTextAttribute (hConsole, 116);
gotoxy( 16, 6 ); gotoxy (16, 6);
cout << "NAMA"; cout <<"NAMA";
gotoxy( 56, 6 ); gotoxy (56, 6);
cout << "NOMOR TELPON"; cout <<"Nomor telpon";
cout << endl << endl; cout <<endl <<endl;
ob_kontak.cetak_search( dicari ); ob_kontak.cetak_search (dicari);
break; break;
} )
getch(); getch ();
cin.ignore( 80, '\n' ); cin.ignore (80, '\ n');
} )
while ( perintah != 'E' ); sementara (perintah! = 'E');
} )
================================================= =================================================
main.cpp main.cpp
#include <iostream.h> # Include <iostream.h>
#include <conio.h> # Include <conio.h>
#include <string.h> # Include <string.h>
# include "bt.h" # Include "bt.h"
void main() void main ()
{ (
clrscr(); clrscr ();
Kontak a; Kontak suatu;
cin>>a; cin>> a;
cout<<a; Cout <<a;
getch(); getch ();
} )
