-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.c
More file actions
167 lines (121 loc) · 7.36 KB
/
main.c
File metadata and controls
167 lines (121 loc) · 7.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
/********* main.c ********
Student Name = Marwan Alakhras
Student Number = 101296201
*/
//Complete the includes
#include <stdlib.h>
#include <stdio.h>
#include "a1_functions.h"
#include "a1_functions.c"
#define max_milestones 5 //maximum allowed number of milestones
#define min_milestones 1 //minimum allowed number of milestones
#define max_activites 15 //maximum possible number of activities (5 * 3)
int main()
{
/** 1- Display a welcome message **/
printf("\n\t\t~Welcome to Project Performance Calculator~\n");
/**/
/** 2- Get the project's name and number of milestones **/
char project_name[100] = "";
int number_of_milestones = 0;
printf("Enter project's name: ");
scanf(" %s", &project_name);
printf("Enter project's number of milestones(1-5): ");
scanf(" %i", &number_of_milestones);
while (number_of_milestones < min_milestones || number_of_milestones > max_milestones){
printf("Invalid number of milestones. Pick 1 to 5 (inclusive)\n");
printf("Enter project's number of milestones(1-5): ");
scanf(" %i", &number_of_milestones);
}
/** 3- Initialize all milestones and activities.
* You need an array of milestones.
* The capacity of the array must be the max number of milestones the program
* can handle as per the instructions **/
milestone_t array_milestones[max_milestones]; // array of structs milestone_t
int activities_in_milestones[max_milestones]; //array of number of activities in its corresponding milestone
const int * p_activities_in_milestones = activities_in_milestones;//Pointer to the first element of the array
const int * wp_activities_in_milestones = p_activities_in_milestones;//walking pointer to move through the array
unsigned short int array_activity_IDs[max_activites] = {0}; //array that stores all activity IDs across all milestones
int total_number_of_activities = 0; //total number of activites across all milestones
for (int i = 0; i < number_of_milestones; i++){
printf("Initializing milestone...%i...\n", i+1);
int user_input_milestone_ID = 0;
printf("Enter ID for milestone %i: ", i+1);
scanf(" %i", &user_input_milestone_ID);
while (is_milestone_ID_unique(array_milestones, user_input_milestone_ID, i) == false || user_input_milestone_ID <= 0 || user_input_milestone_ID > 65535){
printf("Invalid ID (must be unique and positive). Enter ID for milestone %i: ", i+1);
scanf(" %i", &user_input_milestone_ID);
}
array_milestones[i].id = (unsigned short int) user_input_milestone_ID;
printf("Enter number of activities for milestone %i: ", i+1);
scanf(" %i", wp_activities_in_milestones);
while(*wp_activities_in_milestones > 3 || *wp_activities_in_milestones < 1){
printf("Invalid number of activities. Must be between (1,3). Enter number of activities for milestone %i: ", i+1);
scanf(" %i", wp_activities_in_milestones);
}
for (int j = 0; j < *wp_activities_in_milestones ; j++){
int user_input_activity_ID = 0;
printf("Enter ID for activity %i: ", j+1);
scanf(" %i", &user_input_activity_ID);
while(is_activity_ID_unique(array_activity_IDs, user_input_activity_ID, total_number_of_activities) == false || user_input_activity_ID <= 0 || user_input_activity_ID > 65535){
printf("Invalid ID (must be unique and positive). Enter ID for activity %i: ", j+1);
scanf(" %i", &user_input_activity_ID);
}
array_milestones[i].activity_list[j].id = (unsigned short int) user_input_activity_ID;
array_activity_IDs[total_number_of_activities] = array_milestones[i].activity_list[j].id;
total_number_of_activities++;
init_activity(&array_milestones[i].activity_list[j]); //Initializes activity
}
init_milestone(&array_milestones[i], *wp_activities_in_milestones); //initilizes milestone with its corresponding number of activities.
wp_activities_in_milestones++; //Increments walking pointer for the next milestone's number of activities
}
wp_activities_in_milestones = p_activities_in_milestones; //Resets the pointer to the start of the array
/** 4- Initialize the project **/
project_t project = init_project(project_name, array_milestones, number_of_milestones, p_activities_in_milestones);
/** 5- Print the main menu **/
//print_main_menu function is called in step 6 inside the while loop.
/** 6- Get user choice and handle it as per the instructions**/
while (true){
wp_activities_in_milestones = p_activities_in_milestones; //Resets the pointer to the start of the array.
print_main_menu();
int user_input = get_input_usi();
if (user_input == 1){
unsigned short int activity_to_update = 0;
for (int i = 0; i < number_of_milestones; i++, wp_activities_in_milestones++){
for (int j = 0; j < *wp_activities_in_milestones; j++){
printf("Activity name: %s\t Activity ID: %hu\t", array_milestones[i].activity_list[j].name , array_milestones[i].activity_list[j].id);
if (array_milestones[i].activity_list[j].completed == true){
printf("\tCompleted\n");
}
else if(array_milestones[i].activity_list[j].completed == false) {
printf("\tIncomplete\n");
}
}
}
wp_activities_in_milestones = p_activities_in_milestones;//Resets the pointer to the start of the array
printf("\nWhich activity do you want to update? (enter ID): ");
scanf(" %hu", &activity_to_update);
while(is_activity_completed(array_milestones,number_of_milestones,p_activities_in_milestones, activity_to_update) == true || is_activity_ID_unique(array_activity_IDs, activity_to_update, total_number_of_activities) == true){
printf("Invalid ID or activity already completed. Which activity do you want to update? (enter ID): ");
scanf(" %hu", &activity_to_update);
}
for (int i = 0; i< number_of_milestones; i++, wp_activities_in_milestones++){
for (int j = 0; j < *wp_activities_in_milestones; j++){
if (activity_to_update == array_milestones[i].activity_list[j].id){
update_activity(&(array_milestones[i].activity_list[j]));//Updates the activity according to the inputted ID
}
}
update_milestone(&(array_milestones[i]), *wp_activities_in_milestones);//Updates the milestone after the activity accordingly
}
update_project(array_milestones, number_of_milestones, p_activities_in_milestones, &project);//Updates the project after the milestone accrodingly
}
else if (user_input == 2){
print_project_stats(project, array_milestones, number_of_milestones, p_activities_in_milestones);
}
else if (user_input == 3){
printf("Thank you for using Project Performance Calculator\n\n");
break;
}
}
return EXIT_SUCCESS;
}