用结构体实现简单的个人小金库信息管理。每个人都可以建立自己的小金库,在里面存放自己的资金。购物时会花费资金,这是支出;获得奖学金、爸妈寄的生活费或打工赚的工钱等,这是收入。小金库的资金会不断地变化,可以开发 管理系统对小金库进行管理。要求从键盘输入至少3笔记录,并显示
时间: 2024-04-22 14:27:27 浏览: 84
好的,我可以为您解答这个问题。
以下是用结构体实现的个人小金库信息管理的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 20
#define MAX_RECORDS 10
typedef struct {
char name[MAX_NAME_LEN];
double balance;
} Account;
typedef struct {
char type[10];
double amount;
} Record;
int main() {
Account account;
Record records[MAX_RECORDS];
int num_records = 0;
double amount;
char type[10];
// 输入个人信息
printf("请输入姓名: ");
fgets(account.name, MAX_NAME_LEN, stdin);
account.name[strlen(account.name)-1] = '\0';
printf("请输入账户余额: ");
scanf("%lf", &account.balance);
getchar(); // 消耗掉输入缓冲区中的回车符
// 输入记录
while (num_records < MAX_RECORDS) {
printf("请输入记录类型(收入或支出): ");
fgets(type, 10, stdin);
type[strlen(type)-1] = '\0';
if (strcmp(type, "收入") != 0 && strcmp(type, "支出") != 0) {
printf("无效的记录类型,请重新输入\n");
continue;
}
printf("请输入金额: ");
scanf("%lf", &amount);
getchar(); // 消耗掉输入缓冲区中的回车符
strcpy(records[num_records].type, type);
records[num_records].amount = amount;
num_records++;
printf("是否继续输入?(y/n): ");
char c = getchar();
getchar(); // 消耗掉输入缓冲区中的回车符
if (c == 'n') {
break;
}
}
// 显示个人信息和记录
printf("\n个人信息:\n");
printf("姓名: %s\n", account.name);
printf("账户余额: %.2f\n", account.balance);
printf("\n记录:\n");
printf("%-10s%-10s\n", "类型", "金额");
for (int i = 0; i < num_records; i++) {
printf("%-10s%.2f\n", records[i].type, records[i].amount);
if (strcmp(records[i].type, "收入") == 0) {
account.balance += records[i].amount;
} else {
account.balance -= records[i].amount;
}
}
printf("账户余额: %.2f\n", account.balance);
return 0;
}
```
这个程序定义了两个结构体:`Account` 和 `Record`,分别表示个人账户和每笔记录。程序首先从键盘输入个人信息,然后输入一些记录,并将它们存储在一个数组中。最后,程序打印出个人信息和记录,并计算出账户余额。
注意,本程序只是一个简单的示例,没有进行输入验证和错误处理。在实际应用中,需要对输入进行验证并处理可能的错误。
阅读全文