python入门之ATM机程序练习

功能:
1.额度:8000
2.可以提现,手续费5%
3.每月最后一天出账单,写入文件
4.记录每月日常消费流水
5.提供还款接口

此代码在python3.X上面运行
主程序 atm.py
import time
import pickle
import sys
import os

#定义账单和购物车
Bill = {}
products = {}
shoplist = []

#define Bill function, used to record billing details(account/time/describe/money).

def Bill(Account,Time,Description,RMB):
    Bill= {"Account":Account,"Time":Time,"Description":Description,"RMB":RMB}
    #用pickle模块把账单信息存到bill文件中去
    pickle.dump(Bill,open("bill","ab"))

#-----------------------------------------------------------------------------------------------------
#购物功能
def shop():
    print( '\033[;32mWelcome to shopping!\n\033[0m')
    with open('shops') as f:
        for line in f.readlines():
            print('{}'.format(line.strip()))
    while 1:
        with open('shops') as f:
            for line in f.readlines():
                line = line.strip()
                commodity = line.split()[0]
                price = line.split()[1]
                products[commodity] = price
            choice = input("\033[;32mPlease input you want to buy>>\033[0m").strip()
            if len(choice) == 0:
                continue
            elif choice == 'back':
                list()
            if choice in products:
                remaining = pickle.load(open('userinfo','rb'))
                if int(products[choice])>int(remaining[accountAuth][2]):
                    print("In your card remaining sum already insufficiency, please prompt sufficient value!'")
                else:
                    while 1:
                        shoplist.append(choice)
                        new_remaining = int(int(remaining[accountAuth][2])-int(products[choice]))
                        userInfo[accountAuth][2] = int(new_remaining)
                        pickle.dump(userInfo,open("userinfo","wb"))
                        Bill(accountAuth, time.strftime("%Y-%m-%d %H:%M:%S"), choice, "-%d" % int(products[choice]))
                        print("\033[;32mConsumption is %r Money is %r\033[0m" % (products[choice], new_remaining))
                        print( "\033[;33mThe shopping list %s \033[0m" % shoplist)
                        break
            else:
                print('You choose {} is not in the shoplist!'.format(choice))
                shop()


#------------------------------------------------------------------------------------------------------------------
#查询余额功能
def query_money():
    userInfo = pickle.load(open("userinfo","rb"))
    totalmoney = userInfo[accountAuth][1]
    remaining = userInfo[accountAuth][2]
    print('Your total money is {}, remaining money is \033[1;31m{}\033[0m!'.format(totalmoney, remaining))




#-------------------------------------------------------------------------------------------------------------------
#存钱功能
def save_money():
    while 1:
        save_desc = input("Please describe save money the details:").strip()
        if len(save_desc) == 0:
            continue
        try:
            save_money = int(input("please save the money:"))
        except ValueError:
            print("\033[;31mYou entered must be number.\033[0m")
            save_money
        if save_money % 100 !=0:
            print("You must enter an integer of 100!")
            continue
        userInfo = pickle.load(open('userinfo','rb'))
        remaining = int(userInfo[accountAuth][2])+save_money
        userInfo[accountAuth[2]]=remaining
        pickle.dump(userInfo,open('userinfo','wb'))
        print('Your total money is %s, your remaining is \033[;31m%s\033[0m!' %(userInfo[accountAuth][1], userInfo[accountAuth][2]))
        Bill(accountAuth, time.strftime("%Y-%m-%d %H:%M:%S"), save_desc, "+%d" % float(save_money))
        next = input("1.continue \n2.return \n3.exit \n please select").strip()
        if next == 1:
            continue
        elif next == 2:
            list()
        elif next == 3:
            exit()
        else:
            print("please enter the correct content!")


#----------------------------------------------------------------------------------------------------------------------
#取钱功能

def draw_money():
    while 1:
        draw_desc = input("Please describe draw money the details:").strip()
        if len(draw_desc) == 0:
            continue
        try:
            draw_money = int(input("Please draw the money:"))
        except ValueError:
            print("\033[;31mYou entered must be number.\033[0m")
            draw_money()

        if draw_money % 100 != 0:
            print('You must enter an integer of 100!')
            continue

        userInfo = pickle.load(open('userinfo', 'rb'))
        # There are bugs here!
        if draw_money > int(userInfo[accountAuth][2]):
            print('\033[;31mYour remaining is insufficient!\033[0m')
            list()

        userInfo = pickle.load(open('userinfo', 'rb'))
        remaining = int(userInfo[accountAuth][2]) - draw_money - draw_money * 0.05
        userInfo[accountAuth][2] = remaining
        pickle.dump(userInfo, open('userinfo', 'wb'))
        print('Your total money is %s, your remaining is \033[;31m%s\033[0m!' % (userInfo[accountAuth][1], userInfo[accountAuth][2]))
        Bill(accountAuth, time.strftime("%Y-%m-%d %H:%M:%S"), draw_desc, "+%d" % float(draw_money))
        next = input("1.continue \n2.return \n3.exit \nPlease select: ").strip()
        if next == '1':
            continue
        elif next == '2':
            list()
        elif next == '3':
            exit()
        else:
            print('Please enter the correct content!')


#------------------------------------------------------------------------------------------------------------------
#转账功能
def transfer_money():
    while 1:
        userInfo = pickle.load(open('userinfo', 'rb'))
        transfer_desc = input("Please describe transfer money: ").strip()
        if len(transfer_desc) == 0:
            continue
        d_account = input("Please input transfer account: ").strip()
        if len(d_account) == 0:
            continue
        if d_account in userInfo is False:
            print("\033[;31mThis account does not exist\033[0m")
            transfer_money()
        d_money = int(input("Please input transfer amount money: "))
        if d_money % 100 != 0:
            print("\033[;31mDeposit amount must be 100 integer times\033[0m")
            continue
        if d_money > int(userInfo[accountAuth][2]):
            print("\033[;31mYour balance is insufficient\033[0m")
            continue
        userInfo[accountAuth][2] = int(userInfo[accountAuth][2]) - d_money - d_money * 0.10
        userInfo[d_account][2] = int(userInfo[d_account][2]) + d_money
        pickle.dump(userInfo,open('userinfo', 'wb'))
        print("\033[;32mYour credit is %r,Your balance is %r\033[0m" % (userInfo[accountAuth][1], userInfo[accountAuth][2]))

        Bill(accountAuth, time.strftime("%Y-%m-%d %H:%M:%S"), transfer_desc,
             "-%d" % (userInfo[accountAuth][2] - d_money - d_money * 0.10))

        next = input("1.continue \n2.return \n3.exit \nPlease select: ").strip()
        if next == '1':
            continue
        elif next == '2':
            list()
        elif next == '3':
            exit()
        else:
            print('Please enter the correct content!')


#--------------------------------------------------------------------------------------------------------
#账单功能

def query_bill():
    Income = []
    Spending = []
    num = 0
    print ("Account\t\tTime\t\tDescription\t\t  RMB")
    with open('bill', 'rb') as f:
        while True:
            try:
                line = pickle.load(f)
                if line["Account"] == accountAuth:
                    if '+' in line["RMB"]:
                        print( "\033[;33m%r\t%r\t%r\t\t\t%r\033[0m" % (line["Account"],line["Time"],line["Description"],line["RMB"]))
                        income = line["RMB"].strip("+")
                        Income.append(income)
                    else:
                        print ("%r\t%r\t%r\t\t\t%r" % (line["Account"],line["Time"],line["Description"],line["RMB"]))
                        spending = line["RMB"].strip("-")
                        Spending.append(spending)
            except:
                break
    for i in Income:
        num = num + int(i)
    income = num
    print ("Income is %r" % num)
    for i in Spending:
        num = num + int(i)
    spending = num
    print ("Spending is %r" % num)
    print ("Total is %r" % (int(income) + int(spending)))


#---------------------------------------------------------------------------------------------------
#修改密码功能
def modify_passwd():
    userInfo = pickle.load(open('userinfo', 'rb'))
    old_passwd = input("Please enter old password:").strip()
    while 1:
        if old_passwd == userInfo[accountAuth][0]:
            new_passwd = input("Please enter new password:").strip()
            if len(new_passwd) < 6:
                print ('Your password is too simple!')
                continue
            confirm_new_password = input("Please confirm new password again:").strip()
            if new_passwd != confirm_new_password:
                print( 'Two passwords do not match!')
            else:
                userInfo[accountAuth][0] = confirm_new_password
                pickle.dump(userInfo, open('userinfo', 'wb'))
                print ('\033[;32mYour password is changed successful!\033[0m')
                exit()
        else:
            print ('Your password is error!')
            modify_passwd()

#-------------------------------------------------------------------------------------------------------
# ATM机所有功能
def list():
    print('''\033[;32m
###################################################
#            welcome to ATM!                      #
#                                                 #
#    1.shop               2.query money           #
#    3.save money         4.draw money            #
#    5.transfer money     6.query bill            #
#    7.modify password    8.exit                  #
#                                                 #
###################################################
\033[0m''')

    while 1:
        choice = input("Please choose according to your needs:").strip()
        if len(choice) == 0:
            continue
        elif choice == '1':
            shop()
        elif choice == '2':
            query_money()
        elif choice == '3':
            save_money()
        elif choice == '4':
            draw_money()
        elif choice == '5':
            transfer_money()
        elif choice == '6':
            query_bill()
        elif choice == '7':
            modify_passwd()
        else:
            print("\n\033[;35mYou have been exit the system!\033[0m")
            exit()

#----------------------------------------------------------------------------------------------------
# 用户登录功能
userInfo = pickle.load(open('userinfo', 'rb'))
while 1:
    accountAuth = input("Please input user account:").strip()
    if len(accountAuth) == 0:
        continue
    if accountAuth in userInfo:
        if 'lock' in userInfo[accountAuth]:
            print( '%s has been locked!' % accountAuth)
            exit()

        for num in range(3, 0, -1):
            passwdAuth = input("Please input user password:").strip()
            if len(passwdAuth) == 0:
                continue
            if passwdAuth == userInfo[accountAuth][0]:
                list()
            else:
                print("Wrong password, Can try again \033[;31m%r\033[0m itmes" %num)
                continue
        else:
            lockaccount = userInfo[accountAuth]
            lockaccount.append('lock')
            pickle.dump(userInfo, open('userinfo', 'wb'))
            print("\033[;31mAccount freeze within 24 hours\033[0m")
            exit()
    else:
        print("\033[;31mWrong account %r,retype\033[0m" % accountAuth)
商品表信息 shops.txt
computer 6000
iphone 5000
mouse 250
keyboard 40
camera 8000
package 500
power 230
初始化账号密码信息 create_userinfo.py
#-*- coding:utf-8 -*-

#初始化账号密码

import pickle

userInfo = {
'yangmi':['999','150000','150000'],
            'zhangziyi':['666','8000','8000'],
            'liuyifei':['888','3000','3000']
}

pickle.dump(userInfo,open('userinfo','wb'))

userinfo = open('userinfo','r')

while True:
    try:
        line = pickle.load(userinfo)
        print(line)
    except:
        break
显示用户名密码及余额变化信息 cat.py
import pickle

userinfo = open('userinfo','rb')

while True:
    try:
        line = pickle.load(userinfo)
        print(line)
    except:break

参考代码网址:

http://blog.51cto.com/whnba/1909696


你可能感兴趣的:(python小白学习路程)