Untitled

 avatar
unknown
plain_text
5 months ago
15 kB
4
Indexable
//collect.c
#include "employee.h"
#include <string.h>
#include <ctype.h>

// Function to validate integer input
int validateIntegerInput() {
    int num;
    char temp;
    if (scanf("%d%c", &num, &temp) != 2 || temp != '\n') {
        while ((temp = getchar()) != '\n' && temp != EOF); // Clear input buffer
        printf("Invalid input. Please enter an integer.\n");
        return -1; // Return error code for invalid input
    }
    return num; // Return valid integer
}

// Function to validate string input (alphabetic only)
int validateStringInput(char *input, size_t size) {
    fgets(input, size, stdin);
    input[strcspn(input, "\n")] = '\0'; // Remove newline

    // Check if the string contains only alphabetic characters and spaces
    for (int i = 0; i < strlen(input); i++) {
        if (!isalpha(input[i]) && input[i] != ' ') {
            printf("Invalid input. Please enter alphabetic characters only.\n");
            return 0; // Return 0 for invalid input
        }
    }
    return 1; // Return 1 for valid input
}

// Function to collect Address information
void collectAddress(struct Address *addr) {
    printf("Enter House No: ");
    addr->houseno = validateIntegerInput();

    printf("Enter Street Name: ");
    while (!validateStringInput(addr->street, 100));

    printf("Enter City: ");
    while (!validateStringInput(addr->city, 50));

    printf("Enter Pincode: ");
    addr->pincode = validateIntegerInput();
}

void collectEmployeeInfo(struct Employee *emp) {
    emp->empname = malloc(100 * sizeof(char)); // Allocate memory for empname
    emp->designation = malloc(100 * sizeof(char)); // Allocate memory for designation

    if (emp->empname == NULL || emp->designation == NULL) {
        printf("Memory allocation failed.\n");
        exit(1);
    }

    // Validate and collect Employee ID
    printf("Enter Employee ID (integer): ");
    emp->empid = validateIntegerInput();

    // Validate and collect Employee Name
    printf("Enter Employee Name (alphabetic only): ");
    while (!validateStringInput(emp->empname, 100));

    // Validate and collect Employee Salary
    printf("Enter Employee Salary (integer): ");
    emp->esalary = validateIntegerInput();

    // Validate and collect Designation
    printf("Enter Designation (alphabetic only): ");
    while (!validateStringInput(emp->designation, 100));

    // Collect Address details
    collectAddress(&emp->address);

    employeeCount++; // Increment the employee count when a new record is collected
}

//delete.c
#include <stdio.h>
#include <stdlib.h>
#include "employee.h"

void deleteEmployee(int empid) {
    FILE *file = fopen("employees.txt", "r"); // Open file in read mode
    if (file == NULL) {
        printf("File does not exist.\n");
        return;
    }

    struct Employee emp;
    emp.empname = malloc(100 * sizeof(char)); // Allocate memory for empname
    emp.designation = malloc(100 * sizeof(char)); // Allocate memory for designation

    if (emp.empname == NULL || emp.designation == NULL) {
        printf("Memory allocation failed.\n");
        fclose(file);
        return;
    }

    FILE *tempFile = fopen("temp.txt", "w"); // Temporary file for modified data
    if (tempFile == NULL) {
        printf("Error opening temporary file.\n");
        free(emp.empname);
        free(emp.designation);
        fclose(file);
        return;
    }

    int found = 0;

    // Read employee records and copy them to temp file, excluding the one to delete
    while (fscanf(file, "%d,%99[^,],%d,%99[^,],%d,%99[^,],%99[^,],%d\n",
            &emp.empid, emp.empname, &emp.esalary, emp.designation,
            &emp.address.houseno, emp.address.street, emp.address.city, &emp.address.pincode) == 8) {
        if (emp.empid != empid) {
            fprintf(tempFile, "%d,%s,%d,%s,%d,%s,%s,%d\n",
                emp.empid, emp.empname, emp.esalary, emp.designation,
                emp.address.houseno, emp.address.street, emp.address.city, emp.address.pincode);
        } else {
            found = 1; // Set found flag
        }
    }

    fclose(file);
    fclose(tempFile);
    free(emp.empname);
    free(emp.designation);

    if (found) {
        remove("employees.txt");
        rename("temp.txt", "employees.txt");
        employeeCount--; // Decrement employee count on successful deletion
        printf("Employee deleted successfully.\n");
    } else {
        remove("temp.txt");
        printf("Employee with ID %d not found.\n", empid);
    }
}


//display.c
#include <stdio.h>
#include <stdlib.h>
#include "employee.h"

void displayAllEmployees() {
    FILE *file = fopen("employees.txt", "r"); // Open file in read mode
    if (file == NULL) {
        printf("File does not exist.\n");
        return; // Exit if the file doesn't exist
    }

    struct Employee emp;
    emp.empname = malloc(100 * sizeof(char)); // Allocate memory for empname
    emp.designation = malloc(100 * sizeof(char)); // Allocate memory for designation

    if (emp.empname == NULL || emp.designation == NULL) {
        printf("Memory allocation failed.\n");
        fclose(file);
        return;
    }

    int recordFound = 0;

    // Print table header
    printf("------------------------------------------------------------------------\n");
    printf("| %-10s | %-20s | %-10s | %-20s | %-15s |\n", "Emp ID", "Name", "Salary", "Designation", "Address");
    printf("------------------------------------------------------------------------\n");

    // Read employee records until EOF
    while (fscanf(file, "%d,%99[^,],%d,%99[^,],%d,%99[^,],%99[^,],%d\n",
            &emp.empid, emp.empname, &emp.esalary, emp.designation,
            &emp.address.houseno, emp.address.street, emp.address.city, &emp.address.pincode) == 8) {
        recordFound = 1; // Set flag if any record exists
        printf("| %-10d | %-20s | %-10d | %-20s | %d, %s, %s, %d |\n",
            emp.empid, emp.empname, emp.esalary, emp.designation,
            emp.address.houseno, emp.address.street, emp.address.city, emp.address.pincode);
    }

    if (!recordFound) {
        printf("| %-10s | %-20s | %-10s | %-20s | %-15s |\n", "No records", "", "", "", "");
    }

    printf("------------------------------------------------------------------------\n");

    free(emp.empname); // Free allocated memory
    free(emp.designation); // Free allocated memory
    fclose(file); // Close the file
}


#ifndef EMPLOYEE_H
#define EMPLOYEE_H

#include <stdio.h>
#include <stdlib.h>

struct Address {
    int houseno;
    char street[100];
    char city[50];
    int pincode;
};

struct Employee {
    int empid;
    char *empname;      // Pointer for employee name
    int esalary;
    char *designation;  // Pointer for designation
    struct Address address; // Employee address
};

// Declare the employeeCount variable as extern
extern int employeeCount;

void collectEmployeeInfo(struct Employee *emp);
void searchEmployee(int empid);
void modifyEmployee(int empid);
void deleteEmployee(int empid);
void displayAllEmployees();
void saveToFile(struct Employee *emp);

#endif

//main.c

#include <stdio.h>
#include <stdlib.h>
#include "employee.h"

// Define the employeeCount variable here
int employeeCount = 0;

// Function to initialize employeeCount from the file
void initializeEmployeeCount() {
    FILE *file = fopen("employees.txt", "rb");
    if (file == NULL) {
        employeeCount = 0;
        return;
    }

    struct Employee emp;
    while (fread(&emp, sizeof(struct Employee), 1, file) == 1) {
        employeeCount++;
    }

    fclose(file);
}

int main() {
    initializeEmployeeCount(); // Initialize employeeCount at the start

    int choice;
    struct Employee emp;
    while (1) {
        printf("\n1. Collect Employee Info\n2. Search Employee\n3. Modify Employee\n4. Delete Employee\n5. Display All Employees\n6. Exit\n");
        printf("Enter your choice: ");
        scanf("%d", &choice);
        getchar(); // Clear the newline from input buffer

        switch (choice) {
            case 1:
                collectEmployeeInfo(&emp);
                saveToFile(&emp); // Save employee data to the file
                employeeCount++; // Increment employee count
                break;
            case 2:
                if (employeeCount == 0) {
                    printf("No records found.\n");
                    break;
                }
                {
                    int searchId;
                    printf("Enter Employee ID to search: ");
                    scanf("%d", &searchId);
                    searchEmployee(searchId);
                }
                break;
            case 3:
                if (employeeCount == 0) {
                    printf("No records found.\n");
                    break;
                }
                {
                    int modifyId;
                    printf("Enter Employee ID to modify: ");
                    scanf("%d", &modifyId);
                    modifyEmployee(modifyId);
                }
                break;
            case 4:
                if (employeeCount == 0) {
                    printf("No records found.\n");
                    break;
                }
                {
                    int deleteId;
                    printf("Enter Employee ID to delete: ");
                    scanf("%d", &deleteId);
                    deleteEmployee(deleteId);
                }
                break;
            case 5:
                displayAllEmployees();
                break;
            case 6:
                exit(0);
            default:
                printf("Invalid choice. Please try again.\n");
        }
    }
    return 0;
}



//modify.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "employee.h"

int validateIntegerInput();
int validateStringInput(char *input, size_t size);
void collectAddress(struct Address *addr);

void modifyEmployee(int empid) {
    FILE *file = fopen("employees.txt", "r+"); // Open file in read/update mode
    if (file == NULL) {
        printf("File does not exist.\n");
        return;
    }

    struct Employee emp;
    emp.empname = malloc(100 * sizeof(char)); // Allocate memory for empname
    emp.designation = malloc(100 * sizeof(char)); // Allocate memory for designation

    if (emp.empname == NULL || emp

.designation == NULL) {
        printf("Memory allocation failed.\n");
        fclose(file);
        return;
    }

    FILE *tempFile = fopen("temp.txt", "w"); // Temporary file for modified data
    if (tempFile == NULL) {
        printf("Error opening temporary file.\n");
        free(emp.empname);
        free(emp.designation);
        fclose(file);
        return;
    }

    int found = 0;

    // Read employee records
    while (fscanf(file, "%d,%99[^,],%d,%99[^,],%d,%99[^,],%99[^,],%d\n",
            &emp.empid, emp.empname, &emp.esalary, emp.designation,
            &emp.address.houseno, emp.address.street, emp.address.city, &emp.address.pincode) == 8) {
        if (emp.empid == empid) {
            printf("Employee found. What do you want to modify?\n");
            printf("1. Name\n2. Salary\n3. Designation\n4. Address\n");
            int choice = validateIntegerInput();

            switch (choice) {
                case 1:
                    printf("Enter new name: ");
                    while (!validateStringInput(emp.empname, 100));
                    break;
                case 2:
                    printf("Enter new salary: ");
                    emp.esalary = validateIntegerInput();
                    break;
                case 3:
                    printf("Enter new designation: ");
                    while (!validateStringInput(emp.designation, 100));
                    break;
                case 4:
                    printf("Enter new address details:\n");
                    collectAddress(&emp.address);
                    break;
                default:
                    printf("Invalid choice. No changes made.\n");
            }
            found = 1;
        }
        fprintf(tempFile, "%d,%s,%d,%s,%d,%s,%s,%d\n",
            emp.empid, emp.empname, emp.esalary, emp.designation,
            emp.address.houseno, emp.address.street, emp.address.city, emp.address.pincode);
    }

    fclose(file);
    fclose(tempFile);
    free(emp.empname);
    free(emp.designation);

    if (found) {
        remove("employees.txt");
        rename("temp.txt", "employees.txt");
        printf("Employee details updated successfully.\n");
    } else {
        remove("temp.txt");
        printf("Employee with ID %d not found.\n", empid);
    }
}

//save.c
#include <stdio.h>
#include "employee.h"

#define FILENAME "employees.txt"

void saveToFile(struct Employee *emp) {
    FILE *file = fopen(FILENAME, "a"); // Open in append mode
    if (file) {
        fprintf(file, "%d,%s,%d,%s,%d,%s,%s,%d\n",
            emp->empid, emp->empname, emp->esalary, emp->designation,
            emp->address.houseno, emp->address.street, emp->address.city, emp->address.pincode);
        fclose(file);
    } else {
        printf("Error opening file for writing.\n");
    }
}

//search.c
#include <stdio.h>
#include <stdlib.h>
#include "employee.h"

void searchEmployee(int empid) {
    FILE *file = fopen("employees.txt", "r"); // Open file in read mode
    if (file == NULL) {
        printf("File does not exist.\n");
        return; // Exit if the file doesn't exist
    }

    struct Employee emp;
    emp.empname = malloc(100 * sizeof(char)); // Allocate memory for empname
    emp.designation = malloc(100 * sizeof(char)); // Allocate memory for designation

    if (emp.empname == NULL || emp.designation == NULL) {
        printf("Memory allocation failed.\n");
        fclose(file);
        return;
    }

    int found = 0;

    // Read employee records until EOF
    while (fscanf(file, "%d,%99[^,],%d,%99[^,],%d,%99[^,],%99[^,],%d\n",
            &emp.empid, emp.empname, &emp.esalary, emp.designation,
            &emp.address.houseno, emp.address.street, emp.address.city, &emp.address.pincode) == 8) {
        if (emp.empid == empid) {
            printf("Employee ID: %d\n", emp.empid);
            printf("Employee Name: %s\n", emp.empname);
            printf("Employee Salary: %d\n", emp.esalary);
            printf("Designation: %s\n", emp.designation);
            printf("Address: %d, %s, %s, %d\n",
                emp.address.houseno, emp.address.street, emp.address.city, emp.address.pincode);
            found = 1; // Set found flag
            break;
        }
    }

    if (!found) {
        printf("Employee with ID %d not found.\n", empid);
    }

    free(emp.empname); // Free allocated memory
    free(emp.designation); // Free allocated memory
    fclose(file); // Close the file
}
Editor is loading...
Leave a Comment