#include<iostream.h>
#include<fstream.h>
#include<process.h>
#include<string.h>
#include<stdio.h>
#include<ctype.h>
#include<conio.h>
#include<dos.h>
#include<stdlib.h>
#include<iomanip.h>
#include<graphics.h>
typedef char option[15];
const int ROW = 10,COL = 10;
int scan;
int ascii;
option a[]= {
"NewAccount",
"ListofAccounts",
"IndAccount",
"Daily Trans",
"MonthlyReport",
"EditAccount",
"Exit"};
option b[] = {
"Modify Account",
"Closeaccount",
"Quit"
};
class main_menu
{
int i,done;
public:
void normalvideo(int x, int y,char *str);
void reversevideo(int x, int y,char *str);
void box(int x1,int y1,int x2,int y2);
char menu();
void control_menu();
char e_menu();
void edit_menu();
void help(void);
};
class shape
{
public:
void line_hor(int, int, int, char);
void line_ver(int, int, int, char);
void box(int, int, int, int, char);
};
class initial
{
public:
void add_to_file(int, char t_name[30], char t_address[30], float);
void display_list(void);
void delete_account(int);
void update_balance(int, char t_name[30], char t_address[30], float);
void modify(void);
int last_accno(void);
int found_account(int);
char *return_name(int);
char *return_address(int);
float give_balance(int);
int recordno(int);
void display(int);
private:
};
void modify_account(int, char t_name[30], char t_address [30]);
int accno;
char name[30], address[30];
float balance;
};
class account
{
public:
void new_account(void);
void close_account(void);
void display_account(void);
void transaction(void);
void clear(int, int);
void month_report(void);
private:
void add_to_file(int, int, int, int,char,char t_type[10], float, float, float);
void delete_account(int);
int no_of_days(int, int, int, int, int, int);
float calculate_interest(int, float);
void display(int);
void box_for_display(int);
int accno;
char type[10];
int dd, mm, yy;
char tran;
float interest, amount, balance;
};
void main_menu::normalvideo(int x, int y,char *str)
{
gotoxy(x,y);
cprintf("%s", str);
}
void main_menu::reversevideo(int x, int y,char *str)
{
textcolor(5+143);
textbackground(WHITE);
gotoxy(x,y);
cprintf("%s",str);
textcolor(GREEN);
textbackground(BLACK);
}
void main_menu::box(int x1,int y1,int x2,int y2)
{
for(int col=x1;col<x2;col++)
{
gotoxy(col,y1);
cprintf("%c",196);
gotoxy(col,y2);
cprintf("%c",196);
}
for(int row=l;row<y2;row++)
{
gotoxy(x1,row);
cprintf("%c",179);
gotoxy(x2,row);
cprintf("%c",179);
}
gotoxy(x1,y1);
cprintf("%c",218);
gotoxy(x1,y2);
cprintf("%c", 192);
gotoxy(x2,y1);
cprintf("%c",191);
gotoxy(x2,y2);
cprintf("%c",217);
}
char main_menu::menu()
{
clrscr();
textcolor(22);
box(20, 6, 65, 20);
box(18, 4, 67, 22);
textcolor(5+143);
gotoxy(36, 5);
textbackground(BLUE);
cprintf("B A N K I N G");
textbackground(BLACK);
textcolor(22);
for(i = 1; i < 7; i++)
normalvideo(32, i+10, a[i]);
reversevideo(32, 10, a[0]);
i = done = 0;
_setcursortype(_NOCURSOR);
do
{
{
case 00:
{
case 72:
normalvideo(32, i+10, a[i]);
i--;
if (i == -1)
i = 6;
reversevideo(32,i+10,a[i]);
break;
case 80:
normalvideo(32, i+10, a[i]);
i++;
if (i == 7)
i = 0;
reversevideo(32, i+10, a[i]);
break;
}
break;
case 13:
done = 1;
}
}
while (!done);
setcursortype(NOCURSOR);
return(i+49);
}
void main_menu::control_menu()
{
char choice;
account a;
do
{
choice = menu());
clrscr();
switch (choice)
{
case '1':
setcursortype(NORMALCURSOR);
box(3, 1, 75, 24);
box(5, 2, 73, 23);
a.new_account();
break;
case '2':
box(3, 1, 75, 24);
box(5, 2, 73, 23);
initial ini;
ini.display_list();
break;
case '3':
box(3, 1, 75, 24);
box(5, 2, 73, 23);
setcursortype(NORMALCURSOR);
a.display_account();
break;
case '4':
box(3, 1, 75, 24);
box(5, 2, 73, 23);
account a;
setcursortype(NORMALCURSOR);
a.transaction();
break;
case '5':
box(3, 1, 75, 24);
box(5, 2, 73, 23);
setcursortype(_NORMALCURSOR);
a.month_report();
break;
case '6':
box(3, 1, 75, 24);
box(5, 2, 73, 23);
gotoxy(10,10);
edit_menu();
break;
}
} while (choice != 6);
char main_menu::e_menu()
clrscr();
textcolor(22);
box(25,6,60,15);
box(23,4,62,17);
textcolor(5+143);
gotoxy(34,5);
textbackground(GREEN);
cprintf("EDIT - MENU");
textcolor(22);
textbackground(BLACK);
for (i=1;i < 3; i++)
normalvideo(32, i+10, b[i]);
reversevideo(32, 10, b[0]);
i = done = 0;
_setcursortype(NOCURSOR);
do
{
{
case 00:
{
case 72:
normalvideo(32, i+10, b[i]);
i--;
if (i == -1)
i = 2;
reversevideo(32, i+10, b[i]);
break;
case 80:
normalvideo(32, i+10, b[i]);
}
}
i++;
if (i = 3)
i=0;
reversevideo(32, i+10, b[i]);
break:
}
break;
case 13:
done = 1;
}
}
while (!done);
setcursortype(NOCURSOR);
return(i+49);
{
char choice;
account a;
do
{
choice = e_menu();
clrscr();
switch (choice)
{
case '1':
box(3, 1, 75, 24);
box(5, 2, 73, 23);
case '2':
initial ini;
_setcursortype(_NORMALCURSOR);
ini.modify();
break:
case’2’:
box(3, 1, 75, 24);
box(5, 2, 73, 23);
account a;
_setcursortype(NORMALCURSOR);
a.close_account();
break;
case '3':
return;
}
} while (choice != 6);
for (column1; column1 <= column2; column1++)
gotoxy(column1, row);
cout<<c;
}
}
{
for (rowl; rowl <= row2; row1++)
{
gotoxy(column, row1);
cout<< c;
}
}
{
char ch = 218;
char c1, c2, c3, c4;
char 11 = 196, 12 = 179;
if (c = ch)
{
c1=218;
c2 = 191;
c3=217; c4 = 217;
11 = 196;
12 = 179;
}
else
{
c1 = c;
c2 = c;
c3 = c;
c4= c;
11 = c;
c2 = c;
}
gotoxy(columnl, row1);
cout<< cl;
gotoxy(column2, row1);
cout<<< c2;
gotoxy(columnl, row2);
cout<<< c3;
gotoxy(column2, row2);
cout<< c4;
column1++;
column2--;
line_hor(column1, column2, row1, 11); //Horizontal line
line_hor(column1, column2, row2, 11);
column 1 --;
column2++;
rowl++;
row2--;
line_ver(rowl, row2, column1, 12); // Vertical line
line_ver(row1, row2, column2, 12);
clrscr(); setbkcolor(7);
settextstyle(7,HORIZ_DIR,4);
outtextxy(70,20,"Welcome to Banking System");
settextstyle(2,HORIZ_DIR,5);
outtextxy(60,100,"You can keep record of daily banking transaction");
delay(2);
outtextxy(60,130,"This program is capable of holding any no. of A/c");
delay(2);
outtextxy(60,160,"-In first option you can open new A/c");
delay(2);
outtextxy(60,190,"-In second option you can see the list of all A/c's");
delay(2);
outtextxy(60,220,"-In third option you can see all trans. of ind. A/c");
delay(2);
outtextxy(60,250,"-In fourth optiion you can do banking transactions");
delay(2);
outtextxy(60,280,"(Deposit/Withdraw)");
delay(2);
outtextxy(60,310,"-In fifth opt. you can take monthly ind. A/c report");
delay(2);
delay(2);
outtextxy(60,340,"-In sixth opt. you can modify or delete any account");
outtextxy(60,370,"Note-:Opening amount should not less that Rs. 500/-");
delay(2);
outtextxy(60,400,"-And last option is Quit (Exit to Window)");
delay(2);
settextstyle(7,HORIZ_DIR,4);
outtextxy(80,420,"Press any key to continue...");
getch();
}
{
clrscr();
int j;
char t_acc[10];
int t, t_accno;
gotoxy(17, 1);
cout<<"<0>=Exit";
gotoxy(5,5);
cout<<"Enter the account no. ";
gets(t_acc);
t = atoi(t_acc);
t_accno = t;
if (t_accno=0)
return;
clrscr();
if (!found_account(t_accno))
{
gotoxy(5, 5);
cout<<"\7Account not found";
getch();
return;
}
gotoxy(71, 1);
cout<<"<0>=Exit";
textbackground(WHITE);
gotoxy(3, 3);
for(j=1;j<=76; j++)
cprintf(" ");
textbackground(BLACK);
textcolor(BLACK+BLINK);
textbackground(WHITE);
gotoxy(30, 3);
cprintf("Modify Account Screen");
textcolor(LIGHTGRAY);
textbackground(BLACK);
d1 = d.da_day;
ml = d.da_mon;
yl = d.da_year; gotoxy(4, 2);
cout
<<"Date: " << dl <<"/"<<ml
<<<"/"<<yl
;char ch;
display(t_accno);
account a;
do
{
a.clear(5, 13);
gotoxy(5, 13);
cout<<<< "Modify this account <y/n>: ";
ch = getche();
if (ch='0')
return;
ch = toupper(ch);
} while (ch!= 'N' && ch != 'Y');
if (ch == 'N')
return;
int modified = 0, valid;
char t_name[30], t_address[30];
gotoxy(5, 15);
cout<<"Name: ";
gotoxy(5, 16);
cout<<"Address: ";
do
{
a.clear(15, 15);
a.clear(5, 23);
gotoxy(5, 23);
cout<<"Enter Name or Press Enter for No Change";
valid = 1;
gotoxy(15, 15);
gets(t_name);
strupr(t_name);
if (t_name[0] == '0')
return;
{
valid = 0;
gotoxy(5, 23);
cprintf("\7Name should not greater than 25");
getch();
}
} while (!valid);
do
{
a.clear(15, 16);
a.clear(5, 23);
gotoxy(5, 23);
cout<<"Enter Address or press enter for no Change";
valid = 1;
gotoxy(15, 16);
gets(t_address);
strupr(t_address);
if (t_address[0] = '0')
return;
valid = 0;
gotoxy(5, 23);
cprintf("\7Address should not greater than 25");
getch();
}
} while (!valid);
modified = 1;
if (!modified)
return;
a.clear(5,23);
do
a.clear(5, 23);
gotoxy(5,18);
cout<<"Do you want to save Changes<Y/N>:";
ch=getche();
if(ch=='0')
return;
ch=toupper(ch);
}while(ch!='N'&& ch!'Y');
if(ch=='N')
return;
gotoxy(5,21);
cout<<"\7Record modifyed";
gotoxy(5,23);
cout<<"Press any key to continue...";
getch();
}
{
if(t_accno==accno)
{
gotoxy(8,5);
cout<<"Account no."<<accno;
gotoxy(10,8);
cout<<Address:";
puts(address);
gotoxy(10,9);
cout<<"Address:";
puts(address);
gotoxy(10,10);
cout<<"Balace:"<<setw(15)
<<setprecision(2)
<<setiosflags(ios::showpoint)
<<setionsflags(ios::fixed)<<balance;
break;
}
}
file.close();
}
{
int recno;
recno=recordno(t_accno);
fstream file;
file.open("INITIAL.dat",ios::out|ios::ate);
strcpy(name,t_name);
strcpy(address, t_address);
int location;
location = (recno-1)* sizeof(initial);
file.seekp(location);
file.write((char *)this, sizeof(initial));
file.close();
return;
int initial::last_accno(void)
{
fstream file;
file.open("INITIAL.dat", ios::in);
file.seekg(0, ios::beg);
int count = 0;
count = accno;
file.close();
return count;
accno=t_accno;
strcpy(name, t_name);
strcpy(address, t_address);
balance=t balance;
fstream file:
file.open("INITIAL.dat", ios::out ios::app);
file.write((char *)this, sizeof(initial));
file.close();
void initial::delete_account(int t_accno)
{
fstream file;
file.open("INITIAL.dat", ios::in);
fstream temp;
temp.open("TEMP.dat", ios::out);
file.seekg(0,ios::beg);
while (!file.eof()
{
file.read((char *)this, sizeof(initial));
if (file.eof()
break;
if (accno !=t_accno)
temp.write((char *)this, sizeof(initial));
}
file.close();
temp.close();
file.open("INITIAL.dat", ios::out);
temp.open("TEMP.dat", ios::in);
temp.seekg(0, ios::beg);
while (!temp.eof())
{
temp.read((char *)this, sizeof(initial));
if (temp.eof())
break;
if (accno != t_accno)
file.write((char *)this, sizeof(initial));
}
file.close();
temp.close();
{
fstream file;
file.open("BANKING.dat", ios::app);
accno=t_accno;
getch();
dd = dl;
mm = ml;
yy = y1;
tran = t tran;
strcpy(type, t_type);
interest = t interest;
amount = t_amount;
balance = t balance;
file.write((char *)this, sizeof(account));
file.close();
{
fstream file;
file.open("BANKING.dat", ios::in);
fstream temp;
temp.open("TEMP.dat", ios::out);
file.seekg(0, ios::beg);
while (!file.eof())
{
file.read((char *)this, sizeof(account));
if (file.eof())
break;
if (accno !=t_accno)
temp.write((char *)this, sizeof(account));
}
file.close();
temp.close();
file.open("BANKING.dat", ios::out);
temp.open("TEMP.dat", ios::in);
temp.seekg(0, ios::beg);
while (!temp.eof())
{
temp.read((char *)this, sizeof(account));
if (temp.eof()
break;
if (accno !=t_accno)
file.write((char *)this, sizeof(account));
}
file.close();
temp.close();
{
clrscr();
int flag;
float t bal = 0.0;
fstream file;
gotoxy(25,2);
cout<<"Accounts
List in Bank
"; gotoxy(25, 3);
cout<<
11
int dl, ml, yl;
struct date d;
// For extracting system date
getdate(&d);
d1 = d.da_day;
ml = d.da_mon;
yl = d.da_year;
gotoxy(62, 3);
cout<<"Date: " << dl <<"/"<<ml <<<"/"<<yl; gotoxy(1, 4);
for (int j = 1; j <= 79; j++)
cout<<<<<"=";
gotoxy(1, 5);
cout<<"Accno#":
gotoxy(10,5);
cout<<"Name";
gotoxy(30,5);
cout<<"Address";
gotoxy(65,5);
cout<<"Balance";
gotoxy(1, 6);
for (j = 1; j <= 79; j++)
cout<<"=";
file.open
("INITIAL.dat", ios
::in); int row = 7;
{
flag = 0;
delay(2);
gotoxy(3, row);
cout<< accno;
gotoxy(10, row);
puts(name);
gotoxy(30, row);
puts(address);
gotoxy(65, row);
cout<<<<setw(15)<<setprecision(2) <<setiosflags(ios::left)
<<setiosflags(ios::showpoint)<<<<setiosflags(ios::fixed)<<balance;
t_bal=t_bal + balance;
row++;
if (row >23)
{
flag = 1;
row = 6;
gotoxy(4, 24);
cout<<"Press any key to continue.... ";
getch();
clrscr();
}
}
gotoxy(1, row);
for (j = 1; j <= 79; j++)
cout<<"=".
row++;
gotoxy(3, row);
cout<<"Total Balance in Bank is: ";
gotoxy(65, row);
cout<<<setw(15)<<<setprecision(2)<<setiosflags(ios::left)
<<setiosflags(ios::showpoint)<<setiosflags(ios::fixed)<<t_bal;
if (!flag)
{
gotoxy(4, 24);
cout<<<< "Press any key to continue...";
getch(); }
{
for (int j = col; j <= 79; j++)
{
gotoxy(j, row);
cout<<"".
}
int initial::found_account(int t_accno)
{
file.open
("INITIAL.dat", ios
::in); int found = 0;
{
if(accno==t_accno)
{
found=1;
break;
}
}
returnfound;
}
{
file.open
("INITIAL.dat",ios
::in); chat t_name[30];
{
if(accno=t-accno)
{
strcpy(t-name,name);
break;
}
}
return t_name;
I2luY2x1ZGU8aW9zdHJlYW0uaD4KI2luY2x1ZGU8ZnN0cmVhbS5oPgojaW5jbHVkZTxwcm9jZXNzLmg+CiNpbmNsdWRlPHN0cmluZy5oPgojaW5jbHVkZTxzdGRpby5oPgojaW5jbHVkZTxjdHlwZS5oPgojaW5jbHVkZTxjb25pby5oPgojaW5jbHVkZTxkb3MuaD4KI2luY2x1ZGU8c3RkbGliLmg+CiNpbmNsdWRlPGlvbWFuaXAuaD4KI2luY2x1ZGU8Z3JhcGhpY3MuaD4KdHlwZWRlZiBjaGFyIG9wdGlvblsxNV07CmNvbnN0IGludCBST1cgPSAxMCxDT0wgPSAxMDsKaW50IHNjYW47CiBpbnQgYXNjaWk7Cm9wdGlvbiBhW109IHsKIk5ld0FjY291bnQiLAoiTGlzdG9mQWNjb3VudHMiLAoiSW5kQWNjb3VudCIsCiJEYWlseSBUcmFucyIsCiJNb250aGx5UmVwb3J0IiwKIkVkaXRBY2NvdW50IiwKIkV4aXQifTsKb3B0aW9uIGJbXSA9IHsKIk1vZGlmeSBBY2NvdW50IiwKIkNsb3NlYWNjb3VudCIsCiJRdWl0Igp9OwpjbGFzcyBtYWluX21lbnUKewppbnQgaSxkb25lOwpwdWJsaWM6CnZvaWQgbm9ybWFsdmlkZW8oaW50IHgsIGludCB5LGNoYXIgKnN0cik7CnZvaWQgcmV2ZXJzZXZpZGVvKGludCB4LCBpbnQgeSxjaGFyICpzdHIpOwp2b2lkIGJveChpbnQgeDEsaW50IHkxLGludCB4MixpbnQgeTIpOwpjaGFyIG1lbnUoKTsKdm9pZCBjb250cm9sX21lbnUoKTsKY2hhciBlX21lbnUoKTsKdm9pZCBlZGl0X21lbnUoKTsKdm9pZCBoZWxwKHZvaWQpOwp9OwpjbGFzcyBzaGFwZQp7CnB1YmxpYzoKdm9pZCBsaW5lX2hvcihpbnQsIGludCwgaW50LCBjaGFyKTsKdm9pZCBsaW5lX3ZlcihpbnQsIGludCwgaW50LCBjaGFyKTsKdm9pZCBib3goaW50LCBpbnQsIGludCwgaW50LCBjaGFyKTsKfTsKY2xhc3MgaW5pdGlhbAp7CnB1YmxpYzoKdm9pZCBhZGRfdG9fZmlsZShpbnQsIGNoYXIgdF9uYW1lWzMwXSwgY2hhciB0X2FkZHJlc3NbMzBdLCBmbG9hdCk7CnZvaWQgZGlzcGxheV9saXN0KHZvaWQpOwp2b2lkIGRlbGV0ZV9hY2NvdW50KGludCk7CnZvaWQgdXBkYXRlX2JhbGFuY2UoaW50LCBjaGFyIHRfbmFtZVszMF0sIGNoYXIgdF9hZGRyZXNzWzMwXSwgZmxvYXQpOwp2b2lkIG1vZGlmeSh2b2lkKTsKaW50IGxhc3RfYWNjbm8odm9pZCk7CmludCBmb3VuZF9hY2NvdW50KGludCk7CmNoYXIgKnJldHVybl9uYW1lKGludCk7CmNoYXIgKnJldHVybl9hZGRyZXNzKGludCk7CmZsb2F0IGdpdmVfYmFsYW5jZShpbnQpOwppbnQgcmVjb3Jkbm8oaW50KTsKdm9pZCBkaXNwbGF5KGludCk7CnByaXZhdGU6Cn07CnZvaWQgbW9kaWZ5X2FjY291bnQoaW50LCBjaGFyIHRfbmFtZVszMF0sIGNoYXIgdF9hZGRyZXNzIFszMF0pOwppbnQgYWNjbm87CmNoYXIgbmFtZVszMF0sIGFkZHJlc3NbMzBdOwpmbG9hdCBiYWxhbmNlOwp9OwpjbGFzcyBhY2NvdW50CnsKcHVibGljOgp2b2lkIG5ld19hY2NvdW50KHZvaWQpOwp2b2lkIGNsb3NlX2FjY291bnQodm9pZCk7CnZvaWQgZGlzcGxheV9hY2NvdW50KHZvaWQpOwp2b2lkIHRyYW5zYWN0aW9uKHZvaWQpOwp2b2lkIGNsZWFyKGludCwgaW50KTsKdm9pZCBtb250aF9yZXBvcnQodm9pZCk7CnByaXZhdGU6CnZvaWQgYWRkX3RvX2ZpbGUoaW50LCBpbnQsIGludCwgaW50LGNoYXIsY2hhciB0X3R5cGVbMTBdLCBmbG9hdCwgZmxvYXQsIGZsb2F0KTsKdm9pZCBkZWxldGVfYWNjb3VudChpbnQpOwppbnQgbm9fb2ZfZGF5cyhpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KTsKZmxvYXQgY2FsY3VsYXRlX2ludGVyZXN0KGludCwgZmxvYXQpOwp2b2lkIGRpc3BsYXkoaW50KTsKdm9pZCBib3hfZm9yX2Rpc3BsYXkoaW50KTsKaW50IGFjY25vOwpjaGFyIHR5cGVbMTBdOwppbnQgZGQsIG1tLCB5eTsKY2hhciB0cmFuOwpmbG9hdCBpbnRlcmVzdCwgYW1vdW50LCBiYWxhbmNlOwp9Owp2b2lkIG1haW5fbWVudTo6bm9ybWFsdmlkZW8oaW50IHgsIGludCB5LGNoYXIgKnN0cikKewpnb3RveHkoeCx5KTsKY3ByaW50ZigiJXMiLCBzdHIpOwp9CnZvaWQgbWFpbl9tZW51OjpyZXZlcnNldmlkZW8oaW50IHgsIGludCB5LGNoYXIgKnN0cikKewp0ZXh0Y29sb3IoNSsxNDMpOwp0ZXh0YmFja2dyb3VuZChXSElURSk7CmdvdG94eSh4LHkpOwpjcHJpbnRmKCIlcyIsc3RyKTsKdGV4dGNvbG9yKEdSRUVOKTsKdGV4dGJhY2tncm91bmQoQkxBQ0spOwp9CnZvaWQgbWFpbl9tZW51Ojpib3goaW50IHgxLGludCB5MSxpbnQgeDIsaW50IHkyKQp7CmZvcihpbnQgY29sPXgxO2NvbDx4Mjtjb2wrKykKewpnb3RveHkoY29sLHkxKTsKY3ByaW50ZigiJWMiLDE5Nik7CmdvdG94eShjb2wseTIpOwpjcHJpbnRmKCIlYyIsMTk2KTsKfQpmb3IoaW50IHJvdz1sO3Jvdzx5Mjtyb3crKykKewpnb3RveHkoeDEscm93KTsKY3ByaW50ZigiJWMiLDE3OSk7CmdvdG94eSh4Mixyb3cpOwpjcHJpbnRmKCIlYyIsMTc5KTsKfQpnb3RveHkoeDEseTEpOwpjcHJpbnRmKCIlYyIsMjE4KTsKZ290b3h5KHgxLHkyKTsKY3ByaW50ZigiJWMiLCAxOTIpOwpnb3RveHkoeDIseTEpOwpjcHJpbnRmKCIlYyIsMTkxKTsKZ290b3h5KHgyLHkyKTsKY3ByaW50ZigiJWMiLDIxNyk7Cn0KY2hhciBtYWluX21lbnU6Om1lbnUoKQp7CmNscnNjcigpOwp0ZXh0Y29sb3IoMjIpOwpib3goMjAsIDYsIDY1LCAyMCk7CmJveCgxOCwgNCwgNjcsIDIyKTsKdGV4dGNvbG9yKDUrMTQzKTsKZ290b3h5KDM2LCA1KTsKdGV4dGJhY2tncm91bmQoQkxVRSk7CmNwcmludGYoIkIgQSBOIEsgSSBOIEciKTsKdGV4dGJhY2tncm91bmQoQkxBQ0spOwp0ZXh0Y29sb3IoMjIpOwpmb3IoaSA9IDE7IGkgPCA3OyBpKyspCm5vcm1hbHZpZGVvKDMyLCBpKzEwLCBhW2ldKTsKcmV2ZXJzZXZpZGVvKDMyLCAxMCwgYVswXSk7CmkgPSBkb25lID0gMDsKX3NldGN1cnNvcnR5cGUoX05PQ1VSU09SKTsKZG8KewppbnQga2V5ID0gZ2V0Y2goKTsKc3dpdGNoIChrZXkpCnsKY2FzZSAwMDoKa2V5ID0gZ2V0Y2goKTsKc3dpdGNoIChrZXkpCnsKY2FzZSA3MjoKbm9ybWFsdmlkZW8oMzIsIGkrMTAsIGFbaV0pOwppLS07CmlmIChpID09IC0xKQppID0gNjsKcmV2ZXJzZXZpZGVvKDMyLGkrMTAsYVtpXSk7CmJyZWFrOwpjYXNlIDgwOgpub3JtYWx2aWRlbygzMiwgaSsxMCwgYVtpXSk7CmkrKzsKaWYgKGkgPT0gNykKaSA9IDA7CnJldmVyc2V2aWRlbygzMiwgaSsxMCwgYVtpXSk7CmJyZWFrOwp9CmJyZWFrOwpjYXNlIDEzOgpkb25lID0gMTsKfQp9CndoaWxlICghZG9uZSk7CnNldGN1cnNvcnR5cGUoTk9DVVJTT1IpOwpyZXR1cm4oaSs0OSk7Cn0Kdm9pZCBtYWluX21lbnU6OmNvbnRyb2xfbWVudSgpCnsKY2hhciBjaG9pY2U7CmFjY291bnQgYTsKZG8KewpjaG9pY2UgPSBtZW51KCkpOwpjbHJzY3IoKTsKc3dpdGNoIChjaG9pY2UpCnsKY2FzZSAnMSc6CnNldGN1cnNvcnR5cGUoTk9STUFMQ1VSU09SKTsKYm94KDMsIDEsIDc1LCAyNCk7CmJveCg1LCAyLCA3MywgMjMpOwphLm5ld19hY2NvdW50KCk7CmJyZWFrOwpjYXNlICcyJzoKYm94KDMsIDEsIDc1LCAyNCk7CmJveCg1LCAyLCA3MywgMjMpOwppbml0aWFsIGluaTsKaW5pLmRpc3BsYXlfbGlzdCgpOwpicmVhazsKY2FzZSAnMyc6CmJveCgzLCAxLCA3NSwgMjQpOwpib3goNSwgMiwgNzMsIDIzKTsKc2V0Y3Vyc29ydHlwZShOT1JNQUxDVVJTT1IpOwphLmRpc3BsYXlfYWNjb3VudCgpOwpicmVhazsKY2FzZSAnNCc6CmJveCgzLCAxLCA3NSwgMjQpOwpib3goNSwgMiwgNzMsIDIzKTsKYWNjb3VudCBhOwpzZXRjdXJzb3J0eXBlKE5PUk1BTENVUlNPUik7CmEudHJhbnNhY3Rpb24oKTsKYnJlYWs7CmNhc2UgJzUnOgpib3goMywgMSwgNzUsIDI0KTsKYm94KDUsIDIsIDczLCAyMyk7CnNldGN1cnNvcnR5cGUoX05PUk1BTENVUlNPUik7CmEubW9udGhfcmVwb3J0KCk7CmJyZWFrOwpjYXNlICc2JzoKYm94KDMsIDEsIDc1LCAyNCk7CmJveCg1LCAyLCA3MywgMjMpOwpnb3RveHkoMTAsMTApOwplZGl0X21lbnUoKTsKYnJlYWs7CmNhc2UgJzcnIDpleGl0KDApOwp9Cn0gd2hpbGUgKGNob2ljZSAhPSA2KTsKY2hhciBtYWluX21lbnU6OmVfbWVudSgpCmNscnNjcigpOwp0ZXh0Y29sb3IoMjIpOwpib3goMjUsNiw2MCwxNSk7CmJveCgyMyw0LDYyLDE3KTsKdGV4dGNvbG9yKDUrMTQzKTsKZ290b3h5KDM0LDUpOwp0ZXh0YmFja2dyb3VuZChHUkVFTik7CmNwcmludGYoIkVESVQgLSBNRU5VIik7CnRleHRjb2xvcigyMik7CnRleHRiYWNrZ3JvdW5kKEJMQUNLKTsKZm9yIChpPTE7aSA8IDM7IGkrKykKbm9ybWFsdmlkZW8oMzIsIGkrMTAsIGJbaV0pOwpyZXZlcnNldmlkZW8oMzIsIDEwLCBiWzBdKTsKaSA9IGRvbmUgPSAwOwpfc2V0Y3Vyc29ydHlwZShOT0NVUlNPUik7CmRvCnsKaW50IGtleSA9IGdldGNoKCk7CnN3aXRjaCAoa2V5KQp7CmNhc2UgMDA6CmtleSA9IGdldGNoKCk7CnN3aXRjaCAoa2V5KQp7CmNhc2UgNzI6Cm5vcm1hbHZpZGVvKDMyLCBpKzEwLCBiW2ldKTsKaS0tOwppZiAoaSA9PSAtMSkKaSA9IDI7CnJldmVyc2V2aWRlbygzMiwgaSsxMCwgYltpXSk7CmJyZWFrOwpjYXNlIDgwOgpub3JtYWx2aWRlbygzMiwgaSsxMCwgYltpXSk7Cn0KfQppKys7CmlmIChpID0gMykKaT0wOwpyZXZlcnNldmlkZW8oMzIsIGkrMTAsIGJbaV0pOwpicmVhazoKfQpicmVhazsKY2FzZSAxMzoKZG9uZSA9IDE7Cn0KfQp3aGlsZSAoIWRvbmUpOwpzZXRjdXJzb3J0eXBlKE5PQ1VSU09SKTsKcmV0dXJuKGkrNDkpOwp7CmNoYXIgY2hvaWNlOwphY2NvdW50IGE7CmRvCnsKY2hvaWNlID0gZV9tZW51KCk7CmNscnNjcigpOwpzd2l0Y2ggKGNob2ljZSkKewpjYXNlICcxJzoKYm94KDMsIDEsIDc1LCAyNCk7CmJveCg1LCAyLCA3MywgMjMpOwpjYXNlICcyJzoKaW5pdGlhbCBpbmk7Cl9zZXRjdXJzb3J0eXBlKF9OT1JNQUxDVVJTT1IpOwppbmkubW9kaWZ5KCk7CmJyZWFrOgpjYXNl4oCZMuKAmToKYm94KDMsIDEsIDc1LCAyNCk7CmJveCg1LCAyLCA3MywgMjMpOwphY2NvdW50IGE7Cl9zZXRjdXJzb3J0eXBlKE5PUk1BTENVUlNPUik7CmEuY2xvc2VfYWNjb3VudCgpOwpicmVhazsKY2FzZSAnMyc6CnJldHVybjsKfQp9IHdoaWxlIChjaG9pY2UgIT0gNik7CmZvciAoY29sdW1uMTsgY29sdW1uMSA8PSBjb2x1bW4yOyBjb2x1bW4xKyspCmdvdG94eShjb2x1bW4xLCByb3cpOwpjb3V0PDxjOwp9Cn0Kewpmb3IgKHJvd2w7IHJvd2wgPD0gcm93Mjsgcm93MSsrKQp7CmdvdG94eShjb2x1bW4sIHJvdzEpOwpjb3V0PDwgYzsKfQp9CnsKY2hhciBjaCA9IDIxODsKY2hhciBjMSwgYzIsIGMzLCBjNDsKY2hhciAxMSA9IDE5NiwgMTIgPSAxNzk7CmlmIChjID0gY2gpCnsKYzE9MjE4OwpjMiA9IDE5MTsKYzM9MjE3OyBjNCA9IDIxNzsKMTEgPSAxOTY7CjEyID0gMTc5Owp9CmVsc2UKewpjMSA9IGM7CmMyID0gYzsKYzMgPSBjOwpjND0gYzsKMTEgPSBjOwpjMiA9IGM7Cn0KZ290b3h5KGNvbHVtbmwsIHJvdzEpOwpjb3V0PDwgY2w7CmdvdG94eShjb2x1bW4yLCByb3cxKTsKY291dDw8PCBjMjsKZ290b3h5KGNvbHVtbmwsIHJvdzIpOwpjb3V0PDw8IGMzOwpnb3RveHkoY29sdW1uMiwgcm93Mik7CmNvdXQ8PCBjNDsKY29sdW1uMSsrOwpjb2x1bW4yLS07CmxpbmVfaG9yKGNvbHVtbjEsIGNvbHVtbjIsIHJvdzEsIDExKTsgLy9Ib3Jpem9udGFsIGxpbmUKbGluZV9ob3IoY29sdW1uMSwgY29sdW1uMiwgcm93MiwgMTEpOwpjb2x1bW4gMSAtLTsKY29sdW1uMisrOwpyb3dsKys7CnJvdzItLTsKbGluZV92ZXIocm93bCwgcm93MiwgY29sdW1uMSwgMTIpOyAvLyBWZXJ0aWNhbCBsaW5lCmxpbmVfdmVyKHJvdzEsIHJvdzIsIGNvbHVtbjIsIDEyKTsKY2xyc2NyKCk7IHNldGJrY29sb3IoNyk7CgoKc2V0dGV4dHN0eWxlKDcsSE9SSVpfRElSLDQpOwpvdXR0ZXh0eHkoNzAsMjAsIldlbGNvbWUgdG8gQmFua2luZyBTeXN0ZW0iKTsKc2V0dGV4dHN0eWxlKDIsSE9SSVpfRElSLDUpOwpvdXR0ZXh0eHkoNjAsMTAwLCJZb3UgY2FuIGtlZXAgcmVjb3JkIG9mIGRhaWx5IGJhbmtpbmcgdHJhbnNhY3Rpb24iKTsKZGVsYXkoMik7Cm91dHRleHR4eSg2MCwxMzAsIlRoaXMgcHJvZ3JhbSBpcyBjYXBhYmxlIG9mIGhvbGRpbmcgYW55IG5vLiBvZiBBL2MiKTsKZGVsYXkoMik7Cm91dHRleHR4eSg2MCwxNjAsIi1JbiBmaXJzdCBvcHRpb24geW91IGNhbiBvcGVuIG5ldyBBL2MiKTsKZGVsYXkoMik7Cm91dHRleHR4eSg2MCwxOTAsIi1JbiBzZWNvbmQgb3B0aW9uIHlvdSBjYW4gc2VlIHRoZSBsaXN0IG9mIGFsbCBBL2MncyIpOwpkZWxheSgyKTsKb3V0dGV4dHh5KDYwLDIyMCwiLUluIHRoaXJkIG9wdGlvbiB5b3UgY2FuIHNlZSBhbGwgdHJhbnMuIG9mIGluZC4gQS9jIik7CmRlbGF5KDIpOwpvdXR0ZXh0eHkoNjAsMjUwLCItSW4gZm91cnRoIG9wdGlpb24geW91IGNhbiBkbyBiYW5raW5nIHRyYW5zYWN0aW9ucyIpOwpkZWxheSgyKTsKb3V0dGV4dHh5KDYwLDI4MCwiKERlcG9zaXQvV2l0aGRyYXcpIik7CmRlbGF5KDIpOwpvdXR0ZXh0eHkoNjAsMzEwLCItSW4gZmlmdGggb3B0LiB5b3UgY2FuIHRha2UgbW9udGhseSBpbmQuIEEvYyByZXBvcnQiKTsKZGVsYXkoMik7CmRlbGF5KDIpOwpvdXR0ZXh0eHkoNjAsMzQwLCItSW4gc2l4dGggb3B0LiB5b3UgY2FuIG1vZGlmeSBvciBkZWxldGUgYW55IGFjY291bnQiKTsKb3V0dGV4dHh5KDYwLDM3MCwiTm90ZS06T3BlbmluZyBhbW91bnQgc2hvdWxkIG5vdCBsZXNzIHRoYXQgUnMuIDUwMC8tIik7CmRlbGF5KDIpOwpvdXR0ZXh0eHkoNjAsNDAwLCItQW5kIGxhc3Qgb3B0aW9uIGlzIFF1aXQgKEV4aXQgdG8gV2luZG93KSIpOwpkZWxheSgyKTsKc2V0dGV4dHN0eWxlKDcsSE9SSVpfRElSLDQpOwpvdXR0ZXh0eHkoODAsNDIwLCJQcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlLi4uIik7CmdldGNoKCk7Cn0KCgp7CmNscnNjcigpOwppbnQgajsKY2hhciB0X2FjY1sxMF07CmludCB0LCB0X2FjY25vOwpnb3RveHkoMTcsIDEpOwpjb3V0PDwiJmx0OzA+PUV4aXQiOwpnb3RveHkoNSw1KTsKY291dDw8IkVudGVyIHRoZSBhY2NvdW50IG5vLiAiOwpnZXRzKHRfYWNjKTsKdCA9IGF0b2kodF9hY2MpOwp0X2FjY25vID0gdDsKaWYgKHRfYWNjbm89MCkKcmV0dXJuOwpjbHJzY3IoKTsKaWYgKCFmb3VuZF9hY2NvdW50KHRfYWNjbm8pKQp7CmdvdG94eSg1LCA1KTsKY291dDw8Ilw3QWNjb3VudCBub3QgZm91bmQiOwpnZXRjaCgpOwpyZXR1cm47Cn0KZ290b3h5KDcxLCAxKTsKY291dDw8IiZsdDswPj1FeGl0IjsKdGV4dGJhY2tncm91bmQoV0hJVEUpOwpnb3RveHkoMywgMyk7CmZvcihqPTE7ajw9NzY7IGorKykKY3ByaW50ZigiICIpOwp0ZXh0YmFja2dyb3VuZChCTEFDSyk7CnRleHRjb2xvcihCTEFDSytCTElOSyk7CnRleHRiYWNrZ3JvdW5kKFdISVRFKTsKZ290b3h5KDMwLCAzKTsKY3ByaW50ZigiTW9kaWZ5IEFjY291bnQgU2NyZWVuIik7CnRleHRjb2xvcihMSUdIVEdSQVkpOwp0ZXh0YmFja2dyb3VuZChCTEFDSyk7CmludCBkbCwgbWwsIHlsOwpzdHJ1Y3QgZGF0ZSBkOwpnZXRkYXRlKCZkKTsKZDEgPSBkLmRhX2RheTsKbWwgPSBkLmRhX21vbjsKeWwgPSBkLmRhX3llYXI7IGdvdG94eSg0LCAyKTsKY291dDw8IkRhdGU6ICIgPDwgZGwgPDwiLyI8PG1sIDw8PCIvIjw8eWw7CmNoYXIgY2g7CmRpc3BsYXkodF9hY2Nubyk7CmFjY291bnQgYTsKZG8KewphLmNsZWFyKDUsIDEzKTsKZ290b3h5KDUsIDEzKTsKY291dDw8PDwgIk1vZGlmeSB0aGlzIGFjY291bnQgPHkvbj46ICI7CmNoID0gZ2V0Y2hlKCk7CmlmIChjaD0nMCcpCnJldHVybjsKY2ggPSB0b3VwcGVyKGNoKTsKfSB3aGlsZSAoY2ghPSAnTicgJiYgY2ggIT0gJ1knKTsKaWYgKGNoID09ICdOJykKcmV0dXJuOwppbnQgbW9kaWZpZWQgPSAwLCB2YWxpZDsKY2hhciB0X25hbWVbMzBdLCB0X2FkZHJlc3NbMzBdOwpnb3RveHkoNSwgMTUpOwpjb3V0PDwiTmFtZTogIjsKZ290b3h5KDUsIDE2KTsKY291dDw8IkFkZHJlc3M6ICI7CmRvCnsKYS5jbGVhcigxNSwgMTUpOwphLmNsZWFyKDUsIDIzKTsKZ290b3h5KDUsIDIzKTsKY291dDw8IkVudGVyIE5hbWUgb3IgUHJlc3MgRW50ZXIgZm9yIE5vIENoYW5nZSI7CnZhbGlkID0gMTsKZ290b3h5KDE1LCAxNSk7CmdldHModF9uYW1lKTsKc3RydXByKHRfbmFtZSk7CmlmICh0X25hbWVbMF0gPT0gJzAnKQpyZXR1cm47CmlmIChzdHJsZW4odF9uYW1lKSA+IDI1KQp7CnZhbGlkID0gMDsKZ290b3h5KDUsIDIzKTsKY3ByaW50ZigiXDdOYW1lIHNob3VsZCBub3QgZ3JlYXRlciB0aGFuIDI1Iik7CmdldGNoKCk7Cn0KfSB3aGlsZSAoIXZhbGlkKTsKZG8KewphLmNsZWFyKDE1LCAxNik7CmEuY2xlYXIoNSwgMjMpOwpnb3RveHkoNSwgMjMpOwpjb3V0PDwiRW50ZXIgQWRkcmVzcyBvciBwcmVzcyBlbnRlciBmb3Igbm8gQ2hhbmdlIjsKdmFsaWQgPSAxOwpnb3RveHkoMTUsIDE2KTsKZ2V0cyh0X2FkZHJlc3MpOwpzdHJ1cHIodF9hZGRyZXNzKTsKaWYgKHRfYWRkcmVzc1swXSA9ICcwJykKcmV0dXJuOwppZiAoc3RybGVuKHRfYWRkcmVzcykgPjI1KQp2YWxpZCA9IDA7CmdvdG94eSg1LCAyMyk7CmNwcmludGYoIlw3QWRkcmVzcyBzaG91bGQgbm90IGdyZWF0ZXIgdGhhbiAyNSIpOwpnZXRjaCgpOwp9Cn0gd2hpbGUgKCF2YWxpZCk7CmlmIChzdHJsZW4odF9hZGRyZXNzKSA+IDApCm1vZGlmaWVkID0gMTsKaWYgKCFtb2RpZmllZCkKcmV0dXJuOwphLmNsZWFyKDUsMjMpOwpkbwphLmNsZWFyKDUsIDIzKTsKZ290b3h5KDUsMTgpOwpjb3V0PDwiRG8geW91IHdhbnQgdG8gc2F2ZSBDaGFuZ2VzPFkvTj46IjsKY2g9Z2V0Y2hlKCk7CmlmKGNoPT0nMCcpCnJldHVybjsKY2g9dG91cHBlcihjaCk7Cn13aGlsZShjaCE9J04nJiYgY2ghJ1knKTsKaWYoY2g9PSdOJykKcmV0dXJuOwpnb3RveHkoNSwyMSk7CmNvdXQ8PCJcN1JlY29yZCBtb2RpZnllZCI7CmdvdG94eSg1LDIzKTsKY291dDw8IlByZXNzIGFueSBrZXkgdG8gY29udGludWUuLi4iOwpnZXRjaCgpOwp9CnsKZnN0cmVhbiBmaWxlOwpmaWxlLm9wZW47CmZpbGUuc2Vla2coMCxpb3M6OmJlZyk7CmlmKHRfYWNjbm89PWFjY25vKQp7CmdvdG94eSg4LDUpOwpjb3V0PDwiQWNjb3VudCBuby4iPDxhY2NubzsKZ290b3h5KDEwLDgpOwpjb3V0PDxBZGRyZXNzOiI7CnB1dHMoYWRkcmVzcyk7CmdvdG94eSgxMCw5KTsKY291dDw8IkFkZHJlc3M6IjsKcHV0cyhhZGRyZXNzKTsKZ290b3h5KDEwLDEwKTsKY291dDw8IkJhbGFjZToiPDxzZXR3KDE1KQo8PHNldHByZWNpc2lvbigyKQo8PHNldGlvc2ZsYWdzKGlvczo6c2hvd3BvaW50KQo8PHNldGlvbnNmbGFncyhpb3M6OmZpeGVkKTw8YmFsYW5jZTsKYnJlYWs7Cn0KfQpmaWxlLmNsb3NlKCk7Cn0KewppbnQgcmVjbm87CnJlY25vPXJlY29yZG5vKHRfYWNjbm8pOwpmc3RyZWFtIGZpbGU7CmZpbGUub3BlbigiSU5JVElBTC5kYXQiLGlvczo6b3V0fGlvczo6YXRlKTsKc3RyY3B5KG5hbWUsdF9uYW1lKTsKc3RyY3B5KGFkZHJlc3MsIHRfYWRkcmVzcyk7CmludCBsb2NhdGlvbjsKbG9jYXRpb24gPSAocmVjbm8tMSkqIHNpemVvZihpbml0aWFsKTsKZmlsZS5zZWVrcChsb2NhdGlvbik7CmZpbGUud3JpdGUoKGNoYXIgKil0aGlzLCBzaXplb2YoaW5pdGlhbCkpOwpmaWxlLmNsb3NlKCk7CnJldHVybjsKaW50IGluaXRpYWw6Omxhc3RfYWNjbm8odm9pZCkKewpmc3RyZWFtIGZpbGU7CmZpbGUub3BlbigiSU5JVElBTC5kYXQiLCBpb3M6OmluKTsKZmlsZS5zZWVrZygwLCBpb3M6OmJlZyk7CmludCBjb3VudCA9IDA7CmNvdW50ID0gYWNjbm87CmZpbGUuY2xvc2UoKTsKcmV0dXJuIGNvdW50OwphY2Nubz10X2FjY25vOwpzdHJjcHkobmFtZSwgdF9uYW1lKTsKc3RyY3B5KGFkZHJlc3MsIHRfYWRkcmVzcyk7CmJhbGFuY2U9dCBiYWxhbmNlOwpmc3RyZWFtIGZpbGU6CmZpbGUub3BlbigiSU5JVElBTC5kYXQiLCBpb3M6Om91dCBpb3M6OmFwcCk7CmZpbGUud3JpdGUoKGNoYXIgKil0aGlzLCBzaXplb2YoaW5pdGlhbCkpOwpmaWxlLmNsb3NlKCk7CnZvaWQgaW5pdGlhbDo6ZGVsZXRlX2FjY291bnQoaW50IHRfYWNjbm8pCnsKZnN0cmVhbSBmaWxlOwpmaWxlLm9wZW4oIklOSVRJQUwuZGF0IiwgaW9zOjppbik7CmZzdHJlYW0gdGVtcDsKdGVtcC5vcGVuKCJURU1QLmRhdCIsIGlvczo6b3V0KTsKZmlsZS5zZWVrZygwLGlvczo6YmVnKTsKd2hpbGUgKCFmaWxlLmVvZigpCnsKZmlsZS5yZWFkKChjaGFyICopdGhpcywgc2l6ZW9mKGluaXRpYWwpKTsKaWYgKGZpbGUuZW9mKCkKYnJlYWs7CmlmIChhY2NubyAhPXRfYWNjbm8pCnRlbXAud3JpdGUoKGNoYXIgKil0aGlzLCBzaXplb2YoaW5pdGlhbCkpOwp9CmZpbGUuY2xvc2UoKTsKdGVtcC5jbG9zZSgpOwpmaWxlLm9wZW4oIklOSVRJQUwuZGF0IiwgaW9zOjpvdXQpOwp0ZW1wLm9wZW4oIlRFTVAuZGF0IiwgaW9zOjppbik7CnRlbXAuc2Vla2coMCwgaW9zOjpiZWcpOwp3aGlsZSAoIXRlbXAuZW9mKCkpCnsKdGVtcC5yZWFkKChjaGFyICopdGhpcywgc2l6ZW9mKGluaXRpYWwpKTsKaWYgKHRlbXAuZW9mKCkpCmJyZWFrOwppZiAoYWNjbm8gIT0gdF9hY2NubykKZmlsZS53cml0ZSgoY2hhciAqKXRoaXMsIHNpemVvZihpbml0aWFsKSk7Cn0KZmlsZS5jbG9zZSgpOwp0ZW1wLmNsb3NlKCk7CnsKZnN0cmVhbSBmaWxlOwpmaWxlLm9wZW4oIkJBTktJTkcuZGF0IiwgaW9zOjphcHApOwphY2Nubz10X2FjY25vOwpnZXRjaCgpOwpkZCA9IGRsOwptbSA9IG1sOwp5eSA9IHkxOwp0cmFuID0gdCB0cmFuOwpzdHJjcHkodHlwZSwgdF90eXBlKTsKaW50ZXJlc3QgPSB0IGludGVyZXN0OwphbW91bnQgPSB0X2Ftb3VudDsKYmFsYW5jZSA9IHQgYmFsYW5jZTsKZmlsZS53cml0ZSgoY2hhciAqKXRoaXMsIHNpemVvZihhY2NvdW50KSk7CmZpbGUuY2xvc2UoKTsKewpmc3RyZWFtIGZpbGU7CmZpbGUub3BlbigiQkFOS0lORy5kYXQiLCBpb3M6OmluKTsKZnN0cmVhbSB0ZW1wOwp0ZW1wLm9wZW4oIlRFTVAuZGF0IiwgaW9zOjpvdXQpOwpmaWxlLnNlZWtnKDAsIGlvczo6YmVnKTsKd2hpbGUgKCFmaWxlLmVvZigpKQp7CmZpbGUucmVhZCgoY2hhciAqKXRoaXMsIHNpemVvZihhY2NvdW50KSk7CmlmIChmaWxlLmVvZigpKQpicmVhazsKaWYgKGFjY25vICE9dF9hY2NubykKdGVtcC53cml0ZSgoY2hhciAqKXRoaXMsIHNpemVvZihhY2NvdW50KSk7Cn0KZmlsZS5jbG9zZSgpOwp0ZW1wLmNsb3NlKCk7CmZpbGUub3BlbigiQkFOS0lORy5kYXQiLCBpb3M6Om91dCk7CnRlbXAub3BlbigiVEVNUC5kYXQiLCBpb3M6OmluKTsKdGVtcC5zZWVrZygwLCBpb3M6OmJlZyk7CndoaWxlICghdGVtcC5lb2YoKSkKewp0ZW1wLnJlYWQoKGNoYXIgKil0aGlzLCBzaXplb2YoYWNjb3VudCkpOwppZiAodGVtcC5lb2YoKQpicmVhazsKaWYgKGFjY25vICE9dF9hY2NubykKZmlsZS53cml0ZSgoY2hhciAqKXRoaXMsIHNpemVvZihhY2NvdW50KSk7Cn0KZmlsZS5jbG9zZSgpOwp0ZW1wLmNsb3NlKCk7CnsKY2xyc2NyKCk7CmludCBmbGFnOwpmbG9hdCB0IGJhbCA9IDAuMDsKZnN0cmVhbSBmaWxlOwpnb3RveHkoMjUsMik7CmNvdXQ8PCJBY2NvdW50cyBMaXN0IGluIEJhbmsiOwpnb3RveHkoMjUsIDMpOwpjb3V0PDwKMTEKaW50IGRsLCBtbCwgeWw7CnN0cnVjdCBkYXRlIGQ7Ci8vIEZvciBleHRyYWN0aW5nIHN5c3RlbSBkYXRlCmdldGRhdGUoJmQpOwpkMSA9IGQuZGFfZGF5OwptbCA9IGQuZGFfbW9uOwp5bCA9IGQuZGFfeWVhcjsKZ290b3h5KDYyLCAzKTsKY291dDw8IkRhdGU6ICIgPDwgZGwgPDwiLyI8PG1sIDw8PCIvIjw8eWw7CmdvdG94eSgxLCA0KTsKZm9yIChpbnQgaiA9IDE7IGogPD0gNzk7IGorKykKY291dDw8PDw8Ij0iOwpnb3RveHkoMSwgNSk7CmNvdXQ8PCJBY2NubyMiOgpnb3RveHkoMTAsNSk7CmNvdXQ8PCJOYW1lIjsKZ290b3h5KDMwLDUpOwpjb3V0PDwiQWRkcmVzcyI7CmdvdG94eSg2NSw1KTsKY291dDw8IkJhbGFuY2UiOwpnb3RveHkoMSwgNik7CmZvciAoaiA9IDE7IGogPD0gNzk7IGorKykKY291dDw8Ij0iOwpmaWxlLm9wZW4oIklOSVRJQUwuZGF0IiwgaW9zOjppbik7CmZpbGUuc2Vla2coMCxpb3M6OmJlZyk7CmludCByb3cgPSA3Owp3aGlsZSAoZmlsZS5yZWFkKChjaGFyICopdGhpcywgc2l6ZW9mKGluaXRpYWwpKSkKewpmbGFnID0gMDsKZGVsYXkoMik7CmdvdG94eSgzLCByb3cpOwpjb3V0PDwgYWNjbm87CmdvdG94eSgxMCwgcm93KTsKcHV0cyhuYW1lKTsKZ290b3h5KDMwLCByb3cpOwpwdXRzKGFkZHJlc3MpOwpnb3RveHkoNjUsIHJvdyk7CmNvdXQ8PDw8c2V0dygxNSk8PHNldHByZWNpc2lvbigyKSA8PHNldGlvc2ZsYWdzKGlvczo6bGVmdCkKPDxzZXRpb3NmbGFncyhpb3M6OnNob3dwb2ludCk8PDw8c2V0aW9zZmxhZ3MoaW9zOjpmaXhlZCk8PGJhbGFuY2U7CnRfYmFsPXRfYmFsICsgYmFsYW5jZTsKcm93Kys7CmlmIChyb3cgPjIzKQp7CmZsYWcgPSAxOwpyb3cgPSA2Owpnb3RveHkoNCwgMjQpOwpjb3V0PDwiUHJlc3MgYW55IGtleSB0byBjb250aW51ZS4uLi4gIjsKZ2V0Y2goKTsKY2xyc2NyKCk7Cn0KfQpnb3RveHkoMSwgcm93KTsKZm9yIChqID0gMTsgaiA8PSA3OTsgaisrKQpjb3V0PDwiPSIuCnJvdysrOwpnb3RveHkoMywgcm93KTsKY291dDw8IlRvdGFsIEJhbGFuY2UgaW4gQmFuayBpczogIjsKZ290b3h5KDY1LCByb3cpOwpjb3V0PDw8c2V0dygxNSk8PDxzZXRwcmVjaXNpb24oMik8PHNldGlvc2ZsYWdzKGlvczo6bGVmdCkKPDxzZXRpb3NmbGFncyhpb3M6OnNob3dwb2ludCk8PHNldGlvc2ZsYWdzKGlvczo6Zml4ZWQpPDx0X2JhbDsKZmlsZS5jbG9zZSgpOwppZiAoIWZsYWcpCnsKZ290b3h5KDQsIDI0KTsKY291dDw8PDwgIlByZXNzIGFueSBrZXkgdG8gY29udGludWUuLi4iOwpnZXRjaCgpOyB9CnsKZm9yIChpbnQgaiA9IGNvbDsgaiA8PSA3OTsgaisrKQp7CmdvdG94eShqLCByb3cpOwpjb3V0PDwiIi4KfQppbnQgaW5pdGlhbDo6Zm91bmRfYWNjb3VudChpbnQgdF9hY2NubykKewpmc3RyZWFtIGZpbGU7CmZpbGUub3BlbigiSU5JVElBTC5kYXQiLCBpb3M6OmluKTsKZmlsZS5zZWVrZygwLCBpb3M6OmJlZyk7CmludCBmb3VuZCA9IDA7CnsKaWYoYWNjbm89PXRfYWNjbm8pCnsKZm91bmQ9MTsKYnJlYWs7Cn0KfQpmaWxlLmNsb3NlKCk7CnJldHVybmZvdW5kOwp9CnsKZnN0cmVhbSBmaWxlOwpmaWxlLm9wZW4oIklOSVRJQUwuZGF0Iixpb3M6OmluKTsKZmlsZS5zZWVrZygwLGlvczo6YmVnKTsKY2hhdCB0X25hbWVbMzBdOwp7CmlmKGFjY25vPXQtYWNjbm8pCnsKc3RyY3B5KHQtbmFtZSxuYW1lKTsKYnJlYWs7Cn0KfQpmaWxlLmNsb3NlKCk7CnJldHVybiB0X25hbWU7CgoKCgo=
#include<iostream.h>
#include<fstream.h>
#include<process.h>
#include<string.h>
#include<stdio.h>
#include<ctype.h>
#include<conio.h>
#include<dos.h>
#include<stdlib.h>
#include<iomanip.h>
#include<graphics.h>
typedef char option[15];
const int ROW = 10,COL = 10;
int scan;
int ascii;
option a[]= {
"NewAccount",
"ListofAccounts",
"IndAccount",
"Daily Trans",
"MonthlyReport",
"EditAccount",
"Exit"};
option b[] = {
"Modify Account",
"Closeaccount",
"Quit"
};
class main_menu
{
int i,done;
public:
void normalvideo(int x, int y,char *str);
void reversevideo(int x, int y,char *str);
void box(int x1,int y1,int x2,int y2);
char menu();
void control_menu();
char e_menu();
void edit_menu();
void help(void);
};
class shape
{
public:
void line_hor(int, int, int, char);
void line_ver(int, int, int, char);
void box(int, int, int, int, char);
};
class initial
{
public:
void add_to_file(int, char t_name[30], char t_address[30], float);
void display_list(void);
void delete_account(int);
void update_balance(int, char t_name[30], char t_address[30], float);
void modify(void);
int last_accno(void);
int found_account(int);
char *return_name(int);
char *return_address(int);
float give_balance(int);
int recordno(int);
void display(int);
private:
};
void modify_account(int, char t_name[30], char t_address [30]);
int accno;
char name[30], address[30];
float balance;
};
class account
{
public:
void new_account(void);
void close_account(void);
void display_account(void);
void transaction(void);
void clear(int, int);
void month_report(void);
private:
void add_to_file(int, int, int, int,char,char t_type[10], float, float, float);
void delete_account(int);
int no_of_days(int, int, int, int, int, int);
float calculate_interest(int, float);
void display(int);
void box_for_display(int);
int accno;
char type[10];
int dd, mm, yy;
char tran;
float interest, amount, balance;
};
void main_menu::normalvideo(int x, int y,char *str)
{
gotoxy(x,y);
cprintf("%s", str);
}
void main_menu::reversevideo(int x, int y,char *str)
{
textcolor(5+143);
textbackground(WHITE);
gotoxy(x,y);
cprintf("%s",str);
textcolor(GREEN);
textbackground(BLACK);
}
void main_menu::box(int x1,int y1,int x2,int y2)
{
for(int col=x1;col<x2;col++)
{
gotoxy(col,y1);
cprintf("%c",196);
gotoxy(col,y2);
cprintf("%c",196);
}
for(int row=l;row<y2;row++)
{
gotoxy(x1,row);
cprintf("%c",179);
gotoxy(x2,row);
cprintf("%c",179);
}
gotoxy(x1,y1);
cprintf("%c",218);
gotoxy(x1,y2);
cprintf("%c", 192);
gotoxy(x2,y1);
cprintf("%c",191);
gotoxy(x2,y2);
cprintf("%c",217);
}
char main_menu::menu()
{
clrscr();
textcolor(22);
box(20, 6, 65, 20);
box(18, 4, 67, 22);
textcolor(5+143);
gotoxy(36, 5);
textbackground(BLUE);
cprintf("B A N K I N G");
textbackground(BLACK);
textcolor(22);
for(i = 1; i < 7; i++)
normalvideo(32, i+10, a[i]);
reversevideo(32, 10, a[0]);
i = done = 0;
_setcursortype(_NOCURSOR);
do
{
int key = getch();
switch (key)
{
case 00:
key = getch();
switch (key)
{
case 72:
normalvideo(32, i+10, a[i]);
i--;
if (i == -1)
i = 6;
reversevideo(32,i+10,a[i]);
break;
case 80:
normalvideo(32, i+10, a[i]);
i++;
if (i == 7)
i = 0;
reversevideo(32, i+10, a[i]);
break;
}
break;
case 13:
done = 1;
}
}
while (!done);
setcursortype(NOCURSOR);
return(i+49);
}
void main_menu::control_menu()
{
char choice;
account a;
do
{
choice = menu());
clrscr();
switch (choice)
{
case '1':
setcursortype(NORMALCURSOR);
box(3, 1, 75, 24);
box(5, 2, 73, 23);
a.new_account();
break;
case '2':
box(3, 1, 75, 24);
box(5, 2, 73, 23);
initial ini;
ini.display_list();
break;
case '3':
box(3, 1, 75, 24);
box(5, 2, 73, 23);
setcursortype(NORMALCURSOR);
a.display_account();
break;
case '4':
box(3, 1, 75, 24);
box(5, 2, 73, 23);
account a;
setcursortype(NORMALCURSOR);
a.transaction();
break;
case '5':
box(3, 1, 75, 24);
box(5, 2, 73, 23);
setcursortype(_NORMALCURSOR);
a.month_report();
break;
case '6':
box(3, 1, 75, 24);
box(5, 2, 73, 23);
gotoxy(10,10);
edit_menu();
break;
case '7' :exit(0);
}
} while (choice != 6);
char main_menu::e_menu()
clrscr();
textcolor(22);
box(25,6,60,15);
box(23,4,62,17);
textcolor(5+143);
gotoxy(34,5);
textbackground(GREEN);
cprintf("EDIT - MENU");
textcolor(22);
textbackground(BLACK);
for (i=1;i < 3; i++)
normalvideo(32, i+10, b[i]);
reversevideo(32, 10, b[0]);
i = done = 0;
_setcursortype(NOCURSOR);
do
{
int key = getch();
switch (key)
{
case 00:
key = getch();
switch (key)
{
case 72:
normalvideo(32, i+10, b[i]);
i--;
if (i == -1)
i = 2;
reversevideo(32, i+10, b[i]);
break;
case 80:
normalvideo(32, i+10, b[i]);
}
}
i++;
if (i = 3)
i=0;
reversevideo(32, i+10, b[i]);
break:
}
break;
case 13:
done = 1;
}
}
while (!done);
setcursortype(NOCURSOR);
return(i+49);
{
char choice;
account a;
do
{
choice = e_menu();
clrscr();
switch (choice)
{
case '1':
box(3, 1, 75, 24);
box(5, 2, 73, 23);
case '2':
initial ini;
_setcursortype(_NORMALCURSOR);
ini.modify();
break:
case’2’:
box(3, 1, 75, 24);
box(5, 2, 73, 23);
account a;
_setcursortype(NORMALCURSOR);
a.close_account();
break;
case '3':
return;
}
} while (choice != 6);
for (column1; column1 <= column2; column1++)
gotoxy(column1, row);
cout<<c;
}
}
{
for (rowl; rowl <= row2; row1++)
{
gotoxy(column, row1);
cout<< c;
}
}
{
char ch = 218;
char c1, c2, c3, c4;
char 11 = 196, 12 = 179;
if (c = ch)
{
c1=218;
c2 = 191;
c3=217; c4 = 217;
11 = 196;
12 = 179;
}
else
{
c1 = c;
c2 = c;
c3 = c;
c4= c;
11 = c;
c2 = c;
}
gotoxy(columnl, row1);
cout<< cl;
gotoxy(column2, row1);
cout<<< c2;
gotoxy(columnl, row2);
cout<<< c3;
gotoxy(column2, row2);
cout<< c4;
column1++;
column2--;
line_hor(column1, column2, row1, 11); //Horizontal line
line_hor(column1, column2, row2, 11);
column 1 --;
column2++;
rowl++;
row2--;
line_ver(rowl, row2, column1, 12); // Vertical line
line_ver(row1, row2, column2, 12);
clrscr(); setbkcolor(7);
settextstyle(7,HORIZ_DIR,4);
outtextxy(70,20,"Welcome to Banking System");
settextstyle(2,HORIZ_DIR,5);
outtextxy(60,100,"You can keep record of daily banking transaction");
delay(2);
outtextxy(60,130,"This program is capable of holding any no. of A/c");
delay(2);
outtextxy(60,160,"-In first option you can open new A/c");
delay(2);
outtextxy(60,190,"-In second option you can see the list of all A/c's");
delay(2);
outtextxy(60,220,"-In third option you can see all trans. of ind. A/c");
delay(2);
outtextxy(60,250,"-In fourth optiion you can do banking transactions");
delay(2);
outtextxy(60,280,"(Deposit/Withdraw)");
delay(2);
outtextxy(60,310,"-In fifth opt. you can take monthly ind. A/c report");
delay(2);
delay(2);
outtextxy(60,340,"-In sixth opt. you can modify or delete any account");
outtextxy(60,370,"Note-:Opening amount should not less that Rs. 500/-");
delay(2);
outtextxy(60,400,"-And last option is Quit (Exit to Window)");
delay(2);
settextstyle(7,HORIZ_DIR,4);
outtextxy(80,420,"Press any key to continue...");
getch();
}
{
clrscr();
int j;
char t_acc[10];
int t, t_accno;
gotoxy(17, 1);
cout<<"<0>=Exit";
gotoxy(5,5);
cout<<"Enter the account no. ";
gets(t_acc);
t = atoi(t_acc);
t_accno = t;
if (t_accno=0)
return;
clrscr();
if (!found_account(t_accno))
{
gotoxy(5, 5);
cout<<"\7Account not found";
getch();
return;
}
gotoxy(71, 1);
cout<<"<0>=Exit";
textbackground(WHITE);
gotoxy(3, 3);
for(j=1;j<=76; j++)
cprintf(" ");
textbackground(BLACK);
textcolor(BLACK+BLINK);
textbackground(WHITE);
gotoxy(30, 3);
cprintf("Modify Account Screen");
textcolor(LIGHTGRAY);
textbackground(BLACK);
int dl, ml, yl;
struct date d;
getdate(&d);
d1 = d.da_day;
ml = d.da_mon;
yl = d.da_year; gotoxy(4, 2);
cout<<"Date: " << dl <<"/"<<ml <<<"/"<<yl;
char ch;
display(t_accno);
account a;
do
{
a.clear(5, 13);
gotoxy(5, 13);
cout<<<< "Modify this account <y/n>: ";
ch = getche();
if (ch='0')
return;
ch = toupper(ch);
} while (ch!= 'N' && ch != 'Y');
if (ch == 'N')
return;
int modified = 0, valid;
char t_name[30], t_address[30];
gotoxy(5, 15);
cout<<"Name: ";
gotoxy(5, 16);
cout<<"Address: ";
do
{
a.clear(15, 15);
a.clear(5, 23);
gotoxy(5, 23);
cout<<"Enter Name or Press Enter for No Change";
valid = 1;
gotoxy(15, 15);
gets(t_name);
strupr(t_name);
if (t_name[0] == '0')
return;
if (strlen(t_name) > 25)
{
valid = 0;
gotoxy(5, 23);
cprintf("\7Name should not greater than 25");
getch();
}
} while (!valid);
do
{
a.clear(15, 16);
a.clear(5, 23);
gotoxy(5, 23);
cout<<"Enter Address or press enter for no Change";
valid = 1;
gotoxy(15, 16);
gets(t_address);
strupr(t_address);
if (t_address[0] = '0')
return;
if (strlen(t_address) >25)
valid = 0;
gotoxy(5, 23);
cprintf("\7Address should not greater than 25");
getch();
}
} while (!valid);
if (strlen(t_address) > 0)
modified = 1;
if (!modified)
return;
a.clear(5,23);
do
a.clear(5, 23);
gotoxy(5,18);
cout<<"Do you want to save Changes<Y/N>:";
ch=getche();
if(ch=='0')
return;
ch=toupper(ch);
}while(ch!='N'&& ch!'Y');
if(ch=='N')
return;
gotoxy(5,21);
cout<<"\7Record modifyed";
gotoxy(5,23);
cout<<"Press any key to continue...";
getch();
}
{
fstrean file;
file.open;
file.seekg(0,ios::beg);
if(t_accno==accno)
{
gotoxy(8,5);
cout<<"Account no."<<accno;
gotoxy(10,8);
cout<<Address:";
puts(address);
gotoxy(10,9);
cout<<"Address:";
puts(address);
gotoxy(10,10);
cout<<"Balace:"<<setw(15)
<<setprecision(2)
<<setiosflags(ios::showpoint)
<<setionsflags(ios::fixed)<<balance;
break;
}
}
file.close();
}
{
int recno;
recno=recordno(t_accno);
fstream file;
file.open("INITIAL.dat",ios::out|ios::ate);
strcpy(name,t_name);
strcpy(address, t_address);
int location;
location = (recno-1)* sizeof(initial);
file.seekp(location);
file.write((char *)this, sizeof(initial));
file.close();
return;
int initial::last_accno(void)
{
fstream file;
file.open("INITIAL.dat", ios::in);
file.seekg(0, ios::beg);
int count = 0;
count = accno;
file.close();
return count;
accno=t_accno;
strcpy(name, t_name);
strcpy(address, t_address);
balance=t balance;
fstream file:
file.open("INITIAL.dat", ios::out ios::app);
file.write((char *)this, sizeof(initial));
file.close();
void initial::delete_account(int t_accno)
{
fstream file;
file.open("INITIAL.dat", ios::in);
fstream temp;
temp.open("TEMP.dat", ios::out);
file.seekg(0,ios::beg);
while (!file.eof()
{
file.read((char *)this, sizeof(initial));
if (file.eof()
break;
if (accno !=t_accno)
temp.write((char *)this, sizeof(initial));
}
file.close();
temp.close();
file.open("INITIAL.dat", ios::out);
temp.open("TEMP.dat", ios::in);
temp.seekg(0, ios::beg);
while (!temp.eof())
{
temp.read((char *)this, sizeof(initial));
if (temp.eof())
break;
if (accno != t_accno)
file.write((char *)this, sizeof(initial));
}
file.close();
temp.close();
{
fstream file;
file.open("BANKING.dat", ios::app);
accno=t_accno;
getch();
dd = dl;
mm = ml;
yy = y1;
tran = t tran;
strcpy(type, t_type);
interest = t interest;
amount = t_amount;
balance = t balance;
file.write((char *)this, sizeof(account));
file.close();
{
fstream file;
file.open("BANKING.dat", ios::in);
fstream temp;
temp.open("TEMP.dat", ios::out);
file.seekg(0, ios::beg);
while (!file.eof())
{
file.read((char *)this, sizeof(account));
if (file.eof())
break;
if (accno !=t_accno)
temp.write((char *)this, sizeof(account));
}
file.close();
temp.close();
file.open("BANKING.dat", ios::out);
temp.open("TEMP.dat", ios::in);
temp.seekg(0, ios::beg);
while (!temp.eof())
{
temp.read((char *)this, sizeof(account));
if (temp.eof()
break;
if (accno !=t_accno)
file.write((char *)this, sizeof(account));
}
file.close();
temp.close();
{
clrscr();
int flag;
float t bal = 0.0;
fstream file;
gotoxy(25,2);
cout<<"Accounts List in Bank";
gotoxy(25, 3);
cout<<
11
int dl, ml, yl;
struct date d;
// For extracting system date
getdate(&d);
d1 = d.da_day;
ml = d.da_mon;
yl = d.da_year;
gotoxy(62, 3);
cout<<"Date: " << dl <<"/"<<ml <<<"/"<<yl;
gotoxy(1, 4);
for (int j = 1; j <= 79; j++)
cout<<<<<"=";
gotoxy(1, 5);
cout<<"Accno#":
gotoxy(10,5);
cout<<"Name";
gotoxy(30,5);
cout<<"Address";
gotoxy(65,5);
cout<<"Balance";
gotoxy(1, 6);
for (j = 1; j <= 79; j++)
cout<<"=";
file.open("INITIAL.dat", ios::in);
file.seekg(0,ios::beg);
int row = 7;
while (file.read((char *)this, sizeof(initial)))
{
flag = 0;
delay(2);
gotoxy(3, row);
cout<< accno;
gotoxy(10, row);
puts(name);
gotoxy(30, row);
puts(address);
gotoxy(65, row);
cout<<<<setw(15)<<setprecision(2) <<setiosflags(ios::left)
<<setiosflags(ios::showpoint)<<<<setiosflags(ios::fixed)<<balance;
t_bal=t_bal + balance;
row++;
if (row >23)
{
flag = 1;
row = 6;
gotoxy(4, 24);
cout<<"Press any key to continue.... ";
getch();
clrscr();
}
}
gotoxy(1, row);
for (j = 1; j <= 79; j++)
cout<<"=".
row++;
gotoxy(3, row);
cout<<"Total Balance in Bank is: ";
gotoxy(65, row);
cout<<<setw(15)<<<setprecision(2)<<setiosflags(ios::left)
<<setiosflags(ios::showpoint)<<setiosflags(ios::fixed)<<t_bal;
file.close();
if (!flag)
{
gotoxy(4, 24);
cout<<<< "Press any key to continue...";
getch(); }
{
for (int j = col; j <= 79; j++)
{
gotoxy(j, row);
cout<<"".
}
int initial::found_account(int t_accno)
{
fstream file;
file.open("INITIAL.dat", ios::in);
file.seekg(0, ios::beg);
int found = 0;
{
if(accno==t_accno)
{
found=1;
break;
}
}
file.close();
returnfound;
}
{
fstream file;
file.open("INITIAL.dat",ios::in);
file.seekg(0,ios::beg);
chat t_name[30];
{
if(accno=t-accno)
{
strcpy(t-name,name);
break;
}
}
file.close();
return t_name;