12.9日记

这周我没讲了Makefile的制作,摆脱gcc。并且在之后学习制作其他课程时也可以用到这个makefile模板,很方便。主要自己的没有完善好,晚上复习时除了复习还要完善自己的工程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的个人小管家应用系统的C语言实现: ```c #include <stdio.h> #include <stdlib.h> // 定义最大记录数 #define MAX_RECORDS 100 // 定义收支类型 typedef enum { INCOME, EXPENSE } RecordType; // 定义收支记录结构体 typedef struct { RecordType type; // 收支类型 float amount; // 金额 char date[20]; // 日期 char description[50]; // 描述 } Record; // 定义全局变量 Record records[MAX_RECORDS]; // 所有记录 int numRecords = 0; // 记录数 // 显示主菜单 void showMainMenu() { printf("========================\n"); printf(" 个人小管家应用系统\n"); printf("========================\n"); printf("1. 收入管理\n"); printf("2. 支出管理\n"); printf("3. 退出\n"); printf("========================\n"); printf("请选择操作:"); } // 显示收入管理菜单 void showIncomeMenu() { printf("========================\n"); printf(" 收入管理\n"); printf("========================\n"); printf("1. 添加收入记录\n"); printf("2. 查询收入记录\n"); printf("3. 删除收入记录\n"); printf("4. 修改收入记录\n"); printf("5. 打印收入记录\n"); printf("6. 返回主菜单\n"); printf("========================\n"); printf("请选择操作:"); } // 显示支出管理菜单 void showExpenseMenu() { printf("========================\n"); printf(" 支出管理\n"); printf("========================\n"); printf("1. 添加支出记录\n"); printf("2. 查询支出记录\n"); printf("3. 删除支出记录\n"); printf("4. 修改支出记录\n"); printf("5. 打印支出记录\n"); printf("6. 返回主菜单\n"); printf("========================\n"); printf("请选择操作:"); } // 添加收支记录 void addRecord(RecordType type) { if (numRecords >= MAX_RECORDS) { printf("记录已满,无法添加!\n"); return; } Record r; r.type = type; printf("请输入金额:"); scanf("%f", &r.amount); printf("请输入日期(格式为yyyy-mm-dd):"); scanf("%s", r.date); printf("请输入描述:"); scanf("%s", r.description); records[numRecords++] = r; printf("记录已添加!\n"); } // 查询收支记录 void queryRecord(RecordType type) { float total = 0; printf("日期\t\t金额\t\t描述\n"); printf("=======================================\n"); for (int i = 0; i < numRecords; i++) { Record r = records[i]; if (r.type == type) { printf("%s\t%.2f\t%s\n", r.date, r.amount, r.description); total += r.amount; } } printf("=======================================\n"); printf("总计:%.2f\n", total); } // 删除收支记录 void deleteRecord(RecordType type) { int index = -1; printf("请输入要删除的记录日期(格式为yyyy-mm-dd):"); char date[20]; scanf("%s", date); for (int i = 0; i < numRecords; i++) { Record r = records[i]; if (r.type == type && strcmp(r.date, date) == 0) { index = i; break; } } if (index != -1) { for (int i = index; i < numRecords - 1; i++) { records[i] = records[i + 1]; } numRecords--; printf("记录已删除!\n"); } else { printf("未找到该记录!\n"); } } // 修改收支记录 void modifyRecord(RecordType type) { printf("请输入要修改的记录日期(格式为yyyy-mm-dd):"); char date[20]; scanf("%s", date); for (int i = 0; i < numRecords; i++) { Record r = records[i]; if (r.type == type && strcmp(r.date, date) == 0) { printf("请输入新的金额:"); scanf("%f", &r.amount); printf("请输入新的日期(格式为yyyy-mm-dd):"); scanf("%s", r.date); printf("请输入新的描述:"); scanf("%s", r.description); records[i] = r; printf("记录已修改!\n"); return; } } printf("未找到该记录!\n"); } // 打印收支记录 void printRecord(RecordType type) { printf("日期\t\t金额\t\t描述\n"); printf("=======================================\n"); for (int i = 0; i < numRecords; i++) { Record r = records[i]; if (r.type == type) { printf("%s\t%.2f\t%s\n", r.date, r.amount, r.description); } } printf("=======================================\n"); } int main() { int choice; while (1) { showMainMenu(); scanf("%d", &choice); switch (choice) { case 1: // 收入管理 while (1) { showIncomeMenu(); scanf("%d", &choice); switch (choice) { case 1: addRecord(INCOME); break; case 2: queryRecord(INCOME); break; case 3: deleteRecord(INCOME); break; case 4: modifyRecord(INCOME); break; case 5: printRecord(INCOME); break; case 6: goto MAIN_MENU; default: printf("无效操作!\n"); break; } } case 2: // 支出管理 while (1) { showExpenseMenu(); scanf("%d", &choice); switch (choice) { case 1: addRecord(EXPENSE); break; case 2: queryRecord(EXPENSE); break; case 3: deleteRecord(EXPENSE); break; case 4: modifyRecord(EXPENSE); break; case 5: printRecord(EXPENSE); break; case 6: goto MAIN_MENU; default: printf("无效操作!\n"); break; } } case 3: // 退出系统 printf("谢谢使用!\n"); exit(0); default: printf("无效操作!\n"); break; } MAIN_MENU:; } return 0; } ``` 该程序使用了结构体来存储收支记录,全局变量记录了所有的记录和记录数,通过各个函数来实现收支记录的添加、查询、删除、修改和打印等操作。程序中使用了循环和跳转语句来实现菜单的显示和操作选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值