I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7CiNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKCiNkZWZpbmUgTUFYIDEwMAoKc3RydWN0IEJ1ZGdldCB7CiAgICBjaGFyIHR5cGVbMjBdOwogICAgZmxvYXQgYW1vdW50Owp9OwoKc3RydWN0IEJ1ZGdldCBpbmNvbWVzW01BWF07CnN0cnVjdCBCdWRnZXQgZXhwZW5zZXNbTUFYXTsKCmludCBpbmNvbWVDb3VudCA9IDA7CmludCBleHBlbnNlQ291bnQgPSAwOwoKLy8g4LmA4Lie4Li04LmI4Lih4Lij4Liy4Lii4Lij4Lix4LiaCnZvaWQgYWRkSW5jb21lKCkgewogICAgcHJpbnRmKCZxdW90O0VudGVyIGluY29tZSB0eXBlOiAmcXVvdDspOwogICAgc2NhbmYoJnF1b3Q7JXMmcXVvdDssIGluY29tZXNbaW5jb21lQ291bnRdLnR5cGUpOwoKICAgIHByaW50ZigmcXVvdDtFbnRlciBhbW91bnQ6ICZxdW90Oyk7CiAgICBzY2FuZigmcXVvdDslZiZxdW90OywgJmFtcDtpbmNvbWVzW2luY29tZUNvdW50XS5hbW91bnQpOwoKICAgIGluY29tZUNvdW50Kys7Cn0KCi8vIOC5gOC4nuC4tOC5iOC4oeC4o+C4suC4ouC4iOC5iOC4suC4ogp2b2lkIGFkZEV4cGVuc2UoKSB7CiAgICBwcmludGYoJnF1b3Q7RW50ZXIgZXhwZW5zZSB0eXBlOiAmcXVvdDspOwogICAgc2NhbmYoJnF1b3Q7JXMmcXVvdDssIGV4cGVuc2VzW2V4cGVuc2VDb3VudF0udHlwZSk7CgogICAgcHJpbnRmKCZxdW90O0VudGVyIGFtb3VudDogJnF1b3Q7KTsKICAgIHNjYW5mKCZxdW90OyVmJnF1b3Q7LCAmYW1wO2V4cGVuc2VzW2V4cGVuc2VDb3VudF0uYW1vdW50KTsKCiAgICBleHBlbnNlQ291bnQrKzsKfQoKLy8g4LiE4Liz4LiZ4Lin4LiT4Lij4Liy4Lii4Lij4Lix4Lia4Lij4Lin4LihCmZsb2F0IHRvdGFsSW5jb21lKCkgewogICAgZmxvYXQgdG90YWwgPSAwOwogICAgZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBpbmNvbWVDb3VudDsgaSsrKSB7CiAgICAgICAgdG90YWwgKz0gaW5jb21lc1tpXS5hbW91bnQ7CiAgICB9CiAgICByZXR1cm4gdG90YWw7Cn0KCi8vIOC4hOC4s+C4meC4p+C4k+C4o+C4suC4ouC4iOC5iOC4suC4ouC4o+C4p+C4oQpmbG9hdCB0b3RhbEV4cGVuc2UoKSB7CiAgICBmbG9hdCB0b3RhbCA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSAmbHQ7IGV4cGVuc2VDb3VudDsgaSsrKSB7CiAgICAgICAgdG90YWwgKz0gZXhwZW5zZXNbaV0uYW1vdW50OwogICAgfQogICAgcmV0dXJuIHRvdGFsOwp9CgovLyDguYHguKrguJTguIfguIfguJrguJvguKPguLDguKHguLLguJMKdm9pZCBzaG93QnVkZ2V0KCkgewogICAgcHJpbnRmKCZxdW90O1xuPT09PT0gQlVER0VUIFJFUE9SVCA9PT09PVxuJnF1b3Q7KTsKCiAgICBwcmludGYoJnF1b3Q7VG90YWwgSW5jb21lOiAlLjJmXG4mcXVvdDssIHRvdGFsSW5jb21lKCkpOwogICAgcHJpbnRmKCZxdW90O1RvdGFsIEV4cGVuc2U6ICUuMmZcbiZxdW90OywgdG90YWxFeHBlbnNlKCkpOwogICAgcHJpbnRmKCZxdW90O0JhbGFuY2U6ICUuMmZcbiZxdW90OywgdG90YWxJbmNvbWUoKSAtIHRvdGFsRXhwZW5zZSgpKTsKCiAgICBwcmludGYoJnF1b3Q7XG4tLS0gRXhwZW5zZXMgRGV0YWlsIC0tLVxuJnF1b3Q7KTsKICAgIGZvciAoaW50IGkgPSAwOyBpICZsdDsgZXhwZW5zZUNvdW50OyBpKyspIHsKICAgICAgICBwcmludGYoJnF1b3Q7JXMgOiAlLjJmXG4mcXVvdDssCiAgICAgICAgICAgICAgIGV4cGVuc2VzW2ldLnR5cGUsCiAgICAgICAgICAgICAgIGV4cGVuc2VzW2ldLmFtb3VudCk7CiAgICB9Cn0KCi8vIOC4muC4seC4meC4l+C4tuC4geC5hOC4n+C4peC5jAp2b2lkIHNhdmVGaWxlKCkgewogICAgRklMRSAqZnAgPSBmb3BlbigmcXVvdDtidWRnZXQudHh0JnF1b3Q7LCAmcXVvdDt3JnF1b3Q7KTsKCiAgICBmcHJpbnRmKGZwLCAmcXVvdDslZFxuJnF1b3Q7LCBpbmNvbWVDb3VudCk7CiAgICBmb3IgKGludCBpID0gMDsgaSAmbHQ7IGluY29tZUNvdW50OyBpKyspIHsKICAgICAgICBmcHJpbnRmKGZwLCAmcXVvdDslcyAlZlxuJnF1b3Q7LAogICAgICAgICAgICAgICAgaW5jb21lc1tpXS50eXBlLAogICAgICAgICAgICAgICAgaW5jb21lc1tpXS5hbW91bnQpOwogICAgfQoKICAgIGZwcmludGYoZnAsICZxdW90OyVkXG4mcXVvdDssIGV4cGVuc2VDb3VudCk7CiAgICBmb3IgKGludCBpID0gMDsgaSAmbHQ7IGV4cGVuc2VDb3VudDsgaSsrKSB7CiAgICAgICAgZnByaW50ZihmcCwgJnF1b3Q7JXMgJWZcbiZxdW90OywKICAgICAgICAgICAgICAgIGV4cGVuc2VzW2ldLnR5cGUsCiAgICAgICAgICAgICAgICBleHBlbnNlc1tpXS5hbW91bnQpOwogICAgfQoKICAgIGZjbG9zZShmcCk7Cn0KCi8vIOC5guC4q+C4peC4lOC5hOC4n+C4peC5jAp2b2lkIGxvYWRGaWxlKCkgewogICAgRklMRSAqZnAgPSBmb3BlbigmcXVvdDtidWRnZXQudHh0JnF1b3Q7LCAmcXVvdDtyJnF1b3Q7KTsKICAgIGlmIChmcCA9PSBOVUxMKSByZXR1cm47CgogICAgZnNjYW5mKGZwLCAmcXVvdDslZCZxdW90OywgJmFtcDtpbmNvbWVDb3VudCk7CiAgICBmb3IgKGludCBpID0gMDsgaSAmbHQ7IGluY29tZUNvdW50OyBpKyspIHsKICAgICAgICBmc2NhbmYoZnAsICZxdW90OyVzICVmJnF1b3Q7LAogICAgICAgICAgICAgICBpbmNvbWVzW2ldLnR5cGUsCiAgICAgICAgICAgICAgICZhbXA7aW5jb21lc1tpXS5hbW91bnQpOwogICAgfQoKICAgIGZzY2FuZihmcCwgJnF1b3Q7JWQmcXVvdDssICZhbXA7ZXhwZW5zZUNvdW50KTsKICAgIGZvciAoaW50IGkgPSAwOyBpICZsdDsgZXhwZW5zZUNvdW50OyBpKyspIHsKICAgICAgICBmc2NhbmYoZnAsICZxdW90OyVzICVmJnF1b3Q7LAogICAgICAgICAgICAgICBleHBlbnNlc1tpXS50eXBlLAogICAgICAgICAgICAgICAmYW1wO2V4cGVuc2VzW2ldLmFtb3VudCk7CiAgICB9CgogICAgZmNsb3NlKGZwKTsKfQoKLy8g4LmA4Lih4LiZ4Li5CnZvaWQgbWVudSgpIHsKICAgIHByaW50ZigmcXVvdDtcbj09PT09IEJVREdFVCBTWVNURU0gPT09PT1cbiZxdW90Oyk7CiAgICBwcmludGYoJnF1b3Q7MS4gQWRkIEluY29tZVxuJnF1b3Q7KTsKICAgIHByaW50ZigmcXVvdDsyLiBBZGQgRXhwZW5zZVxuJnF1b3Q7KTsKICAgIHByaW50ZigmcXVvdDszLiBTaG93IFJlcG9ydFxuJnF1b3Q7KTsKICAgIHByaW50ZigmcXVvdDs0LiBTYXZlXG4mcXVvdDspOwogICAgcHJpbnRmKCZxdW90OzUuIEV4aXRcbiZxdW90Oyk7Cn0KCi8vIG1haW4KaW50IG1haW4oKSB7CiAgICBpbnQgY2hvaWNlOwoKICAgIGxvYWRGaWxlKCk7CgogICAgd2hpbGUgKDEpIHsKICAgICAgICBtZW51KCk7CiAgICAgICAgcHJpbnRmKCZxdW90O0Nob29zZTogJnF1b3Q7KTsKICAgICAgICBzY2FuZigmcXVvdDslZCZxdW90OywgJmFtcDtjaG9pY2UpOwoKICAgICAgICBzd2l0Y2ggKGNob2ljZSkgewogICAgICAgICAgICBjYXNlIDE6IGFkZEluY29tZSgpOyBicmVhazsKICAgICAgICAgICAgY2FzZSAyOiBhZGRFeHBlbnNlKCk7IGJyZWFrOwogICAgICAgICAgICBjYXNlIDM6IHNob3dCdWRnZXQoKTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgNDogc2F2ZUZpbGUoKTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgNToKICAgICAgICAgICAgICAgIHNhdmVGaWxlKCk7CiAgICAgICAgICAgICAgICBwcmludGYoJnF1b3Q7RXhpdC4uLlxuJnF1b3Q7KTsKICAgICAgICAgICAgICAgIGV4aXQoMCk7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBwcmludGYoJnF1b3Q7SW52YWxpZFxuJnF1b3Q7KTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDA7Cn0=
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
struct Budget {
char type[20];
float amount;
};
struct Budget incomes[MAX];
struct Budget expenses[MAX];
int incomeCount = 0;
int expenseCount = 0;
// เพิ่มรายรับ
void addIncome() {
printf("Enter income type: ");
scanf("%s", incomes[incomeCount].type);
printf("Enter amount: ");
scanf("%f", &incomes[incomeCount].amount);
incomeCount++;
}
// เพิ่มรายจ่าย
void addExpense() {
printf("Enter expense type: ");
scanf("%s", expenses[expenseCount].type);
printf("Enter amount: ");
scanf("%f", &expenses[expenseCount].amount);
expenseCount++;
}
// คำนวณรายรับรวม
float totalIncome() {
float total = 0;
for (int i = 0; i < incomeCount; i++) {
total += incomes[i].amount;
}
return total;
}
// คำนวณรายจ่ายรวม
float totalExpense() {
float total = 0;
for (int i = 0; i < expenseCount; i++) {
total += expenses[i].amount;
}
return total;
}
// แสดงงบประมาณ
void showBudget() {
printf("\n===== BUDGET REPORT =====\n");
printf("Total Income: %.2f\n", totalIncome());
printf("Total Expense: %.2f\n", totalExpense());
printf("Balance: %.2f\n", totalIncome() - totalExpense());
printf("\n--- Expenses Detail ---\n");
for (int i = 0; i < expenseCount; i++) {
printf("%s : %.2f\n",
expenses[i].type,
expenses[i].amount);
}
}
// บันทึกไฟล์
void saveFile() {
FILE *fp = fopen("budget.txt", "w");
fprintf(fp, "%d\n", incomeCount);
for (int i = 0; i < incomeCount; i++) {
fprintf(fp, "%s %f\n",
incomes[i].type,
incomes[i].amount);
}
fprintf(fp, "%d\n", expenseCount);
for (int i = 0; i < expenseCount; i++) {
fprintf(fp, "%s %f\n",
expenses[i].type,
expenses[i].amount);
}
fclose(fp);
}
// โหลดไฟล์
void loadFile() {
FILE *fp = fopen("budget.txt", "r");
if (fp == NULL) return;
fscanf(fp, "%d", &incomeCount);
for (int i = 0; i < incomeCount; i++) {
fscanf(fp, "%s %f",
incomes[i].type,
&incomes[i].amount);
}
fscanf(fp, "%d", &expenseCount);
for (int i = 0; i < expenseCount; i++) {
fscanf(fp, "%s %f",
expenses[i].type,
&expenses[i].amount);
}
fclose(fp);
}
// เมนู
void menu() {
printf("\n===== BUDGET SYSTEM =====\n");
printf("1. Add Income\n");
printf("2. Add Expense\n");
printf("3. Show Report\n");
printf("4. Save\n");
printf("5. Exit\n");
}
// main
int main() {
int choice;
loadFile();
while (1) {
menu();
printf("Choose: ");
scanf("%d", &choice);
switch (choice) {
case 1: addIncome(); break;
case 2: addExpense(); break;
case 3: showBudget(); break;
case 4: saveFile(); break;
case 5:
saveFile();
printf("Exit...\n");
exit(0);
default:
printf("Invalid\n");
}
}
return 0;
}