功能说明
- 添加收入和支出记录:用户可以添加新的收入和支出记录。
- 查看记录:用户可以查看所有的收入和支出记录。
- 生成财务报告:用户可以生成总收入、总支出和剩余金额的报告。
- 设定预算:用户可以设定每月的预算,并查看是否超出预算。
- 文件存储:使用文件来存储记录,以便下次启动程序时仍然可用。
示例代码
记录文件 records.txt
假设我们有一个记录文件 records.txt
,内容如下:
income 1000 Salary
expense 500 Rent
C++ 代码
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <iomanip>
struct FinancialRecord {
std::string type; // "income" 或 "expense"
double amount; // 金额
std::string description; // 描述
};
class FinancialManager {
private:
std::vector<FinancialRecord> records;
std::string filename;
double budget;
public:
FinancialManager(const std::string& file) : filename(file), budget(0) {
loadRecords();
}
void addRecord(const FinancialRecord& record) {
records.push_back(record);
saveRecords();
}
void viewRecords() const {
if (records.empty()) {
std::cout << "没有记录。" << std::endl;
return;
}
std::cout << "财务记录:" << std::endl;
for (const auto& record : records) {
std::cout << "类型: " << record.type << ", 金额: " << std::fixed << std::setprecision(2) << record.amount << ", 描述: " << record.description << std::endl;
}
}
void generateReport() const {
double totalIncome = 0, totalExpense = 0;
for (const auto& record : records) {
if (record.type == "income") {
totalIncome += record.amount;
} else if (record.type == "expense") {
totalExpense += record.amount;
}
}
double remaining = totalIncome - totalExpense;
std::cout << "财务报告:" << std::endl;
std::cout << "总收入: " << std::fixed << std::setprecision(2) << totalIncome << std::endl;
std::cout << "总支出: " << std::fixed << std::setprecision(2) << totalExpense << std::endl;
std::cout << "剩余金额: " << std::fixed << std::setprecision(2) << remaining << std::endl;
}
void setBudget(double newBudget) {
budget = newBudget;
std::cout << "预算已设置为: " << std::fixed << std::setprecision(2) << budget << std::endl;
}
void checkBudget() const {
double totalExpense = 0;
for (const auto& record : records) {
if (record.type == "expense") {
totalExpense += record.amount;
}
}
if (totalExpense > budget) {
std::cout << "警告:已超出预算。" << std::endl;
} else {
std::cout << "当前支出未超出预算。" << std::endl;
}
}
private:
void loadRecords() {
std::ifstream file(filename);
if (!file.is_open()) {
std::cerr << "无法打开记录文件:" << filename << std::endl;
return;
}
records.clear();
std::string type, description;
double amount;
while (file >> type >> amount >> description) {
records.push_back({type, amount, description});
}
}
void saveRecords() const {
std::ofstream file(filename);
if (!file.is_open()) {
std::cerr << "无法打开记录文件:" << filename << std::endl;
return;
}
for (const auto& record : records) {
file << record.type << " " << record.amount << " " << record.description << std::endl;
}
}
};
int main() {
FinancialManager manager("records.txt");
while (true) {
std::cout << "\n个人财务管理系统菜单:" << std::endl;
std::cout << "1. 添加记录" << std::endl;
std::cout << "2. 查看记录" << std::endl;
std::cout << "3. 生成财务报告" << std::endl;
std::cout << "4. 设置预算" << std::endl;
std::cout << "5. 检查预算" << std::endl;
std::cout << "6. 退出" << std::endl;
std::cout << "请选择一个选项: ";
int choice;
std::cin >> choice;
switch (choice) {
case 1: {
std::string type, description;
double amount;
std::cout << "请输入记录类型(income/expense): ";
std::cin >> type;
std::cout << "请输入金额: ";
std::cin >> amount;
std::cout << "请输入描述: ";
std::cin.ignore(); // 忽略之前的换行符
std::getline(std::cin, description);
manager.addRecord({type, amount, description});
break;
}
case 2: {
manager.viewRecords();
break;
}
case 3: {
manager.generateReport();
break;
}
case 4: {
double newBudget;
std::cout << "请输入新的预算金额: ";
std::cin >> newBudget;
manager.setBudget(newBudget);
break;
}
case 5: {
manager.checkBudget();
break;
}
case 6: {
std::cout << "退出个人财务管理系统。" << std::endl;
return 0;
}
default: {
std::cout << "无效的选项,请重新选择。" << std::endl;
break;
}
}
}
return 0;
}
代码解释
-
结构体
FinancialRecord
:- 定义了一个包含记录类型(收入或支出)、金额和描述的结构体。
-
类
FinancialManager
:- 成员变量:
records
:存储财务记录的向量。filename
:存储记录的文件名。budget
:用户的预算金额。
- 构造函数:初始化文件名并加载已有的记录。
- 方法:
addRecord
:添加一个新的财务记录并保存到文件。viewRecords
:显示所有财务记录。generateReport
:生成总收入、总支出和剩余金额的报告。setBudget
:设置用户的预算金额。checkBudget
:检查当前支出是否超出预算。loadRecords
:从文件中加载记录。saveRecords
:将记录保存到文件。
- 成员变量:
-
主函数
main
:- 创建一个
FinancialManager
实例,记录文件名为"records.txt"
。 - 提供一个简单的命令行界面,让用户选择添加记录、查看记录、生成报告、设置预算、检查预算或退出程序。
- 根据用户的选择调用相应的
FinancialManager
方法。
- 创建一个
运行示例
假设用户输入如下:
个人财务管理系统菜单:
1. 添加记录
2. 查看记录
3. 生成财务报告
4. 设置预算
5. 检查预算
6. 退出
请选择一个选项: 1
请输入记录类型(income/expense): income
请输入金额: 1000
请输入描述: Salary
然后用户选择查看记录:
个人财务管理系统菜单:
1. 添加记录
2. 查看记录
3. 生成财务报告
4. 设置预算
5. 检查预算
6. 退出
请选择一个选项: 2
财务记录:
类型: income, 金额: 1000.00, 描述: Salary
类型: expense, 金额: 500.00, 描述: Rent
标签:std,进阶,记录,管理系统,用户,C++,records,预算,cout
From: https://blog.csdn.net/weixin_42300449/article/details/143811961