栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python小程序---记账

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python小程序---记账

# -*- coding:utf-8 -*-

import pickle
import time
import os

def cost(fname):
    '用于记录花费'
    cost_time = time.strftime('%Y-%m-%d')
    try:#异常处理机制
        cost_deposit = int(input('花销金额:'))
        cost_mark = input('花销说明:')
    except ValueError:
        print('无效的金额')
        return # 函数的return类似于循环的break,return提前结束函数。
    except (KeyboardInterrupt, EOFError):
        print('nbye-bye')
        exit(1)

    # 在文件中取出所有的收支记录
    with open(fname,'rb') as fobj:
        records = pickle.load(fobj)

    # 计算最新余额
    balance = records[-1][-2] - cost_deposit

    # 构建最新一笔收入
    record = [cost_time,0,cost_deposit,balance,cost_mark]

    # 将收入追加到收支列表中
    records.append(record)

    # 将最新收支情况写入文件
    with open(fname,'wb') as fobj:
        pickle.dump(records,fobj)

def save(fname):
    save_time = time.strftime('%Y-%m-%d')
    try:
        save_deposit = int(input('收入金额:'))
        save_mark = input('收入说明:')

    except ValueError:
        print('无效的金额')
        return

    except (KeyboardInterrupt,EOFError):
        print('bye-bye')
        exit(1)

    with open(fname, 'rb') as fobj:
        records = pickle.load(fobj)

    balance = records[-1][-2] +  save_deposit
    record = [save_time,save_deposit,0,balance, save_mark]
    records.append(record)
    with open(fname, 'wb') as fobj:
        pickle.dump(records, fobj)

def query(fname):

    '用于查账'

    # 打印表头
    print(f'{"date":<15}{"save":<8}{"cost":<8}{"balance":<12}{"mark":<50}')
    with open(fname,'rb') as fobj:
        records = pickle.load(fobj)
    for date,cost,save,balance,mark in records:
        print(f'{date:<15}{cost:<8}{save:<8}{balance:<12}{mark:<50}')

def menu():
    funcs = {'0':cost,'1':save,'2':query}
    prompt = '''(0)开销

(1)收入

(2)查询

(3)退出

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

    fname = 'account.data'
    if not os.path.exists(fname):
        init_data = [[time.strftime('%Y-%m-%d'),0,0,0,'init_data']]
        with open(fname,'wb') as fobj:
            pickle.dump(init_data,fobj)
    while 1:
        try:
            choice = input(prompt).strip()
        except(KeyboardInterrupt,EOFError):
            choice = '3'
        if choice not in ['0','1','2','3']:
            print('无效输入,重试')
            continue
        if choice == '3':
            print('nbye_bye')
            break
        funcs[choice](fname)

if __name__ == '__main__':
     menu()

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/272590.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号