Code:
#include<iostream.h>
#include<stdio.h>
#include<string.h>
struct information {
int acctnum;
char firstname[10];
char lastname[12];
long int phonenumber;
float balance;
information* left;
information* right;
information(int a = 0, char f[10] = "", char l[12] = "", long int p=0, float b = 0.0) {
acctnum = a;
strcpy(firstname, f);
strcpy(lastname, l);
phonenumber=p;
balance = b;
left=right=NULL;
}
};
class Customer{
private:
information *search1,*ptr,*tempsearch;
void enter(information *s, int x, char fn[], char ln[],long int p,float ba){
if(x==search1->acctnum)
return;
if(x<s->acctnum){
if(s->left==NULL)
{
ptr=new information(x,fn,ln,p,ba);
s->left=ptr;
return;
}
else enter(s->left,x,fn,ln,p,ba);
return;}
if(x>s->acctnum){
if(s->right==NULL){
ptr=new information(x,fn,ln,p,ba);
s->right=ptr; return;}
else enter(s->right,x,fn,ln,p,ba);
return; }
}
information* findInfo(int x){
information *infosearch, *tmp= search1;
if (x == tmp->acctnum)
return NULL;
while (tmp != NULL)
{
if (x == tmp->acctnum)
break;
infosearch = tmp;
if (x < tmp->acctnum)
tmp = tmp->left;
else tmp = tmp->right;
}
return infosearch;
}
information* findMinnode(information *s) {
while (s->left != NULL){
s = s->left;
}
return s;
}
information* findMaxnode(information *s) {
while (s->right != NULL) {
s = s->right;
}
return s;
}
information* find(int x){
ptr=search1;
while(ptr){
if(x==ptr->acctnum)
return ptr;
if (x>ptr->acctnum)
ptr=ptr->right;
else ptr=ptr->left;
} return NULL;
}
public:
Customer(){
search1=NULL;
ptr=tempsearch=search1;}
~Customer(){
}
void insert(int x,char f[],char l[],int p,float b){
if(search1)
enter(search1,x,f,l,p,b);
else
search1=new information(x,f,l,p,b);}
bool search(int x){
ptr=search1;
while(ptr){
if(x==ptr->acctnum)
return true;
if (x>ptr->acctnum)
ptr=ptr->right;
else ptr=ptr->left;
} return false;
}
bool remove(int x) {
information* parent, *minnode;
if (!search1)
return false;
if (!find(x))
return false;
parent = findInfo(x);
if (parent)
{
if ((ptr->left == NULL) && (ptr->right == NULL))
{
if (parent->left == ptr)
parent->left = NULL;
else
parent->right = NULL;
delete ptr;
return true;
}
if (ptr->left == NULL)
{
if (parent->left == ptr)
parent->left = ptr->right;
else
parent->right = ptr->right;
delete ptr;
return true;
}
if (ptr->right == NULL)
{
if (parent->left == ptr)
parent->left = ptr->left;
else
parent->right = ptr->left;
delete ptr;
return true;
}
minnode = findMinnode(ptr->right);
parent = findInfo(minnode->acctnum);
if(parent == ptr)
{
parent = findInfo(ptr->acctnum);
minnode->left = ptr->left;
if( ptr == parent->left)
parent->left =minnode;
else
parent->right =minnode;
delete ptr;
}
else
{
ptr->acctnum = minnode->acctnum;
parent->left = minnode->right;
delete minnode;
}
return true;
}
else
minnode = findMinnode(search1->right);
parent = findInfo(minnode->acctnum);
if(parent == search1)
{
minnode->left = search1->left;
search1 = minnode;
}
else
{
search1->acctnum= minnode->acctnum;
parent->left = minnode->right;
delete minnode;
}
return true;
}
void withdraw(int account, float am){
information *p=find(account);
if((p->balance) >= am){
p->balance -= am;
printf("%-6d%-15s%-10s%10.2f\n",p->acctnum,p->firstname,p->lastname,p->phonenumber,p->balance);}
else
printf("You cannot withdraw %.2f. Your balance only contains %.2f$\n",am, p->balance );
}
void deposit(int account,float am){
information *p;
p=find(account);
p->balance += am;
printf("%-6d%-15s%-10s%10.2f\n",p->acctnum,p->firstname,p->lastname,p->phonenumber,p->balance);}
};
struct mainprogram {
private:
Customer a;
void printout() {
int acc;
char fn[10];
char ln[12];
long int p;
float bal;
{
{
a.insert(acc,fn,ln,p,bal); }
}
menu();
return;
}
int enterChoice() {
int choice;
printf("\nPlease enter your choice\n"
"1 - Print out results\n"
"2 - Update an account (Deposit or Withdrawal)\n"
"3 - Create/Add a new account\n"
"4 - Delete an existing account\n"
"5 - Exit program\n"
);
scanf( "%d", &choice );
return choice;
}
void menu() {
int choice;
while ( ( choice = enterChoice() ) != 5 ) {
switch ( choice ) {
case 1:
showinfo();
break;
case 2:
updateaccount();
break;
case 3:
newaccount();
break;
case 4:
deleteaccount();
break;
default: printf("\nPlease select from 1-5\n\n");
}
}
}
void newaccount(){
int acct;
char f[10];
char l[15];
long int p;
float b;
printf("Please enter the account number that is to be created :\n");
scanf("%d",&acct);
if(!(a.search(acct))&& ( acct>0)){
printf("Enter your firstname, lastname, phone number, and balance: \n");
scanf("%s%s%f", &f,&l,&p, &b);
a.insert(acct,f,l,p,b);}
else
printf("The number you've entered already exists. Please choose another account number to create \n");
}
void updateaccount(){
int acct;
int i;
float amount;
printf("Please enter your account number :\n");
scanf("%d",&acct);
if(a.search(acct)){
printf("Please choose 1 if you are going to make a deposit. \n Please choose 2 if you are making a withdrawal: ");
scanf("%d",&i);
printf("Please enter the transaction amount: ");
scanf("%f",&amount);
if(i==2)
a.withdraw(acct,amount);
else if(i==1)
a.deposit(acct,amount);
else
printf("You've entered the wrong choice\n");
}
else
printf("The account number does not exist\n");
}
void showinfo() {
//???????????????????????????????????
}
void deleteaccount(){
int d;
cout<<"Please enter the number of the account you would like to delete:";
scanf ("%d",&d);
if(a.search(d)){
a.remove(d);
printf("Account# %d has been removed \n",d);}
else
printf("This account does not exist \n");
}
public:
mainprogram() {
printout();
}
~mainprogram() {
}
};
int main() {
mainprogram m;
return 0;
}