READ BEFORE YOU START You are given a partially completed

 // READ BEFORE YOU START: // You are given a partially completed program that creates a list of students for a school. // Each student has the corresponding information: name, gender, class, section, and roll_number. // To begin, you should trace through the given code and understand how it works. // Please read the instructions above each required function and follow the directions carefully. // If you modify any of the given code, the return types, or the parameters, you risk failing the automated test cases. // // The following will be accepted as input in the following format: \"name:gender:standard:roll_number:tuition_fee\" // Example Input: \"Tom:M:3rd:10:2000.10\" or \"Elsa:F:4th:15:2700\" // Valid name: String containing alphabetical letters beginning with a capital letter // Valid gender: Char value \'M\' or \'F\' // Valid standard: String containing alpha-numeric letters beginning with a number // Valid roll_number: Positive integer value // Valid tuition fee: Float containing no more than 2 decimal value, for example: 1500.45 or 2000.7 or 2700 // All inputs will be a valid length and no more than the allowed number of students will be added to the list  #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h>  #pragma warning(disable: 4996)  typedef enum { male = 0, female } gender; // enumeration type gender  struct student {         char name[30];         gender genderValue;         char standard[10];         int roll_number;         float tuition_fee; };  int count = 0; // the number of students currently stored in the list (initialized at 0)  struct student list[30]; // initialize list of students  // forward declaration of functions void flush(); void branching(char); void registration(char); int add(char*, char*, char*, int, float, struct student*); // 30 points char* search(char*, int, struct student*); // 10 points void display(); void save(char* fileName); void load(char* fileName); // 10 points  int main() {         load(\"Sudent_List.txt\"); // load list of students from file (if it exists)          char ch = \'i\';         printf(\"Assignment 5: Array of Structs and Enum Types\ \ \");         printf(\"Student information\ \ \");          do         {                 printf(\"Please enter your selection:\ \");                 printf(\"\\ta: add a new student to the list\ \");                 printf(\"\\ts: search for a student on the list\ \");                 printf(\"\\td: display list of students\ \");                 printf(\"\\tq: quit and save your list\ \");                 ch = tolower(getchar());                 flush();                 branching(ch);         } while (ch != \'q\');          save(\"Student_List.txt\"); // save list of dogs to file (overwrite if it exists)         getch();         return 0; }  // consume leftover \'\ \' characters void flush() {         int c;         do c = getchar(); while (c != \'\ \' && c != EOF); }  // branch to different tasks void branching(char c) {         switch (c)         {         case \'a\':         case \'s\': registration(c); break;         case \'d\': display(); break;         case \'q\': break;         default: printf(\"Invalid input!\ \");         } }  // The registration function is used to determine how much information is needed and which function to send that information to. // It uses values that are returned from some functions to produce the correct ouput. // There is no implementation needed here, but you should study this function and know how it works. // It is always helpful to understand how the code works before implementing new features. // Do not change anything in this function or you risk failing the automated test cases. void registration(char c) {         char input[100];          if (c == \'a\')         {                 printf(\"\ Please enter the student\'s information in the following format:\ \");                 printf(\"\\tname:gender:standard:roll_number:tuition_fee\ \");                                  fgets(input, sizeof(input), stdin);                  // discard \'\ \' chars attached to input                 input[strlen(input) - 1] = \'\\0\';                  char* name = strtok(input, \":\"); // strtok used to parse string                 char* genderValueString = strtok(NULL, \":\");                 char* standard = strtok(NULL, \":\");                 int roll_number = atoi(strtok(NULL, \":\")); // atoi used to convert string to int                 float tuition_fee = atof(strtok(NULL, \":\")); // atof used to convert string to float                  int result = add(name, genderValueString, standard, roll_number, tuition_fee, list);                  if (result == 0)                         printf(\"\ That student is already on the list\ \ \");                 else                         printf(\"\ Student added to list successfully\ \ \");         }         else // c = \'s\'         {                 printf(\"\ Please enter the student\'s information in the following format:\ \");                 printf(\"\\tname:roll_number\ \");                 fgets(input, sizeof(input), stdin);                  char* name = strtok(input, \":\"); // strtok used to parse string                 int roll_number = atoi(strtok(NULL, \":\")); // atoi used to convert string to int                  char* result = search(name, roll_number, list);                  if (result == NULL)                         printf(\"\ That student is not on the list\ \ \");                 else                         printf(\"\ Standard: %s\ \ \", result);         } }  // Q1 : add (66% of specifications) // This function is used to insert a new student into the list. // Your list should be sorted alphabetically by name, so you need to search for the correct index to add into your list. // If a student already exists with the same name, then those students should be sorted by roll_number. // Do not allow for the same student to be added to the list multiple times. (same name and same roll_number(same roll number cannot happen)). // If the student already exists on the list, return 0. If the student is added to the list, return 1. // // NOTE: You must convert the string \"genderValueString to an enum type and store it in the list. This will be tested. // (You must store all of the required information correctly to pass all of the test cases) // NOTE: You should not allow for the same student to be added twice, you will lose points if you do not account for this. // (That means that dogs on the list are allowed to have the same name but not same roll number). // You are not required to use pointer operations for your list but you may do so if you\'d like.  // \'list\' is passed to this function for automated testing purposes only, it is global. int add(char* name, char* genderValueString, char* standard, int roll_number, float tuition_fee, struct student* list) {     return 0; }  // Q2 : search (33% of specifications) // This function is used to search for a student on the list and returns the standard of that student // You will need to compare the search keys: name and roll_number, with the stored name and roll_number. // If the student exists in the list, return a String containing the standard of the requested dog. // If the student does not exist on the list, return NULL char* search(char* name, int roll_number, struct student* list) {     return NULL; } // This function displays the list of students and the information for each one. It is already implemented for you. // It may be helpful to trace through this function to help you complete other sections of this assignment. void display() {         char* genderValue = \"Male\";     int i;         if (count == 0)                 printf(\"\ There are no students on this list!\ \ \");         else {                 for (i = 0; i < count; i++)                 {                         printf(\"\ Name: %s\ \", list[i].name);                          if (list[i].genderValue == male)                                 genderValue = \"Male\";                         else if (list[i].genderValue == female)                                 genderValue = \"Female\";                          printf(\"Standard: %s\ \", list[i].standard);                         printf(\"Gender: %s\ \", genderValue);                         printf(\"Roll No: %d \ \", list[i].roll_number);                         printf(\"Tuition Fee: $ %.2f \ \", list[i].tuition_fee);                 }                 printf(\"\ \");         } }  // This function saves the array of structures to file. It is already implemented for you. // You should understand how this code works so that you know how to use it for future assignments. void save(char* fileName) {         FILE* file;     int i;         file = fopen(fileName, \"wb\");          fwrite(&count, sizeof(count), 1, file);         for (i = 0; i < count; i++)         {                 fwrite(list[i].name, sizeof(list[i].name), 1, file);                 fwrite(list[i].standard, sizeof(list[i].standard), 1, file);                 fwrite(&list[i].genderValue, sizeof(list[i].genderValue), 1, file);                 fwrite(&list[i].roll_number, sizeof(list[i].roll_number), 1, file);                 fwrite(&list[i].tuition_fee, sizeof(list[i].tuition_fee), 1, file);         }         fclose(file); }  // Q3:  Load file (10 points) // This function loads data from file and build the the array of structures.  // Use the save function given above as an example on how to write this function. void load(char* fileName) {        return NULL; } 

Solution

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#pragma warning(disable: 4996)

typedef enum { male = 0, female } gender; // enumeration type gender

struct student {
        char name[30];
        gender genderValue;
        char standard[10];
        int roll_number;
        float tuition_fee;
};

int count = 0; // the number of students currently stored in the list (initialized at 0)

struct student list[30]; // initialize list of students

// forward declaration of functions
void flush();
void branching(char);
void registration(char);
int add(char*, char*, char*, int, float, struct student*); // 30 points
char* search(char*, int, struct student*); // 10 points
void display();
void save(char* fileName);
void load(char* fileName); // 10 points

int main()
{
        load(\"Sudent_List.txt\"); // load list of students from file (if it exists)

        char ch = \'i\';
        printf(\"Assignment 5: Array of Structs and Enum Types\ \ \");
        printf(\"Student information\ \ \");

        do
        {
                printf(\"Please enter your selection:\ \");
                printf(\"\\ta: add a new student to the list\ \");
                printf(\"\\ts: search for a student on the list\ \");
                printf(\"\\td: display list of students\ \");
                printf(\"\\tq: quit and save your list\ \");
                ch = tolower(getchar());
                flush();
                branching(ch);
        } while (ch != \'q\');

        save(\"Student_List.txt\"); // save list of dogs to file (overwrite if it exists)
        getchar();
        return 0;
}

// consume leftover \'\ \' characters
void flush()
{
        int c;
        do c = getchar(); while (c != \'\ \' && c != EOF);
}

// branch to different tasks
void branching(char c)
{
        switch (c)
        {
        case \'a\':
        case \'s\': registration(c); break;
        case \'d\': display(); break;
        case \'q\': break;
        default: printf(\"Invalid input!\ \");
        }
}

// The registration function is used to determine how much information is needed and which function to send that information to.
// It uses values that are returned from some functions to produce the correct ouput.
// There is no implementation needed here, but you should study this function and know how it works.
// It is always helpful to understand how the code works before implementing new features.
// Do not change anything in this function or you risk failing the automated test cases.
void registration(char c)
{
        char input[100];

        if (c == \'a\')
        {
                printf(\"\ Please enter the student\'s information in the following format:\ \");
                printf(\"\\tname:gender:standard:roll_number:tuition_fee\ \");

                fgets(input, sizeof(input), stdin);

                // discard \'\ \' chars attached to input
                input[strlen(input) - 1] = \'\\0\';

                char* name = strtok(input, \":\"); // strtok used to parse string
                char* genderValueString = strtok(NULL, \":\");
                char* standard = strtok(NULL, \":\");
                int roll_number = atoi(strtok(NULL, \":\")); // atoi used to convert string to int
                float tuition_fee = atof(strtok(NULL, \":\")); // atof used to convert string to float

                int result = add(name, genderValueString, standard, roll_number, tuition_fee, list);

                if (result == 0)
                        printf(\"\ That student is already on the list\ \ \");
                else
                        printf(\"\ Student added to list successfully\ \ \");
        }
        else // c = \'s\'
        {
                printf(\"\ Please enter the student\'s information in the following format:\ \");
                printf(\"\\tname:roll_number\ \");
                fgets(input, sizeof(input), stdin);

                char* name = strtok(input, \":\"); // strtok used to parse string
                int roll_number = atoi(strtok(NULL, \":\")); // atoi used to convert string to int

                char* result = search(name, roll_number, list);

                if (result == NULL)
                        printf(\"\ That student is not on the list\ \ \");
                else
                        printf(\"\ Standard: %s\ \ \", result);
        }
}

// Q1 : add (66% of specifications)
// This function is used to insert a new student into the list.
// Your list should be sorted alphabetically by name, so you need to search for the correct index to add into your list.
// If a student already exists with the same name, then those students should be sorted by roll_number.
// Do not allow for the same student to be added to the list multiple times. (same name and same roll_number(same roll number cannot happen)).
// If the student already exists on the list, return 0. If the student is added to the list, return 1.
//
// NOTE: You must convert the string \"genderValueString to an enum type and store it in the list. This will be tested.
// (You must store all of the required information correctly to pass all of the test cases)
// NOTE: You should not allow for the same student to be added twice, you will lose points if you do not account for this.
// (That means that dogs on the list are allowed to have the same name but not same roll number).
// You are not required to use pointer operations for your list but you may do so if you\'d like.
// \'list\' is passed to this function for automated testing purposes only, it is global.
int add(char* name, char* genderValueString, char* standard, int roll_number, float tuition_fee, struct student* list)
{
    //If list is already full then can\'t add new Student
    if(count >= 30){
        printf(\"Can\'t add More than 30 students\");
        return 0;
    }
    struct student*curStudent = list+count;
    //Copy name
    memcpy(&(curStudent->name[0]),name,strlen(name));
    //Copy Gender
    if(*genderValueString == \'M\'){
        curStudent->genderValue = male;
    }
    else{
        curStudent->genderValue = female;
    }
    //Copy Standard
    memcpy(&(curStudent->standard[0]),standard,strlen(standard));
    //Roll Number
    curStudent->roll_number = roll_number;
    //Tution Fee
    curStudent->tuition_fee = tuition_fee;
    //Increment Count
    count++;
    return 0;
}

// Q2 : search (33% of specifications)
// This function is used to search for a student on the list and returns the standard of that student
// You will need to compare the search keys: name and roll_number, with the stored name and roll_number.
// If the student exists in the list, return a String containing the standard of the requested dog.
// If the student does not exist on the list, return NULL
char* search(char* name, int roll_number, struct student* list)
{
    for(int i = 0 ; i < count ; i++){
        if(strcmp(list[i].name,name) == 0 && list[i].roll_number == roll_number){
            return list[i].standard;
        }
    }
    return NULL;
}
// This function displays the list of students and the information for each one. It is already implemented for you.
// It may be helpful to trace through this function to help you complete other sections of this assignment.
void display()
{
        char* genderValue = \"Male\";
    int i;
        if (count == 0)
                printf(\"\ There are no students on this list!\ \ \");
        else {
                for (i = 0; i < count; i++)
                {
                        printf(\"\ Name: %s\ \", list[i].name);

                        if (list[i].genderValue == male)
                                genderValue = \"Male\";
                        else if (list[i].genderValue == female)
                                genderValue = \"Female\";

                        printf(\"Standard: %s\ \", list[i].standard);
                        printf(\"Gender: %s\ \", genderValue);
                        printf(\"Roll No: %d \ \", list[i].roll_number);
                        printf(\"Tuition Fee: $ %.2f \ \", list[i].tuition_fee);
                }
                printf(\"\ \");
        }
}

// This function saves the array of structures to file. It is already implemented for you.
// You should understand how this code works so that you know how to use it for future assignments.
void save(char* fileName)
{
        FILE* file;
    int i;
        file = fopen(fileName, \"wb\");

        fwrite(&count, sizeof(count), 1, file);
        for (i = 0; i < count; i++)
        {
                fwrite(list[i].name, sizeof(list[i].name), 1, file);
                fwrite(list[i].standard, sizeof(list[i].standard), 1, file);
                fwrite(&list[i].genderValue, sizeof(list[i].genderValue), 1, file);
                fwrite(&list[i].roll_number, sizeof(list[i].roll_number), 1, file);
                fwrite(&list[i].tuition_fee, sizeof(list[i].tuition_fee), 1, file);
        }
        fclose(file);
}

// Q3: Load file (10 points)
// This function loads data from file and build the the array of structures.
// Use the save function given above as an example on how to write this function.
void load(char* fileName)
{
     FILE *infile;
     //Open file to read data
     infile = fopen (fileName,\"r\");
     //File open Failed
     if(infile == NULL){
         fprintf(stderr, \"\ Error opening students data\ \ \");
         return NULL;
     }
     //Temp variable to read Gender from File
     char gen[2] = {\'\\0\'};
     char test[200] = {\'\\0\'};
     //Read from File : Format \"Tom:M:3rd:10:2000.10\"
   
      while(fscanf(infile,\"%s\",test)!= EOF){

          char* name = strtok(test, \":\"); // strtok used to parse string
          char* genderValueString = strtok(NULL, \":\");
          char* standard = strtok(NULL, \":\");
          int roll_number = atoi(strtok(NULL, \":\")); // atoi used to convert string to int
          float tuition_fee = atof(strtok(NULL, \":\")); // atof used to convert string to float

          add(name, genderValueString, standard, roll_number, tuition_fee, list);

     }
     fclose(infile);
     return NULL;
}

 // READ BEFORE YOU START: // You are given a partially completed program that creates a list of students for a school. // Each student has the corresponding in
 // READ BEFORE YOU START: // You are given a partially completed program that creates a list of students for a school. // Each student has the corresponding in
 // READ BEFORE YOU START: // You are given a partially completed program that creates a list of students for a school. // Each student has the corresponding in
 // READ BEFORE YOU START: // You are given a partially completed program that creates a list of students for a school. // Each student has the corresponding in
 // READ BEFORE YOU START: // You are given a partially completed program that creates a list of students for a school. // Each student has the corresponding in

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site