python-记账小程序(80)

# 转自https://www.jianshu.com/c/00c61372c46a网址
#1,记账时手头有一万块钱
#2,可以记录花的钱,存的钱,以及收支明细

#wallet文件内存总的钱数,余额
#record文件内存的是明细


import pickle
import os
import time

def cost(wallet,record):    #记录花钱的函数
    amount = int(input('amount: ')) #输入数字
    comment = input('comment: ')    #输入
    date = time.strftime('%Y-%m-%d')
    with open(wallet,'rb') as fobj: #从文件取总值减去amount
        balance = pickle.load(fobj) - amount
    with open(wallet,'wb') as fobj:
        pickle.dump(balance,fobj)   #将上面得到的值再写入文件内
    with open(record,'a') as fobj:  #向record对应文件内追加各种信息
        fobj.write(
            '%-15s%-8s%-8s%-8s%-20s\n' % (date,'',amount,balance,comment)
        )

def save(wallet,record):    #记录存钱的函数
    amount = int(input('amount: '))
    comment = input('comment: ')
    date = time.strftime('%Y-%m-%d')
    with open(wallet,'rb') as fobj:
        balance = pickle.load(fobj) + amount
    with open(wallet,'wb') as fobj:
        pickle.dump(balance,fobj)
    with open(record,'a') as fobj:
        fobj.write(
            '%-15s%-8s%-8s%-8s%-20s\n' % (date,amount,'',balance,comment)
        )

def query(wallet,record):   #查询收支明细的函数
    print('%-15s%-8s%-8s%-8s%-20s' % ('date','save','cost','balance','comment'))
    with open(record) as fobj:  #输出明细
        for line in fobj:
            print(line,end='')
    with open(wallet,'rb') as fobj: #输出余额
        balance = pickle.load(fobj)
        print("Latest Balance: %d" % balance)

def show_menu():
    cmds = {'0':save,'1':cost,'2':query}
    prompt = """(0) save
(1) cost
(2) query
(3) exit
Please input your choice(0/1/2/3): """
    wallet = '/tmp/1wallet.data'
    record = '/tmp/1record.txt'
    if not os.path.exists(wallet):
        with open(wallet,'wb') as fobj: #如果/tmp/wallet.data不存在,则创建并写入数据10000
            pickle.dump(10000,fobj)

    while True:
        try:
            choice = input(prompt).strip()[0]   #去除空格,选取第一个数字
        except ImportError:
            continue
        except (KeyboardInterrupt,EOFError):
            print()
            choice == '3'

        if choice not in '0123':
            print('Invalid input. Try again.')
            continue

        if choice == '3':
            break
        cmds[choice](wallet,record) #根据cmds字典和choice选择运行上面定义的函数即查询,花钱,存钱

if __name__ == '__main__':
    show_menu()



好的,我来为您介绍一下Python记账小程序: Python记账小程序一个简单实用的个人财务管理工具,可以用来记录日常收支情况。它通常具有以下功能: 1. 记录收入和支出:用户可以输入每笔交易的日期、类别、金额和备注等信息。 2. 分类统计:程序会自动按类别统计收入和支出,生成报表。 3. 余额计算:根据记录自动计算当前账户余额。 4. 数据存储:将数据保存在本地文件或数据库中,方便长期使用。 5. 查询功能:可以根据日期范围、类别等条件查询特定交易记录。 6. 图表展示:使用Matplotlib等库生成收支图表,直观展示财务状况。 7. 用户界面:可以使用命令行界面或图形用户界面(如Tkinter)进行交互。 下面是一个简单的Python记账程序示例: ```python import csv from datetime import datetime class Ledger: def __init__(self, filename): self.filename = filename self.records = [] def load(self): with open(self.filename, 'r') as file: reader = csv.reader(file) for row in reader: self.records.append(row) def save(self): with open(self.filename, 'w', newline='') as file: writer = csv.writer(file) writer.writerows(self.records) def add_record(self, date, category, amount, description): self.records.append([date, category, amount, description]) self.save() def get_balance(self): total = 0 for record in self.records: amount = float(record[2]) if amount > 0: total += amount else: total -= amount return total def get_report(self): report = {} for record in self.records: category = record[1] amount = float(record[2]) if category in report: report[category] += amount if amount > 0 else -amount else: report[category] = amount if amount > 0 else -amount return report # 使用示例 ledger = Ledger('ledger.csv') ledger.load() print("欢迎使用日记账程序") print("1. 添加记录") print("2. 查看余额") print("3. 生成报表") choice = input("请选择操作(1/2/3): ") if choice == '1': date = input("请输入日期(yyyy-mm-dd): ") category = input("请输入类别: ") amount = input("请输入金额: ") description = input("请输入描述: ") ledger.add_record(date, category, float(amount), description) elif choice == '2': print(f"当前余额: {ledger.get_balance()}") elif choice == '3': report = ledger.get_report() for category, amount in report.items(): print(f"{category}: {amount}") ``` 这个程序实现了基本的日记账功能,包括添加记录、查看余额和生成报表。您可以根据需要进一步扩展功能,比如添加数据验证、生成图表等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值