def withdraw(card_info): ''' call when user need to withdraw :param card_info: dic type :return: ''' if card_info["freeze"]:# card is freeze functions.colordisplay("your card is frozen!Please refreeze first!", "red") return None card_number = card_info["card_number"] try: change = card_info["change"] print("Your change:%s yuan"%change) amount = input("\033[1;33;1m Input amount:>>\033[0m") interest = config.TransType["withdraw"] print("Service fee %s%%:"%interest) new_change = calculate(amount, change, 'minus', interest) pay_auth = input("\033[1;33;1m Input pay password:>>\033[0m") if pay_auth == card_info["pay_password"]: data = api_func.db_hander("select", "card_info") data[card_number]["change"] = new_change api_func.db_hander("modify", "card_info", data) # write in file print("Your new change:%s yuan"%new_change) else: functions.colordisplay("Repay failed because of incorrect pay password!", "red") log.set_log("transaction",20,"User %s withdraw failed,wrong pay password!"%card_info["username"]) except Exception as e: functions.colordisplay(e, "red") log.set_log("error",40,"User %s withdraw failed, error!",card_info["username"])
def repay(card_info): ''' call when user need to repay :param card_info: :return: ''' if card_info["freeze"]:# card is freeze functions.colordisplay("your card is frozen!Please refreeze first!", "red") return None card_number = card_info["card_number"] repay_change = card_info["credit"] - card_info["change"] if repay_change > 0: functions.colordisplay("You need to repay:%s yuan"%repay_change,"red") try: change = card_info["change"] print("Your change:%s yuan"%change) print("Your credit:%s yuan"%card_info["credit"]) amount = input("\033[1;33;1m Input amount:>>\033[0m") interest = config.TransType["repay"] print("current interest:%s%%"%interest) new_change = calculate(amount, change, 'plus', interest) pay_auth = input("\033[1;33;1m Input pay password:>>\033[0m") if pay_auth == card_info["pay_password"]: data = api_func.db_hander("select","card_info") data[card_number]["change"] = new_change api_func.db_hander("modify", "card_info",data)# write in file print("new change:",new_change) log.set_log("transaction",20,"User %s repay successfully!"%card_info["username"]) else: functions.colordisplay("Repay failed because of incorrect pay password!", "red") log.set_log("transaction",20,"User %s failed to repay,because of incorrect password" %card_info["username"]) except Exception as e: log.set_log("errror",40,"User %s repay with error \n %s" %(card_info["username"],e))
def store_payment(order_num, money, username): ''' This is pay api for store.According order number and order price to pay, return True if success,else return False. :param order_num: :param money: :param username: :return: ''' card_number = creditcard.find_user(username) # find card num by username print("Found your credit card:\033[1;34;1m%s\033[0m" % card_number) print("order:", order_num) print("aomount:%s yuan" % money) data = api_func.db_hander("select", "card_info") if data[card_number]["freeze"]: functions.colordisplay("This card is frozen! payment is denied!", "red") else: user_card = data[card_number] # get user card info pay_psd = input("\033[1;33;1m Input pay password:\033[0m") if pay_psd == user_card["pay_password"]: if user_card["change"] < money: functions.colordisplay("Your balance is not enough!", "red") else: data[card_number]["change"] -= money api_func.db_hander("modify", "card_info", data) #write in file log.set_log("transaction", 20, "User %s pay successfully!" % username) return True else: functions.colordisplay("Sorry,pay password is incorrect!!!", "red") log.set_log( "transaction", 20, "User %s failed to pay because of incorrect pay_password!" % username) return False
def login(): ''' call while login :return: info of user, dic;else return None ''' count = [0,""] while True: all_userdata = api_func.db_hander("select", "user_info") # get user_info print("All users:")########## for item in all_userdata.keys():############ print(item)########## username = input("\033[1;33;1mPlease input username:\033[0m") username = username.strip() log.set_log("access",20,"User %s attempts to login!"%username) if username in all_userdata.keys(): userdata = all_userdata[username] # get specific user psd = input("\033[1;33;1mPlease input password:\033[0m") psd = psd.strip() if psd == userdata["password"]: if userdata["locked"]:#locked print("\033[1;31;1m User has been locked!!\033[0m") else: log.set_log("access",20,"User %s login successfully!" % username) print("\033[1;33;1m Login accept!\033[0m") return userdata else: #password is incorrect colordisplay("password is incorrect!","red") log.set_log("access",20,"User %s failed to login!" % username) if count[1] == username:# tha same user count[0] += 1 if count[0] >= 3:#more than 3 times colordisplay("User %s is locked because of attempting too many times!","red") api_func.db_hander("modify","user_info",all_userdata)# write in file log.set_log("access",20,"User %s is locked because of attempting too many times!" % username) else:# another user count[1] = username count[0] += 1 elif username == "b": # back break else: print("\033[1;31;1m Can not find such user!!!\033[0m") return None
def transfer(card_info): ''' call when user need to transfer :param card_info: dic type :return: None ''' if card_info["freeze"]:# card is freeze functions.colordisplay("your card is frozen!Please refreeze first!","red") try: cur_card_number = card_info["card_number"] all_card_info = api_func.db_hander("select","card_info") print("current all cards: ") for key in all_card_info.keys(): print(key) print("Your card num is:%s" %card_info["card_number"]) change = card_info["change"] print("change:", change) trans_num = input("\033[1;33;1m Input card number you want to transfer:>>\033[0m") if trans_num in all_card_info.keys(): amount = input("\033[1;33;1m Input amount:>>\033[0m") interest = config.TransType["transfer"] new_change = calculate(amount, change, 'minus', interest) pay_auth = input("\033[1;33;1m Input pay password:>>\033[0m") if pay_auth == card_info["pay_password"]: if trans_num in all_card_info.keys(): all_card_info[cur_card_number]["change"] -= new_change all_card_info[trans_num]["change"] += float(change) # receive account no interest api_func.db_hander("modify", "card_info", all_card_info) # Write in file print("Your change remain:%s yuan"%all_card_info[cur_card_number]["change"]) log.set_log("transaction",20,"User %s transfer successfully!"%card_info["username"]) else: functions.colordisplay("Can not find the card number!","red") else: functions.colordisplay("Pay password is incorrect!","red") log.set_log("transaction",20,"User %s transfer failed,wrong pay_password!"%card_info["username"]) else: functions.colordisplay("card does not exist!","red") except Exception as e: functions.colordisplay(e, "red") log.set_log("error",40,"User %s transfer failed, error!"%card_info["username"]) return None