You are on page 1of 5

#include <stdio.

h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>

#define MAX_LENGTH_COMMAND 300

#define MAX_NO_TASKS 100

#define MAX_LENGTH_TITLE 100


#define MAX_LENGTH_DESCRIPTION 200
#define MAX_LENGTH_TIME 33

#define WEEK_CELL_FIRST_COL_WIDTH 10
#define WEEK_CELL_OTHER_COL_WIDTH 20

enum Status { IN_PROGRESS, DONE, ARCHIVED };


const char* status_name[] = { "In Progress", "Done", "Archived" };
enum CommandType { ADD, EDIT, SHOW, DELETE, QUIT, INVALID };
const char* command_name[] = { "ADD", "EDIT", "SHOW", "DELETE", "QUIT", "INVALID" };

struct Task {
int num;
char title[MAX_LENGTH_TITLE + 1];
char description[MAX_LENGTH_DESCRIPTION + 1];
char time[MAX_LENGTH_TIME + 1];
enum Status status;
};

void printTask(struct Task* task) {


printf("--------------------------------------------\n");
printf("Num: #%d. Title: %s\n", task->num, task->title);
printf("Description: %s\n", task->description);
printf("Status: %s\n", status_name[task->status]);
printf("--------------------------------------------\n");
}

void printUnsupportedTime(struct Task* task) {


printf("----- Show week view -----\n");
printf("Error: Unsupported time with non-zero minutes: %s\n", task->time);
printf("In Task:\n");
printTask(task);
}

struct ngay {
char DDD[4];
int dd;
int mo;
int yyyy;
};
typedef struct ngay day;
int printWeekTime(struct Task* array_tasks, int no_tasks, char* date) {

day x;
sscanf(date, "%3s/%02d/%02d/%04d", x.DDD, &x.dd, &x.mo, &x.yyyy);

for (int i = 0; i < 145; i++) printf("-");


printf("\n");
if (strstr(x.DDD, "MON") != NULL) {
printf("| %d || MON || TUE || WED || THU || FRI || SAT || SUN
|\n", x.yyyy);
printf("| || %02d/%02d || %02d/%02d || %02d/%02d || %02d/%02d || %02d/%02d
|| %02d/%02d || %02d/%02d |\n",
x.dd, x.mo, x.dd + 1, x.mo, x.dd + 2, x.mo, x.dd + 3, x.mo, x.dd + 4, x.mo, x.dd + 5, x.mo, x.dd + 6, x.mo);
}
else if (strstr(x.DDD, "TUE") != NULL) {
printf("| %d || MON || TUE || WED || THU || FRI || SAT || SUN
|\n", x.yyyy);
printf("| || %02d/%02d || %02d/%02d || %02d/%02d || %02d/%02d || %02d/%02d
|| %02d/%02d || %02d/%02d |\n",
x.dd - 1, x.mo, x.dd, x.mo, x.dd + 1, x.mo, x.dd + 2, x.mo, x.dd + 3, x.mo, x.dd + 4, x.mo, x.dd + 5, x.mo);
}
else if (strstr(x.DDD, "WED") != NULL) {
printf("| %d || MON || TUE || WED || THU || FRI || SAT || SUN
|\n", x.yyyy);
printf("| || %02d/%02d || %02d/%02d || %02d/%02d || %02d/%02d || %02d/%02d
|| %02d/%02d || %02d/%02d |\n",
x.dd - 2, x.mo, x.dd - 1, x.mo, x.dd, x.mo, x.dd + 1, x.mo, x.dd + 2, x.mo, x.dd + 3, x.mo, x.dd + 4, x.mo);
}
else if (strstr(x.DDD, "THU") != NULL) {
printf("| %d || MON || TUE || WED || THU || FRI || SAT || SUN
|\n", x.yyyy);
printf("| || %02d/%02d || %02d/%02d || %02d/%02d || %02d/%02d || %02d/%02d
|| %02d/%02d || %02d/%02d |\n",
x.dd - 3, x.mo, x.dd - 2, x.mo, x.dd - 1, x.mo, x.dd, x.mo, x.dd + 1, x.mo, x.dd + 2, x.mo, x.dd + 3, x.mo);
}
else if (strstr(x.DDD, "FRI") != NULL) {
printf("| %d || MON || TUE || WED || THU || FRI || SAT || SUN
|\n", x.yyyy);
printf("| || %02d/%02d || %02d/%02d || %02d/%02d || %02d/%02d || %02d/%02d
|| %02d/%02d || %02d/%02d |\n",
x.dd - 4, x.mo, x.dd - 3, x.mo, x.dd - 2, x.mo, x.dd - 1, x.mo, x.dd, x.mo, x.dd + 1, x.mo, x.dd + 2, x.mo);
}
else if (strstr(x.DDD, "SAT") != NULL) {
printf("| %d || MON || TUE || WED || THU || FRI || SAT || SUN
|\n", x.yyyy);
printf("| || %02d/%02d || %02d/%02d || %02d/%02d || %02d/%02d || %02d/%02d
|| %02d/%02d || %02d/%02d |\n",
x.dd - 5, x.mo, x.dd - 4, x.mo, x.dd - 3, x.mo, x.dd - 2, x.mo, x.dd - 1, x.mo, x.dd, x.mo, x.dd + 1, x.mo);
}
else if (strstr(x.DDD, "SUN") != NULL) {
printf("| %d || MON || TUE || WED || THU || FRI || SAT || SUN
|\n", x.yyyy);
printf("| || %02d/%02d || %02d/%02d || %02d/%02d || %02d/%02d || %02d/%02d
|| %02d/%02d || %02d/%02d |\n",
x.dd - 6, x.mo, x.dd - 5, x.mo, x.dd - 4, x.mo, x.dd - 3, x.mo, x.dd - 2, x.mo, x.dd - 1, x.mo, x.dd, x.mo);
}

for (int i = 0; i < 145; i++) printf("-");


printf("\n");

for (int i = 0; i <= no_tasks; i++) {


if (strlen((array_tasks + i)->title) >= 20) {
(array_tasks + i)->title[14] = '.';
(array_tasks + i)->title[15] = '.';
(array_tasks + i)->title[16] = '.';
(array_tasks + i)->title[17] = '\0';
}
}

int time1, time2;


int dayx;
int g = 0;
int e = 0;
int mon, tue, wed, thu, fri, sat, sun;
if (strstr(x.DDD, "MON") != NULL) {
mon = x.dd + 0;
tue = x.dd + 1;
wed = x.dd + 2;
thu = x.dd + 3;
fri = x.dd + 4;
sat = x.dd + 5;
sun = x.dd + 6;
}
if (strstr(x.DDD, "TUE") != NULL) {
mon = x.dd - 1;
tue = x.dd + 0;
wed = x.dd + 1;
thu = x.dd + 2;
fri = x.dd + 3;
sat = x.dd + 4;
sun = x.dd + 5;
}
if (strstr(x.DDD, "WED") != NULL) {
mon = x.dd - 2;
tue = x.dd - 1;
wed = x.dd + 0;
thu = x.dd + 1;
fri = x.dd + 2;
sat = x.dd + 3;
sun = x.dd + 4;
}
if (strstr(x.DDD, "THU") != NULL) {
mon = x.dd - 3;
tue = x.dd - 2;
wed = x.dd - 1;
thu = x.dd + 0;
fri = x.dd + 1;
sat = x.dd + 2;
sun = x.dd + 3;
}
if (strstr(x.DDD, "FRI") != NULL) {
mon = x.dd - 4;
tue = x.dd - 3;
wed = x.dd - 2;
thu = x.dd - 1;
fri = x.dd + 0;
sat = x.dd + 1;
sun = x.dd + 2;
}
if (strstr(x.DDD, "SAT") != NULL) {
mon = x.dd - 5;
tue = x.dd - 4;
wed = x.dd - 3;
thu = x.dd - 2;
fri = x.dd - 1;
sat = x.dd + 0;
sun = x.dd + 1;
}
if (strstr(x.DDD, "SAT") != NULL) {
mon = x.dd - 6;
tue = x.dd - 5;
wed = x.dd - 4;
thu = x.dd - 3;
fri = x.dd - 2;
sat = x.dd - 1;
sun = x.dd + 0;
}

for (int i = 0; i < 24; ++i) {


printf("---
%02d:00----------------------------------------------------------------------------------------------------------------------------------------
-\n", g);

printf("| |");
while (e <= no_tasks) {
sscanf((array_tasks + e)->time, "%02d:00|%d/%*d/%*d-%02d:00|%*d/%*d/%*d", &time1, &dayx, &time2);

if (time1 == i) {
if (dayx = mon) {

printf("| #%d|%02d:00-%02d:00 |", (array_tasks + e)->num, time1, time2);

for (int i = 1; i <= 6; ++i) {


printf("| |");
}
printf("\n");

printf("| |");
printf("|%s|", (array_tasks + e)->title);

for (int i = 1; i <= 6; ++i) {


printf("| |");
}
printf("\n");

}
}

if (time1 != i) {

printf("| |");
for (int i = 1; i <= 7; ++i) {
printf("| |");
}
printf("\n");

printf("| |");
for (int i = 1; i <= 7; ++i) {
printf("| |");
}
printf("\n");

for (int i = 0; i < 145; i++) printf("-");


printf("\n");

break;
}

e++;
}
g++;
}
return 0;
}
int main() {
struct Task array_tasks[5] = {
{1, "Course Intro to Programming", "Room 701-H6 - orange", "00:00|16/10/2023-09:00|16/10/2023",
IN_PROGRESS},
{2, "Meeting Project Apple", "Room 701-H6 - apple", "01:00|16/16/2023-09:00|17/10/2023", IN_PROGRESS},
{3, "Meeting Project Banana", "Room 701-H6 - orange", "02:00|16/10/2023-08:00|19/10/2023", IN_PROGRESS},
{4, "Do an Tong hop - TTNT", "Room 701-H6 - orange", "03:00|16/10/2023-10:00|21/10/2023",
IN_PROGRESS},
{5, "Course Intro to Programming - apple", "Room 701-H6 - banana", "04:00|16/10/2023-12:00|01/10/2023",
DONE},
};
int no_tasks = 4;
char date[] = "MON/16/10/2023";
int code = printWeekTime(array_tasks, no_tasks, date);
printWeekTime(array_tasks, no_tasks, date);
if (code != -1) {
printf("Unsupported task at index: %d\n", code);
}
return 0;
}

You might also like