Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

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,

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

#include

#include

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;

}

}

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Professional SQL Server 2012 Internals And Troubleshooting

Authors: Christian Bolton, Justin Langford

1st Edition

1118177657, 9781118177655

More Books

Students also viewed these Databases questions

Question

describe the process of local packet delivery in LAN.

Answered: 1 week ago

Question

Explain all drawbacks of application procedure.

Answered: 1 week ago

Question

Explain the testing process of accounting 2?

Answered: 1 week ago