C++
C++ Project on Payroll Management System
C++ Project on Payroll Management System
//Payroll Management System
#include
#include
#include
#include //graphics functions
#include
#include
#include //for file handling
#include
struct date_rec //record to get data
{
int dd;
int mm;
int yyyy;
}current_date;
//this class defines data related to monthly pay file
class payfile //base class
{
private:
int emp_num;
char emp_name[25];
char emp_designation[20];
int days_worked,dw;
float basic_pay;
float DA;
float HRA;
float CCA;
float con_veyance;
float gross_pay;
float PF;
float income_tax;
float other_deductions;
float net_pay;
public:
payfile() //no arguments constructor
{
days_worked=0;
basic_pay=DA=HRA=CCA=con_veyance=gross_pay=0.0;
PF=income_tax=other_deductions=net_pay=0.0;
}
void get_pay(); //this function reads the private members of payfile
void update_pay_file();/*this function calls get_pay() and generates
monthly pay file on disk*/
void reports(); /*this function reads the monthly pay file
from disk and generates salary statements*/
/*when a new employee is registered,this function writes its record using
payfile()constructor on disk to make a entry in monthly payfile*/
void add_pay_object(int code,char name[25],char desig[10],float basic);
/*when an employee leaves the company,this function deletes
the entry from monthly pay file*/
void del_pay_object(int code);
/*this function modifies designation of an employee in monthly pay file*/
void modify_pay_object(int code,char desig[20]);
/*this function modifies the basic in pay file*/
void modify_basic(int code,float basic);
}pay;
void payfile::modify_basic(int code,float basic)
{
fstream file;
file.open("payfile.dat",ios::in|ios::out);//opening file
file.seekg(0,ios::beg);//set pointer to the begining
file.read((char*)&pay,sizeof(pay));//read first record
int n=file.tellg();
while(!file.eof())
{
if(code==pay.emp_num)
{
pay.basic_pay=basic;
pay.gross_pay=pay.basic_pay+pay.DA+pay.HRA+pay.CCA+pay.con_veyance;
pay.net_pay=pay.gross_pay-(pay.PF+pay.income_tax+pay.other_deductions);
file.seekg(n-sizeof(pay));
file.write((char*)&pay,sizeof(pay));
file.flush();
file.seekg(0,ios::end);
}
file.read((char*)&pay,sizeof(pay));
n=file.tellg();
}
file.close();
}
void payfile::add_pay_object(int code,char name[25],char desig[20],
float basic)
{
fstream outfile;
pay.emp_num=code;
pay.basic_pay=basic;
strcpy(pay.emp_name,name);
strcpy(pay.emp_designation,desig);
outfile.open("payfile.dat",ios::app);//open fees file in append mode
outfile.write((char*)&pay,sizeof(pay));//make entry in fees file
outfile.flush();
outfile.close();//close fees file
}
void payfile::del_pay_object(int code)
{
fstream outfile,infile;
outfile.open("tempfile.dat",ios::app); //open temporary file
infile.open("payfile.dat",ios::in);//open pay file for reading
infile.seekg(0,ios::beg);//set file pointer to the begining of the file
infile.read((char*)&pay,sizeof(pay));//read the first record
while(!infile.eof())
{
if(pay.emp_num!=code)//if this record is not to be deleted
//write in the temporary
outfile.write((char*)&pay,sizeof(pay));
infile.read((char*)&pay,sizeof(pay));//read next record
}
infile.close();//close pay file
outfile.close();//close temporary file
remove("payfile.dat");//delete old monthly pay file
rename("tempfile.dat","payfile.dat");//temporary file becomes new pay file
}
void payfile::modify_pay_object(int code,char desig[20])
{
fstream file;
file.open("payfile.dat",ios::in|ios::out);//open file for reading/writing
file.seekg(0,ios::beg);//set file pointer to the begining of the file
file.read((char*)&pay,sizeof(pay));//read first record
int n=file.tellg();//tell where we are
while(!file.eof())
{
if(code==pay.emp_num) //record found
{
strcpy(pay.emp_designation,desig);
file.seekg(n-sizeof(pay)); //set file pointer to the record to be changed
file.write((char*)&pay,sizeof(pay)); //update record
file.flush();
file.seekg(0,ios::end);/*if record found set file pointer to end
of file to stop further searching*/
}
file.read((char*)&pay,sizeof(pay)); //if record not found read next record
n=file.tellg();//tell where we are
}
file.close();
}
void payfile::get_pay()//this function reads the private members of payfile
{
char ch,month[9];
int mon;
cout<<"\n ENTER MONTH ( 1 to 12 ) --------->";
cin>>mon;
switch(mon)
{ //get month name
case 1 : strcpy(month,"JANUARY");
break;
case 2 : strcpy(month,"FEBRUARY");
break;
case 3 : strcpy(month,"MARCH");
break;
case 4 : strcpy(month,"APRIL");
break;
case 5 : strcpy(month,"MAY");
break;
case 6 : strcpy(month,"JUNE");
break;
case 7 : strcpy(month,"JULY");
break;
case 8 : strcpy(month,"AUGUST");
break;
case 9 : strcpy(month,"SEPTEMBER");
break;
case 10 :strcpy(month,"OCTOBER");
break;
case 11 :strcpy(month,"NOVEMBER");
break;
case 12 :strcpy(month,"DECEMBER");
break;
}
int n;
if(mon==1||mon==3||mon==5||mon==7||mon==8||mon==10||mon==12)
{
n=31;
}
else if(mon==2)
{
n=28;
}
else
{
n=30;
}
cout<<"\n ENTER THE NO.OF DAYS WORKED----------->";
cin>>days_worked;
if(days_worked<23)
{
dw=23-days_worked;
days_worked=n-dw;
}
else
{
days_worked=n;
dw=0;
}
cout<<"\n=============================================";
cout<<"\n In the month of "<<month<<" , "<<days_worked<<" days worked";
cout<<"\n BASIC PAY----------------------->"<<basic_pay;
DA=(0.35*(basic_pay/n))*days_worked;
cout<<"\n DA------------------------------>"<<DA;
HRA=600;
cout<<"\n HRA----------------------------->"<<HRA;
CCA=(0.02*(basic_pay/n))*days_worked;
cout<<"\n CCA----------------------------->"<<CCA;
con_veyance=(0.01*(basic_pay/n))*days_worked;
cout<<"\n CONVEYANCE---------------------->"<<con_veyance;
gross_pay=basic_pay+DA+HRA+CCA+con_veyance;
cout<<"\n GROSS PAY----------------------->"<<gross_pay;
PF=gross_pay*0.08;
cout<<"\n PF------------------------------>"<<PF;
if(gross_pay>8000)
{
cout<<"\n THE INCOME TAX------------------>";
income_tax=(gross_pay-PF)*.1;
cout<<income_tax;
}
else
income_tax=0;
cout<<"\n ENTER OTHER DEDUCTIONS---------->";
cin>>other_deductions;
net_pay=gross_pay-(PF+income_tax+other_deductions);
gotoxy(22,24);
cout<<"PRESS ANY KEY TO CONTINUE";
getch();
clrscr();
}
void payfile::update_pay_file()
{
fstream file;
file.open("payfile.dat",ios::in|ios::out);//open pay file in I/O mode
file.seekg(0,ios::beg);//set file pointer to the begining of the file
file.read((char*)&pay,sizeof(pay)); //read the first record
int n=file.tellg(); //find where file pointer is
while(!file.eof())
{
clrscr();
cout<<"\n ENTER DATA FOR EMPLOYEE NO.--------->"<<pay.emp_num;
cout<<"\n NAME : "<<pay.emp_name;
pay.get_pay();
file.seekg(n-sizeof(pay));//set file pointer to the record to be updated
file.write((char*)&pay,sizeof(pay));//update record
file.flush();
file.seekg(n);//set file pointer to the next record
file.read((char*)&pay,sizeof(pay));//read next record
n=file.tellg();//find where file pointer is
}
file.close();
}
void payfile::reports()
{
fstream infile;
char month[9];
char ch;
int report_choice;
do
{
clrscr();
cout<<"\n REPORT MENU ";
cout<<"\n-----------------";
cout<<"\n EMPLOYEE DETAILS ....1";
cout<<"\n PAY ROLL ....2";
cout<<"\n SALARY SLIP ....3";
cout<<"\n EXIT REPORT MENU ....4";
cout<<"\n\n ENTER YOUR CHOICE NO.------->";
cin>>report_choice;
switch(report_choice)
{
case 1 : clrscr();
emp.show_object();
break;
case 2 : clrscr();
cout<<"\n-------------------------------------------------";
cout<<"\n RAJ CORPORATION ";
cout<<"\n-------------------------------------------------";
cout<<"\n EMP.NO. EMP.NAME DESIG ";
cout<<"\nBASIC DA HRA CCA CONVEYANCE GROSS PAY";
cout<<"\n PF ITAX OTHER DED. ******* NET PAY ";
cout<<"\n----------------------------------------------------\n";
infile.open("payfile.dat",ios::in);//open payfile for reading
infile.seekg(0,ios::beg);//set file pointer to the begining
// of the file
infile.read((char*)&pay,sizeof(pay));//read the first record
while(!infile.eof())
{
cout<<" ";//leave some space
cout<<pay.emp_num<<" "<<pay.emp_name<<" "<<pay.emp_designation;
cout<<" "<<pay.basic_pay<<" "<<pay.DA<<" "<<pay.HRA;
cout<<" "<<pay.CCA<<" "<<pay.con_veyance<<" "<<pay.gross_pay;
cout<<"\n "<<pay.PF<<" "<<pay.income_tax;
cout<<" "<<pay.other_deductions<<" ******* "<<pay.net_pay<<"\n";
infile.read((char*)&pay,sizeof(pay));//read next record
}
infile.close();//close payfile
gotoxy(22,24);
cout<<"PRESS ANY KEY TO CONTINUE";
getch();
break;
case 3 : clrscr();
cout<<"\n ENTER CURRENT DATE <>--------->";
cin>>current_date.dd>>ch
>>current_date.mm>>ch
>>current_date.yyyy;
switch(current_date.mm)
{ //get month name
case 1 : strcpy(month,"JANUARY");
break;
case 2 : strcpy(month,"FEBRUARY");
break;
case 3 : strcpy(month,"MARCH");
break;
case 4 : strcpy(month,"APRIL");
break;
case 5 : strcpy(month,"MAY");
break;
case 6 : strcpy(month,"JUNE");
break;
case 7 : strcpy(month,"JULY");
break;
case 8 : strcpy(month,"AUGUST");
break;
case 9 : strcpy(month,"SEPTEMBER");
break;
case 10 :strcpy(month,"OCTOBER");
break;
case 11 :strcpy(month,"NOVEMBER");
break;
case 12 :strcpy(month,"DECEMBER");
break;
}
infile.open("payfile.dat",ios::in);//open pay file for reading
infile.seekg(0,ios::beg);//set file pointer to the begining
// of the file
infile.read((char*)&pay,sizeof(pay));//read first record
while(!infile.eof())
{
clrscr();
cout<<"\n-----------------------------------------------------------";
cout<<"\n RAJ CORPORATION ";
cout<<"\n SALARY SLIP FOR THE MONTH OF "<<month;
cout<<"\n-----------------------------------------------------------";
cout<<"\n EMP.NO. : "<<pay.emp_num;
cout<<"\n NAME : "<<pay.emp_name;
cout<<"\n DESIG. : "<<pay.emp_designation;
cout<<"\n DATE : "<<current_date.dd<<"/"<<current_date.mm<<"/"<<current_date.yyyy;
cout<<"\n-----------------------------------------------------------";
cout<<"\n BASIC PAY : "<<pay.basic_pay;
cout<<"\n DA : "<<pay.DA;
cout<<"\n HRA : "<<pay.HRA;
cout<<"\n CCA : "<<pay.CCA;
cout<<"\n CONVEYANCE : "<<pay.con_veyance;
cout<<"\n GROSS PAY : "<<pay.gross_pay;
cout<<"\n-----------------------------------------------------------";
cout<<"\n PF : "<<pay.PF;
cout<<"\n INCOME TAX : "<<pay.income_tax;
cout<<"\n OTHER DED. : "<<pay.other_deductions;
cout<<"\n NET PAY : "<<pay.net_pay;
cout<<"\n-----------------------------------------------------------";
gotoxy(22,24);
cout<<"PRESS ANY KEY TO CONTINUE";
getch();
infile.read((char*)&pay,sizeof(pay));//read next record
}
infile.close();//close pay file
break;
}
}
while(report_choice!=4);
}
//this class defines data related to employee
class employee : public payfile
{
private:
int employee_num;
char employee_name[25];
char employee_address[40];
date_rec date_joining;
date_rec date_birth;
char desig_nation[20];
float basic_salary;
public:
void get_data(); //this function reads data
void show_data(); //this function displays data
void add_object(); //this function adds a new employee
void show_object(); //this function displays all employees
void del_object(); //this function deletes an employee record
void modify_object(); //this function modifies employee information
void search_object(); //this function searches employee information
int get_rec_no(); //this function generates employee number automatically
}emp;
//this function generates employee number automatically
int employee::get_rec_no()
{
fstream infile;
struct node
{
int rec_no;
node *link;
};
node *start,*ptr,*ptr1,*ptr2;
int recno=1;
int found=0;
int temp_recno;
infile.open("employee.dat",ios::in);//open file for reading
if(!infile)//if file does not exist
return 1;//return 1 as the first record number
else
{
start=new node;//create first node for index
ptr=start;
infile.seekg(0,ios::beg);//set file pointer to the begining of the file
infile.read((char*)&emp,sizeof(emp));//read first record
while(!infile.eof())
{
ptr->rec_no=emp.employee_num;//save record no.in the index
ptr->link=new node;//get new node for next record
ptr=ptr->link;
infile.read((char*)&emp,sizeof(emp));//read next record
}
ptr->link=NULL;//end of list
//sort record nos.
ptr1=start;//set pointer to the start of the index
while(ptr1->link!=NULL)
{
ptr2=ptr1->link;//set second pointer
while(ptr2!=NULL)
{
if(ptr2->rec_no<ptr1->rec_no)
{
temp_recno=ptr2->rec_no;//exchange values
ptr2->rec_no=ptr1->rec_no;
ptr1->rec_no=temp_recno;
}
ptr2=ptr2->link;//next node
}
ptr2=ptr1->link;
ptr1=ptr2;//next pass
}
//generate record no.
ptr1=start;
while(ptr1!=NULL&&found!=1)
{
ptr2=ptr1;
ptr1=ptr1->link;
if((ptr2->rec_no)+1!=ptr1->rec_no)
{
recno=(ptr2->rec_no)+1;
found=1;
}
}
if(found!=1)
recno=(ptr2->rec_no)+1;
//destroy the index
ptr=start;
while(start!=NULL)
{
start=start->link;
delete ptr;//delete index to save memory
}
}
return recno;//return the calculated record no.
}
//this function reads data
void employee::get_data()
{
clrscr();
employee_num=get_rec_no();//automatic generation of employee no.
cout<<"\n ENTER THE NAME-------------------------->";
gets(employee_name);
cout<<"\n ENTER THE ADDRESS----------------------->";
gets(employee_address);
cout<<"\n ENTER THE DATE OF JOINING <>------->";
cin>>date_joining.dd>>ch>>date_joining.mm>>ch>>date_joining.yyyy;
cout<<"\n ENTER THE DATE OF BIRTH <>-------->";
cin>>date_birth.dd>>ch>>date_birth.mm>>ch>>date_birth.yyyy;
cout<<"\n ENTER DESIGNATION----------------------->";
gets(desig_nation);
cout<<"\n ENTER THE BASIC SALARY------------------>";
cin>>basic_salary;
}
//this function displays data
void employee::show_data()
{
clrscr();
cout<<"\n EMPLOYEE NO.--------------------->"<<employee_num;
cout<<"\n NAME----------------------------->"<<employee_name;
cout<<"\n ADDRESS------------------------->"<<employee_address;
cout<<"\n DATE OF JOINING----------------->"<<date_joining.dd<<"/"<<date_joining.mm<<"/"<<date_joining.yyyy;
cout<<"\n DATE OF BIRTH------------------->"<<date_birth.dd<<"/"<<date_birth.mm<<"/"<<date_birth.yyyy;
cout<<"\n DESIGNATION--------------------->"<<desig_nation;
cout<<"\n BASIC SALARY-------------------->"<<"RS."<<basic_salary;
gotoxy(22,24);
cout<<"PRESS ANY KEY TO CONTINUE";
getch();
}
//this function adds a new employee
void employee::add_object()
{
fstream outfile;
char choice;
do
{
get_data();//read employee data
outfile.open("employee.dat",ios::app);//open employee file in append mode
outfile.write((char*)&emp,sizeof(emp));//write record
outfile.flush();
outfile.close();//close employee file
add_pay_object(employee_num,employee_name,desig_nation,basic_salary);
clrscr();
cout<<"\n RECORD ADDED SUCCESSFULLY";
cout<<"\n DO YOU WANT TO ADD MORE RECORDS?(Y/N)>";
cin>>choice;
}
while(choice=='Y'||choice=='y');
}
//this function displays the contents of file of employees
void employee::show_object()
{
fstream infile;
infile.open("employee.dat",ios::in);//open file for reading
infile.seekg(0,ios::beg);//set file pointer to the begining of the file
infile.read((char*)&emp,sizeof(emp));//read the first record
while(!infile.eof())
{
emp.show_data();//display record
infile.read((char*)&emp,sizeof(emp));//read the next record
}
}
//this function deletes the record of an employee
void employee::del_object()
{
int code;
fstream infile,outfile;
cout<<"\n ENTER THE MEMBERSHIP NO.TO BE DELETED--------->";
cin>>code;
//update emp file
outfile.open("tempfile.dat",ios::app);//open temporary file
infile.open("employee.dat",ios::in);//open employee file
infile.seekg(0,ios::beg);//set file pointer to the begining of the file
infile.read((char*)&emp,sizeof(emp));//read the first record
while(!infile.eof())
{
if(emp.employee_num!=code)//if this record is not to be deleted
//write in temporary file
outfile.write((char*)&emp,sizeof(emp));
infile.read((char*)&emp,sizeof(emp));//read the next record
}
infile.close();//close employee file
outfile.close();//close temporary file
remove("employee.dat");//delete old employee file
rename("tempfile.dat","employee.dat");//temporary file becomes new
//employee file
del_pay_object(code);
}
//this function modifies information regarding an employee
void employee::modify_object()
{
fstream file;
int mod_choice;
int code;
do
{//display modify menu
clrscr();
cout<<"\n MODIFY MENU ";
cout<<"\n-------------------";
cout<<"\n CHANGED ADDRESS ....1";
cout<<"\n CHANGE DESIGNATION ....2";
cout<<"\n CHANGE BASIC SALARY ....3";
cout<<"\n EXIT MODIFY MENU ....4";
cout<<"\n\n ENTER YOUR CHOICE NO.----------->";
cin>>mod_choice;
if(mod_choice!=4)
{
cout<<"\n ENTER THE EMPLOYEE NUMBER--------->";
cin>>code;
file.open("employee.dat",ios::in|ios::out);//open the file for
// reading/writing
file.seekg(0,ios::beg);//set file pointer to the begining of the file
file.read((char*)&emp,sizeof(emp));//read first record
int n=file.tellg();//tell where we are
while(!file.eof())
{
if(code==emp.employee_num)//record found
{
switch(mod_choice)
{
case 1 : clrscr();
//get new information
cout<<"\n ENTER THE NEW ADDRESS-------------->";
gets(emp.employee_address);
file.seekg(n-sizeof(emp));//set file pointer to the record
//to be modified
file.write((char*)&emp,sizeof(emp));//update record
file.flush();
break;
case 2 : clrscr();
//get new information
cout<<"\n ENTER THE NEW DESIGNATION------------>";
gets(desig_nation);
file.seekg(n-sizeof(emp));//set file pointer to the record
//to be changed
file.write((char*)&emp,sizeof(emp));//update record
file.flush();
modify_pay_object(code,desig_nation);
break;
case 3 : clrscr();
//get new information
cout<<"\n ENTER NEW BASIC SALARY-------------->";
cin>>basic_salary;
file.seekg(n-sizeof(emp));//set file pointer to the record
//to be modified
file.write((char*)&emp,sizeof(emp));
file.flush();
modify_basic(code,basic_salary);
break;
}//end of switch
}//end if
file.read((char*)&emp,sizeof(emp));//read next record
n=file.tellg();//tell where we are
}//end while
file.close();
}//end if
}//end do while loop
while(mod_choice!=4);
clrscr();
cout<<"\n YOU ENDED THE MODIFY SESSION ";
cout<<"\n THANK YOU!";
delay(700);
}
//this function searches information on the basis of a given field
void employee::search_object()
{
fstream infile;
int search_choice;
int phno;
int code;
char name[25];
do
{
int counter=0;//initialize counter to zero
clrscr();
//display search menu
cout<<"\n SEARCH MENU ";
cout<<"\n----------------------";
cout<<"\n EMPLOYEE CODE ....1";
cout<<"\n EMPLOYEE NAME ....2";
cout<<"\n EXIT ....3";
cout<<"\n\n ENTER YOUR CHOICE NO.---------->";
cin>>search_choice;
switch(search_choice)
{
case 1 : clrscr();
cout<<"\n ENTER THE MEMBER CODE TO BE SEARCHED ----------->";
cin>>code;//get record no.
infile.open("employee.dat",ios::in);//open file for reading
infile.seekg(0,ios::beg);//set file pointer to the begining
// of the file
infile.read((char*)&emp,sizeof(emp));//read first record
while(!infile.eof())
{
if(emp.employee_num==code)
{ //record found
counter++; //increment counter
emp.show_data();//display record
}
infile.read((char*)&emp,sizeof(emp));//read next record
}
infile.close();//if end of file , close file
gotoxy(22,20);
cout<<"RECORDS FOUND="<<counter;
gotoxy(22,22);
cout<<"PRESS ANY KEY TO CONTINUE";
getch();
break;
case 2 : clrscr();
cout<<"\n ENTER THE NAME TO BE SEARCHED ------->";
cin>>name;
infile.open("employee.dat",ios::in);//open file for reading
infile.seekg(0,ios::beg);//set file pointer to the begining of
// the file
infile.read((char*)&emp,sizeof(emp));//read first record
while(!infile.eof())
{
if(strcmpi(emp.employee_name,name)==0)
{ //record found
counter++;//increment counter
emp.show_data();//display record
}
infile.read((char*)&emp,sizeof(emp));//read next record
}
infile.close();//if end of file , close file
gotoxy(22,20);
cout<<"RECORDS FOUND="<<counter;
gotoxy(22,22);
cout<<"PRESS ANY KEY TO CONTINUE";
getch();
break;
}
}
while(search_choice!=3);
}
void main()
{
int main_choice;
clrscr();
do
{
clrscr();
cout<<"\n MAIN MENU ";
cout<<"\n--------------";
cout<<"\n ADD NEW EMPLOYEE ....1";
cout<<"\n DELETE EMPLOYEE RECORD ....2";
cout<<"\n MODIFY EMPLOYEE INFORMATION ....3";
cout<<"\n SEARCH EMPLOYEE INFORMATION ....4";
cout<<"\n UPDATE PAY FILE ....5";
cout<<"\n REPORTS ....6";
cout<<"\n EXIT ....7";
cout<<"\n\n ENTER YOUR CHOICE NO.------->";
cin>>main_choice;
switch(main_choice)
{
case 1 : emp.add_object();//call function to register a new employee
break;
case 2 : emp.del_object();//call function to delete the record of
// an employee
break;
case 3 : emp.modify_object();//this function can modify information
break;
case 4 : emp.search_object();//this function searches information
// about an employee
break;
case 5 : pay.update_pay_file();//this function generates
// monthly pay file
break;
case 6 : pay.reports();//this function generate reports
break;
case 7 : clrscr();
gotoxy(25,10);
cout<<"YOU ENDED THE SESSION ";
gotoxy(27,12);
cout<<"THANK YOU!";
delay(1000);
break;
}
}
while(main_choice!=7);
}