Commiting first version
parent
14668f5d54
commit
cab1cd861d
|
@ -0,0 +1,125 @@
|
|||
#include <stdio.h>
|
||||
#include <ncurses.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h> // 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;
|
||||
}
|
Loading…
Reference in New Issue