python打造记账本,记账本-简单的python脚本

#====================================#

#花销记账单#

#====================================#

#datetime:2020-1-9 9:20:00

#author: chenshuai

#email: csawyy@163.com

#解题思路

'调用模块-定义函数-循环判断-异常报错优化-退出'

--------------------------------------------------------------------------

#python脚本-交互式;注意格式

import os

import pickle

from timeimport strftime

def save(fname):

'用于记录收入'

try:

amount =int(input('输入金额:'))

comment =input('备注:')

except ValueError:

print('无效的金额!')

return

#函数return类似于循环的break,结束函数

except (KeyboardInterrupt,EOFError):

print('\n Bye-bye')

exit()

date = strftime('%Y-%m-%d')

#取出全部的收支情况列表

with open(fname,'rb')as fobj:

records = pickle.load(fobj)

#计算最新余额

balance = records[-1][-2] + amount

#构建收入情况列表

line = [date,amount,0,balance,comment]

records.append(line)

#将更新后的收支情况列表写回文件

with open(fname,'wb')as fobj:

pickle.dump(records,fobj)

def cost(fname):

'用于记录支出'

amount =int(input('输入金额:'))

comment =input('备注:')

date = strftime('%Y-%m-%d')

with open(fname,'rb')as fobj:

records = pickle.load(fobj)

balance = records[-1][-2] - amount

line = [date,0, amount,balance, comment]

records.append(line)

with open(fname,'wb')as fobj:

pickle.dump(records, fobj)

def query(fname):

#用于查询收支情况

with open(fname,'rb')as fobj:

records =pickle.load(fobj)

#打印内容

print('%-12s%-8s%-8s%-12s%-20s' % ('date','save','cost','balance','comment'))

for linein records:

print('%-12s%-8s%-8s%-12s%-20s'%tuple(line))

def show_menu():

cmds={'0':save,'1':cost,'2':query}

prompt="""

(0) 收入    (1) 支出    (2) 查询    (3) 退出

请选择(0/1/2/3):"""

# 定义变量:文件名称

fname ='account.data'

#初始化文件内容的格式(字段)

init_data=[['2020-01-09',0,0,10000,'init data']]

#文件不存在,则创建

if not os.path.exists(fname):

with open(fname,'wb')as fobj:

pickle.dump(init_data,fobj)

while 1:

try:

choice =input(prompt).strip()

except (KeyboardInterrupt,EOFError):

choice ='3'

if choicenot in ['0','1','2','3']:

print('\033[32;1m无效的输入,请重试!\033[0m')

continue

if choice =='3':

print('\n Bye-bye')

break

cmds[choice](fname)

if __name__ =='__main__':

show_menu()

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值