// package_delivery_system.c // Pantea Aria // (TODO) #include #include #include #include "package_delivery_system.h" // Function prototypes // ADD YOUR OWN FUNCTION PROTOTYPES HERE // Function definitions // Creates a new empty delivery centre // (TODO) struct delivery_centre *create_centre(char name[]) { // TODO: implement this function printf("create_centre not yet implemented.\n"); exit(1); } // Add a new package to the centre at the head // Similar to previous lecture code insert_head // (TODO) void insert_package_at_head(struct delivery_centre *centre, char sender[], char receiver[], double weight, enum priority_type priority, enum status_type status) { // TODO: implement this function printf("insert_package_at_head not yet implemented.\n"); exit(1); } // Given a string, look for package where the receiver is this string // (TODO) struct package *search_package(struct delivery_centre *centre, char receiver[]) { // TODO: implement this function printf("search_package not yet implemented.\n"); exit(1); } // Removes all packages from a centre // clears and deletes associated memory of centre and packages in it void clear_centre(struct delivery_centre *centre) { // TODO: implement this function printf("clear_centre not yet implemented.\n"); exit(1); } // Remove package(s) with certain priority void delete_package_of_priority(struct delivery_centre *centre, enum priority_type priority) { // TODO: implement this function printf("delete_package_of_priority not yet implemented.\n"); exit(1); } // Append packages from centre_2 after centre_1 and returns them in one centre // Assumption made here assumes no same receiver package in centre_1 and centre_2 struct delivery_centre *merge_centres(char merged_centre_name[], struct delivery_centre *centre_1, struct delivery_centre *centre_2) { // TODO: implement this function printf("merge_centres not yet implemented.\n"); exit(1); } // Split packages in a given centre into 3 centres based on package status // keeping original ordering // assumption: pending, in_transit and delivered are centres already malloc-ed // and initialised void split_centre(struct delivery_centre *given_centre, struct delivery_centre *pending, struct delivery_centre *in_transit, struct delivery_centre *delivered) { // TODO: implement this function printf("split_centre not yet implemented.\n"); exit(1); } // returns number of packages in a given centre // (EXTENSION TODO: Improve this) int count_packages(struct delivery_centre *centre) { int counter = 0; struct package *current = centre->packages; while (current != NULL) { counter++; current = current->next; } return counter; } // Your functions here (include function comments): //////////////////////////////////////////////////////////////////////////////// // Provided Code // //////////////////////////////////////////////////////////////////////////////// // Print/display all packages in centre // Similar to previous lecture code print_list void print_packages(struct delivery_centre *centre) { printf("Centre Name: %s\n", centre->name); struct package *current = centre->packages; if (current == NULL) { printf("There are no packages in this centre.\n"); } while (current != NULL) { printf("---\n"); print_single_package(current); current = current->next; } } // Prints out details of a single package void print_single_package(struct package *package) { if (package == NULL) { printf("Package is NULL.\n"); return; } printf("Sender: %s\n", package->sender); printf("Receiver: %s\n", package->receiver); printf("Weight: %lfkg\n", package->weight); printf("Priority: "); if (package->priority == STANDARD) { printf("STANDARD\n"); } else if (package->priority == EXPRESS) { printf("EXPRESS\n"); } else if (package->priority == URGENT) { printf("URGENT\n"); } else { printf("UNKNOWN\n"); } printf("Status: "); if (package->status == PENDING) { printf("PENDING\n"); } else if (package->status == IN_TRANSIT) { printf("IN_TRANSIT\n"); } else if (package->status == DELIVERED) { printf("DELIVERED\n"); } else { printf("UNKNOWN\n"); } }