Python学习-----项目设计2.0(ATM代码实现)

目录

前言:

​编辑 ​编辑

 代码实现ATM项目

(1)数据库路径(setting.py)

(2)声音系统,提示播报(voice.py)

(3)src前端(src.py)

(4)数据库的读取(db_handle)

(5)后端:用户的账号操作功能(user_i)

(6)后端:用户的金额操作(bank_i)


前言:

        上一期讲了Python中ATM项目的相关要求和设计思路(Python学习-----项目设计1.0(设计思维和ATM环境搭建)_Python欧尼酱的博客-CSDN博客),所以这一期我会详细介绍怎么去用Python代码来实现ATM项目

功能要求:

注册、登陆、存钱、取钱、查看流水、查看余额、退出登陆、退出系统、注销用户、语言播报。

 

这个是我的ATM项目的文件,你们可以去跟着创建,要注意好文件的归属性

 代码实现ATM项目

(1)数据库路径(setting.py)

位于DB文件

file_pass=r'F:\Python\项目ATM\DB\user_data'

 由于目前还没有学习mysql数据库,所以这个建立的数据库准确来说算不上一个数据库,但是我们可以用就行了。

(2)声音系统,提示播报(voice.py)

这个是用pyttsx3模块封装好的,这里我直接写好了,可以导入这个模块拿来用就行了

import pyttsx3 as p
def sound(text):
    engine=p.init()#初始化一个声音合成器
    rate=engine.getProperty('rate') #设置读取速度
    volume=engine.getProperty('volume') #设置读取音量
    engine.setProperty('volume',1) #读取音量为当前系统音量的100%
    engine.setProperty('rate', 115) #读取速度为每分钟115个字
    voices=engine.getProperty('voices')
    engine.setProperty('voice',voices[0]) #设置为第一声道
    engine.say(text) #text就是想说的读取文本
    engine.runAndWait()  #等待读取结束
    engine.stop() #关闭合成引擎

如果要使用就调用sound() 这个函数

(3)src前端(src.py)

在做项目时,我们需要一个前端系统,这个前端可以去整合并且调用项目后端的相关功能,然后实现一些操作

这个是文件名字为src.py  的前端 ,位于core文件夹

#1.视图层,前端
from voice import sound
import os
from api import user_i
from lib import common
import bank_i

#注册
def register():
    while 1:
        print('注册界面')
        user_name=input('enter your name>>>')
        password=input('enter your password>>>')
        re_password=input('enter your password again>>>')
        if password==re_password:
            flag,msg=user_i.register_info(user_name,password)
            if flag:
                print(msg)
                sound(msg)
                break
            else:
                print(msg)
                sound(msg)
                break
        else:
            print('error,please try again')
            sound('error,please try again')


login_user=None

#登陆
def login():
    global login_user
    if login_user==None:
        if len(os.listdir(r'F:\Python\项目ATM\DB\user_data'))!=0:
            print('登陆界面')
            while 1:
                user_name = input('enter your name>>>')
                password = input('enter the password>>>')
                flag, msg = user_i.login_info(user_name, password)
                if flag:
                    print(msg)
                    sound(msg)
                    login_user=user_name
                    break
                else:
                    print(msg)
                    sound(msg)
                    break
        else:
            print('当前没有账户,请注册')
            sound('there are not users')
            register()
    else:
        print(f'user {login_user} has logged in')
        sound(f'user {login_user} has logged in')



#查看余额
@common.is_login
def check_money():
    money=bank_i.check_money(login_user)
    print(f'user->{login_user} money is {money}')
    sound(f'user{login_user} money is {money}')

#存钱
@common.is_login
def save_money():
    while 1:
        money = float(input('enter how much money what you save'))
        flag, msg = bank_i.save_money(login_user, money)
        if flag:
            print(msg)
            sound(msg)
            break
        else:
            print(msg)
            sound(msg)


#取钱
@common.is_login
def get_money():
    while 1:
        getmoney=float(input('enter how much money what you take'))
        flag,msg= bank_i.take_money(login_user,getmoney)
        if flag:
            print(msg)
            sound(msg)
            break
        else:
            print(msg)
            sound(msg)
#账单
@common.is_login
def account():
    acc,now_money=bank_i.get_acc(login_user)
    if acc:
        for i in acc:
            print(i)
        print(now_money.center(60))
        sound('这是您的账单')
    else:
        print('account-nothing')
        sound('nothing')

#注销用户
@common.is_login
def deleteuser():
    a=input(f'are you sure to cancel {login_user}? choose yes/no:')
    flag, msg = user_i.delete_info(login_user)
    if a=='yes' and flag==True:
        print(msg)
        sound('operation successed')
    elif a == 'yes' and flag == 'False':
        print(msg)
        sound('operation successed')
    elif a=='no':
        print('cancel unsuccessfully')
        sound('operation successed')

def bye():
    print('good bye~')
    sound('looking forward to your next visit')
    exit(0)

@common.is_login
def quit():
    global login_user
    if login_user:
        login_user=None
        sound('exit successfully')

#功能选择的字典
function_select={
    #不需要去加括号,只是获取函数的功能
    0:['退出程序',bye],
    1:['注册',register],
    2:['登陆',login],
    3:['查看余额',check_money],
    4:['存钱',save_money],
    5:['取钱',get_money],
    6:['流水',account],
    7:['退出登陆',quit],
    8:['注销用户',deleteuser]

}

def run():
    print('Welcom to my ATM!'.center(50))
    sound('Welcom to my ATM!')
    while 1:
        for i in function_select:
            print(i,function_select[i][0])
        select = int(input('select what you want to do'))
        #如果输入的值在序列里面就调用对于的函数功能
        if select in function_select:
            function_select[select][1]()
        else:
            print('error,try again')
            sound('error,please try again')

(4)数据库的读取(db_handle)

数据库是以json文件,这里调用json模块和OS模块去实现数据文件的读取r,保存w,还有删除remove

import json
import os
from config.setting import file_pass
#数据文件的保存
def save_data(user_info):
    name=user_info['user_name']
    #print(name)
    with open(fr'{file_pass}\{name}.json','w',encoding='utf8') as f:
        json.dump(user_info,f,indent=4)

#数据的读取
def get_data(user_name):
    file=fr'{file_pass}\{user_name}.json'
    if os.path.exists(file):
        with open(file,'r',encoding='utf8') as f:
            user_data=json.load(f)
            return user_data
    else:
        return None
#数据的删除
def del_data(user_name):
    file = fr'{file_pass}\{user_name}.json'
    if os.path.exists(file):
        os.remove(file)
        return True,f'{user_name} cancel successfully'
    return False,f'user{user_name} not exist'

(5)后端:用户的账号操作功能(user_i)

这个功能区是调用db_handle(自定义模块的功能),来获取数据库信息,然后进行操作(包括注册、登陆、注销功能)

#调用db_handle 模块的功能,实现数据的保存,读取,删除
from DB import db_handle
#功能:实现用户注册
def register_info(name,password):
    user_info={
        'user_name':name,
        'password':password,
        'money':0,
        'account':[],#列表来保存流水的信息
    }
    user_name = db_handle.get_data(name)
    if user_name:
        return False,'注册失败,该用户已存在'
    user_info['user_name']=name
    user_info['password']=password
    db_handle.save_data(user_info)
    return True,f'{name}注册成功'

#功能:实现登陆操作
def login_info(user_name,password):
    #通过用户名来获取数据
    user_data=db_handle.get_data(user_name)
    if user_data:
        if password==user_data['password'] and user_name==user_data['user_name']:
            return True,f'user->{user_name} sign in successfully'
        else:
            return False,'密码或者账号错误,try again'
    return False,'sorry!,the user is not existed'

#功能:注销用户
def delete_info(user_name):
    x,y=db_handle.del_data(user_name)
    return x,y

(6)后端:用户的金额操作(bank_i)

这里的功能区是获取数据库里面的金额信息,然后反馈给用户,用户可以在这里实现金额存款、取款、查看金额和流水操作,代码如下:

from DB import db_handle
import time
#查询余额
def check_money(user_name):
    user_data=db_handle.get_data(user_name)
    return user_data['money']

#获取此时操作的时间
now_time=time.ctime(time.mktime(time.localtime()))
#取款功能
def take_money(login_user,money):
    user_data=db_handle.get_data(login_user)
    if user_data['money']>=money:#判断当前余额够不够取,不够就返回相关信息,然后再次操作
        user_data['money']-=money
        a=fr'{now_time}年 取款{money}元'
        user_data['account'].append(a)
        db_handle.save_data(user_data)
        return True,a
    else:
        return False,'error,you have not enough money,try again'
#存款功能
def save_money(login_user,money):
    user_data=db_handle.get_data(login_user)
    user_data['money']+=money
    a=f'{now_time}年 存款{money}元'
    user_data['account'].append(a)
    db_handle.save_data(user_data)
    return True,a
#获取流水信息
def get_acc(login_user):
    user_data = db_handle.get_data(login_user)
    return user_data['account'],f'现存余额{user_data["money"]}'

OK,这一期就到这里了,Python的第一阶段学习也基本结束了,下一阶段是学习高级Python了,期待与你相见~~~

 分享一张壁纸

猜你喜欢

转载自blog.csdn.net/m0_73633088/article/details/129248357
今日推荐