Kamis, 10 Desember 2009

#include
#include
#include
#include

typedef struct CabBank *AdrCabBank;
typedef struct Nasabah *AdrNasabah;
typedef struct Transaksi *AdrTransaksi;
typedef struct CabBank{
    char Nama[10];
    AdrCabBank next;
    AdrNasabah FirstN;
    };
typedef struct Nasabah{
    char no_rek[9];
    char nama[25];
    long saldo;
    AdrNasabah next;
    AdrTransaksi FirstT;
    };
typedef struct Transaksi{
    int  kode;
    long jml;
    char date[11];
    long jmlsld;
    AdrTransaksi next;};
AdrCabBank FirstB;
char pil,pil2,pil3;


void createbank();
void createTrans();
int IsEmtyB();
void searchB(char nmcab[10],AdrCabBank *AdrB);
void searchN(char noN[9],AdrCabBank AdrB,AdrNasabah *AdrN);
void searchNB(char noN[9],AdrCabBank AdrB,AdrNasabah *AdrN);
void insertB(char NmB[10]);
void insertN(char noN[9],char nmN[25],AdrCabBank AdrB);
void deletN(AdrNasabah AdrN, AdrCabBank AdrBank);
void Menabung(char tanggal[11],long Jml,AdrNasabah AdrN);
void Mengambil(char tanggal[11],long Jml,AdrNasabah AdrN);
void Transfer(char tanggal[11],long Jml,AdrNasabah AdrN,AdrNasabah AdrNT);
void Display(AdrCabBank AdrB);
void DisplayT(AdrNasabah AdrN);
void menu();
void menuu();
void menuD();
#include "file.h"

void createbank()
{
FirstB=NULL;
FirstB->FirstN=NULL;
FirstB->next=NULL;
}

void createTrans()
{
AdrNasabah P;
P=FirstB->FirstN;
P->FirstT=NULL;
}

int IsEmtyB()
{
int found;
found=0;
if (FirstB==NULL)
     found=0;
    else
     found=1;
return(found);
}

void searchB(char nmcab[10],AdrCabBank *AdrB)
{
   AdrCabBank P;
   int Found=0;
       P=FirstB;
       while((P!=NULL) && (!Found)){
       if (strcmp(P->Nama,nmcab)==0)
          Found=1;
       else
          P=P->next;}
    if (Found)
    *AdrB=P;
    else
    *AdrB=NULL;
}

void searchN(char noN[9],AdrCabBank AdrB,AdrNasabah *AdrN)
{
    AdrNasabah P;
    P=AdrB->FirstN;
       while((P!=NULL)&&(strcmp(P->no_rek,noN)!=0))
       {P=P->next;}
       if (strcmp(P->no_rek,noN)==0)
       *AdrN=P;
       else
       *AdrN=NULL;
}

void searchNB(char noN[9],AdrCabBank AdrB,AdrNasabah *AdrN)
{
    AdrCabBank P; AdrNasabah Q;
    int Found=0;
    P=FirstB;
    Found=0;
    while (P!=NULL && Found==0){
    Q=AdrB->FirstN;
       while((Q!=NULL)&&(strcmp(Q->no_rek,noN)!=0))
       {Q=Q->next;}
       if (strcmp(Q->no_rek,noN)==0){
       *AdrN=Q;
       Found=1;
       }
       else{
        *AdrN=NULL;      
       }
    P=P->next;
    }
}

void insertB(char NmB[10])
{

    AdrCabBank P,Q;
    Q=FirstB;
    P=(struct CabBank*)malloc(sizeof(struct CabBank));
    strcpy(P->Nama,NmB);
    P->next=NULL;
    P->FirstN=NULL;
        if (FirstB==NULL)
            FirstB=P;
        else{
            while(Q->next!=NULL){Q=Q->next;}
                Q->next=P;
            }
}

void insertN(char noN[9],char nmN[25],AdrCabBank AdrB)
{

    AdrNasabah P,Q;
    Q=AdrB->FirstN;
    P=(struct Nasabah*)malloc(sizeof(struct Nasabah));
    strcpy(P->nama,nmN);
    strcpy(P->no_rek,noN);
    P->FirstT=NULL;
    P->saldo=0;
    P->next=NULL;
        if (AdrB->FirstN==NULL)
            AdrB->FirstN=P;
        else{
            while(Q->next!=NULL)
            {
            Q=Q->next;
            }
        Q->next=P; }
}

void deletN(AdrNasabah AdrN, AdrCabBank AdrBank)
{
    AdrNasabah Q;
    if (AdrN==AdrBank->FirstN)
    {
        AdrBank->FirstN=AdrN->next;
    }
    else if (AdrN->next==NULL)
    {
         Q=AdrBank->FirstN;
         while (Q->next!=AdrN)
         {
             Q=Q->next;
        }
        Q->next=NULL;
    }
    else
    {
        Q=AdrBank->FirstN;
         while (Q->next!=AdrN)
         {
             Q=Q->next;
        }
        Q->next=AdrN->next;
    }
    free(AdrN);
}



void Menabung(char tanggal[11],long Jml,AdrNasabah AdrN)
{
    AdrTransaksi T,P;
    char kd;
    T=(struct Transaksi*)malloc(sizeof(struct Transaksi));
    strcpy(T->date,tanggal);
    T->kode=1;
    T->jml=Jml;
    T->next=NULL;
    AdrN->saldo=AdrN->saldo +Jml;
    P=AdrN->FirstT;
        if (AdrN->FirstT==NULL)
            AdrN->FirstT =T;
        else{
            while((P!=NULL)&&(P->next!=NULL))
                {
                P=P->next;
                }   
        P->next=T;
        }
   
}

void Mengambil(char tanggal[11],long Jml,AdrNasabah AdrN)
{
    AdrTransaksi T,P;
    char kd;
    T=(struct Transaksi*)malloc(sizeof(struct Transaksi));
    strcpy(T->date,tanggal);
    T->kode=2;
    T->jml=Jml;
    if (Jml>AdrN->saldo)
    {
        printf(" Saldo tidak mencukupi\n");
    }

    else
    {
    AdrN->saldo=AdrN->saldo -Jml;
    T->next=NULL;
    P=AdrN->FirstT;
        if (AdrN->FirstT==NULL)
            AdrN->FirstT =T;
        else{
            while((P!=NULL)&&(P->next!=NULL))
            {
                P=P->next;
            }
            P->next=T;
            }
    }
   
}

void Transfer(char tanggal[11],long Jml,AdrNasabah AdrN,AdrNasabah AdrNT)
{
    if (Jml<0)
    {
        printf("jumlah transfer tidak boleh negatif");
    }

    else{
   
    if (Jml>AdrN->saldo)
    {
        printf("saldo tidak mencukupi");
    }
    else
    {
    Mengambil(tanggal,Jml,AdrN);
    Menabung(tanggal,Jml,AdrNT);
    printf("Anda melakukan transfer sbb: \n");
    printf("Rekening asal : %s \n",AdrN->no_rek);
    printf("Rekening tujuan : %s \n",AdrNT->no_rek);
    printf("Nominal uang  : %ld \n",Jml);
    printf("Saldo anda tinggal : %ld \n",AdrN->saldo);
    }
    }
}

void Display(AdrCabBank AdrB)
{
    AdrNasabah P;
    P=AdrB->FirstN;
    if(AdrB->FirstN==NULL)
        printf("Data nasabah tak ada\n");
    else{
        printf("No.Rekening\tNama Nasabah\t\tSaldo\n");
            while(P!=NULL)
                {
                printf("%s\t\t%s\t\t%ld\n",P->no_rek,P->nama,P->saldo);
                P=P->next;
                }
        }
getch();
}

void DisplayT(AdrNasabah AdrN)
{
    AdrTransaksi P;
    P=AdrN->FirstT;
    if(AdrN->FirstT==NULL)
        printf("Data transaksi masih kosong\n");
    else{
        printf("Data transaksi nasabah no rek %s \n",AdrN->no_rek);
        printf("Kode Transaksi\tTanggal\t\Jumlah\n");
            while(P)
                {
                printf("%d\t\t%s\t\t%            ld\n",P->kode,P->date,P->jml);
                P=P->next;
                }
        }
getch();
}

void menu()
{
     clrscr();
     printf("  BANK SEDERHANA \n");
     printf("------------------- \n");
     printf("1. BUKA CABANG \n");
     printf("2. BUKA REKENING \n");
     printf("3. MENUTUP REKENING \n");
     printf("4. MELAKUKAN TRANSAKSI \n");
     printf("5. DISPLAY NASABAH \n");
     printf("6. EXIT \n");
     printf("Pilihan(1-6): \n ");
     printf("PILIHAN: ");
     scanf("%c",&pil);
 }

void menuu()
{
       clrscr();
       printf("TRANSAKSI \n");
       printf("1. Menabung \n");
       printf("2. Mengambil Uang \n");
       printf("3. Transfer \n");
       printf("4. Menu utama \n");
       printf("PILIHAN: ");
       scanf("%c",&pil2);
}

void menuD()
{
        clrscr();
        printf("     DISPLAY \n");
        printf("----------------\n");
        printf("1. Display Nasabah\n ");
        printf("2. Display Transaksi nasabah\n");
        printf("3. Menu Utama \n");
        printf("PILIHAN: ");
        scanf("%c",&pil3);
}

penggabungan ADT, struct, array, function

#include "file.c"

void main()
{
char NmBank[10],NmBankT[10],Date[11],NoRek[9],NoRekT[9],NmNasabah[25];
int jmlcab,i;
long Jml=0;
AdrCabBank AdrBank;
AdrNasabah AdrNsbh,AdrNsbhT;
AdrTransaksi AdrTran;

do{
 menu();
 switch (pil){
 case '1':clrscr();
         printf(" Membuka Cabang \n");
         printf("----------------- \n");
         printf(" Nama Cabang \t  : ");
         scanf("%s", &NmBank);
         searchB(NmBank,&AdrBank);
         if (AdrBank==NULL)
             insertB(NmBank);
          else
           {
            printf("maaf nama cabang sudah terdaftar");
         getch();}
         break;
       

 case '2':clrscr();
         printf(" Membuka Rekening \n");
         printf("----------------- \n");
         printf(" Nama bank \t  : ");
         scanf("%s", &NmBank);
         searchB(NmBank,&AdrBank);
         if (AdrBank==NULL)
         printf("maaf bank tidak ditemukan");
          else
           {
        printf(" No.Rekening \t: ");
        scanf("%s", &NoRek);
        searchN(NoRek,AdrBank,&AdrNsbh);
        if (AdrNsbh==NULL){
         printf(" Nama Nasabah \t  : ");
         scanf("%s", &NmNasabah);
         insertN(NoRek,NmNasabah,AdrBank);
         }
         else printf("maaf no rekening telah digunakan");
         }
         getch();
      break;

 case '3':clrscr();
         printf("Menutup Rekening \n");
         printf("--------------- \n");
         printf(" Nama bank \t  : ");
         scanf("%s", &NmBank);
         searchB(NmBank,&AdrBank);
         if (AdrBank==NULL) printf("maaf bank tidak ditemukan");
          else{
           printf(" No.Rekening \t: ");
           scanf("%s", &NoRek);
           searchN(NoRek,AdrBank,&AdrNsbh);
           if (AdrNsbh==NULL) printf("Nasabah tidak ditemukan");
           else
           {
               strcpy(NoRek,AdrNsbh->no_rek);
           deletN(AdrNsbh,AdrBank);
           printf("\n Nasabah dengan no rekening %s telah dihapus", NoRek);
           }
          
           }getch();
      break;

 case '4':clrscr();
      printf("     LOGIN    \n");
      printf("---------------- \n");
      printf(" Nama bank \t  : ");
      scanf("%s", &NmBank);
      searchB(NmBank,&AdrBank);
      if (AdrBank==NULL) printf("maaf bank tidak ditemukan");
       else{
      printf(" No.Rekening \t: ");
      scanf("%s", &NoRek);
      searchN(NoRek,AdrBank,&AdrNsbh);
      if (AdrNsbh==NULL) printf("Nasabah tidak ditemukan");
           else{
         do{
      menuu();
      switch(pil2)
        {
         case '1': clrscr();
               printf(" Mari Menabung\n");
               printf("-----------------\n");
               printf("\n Tanggal transaksi : ");
               scanf("%s", &Date);
               printf("\n Nominal uang : ");
               scanf("%ld",&Jml);
               if (Jml<0) printf("maaf nominal uang tidak boleh negatif \n");
               else{
               Menabung(Date,Jml,AdrNsbh);
               printf("\n saldo anda skrg %ld ",AdrNsbh->saldo);
               getch();}
               break;
         case '2': clrscr();
               printf(" Mari Mengambil uang \n");
               printf("-----------------\n");
               printf("\n Tanggal transaksi : ");
               scanf("%s", &Date);
               printf("\n Nominal uang : ");
               scanf("%ld",&Jml);
               Mengambil(Date,Jml,AdrNsbh);
               printf("\n saldo anda skrg %ld ",AdrNsbh->saldo);
               getch();
               break;
         case '3': clrscr();
               printf("\n Tanggal transaksi : ");
               scanf("%s", &Date);
               printf(" Cabang bank \t: ");
               scanf("%s", &NmBank);
               searchB(NmBank,&AdrBank);
               if (AdrBank==NULL) printf("Cab Bank tujuan tidak ditemukan");
            else{
             printf(" Rekening tujuan \t: ");
             scanf("%s" , &NoRekT);
             searchN(NoRekT,AdrBank,&AdrNsbhT);
              if (AdrNsbh==NULL) printf("Rekening tujuan tidak ditemukan");
               else{
                printf("\n Nominal uang : ");
                scanf("%ld",&Jml);
                Transfer(Date,Jml,AdrNsbh,AdrNsbhT);}
               }

               getch();
               break;
         case '4': clrscr();
               menu();
               getch();
               break;
        
         }}
         while(pil2!='4');}
         }getch();
         break;

 case '5':clrscr();
      printf("     DISPLAY \n");
      printf("---------------- \n");
      printf(" Cabang bank \t: ");
      scanf("%s", &NmBank);
      searchB(NmBank,&AdrBank);
      if (AdrBank==NULL)
      printf("Cab Bank tersebut tidak ditemukan");
       else{
        do{
        menuD();
        switch(pil3){
        case '1' : clrscr();
               Display(AdrBank);
               getch();
               break;
        case '2' : clrscr();
               printf(" No.Rekening \t: ");
               scanf("%s", &NoRek);
               searchN(NoRek,AdrBank,&AdrNsbh);
               if (AdrNsbh==NULL) printf("Nasabah tidak ditemukan");
               else{
               DisplayT(AdrNsbh);}
               getch();
               break;
        case '3' : clrscr();
               menu();
               break;
        }}

        while(pil3!='3');
        }getch();
        break;
 case '6':exit(0);

}

}
while(pil!='6');}


tgs algoritma lanjut
kelas IT/C
1. M. Nouval fallah ( 208.511.101)
2. Dwi Novitarini ( 208.511.117)