/* @(#)remotetr.cc (c) Telelogic AB */ #include #include #include "support.h" #include "remotetr.h" #include "update.h" #include "customer.h" #include "consorti.h" #include "account.h" #include "bank.h" #include "cashcard.h" void RemoteTransaction::GenInit() { CardAuthorization = 0; } RemoteTransaction::RemoteTransaction() { GenInit(); } void RemoteTransaction::Execute() { std::cout<<"\nRemoteTransaction::Execute()\n"; } std::istream& operator>>(std::istream& f, RemoteTransaction& remotetransac) { ConsortiumObj consortium; CustomerObj verilog, customer; CashCardObj card; CardAuthorizationObj cardauth; BankObj bank; AccountObj account; UpdateObj update; int operation, icard, ipotcard, itry; UserOrderEnum kind = USERORDER_UNKNOWN; LangEnum lang; char* code; PolyText ptext; // Input buffer code = (char*) new char[32]; std::cin>>lang; ptext.SetLang(lang); ClearDisplay(); comment("Building a default financial system\n", "Construction d'un systeme bancaire par defaut\n"); // Consortium consortium = new Consortium("Financial Consortium"); //Init banks bank = new Bank("European Financial Bank","001"); consortium->add_Bank(*bank); //bank = new Bank("US Financial Bank","002"); //consortium->add_Bank(*bank); // Init customer comment("List of registred customers", "Liste des clients enregistres"); // First Customer verilog = new Customer("Corsy Bill", "Seattle"); std::cout<<*verilog; // Init Account account = bank->create_account(*customer); account->CreditLimit = 100; verilog->add_Account(*account); card = bank->create_cashcard(*verilog); card->CardCode.SetStr("0000"); card->SerialNumber.SetStr("3141 8656 4443 3880"); card->Print(); cardauth = new CardAuthorization("0000", 1000); std::cout<<*cardauth; card->set_CardAuthorization(*cardauth); verilog->add_CardAuthorization(*cardauth); bank->add_CardAuthorization(*cardauth); // Second Customer customer = new Customer("Dupond James","Montastruc"); std::cout<<*customer; // Init Account account = bank->create_account(*customer); account->CreditLimit = 30; customer->add_Account(*account); card = bank->create_cashcard(*customer); card->CardCode.SetStr("1234"); card->SerialNumber.SetStr("5141 8256 4133 3000"); card->Print(); cardauth = new CardAuthorization("1234", 1000); std::cout<<*cardauth; card->set_CardAuthorization(*cardauth); customer->add_CardAuthorization(*cardauth); bank->add_CardAuthorization(*cardauth); // Proposal : 2 roles : customer, cashier and admin // Default : Customer Delay(); TitledDisplay(" TELELOGIC'S ATM\n", " DISTRIBUTEUR BANCAIRE TELELOGIC\n"); comment("\n\nWELCOME\n", "\n\nBIENVENUE\n"); comment("\n\nPLEASE INSERT A CARD AMONG THE LIST", "\nVEUILLEZ INSERER UNE CARTE\nPARMI CELLES DE LA LISTE"); comment(" __________________\n", " ____________________________\n"); comment("\t\tSerial Number\t\tCode\tChoice", "\t\tNumero de Serie\t\tCode\tChoix"); // List of registrered cards or the bank ipotcard = 0; cardauth = bank->CardAuthorization; while (cardauth != NULL) { std::cout<<"\t\t"; card = cardauth->CashCard; std::cout<<"\n\t\t"<SerialNumber<<"\t"; std::cout<Password<<"\t"; std::cout<<" :"<same_Bank; } icard = -1; // No Choice while (NEGATIVE(icard) || (icard > ipotcard)) { comment("\n\nPLEASE CHOOSE A CARD : \t", "\n\nVEUILLEZ CHOISIR UNE CARTE : \t"); //cin>>icard; Filter(std::cin, icard); } card = &(bank->get_NthCashCard(icard)); comment("PLEASE TYPE YOUR CONFIDENTIAL CODE : ", "COMPOSEZ VOTRE CODE CONFIDENTIEL : "); std::cin>>code; // Verify passwd according to the card cardauth = card->CardAuthorization; itry = 0; while ((itry < 2) && (strcmp(cardauth->Password.GetStr(), code))) { // False case comment("Incorrect Code\n","Code erronne\n"); comment("PLEASE TYPE YOUR CONFIDENTIAL CODE : ", "COMPOSEZ VOTRE CODE CONFIDENTIEL : "); std::cin>>code; //Filter(cin, code); //code is a string itry++; } if (strcmp(cardauth->Password.GetStr(), code)) { comment("Limit of try is reached", "Maximum des tentatives atteint"); comment("\nTAKE BACK YOUR CARD", "\nREPRENEZ VOTRE CARTE"); return f; } comment("Valid Code\n", "Code Correct\n"); comment("\nHello Customer : ", "\nBonjour Client : "); std::cout<<(cardauth->Customer)->Name<<"\n\n"; Delay(); // Update Selection do { std::cin>>kind; update = new Update; update->Kind = kind; remotetransac.add_Update(*update); remotetransac.set_CardAuthorization( *cardauth ); update->Execute(); } while (kind != USERORDER_QUIT); delete code; delete customer; delete verilog; delete bank; delete consortium; return f; } void RemoteTransaction::set_CardAuthorization (class CardAuthorization& a_CardAuthorization) //GENB { //GENB p_connect_CardAuthorization(a_CardAuthorization); //GENB a_CardAuthorization.p_connect_RemoteTransaction(*this); //GENB } //GENB void RemoteTransaction::unset_CardAuthorization () //GENB { //GENB if (CardAuthorization) CardAuthorization->p_disconnect_RemoteTransaction(*this); //GENB p_disconnect_CardAuthorization(*CardAuthorization); //GENB } //GENB void RemoteTransaction::p_connect_CardAuthorization (class CardAuthorization& a_CardAuthorization) //GENB { //GENB unset_CardAuthorization(); //GENB CardAuthorization = &a_CardAuthorization; //GENB } //GENB void RemoteTransaction::p_disconnect_CardAuthorization (class CardAuthorization& a_CardAuthorization) //GENB { //GENB assert(&a_CardAuthorization == CardAuthorization); //GENB CardAuthorization = 0; //GENB } //GENB