Friday, May 11, 2012

Program C Simulasi Antrian (Praktikum ASD)

MODUL V LINKED LIST

Buatlah sebuah program simulasi antrian peminjaman buku perpustakaan. Kondisinya adalah sebagai berikut:
  • - Jika belum ada antrian, peminjam yang masuk berada di urutan terdepan
  • - Peminjam yang baru masuk harus mengantri di belakang antrian yang sudah ada
  • - Peminjam dapat keluar dari antrian kapan saja
  • - Petugas melayani peminjaman dari peminjam yang mengantri paling depan. Setelah meminjam, peminjam keluar dari antrian


SOURCE CODE :

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>


struct antrian{
        int nomor;
        char nama[30];
        char buku[40];
        struct antrian *next;       
};

antrian *pHead = NULL;//inisialisasi linkedlist

//LIST FUNGSI YANG DIGUNAKAN
void cetak();
void outantrian();
void melayani();
void antrianbaru(antrian *pNew, int counter);
antrian *alokasiNodeBaru();
void bebaskan();

int main(){
    int counter=1;
    antrian *pNew;
    char pilih;
    do{system("cls");
    printf("\t\t\tPROGRAM SIMULASI ANTRIAN\n\n");
    printf("[1].antrian baru\n");
    printf("[2].keluar dari antrian\n");
    printf("[3].transaksi peminjaman\n");
    printf("[4].tampilkan antrian\n");
    printf("[5].exit\n");
    printf("pilihan: "); scanf("%c",&pilih);fflush(stdin);
    if(pilih=='1'){pNew=alokasiNodeBaru();
                   antrianbaru(pNew,counter);
                   counter++;
    }
    else if(pilih=='2'){outantrian();}
    else if(pilih=='3'){melayani();}
    else if(pilih=='4'){cetak();}
}while(pilih!='5');
bebaskan();
}


//fungsi untuk menampilkan list
void cetak(){
     antrian *pWalker = pHead;
     while(pWalker!=NULL){
         printf("nomor antrian : %d\n",pWalker->nomor); fflush(stdin);
         printf("nama          : %s\n",pWalker->nama); fflush(stdin);
         printf("judul buku    : %s\n",pWalker->buku); fflush(stdin);
         pWalker=pWalker->next;       
     }
     printf("\n");
     getch();
}



//pengunjung keluar dari antrian
void outantrian(){
     antrian *pCari,*pPre;int hapus;
     pCari=pHead;
     pPre=pHead;
     cetak();
     printf("nomor antrian yang ingin keluar dari antrian: "); scanf("%d",&hapus);
     while(pCari!=NULL && pCari->nomor!=hapus){
                               pCari=pCari->next;
                               while(pPre->next!=pCari){
                               pPre=pPre->next; } 
                               }
     if(pCari==pHead){pHead=pHead->next;
                      free(pCari);
                      }
    
     else{                     
     pPre->next=pCari->next;
     free(pCari);
     }
}



//fungsi melayani antrian = hapus awal
void melayani(){
     antrian *pHapus;
     pHapus=pHead;
     pHead=pHead->next;
     free(pHapus);
}

//fungsi antrian baru
void antrianbaru(antrian *pNew, int counter){
antrian *pEnd;
pNew->nomor=counter;
printf("masukkan nama         : "); scanf("%[^\n]",pNew->nama); fflush(stdin);
printf("masukkan judul buku   : "); scanf("%[^\n]",pNew->buku); fflush(stdin);

if(pHead == NULL){
              pNew->next = pHead;
              pHead = pNew;
     }
else {
     pEnd=pHead;//inisialisasi
     while(pEnd->next!=NULL){//untuk mencari node terakhir
                         pEnd=pEnd->next; }
     pNew->next=NULL;
     pEnd->next=pNew;
     }
}




//fungsi alokasi node baru
antrian *alokasiNodeBaru(){
  antrian *pNew = NULL;
  pNew = (antrian *) malloc(sizeof(antrian));
  return(pNew); //mengembalikan alamat yang sudah dipesan ke pemanggil
}

//fungsi free memori
void bebaskan(){
     antrian *pFree=pHead;
     while(pFree!=NULL){
                        pHead=pHead->next;
                        free(pFree);
                        pFree=pHead;
                        }
     }



0 comments:

Post a Comment