hi, i have this Linked list program below which appears errors during execution ... anyone fix it for me PLEASE ???
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct _order_
{
char Name[31];
char Album[31];
int Req;
int Year;
int Qty;
char trackTitle[50];
char trackTime[50];
struct _order_ *Next;
} ORDER, *PORDER;
PORDER Root = NULL;
void AddRecord( void );
void DeleteRecord( void );
void ListRecord( void );
void FreeRest( void );
int main()
{
int option, artist;
do
{ printf("\n===================================\n");
printf("\nWelcome to the Music Storage System\n");
printf("\n===================================\n\n\n");
printf("1-- Add New Album Record\n");
printf("2-- Remove Existing Album Record\n");
printf("3-- Display All Album Records\n");
printf("4-- Exit\n\n");
printf("Please select your option\n\n");
scanf("%d",&option);
switch (option)
{
case 1: { do
{
printf("\nEnter the Type of Album:\n");
printf("1-- Single Artist\n");
printf("2-- Multiple Artists\n");
scanf("\n%d",&artist);
switch (artist)
{
case 1: AddRecord(); main();
case 2: printf("\nThis system only supports albums created for single artists.\n");main();
}
}while (artist !=2);
}
case 2: DeleteRecord();
case 3: ListRecord();
case 4: break;
}
}while (option !=4);
FreeRest();
return( 0 );
}
void AddRecord( void )
{
char Name[sizeof(Root->Name)];
char Album[sizeof(Root->Album)];
int Qty;
int Year;
char trackTitle[50];
char trackTime[50];
int x, y;
static int Seq = 0;
PORDER p;
printf( "\n\nEnter artist's name, album's name, year and total number of tracks : \n");
fflush( stdout );
if ( scanf( "%30s%30s%d%d", Name, Album, &Year, &Qty) == 4 )
{
for (x=0;x<Qty;x++)
{
printf("Enter track title : ");
scanf("%s",&trackTitle[x]);
printf("Enter track time : ");
scanf("%s",&trackTime[x]);
}
p = malloc( sizeof( *p ) );
if ( p == NULL )
{
fprintf( stderr, "\nMemory allocation failed!\a\n" );
exit( 1 );
}
strcpy( p->Name, Name );
strcpy( p->Album, Album );
for (y=0;y<=Qty;y++)
{
p->trackTitle[x] = trackTitle[x];
p->trackTime[x] = trackTime[x];
}
p->Qty = Qty;
p->Year = Year;
p->Req = ++Seq;
p->Next = Root;
Root = p;
printf( "\nRecord number %05d assigned\n", Seq );
}
}
void DeleteRecord( void )
{
int Seq;
PORDER p, prev;
printf( "\n\nEnter record number : " );
fflush( stdout );
if ( scanf( "%d", &Seq ) == 1 )
{
for ( p = Root, prev = NULL; p != NULL; p = p->Next )
{
if ( p->Req == Seq )
{
if ( prev == NULL )
{
Root = p->Next;
}
else
{
prev->Next = p-> Next;
}
free( p );
printf( "\nRecord number %05d deleted\n", Seq );
break;
}
prev = p;
}
if ( p == NULL )
{
printf( "\n\aRecord number %05d not found\n", Seq );
}
}
}
void ListRecord( void )
{
PORDER p;
int z;
int NO=1;
printf( "\n\nListing of records currently in process...\n\n" );
for ( p = Root; p != NULL; p = p->Next )
{
printf( "Record number: %05d, Artist Name: %s, Album Name: %s, Total %d Tracks Released in Year %d\n",
p->Req, p->Name, p->Album, p->Qty, p->Year);
for (z=0;z<=p->Qty;z++)
{
printf( "Track %d: %s \tDuration: %s\n", NO, p->trackTitle[z], p->trackTime[z]);
NO=NO+1;
}
}
}
void FreeRest( void )
{
PORDER p;
while( Root != NULL )
{
p = Root;
Root = p->Next;
free( p );
}
}