目录
前言:
编辑 编辑
代码实现ATM项目
(1)数据库路径(setting.py)
(2)声音系统,提示播报(voice.py)
(3)src前端(src.py)
(4)数据库的读取(db_handle)
(5)后端:用户的账号操作功能(user_i)
(6)后端:用户的金额操作(bank_i)
前言:
功能要求:
注册、登陆、存钱、取钱、查看流水、查看余额、退出登陆、退出系统、注销用户、语言播报。
这个是我的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了,期待与你相见~~~
分享一张壁纸