Question: #include #include #include #include // needed to use tolower() #pragma warning(disable: 4996) // for Visual Studio Only #define MAX_BOOKS 20 #define MAX_NAME_LENGTH 35 typedef enum

 #include #include #include #include // needed to use tolower() #pragma warning(disable:4996) // for Visual Studio Only #define MAX_BOOKS 20 #define MAX_NAME_LENGTH 35

#include #include #include #include // needed to use tolower() #pragma warning(disable: 4996) // for Visual Studio Only

#define MAX_BOOKS 20 #define MAX_NAME_LENGTH 35

typedef enum { noble = 0, hayden } library; // enumeration type library

struct bookDetails { char bookName[MAX_NAME_LENGTH]; int pubYear; // publication year library libName; int noOfCopies; };

struct bookDetails list[MAX_BOOKS]; // declare list of books int count = 0; // the number of books currently stored in the list (initialized at 0)

// forward declaration of functions (already implmented) void flushStdIn(); void executeAction(char); void save(char* fileName);

// functions that need implementation: int add(char* bookName_input, int pubYear_input, char* libName_input, int noOfCopies_input); // 20 points void display(); // 10 points void sort(); // 10 points void load(char* fileName); // 10 points

int main() { load("Book_List.txt"); // load list of books from file (if it exists). Initially there will be no file. char choice = 'i'; // initialized to a dummy value do { printf(" CSE240 HW5 "); printf("Please enter your selection: "); printf("\t a: add a new book to the list "); printf("\t d: display entire list of books "); printf("\t s: sort books by name "); printf("\t q: quit "); choice = tolower(getchar()); flushStdIn(); executeAction(choice); } while (choice != 'q');

save("Book_List.txt"); // save list of books to file (overwrites file, if it exists) return 0; }

// flush out leftover ' ' characters void flushStdIn() { char c; do c = getchar(); while (c != ' ' && c != EOF); }

// ask for details from user for the given selection and perform that action void executeAction(char c) { char bookName_input[MAX_NAME_LENGTH]; unsigned int pubYear_input, noOfCopies_input, add_result= 0; char libName_input[10]; switch (c) { case 'a': // input book details from user printf(" Please enter book name: "); fgets(bookName_input, sizeof(bookName_input), stdin); bookName_input[strlen(bookName_input) - 1] = '\0'; // discard the trailing ' ' char printf("Please enter publication year: "); scanf("%d", &pubYear_input); flushStdIn(); printf("Please enter library name (noble/hayden): "); fgets(libName_input, sizeof(libName_input), stdin); libName_input[strlen(libName_input) - 1] = '\0'; // discard the trailing ' ' char printf("Please enter no. of copies of book: "); scanf("%d", &noOfCopies_input); flushStdIn(); // add the book to the list add_result = add(bookName_input, pubYear_input, libName_input, noOfCopies_input); if (add_result == 0) printf(" That book is already on the list! "); else printf(" Book successfully added to the list! ");

break; case 's': sort(); break; case 'd': display(); break; case 'q': break; default: printf("%c is invalid input! ",c); } }

// Q1 : add (20 points) // This function is used to insert a new book into the list. You can simply insert the new book to the end of list (array of structs). // Do not allow the book to be added to the list if it already exists in the list. You can do that by checking the names of the books already in the list. // If the book already exists then return 0 without adding it to the list. If the book does not exist in the list then go on to add the book at the end of the list and return 1. // NOTE: You must convert the string 'libName_input' to an enum type and store it in the list because the struct has enum type for library name. // You can assume that user will input library name in lowercase. // Hint: 'count' holds the number of books currently in the list int add(char* bookName_input, int pubYear_input, char* libName_input, int noOfCopies_input) {

return 0; // Comment out this line when implementing this function // It is added initially to avoid compile error }

// Q2 : display (10 points) // This function displays the list of books with the book details (struct elements) of each book. // Parse through the book list and print the book details one after the other. See expected output screenshots in homework question file. // NOTE: Library name is stored in the struct as enum type. You need to display 'Noble' or 'Hayden' as library name for the book. void display() {

}

// Q3 : sort (10 points) // This function is used to sort the book list alphabetically by book name. // Parse the book list and compare the book names to check which one should appear before the other in the list. // Sorting should happen within the list. That is, you should not create a new list of books having sorted books. // Hint: One of the string library function can be useful to implement this function because the sorting needs to happen by book name which is a string. // Use a temp struct if you need to swap two book structs in your logic void sort() { struct bookDetails bookTemp; // needed for swapping book structs. Not absolutely necessary to use. // enter your code here

// display message for user to check the result of sorting. printf(" Book list sorted! Use display option 'd' to view sorted list. "); }

// save() is called at the end of main() // This function saves the array of structures to file. It is already implemented. // You should understand how this code works so that you know how to use it for future homework. // It will also help you with 'load' function. void save(char* fileName) { FILE* file; int i, libnameValue=0; file = fopen(fileName, "wb"); fwrite(&count, sizeof(count), 1, file); // First, store the number of books in the list // Parse the list and write book details to file1 // for (i = 0; i

// Q4: load (10 points) // This function is called in the beginning of main(). // This function reads the book list from the saved file and builds the array of structures 'list'. // In the first run of the program, there will be no saved file because save() is done at the end of program. // So at the begining of this function, write code to open the file and check if it exists. If file does not exist, then return from the function. // (See expected output of add() in homework question file. It displays "Book_List.txt not found" because the file did not exist initially.) // If the file exists, then parse the book list to write the book details to the file. // Use the save function given above as an example of how to write this function. Notice the order of elements that is used to write to file in save() // You need to use the same order to read the list back. // NOTE: The saved file is not exactly readable because all elements of the struct are not string or char type. // So you need to implement load() similar to how save() is implemented. Only then the 'list' will be loaded correctly. void load(char* fileName) { }

1. You are given a partially completed program hw05q1.c. You should follow the instructions given in the program to complete the functions so that the program executes as instructed. The program declares a struct 'bookDetails' with elements for book name, publication year, library name and number of copies You will be completing a program that creates a list of books (array of structures). It is a menu-driven prograrm where the user is given the following options: a) Add a new book to the list. When adding a new book to the list, the user is for book name, publication year, library name and number of copies of the book. The book should be added at the end of the list. If the name of the book to add already exists in the list, then you should not add the book to the list. The library prompted name is enum type. b) Display the list of books. c) Sort the list of books alphabetically by book name. The sorting should happen within the list. You should not create a new list of books having sorted books. CSE240-Introduction to Programming Language Homework 05 1 | Page There is a save() already implemented to write the book list to a file 'Book_List.txt'. save() is executed at the end of the program when the user quits the program. You need to implement load) which is called at the start of the program. This function will read the saved file and fill in the array of structures. You need to read the file in the same order and manner that it is saved in save() Expected output of each function

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!