Contact Management System In C

The foundation of a contact management system lies in the concept of generating individual or group contact entries, inputting and modifying this information. In this platform, individuals can securely and efficiently input their contact details. The system simplifies the process of maintaining records for each individual. The entire endeavor was crafted using the "C" programming language, incorporating different variables and strings. Users will discover this compact project user-friendly and comprehensible. It constitutes a basic terminal application developed in C, devoid of any graphical user interface components.

About the System

  • Add new contacts by entering details such as name, phone, address and email.
  • Show all contacts: displays a list of information about each contact from the file where they are stored.
  • Contacts can be searched using their name and phone number.
  • Edit Contacts: When adding contacts, you can change the name, phone number, address and email.
  • Contacts are deleted by deleting them from the file.
  • Add new contacts by entering details such as name, phone, address and email.
  • Name each contact: includes each contact in the file along with their individual contact information.
  • Contacts can be searched using their name and phone number.
  • Edit Contacts: When adding contacts, you can change the name, phone number, address and email.
  • Contacts are deleted by deleting them from the file.
  • Program Breakdown

    Example
    
    struct contact
    {
    	long ph ;
    	char name [ 20 ] , add [ 20 ] , email [ 30 ] ;
    } list ;
    

Created a structure for our contact list.

Example

system ( " cls " ) ; / * * * * * * * * Main menu * * * * * * * * * * * /

	printf ( " \ n \ t * * * * Welcome to Contact Management System * * * * " ) ;

	printf ( " \ n \ n \ n \ t \ t \ t MAIN MENU \ n \ t \ t = = = = = = = = = =\ n \ t \ t [ 1 ] Add a new Contact \ n \ t \ t [ 2 ] List all Contacts \ n \ t \ t [ 3 ] Search for contact \ n \ t \ t [ 4 ] Edit a Contact \ n \ t \ t [ 5 ] Delete a Contact \ n \ t \ t [ 0 ] Exit \ n \ t \ t = = = = = = = = = = = = \ n \ t \ t " ) ;
	printf ( " Enter the choice : " ) ;
	scanf ( " % d " , &ch ) ;

The driver code resembles the code provided above, responsible for presenting the primary menu of the contact management system in C. This menu offers functionalities such as adding a new contact, displaying all contacts, searching for contacts, modifying a contact, deleting a contact, and exiting the system.

Example

case 1 :
		system ( " cls " ) ;
		fp = fopen ( " contact . dll " , " a " ) ;
		for ( ; ; ) 
		{
			fflush ( stdin ) ;
			printf ( " To exit enter blank space in the name input \ n Name ( Use identical ) : " ) ;
			scanf ( " % [ ^ \ n ] " , & list . name ) ;
			if ( stricmp ( list . name , " " ) = = 0 | | stricmp ( list . name , " " ) = = 0 )
				break ;
			fflush ( stdin ) ;
			printf ( " Phone : " ) ;
			scanf ( " % l d " , & list . ph ) ;
			fflush ( stdi ) ;
			printf ( " address : " ) ;
			scanf ( " % [ ^ \ n ] " , & list . add ) ;
			fflush ( stdin ) ;
			printf ( " email address : " ) ;
			gets ( list . email ) ;
			printf ( " \ n " ) ;
			fwrite ( & list , sizeof ( list ) , 1 , fp ) ;
		}
		fclose ( fp ) ;
		break ;

If the user chooses option 1, which is to include a new contact, the code mentioned above will be executed.

Example

case 2 :
		system ( " cls " ) ;
		printf ( " \ n \ t \ t = = = = = = = = = = = = = = = \ n \ t \ t \ t LIST OF CONTACTS \ n \ t \ t = = = = = = = = = = = = = = = \ n \ n Name \ t \ t Phone No \ t Address \ t \ t E-mail ad.\n= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = \ n \ n " ) ;
		for ( i = 97 ; i < = 122 ; i = i + 1 )
		{
			fp = fopen ( " contact . dll " , " r " ) ;
			fflush ( stdin ) ;
			found = 0 ;
			while ( fread ( & list , sizeof ( list ) , 1 , fp ) = = 1 )
			{
				if ( list . name [ 0 ] = = i | | list . name [ 0 ] = = i - 32 )
				{
					printf ( " \ n Name \ t : % s \ n Phone \ t : % l d \ n Address \ t : % s \ n Email \ t : % s \ n " , list . name ,
						   list . ph , list . add , list . email ) ;
					found + + ;
				}
			}
			if ( found ! = 0 )
			{
printf ( " = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = [ % c ] - ( % d ) \ n \ n", i - 32 , found ) ;
				getch ( ) ;
			}
			fclose ( fp ) ;
		}
		break ;

The code above is employed to showcase the list of contacts inputted by the user.

Example

case 3 :
		system ( " cls " ) ;
		do
		{
			found = 0 ;
			printf ( " \ n \ n \ t . . : : CONTACT SEARCH \ n \ t = = = = = = = = = = = = = = = = \ n \ t . . : : Name of contact to search : " ) ;
			fflush ( stdin ) ;
			scanf ( " % [ ^ \ n ] " , & query ) ;
			l = strlen ( query ) ;
			fp = fopen ( " contact . dll " , " r " ) ;
			system ( " cls " ) ;
			printf ( " \ n \ n . . : : Search result for ' % s ' \ n = = = = = = = = = = = = = = = = = = = = = = = = = = \ n " , query ) ;
			while ( fread ( & list , sizeof ( list ) , 1 , fp ) = = 1 )
			{
				for ( i = 0 ; i < = l ; i + + )
					name [ i ] = list . name [ i ] ;
				name [ l ] = ' \ 0 ' ;
				if ( stricmp ( name , query ) = = 0 )
				{
					printf ( " \ n . . : : Name \ t : % s \ n . . : : Phone \ t : % l d \ n . . : : Address \ t : % s \ n . . : : Email \ t :  % s \ n " , list . name , list . ph , list . add , list . email ) ;
					found + + ;
					if ( found % 4 = = 0 )
					{
						printf ( " . . : : Press any key to continue... " ) ;
						getch ( ) ; 
					}
				}
			}
			if ( found = = 0 )
				printf ( " \ n . . : : No match found! " ) ;
			else
				printf ( " \ n . . : : % d match ( s ) found ! " , found ) ;
			fclose ( fp ) ;
			printf ( " \ n . . : : Try again ? \ n \ n \ t [ 1 ] Yes \ t \ t [ 0 ] No \ n \ t " ) ;
			scanf ( " % d " , & ch ) ;
		} while ( ch = = 1 ) ;
		break ;

If a user intends to look up a contact, the aforementioned code will be triggered.

Example

case 4 :
		system ( " cls " ) ;

		fp = fopen ( " contact . dll " , " r " ) ;

		ft = fopen ( " temp . dat " , " w " ) ;

		fflush ( stdin ) ;

		printf ( " . . : : Edit contact \ n = = = = = = = = = = = = = = = = = = = = = \ n \ n \ t . . : : Enter the name of contact to edit : " ) ;

		scanf ( " % [ ^ \ n ] " , name ) ;

		while ( fread ( & list , sizeof ( list ) , 1 , fp ) = = 1 )

		{

			if ( stricmp ( name , list . name ) ! = 0 )

				fwrite ( & list , sizeof ( list ) , 1 , ft ) ;
		}

		fflush ( stdin ) ;

		printf ( " \ n \ n . . : : Editing ' % s ' \ n \ n " ,  name ) ;

		printf ( " . . : : Name ( Use identical ) : " ) ;

		scanf ( " % [ ^ \ n ] " , & list . name ) ;

		fflush ( stdin ) ;

		printf ( " . . : : Phone : " ) ;

		scanf ( " % l d " , & list . ph ) ;

		fflush ( stdin ) ;

		printf ( " . . : : address : " ) ;

		scanf ( " % [ ^ \ n ] " , & list . add ) ;

		fflush ( stdin ) ;

		printf ( " . . : : email address : " ) ;

		gets ( list . email ) ;

		printf ( " \ n " ) ;

		fwrite ( & list , sizeof ( list ) , 1 , ft ) ;

		fclose ( fp ) ;

		fclose ( ft ) ;

		remove ( " contact . dll " ) ;

		rename ( " temp . dat " , " contact . dll " ) ;

		break ;

If a user intends to modify an existing contact, the aforementioned code will be executed.

Example

case 5 :
		system ( " cls " ) ;
		fflush ( stdin ) ;
		printf ( " \ n \ n \ t . . : : DELETE A CONTACT \ n \ t = = = = = = = = = = = = = = = = \ n \ t . . : : Enter the name of contact to delete : " ) ;
		scanf ( " % [ ^ \ n ] " , & name ) ;
		fp = fopen ( " contact . dll " , " r " ) ;
		ft = fopen ( " temp . dat " , " w " ) ;
		while ( fread ( & list , sizeof ( list ) , 1 , fp ) ! = 0 )
			if ( stricmp ( name , list . name ) ! = 0 )
				fwrite ( & list , sizeof ( list ) , 1 , ft ) ;
		fclose ( fp ) ;
		fclose ( ft ) ;
		remove ( " contact . dll " ) ;
		rename ( " temp . dat " , " contact . dll " ) ;
		break ;
	default :
		printf ( " Invalid choice " ) ;
		break ;
	}
	printf ( " \ n \ n \ n . . : : Enter the Choice : \ n \ n \ t [ 1 ] Main Menu \ t \ t [ 0 ] Exit \ n " ) ;
	scanf ( " % d " , & ch ) ;
	switch ( ch )
	{
	case 1 :
		goto main ;
	case 0 :
		break ;
	default :
		printf ( " Invalid choice " ) ;
		break ;
	} 
	return 0 ;
}

If a user wishes to remove a contact from the list, the code above will be executed.

Program for Contact Management System in C

Example

#include <stdio.h>

#include <conio.h>

#include <string.h>

#include <process.h>

#include <stdlib.h>

#include <dos.h>

struct contact

{

	long ph;

	char name[20], add[20], email[30];

} list;

char query[20], name[20];

FILE *fp, *ft;

int i, n, ch, l, found;

int main()

{

main:

	system("cls"); /* ************Main menu ***********************  */

	printf("\n\t **** Welcome to Contact Management System ****");

	printf("\n\n\n\t\t\tMAIN MENU\n\t\t=====================\n\t\t[1] Add a new Contact\n\t\t[2] List all Contacts\n\t\t[3] Search for contact\n\t\t[4] Edit a Contact\n\t\t[5] Delete a Contact\n\t\t[0] Exit\n\t\t=================\n\t\t");

	printf("Enter the choice:");

	scanf("%d", &ch);

	switch (ch)

	{

	case 0:

		printf("\n\n\t\tAre you sure you want to exit?");

		break;

		/* *********************Add new contacts************  */

	case 1:

		system("cls");

		fp = fopen("contact.dll", "a");

		for (;;)

		{
			fflush(stdin);

			printf("To exit enter blank space in the name input\nName (Use identical):");

			scanf("%[^\n]", &list.name);

			if (stricmp(list.name, "") == 0 || stricmp(list.name, " ") == 0)

				break;

			fflush(stdin);

			printf("Phone:");

			scanf("%ld", &list.ph);

			fflush(stdin);

			printf("address:");

			scanf("%[^\n]", &list.add);

			fflush(stdin);

			printf("email address:");

			gets(list.email);

			printf("\n");

			fwrite(&list, sizeof(list), 1, fp);
		}

		fclose(fp);

		break;

/* * * * * * * * * * * * * * * * *  *list of contacts* * * * * * * * * * * * * * * * * * * * * */
	case 2:
		system("cls");

		printf("\n\t\t================================\n\t\t\tLIST OF CONTACTS\n\t\t================================\n\nName\t\tPhone No\t    Address\t\tE-mail ad.\n=================================================================\n\n");

		for (i = 97; i <= 122; i = i + 1)

		{

			fp = fopen("contact.dll", "r");

			fflush(stdin);

			found = 0;

			while (fread(&list, sizeof(list), 1, fp) == 1)

			{

				if (list.name[0] == i || list.name[0] == i - 32)

				{

					printf("\nName\t: %s\nPhone\t: %ld\nAddress\t: %s\nEmail\t: %s\n", list.name,

						   list.ph, list.add, list.email);

					found++;
				}
			}

			if (found != 0)

			{
				printf("=========================================================== [%c]-(%d)\n\n", i - 32, found);

				getch();
			}

			fclose(fp);
		}

		break;

		/* *******************search contacts**********************  */

	case 3:

		system("cls");

		do

		{

			found = 0;

			printf("\n\n\t..::CONTACT SEARCH\n\t===========================\n\t..::Name of contact to search: ");

			fflush(stdin);

			scanf("%[^\n]", &query);

			l = strlen(query);

			fp = fopen("contact.dll", "r");

			system("cls");

			printf("\n\n..::Search result for '%s' \n===================================================\n", query);

			while (fread(&list, sizeof(list), 1, fp) == 1)

			{

				for (i = 0; i <= l; i++)

					name[i] = list.name[i];

				name[l] = '\0';

				if (stricmp(name, query) == 0)

				{

					printf("\n..::Name\t: %s\n..::Phone\t: %ld\n..::Address\t: %s\n..::Email\t: %s\n", list.name, list.ph, list.add, list.email);

					found++;

					if (found % 4 == 0)

					{

						printf("..::Press any key to continue...");

						getch();
					}
				}
			}

			if (found == 0)

				printf("\n..::No match found!");

			else

				printf("\n..::%d match(s) found!", found);

			fclose(fp);

			printf("\n ..::Try again?\n\n\t[1] Yes\t\t[0] No\n\t");

			scanf("%d", &ch);

		} while (ch == 1);

		break;

		/* *********************edit contacts************************/

	case 4:

		system("cls");

		fp = fopen("contact.dll", "r");

		ft = fopen("temp.dat", "w");

		fflush(stdin);

		printf("..::Edit contact\n===============================\n\n\t..::Enter the name of contact to edit:");

		scanf("%[^\n]", name);

		while (fread(&list, sizeof(list), 1, fp) == 1)

		{

			if (stricmp(name, list.name) != 0)

				fwrite(&list, sizeof(list), 1, ft);
		}

		fflush(stdin);

		printf("\n\n..::Editing '%s'\n\n", name);

		printf("..::Name(Use identical):");

		scanf("%[^\n]", &list.name);

		fflush(stdin);

		printf("..::Phone:");

		scanf("%ld", &list.ph);

		fflush(stdin);

		printf("..::address:");

		scanf("%[^\n]", &list.add);

		fflush(stdin);

		printf("..::email address:");

		gets(list.email);

		printf("\n");

		fwrite(&list, sizeof(list), 1, ft);

		fclose(fp);

		fclose(ft);

		remove("contact.dll");

		rename("temp.dat", "contact.dll");

		break;
/*  * * * * * * * * * * * * * * * * * * * * delete contacts * * * * * * * * * * * * * * * * * * /

	case 5:

		system("cls");

		fflush(stdin);

		printf("\n\n\t..::DELETE A CONTACT\n\t==========================\n\t..::Enter the name of contact to delete:");

		scanf("%[^\n]", &name);

		fp = fopen("contact.dll", "r");

		ft = fopen("temp.dat", "w");

		while (fread(&list, sizeof(list), 1, fp) != 0)

			if (stricmp(name, list.name) != 0)

				fwrite(&list, sizeof(list), 1, ft);

		fclose(fp);

		fclose(ft);

		remove("contact.dll");

		rename("temp.dat", "contact.dll");

		break;

	default:

		printf("Invalid choice");

		break;
	}

	printf("\n\n\n..::Enter the Choice:\n\n\t[1] Main Menu\t\t[0] Exit\n");

	scanf("%d", &ch);

	switch (ch)

	{

	case 1:

		goto main;

	case 0:

		break;

	default:

		printf("Invalid choice");

		break;
	}

	return 0;
}

OUTPUT:

Output

**** Welcome to Contact Management System ****


                        MAIN MENU
                =====================
                [1] Add a new Contact
                [2] List all Contacts
                [3] Search for contact
                [4] Edit a Contact
                [5] Delete a Contact
                [0] Exit
                = = = = = = = = = = = = = = = = = 
                Enter the choice:
To exit enter blank space in the name input
Name (Use identical):Vikas
Phone:123456789
address:A block
email address:[email protected]To exit enter blank space in the name input
Name (Use identical):Vivan
Phone:546738546
address:C Block
email address:[email protected]To exit enter blank space in the name input
Name (Use identical):

..::Enter the Choice:

        [1] Main Menu           [0] Exit
1
      
    = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 
                        LIST OF CONTACTS
    = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
Name            Phone No            Address             E-mail ad.
   = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 
Name    : Vikas
Phone   : 123456789
Address : A block
Email   :[email protected]Name    : Vivan
Phone   : 546738546
Address : C Block
Email   :[email protected]= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =  [ V ] - ( 2 )
. . : : Search result for 'Vikas'
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 
. . : : Name        : Vikas
. . : : Phone       : 123456789
. . : : Address     : A block
. . : : Email         :[email protected]. . : : 1 match(s) found!
. . : : Try again?
        [1] Yes         [0] No
. . : : Search result for 'Vivan'
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 
. . : : Name        : Vivan
. . : : Phone       : 546738546
. . : : Address     : C Block
. . : : Email       :[email protected]. . : : 1 match(s) found!
. . : : Try again?

        [1] Yes         [0] No
. . : : DELETE A CONTACT
= = = = = = = = = = = = = = = = = =
. . : : Enter the name of contact to delete:Vikas

Input Required

This code uses input(). Please provide values below: