C语言做的个人记账本

108 阅读3分钟

个人记账本系统

一个用C语言实现的简单个人记账本程序,支持收支记录、月度统计和数据加密保存。

功能特性

核心功能

  • 记录每日收支:支持收入/支出记录,包含类型、金额、分类、备注
  • 月度统计:按月份统计总收入/支出和净收入
  • 数据加密保存:使用异或加密算法保护数据安全
  • 密码保护:程序启动需要输入密码验证

技术特性

  • 📊 结构体数组:使用Transaction结构体存储交易记录
  • 💾 文件读写:二进制文件存储,支持数据持久化
  • 🔐 简单加密:异或加密算法保护敏感数据
  • 🎯 用户友好:清晰的菜单界面和输入验证

系统要求

  • Windows/Linux/macOS
  • GCC编译器
  • 标准C库

直接编译

# 编译
gcc -Wall -Wextra -std=c99 -o account_book main.c

# 运行
./account_book

使用说明

1. 启动程序

程序启动时会要求输入密码,默认密码为:123456

2. 主菜单功能

  • 1. 添加收支记录:记录新的收入或支出
  • 2. 查看所有记录:显示所有历史记录
  • 3. 月度统计:查看指定月份的收支统计
  • 4. 保存数据:手动保存数据到文件
  • 0. 退出程序:保存并退出

3. 添加记录流程

  1. 选择交易类型(收入/支出)
  2. 输入金额(必须为正数)
  3. 输入分类(如:工资、餐饮、交通等)
  4. 输入备注(可选)
  5. 记录自动保存到文件

4. 月度统计

  • 输入要统计的年月(格式:YYYY MM)
  • 显示该月所有记录
  • 统计收入、支出和净收入

数据结构

Transaction结构体

typedef struct {
    int id;                     // 记录ID
    int year;                   // 年份
    int month;                  // 月份
    int day;                    // 日期
    TransactionType type;       // 交易类型(收入/支出)
    double amount;              // 金额
    char category[MAX_STRING];  // 分类
    char note[MAX_STRING];      // 备注
    time_t timestamp;           // 时间戳
} Transaction;

交易类型枚举

typedef enum {
    INCOME = 1,    // 收入
    EXPENSE = 2    // 支出
} TransactionType;

文件说明

  • main.c:主程序文件,包含所有功能实现
  • Makefile:编译配置文件
  • README.md:项目说明文档
  • account_book.dat:数据文件(程序运行时自动创建,加密存储)

技术实现

加密算法

使用简单的异或加密:

void encrypt_data(unsigned char *data, int length) {
    for (int i = 0; i < length; i++) {
        data[i] ^= 0xAA;  // 使用0xAA作为密钥
    }
}

文件操作

  • 使用二进制文件存储,提高读写效率
  • 支持数据加密/解密
  • 自动保存和加载功能

输入验证

  • 金额输入验证(必须为正数)
  • 菜单选择验证
  • 字符串长度限制

配置选项

main.c文件开头可以修改以下配置:

#define MAX_RECORDS 1000    // 最大记录数
#define MAX_STRING 100      // 字符串最大长度
#define FILENAME "account_book.dat"  // 数据文件名
#define PASSWORD "123456"   // 默认密码

注意事项

  1. 密码安全:建议修改默认密码以提高安全性
  2. 数据备份:定期备份account_book.dat文件
  3. 记录限制:最多支持1000条记录
  4. 文件权限:确保程序有读写文件的权限

1.png