// List Berkait tunggal
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
struct dt_teman{
char nama[20];
char alamat[30];
char telepon[12];
struct dt_teman *berikut;
};
struct dt_teman *kepala;
void menu();
void isi_data();
void ubah_data();
void hapus_data();
void tampil_data();
main()
{
/* menginisialisasi list berkait*/
kepala=NULL;
char pilih='0';
while (pilih != '5')
{
menu();
pilih=getche();
switch(pilih)
{
case '1':
isi_data();
break;
case '2':
ubah_data();
break;
case '3':
hapus_data();
break;
case '4':
tampil_data();
break;
case '5':
break;
}
}
return(0);
}
/* menampilkan menu */
void menu()
{
printf("----------------------------\n");
printf(" MENU \n");
printf("----------------------------\n");
printf("1. mengisi data baru\n");
printf("2. mengubah data\n");
printf("3. menghapus data\n");
printf("4. menampilkan data ke layar\n");
printf("5. selesai\n");
printf("----------------------------\n");
printf("pilihan anda: ");
}
/* mengisi data baru*/
void isi_data()
{
struct dt_teman *p;
char nama[20];
printf("\n\n");
printf("nama ($- berhenti) : "); gets(nama);
while (nama[0] !='$'){
p=new struct dt_teman;
strcpy(p->nama,nama);
printf("alamat : ");gets(p->alamat);
printf("nomor telepon : ");gets(p->telepon);
p->berikut=kepala;
kepala=p;
printf("\n nama ($-berhenti): ");gets(nama);
}
}
/*mengubah data*/
void ubah_data()
{
char jawab, unama[20];
struct dt_teman *p;
printf("\n");
printf("nama yang akan di ubah : ");scanf("%s",&unama);
/*cari data*/
p=kepala;
while (p&&strcmp(unama,p->nama))
p=p->berikut;
if(!p){
printf("data tersebut tidak ada...\n");
getch();
}
else{
printf("\n\n data lama \n");
printf("--------------------------------------------\n");
printf("nama : %s\n",p->nama);
printf("alamat : %s\n",p->alamat);
printf("nomor telepon : %s\n",p->telepon);
printf("\n\n data baru \n");
printf("--------------------------------------------\n");
printf("nama : %s\n",p->nama);
printf("alamat : ");scanf("%s",&p->alamat);
printf("nomor telepon : ");scanf("%s",&p->telepon);
}
}
/*menghapus data*/
void hapus_data()
{
char jawab,hnama[20];
struct dt_teman *p1,*p2;
printf("\n");
printf("nama yang akan dihapus : ");scanf("%s",&hnama);
/*cari data*/
p2=NULL;
p1=kepala;
while(p1&&strcmp(hnama,p1->nama))
{
p2=p1;
p1=p1->berikut;
}
if (!p1)
printf("data tersebut tidak ada...\n");
else{
printf("\n\n data yang akan dihapus\n");
printf("------------------------------\n");
printf("nama : %s \n",p1->nama);
printf("alamat : %s \n",p1->alamat);
printf("nomor telepon : %s \n",p1->telepon);
printf("\n\n dihapus (Y/T)?");jawab=getche();
if (jawab=='Y'||jawab=='y')
{
if(!p2)
kepala=p1->berikut;
else
p2->berikut=p1->berikut;
delete p1;
}
}
}
/* membaca data structure dari file */
void tampil_data()
{
int i=1;
struct dt_teman *p;
/*baca data mulai dari kepala*/
p=kepala;
/*mencetak judul*/
printf("\n\n");
printf(" Data Teman Sekolah \n");
printf("-------------------------------------------------------------------\n");
printf("No. Nama Alamat Telepon \n");
printf("-------------------------------------------------------------------\n");
while(p)
{
printf("%2d. %-20s %-30s %-30s\n",i++,p->nama,p->alamat,p->telepon);
p=p->berikut;
}
printf("--------------------------------------------------------------------\n");
getch();
}





