Stack And Queue


//Stack and Queue
//Nelfrits Christopher 682005021
#include<iostream.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#include<stdio.h>

struct Node{
 char nim[25];
 char nama[25];
 char fak[25];
 Node *next;
};
class Mahasiswa{
 private:
 char nim[25];
 char nama[25];
 char fak[25];
 Node *head;
 Node *tail;
 Node *find(char nim[25]);
 Node *tmp;
 public:
 Mahasiswa();
 ~Mahasiswa();
 int addDataStack(char nim[25],char nama[25],char fak[25]);
 int addDataQueue(char nim[25],char nama[25],char fak[25]);
 int delData(char nim[25]);
 int updateData(char nim[25]);
 int isNull();
 void showAllData();
};
Mahasiswa::Mahasiswa(){
 head = NULL;
 tail = NULL;
 tmp = NULL;
}
Mahasiswa::~Mahasiswa(){
 Node *deletePrt;
 while(head!=NULL){
 deletePrt = head;
 head = head->next;
 delete deletePrt;
 }
}
int Mahasiswa::addDataStack(char nim[25],char nama[25],char fak[25]){
 Node *newNode;
 newNode = new Node;
 if(newNode){
 if(head==NULL){
 newNode->next = head;
 strcpy(newNode->nim,nim);
 strcpy(newNode->nama,nama);
 strcpy(newNode->fak,fak);

 head = newNode;
 tail = newNode;
 }else{
 newNode->next = head;
 strcpy(newNode->nim,nim);
 strcpy(newNode->nama,nama);
 strcpy(newNode->fak,fak);

 head = newNode;
 }
 return 1;
 }else{
 return 0;
 }
}
int Mahasiswa::addDataQueue(char nim[25],char nama[25],char fak[25]){
 Node *newNode;
 newNode = new Node;
 if(newNode){
 if(head==NULL){
 head = newNode;
 strcpy(newNode->nim,nim);
 strcpy(newNode->nama,nama);
 strcpy(newNode->fak,fak);

 newNode->next = NULL;
 tail = newNode;
 }else{
 tail->next = newNode;
 strcpy(newNode->nim,nim);
 strcpy(newNode->nama,nama);
 strcpy(newNode->fak,fak);

 newNode->next = NULL;
 tail = newNode;
 }
 return 1;
 }else{
 return 0;
 }
}
void Mahasiswa::showAllData(){
 clrscr();
 cout<<"\n\n\n\t   --------------------- DATA MAHASISWA---------------------\n\n";
 Node *ptr;
 ptr = head;
 while(ptr!=NULL){
 cout<<"\t                        NIM     : "<<ptr->nim<<"\n";
 cout<<"\t                        NAMA    : "<<ptr->nama<<"\n";
 cout<<"\t                        FAKULTAS: "<<ptr->fak<<"\n";
 cout<<"\t                        --------------------------\n";
 ptr = ptr->next;
 }
 getch();
}
int Mahasiswa::isNull(){
 if(tail==NULL)
 return 1;
 else
 return 0;
}
int Mahasiswa::delData(char nim[25]){
 Node *ptr,*ptr2;
 ptr2 = head;
 ptr = find(nim);
 if(ptr==NULL){
 return 0;
 }else{
 if(ptr==head){
 ptr2 = ptr->next;
 head = ptr2;
 }else{
 tmp->next = ptr->next;
 }
 delete ptr;
 return 1;
 }
}
int Mahasiswa::updateData(char nim[25]){
 Node *ptr;
 ptr = find(nim);
 if(ptr==NULL){
 return 0;
 }else{
 clrscr();
 cout<<"\n\n\n\t   --------------------- INPUT DATA MAHASISWA QUEUE---------------------\n\n";
 cout<<"\t                        NIM: ";
 gets(ptr->nim);
 cout<<"\n\t                        NAMA: ";
 gets(ptr->nama);
 cout<<"\n\t                        FAKULTAS: ";
 gets(ptr->fak);
 return 1;
 }
}

Node* Mahasiswa::find(char nim[25]){
 Node *data;
 data = head;
 while(data!=NULL){
 if(strcmp(data->nim,nim)==0){
 break;
 }
 tmp = data;
 data = data->next;
 }
 return data;
}
void initFace(){
 flushall();
 cout<<"\n\n\n\t   ---------------------DATA MAHASISWA---------------------\n\n";
 cout<<"\t                        1) Tambah Data\n";
 cout<<"\t                        2) Hapus Data\n";
 cout<<"\t                        3) Edit Data\n";
 cout<<"\t                        4) Tampilkan Data\n";
 cout<<"\t                        5) Keluar\n";
 cout<<"\t                           Pilih: ";
}
void main(){
 int opt,opt2,stat;
 char nama[25],fak[25],nim[25],nimDel[25],nimUpd[25];
 Mahasiswa mhs;
 while(1){
 clrscr();
 initFace();
 cin>>opt;
 switch(opt){
 case 1:
 clrscr();
 while(opt==1){
 clrscr();
 cout<<"\n\n\n\t   --------------------- INPUT DATA MAHASISWA---------------------\n\n";
 cout<<"\t                        1) Stack\n";
 cout<<"\t                        2) Queue\n";
 cout<<"\t                        3) Menu\n";
 cout<<"\t                           Pilih: ";
 cin>>opt2;
 if(opt2==1){
 clrscr();
 cout<<"\n\n\n\t   --------------------- INPUT DATA MAHASISWA STACK---------------------\n\n";
 cout<<"\t                        NIM: ";
 gets(nim);
 cout<<"\n\t                        NAMA: ";
 gets(nama);
 cout<<"\n\t                        FAKULTAS: ";
 gets(fak);
 mhs.addDataStack(nim,nama,fak);
 //opt=-1;
 }else if(opt2==2){
 clrscr();
 cout<<"\n\n\n\t   --------------------- INPUT DATA MAHASISWA QUEUE---------------------\n\n";
 cout<<"\t                        NIM: ";
 gets(nim);
 cout<<"\n\t                        NAMA: ";
 gets(nama);
 cout<<"\n\t                        FAKULTAS: ";
 gets(fak);
 mhs.addDataQueue(nim,nama,fak);
 }else if(opt2==3){
 opt=-1;
 break;
 }else{
 break;
 }
 }
 break;
 case 2:
 clrscr();
 if(mhs.isNull()==1){
 cout<<"\n\n\n\t   --------------------- DATA KOSONG---------------------\n\n";
 getch();
 }else{
 mhs.showAllData();
 cout<<"\t   Pilih NIM pada data yang akan dihapus: ";
 gets(nimDel);
 if(mhs.delData(nimDel)==1){
 clrscr();
 cout<<"\n\n\n\t   --------------------- DATA BERHASIL DIHAPUS---------------------\n\n";
 }else{
 clrscr();
 cout<<"\n\n\n\t   --------------------- DATA GAGAL DIHAPUS---------------------\n\n";
 }
 }
 getch();
 //hapus
 break;
 case 3:
 if(mhs.isNull()==1){
 cout<<"\n\n\n\t   --------------------- DATA KOSONG---------------------\n\n";
 getch();
 }else{
 clrscr();
 mhs.showAllData();
 cout<<"\t   Pilih NIM pada data yang akan di-update: ";
 gets(nimUpd);
 stat = mhs.updateData(nimUpd);
 if(stat==1){
 clrscr();
 cout<<"\n\n\n\t   --------------------- DATA BERHASIL DI-UPDATE---------------------\n\n";
 }else{
 clrscr();
 cout<<"\n\n\n\t   --------------------- DATA BERHASIL DI-UPDATE---------------------\n\n";
 }
 }
 getch();
 //edit
 break;
 case 4:
 //tampil
 if(mhs.isNull()==1){
 cout<<"\n\n\n\t   --------------------- DATA KOSONG---------------------\n\n";
 getch();
 }else{
 mhs.showAllData();
 }
 break;
 case 5:
 _exit(0);
 break;
 default:
 clrscr();
 initFace();
 break;
 }
 }
}

Leave a Reply