Beispiel #1
0
SOM_Scope long  SOMLINK Close(Bank *somSelf,  Environment *ev,
                              string name, long acct_type, long pin)
{
    Account *temp;
    somf_TSetIterator *itr;
    somf_TPrimitiveLinkedList *l;
    int freed = 0;
    somf_TSet *setptr;
    string user_name;

    BankData *somThis = BankGetData(somSelf);
    BankMethodDebug("Bank","Close");

   itr = new somf_TSetIterator;

   switch (acct_type)
   {
        case Account_CHECKING:
            setptr = somSelf->_get_check_acct_set(ev);
            itr->somfTSetIteratorInit(ev, setptr);
            break;
        case Account_SAVINGS:
            setptr = somSelf->_get_save_acct_set(ev);
            itr->somfTSetIteratorInit(ev, setptr);
            break;
        case Account_MF:
            setptr = somSelf->_get_mf_acct_set(ev);
            itr->somfTSetIteratorInit(ev, setptr);
            break;
        default:
            somPrintf (" bad account type\n");
            return 9;
   }

   temp = (Account *) itr->somfFirst(ev);

   while (!((SOMDObject *)temp)->is_nil((SOMDObject *)temp,ev))
   {
      user_name = temp->_get_user_name(ev);
      if (strcmp(name, user_name) == 0) {
   if (temp->_get_pin(ev) == pin) {
   if (setptr->somfRemove(ev, temp) != SOMF_NIL)
        return Account_OK;
   else
        return 9;
}
   else
      return Account_BAD_PIN;
}
      else
         temp = (Account *)itr->somfNext(ev);
   }
   return Account_NO_ACCT;
}