diff --git a/nctime_money.c b/nctime_money.c new file mode 100644 index 0000000..a1128f0 --- /dev/null +++ b/nctime_money.c @@ -0,0 +1,125 @@ +#include +#include +#include +#include // For the sleep function + +int main() { + + while (1) { + + + // Describe the program + printf("This program will calculate who much you earn per second\nat the time you execute, as well as a date you specify.\n"); + + // Enter your annual salary + double annualSalary; + printf("Enter your annual salary: $"); + scanf("%lf", &annualSalary); + + // Calculate your earnings per second + double earningsPerSecond = annualSalary / (365.25 * 24 * 60 * 60); + + // Initialize the total earned + double earned = 0.0; + double earnedSincetarget = 0.0; + + // Get the current time when the program starts + time_t startTime; + time(&startTime); + + // Get the retire date from the user + struct tm retireDate; + printf("Enter the date you want to retire (YYYY-MM-DD): "); + scanf("%d-%d-%d", &retireDate.tm_year, &retireDate.tm_mon, &retireDate.tm_mday); + + // Get the retire date from the user + struct tm targetDate; + printf("Enter a date you want to count from (YYYY-MM-DD): "); + scanf("%d-%d-%d", &targetDate.tm_year, &targetDate.tm_mon, &targetDate.tm_mday); + + // Adjust month and year values + retireDate.tm_year -= 1900; // Years since 1900 + retireDate.tm_mon -= 1; // Months are 0-based (0 = January) + targetDate.tm_year -= 1900; // Years since 1900 + targetDate.tm_mon -= 1; // Months are 0-based (0 = January) + + // Convert the dates to a time_t value + time_t retireTime = mktime(&retireDate); + time_t targetTime = mktime(&targetDate); + + if (retireTime == -1) { // Prompt for a valid date + printf("Invalid date entered.\n"); + refresh(); + continue; + } + if (targetTime == -1) { + printf("Invalid date entered.\n"); + refresh(); + continue; + } + + // Initialize ncurses + initscr(); + cbreak(); // Disable line buffering + noecho(); // Don't display user input + curs_set(0); // Hide the cursor + + while (1) { + // Get the current time + time_t currentTime; + time(¤tTime); + + // Calculate the time difference in seconds + time_t timeDifference = retireTime - currentTime; + time_t timeDifferencetarget = currentTime - targetTime; + + // Calculate the time elapsed since the program started + double timeElapsed = difftime(currentTime, startTime); + double timeElapsedtarget = difftime(currentTime, targetTime); + + // Calculate the earnings based on the time elapsed + double earnings = earningsPerSecond * timeElapsed; + double earningsTarget = earningsPerSecond * timeElapsedtarget; + + // Update the total earned + earned = earnings; + earnedSincetarget = earningsTarget; + + // Clear the screen + clear(); + + // Print the current earnings + printw("Earnings since program start: $%.2lf\n", earned); + printw("Earnings since target date: $%.2lf\n", earnedSincetarget); + + if (timeDifference < 0) { + printw("The retire date has already passed.\n"); + refresh(); + break; // Exit the countdown loop + } else { + // Calculate seconds, minutes, hours, days, months, and years + int seconds = timeDifference % 60; + int minutes = (timeDifference / 60) % 60; + int hours = (timeDifference / (60 * 60)) % 24; + int days = timeDifference / (24 * 60 * 60); + int months = (retireDate.tm_year - (currentTime / (365.25 * 24 * 60 * 60))) * 12 + retireDate.tm_mon - (currentTime / (30.44 * 24 * 60 * 60)); + int years = months / 12; + + // Print the countdown + printw("Time remaining: %d years, %d months, %d days\n%d hours, %d minutes, %d seconds", + years, months % 12, days % 7, hours, minutes, seconds); + } + + // Refresh the screen to display changes + refresh(); + + // Sleep for 1 second before the next update + sleep(1); + } + } + + // End ncurses + endwin(); + + return 0; +}