Program untuk menyimpan data mahasiswa:
#include < stdio.h >
#include < stdlib.h >
#include < string.h >
#include < conio.h >
// Definisi struct mahasiswa untuk menyimpan data mahasiswa
struct mahasiswa {
char nim[20];
char nama[50];
char alamat[100];
float ipk;
struct mahasiswa *next;
};
typedef struct mahasiswa mahasiswa;
/*===================== DEKLARASI FUNGSI =============================*/
/* =============== Fungsi Helper & Linked List ===================== */
// fungsi untuk mengalokasikan data mahasiswa ke dalam memori dinamis
mahasiswa *alokasiNodeBaru(void);
// fungsi untuk menambah node dalam linked list
void tambahNode(mahasiswa **head, mahasiswa *pPre, mahasiswa *pNew); 
// fungsi untuk menghapus node dalam linked list
void hapusNode(mahasiswa **head, mahasiswa *pPre, mahasiswa *pCur); 
// fungsi untuk menghapus semua node dalam linked list
void hapusSemuaNode(mahasiswa *head);
/* =============== Fungsi CRUD untuk data mahasiswa =============== */
// fungsi untuk menambah data mahasiswa di awal linked list
void tambahAwal(mahasiswa **head);
// fungsi untuk menambah data mahasiswa di tengah linked list 
void tambahTengah(mahasiswa **head); 
// fungsi untuk mencetak semua data mahasiswa
void cetakSemuaData(mahasiswa *head); 
// fungsi untuk menghapus data mahasiswa
void hapusData(mahasiswa **head); 
// fungsi untuk mencari data mahasiswa berdasarkan nim
void searchData(mahasiswa **head);
int main()
{
mahasiswa *head;
char pilih;
head = NULL;
do{
system("cls");
printf ("Masukkan Pilihan\n");
printf ("1. Tambahkan data di awal\n");
printf ("2. Tambah data di tengah list\n");
printf ("3. Hapus data\n");
printf ("4. Cetak isi list\n");
printf ("5. Search data\n");
printf ("Masukkan pilihan (tekan Q untuk keluar) : "); pilih=getche();
if (pilih == '1')tambahAwal(&head);
else if (pilih == '2')tambahTengah(&head);
else if (pilih == '3')hapusData(&head);
else if (pilih == '4')cetakSemuaData(head);
else if (pilih == '5')searchData(&head);
pilih=getch();
}while (pilih != 'q' || pilih !='Q'); hapusSemuaNode(head);
}
/*========================= IMPLEMENTASI FUNGSI ==================== */
// fungsi untuk mengalokasikan data mahasiswa ke dalam memori dinamis
mahasiswa *alokasiNodeBaru(void){ 
mahasiswa *ptr; 
ptr = (mahasiswa *)malloc(sizeof(mahasiswa)); 
return(ptr); 
}
// fungsi untuk menambah node dalam linked list
void tambahNode(mahasiswa **head, mahasiswa *pPre, mahasiswa *pNew){ 
if (pPre == NULL){ 
//tambah node di awal atau ke dalam linked list kosong
pNew -> next = *head; 
*head = pNew;
} else { 
//tambah node di tengah atau akhir linked list
pNew -> next = pPre -> next; 
pPre -> next = pNew; 
} 
}
// fungsi untuk menghapus node dalam linked list 
void hapusNode(mahasiswa **head, mahasiswa *pPre, mahasiswa *pCur) 
{ 
// hapus node di awal linked list
if (pPre == NULL) {
*head = pCur -> next; 
// hapus node di tengah atau akhir linked list   
}else{ 
pPre -> next = pCur -> next;
}      
free(pCur); 
}
// fungsi untuk menghapus semua node dalam linked list
void hapusSemuaNode(mahasiswa *head){ 
mahasiswa *pTemp; 
while(head != NULL){ 
pTemp = head; 
head = head->next; 
free(pTemp); 
} 
}
// fungsi untuk mencetak semua data mahasiswa
void cetakSemuaData(mahasiswa *head){ 
mahasiswa *pWalker; 
system("cls");
pWalker = head;
int i = 1; 
while (pWalker != NULL){ 
printf("Data mahasiswa ke- %d \n", i);
printf("NIM : %s \n", pWalker->nim);   
printf("Nama :  %s \n", pWalker->nama);   
printf("Alamat  : %s \n", pWalker->alamat);
printf("IPK : %.2f \n\n", pWalker->ipk);
pWalker = pWalker -> next;
i++;
} 
printf("----***----"); 
}
// fungsi untuk menambah data mahasiswa di awal linked list
void tambahAwal(mahasiswa **head){
mahasiswa *pNew = alokasiNodeBaru();
if (pNew != NULL){ fflush(stdin);
printf("Masukkan NIM ? ");  scanf("%[^\n]",&pNew->nim); fflush(stdin);
printf("Masukkan Nama ? "); scanf("%[^\n]",&pNew->nama); fflush(stdin);
printf("Masukkan Alamat ? "); scanf("%[^\n]",&pNew->alamat); fflush(stdin);
printf("Masukkan IPK ? "); scanf("%f", &pNew->ipk);fflush(stdin);
pNew->next = NULL; 
tambahNode(head, NULL, pNew); 
} 
else{ 
printf("Alokasi memori gagal"); 
} 
}
//fungsi untuk menambah data mahasiswa di tengah / akhir list
void tambahTengah(mahasiswa **head){
char carinim[20];
mahasiswa *pSearch, *pTemp;
cetakSemuaData(*head);
printf("\n\nmasukkan nim data sebelum data sisipan: ");scanf("%s",carinim);
pSearch=*head;
while(pSearch!=NULL && strcmp(pSearch->nim,carinim)!=0){
pSearch=pSearch->next;
}
pTemp=alokasiNodeBaru();
if (pSearch == NULL)
{
printf("\nNode tidak ditemukan");
getch();
}
else if (pTemp == NULL)
{
printf ("Alokasi memori gagal");
getch();
}
else{fflush(stdin);
printf("Masukkan NIM ? ");  scanf("%[^\n]",&pTemp->nim); fflush(stdin);
printf("Masukkan Nama ? "); scanf("%[^\n]",&pTemp->nama); fflush(stdin);
printf("Masukkan Alamat ? "); scanf("%[^\n]",&pTemp->alamat); fflush(stdin);
printf("Masukkan IPK ? "); scanf("%f", &pTemp->ipk);fflush(stdin);
pTemp->next = NULL;
tambahNode(head,pSearch,pTemp);
}
}
//fungsi untuk mencari data mahasiswa berdasarkan nim
void searchData(mahasiswa **head){
int counter=1;
char nimcari[20];
mahasiswa *pCur;
pCur=*head;
fflush(stdin);
printf("\nmasukkan nim mahasiswa yang ingin dicari: "); scanf("%s",nimcari);
fflush(stdin);
while(pCur!=NULL && strcmp(pCur->nim,nimcari)!=0){
counter++;
pCur=pCur->next;
}
if(pCur==NULL)printf("\ndata tidak ditemukan\n");
else {cetakSemuaData(*head); 
printf("\ndata mahasiswa dengan nim %s ada pada node ke-%d\n",nimcari,counter);}
}
//fungsi untuk hapus data mahasiswa
void hapusData(mahasiswa **head){
mahasiswa *pCur, *pPre;
char nim[20];
pPre=NULL;
pCur=*head;
cetakSemuaData(*head);
printf("\nmasukkan nim mahasiswa yang ingin dihapus:");scanf("%s",nim);
while(pCur!=NULL && strcmp(pCur->nim,nim)!=0){
pPre=pCur;
pCur=pCur->next;
}
if(pCur==NULL)printf("\ndata tidak ditemukan\n");
else hapusNode(head,pPre,pCur);
}
Thursday, April 5, 2012
Subscribe to:
Post Comments (Atom)
 




 
 

0 comments:
Post a Comment