atm_transaction(Card_number,Check_code,Max_limit) :- check_valid_card(Card_number), check_valid_PC(Check_code), display_instructions, process_request(Card_number,Max_limit), !. check_valid_card(Card_number) :- card_readable(ok), check_valid_card_number(Card_number), check_card_active(Card_number),!. check_valid_card(Card_number) :- display_rejection, return_card, fail. check_valid_card_number(Card_number) :- customer_account(Card_number,_). check_card_active(Card_number) :- customer_account(Card_number,active). check_valid_PC(Check_code) :- print("Enter Your Personal Code"), read(PC_entered), PC_entered = Check_code, !. check_valid_PC(Check_code) :- print("Incorrect Code. Transaction Terminated. Card Retained."), retain_card, fail. display_instructions :- print("Withdraw Money Without Receipt - Key A"), print("Terminate Transaction - Terminate"), check_paper. process_request(Card_number,Max_limit) :- open_door, get_key(Key), key_pushed(Key,Card_number,Max_limit). get_key(Key) :- print("Enter a, b or t"), read(Key). key_pushed(a,Card_number,Max_limit) :- print("Enter Amount To Be Withdrawn"), get_amount(Amount,Max_limit), print("Amount is Being Prepared. Retract Card."), prepare_money, dispense_money, expel_card, close_door. key_pushed(b,Card_number,Max_limit) :- print("Enter Amount To Be Withdrawn"), get_amount(Amount,Max_limit), print("Amount is Being Prepared. Retract Card."), print_receipt(Card_number,Amount), prepare_money, dispense_money, expel_card, close_door. key_pushed(t,_,_) :- print("Transaction Terminated. Retract Card"), expel_card, close_door. get_amount(Amount,Max_limit) :- read(Amount), Amount <= Max_limit. get_amount(Amount,Max_limit) :- repeat, print("Enter Smaller Amount"), read(Amount), Amount <= Max_limit, !. check_paper :- paper_status(in), print("Withdraw Money With Receipt - Key B"). check_paper :- paper(out). print_receipt(Card_number,Amount) :- print("Amount Dispensed: ",Amount), print("Card Number: ",Card_number), simple_mat(SimpleMat_number,SimpleMat_address), print("SimpleMat Number: ", SimpleMat_number), print("SimpleMat Address: ", SimpleMat_address), print("Time"), print("Date"). return_card :- print("Card Returned"), expel_card. retain_card :- print("Card Retained"), keep_card. display_rejection :- print("Invalid Card"). card_readable(ok). paper_status(in). prepare_money :- print("prepare money"). dispense_money :- print("dispense money"). expel_card :- print("expel card"). keep_card :- print("keep card"). open_door :- print("open door"). close_door :- print("close door"). % sample data base for testing purposes % customer_account(Card_number,Status) customer_account(4444,active). customer_account(5555,closed). % simple_mat(SimleMat_number,SimpleMat_address) simple_mat(123,zurich).