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;
}
}
#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