Code:
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
FILE *ftry;
void displaymenu(void);
void add(void);
void del(void);
void search(void);
void display(void);
void save(void);
typedef struct list{
char lastname[20];
char firstname[20];
char middlename[20];
char studentno[15];
char course[40];
char contact[20];
char email[30];
struct list *next;
} node;
node *head, *body, *tail;
main ()
{
system("color BC");
int choice;
node *temp3;
temp3=(node*)malloc(sizeof(node));
head=NULL;
tail=NULL;
if(((ftry=fopen("Directory.txt","r"))!=NULL))
{
while(feof(ftry)==0)
{
fgets(temp3->firstname,20,ftry);
fgets(temp3->middlename,20,ftry);
fgets(temp3->lastname,20,ftry);
fgets(temp3->studentno,15,ftry);
fgets(temp3->course,40,ftry);
fgets(temp3->contact,20,ftry);
fgets(temp3->email,30,ftry);
if(head==NULL)
{
head=temp3;
tail=temp3;
head->next=tail;
}
else
{
tail->next=temp3;
tail=temp3;
}
}
}
do
{
displaymenu();
printf("\nYour choice: ");
scanf("%d", &choice);
switch(choice)
{
case 1: system("cls"); //delete
printf("You have chosen to add a new record.\n\n");
add();
break;
case 2: system("cls");
if (head!=NULL)
{
printf("You have chosen to delete a record.\n\n");
del();
}
else
printf("There are no more records to delete!\n");
break;
case 3: system("cls");
if(head!=NULL)
{
printf("You have chosen to search the records.\n\n");
search();
}
else
printf("There are no records saved!\n");
break;
case 4: system("cls");
if (head!=NULL)
{
printf("You have chosen to display the records.\n\n");
display();
}
else
printf("There are no records to display! \n");
break;
case 5: system("cls");
printf("The record has been saved!.\n\n");
save();
break;
case 6: system("cls");
printf("\n\n\n\n\n\t\t\t Thank you for using the program!\n\n\n");
printf("\t\t\t Have a nice day!\n\n\n\n\n\n");
break;
default:
system("cls");
printf("\nWARNING: Invalid input! Choose only from 1-6. Thank you! \n");
break;
}
if (choice!=6)
{
getchar();
}
} while(choice!=6);
}
void displaymenu(void)
{
printf("\n*******************************************************************************\n");
printf("\t\t\t M E N U\n");
printf("*******************************************************************************\n");
printf("\t[1] Add new record\n");
printf("\t[2] Delete a record\n");
printf("\t[3] Search for a record\n");
printf("\t[4] Display all\n");
printf("\t[5] Save to file\n");
printf("\t[6] Exit\n");
}
void add(void)
{
int choice;
int x,y,ctr=1;
int i=0,k=0;
node *temp, *temp2,*scan;
body=(node*)malloc(sizeof(node));
temp=NULL;
int count=0;
strcpy(body->firstname,"N/A");
strcpy(body->middlename,"N/A");
strcpy(body->lastname,"N/A");
strcpy(body->studentno,"-");
strcpy(body->contact,"-");
strcpy(body->course,"-");
strcpy(body->email,"-");
printf("\nPLEASE INPUT THE STUDENT'S INFORMATION YOU WANT TO ADD: \n");
printf("\n\tFirst name: ");
getchar();
scanf("%[^\n]s",body->firstname);
printf("\n\tMiddle name: ");
getchar();
scanf("%[^\n]s", body->middlename);
printf("\n\tLast name: ");
getchar();
scanf("%[^\n]s", body->lastname);
printf("\n\tStudent number: ");
getchar();
scanf("%[^\n]s", body->studentno);
printf("\n\tCourse: ");
getchar();
scanf("%[^\n]s", body->course);
printf("\n\tE-mail address: ");
getchar();
scanf("%[^\n]s",body->email);
printf("\n\tContact number(You can use +63 and other symbol): ");
getchar();
scanf("%[^\n]s",body->contact);
if (head==NULL) //insert at beginning if without head
{
head=body;
tail=body;
tail->next=NULL;
}
else
{
while(body->lastname[i]==head->lastname[i])
{
x=strlen(body->lastname);
y=strlen(head->lastname);
if (x>y)
{
if(ctr>=y)
{
break;
}
else
{
i++;
}
}
else
if(x<=y)
{
if (ctr>=x)
{
break;
}
else
{
i++;
}
}
ctr++;
}
if (body->lastname[i]<head->lastname[i]) //insert at the beginning
{
body->next=head;
head=body;
}
else
{
if (body->lastname[i]>=tail->lastname[i]) //insert at the end
{
tail->next=body;
tail=body;
}
else
{
temp=head; //insert at the middle
while(temp!=NULL)
{
if ((body->lastname[i]>=temp->lastname[i])&&(body->lastname[i] < temp->next->lastname[i]))
{
break;
}
else
{
temp=temp->next;
}
}
body->next=temp->next;
temp->next=body;
}
}
}
do
{
printf("\n\n-> Would you like to add another record? [1 for Yes || 0 for No]: ");
scanf("%d",&choice);
switch(choice)
{
case 1:
system("cls");
add();
break;
case 0:
system("cls");
break;
default:
printf("\nThere's no such choice in the menu!\n");
break;
}if (choice!=0)
{
return;
}
}
while (choice!=0);
}
void display (void)
{
int ctr=1;
node *temp;
temp=head;
tail->next=NULL;
while (temp!=NULL)
{
printf("%d.)",ctr);
ctr++;
printf("\tNAME: \t\t%s, %s %s\n", temp->lastname,temp->firstname,temp->middlename);
printf("\tSTUDENT NO: \t%s\n", temp->studentno);
printf("\tCOURSE: \t%s\n",temp->course);
printf("\tCONTACT #: \t%s\n",temp->contact);
printf("\tE-MAIL ADDRESS: %s\n\n",temp->email);
temp=temp->next;
}
}
void del (void)
{
if (head==NULL)
{
printf("ALERT: \n\nThere are no more records to delete!\n\n");
return;
}
node *temp,*temp2,*scan;
int choice;
char num[30];
printf("\nPlease enter the STUDENT NUMBER of the student you want to delete: ");
getchar();
scanf("%[^\n]s", num);
tail->next=NULL;
temp=head;
scan=head;
while(scan!=NULL) //scan if record exists
{
if(strcmp(num,scan->studentno)==0)
{
break;
}
else
{
if(scan->next==NULL)
{
printf("\nRECORD DOES NOT EXISTS!\n\n");
free(scan);
return;
}
scan=scan->next;
}
}
if(strcmp(num,head->studentno)==0)//delete at beginning
{
//temp=head;
head=head->next;
free(temp);
}
else
{
if (strcmp(num,tail->studentno)==0)//delete at the end
{
//temp=head;
while (temp!=NULL)
{
if (temp->next==tail)
break;
else
temp=temp->next;
}
free(temp->next);
tail=temp;
tail->next=NULL;
}
else //delete at the middle
{ tail->next=NULL;
//temp=head;
while (strcmp(num,temp->next->studentno)!=0)
{
temp=temp->next;
}
temp2=temp->next;
temp->next=temp->next->next;
free(temp2);
}
}
printf("\n\nRECORD SUCCESSFULLY DELETED\n\n");
do
{
printf("\n\n-> Would you like to Delete another record? [1 for Yes || 0 for No]: ");
getchar();
scanf("%d",&choice);
switch(choice)
{
case 1:
system("cls");
del();
break;
case 0:
system("cls");
break;
default: printf("\nThere's no such choice in the menu!\n");
break;
}
}
while (choice!=0);
}
void search (void)
{
char key[40];
int choice;
int ctr=0;
node *temp;
temp=head;
tail->next=NULL;
printf("\nEnter a keyword to search (Case Sensitive). \n\nIt can be any ONE of Last name, First name, Middle name, Student number, Course,Contact or E-mail address:\n\n");
getchar();
scanf("%[^\n]s",key);
system("CLS");
while(temp!=NULL)
{
if (strcmp(key,temp->firstname)==0||strcmp(key,temp->lastname)==0||strcmp(key,temp->middlename)==0||strcmp(key,temp->course)==0||strcmp(key,temp->studentno)==0||strcmp(key,temp->contact)==0||strcmp(key,temp->email)==0)
{
printf("SEARCH RESULTS:\n");
printf("\n\tNAME: \t\t%s, %s %s\n", temp->lastname,temp->firstname,temp->middlename);
printf("\tSTUDENT NO: \t%s\n", temp->studentno);
printf("\tCOURSE: \t%s\n",temp->course);
printf("\tCONTACT #: \t%s\n",temp->contact);
printf("\tE-MAIL ADDRESS: %s\n\n",temp->email);
ctr++;
}
temp=temp->next;
}
if(ctr==0)
{
printf("SEARCH RESULTS:\n");
printf("\nNO MATCHES FOUND!\n");
}
do
{
printf("\n\n-> Would you like to search again? [1 for Yes || 0 for No]: ");
scanf("%d",&choice);
switch(choice)
{
case 1:
system("cls");
search();
break;
case 0:
system("cls");
return;
default: printf("\nThere's no such choice in the menu!\n");
break;
}
if (choice!=0)
{
return;
}
}
while (choice!=0);
}
void save(void)
{
node *temp;
temp=head;
tail->next=NULL;
if((ftry=fopen("Directory.txt","r"))!=NULL)
{
remove(ftry);
}
ftry=fopen("Directory.txt","w+");
while (temp!=NULL)
{
fprintf(ftry,"%s\n",temp->firstname);
fprintf(ftry,"%s\n",temp->middlename);
fprintf(ftry,"%s\n",temp->lastname);
fprintf(ftry,"%s\n",temp->studentno);
fprintf(ftry,"%s\n",temp->course);
fprintf(ftry,"%s\n",temp->contact);
fprintf(ftry,"%s\n\0",temp->email);
temp=temp->next;
}
fclose(ftry);
}