个人财政支出管理C++

个人财政支出管理程序

目标:个人财政支出管理程序,将个人财务的目标及当前存款、支出保存下来,可以随时更,查看,比较新颖与目标的差距

设计要求:

  • 将收支的数据与相应的函数封装到类中,并改写主程序,使程序结构化。
  • 增加保存每笔收支的记录,并对每笔记录增加日期录入,按日期的顺序保存、查看记录。将所有记录放入一个文件中,每次运行程序时首先打开这个文件,程序运行完毕时将更新的记录放回文件中。
  • 完善程序,补充类中数据成员盈余(dlBalance)的计算和输出,要求每笔收入和支出都要重新统计当前情况下的盈余数目。
  • 增加程序监控功能,当输人时间发生错误(如月份超过12等),要求重新输入正确的时间;当结余的数目为负数时,输出信息,警告已经超支!

菜单要求:

  • 输人收人记录
  • 输人支出记录
  • 查看收人记录
  • 查看支出记录
  • 查看收支平衡情况
  • 根据日期查找记录
  • 根据日期修改记录
  • 根据日期删除记录
  • 退出系统

开发文档

概述

个人财务管理系统是一个简单的控制台程序,旨在帮助用户记录和管理其收入和支出。该系统具有以下主要功能:

  1. 输入收入记录
  2. 查看收入记录
  3. 输入支出记录
  4. 查看支出记录
  5. 查看收支平衡情况
  6. 根据日期查找记录
  7. 根据日期修改收入记录
  8. 根据日期删除记录
  9. 根据日期修改支出记录
技术细节
  • 语言: C++
  • 存储: 使用二进制文件存储记录
  • 用户界面: 使用控制台界面
  • 数据结构: 使用类来组织数据,包括日期、金额和用途
开发思路
  1. 设计数据结构: 设计类来表示收入和支出记录,并定义必要的成员变量和函数。
  2. 实现主要功能: 实现收入和支出记录的添加、查看和删除功能。
  3. 实现辅助功能: 实现其他功能,如根据日期查找记录、修改记录等。
  4. 界面设计: 设计用户友好的控制台界面,以便用户可以轻松使用系统。
  5. 测试和调试: 对系统进行全面测试,并解决可能存在的问题和错误。

答辩可能问到的问题

  1. 系统的存储方式是什么?: 答:系统使用二进制文件来存储收入和支出记录。
  2. 如何保证数据的安全性?: 答:系统在写入和读取文件时进行了错误检查,并且在每次修改记录时都会备份数据,以防止意外损坏。
  3. 是否考虑到多用户并发访问的情况?: 答:本系统暂时未考虑多用户并发访问,它是为单个用户设计的。
  4. 系统的扩展性如何?: 答:系统可以轻松扩展,例如添加更多的统计功能、用户身份验证等。
  5. 是否考虑到跨平台兼容性?: 答:本系统目前仅在 Windows 平台上测试,尚未进行跨平台兼容性测试。
  6. 如何处理异常情况?: 答:系统会在出现异常情况时向用户提供相应的错误信息,并尽力保证程序的稳定性和可靠性。

这些问题的答案将有助于展示你对系统设计和实现的理解程度,以及对潜在问题的考虑和解决能力。

源码:

#include <iostream>
#include <fstream>
#include <limits>
#include <cstring>
#include <iomanip>

class CFinance {
private:
    int nYear, nMonth, nDay;
    double dlIncome, dlOutput;
    double dlBalance;
    char szPurpose[50]; // 增加长度以容纳更多内容

public:
    CFinance() : nYear(0), nMonth(0), nDay(0), dlIncome(0.0), dlOutput(0.0), dlBalance(0.0) {}

    void InputIncomeRecord() {
        std::cout << "请输入日期(年 月 日):";
        std::cin >> nYear >> nMonth >> nDay;

        std::cout << "请输入金额:";
        std::cin >> dlIncome;

        std::cout << "请输入用途:";
        std::cin.ignore();
        std::cin.getline(szPurpose, 50);

        dlBalance += dlIncome;

        SaveIncomeRecord(); // 保存收入记录到文件

        std::cout << "收入记录添加成功。" << std::endl;
        std::cout << "按下 Enter 键继续...";
        std::cin.get(); // 等待用户按下 Enter 键
        system("cls");
        std::cout << "已按下 Enter 键,继续执行下一步操作。" << std::endl;
    }

    void SaveIncomeRecord() {
        std::ofstream outFile("income_records.data", std::ios::binary | std::ios::app);
        if (!outFile) {
            std::cerr << "无法打开文件。" << std::endl;
            return;
        }

        outFile.write(reinterpret_cast<const char*>(&nYear), sizeof(nYear));
        outFile.write(reinterpret_cast<const char*>(&nMonth), sizeof(nMonth));
        outFile.write(reinterpret_cast<const char*>(&nDay), sizeof(nDay));
        outFile.write(reinterpret_cast<const char*>(&dlIncome), sizeof(dlIncome));
        outFile.write(szPurpose, sizeof(szPurpose));

        outFile.close();
    }

    void ShowIncomeRecords() {
        std::ifstream inFile("income_records.data", std::ios::binary);
        if (!inFile) {
            std::cerr << "无法打开文件。" << std::endl;
            return;
        }

        std::cout << "收入记录:" << std::endl;
        std::cout << std::setw(17) << "日期" << std::setw(20.5) << "金额" << std::setw(48) << "用途" << std::endl;
        while (inFile.read(reinterpret_cast<char*>(&nYear), sizeof(nYear))) {
            inFile.read(reinterpret_cast<char*>(&nMonth), sizeof(nMonth));
            inFile.read(reinterpret_cast<char*>(&nDay), sizeof(nDay));
            inFile.read(reinterpret_cast<char*>(&dlIncome), sizeof(dlIncome));
            inFile.read(szPurpose, sizeof(szPurpose));

            std::cout << std::setw(15) << nYear << "/" << std::setw(2) << nMonth << "/" << std::setw(2) << nDay << std::setw(15) << dlIncome <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CoderJoon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值