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);
}
0 Comments:
Love has no age, no limit; and no death. - John Galsworthy