#include "syntax_essentials.h" #include /** * * TASK 1: validate_first_name * Check if the first name is valid. * - Cannot be NULL or empty * - Only letters (a-z, A-Z) * - Minimum length: 2 * * @param first_name * @return */ int validate_first_name(const char* first_name) { if (!first_name) return 0; int length = 0; for (const char* p = first_name; *p; p++) { if ((*p >= 'A' && *p <= 'Z') || (*p >= 'a' && *p <= 'z')) length++; else return 0; } return length >= 2; } /** * * TASK 2: validate_last_name * Check if the last name is valid. * - Cannot be NULL or empty * - Only letters (a-z, A-Z) * - Minimum length: 2 * * @param last_name * @return */ int validate_last_name(const char* last_name) { if (!last_name) return 0; int length = 0; for (const char* p = last_name; *p; p++) { if ((*p >= 'A' && *p <= 'Z') || (*p >= 'a' && *p <= 'z')) length++; else return 0; } return length >= 2; } /** * * TASK 3: validate_full_name * Check if a full name "First Last" is valid. * Use TASK 1 and TASK 2 internally. * @param full_name * @return */ int validate_full_name(const char* full_name) { if (!full_name) return 0; char first_name[64], last_name[64]; if (sscanf(full_name, "%63s %63s", first_name, last_name) != 2) return 0; return validate_first_name(first_name) && validate_last_name(last_name); } /** * * @param index * @return */ int validate_index(const char* index) { if (!index) return 0; int length = 0; for (const char* p = index; *p; p++) { if (*p >= '0' && *p <= '9') length++; else return 0; } return length == 6; } /** * * @param full_name * @param index * @return */ int register_student(const char* full_name, const char* index) { if (!validate_full_name(full_name)) return 1; if (!validate_index(index)) return 2; return 0; } /** * * @param name * @return */ int name_length(const char* name) { if (!name) return 0; int length = 0; while (*name++) length++; return length; } /** * * @param array * @param max_size * @param name * @param index * @return */ int add_student(Student* array, const int max_size, const char* name, const char* index) { if (!name || !index || !array) return 2; int len = 0; while (len < max_size && array[len].full_name[0] != '\0') len++; if (len >= max_size) return 1; snprintf( array[len].full_name, sizeof(array[len].full_name), "%s", name); snprintf(array[len].index, sizeof(array[len].index), "%s", index); return 0; } /** * * @param code * @return */ const char* get_error_message(const int code) { switch (code) { case 0: return "Success"; case 1: return "Invalid name"; case 2: return "Invalid index"; default: return "Unknown error"; } }