0% found this document useful (0 votes)
27 views9 pages

#Include Iostream 2

The document contains code for an employee management system with functions like adding, viewing, updating employees. It reads and writes data to a binary file and has functions for common tasks like calculating average salary, sorting by salary, and finding minimum and maximum salaries.

Uploaded by

rivor41640
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
27 views9 pages

#Include Iostream 2

The document contains code for an employee management system with functions like adding, viewing, updating employees. It reads and writes data to a binary file and has functions for common tasks like calculating average salary, sorting by salary, and finding minimum and maximum salaries.

Uploaded by

rivor41640
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 9

#include <iostream>

#include <fstream>
#include <iomanip>
#include <cstdlib>
#include <cstring>
#include <limits>

using namespace std;

const char DATA_FILE[] = "employee_data.txt";

struct Employee {
int id;
char name[50];
double salary;
int leaveBalance;
double rating;
int daysPresent; // New field for employee attendance
};

// Function prototypes
void displayMenu();
void addEmployee();
void viewAllEmployees();
void searchEmployeeByID();
void updateEmployeeSalary();
void deleteEmployee();
void calculateAverageSalary();
void sortEmployeesBySalary();
void displayHighestLowestSalary();
void applyForLeave();
void rateEmployee();
void markEmployeeAttendance();

int main() {
int choice;

do {
displayMenu();
cin >> choice;
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // Clear input buffer

switch (choice) {
case 1:
addEmployee();
break;
case 2:
viewAllEmployees();
break;
case 3:
searchEmployeeByID();
break;
case 4:
updateEmployeeSalary();
break;
case 5:
deleteEmployee();
break;
case 6:
calculateAverageSalary();
break;
case 7:
sortEmployeesBySalary();
break;
case 8:
displayHighestLowestSalary();
break;
case 9:
applyForLeave();
break;
case 10:
rateEmployee();
break;
case 11:
markEmployeeAttendance();
break;
case 12:
cout << "Exiting program. Goodbye!" << endl;
break;
default:
cout << "Invalid choice. Please try again." << endl;
}
} while (choice != 12);

return 0;
}

// Rest of the code remains unchanged

void displayMenu() {
cout << "1. Add Employee" << endl;
cout << "2. View All Employees" << endl;
cout << "3. Search Employee by ID" << endl;
cout << "4. Update Employee Salary" << endl;
cout << "5. Delete Employee" << endl;
cout << "6. Calculate Average Salary" << endl;
cout << "7. Sort Employees by Salary" << endl;
cout << "8. Display Highest and Lowest Salary" << endl;
cout << "9. Apply for Leave" << endl;
cout << "10. Rate Employee" << endl;
cout << "11. Mark Employee Attendance" << endl;
cout << "12. Exit" << endl;
cout << "Enter your choice: ";
}

void addEmployee() {
// Your existing code for addEmployee function
}

void viewAllEmployees() {
ifstream inFile(DATA_FILE, ios::binary);

if (!inFile) {
cerr << "Error opening file for reading." << endl;
return;
}
Employee emp;

cout << left << setw(10) << "ID" << setw(20) << "Name" << setw(10) << "Salary"
<< setw(15) << "Leave Balance"
<< setw(15) << "Rating" << setw(20) << "Days Present" << endl;
cout << setfill('-') << setw(80) << "" << setfill(' ') << endl;

while (inFile.read(reinterpret_cast<char*>(&emp), sizeof(Employee))) {


cout << left << setw(10) << "ID: " << emp.id << endl
<< setw(20) << "Name: " << emp.name << endl
<< setw(10) << "Salary: " << emp.salary << endl
<< setw(15) << "Leave Balance: " << emp.leaveBalance << endl
<< setw(15) << "Rating: " << emp.rating << endl
<< setw(20) << "Days Present: " << emp.daysPresent << endl;
cout << setfill('-') << setw(80) << "" << setfill(' ') << endl;
}

inFile.close(); // Close the file at the end of the function


}

void searchEmployeeByID() {
ifstream inFile(DATA_FILE, ios::binary);

if (!inFile) {
cerr << "Error opening file for reading." << endl;
return;
}

int searchID;
cout << "Enter employee ID to search: ";
cin >> searchID;

Employee emp;
bool found = false;

while (inFile.read(reinterpret_cast<char*>(&emp), sizeof(Employee))) {


if (emp.id == searchID) {
cout << "Employee found:" << endl;
cout << "ID: " << emp.id << ", Name: " << emp.name << ", Salary: " <<
emp.salary
<< ", Leave Balance: " << emp.leaveBalance << ", Rating: " <<
emp.rating
<< ", Days Present: " << emp.daysPresent << endl;
found = true;
break;
}
}

if (!found) {
cout << "Employee not found." << endl;
}

inFile.close();
}

void updateEmployeeSalary() {
fstream file(DATA_FILE, ios::in | ios::out | ios::binary);
if (!file) {
cerr << "Error opening file for reading and writing." << endl;
return;
}

int updateID;
cout << "Enter employee ID to update salary: ";
cin >> updateID;

Employee emp;
bool found = false;

while (file.read(reinterpret_cast<char*>(&emp), sizeof(Employee))) {


if (emp.id == updateID) {
cout << "Enter new salary: ";
cin >> emp.salary;

file.seekp(file.tellg() - static_cast<streampos>(sizeof(Employee)));
file.write(reinterpret_cast<char*>(&emp), sizeof(Employee));

cout << "Salary updated successfully." << endl;


found = true;
break;
}
}

if (!found) {
cout << "Employee not found." << endl;
}

file.close();
}

void deleteEmployee() {
ifstream inFile(DATA_FILE, ios::binary);
ofstream outFile("temp.txt", ios::binary); // Temporary file

if (!inFile || !outFile) {
cerr << "Error opening files for reading/writing." << endl;
return;
}

int deleteID;
cout << "Enter employee ID to delete: ";
cin >> deleteID;

Employee emp;
bool found = false;

while (inFile.read(reinterpret_cast<char*>(&emp), sizeof(Employee))) {


if (emp.id == deleteID) {
cout << "Employee deleted successfully." << endl;
found = true;
} else {
outFile.write(reinterpret_cast<char*>(&emp), sizeof(Employee));
}
}

inFile.close();
outFile.close();

if (!found) {
cout << "Employee not found." << endl;
remove("temp.txt"); // Remove the temporary file if the employee is not
found
} else {
remove(DATA_FILE); // Remove the original file
rename("temp.txt", DATA_FILE); // Rename the temporary file
}
}

void calculateAverageSalary() {
ifstream inFile(DATA_FILE, ios::binary);

if (!inFile) {
cerr << "Error opening file for reading." << endl;
return;
}

Employee emp;
double totalSalary = 0.0;
int employeeCount = 0;

while (inFile.read(reinterpret_cast<char*>(&emp), sizeof(Employee))) {


totalSalary += emp.salary;
employeeCount++;
}

inFile.close();

if (employeeCount > 0) {
double averageSalary = totalSalary / employeeCount;
cout << "Average Salary: " << averageSalary << endl;
} else {
cout << "No employees found." << endl;
}
}

void sortEmployeesBySalary() {
ifstream inFile(DATA_FILE, ios::binary);

if (!inFile) {
cerr << "Error opening file for reading." << endl;
return;
}

Employee empArray[100]; // Assuming a maximum of 100 employees


int employeeCount = 0;

while (inFile.read(reinterpret_cast<char*>(&empArray[employeeCount]),
sizeof(Employee))) {
employeeCount++;
}

inFile.close();

if (employeeCount > 0) {
// Perform a simple bubble sort based on salary
for (int i = 0; i < employeeCount - 1; i++) {
for (int j = 0; j < employeeCount - i - 1; j++) {
if (empArray[j].salary > empArray[j + 1].salary) {
// Swap the elements
Employee temp = empArray[j];
empArray[j] = empArray[j + 1];
empArray[j + 1] = temp;
}
}
}

// Display the sorted list


cout << left << setw(10) << "ID" << setw(20) << "Name" << setw(10) <<
"Salary" << setw(15) << "Leave Balance"
<< setw(15) << "Rating" << setw(20) << "Days Present" << endl;
cout << setfill('-') << setw(80) << "" << setfill(' ') << endl;

for (int i = 0; i < employeeCount; i++) {


cout << setw(10) << empArray[i].id << setw(20) << empArray[i].name <<
setw(10) << empArray[i].salary
<< setw(15) << empArray[i].leaveBalance << setw(15) <<
empArray[i].rating
<< setw(20) << empArray[i].daysPresent << endl;
}
} else {
cout << "No employees found." << endl;
}
}

void displayHighestLowestSalary() {
ifstream inFile(DATA_FILE, ios::binary);

if (!inFile) {
cerr << "Error opening file for reading." << endl;
return;
}

Employee emp;
double highestSalary = 0.0, lowestSalary = numeric_limits<double>::max();
int highestID, lowestID;

while (inFile.read(reinterpret_cast<char*>(&emp), sizeof(Employee))) {


if (emp.salary > highestSalary) {
highestSalary = emp.salary;
highestID = emp.id;
}

if (emp.salary < lowestSalary) {


lowestSalary = emp.salary;
lowestID = emp.id;
}
}

inFile.close();

cout << "Employee with the highest salary:" << endl;


cout << "ID: " << highestID << ", Salary: " << highestSalary << endl;
cout << "Employee with the lowest salary:" << endl;
cout << "ID: " << lowestID << ", Salary: " << lowestSalary << endl;
}

void applyForLeave() {
fstream file(DATA_FILE, ios::in | ios::out | ios::binary);

if (!file) {
cerr << "Error opening file for reading and writing." << endl;
return;
}

int empID, leaveDays;


cout << "Enter employee ID to apply for leave: ";
cin >> empID;

Employee emp;
bool found = false;

while (file.read(reinterpret_cast<char*>(&emp), sizeof(Employee))) {


if (emp.id == empID) {
cout << "Enter the number of leave days: ";
cin >> leaveDays;

if (leaveDays > 0) {
emp.leaveBalance += leaveDays;
cout << "Leave applied successfully. Updated leave balance: " <<
emp.leaveBalance << " days." << endl;

file.seekp(file.tellg() -
static_cast<streampos>(sizeof(Employee)));
file.write(reinterpret_cast<char*>(&emp), sizeof(Employee));
} else {
cout << "Invalid number of leave days. Leave balance remains
unchanged." << endl;
}

found = true;
break;
}
}

if (!found) {
cout << "Employee not found." << endl;
}

file.close();
}

void rateEmployee() {
fstream file(DATA_FILE, ios::in | ios::out | ios::binary);

if (!file) {
cerr << "Error opening file for reading and writing." << endl;
return;
}

int empID;
double employeeRating;
cout << "Enter employee ID to rate: ";
cin >> empID;

Employee emp;
bool found = false;

while (file.read(reinterpret_cast<char*>(&emp), sizeof(Employee))) {


if (emp.id == empID) {
cout << "Enter the rating for the employee (0.0 to 5.0): ";
cin >> employeeRating;

if (employeeRating >= 0.0 && employeeRating <= 5.0) {


emp.rating = employeeRating;
cout << "Employee rated successfully. Updated rating: " <<
emp.rating << endl;

file.seekp(file.tellg() -
static_cast<streampos>(sizeof(Employee)));
file.write(reinterpret_cast<char*>(&emp), sizeof(Employee));
} else {
cout << "Invalid rating. Rating should be between 0.0 and 5.0." <<
endl;
}

found = true;
break;
}
}

if (!found) {
cout << "Employee not found." << endl;
}

file.close();
}

void markEmployeeAttendance() {
fstream file(DATA_FILE, ios::in | ios::out | ios::binary);

if (!file) {
cerr << "Error opening file for reading and writing." << endl;
return;
}

int empID;
cout << "Enter employee ID to mark attendance: ";
cin >> empID;

Employee emp;
bool found = false;

while (file.read(reinterpret_cast<char*>(&emp), sizeof(Employee))) {


if (emp.id == empID) {
// Increment the daysPresent field to mark attendance
emp.daysPresent++;

cout << "Attendance marked successfully. Updated days present: " <<
emp.daysPresent << endl;
file.seekp(file.tellg() - static_cast<streampos>(sizeof(Employee)));
file.write(reinterpret_cast<char*>(&emp), sizeof(Employee));

found = true;
break;
}
}

file.close();

if (!found) {
cout << "Employee not found." << endl;
}
}

You might also like