#include #include #include #include #include void print_current_activity(); void start_new_activity(); void stop_current_activity(); void print_activities(); void save_to_file(); void load_file(); typedef struct activities { time_t start_time; time_t end_time; char description[100]; } activity; activity current_activity; activity activities_list[100]; int main() { strcpy(current_activity.description,"N/A"); current_activity.start_time = time(NULL); load_file(); char command; while(command != 'q') { system("clear"); print_current_activity(); print_activities(); printf("\n\n[s]tart tracking new activity | sto[p] current activity | sa[v]e to file | [q]uit: "); fgets(&command, 256, stdin); switch(command) { case 's': start_new_activity(); break; case 'p': stop_current_activity(); break; case 'v': save_to_file(); break; case 'q': break; default : break; } } return 0; } void print_current_activity() { time_t time_now = time(NULL); char buf[80]; strftime(buf, sizeof(buf), "%H:%M:%S", localtime(¤t_activity.start_time)); printf("==================================================" "==================================================\n" "Current activity: %s\nStart time: %s\nDuration: %ld mins.\n" "==================================================" "==================================================\n", current_activity.description, buf, (time_now - current_activity.start_time)/60); } void print_activities() { char buf1[80], buf2[80]; printf("\nPast activities:\n" "--------------------------------------------------" "--------------------------------------------------"); for(int i = 0; activities_list[i].start_time; i++) { strftime(buf1, sizeof(buf1), "%H:%M:%S", localtime(&activities_list[i].start_time)); strftime(buf2, sizeof(buf2), "%H:%M:%S", localtime(&activities_list[i].end_time)); printf("\nStart time: %s\nEnd time: %s\nActivity: %s\n" "--------------------------------------------------" "--------------------------------------------------", buf1, buf2, activities_list[i].description); } } void start_new_activity() { current_activity.start_time = time(NULL); printf("\nWhat are you doing: "); fgets(current_activity.description, 256, stdin); current_activity.description[strcspn(current_activity.description, "\n")] = 0; } void stop_current_activity() { current_activity.end_time = time(NULL); for(int i = 0; i < 100; i++) { if(!activities_list[i].start_time) { activities_list[i] = current_activity; strcpy(current_activity.description, "N/A"); break; } } } void save_to_file() { FILE *fp; time_t rawtime; struct tm *info; char buffer[80]; time(&rawtime); strftime(buffer, 80, "%Y-%m-%d", localtime(&rawtime)); char filename[80]; snprintf(filename, sizeof(filename), "%s/Timesheets/timesheet-%s.txt", getenv("HOME"), buffer); fp = fopen(filename, "w"); for(int i = 0; activities_list[i].start_time; i++) { fprintf(fp, "%ld;%ld;%s\n", activities_list[i].start_time, activities_list[i].end_time, activities_list[i].description); } fclose(fp); } void load_file() { FILE *fp; time_t rawtime; struct tm *info; char buffer[80]; time(&rawtime); strftime(buffer, 80, "%Y-%m-%d", localtime(&rawtime)); char filename[80]; snprintf(filename, sizeof(filename), "%s/Timesheets/timesheet-%s.txt", getenv("HOME"), buffer); fp = fopen(filename, "r"); int i = 0; while (EOF != fscanf(fp, "%ld;%ld;%s", &activities_list[i].start_time, &activities_list[i].end_time, activities_list[i].description)) i++; }