C++ Project on Payroll Management System

Submitted by Editor

Payroll

		//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 fili 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 "<";
  DA=(0.35*(basic_pay/n))*days_worked;
  cout< ";
  HRA=600;
  cout< ";
  CCA=(0.02*(basic_pay/n))*days_worked;
  cout< ";
  con_veyance=(0.01*(basic_pay/n))*days_worked;
  cout< ";
  PF=gross_pay*0.08;
  cout< 8000)
  {
  cout< <"\n THE INCOME TAX------------------>";
  income_tax=(gross_pay-PF)*.1;
  cout< ";
  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.--------->"< rec_no=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_norec_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 empship 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.--------------------->"< "< "< "< "< "< RS."< ";
  cin>>choice;
 }
}
//this function displays the contents of file of emps
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));//raed 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="<";
	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="<------->";
  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<>--------->";
	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 "<";
  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);
}












Add Your Comment - Guidelines
You can express your opinion or reaction in the form below!

100 characters required

0 Comments:

Be the first one to comment!

You may also want to see:
QUOTE OF THE DAY
Love has no age, no limit; and no death. - John Galsworthy
April 24th, 2024 - Wednesday
background

Sign in to continue