/*_____________________________________________________________________________________*/

#include<iostream.h>
#include<fstream.h>
#include<string.h>
#include<process.h>
#include<stdio.h>
#include<conio.h>
#include<dos.h>

/*_____________________________________________________________________________________*/

static int i=0;
static int j=0;

/*_____________________________________________________________________________________*/

static void initialize()
{
 i=0;
 j=0;
}

/*_____________________________________________________________________________________*/

void add_Users();
void read();
void main_Atm();
void show_Users();
void rewrite();

/*_____________________________________________________________________________________*/

class ATM
{
public:
      char    name[20];
      char address[100];
      char  number[20];
      double  credit;
      char    code[20];
      void set (char*,char*,char*,double,char*);
      void display();
};

ATM A[100];

/*_____________________________________________________________________________________*/

void ATM::set(char*na,char*add,char*nm,double cdt,char*cd)
{
strcpy(name,na);
strcpy(address,add);
strcpy(number,nm);
credit=cdt;
strcpy(code,cd);
}

/*_____________________________________________________________________________________*/

void ATM::display()
{
	cout<<"INFORMATION OF CUSTOMER NUMBER "<<j+1<<" IS : "<<endl;
 cout<<"NAME     :   ";
 cout<<name<<endl;
 cout<<"ADDRESS  :   ";
 cout<<address<<endl;
 cout<<"NUMBER   :   ";
 cout<<number<<endl;
 cout<<"CREDIT   :   ";
 cout<<credit<<endl;
 cout<<"PIN-CODE :   ";
 cout<<code<<endl;
}

/*_____________________________________________________________________________________*/

void add_Users()
{
char   name[20];
char    add[100];
char    num[20];
double   credit;
char   code[20];
char opt;

ofstream outdata("data.txt",ios::app);

do
{
cout<<"ENTER FULL NAME : "<<endl;
gets(name);
outdata<<endl<<name;
cout<<"ENTER ADDRESS : "<<endl;
gets(add);
outdata<<endl<<add;
cout<<"ENTER CELL-NUMBER : "<<endl;
gets(num);
outdata<<endl<<num;
cout<<"ENTER STARTING CREDIT : "<<endl;
cin>>credit;
outdata<<endl<<credit;
cout<<"ENTER PIN-CODE : "<<endl;
gets(code);
outdata<<endl<<code;

 cout<<"WANNA ADD MORE (Y/N)? "<<endl;
 cin>>opt;

}
while(opt=='Y'||opt=='y');

}

/*_____________________________________________________________________________________*/

void read()
{
char    str[20];
char     na[20];
char    add[100];
char     nm[20];
double    cdt;
char     cd[20];

	ifstream indata("data.txt",ios::in);

	if(!indata)
		cerr<<"NO DATA ON FILE : "<<endl;
	else
	{
		indata.getline(str,20);
		while(!indata.eof())
		{
		indata.getline(na,20);
		indata.getline(add,100);
		indata.getline(nm,20);
		indata>>cdt;
		indata.getline(str,20);
		indata.getline(cd,20);
		A[i++].set(na,add,nm,cdt,cd);
		}

	}


}

/*_____________________________________________________________________________________*/

void show_Users()
{
 read();
  for(j=0;j<i;j++)
    A[j].display();

}

/*_____________________________________________________________________________________*/

void rewrite()
{

	ofstream outdata("data.txt",ios::out);

    for(int k=0;k<i;k++)
	{
     outdata<<endl<<A[k].name;
     outdata<<endl<<A[k].address;
     outdata<<endl<<A[k].number;
     outdata<<endl<<A[k].credit;
     outdata<<endl<<A[k].code;
 }


}

/*_____________________________________________________________________________________*/

void main_Atm()
{
int op,res;
char p_Code[4];
int k;

cout<<"ENTER PIN-CODE TO CONTINUE : "<<endl;
gets(p_Code);

read();

 for(k=0;k<i;k++)
 {
  res=strcmp(A[k].code,p_Code);
  if(res==0)
	  break;
 }

 if(res==0)
 {

	 cout<<"WELCOME ";

	 int s=strlen(A[k].name);
	  for(int t=0;t<s;t++)
	  {
	    int ch=A[k].name[t];
		if(ch>=97&&ch<=122)
		{
			ch=ch-32;
		 cout<<char(ch);
		}

	  }

	  cout<<endl<<endl;


	  char opt;

	  do
	  {
       cout<<"!!!!!!!!!!~~~~~MENU~~~~~!!!!!!!!!!"<<endl;
       cout<<"1- VIEW MY BALANCE : "<<endl;
       cout<<"2- WITHDRAW CASH   : "<<endl;
       cout<<"3- DEPOSIT FUNDS   : "<<endl;
       cout<<"4- EXIT            : "<<endl;
       cin>>op;

        switch(op)
		{
         case 1:{cout<<"UR CRRENT CREDIT IS : "<<A[k].credit<<endl;break;}
         case 2:{
			 
			 double amt;

                    do
					{
                       cout<<"WITHDRAWAL OPTIONS : "<<endl;
                       cout<<"ENTER THE AMOUNT TO WITHDRAW BETWEEN 500 & 25000 : "<<endl;
                       cin>>amt;

                        if(amt<500||amt>25000)
	                     cout<<"UNABLE TO DONE (AMOUNT LESS THAN 500 OR GREATER THAN 25000) ENTER AMOUNT AGAIN : "<<endl;

                        else
						{
 
						 A[k].credit=A[k].credit-amt;
                             if(A[k].credit<0)
							 {cout<<"CANNOT WITHDRAW (CREDIT LESS THAN 0) : "<<endl;}
								 else
                                 {
									 rewrite();
								 
								  cout<<"UR REMAINING BALANCE IS : "<<A[k].credit<<endl;
								 }
  
  
                         break;
						}
	  


					}while(true);
 
                    
					break;
				}

		 case 3:{
			
			      double amnt;
			      cout<<"ENTER THE AMOUNT TO DEPOSIT : "<<endl;
				  cin>>amnt;

				  		 A[k].credit=A[k].credit+amnt;
                         rewrite();
						 cout<<"UR NEW BALANCE IS : "<<A[k].credit<<endl;
								 
			 
			     break;
				}
         
		 case 4:{cout<<endl<<endl<<"!!!!! GOOD BYE !!!!!"<<endl<<endl;exit(0);}
		}

		cout<<"WANNA SEE THE MENU AGAIN (Y/N) ? "<<endl;
        cin>>opt;

	  }while(opt=='Y'||opt=='y');

 }



}

/*_____________________________________________________________________________________*/

class UI
{
public:
	void showmenu();

};

/*_____________________________________________________________________________________*/

void UI::showmenu()
{
	int op,res;
	char option;
	char password[7];
	char entry[]="my_bank";


 do
 {
 cout<<"!!!!!~~~~~  MENU  ~~~~~!!!!! : "<<endl;
 cout<<"1- ADD BANK USERS : "<<endl;
 cout<<"2- VIEW ALL USERS : "<<endl;
 cout<<"3- TO GOTO ATM    : "<<endl;
 cout<<"4- TO EXIT :"<<endl;
 cin>>op;

 if(op==1||op==2)
 {
  cout<<"ENTER PASS-WORD TO EXCESS BANK DATA-BASES : "<<endl;
  gets(password);

   res=strcmp(entry,password);
   if(res==0)
   {
	   cout<<"PASS-WORD ACCEPTED : "<<endl<<endl;
	   cout<<"LOGINING  ";
	   cout<<endl<<endl;

   }

   else
   {
    cerr<<"WRONG PASSWORD : "<<endl;
	cout<<"UNABLE TO ACCESS BANK's DATABASES :"<<endl;
	getch();
	exit(0);
   }
 }

      switch(op)
	  { 
       case 1:{add_Users();break;}
       case 2:{show_Users();break;}
       case 3:{main_Atm();break;}
       case 4:{cout<<endl<<endl<<"!!!!! GOOD BYE !!!!!"<<endl<<endl;exit(0);}
	  } 
  
	  cout<<"WANNA SEE MAIN MENU AGAIN (Y/N) ? "<<endl;
	  cin>>option;

	  initialize();       // sets static variables to i & j to zero

 }while(option=='Y'||option=='y');

}

/*_____________________________________________________________________________________*/

void main()
{
// clrscr();

 UI u;
 u.showmenu();

// getch();
}

/*_____________________________________ END ___________________________________________*/