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

Write these two functions, using a single linked list for the database. int addR

ID: 3558455 • Letter: W

Question

Write these two functions, using a single linked list for the database.

int addRecord (struct record **,char [ ],char [ ],int, char [ ]);

- adds a new record to the database at the END of the single linked list.

int deleteRecord(struct record **, char [ ]);

- deletes an existing record in the database using the name as the key to delete that entire record. This will delete ALL records based on that name.

This is the database:

struct record

{

          char                        name[25];

          char                        address[80];

int                           yearofbirth;

char                        telno[15];

struct record*          next;

};

Explanation / Answer

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
struct student
{
char *name;
int roll_no;
struct student *ptr_next;
}*ptr_this,*ptr_first;
void PrintMenu(void);
void AddRecord(void);
void DeleteRecord(void);
void SearchRecord(void);
void SortRecord(void);
void PrintRecord(void);
int main()
{
char choice;
ptr_this=ptr_first=(struct student*)NULL;
while(1)
{
PrintMenu();
choice=getche();
switch(choice)
{
case '1':
AddRecord();
break;
case '2':
DeleteRecord();
break;
case '3':
SearchRecord();
break;
case '4':
SortRecord();
break;
case '5':
PrintRecord();
break;
case '6':
exit(0);
default:
printf("Enter a valid choice. ");
getch();
}
}

}
void PrintMenu(void)
{
clrscr();
printf("Database System. 1.Add Record 2.Delete Record 3.Search Record 4.Sort Records 5.Display Records 6.exit");

}
void AddRecord(void)
{
char temp[100];
int i;
struct student *ptr_new;
ptr_new=(struct student*)malloc(sizeof(struct student));
if(ptr_new==(struct student*)NULL)
{
printf("Sorry but you can not add any more data becasue the computer memory is full. ");
return;
}
printf("Enter Name: ");
gets(temp);
ptr_new->name=(char*)malloc(sizeof(char)*(strlen(temp)+1));
strncpy(ptr_new->name,temp,strlen(temp)+1);
printf("Enter Roll no:");
gets(temp);
ptr_new->roll_no=atoi(temp);
ptr_new->ptr_next=(struct student*)NULL;
if(ptr_first->ptr_next==(struct student*)NULL)
{
ptr_first=ptr_this=ptr_new;
}
else
{
ptr_this->ptr_next=ptr_new;
ptr_this=ptr_new;
}
printf("Record Successfully added. ");
printf("%s",ptr_this->name);
getch();
}

void DeleteRecord(void)
{
char temp[100];
int rec_no,i;
struct student* ptr_del,*ptr_prev;
printf("Enter Record Number to be Deleted: ");
gets(temp);
rec_no=atoi(temp);
ptr_del=ptr_prev=ptr_first;
for(i=0;ptr_del!=(struct student*)NULL;i++,ptr_del=ptr_del->ptr_next)
{
if(i==rec_no)
{
if(ptr_del==ptr_first)
ptr_first=ptr_first->ptr_next;
else
ptr_prev->ptr_next=ptr_del->ptr_next;
free(ptr_del);
printf("Record #%d has been deleted.",rec_no);
getch();
return ;
}
ptr_prev=ptr_del;
}


}
void SearchRecord(void)
{
struct student *ptr_search;
char temp[100];
int roll,flag=0;
clrscr();
printf("Enter roll no to search: ");
gets(temp);
roll=atoi(temp);
ptr_search=ptr_first;
for(;ptr_search!=(struct student*)NULL;ptr_search=ptr_search->ptr_next)
{
if(ptr_search->roll_no==roll)
{
flag=1;
printf("Result Found! Name: %s Roll #: %d ",ptr_search->name,ptr_search->roll_no);
getch();
return;
}
}
if(flag==0)
printf("Record not found! ");
getch();

}
void SortRecord(void)
{
struct student *out,*in,*dummy;
for(out=ptr_first;out!=(struct student*)NULL;out=out->ptr_next)
{
for(in=out->ptr_next;out->ptr_next!=(struct student*)NULL;in=in->ptr_next)
{
if(!(strcmpi(out->name,in->name)))
*dummy=*in;
*in=*out;
*out=*dummy;
dummy=in;
in=out;
out=dummy;
}
}
printf("Records have been successfully sorted.");
}
void PrintRecord(void)
{
printf("HEllo");
getch();
struct student *ptr_print;
ptr_print=ptr_first;
for(;ptr_print!=(struct student*)NULL;ptr_print=ptr_print->ptr_next)
{
printf("NAME: %s ROLL#: %d ",ptr_print->name,ptr_print->roll_no);
printf("Press Enter to display next record or space to exit");
getch();
}


}