Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

C programming. Can you modify this program? I want it to be saved when I add ite

ID: 3833887 • Letter: C

Question

C programming.

Can you modify this program? I want it to be saved when I add items so that next time I add new items, the old items and new items appear at the same time when I print all items.

Here is the program:

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

struct info

{

   char title[20];

   char author[20];

   int year;

   int no_pages;

   struct info *next;

};

typedef struct info Info;

//declare functions to add t linked list, delete and print an item and print all items

void addItem(Info *list, Info item);

int findItem(Info *list, char *title);

void deleteItem(Info *list, char *title);

void printItem(Info *list,char *s);

void printAllItem(Info *list);

void sort(Info *list);

void add(Info **list, Info item);

int main()

{

   Info *list = NULL;

   Info item;

   char choice = 'A',ch='Y';

   char title[20];

   do

   {

       printf("Enter action - (A)dd, (D)elete, (F)ind, (P)rint all ,(S)ort, (Q)uit: ");

       //fflush(stdout);

       scanf("%c", &choice);

                fflush(stdin);

       switch (choice)

       {

       case 'A':

           printf("Enter the title to add : ");

           //fflush(stdin);

           //fflush(stdout);

           gets(item.title);

           printf("Enter the author : ");

           gets(item.author);

           printf("Enter the year was it published: ");

           scanf("%d", &item.year);

                                fflush(stdin);

           printf("Enter the number of pages : ");

           scanf("%d", &item.no_pages);

                                fflush(stdin);

           if (list == NULL)

           {

               list = (Info*)malloc(sizeof(Info));

               strcpy(list->author, item.author);

               strcpy(list->title, item.title);

               list->year = item.year;

               list->no_pages = item.no_pages;

               list->next = NULL;

           }

           else

           addItem(list, item);

           break;

       case 'D':

           printf("Enter the title to delete an item : ");

           //fflush(stdin);

           gets(title);

           deleteItem(list, title);

           break;

       case 'F':

           printf("Enter the title to find : ");

           fflush(stdin);

           gets(title);

           if (findItem(list, title))

           {

               printf("Item found ");

           }

           else

           {

               printf("I can't find that book. ");

        }

           break;

       case 'P':

           printAllItem(list);

           break;

       case 'S':

           sort(list);

           break;

       case 'Q':

           printf("Quit Application.....");

           break;

       default:

           printf("Invalid option ");

           break;

       }

   } while (choice != 'Q');

}

void add(Info **list, Info item)

{

   *list = (Info*)malloc(sizeof(Info));

   strcpy((*list)->title, item.title);

   strcpy((*list)->author, item.author);

   (*list)->year = item.year;

   (*list)->no_pages = item.no_pages;

   return;

}

void addItem(Info *list, Info item)

{

   Info *newitem, *cur = list;

   newitem = (Info*)malloc(sizeof(Info));

   strcpy(newitem->title, item.title);

   newitem->year = item.year;

   strcpy(newitem->author, item.author);

   newitem->no_pages = item.no_pages;

   newitem->next = NULL;

   if (list == NULL)

   {

       add(&list,item);

   }

   else

   {

       while (cur->next != NULL)

       {

           cur = cur->next;

       }

       cur->next = newitem;

   }

}

int findItem(Info *list, char *title)

{

   if (list == NULL)

   {

       printf("Cannt delete an item,list is empty ");

       return 0;

   }

        Info *cur = list;

   while (cur != NULL)

   {

       if (strcmp(cur->title, title) == 0)

       {

           return 1;

       }

        cur = cur->next;

   }

   return 0;

}

void deleteItem(Info *list, char *title)

{

   Info *cur = list, *prev , *next = NULL;

   if (list == NULL)

   {

       printf("Cannt delete an item,list is empty ");

       return;

   }

   if (strcpy(list->title, title) == 0)

   {

       //found at first position delete and assign list next item

       list = list->next;

       free(cur);

       return;

   }

   while (cur != NULL)

   {

       prev = cur;

       if (cur->next != NULL)

           next = cur->next;

       if (strcpy(cur->title, title) == 0)

       {

           prev->next = next;

           free(cur);

           return;

       }

       cur = cur->next;

   }

}

void printItem(Info *list,char *s)

{

   Info *cur = list;

   while (cur != NULL)

   {

       if (strcmp(cur->title, s) == 0)

       {

           printf("%s(%d) ", cur->title,cur->year);

           printf(" %s ", cur->author);

           //printf("Year: %d ", cur->year);

           printf(" %d Pages ", cur->no_pages);

           cur = cur->next;

       }

   }

}

void printAllItem(Info *list)

{

   Info *cur = list;

   while (cur != NULL)

   {

      printf("%s(%d) ", cur->title,cur->year);

           printf(" %s ", cur->author);

           printf(" %d Pages ", cur->no_pages);

           cur = cur->next;

   }

}

void sort(Info *list)

{

   Info *cur = list,*next;

   Info tmp;

   while (cur != NULL)

   {

       if (cur->next != NULL)

       {

           next = cur->next;

           if (strcmp(cur->title, next->title) > 0)

           {

               strcpy(tmp.title, cur->title);

               strcpy(tmp.author, cur->author);

               tmp.year = cur->year;

               tmp.no_pages = cur->no_pages;

               strcpy(cur->title, next->title);

               strcpy(cur->author, next->author);

               cur->year = next->year;

               cur->no_pages = next->no_pages;

               strcpy(next->title, tmp.title);

               strcpy(next->author, tmp.author);

               next->year = tmp.year;

               next->no_pages = tmp.no_pages;

           }

       }

       cur = cur->next;

   }

}

Explanation / Answer

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

struct info

{

   char title[20];

   char author[20];

   int year;

   int no_pages;

   struct info *next;

};

typedef struct info Info;

//declare functions to add t linked list, delete and print an item and print all items

void addItem(Info *list, Info item);

int findItem(Info *list, char *title);

void deleteItem(Info *list, char *title);

void printItem(Info *list,char *s);

void printAllItem(Info *list);

void sort(Info *list);

void add(Info **list, Info item);

int main()

{

   Info *list = NULL;

   Info item;

   char choice = 'A',ch='Y';

   char title[20];

   do

   {

       printf("Enter action - (A)dd, (D)elete, (F)ind, (P)rint all ,(S)ort, (Q)uit: ");

       //fflush(stdout);

       scanf("%c", &choice);

                fflush(stdin);

       switch (choice)

       {

       case 'A':

           printf("Enter the title to add : ");

           //fflush(stdin);

           //fflush(stdout);

           gets(item.title);

           printf("Enter the author : ");

           gets(item.author);

           printf("Enter the year was it published: ");

           scanf("%d", &item.year);

                                fflush(stdin);

           printf("Enter the number of pages : ");

           scanf("%d", &item.no_pages);

                                fflush(stdin);

           if (list == NULL)

           {

               list = (Info*)malloc(sizeof(Info));

               strcpy(list->author, item.author);

               strcpy(list->title, item.title);

               list->year = item.year;

               list->no_pages = item.no_pages;

               list->next = NULL;

           }

           else

           addItem(list, item);

           break;

       case 'D':

           printf("Enter the title to delete an item : ");

           //fflush(stdin);

           gets(title);

           deleteItem(list, title);

           break;

       case 'F':

           printf("Enter the title to find : ");

           fflush(stdin);

           gets(title);

           if (findItem(list, title))

           {

               printf("Item found ");

           }

           else

           {

               printf("I can't find that book. ");

        }

           break;

       case 'P':

           printAllItem(list);

           break;

       case 'S':

           sort(list);

           break;

       case 'Q':

           printf("Quit Application.....");

           break;

       default:

           printf("Invalid option ");

           break;

       }

   } while (choice != 'Q');

}

void add(Info **list, Info item)

{

   *list = (Info*)malloc(sizeof(Info));

   strcpy((*list)->title, item.title);

   strcpy((*list)->author, item.author);

   (*list)->year = item.year;

   (*list)->no_pages = item.no_pages;

   return;

}

void addItem(Info *list, Info item)

{

   Info *newitem, *cur = list;

   newitem = (Info*)malloc(sizeof(Info));

   strcpy(newitem->title, item.title);

   newitem->year = item.year;

   strcpy(newitem->author, item.author);

   newitem->no_pages = item.no_pages;

   newitem->next = NULL;

   if (list == NULL)

   {

       add(&list,item);

   }

   else

   {

       while (cur->next != NULL)

       {

           cur = cur->next;

       }

       cur->next = newitem;

   }

}

int findItem(Info *list, char *title)

{

   if (list == NULL)

   {

       printf("Cannt delete an item,list is empty ");

       return 0;

   }

        Info *cur = list;

   while (cur != NULL)

   {

       if (strcmp(cur->title, title) == 0)

       {

           return 1;

       }

        cur = cur->next;

   }

   return 0;

}

void deleteItem(Info *list, char *title)

{

   Info *cur = list, *prev , *next = NULL;

   if (list == NULL)

   {

       printf("Cannt delete an item,list is empty ");

       return;

   }

   if (strcpy(list->title, title) == 0)

   {

       //found at first position delete and assign list next item

       list = list->next;

       free(cur);

       return;

   }

   while (cur != NULL)

   {

       prev = cur;

       if (cur->next != NULL)

           next = cur->next;

       if (strcpy(cur->title, title) == 0)

       {

           prev->next = next;

           free(cur);

           return;

       }

       cur = cur->next;

   }

}

void printItem(Info *list,char *s)

{

   Info *cur = list;

   while (cur != NULL)

   {

       if (strcmp(cur->title, s) == 0)

       {

           printf("%s(%d) ", cur->title,cur->year);

           printf(" %s ", cur->author);

           //printf("Year: %d ", cur->year);

           printf(" %d Pages ", cur->no_pages);

           cur = cur->next;

       }

   }

}

void printAllItem(Info *list)

{

   Info *cur = list;

   while (cur != NULL)

   {

      printf("%s(%d) ", cur->title,cur->year);

           printf(" %s ", cur->author);

           printf(" %d Pages ", cur->no_pages);

           cur = cur->next;

   }

}

void sort(Info *list)

{

   Info *cur = list,*next;

   Info tmp;

   while (cur != NULL)

   {

       if (cur->next != NULL)

       {

           next = cur->next;

           if (strcmp(cur->title, next->title) > 0)

           {

               strcpy(tmp.title, cur->title);

               strcpy(tmp.author, cur->author);

               tmp.year = cur->year;

               tmp.no_pages = cur->no_pages;

               strcpy(cur->title, next->title);

               strcpy(cur->author, next->author);

               cur->year = next->year;

               cur->no_pages = next->no_pages;

               strcpy(next->title, tmp.title);

               strcpy(next->author, tmp.author);

               next->year = tmp.year;

               next->no_pages = tmp.no_pages;

           }

       }

       cur = cur->next;

   }

}