From 9549efc60b2d6cb18190625d767d81d8ecb765d5 Mon Sep 17 00:00:00 2001 From: Sirin Puenggun Date: Fri, 14 Jul 2023 21:35:32 +0700 Subject: [PATCH] Add practice project --- contact.c | 132 ++++++++++++++++++++++++++++++++++ contact.h | 21 ++++++ contact_management_system.exe | Bin 0 -> 60003 bytes main.c | 54 ++++++++++++++ utils.c | 17 +++++ utils.h | 9 +++ 6 files changed, 233 insertions(+) create mode 100644 contact.c create mode 100644 contact.h create mode 100644 contact_management_system.exe create mode 100644 main.c create mode 100644 utils.c create mode 100644 utils.h diff --git a/contact.c b/contact.c new file mode 100644 index 0000000..a4d96cb --- /dev/null +++ b/contact.c @@ -0,0 +1,132 @@ +// File : contact.c +// Description : Implement functions defined in contact.h + +#include +#include +#include "contact.h" + +void addContact(Contact contacts[], int *numContacts) { + if (*numContacts >= MAX_CONTACTS) { + printf("Contact list is full.\n"); + return; + } + + Contact newContact; + printf("Enter name: "); + fgets(newContact.name, MAX_NAME_LENGTH, stdin); + newContact.name[strcspn(newContact.name, "\n")] = '\0'; + + printf("Enter phone number: "); + fgets(newContact.phone, MAX_PHONE_LENGTH, stdin); + newContact.phone[strcspn(newContact.phone, "\n")] = '\0'; + + printf("Enter email address: "); + fgets(newContact.email, MAX_EMAIL_LENGTH, stdin); + newContact.email[strcspn(newContact.email, "\n")] = '\0'; + + contacts[*numContacts] = newContact; + (*numContacts)++; + printf("Contact added successfully.\n"); +} + +void displayContacts(Contact contacts[], int numContacts) { + if (numContacts == 0) { + printf("Contact list is empty.\n"); + return; + } + + printf("Contacts:\n"); + for (int i = 0; i < numContacts; i++) { + printf("Name: %s\n", contacts[i].name); + printf("Phone: %s\n", contacts[i].phone); + printf("Email: %s\n", contacts[i].email); + printf("--------------------\n"); + } +} + +void searchContacts(Contact contacts[], int numContacts, char *searchTerm) { + if (numContacts == 0) { + printf("Contact list is empty.\n"); + return; + } + + printf("Search results for '%s':\n", searchTerm); + int found = 0; + for (int i = 0; i < numContacts; i++) { + if (strstr(contacts[i].name, searchTerm) != NULL || + strstr(contacts[i].phone, searchTerm) != NULL || + strstr(contacts[i].email, searchTerm) != NULL) { + printf("Name: %s\n", contacts[i].name); + printf("Phone: %s\n", contacts[i].phone); + printf("Email: %s\n", contacts[i].email); + printf("--------------------\n"); + found = 1; + } + } + + if (!found) { + printf("No matching contacts found.\n"); + } +} + +void updateContact(Contact contacts[], int numContacts, char *searchTerm) { + if (numContacts == 0) { + printf("Contact list is empty.\n"); + return; + } + + int found = 0; + for (int i = 0; i < numContacts; i++) { + if (strstr(contacts[i].name, searchTerm) != NULL || + strstr(contacts[i].phone, searchTerm) != NULL || + strstr(contacts[i].email, searchTerm) != NULL) { + printf("Contact found. Enter new details:\n"); + + printf("Enter name: "); + fgets(contacts[i].name, MAX_NAME_LENGTH, stdin); + contacts[i].name[strcspn(contacts[i].name, "\n")] = '\0'; + + printf("Enter phone number: "); + fgets(contacts[i].phone, MAX_PHONE_LENGTH, stdin); + contacts[i].phone[strcspn(contacts[i].phone, "\n")] = '\0'; + + printf("Enter email address: "); + fgets(contacts[i].email, MAX_EMAIL_LENGTH, stdin); + contacts[i].email[strcspn(contacts[i].email, "\n")] = '\0'; + + printf("Contact updated successfully.\n"); + found = 1; + break; + } + } + + if (!found) { + printf("No matching contacts found.\n"); + } +} + +void deleteContact(Contact contacts[], int *numContacts, char *searchTerm) { + if (numContacts == 0) { + printf("Contact list is empty.\n"); + return; + } + + int found = 0; + for (int i = 0; i < *numContacts; i++) { + if (strstr(contacts[i].name, searchTerm) != NULL || + strstr(contacts[i].phone, searchTerm) != NULL || + strstr(contacts[i].email, searchTerm) != NULL) { + for (int j = i; j < *numContacts - 1; j++) { + contacts[j] = contacts[j + 1]; + } + (*numContacts)--; + printf("Contact deleted successfully.\n"); + found = 1; + break; + } + } + + if (!found) { + printf("No matching contacts found.\n"); + } +} diff --git a/contact.h b/contact.h new file mode 100644 index 0000000..f14c798 --- /dev/null +++ b/contact.h @@ -0,0 +1,21 @@ +#ifndef CONTACT_H +#define CONTACT_H + +#define MAX_NAME_LENGTH 50 +#define MAX_PHONE_LENGTH 15 +#define MAX_EMAIL_LENGTH 50 +#define MAX_CONTACTS 100 + +typedef struct { + char name[MAX_NAME_LENGTH]; + char phone[MAX_PHONE_LENGTH]; + char email[MAX_EMAIL_LENGTH]; +} Contact; + +void addContact(Contact contacts[], int *numContacts); +void displayContacts(Contact contacts[], int numContacts); +void searchContacts(Contact contacts[], int numContacts, char *searchTerm); +void updateContact(Contact contacts[], int numContacts, char *searchTerm); +void deleteContact(Contact contacts[], int *numContacts, char *searchTerm); + +#endif diff --git a/contact_management_system.exe b/contact_management_system.exe new file mode 100644 index 0000000000000000000000000000000000000000..a0f41b68f42e5e17aa3fa4e7072487f7d723f131 GIT binary patch literal 60003 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 literal 0 HcmV?d00001 diff --git a/main.c b/main.c new file mode 100644 index 0000000..3c9887b --- /dev/null +++ b/main.c @@ -0,0 +1,54 @@ +#include +#include +#include +#include "contact.h" +#include "utils.h" + +int main() { + Contact contacts[MAX_CONTACTS]; + int numContacts = 0; + int choice; + char searchTerm[MAX_NAME_LENGTH]; + + while (1) { + printMenu(); + printf("Enter your choice: "); + scanf("%d", &choice); + clearInputBuffer(); + + switch (choice) { + case 1: + addContact(contacts, &numContacts); + break; + case 2: + displayContacts(contacts, numContacts); + break; + case 3: + printf("Enter search term: "); + fgets(searchTerm, MAX_NAME_LENGTH, stdin); + searchTerm[strcspn(searchTerm, "\n")] = '\0'; + searchContacts(contacts, numContacts, searchTerm); + break; + case 4: + printf("Enter search term: "); + fgets(searchTerm, MAX_NAME_LENGTH, stdin); + searchTerm[strcspn(searchTerm, "\n")] = '\0'; + updateContact(contacts, numContacts, searchTerm); + break; + case 5: + printf("Enter search term: "); + fgets(searchTerm, MAX_NAME_LENGTH, stdin); + searchTerm[strcspn(searchTerm, "\n")] = '\0'; + deleteContact(contacts, &numContacts, searchTerm); + break; + case 6: + printf("Exiting program.\n"); + exit(0); + default: + printf("Invalid choice. Please try again.\n"); + break; + } + } + + return 0; +} diff --git a/utils.c b/utils.c new file mode 100644 index 0000000..7713245 --- /dev/null +++ b/utils.c @@ -0,0 +1,17 @@ +#include +#include "utils.h" + +void clearInputBuffer() { + int c; + while ((c = getchar()) != '\n' && c != EOF) {} +} + +void printMenu() { + printf("\nContact Management System\n"); + printf("1. Add contact\n"); + printf("2. Display all contacts\n"); + printf("3. Search contact\n"); + printf("4. Update contact\n"); + printf("5. Delete contact\n"); + printf("6. Exit\n"); +} diff --git a/utils.h b/utils.h new file mode 100644 index 0000000..b39a8b3 --- /dev/null +++ b/utils.h @@ -0,0 +1,9 @@ +#ifndef UTILS_H +#define UTILS_H + +#define MAX_CONTACTS 100 + +void clearInputBuffer(); +void printMenu(); + +#endif