Python 基础综合练习--小型练习

一、编写一个ATM取款机,功能,界面如下:
    1). 注册新用户
    2). 取款
    3). 存款
    4). 转账
    5). 查询余额
    6). 冻结账户
    7). 修改密码
    8). 退出
    9).登陆
1、注册用户,并存入本地文件count.txt中。其中文件格式如下:
   用户名   密码    账户余额    状态
    tom     1234    100000      正常
其中,注册新用户时,默认账户余额为100元、状态为正常。
2、取款、存款时都需要验证用户身份
3、取款的金额必须小于账户余额
4、冻结账户为修改账户状态为冻结
5、修改密码时,需要验证原密码后,方能修改

二、修改上述的ATM取款系统,要求如下:
1). 每个选项操作前,显示用户欢迎信息;
    eg: "***************ATM系统转账操作***************"
    eg: "***************ATM系统存款操作***************"

2). 用户执行操作前显示操作时间;
3). 用户执行后显示结束时间;
4).要求时间格式不是时间戳,而是我们可以看懂的即(YYYY-MM-DD);

1、要求使用日志,进行记录
2、采用装饰器进行日志的记录

import os
import logging
import datetime
#日志
def log(msg):
    logger=logging.getLogger('pythonlogger')
    logger.setLevel(logging.INFO)
    #创建一个handler,用来将日志内容存入文件
    file=logging.FileHandler('test.log')
    file.setLevel(logging.INFO)
    #创建一个handler,用来将日志输出到控制台
    console=logging.StreamHandler()
    console.setLevel(logging.INFO)
    #定义日志输出格式
    formatter=logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    file.setFormatter(formatter)
    console.setFormatter(formatter)
    #将logger添加到handler
    logger.addHandler(file)
    logger.addHandler(console)
    logger.info(msg)
    logger.removeHandler(file)
    logger.removeHandler(console)
def my_log(f):
    def inner(*var):
        if f(*var):    
            log(f.__name__+'操作成功!')
        else:
            log(f.__name__+'操作失败!')
    return inner
#菜单项
def menu():
    print('*'*30)
    print('1. 注册新用户')
    print('2. 取款')
    print('3. 存款')
    print('4. 转账')
    print('5. 查询余额')
    print('6. 冻结账户')
    print('7. 修改密码')
    print('8. 退出')
    print('9.登陆')
    print('*'*30)
#注册功能
#参数:无
#返回值:True or False
#描述:提示用户输入用户名和密码完成注册
@my_log
def register():
    f1=open('count.txt','a+',encoding='UTF-8')
    dic={}
    flag=False
    while True:
        while True:
            f1.readline()
            l1=f1.readline()
            if l1=='':
                break
            else:
                list1=l1.split()
                dic[list1[0]]=list1
        username=input('请输入你的用户名:')
        userpass=input('请输入你的密码:')
        if username in dic.keys():
            print('用户名已存在')
            continue
        else:
            f1.write(username+' '+userpass+' '+'100 正常\n')
            os.system('cls')
            print('注册成功!')
            flag=True
        break
    return flag
    f1.flush()
    f1.close()
#取款功能
@my_log
def get_draw():
    flag=False
    f1=open('count.txt','r',encoding='UTF-8')
    list1=[]
    key=[]
    dic={}
    rest_money=[]
    while True:
        draw_money=int(input('请输入你的取款金额:'))
        dic=dict()
        while True:
            f1.readline()
            l1=f1.readline()
            if l1=='':
                break
            else:
                list1=l1.split()
                dic[list1[0]]=list1
        if int(dic[user[0]][2])>draw_money:
            dic[user[0]][2]=str(int(dic[user[0]][2])-draw_money)
        else:
            print('余额不足!')
            break
        f1=open('count.txt','w+',encoding='UTF-8')
        f1.write('用户名 密码 账户余额 状态\n')
        for i in range(len(dic)):
            f1.write(' '.join(dic[list1[i]])) 
            f1.write('\n')
        print('取款成功')
        flag=True
        break
    f1.flush()
    f1.close()   
    return flag
#存款功能
@my_log
def keep_money():
    flag=False
    f1=open('count.txt','r+',encoding='UTF-8')
    list1=[]
    key=[]
    dic={}
    while True:
        draw_money=int(input('请输入你的存款款金额:'))
        dic=dict()
        while True:
            f1.readline()
            l1=f1.readline()
            if l1=='':
                break
            else:
                list1=l1.split()
                dic[list1[0]]=list1
        dic[user[0]][2]=str(int(dic[user[0]][2])+draw_money)
        f1=open('count.txt','w+',encoding='UTF-8')
        f1.write('用户名 密码 账户余额 状态\n')
        for i in range(len(dic)):
            f1.write(' '.join(dic[list1[i]])) 
            f1.write('\n')
        print('存款成功')
        flag=True
        break
    f1.flush()
    f1.close() 
    return flag
#转账
def exchange():
    flag=False
    f1=open('count.txt','r',encoding='UTF-8')
    list1=[]
    key=[]
    dic={}
    rest_money=[]
    while True:
        draw_money=int(input('请输入你的转账金额:'))
        draw_people=input('请输入你要转账的用户名:')
        dic=dict()
        while True:
            f1.readline()
            l1=f1.readline()
            if l1=='':
                break
            else:
                list1=l1.split()
                dic[list1[0]]=list1
        if int(dic[user[0]][2])>draw_money:
            dic[user[0]][2]=str(int(dic[user[0]][2])-draw_money)
            dic[draw_people][2]=str(int(dic[draw_people][2])+draw_money)
        else:
            print('余额不足!')
            break
        f1=open('count.txt','w+',encoding='UTF-8')
        f1.write('用户名 密码 账户余额 状态\n')
        for i in range(len(dic)):
            f1.write(' '.join(dic[list1[i]])) 
            f1.write('\n')
        print('转账成功')
        flag=True
        break
    f1.flush()
    f1.close() 
    return flag  
#查询功能  
@my_log
def look():
    flag=False
    f1=open('count.txt','r',encoding='UTF-8')
    dic={}
    while True:
        f1.readline()
        l1=f1.readline()
        if l1=='':
            break
        else:
            list1=l1.split()
            dic[list1[0]]=list1
    a=dic[user[0]][2]
    print('账户余额为{0}'.format(a))
    flag=True
    return flag
#冻结功能 
@my_log
def ice_user():
    flag=False
    f1=open('count.txt','r',encoding='UTF-8')
    dic={}
    while True:
        f1.readline()
        l1=f1.readline()
        if l1=='':
            break
        else:
            list1=l1.split()
            dic[list1[0]]=list1
    dic[user[0]][3]='冻结'
    f1=open('count.txt','w+',encoding='UTF-8')
    f1.write('用户名 密码 账户余额 状态\n')
    for i in range(len(dic)):
        f1.write(' '.join(dic[list1[i]])) 
        f1.write('\n')
    flag=True
    print('冻结成功!')
    return flag
#退出功能
def quit_user():
    print('退出成功!')
    exit()
#修改密码
@my_log
def change():
    flag= False
    f1=open('count.txt','r',encoding='UTF-8')
    list1=[]
    key=[]
    value=[]
    dic={}
    log=0
    while True:
        old_password=input('你已登录,请输入旧密码进行验证:')
        new_password=input('请输入新密码进行更改:')
        dic=dict()
        while True:
            f1.readline()
            l1=f1.readline()
            if l1=='':
                break
            else:
                list1=l1.split()
                dic[list1[0]]=list1
        if  dic[user[0]][1]==old_password:
            dic[user[0]][1]=new_password
        else:
            print('密码不正确!')
            break
        f1=open('count.txt','w+',encoding='UTF-8')
        f1.write('用户名 密码 账户余额 状态\n')
        for i in range(len(dic)):
            f1.write(' '.join(dic[list1[i]])) 
            f1.write('\n')
        
        print('修改密码成功!')
        flag=True
        break
    f1.flush()
    f1.close()   
    return flag
#登录功能
@my_log
def login():
    flag=False
    f1=open('count.txt','r',encoding='UTF-8')
    list1=[]
    key=[]
    value=[]
    dic={}
    log=0
    while True:
        username=input('请输入你的用户名:')
        userpass=input('请输入你的密码:')
        for line in f1:
            list1.append(line.split())
        for i in list1:
            key.append(i[0])
            value.append(i[1])
        dic=dict(zip(key,value))
        if username in dic.keys():
            if dic[username]==userpass:
                
                print('登陆成功!')
                flag=True
                log_tip=1
                user.append(username)
                break
        else:
            print('用户名或密码不正确!')
    f1.flush()
    f1.close()
    return flag
def is_which(msg):
    if msg=='1':
        msg='注册新用户'
    elif msg=='2':
        msg='取款'
    elif msg=='3':
        msg='存款'
    elif msg=='4':
        msg='转账'
    elif msg=='5':
        mag='查询余额'
    elif msg=='6':
        msg='冻结用户'
    elif msg=='7':
        msg='修改密码'
    elif msg=='8':
        msg='退出'
    else:
        msg='登录'
    return msg
#提示功能
def tip(msg):
    os.system('cls')
    print("***************ATM系统{0}操作***************".format(is_which(msg)))
def my_time():
    print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
user=[]
log_tip=0
if __name__=='__main__':
    f1=open('count.txt','w',encoding='UTF-8')
    f1.write('用户名 密码 账户余额 状态\n')
    f1.close()
    while True:
        menu()
        msg=input('请输入业务编号:')
        if msg=='1':
            tip(msg)
            my_time()
            register()
            my_time()
        elif msg=='2':
            if log_tip==1:
                tip(msg)
                my_time()
                get_draw()
                my_time()
            else:
                print('请先登录')
        elif msg=='3':
            if log_tip==1:
                tip(msg)
                my_time()
                keep_money()
                my_time()
            else:
                print('请先登录')
        elif msg=='4':
            if log_tip==1:
                tip(msg)
                my_time()
                exchange()
                my_time()
            else:
                print('请先登录')
        elif msg=='5':
            if log_tip==1:
                tip(msg)
                my_time()
                look()
                my_time()
            else:
                print('请先登录')
        elif msg=='6':
            if log_tip==1:
                tip(msg)
                my_time()
                ice_user()
                my_time()
            else:
                print('请先登录')
        elif msg=='7':
            if log_tip==1:
                tip(msg)
                my_time()
                change()
                my_time()
            else:
                print('请先登录')
        elif msg=='8':
            tip(msg)
            my_time()
            quit_user()
            my_time()
        elif msg=='9':
            tip(msg)
            my_time()
            login()
            my_time()
        else:
            pass

猜你喜欢

转载自blog.csdn.net/qq_35328369/article/details/81557262