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

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 作为一个AI语言模型,我可以回答你的问题。对于Python新手的练习顺序,以下是我建议的顺序: 1.了解基本语法:首先需要学习Python的基本语法,例如变量、数据类型、条件语句、循环语句等等。 2.掌握函数:函数是Python编程中的重要概念,因此需要掌握如何定义和调用函数。 3.熟悉模块:Python拥有丰富的模块库,可以帮助我们更快速、高效地完成各种任务,因此需要了解一些常用的模块,例如math、random等等。 4.学习面向对象编程:Python是一种面向对象的编程语言,因此需要学习如何定义类、创建对象以及使用面向对象编程思想。 5.实践项目:学习编程最好的方式是实践,因此建议通过完成一些小型项目来加强自己的编程能力和实战经验。 希望我的建议能对你有所帮助,祝你学习愉快! ### 回答2: 作为Python新手,以下是一些建议的练习顺序: 1. 掌握基本语法:开始学习Python之前,先了解基本的语法结构,如变量、数据类型、运算符、控制语句等。通过阅读教程或参加入门课程可以获得这方面的知识。 2. 简单的输出和输入:练习编写简单的代码,例如打印“Hello, World!”或要求用户输入一些信息。这有助于熟悉基本的输入输出操作。 3. 条件语句:学习如何使用条件语句(如if语句和else语句)来根据条件执行不同的代码块。这是编写更复杂程序所必需的基本知识。 4. 循环结构:掌握循环结构(如for循环和while循环)的使用方法,并尝试编写能够重复执行某段代码的程序。这对于处理大量数据或重复操作非常有用。 5. 函数:学习如何定义和使用函数,函数是一段具有特定功能的可重复使用代码块。通过划分功能和模块化程序,可以提高代码的可读性和复用性。 6. 列表和字典:了解如何使用列表和字典存储和处理数据。列表是有序的数据集合,而字典是键值对的无序集合。这些数据结构在实际编程中经常使用。 7. 文件操作:学习如何读写文件,以及文件的打开、写入和关闭操作。这对于处理大量数据或持久化数据非常有用。 8. 异常处理:了解如何使用异常处理机制来处理程序运行时可能发生的错误。这可以让程序在遇到错误时不崩溃,并做出相应的处理。 9. 模块和库:尝试使用Python内置的模块和第三方库来扩展Python的功能。例如,学习如何使用math模块进行数学计算,或使用numpy库进行科学计算。 10. 小项目:挑战一些小项目来实践所学的知识。例如,编写一个简单的文本游戏、实现一个简单的计算器或制作一个简单的网页爬虫。通过实践项目,可以更好地理解Python编程的实际应用。 练习顺序可能因人而异,根据自己的学习速度和实际需求进行调整。最重要的是坚持练习,通过不断的编程实践提升自己的技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值