Find Student Function

a function that searchs a student in database and returns his file name

findStudent() is a function that searches for a student's file in the database based on their name. And we're going to explain it

1. Function Definition:

char* findStudent(char* nom, char* prenom)
  • This function takes two arguments: nom and prenom, which represent the last name and first name of the student, respectively.

  • The function returns a char* pointer, which points to the file path of the student's record if found, or NULL if not found.

Code snippet:

char* findStudent(char* nom, char* prenom) {
    char option1[100];
    char option2[100];
    FILE* tmp1;
    FILE* tmp2;

    sprintf(option1, "database/%s_%s.txt", nom, prenom);
    sprintf(option2, "database/%s_%s.txt", prenom, nom);

    tmp1 = fopen(option1, "r");
    tmp2 = fopen(option2, "r");

    if (tmp1 != NULL) {
        fclose(tmp1);
        if (tmp2 != NULL) {
            fclose(tmp2);
        }
        char* result = malloc(strlen(option1) + 1); // Allocate memory for the result
        strcpy(result, option1); // Copy option1 to result
        return result;
    } else if (tmp2 != NULL) {
        fclose(tmp2);
        char* result = malloc(strlen(option2) + 1); // Allocate memory for the result
        strcpy(result, option2); // Copy option2 to result
        return result;
    }

    return NULL;
}

2. Variable Declarations:

char option1[100];
char option2[100];
FILE* tmp1;
FILE* tmp2;

3. Function Tasks:

3.1 Generating File Paths:

sprintf(option1, "database/%s_%s.txt", nom, prenom);
sprintf(option2, "database/%s_%s.txt", prenom, nom);
  • These lines use sprintf to generate the file paths by concatenating the provided names with the "database/" directory path.

3.2 Opening Files:

tmp1 = fopen(option1, "r");
tmp2 = fopen(option2, "r");
  • These lines attempt to open the files using the generated file paths for reading ("r" mode).

  • tmp1 is used to check if the file with the nom_prenom.txt naming scheme exists.

  • tmp2 is used to check if the file with the prenom_nom.txt naming scheme exists.

3.3 File Existence Checking:

if (tmp1 != NULL) {
    fclose(tmp1);
    if (tmp2 != NULL) {
        fclose(tmp2);
    }
    char* result = malloc(strlen(option1) + 1); // Allocate memory for the result
    strcpy(result, option1); // Copy option1 to result
    return result;
} else if (tmp2 != NULL) {
    fclose(tmp2);
    char* result = malloc(strlen(option2) + 1); // Allocate memory for the result
    strcpy(result, option2); // Copy option2 to result
    return result;
}
  • If tmp1 is not NULL, it means that the file with the nom_prenom.txt naming scheme so function returns it.

  • Else if tmp2 is not NULL, it means that the file with prenom_nom.txt naming scheme so function returns it.

  • Otherwice, both doesn't exist so function will return NULL.

Last updated