个人记账本系统
一个用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. 添加记录流程
- 选择交易类型(收入/支出)
- 输入金额(必须为正数)
- 输入分类(如:工资、餐饮、交通等)
- 输入备注(可选)
- 记录自动保存到文件
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" // 默认密码
注意事项
- 密码安全:建议修改默认密码以提高安全性
- 数据备份:定期备份
account_book.dat文件 - 记录限制:最多支持1000条记录
- 文件权限:确保程序有读写文件的权限