下方代码实现了简单的记帐功能,默认初始拥有金额1万元。该代码可以实现收入记账,支持支出记账以及查账这些功能。记账时刻精确到时间单位秒。
import time
import os
import pickleas p
def sr(record,wallet):
date=time.strftime('%Y-%m-%d %H:%M:%S')
amount=int(input('金额:'))
comment=input('用哪去了:')
with open(wallet,'rb')as fobj:
balance=p.load(fobj)-amount
with open(wallet,'wb')as fobj:
p.dump(balance,fobj)
with open(record,'a')as fobj:
fobj.write(
'%-30s%-8s%-8s%-10s%-20s\n' %
(date,amount,'n/a',balance,comment)
)
def jz(record,wallet):
date=time.strftime('%Y-%m-%d %H:%M:%S')
amount=int(input('金额:'))
comment=input('哪来的钱:')
with open(wallet,'rb')as fobj:
banlance=p.load(fobj)+amount
with open(wallet,'wb')as fobj:
p.dump(banlance,fobj)
with open(record,'a')as fobj:
fobj.write(
"%-30s%-8s%-8s%-10s%-20s\n" %
(date,'n/a',amount,banlance,comment)
)
def viewz(record,wallet):
with open(record)as fobj:
for linein fobj:
print(line,end='')
with open(wallet,'rb')as fobj:
balance=p.load(fobj)
print('当前余额:%s' % balance)
def cd_info():
info='''
(0) 支出 (1) 收入 (2) 查账 (3) 退出
请输入你要做的操作(0)支出/(1)收入/(2)查账/(3)退出:'''
cmds={'0':sr,'1':jz,'2':viewz}
record='record.txt'
wallet='wallet.data'
if not os.path.exists(wallet):
with open(wallet,'wb')as fobj:
p.dump(10000,fobj)
while True:
try:
choice=input(info).strip()[0]
except IndexError:
continue
except FileNotFoundError:
print('请操作(0)/(1)后再操作(2):')
except (KeyboardInterrupt,EOFError):
print('\nBye-bye')
choice='3'
if choicenot in '0123':
print('请重新输入')
continue
if choice =='3':
print('\n\nBye-Bye\n')
break
cmds[choice](record,wallet)
if __name__=='__main__':
cd_info()
下方为实现的效果:
[root@web1 wo]# python3 jz.py
(0) 支出
(1) 收入
(2) 查账
(3) 退出
请输入你要做的操作(0)支出/(1)收入/(2)查账/(3)退出:2
请操作(0)/(1)后再操作(2):
Traceback (most recent call last):
File "jz.py", line 74, in <module>
cd_info()
File "jz.py", line 72, in cd_info
cmds[choice](record,wallet)
File "jz.py", line 33, in viewz
with open(record) as fobj:
FileNotFoundError: [Errno 2] No such file or directory: 'record.txt'
[root@web1 wo]# python3 jz.py
(0) 支出
(1) 收入
(2) 查账
(3) 退出
请输入你要做的操作(0)支出/(1)收入/(2)查账/(3)退出:0
请操作(0)/(1)后再操作(2):
金额:5
用哪去了:zc
(0) 支出
(1) 收入
(2) 查账
(3) 退出
请输入你要做的操作(0)支出/(1)收入/(2)查账/(3)退出:2
请操作(0)/(1)后再操作(2):
2020-03-18 23:19:44 5 n/a 9995 zc
当前余额:9995
(0) 支出
(1) 收入
(2) 查账
(3) 退出
请输入你要做的操作(0)支出/(1)收入/(2)查账/(3)退出:3
请操作(0)/(1)后再操作(2):
Bye-Bye
效果总结:最开始执行时,不支持查账。最先操作需要在(0)/(1)/(3)中作选择。
网友评论