Anda di halaman 1dari 3

MENU MAHASISWA LINEAR SINGLY LINKED LIST

#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
#include "malloc.h"
#include "ctype.h"
#include "string.h"
#define pj_no 10
#define pj_nama 20
#define enter 13

struct simpul_siswa { char nomor[pj_no+1];


char nama[pj_nama+1];
struct simpul_siswa *lanjutan;
};

/* DEKLARASI VARIABEL GLOBAL */


struct simpul_siswa *ptr_kepala=NULL; //ujung link list
struct simpul_siswa *ptr_pos_data; //posisi data
struct simpul_siswa *ptr_pendahulu; //posisi pendahulu dari ptr_pos_data

/* DEKLARASI FUNGSI */
void pemasukan_data(void);
void masukan_string(char *keterangan, char *masukan, int panjang_max);
void tampilkan_data(void);
void cari_data(char *nama);
void hapus_data(void);
void menu_pilihan(void);

/* ------ PROGRAM UTAMA ------ */


void main()
{ clrscr();
for( ; ;)
{ menu_pilihan();
puts("\nTekan Enter untuk melanjutkan!");
while(getch()!=enter);
puts("");
}

}
/* ------- AKHIR PROGRAM UTAMA -------*/

void pemasukan_data(void)
{ clrscr();
char jawaban;
struct simpul_siswa *ptr_baru;
do
{ ptr_baru=(struct simpul_siswa*)malloc(sizeof(struct simpul_siswa));
if(ptr_baru)
{ masukan_string("NIM Mahasiswa=", ptr_baru->nomor, pj_no);
masukan_string("Nama Mahasiswa=", ptr_baru->nama, pj_nama);
ptr_baru->lanjutan=ptr_kepala;
ptr_kepala=ptr_baru;
printf("\nMemasukan data lagi? (Y/T)");
do
jawaban=toupper(getch());

1
while(!(jawaban=='Y'||jawaban=='T'));
printf("%c\n",jawaban);
}
else
{ puts("Memori tidak cukup");
break;
}
}
while(jawaban=='Y');
}

void masukan_string(char *keterangan, char*masukan, int panjang_max)


{ char st[256];
do
{ printf(keterangan);
gets(st);
if(strlen(st)>panjang_max)
printf("Terlalu panjang.Maksimum %i karakter\n",panjang_max);
}
while(strlen(st)>panjang_max);
strcpy(masukan,st);
}

void tampilkan_data(void)
{ struct simpul_siswa *ptr_sementara;
clrscr();
int no;
puts("\n Isi Data=");
ptr_sementara=ptr_kepala;
printf("\n===========================================\n");
printf(" No. NIM NAMA\n");
printf("\n===========================================\n");
no=1;
while(ptr_sementara)
{ printf("%i %s %s \n",no, ptr_sementara->nomor, ptr_sementara->nama);
ptr_sementara=ptr_sementara->lanjutan;
no++;
}
printf("\n===========================================\n");
}

/* untuk mencari nama pada daftar berantai


>> jika ditemukan, maka:
**ptr_pos_data menunjuk simpul yg berisi nama yang dicari.
**ptr_pendahulu menunjuk simpul pendahulu dari simpul posisi
nama yang dicari. Jika berisi NULL, menyatakan bahwa ptr_pendahulu
menunjuk simpul yg ditunjuk ptr_kepala.
>> jika nama tidak ditemukan, maka ptr_pos_data berisi NULL.
*/

void cari_data(char*nama)
{ clrscr();
ptr_pendahulu=NULL;
ptr_pos_data=ptr_kepala;
while(ptr_pos_data)
{ if(strcmp(nama,ptr_pos_data->nama)!=0)

2
{ ptr_pendahulu=ptr_pos_data;
ptr_pos_data=ptr_pos_data->lanjutan;
}
else
break;
}
}

void hapus_data()
//Untuk manghapus simpul yg ada pd daftar berantai
{ char nama[21];
clrscr();
masukan_string("Masukan nama yang akan dihapus;", nama, 20);
cari_data(nama);
if(ptr_pos_data==NULL)
puts("Nama tak ditemukan pada daftar berantai");
else
{ //proses penghapusan dimulai
if(ptr_pendahulu==NULL)
ptr_kepala=ptr_kepala->lanjutan; //simpul ujung yg akan dihapus
else
ptr_pendahulu->lanjutan=ptr_pos_data->lanjutan;
free(ptr_pos_data); //hapus yg ditunjuk oleh ptr_pos_data
puts("OK.Penghapusan selesai");
}
}

void menu_pilihan(void)
{ char pilihan; clrscr();
gotoxy(20,11); puts("=======MENU PILIHAN=========");
gotoxy(20,12); puts("| 1. Memasukkan Data |");
gotoxy(20,13); puts("| 2. Menghapus Data |");
gotoxy(20,14); puts("| 3. Menampilkan Data |");
gotoxy(20,15); puts("| 4. Selesai |");
gotoxy(20,16); puts("============================");
gotoxy(20,17); printf("Pilihan Anda=");
scanf("%c",&pilihan);

switch(pilihan)
{ case '1' : pemasukan_data();break;
case '2' : hapus_data();break;
case '3' : tampilkan_data();break;
case '4' : exit(0);break;
default: printf("pilihan salah!"); //selesai
}
}