//ChkgAcct.h //ChkgAcct classes
#ifndef CHKGACCT_H #define CHKGACCT_H
class ChkgAcct { public: ChkgAcct(); void deposit(double amt); bool checkWithdraw(double amt); bool atmWithdraw(double amt); double getBalance(); int setTrack(int type ,double amt); //push the type and amt into track void getTrack(int i,int &cTracktype,double &cTrackamt); //pop type and amount of number i transaction private: double balance; int Tracktype[51]; //store the type of transaction double Trackamt[51]; //store the amount }; #endif
//ChkgAcct.cpp
#include "ChkgAcct.h" #include<iostream>
ChkgAcct::ChkgAcct(){ balance = 100.0; for(int i=1;i<=50;i++) { Tracktype[i]=0; Trackamt[i]=0; } //initialize the track }
void ChkgAcct::deposit(double amt){ balance=balance+amt; }
bool ChkgAcct::checkWithdraw(double amt){ if (amt<=balance) { balance=balance-amt; return true; } else{ balance=balance-10; return false; } }
bool ChkgAcct::atmWithdraw(double amt){ if (amt<=balance) { balance=balance-amt-1; return true; } else return false; }
double ChkgAcct::getBalance(){ return balance; }
int ChkgAcct::setTrack(int type ,double amt) { static int i=0; //store the total times of the transaction i++; if(i<=50) { Tracktype[i]=type; Trackamt[i]=amt; } //if the times of the transaction is less than 50 else ///if is more than 50,ie 51, using push { i=50; for(int j=1;j<50;j++) { Tracktype[j]=Tracktype[j+1]; Trackamt[j]=Trackamt[j+1]; } Tracktype[50]=type; Trackamt[50]=amt; } return i; }
void ChkgAcct::getTrack(int i,int &cTracktype,double &cTrackamt) { cTracktype=Tracktype[i]; cTrackamt=Trackamt[i]; }
//client.cpp //create 10 account to test
#include "ChkgAcct.h" #include <iostream> #include <stdlib.h>//use system() to clear screem #include <conio.h>//use getch(),putchar() #include <string>
using namespace std;
int main(){ ChkgAcct client[10]; int accountID; //the ID of account
int type; //type of transaction double amount=0; //amount of transaction int typeGet; //type of transaction got from every account double amountGet; //amount of transaction got from every account
char ch,flag; string str; //store input as the string type of amount ///////do start loop do{ str=""; system("cls"); //function to clear the screem cout<<"***********************************************"<<endl; cout<<"Please input your account ID,from 0 to 9 :"<<endl; cout<<"input:"; //////1 make sure the input is 0 to 9 int i=0; do{ ch=getch(); if(ch>='0'&&ch<='9') { putchar(ch); i++; } }while(i<1); accountID=ch-'0'; cout<<endl; //////~1
if(accountID>=0&&accountID<=9) cout<<"Account "<<accountID<<" ,you have: " <<client[accountID].getBalance()<<" left."<<endl; flag='n'; //set the flag to test if the client want to quit
do{ cout<<"***********************************************"<<endl; cout<<"please choose the type of your transaction: \n" <<"1、Deposit\n" <<"2、Checkwithdrawal\n" <<"3、ATMwithdrawal \n" <<"4、Check Account\n" <<"5、Recent 50 transactions"<<endl; cout<<"6-9、 to logout"<<endl; cout<<"input:";
//////~2 make sure the input is number int i=0; do{ ch=getch(); if(ch>='0'&&ch<='9') { putchar(ch); i++; } }while(i<1); type=ch-'0'; cout<<endl; //////~2 if(type>=1&&type<=3) { cout<<"***********************************************"<<endl; cout<<"input the amount(positive value): "<<endl; cout<<"input:"; //////3 make sure the first number is not zero do{ ch=getch(); }while(ch=='0'||ch<='0'||ch>'9'); str=ch; putchar(ch); i=1; /////~3 //////4 make sure input is number ,and enter means finish do { ch=getch(); if(ch>='0'&&ch<='9'&&ch!=13) { putchar(ch); str=str+ch; i++; } //ignore other input }while(ch!=13); cout<<endl; //////~4
//////5 translate string to double amount=0; for(int j=0;j<i;j++) amount=amount*10+(str[j]-'0'); ///////~5
/////6 check if the client want to cancel ///// and the input is y/n cout<<endl<<"are you sure?y/n:"<<endl; i=0; do{ ch=getch(); if(ch=='y'||ch=='n') { putchar(ch); i++; } }while(i<1); cout<<endl; /////~6 if(ch=='n') { system("cls"); cout<<"you cancel the transaction "<<endl; continue; } } //end of if
system("cls"); cout<<"***********************************************"<<endl; switch(type){ case 1:{ client[accountID].deposit(amount); cout<<"succeed!"<<endl; cout<<"you Deposit "<<amount<<" $."<<endl; client[accountID].setTrack(1,amount); ///set the track with type and amount } break;
case 2:{ if(!client[accountID].checkWithdraw(amount)) { cout<<"fail!"<<endl; cout<<"your account do not have enough money!"<<endl; cout<<"$10.00 service charge is deducted! "<<endl; client[accountID].setTrack(4,amount); } else { cout<<"succeed!"<<endl; cout<<"you withdraw "<<amount<<" $."<<endl; client[accountID].setTrack(2,amount); } } break;
case 3:{ if(!client[accountID].atmWithdraw(amount)) { cout<<"fail!"<<endl; cout<<"your account do not have enough money!"<<endl; client[accountID].setTrack(5,amount); } else { cout<<"succeed!"<<endl; cout<<"you withdraw "<<amount<<" $."<<endl; cout<<"a $1 service charge is deducted "<<endl; client[accountID].setTrack(3,amount); } } break;
case 4:{ cout<<"you have: " <<client[accountID].getBalance()<<" $ " <<" left."<<endl; } break; case 5:{ //////7 output the resent transaction for(int i=50;i>=1;i--) { client[accountID].getTrack(i,typeGet,amountGet); if(typeGet>0&&typeGet<6) { switch (typeGet){ case 1:cout<<i<<"、deposite:";break; case 2:cout<<i<<"、checkWithdraw:";break; case 3:cout<<i<<"、amtWithdraw:";break; case 4:cout<<i<<"、fail checkWithdraw:";break; case 5:cout<<i<<"、fail atmWithdraw:";break; } cout<<amountGet<<" $."<<endl; } } //////~ 7 } break;
default:{ //////8 check if the client want to logout ///// make sure the input is y/n cout<<endl<<"do you want to logout? y/n"<<endl; int i=0; do{ ch=getch(); if(ch=='y'||ch=='n') { putchar(ch); i++; } }while(i<1); flag=ch; cout<<endl; /////~ 8 } break; } //end of switch }while(flag!='y'); ////yes means that the client is to logout }while(true); ///////~do continue loop return 0; } 
|