C++ Project on Salary Management

Submitted by Editor

SALARY MANAGMENT

 

	//**********************************************************
	//	PROJECT SALARY MANAGMENT
	//**********************************************************

//**********************************************************
//	INCLUDED HEADER FILES
//**********************************************************

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

//**********************************************************
// THIS CLASS CONTAINS ALL THE DRAWING FUNCTIONS
//**********************************************************

class LINES
{
	public :
			void LINE_HOR(int, int, int, char) ;
			void LINE_VER(int, int, int, char) ;
			void BOX(int,int,int,int,char) ;
			void CLEARUP(void) ;
			void CLEARDOWN(void) ;
} ;


//**********************************************************
// THIS CLASS CONTROL ALL THE FUNCTIONS IN THE MENU
//**********************************************************

class MENU
{
	public :
			void MAIN_MENU(void) ;
	private :
			void EDIT_MENU(void) ;
			void INTRODUCTION(void) ;
} ;




//**********************************************************
// THIS CLASS CONTROL ALL THE FUNCTIONS RELATED TO EMPLOYEE
//**********************************************************

class EMPLOYEE
{
	public :
			void NEW_EMPLOYEE(void) ;
			void MODIFICATION(void) ;
			void DELETION(void) ;
			void DISPLAY(void) ;
			void LIST(void) ;
			void SALARY_SLIP(void) ;
	private :
			void ADD_RECORD(int, char[], char[], char[], int, int, int, char[], char, char, char, float, float) ;
			void MODIFY_RECORD(int, char [], char [], char [], char [], char, char, char, float, float) ;
			void DELETE_RECORD(int) ;
			int  LASTCODE(void) ;
			int  CODEFOUND(int) ;
			int  RECORDNO(int) ;
			int  FOUND_CODE(int) ;
			void DISPLAY_RECORD(int) ;
			int  VALID_DATE(int, int, int) ;

			int   code, dd, mm, yy ;
			char  name[26], address[31], phone[10], desig[16] ;
			char  grade, house, convense ;
			float loan, basic ;
} ;


//**********************************************************
// THIS FUNCTION CONTROL ALL THE FUNCTIONS IN THE MAIN MENU
//**********************************************************

void MENU :: MAIN_MENU(void)
{
	char ch ;
	LINES L ;
	L.CLEARUP() ;
	while (1)
	{	int textcolor[15];
		int textbackground[1];
		clrscr() ;
		L.BOX(28,7,51,9,218) ;
		L.BOX(10,5,71,21,218) ;
		L.BOX(11,6,70,20,219) ;
		gotoxy(31,8) ;
		cout < <" INDIAN PVT. LTD." ;
		gotoxy(30,11) ;
		cout <<"1: NEW EMPLOYEE" ;
  		gotoxy(30,12) ;
		cout <<"2: DISPLAY EMPLOYEE" ;
		gotoxy(30,13) ;
		cout <<"3: LIST OF EMPLOYEES" ;
		gotoxy(30,14) ;
		cout <<"4: SALARY SLIP" ;
		gotoxy(30,15) ;
		cout <<"5: EDIT" ;
		gotoxy(30,16) ;
		cout <<"0: QUIT" ;
		gotoxy(30,18) ;
		cout <<"ENTER YOUR CHOICE :" ;
		ch = getch() ;
		if (ch == 27 || ch == '0')
			break ;
		else
		if (ch == '1')
		{
			EMPLOYEE E ;
			E.NEW_EMPLOYEE() ;
		}
		else
		if (ch == '2')
		{
			EMPLOYEE E ;
			E.DISPLAY() ;
		}
		else
		if (ch == '3')
		{
			EMPLOYEE E ;
			E.LIST() ;
		}
		else
		if (ch == '4')
		{
			EMPLOYEE E ;
			E.SALARY_SLIP() ;
		}
		else
		if (ch == '5')
			EDIT_MENU() ;
	}
	L.CLEARUP() ;
}


//**********************************************************
// THIS FUNCTION CONTROL ALL THE FUNCTIONS IN THE EDIT MENU
//**********************************************************

void MENU :: EDIT_MENU(void)
{
	char ch ;
	LINES L ;
	L.CLEARDOWN() ;
	while (1)
	{
		clrscr() ;
		L.BOX(28,8,49,10,218) ;
		L.BOX(10,5,71,21,218) ;
		L.BOX(11,6,70,20,219) ;
		gotoxy(31,9) ;
		cout <<"E D I T  M E N U" ;
		gotoxy(30,13) ;
		cout <<"1: DELETE RECORD" ;
		gotoxy(30,14) ;
		cout <<"2: MODIFY RECORD" ;
		gotoxy(30,15) ;
		cout <<"0: EXIT" ;
		gotoxy(30,17) ;
		cout <<"ENTER YOUR CHOICE :" ;
		ch = getch() ;
		if (ch == 27 || ch == '0')
			break ;
		else
		if (ch == '1')
		{
			EMPLOYEE E ;
			E.DELETION() ;
		}
		else
		if (ch == '2')
		{
			EMPLOYEE E ;
			E.MODIFICATION() ;
		}
	}
	L.CLEARDOWN() ;
}


//**********************************************************
// THIS FUNCTION DRAWS THE HORRIZONTAL LINE
//**********************************************************

void LINES :: LINE_HOR(int column1, int column2, int row, char c)
{
	for ( column1; column1<=column2; column1++ )
	{
		gotoxy(column1,row) ;
		cout <=1; i--)
	{
		//delay(20) ;
		gotoxy(1,i) ; clreol() ;
	}
}


//**********************************************************
// THIS FUNCTION CLEAR THE SCREEN LINE BY LINE DOWNWORD
//**********************************************************

void LINES :: CLEARDOWN(void)
{
	for (int i=1; i< =25; i++)
	{
		//delay(20) ;
		gotoxy(1,i) ; clreol() ;
	}
}


//**********************************************************
// THIS FUNCTION ADDS THE GIVEN DATA IN THE EMPLOYEE'S FILE
//**********************************************************

void EMPLOYEE :: ADD_RECORD(int ecode, char ename[26], char eaddress[31], char ephone[10], int d, int m, int y, char edesig[16], char egrade, char ehouse, char econv, float eloan, float ebasic)
{
	fstream file ;
	file.open("EMPLOYEE.DAT", ios::app) ;
	code = ecode ;
	strcpy(name,ename) ;
	strcpy(address,eaddress) ;
	strcpy(phone,ephone) ;
	dd = d ;
	mm = m ;
	yy = y ;
	strcpy(desig,edesig) ;
	grade = egrade ;
	house = ehouse ;
	convense = econv ;
	loan = eloan ;
	basic = ebasic ;
	file.write((char *) this, sizeof(EMPLOYEE)) ;
	file.close() ;
}


//**********************************************************
// THIS FUNCTION MODIFY THE GIVEN DATA IN THE
// EMPLOYEE'S FILE
//**********************************************************

void EMPLOYEE :: MODIFY_RECORD(int ecode, char ename[26], char eaddress[31], char ephone[10], char edesig[16], char egrade, char ehouse, char econv, float eloan, float ebasic)
{
	int recno ;
	recno = RECORDNO(ecode) ;
	fstream file ;
	file.open("EMPLOYEE.DAT", ios::out | ios::ate) ;
	strcpy(name,ename) ;
	strcpy(address,eaddress) ;
	strcpy(phone,ephone) ;
	strcpy(desig,edesig) ;
	grade = egrade ;
	house = ehouse ;
	convense = econv ;
	loan = eloan ;
	basic = ebasic ;
	int location ;
	location = (recno-1) * sizeof(EMPLOYEE) ;
	file.seekp(location) ;
	file.write((char *) this, sizeof(EMPLOYEE)) ;
	file.close() ;
}


//**********************************************************
// THIS FUNCTION DELETE THE RECORD IN THE EMPLOYEE FILE
// FOR THE GIVEN EMPLOYEE CODE
//**********************************************************

void EMPLOYEE :: DELETE_RECORD(int ecode)
{
	fstream file ;
	file.open("EMPLOYEE.DAT", ios::in) ;
	fstream temp ;
	temp.open("temp.dat", ios::out) ;
	file.seekg(0,ios::beg) ;
	while (!file.eof())
	{
		file.read((char *) this, sizeof(EMPLOYEE)) ;
		if (file.eof())
			break ;
		if (code != ecode)
			temp.write((char *) this, sizeof(EMPLOYEE)) ;
	}
	file.close() ;
	temp.close() ;
	file.open("EMPLOYEE.DAT", ios::out) ;
	temp.open("temp.dat", ios::in) ;
	temp.seekg(0,ios::beg) ;
	while (!temp.eof())
	{
		temp.read((char *) this, sizeof(EMPLOYEE)) ;
		if ( temp.eof() )
			break ;
		file.write((char *) this, sizeof(EMPLOYEE)) ;
	}
	file.close() ;
	temp.close() ;
}


//**********************************************************
// THIS FUNCTION RETURNS THE LAST EMPLOYEE'S CODE
//**********************************************************

int EMPLOYEE :: LASTCODE(void)
{
	fstream file ;
	file.open("EMPLOYEE.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	int count=0 ;
	while (file.read((char *) this, sizeof(EMPLOYEE)))
		count = code ;
	file.close() ;
	return count ;
}


//**********************************************************
// THIS FUNCTION RETURNS 0 IF THE GIVEN CODE NOT FOUND
//**********************************************************

int EMPLOYEE :: FOUND_CODE(int ecode)
{
	fstream file ;
	file.open("EMPLOYEE.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	int found=0 ;
	while (file.read((char *) this, sizeof(EMPLOYEE)))
	{
		if (code == ecode)
		{
			found = 1 ;
			break ;
		}
	}
	file.close() ;
	return found ;
}


//**********************************************************
// THIS FUNCTION RETURNS RECORD NO. OF THE GIVEN CODE
//**********************************************************

int EMPLOYEE :: RECORDNO(int ecode)
{
	fstream file ;
	file.open("EMPLOYEE.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	int recno=0 ;
	while (file.read((char *) this, sizeof(EMPLOYEE)))
	{
		recno++ ;
		if (code == ecode)
			break ;
	}
	file.close() ;
	return recno ;
}


//**********************************************************
// THIS FUNCTION DISPLAYS THE LIST OF THE EMPLOYEES
//**********************************************************

void EMPLOYEE :: LIST(void)
{
	clrscr() ;
	int row = 6 , found=0, flag=0 ;
	char ch ;
	gotoxy(31,2) ;
	cout <<"LIST OF EMPLOYEES" ;
	gotoxy(30,3) ;
	cout <<"~~~~~~~~~~~~~~~~~~~" ;
	gotoxy(1,4) ;
	cout <<"CODE NAME                     PHONE    DOJ         DESIGNATION    GRADE  SALARY" ;
	gotoxy(1,5) ;
	cout <<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" ;
	fstream file ;
	file.open("EMPLOYEE.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	while (file.read((char *) this, sizeof(EMPLOYEE)))
	{
		flag = 0 ;
		//delay(20) ;
		found = 1 ;
		gotoxy(2,row) ;
		cout < to exit" ;
			ch = getch() ;
			if (ch == 27)
				break ;
			clrscr() ;
			gotoxy(31,2) ;
			cout < <"LIST OF EMPLOYEES" ;
			gotoxy(30,3) ;
			cout <<"~~~~~~~~~~~~~~~~~~~" ;
			gotoxy(1,4) ;
			cout <<"CODE NAME                     PHONE    DOJ         DESIGNATION    GRADE  SALARY" ;
			gotoxy(1,5) ;
			cout <<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" ;
		}
		else
			row++ ;
	}
	if (!found)
	{
		gotoxy(5,10) ;
		cout <<"\7Records not found" ;
	}
	if (!flag)
	{
		gotoxy(1,25) ;
		cout <<"Press any key to continue..." ;
		getche() ;
	}
	file.close () ;
}


//**********************************************************
// THIS FUNCTION DISPLAYS THE RECORD OF THE EMPLOYEES
//**********************************************************

void EMPLOYEE :: DISPLAY_RECORD(int ecode)
{
	fstream file ;
	file.open("EMPLOYEE.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	while (file.read((char *) this, sizeof(EMPLOYEE)))
	{
		if (code == ecode)
		{
			gotoxy(5,5) ;
			cout <<"Employee Code # " <=EXIT" ;
	gotoxy(28,3) ;
	cout < <"ADDITION OF NEW EMPLOYEE" ;
	gotoxy(5,5) ;
	cout <<"Employee Code # " ;
	gotoxy(5,6) ;
	cout <<"~~~~~~~~~~~~~" ;
	gotoxy(5,7) ;
	cout <<"Name         : " ;
	gotoxy(5,8) ;
	cout <<"Address      : " ;
	gotoxy(5,9) ;
	cout <<"Phone no.    : " ;
	gotoxy(5,11) ;
	cout <<"JOINING DATE" ;
	gotoxy(5,12) ;
	cout <<"~~~~~~~~~~~~" ;
	gotoxy(5,13) ;
	cout <<"Day   : " ;
	gotoxy(5,14) ;
	cout <<"Month : " ;
	gotoxy(5,15) ;
	cout <<"Year  : " ;
	gotoxy(5,17) ;
	cout <<"Designation  : " ;
	gotoxy(5,18) ;
	cout <<"Grade        : " ;
	gotoxy(5,21) ;
	cout <<"Loan           : " ;

	ecode = LASTCODE() + 1 ;
	if (ecode == 1)
	{
		ADD_RECORD(ecode, "null", "null", "null", 0, 0, 0, "null", 'n', 'n', 'n', 0.0, 0.0) ;
		DELETE_RECORD(ecode) ;
	}
	gotoxy(21,5) ;
	cout < 25)
		{
			valid = 0 ;
			gotoxy(5,25) ; clreol() ;
			cout < <"\7Enter correctly (Range: 1..25)" ;
			getch() ;
		}
	} while (!valid) ;
	do
	{
		valid = 1 ;
		gotoxy(5,25) ; clreol() ;
		cout <<"Enter Address of the Employee" ;
		gotoxy(20,8) ; clreol() ;
		gets(eaddress) ;
		strupr(eaddress) ;
		if (eaddress[0] == '0')
			return ;
		if (strlen(eaddress) < 1 || strlen(eaddress) > 30)
		{
			valid = 0 ;
			gotoxy(5,25) ; clreol() ;
			cout < <"\7Enter correctly (Range: 1..30)" ;
			getch() ;
		}
	} while (!valid) ;
	do
	{
		valid = 1 ;
		gotoxy(5,25) ; clreol() ;
		cout <<"Enter Phone no. of the Employee or Press  for none" ;
		gotoxy(20,9) ; clreol() ;
		gets(ephone) ;
		if (ephone[0] == '0')
			return ;
		if ((strlen(ephone) < 7 && strlen(ephone) > 0) || (strlen(ephone) > 9))
		{
			valid = 0 ;
			gotoxy(5,25) ; clreol() ;
			cout < <"\7Enter correctly" ;
			getch() ;
		}
	} while (!valid) ;
	if (strlen(ephone) == 0)
		strcpy(ephone,"-") ;
	char tday[3], tmonth[3], tyear[5] ;
	int td ;
	do
	{
		valid = 1 ;
		do
		{
			gotoxy(5,25) ; clreol() ;
			cout <<"ENTER DAY OF JOINING" ;
			gotoxy(13,13) ; clreol() ;
			gets(tday) ;
			td = atoi(tday) ;
			d = td ;
			if (tday[0] == '0')
				return ;
		} while (d == 0) ;
		do
		{
			gotoxy(5,25) ; clreol() ;
			cout <<"ENTER MONTH OF JOINING" ;
			gotoxy(13,14) ; clreol() ;
			gets(tmonth) ;
			td = atoi(tmonth) ;
			m = td ;
			if (tmonth[0] == '0')
				return ;
		} while (m == 0) ;
		do
		{
			gotoxy(5,25) ; clreol() ;
			cout <<"ENTER YEAR OF JOINING" ;
			gotoxy(13,15) ; clreol() ;
			gets(tyear) ;
			td = atoi(tyear) ;
			y = td ;
			if (tyear[0] == '0')
				return ;
		} while (y == 0) ;
		if (d>31 || d<1)
			valid = 0 ;
		else
		if (((y%4)!=0 && m==2 && d>28) || ((y%4)==0 && m==2 && d>29))
			valid = 0 ;
		else
		if ((m==4 || m==6 || m==9 || m==11) && d>30)
			valid = 0 ;
		else
		if (y<1990 || y>2020)
			valid = 0 ;
		if (!valid)
		{
			valid = 0 ;
			gotoxy(5,25) ; clreol() ;
			cout < <"\7Enter correctly" ;
			getch() ;
			gotoxy(13,14) ; clreol() ;
			gotoxy(13,15) ; clreol() ;
		}
	} while (!valid) ;
	do
	{
		valid = 1 ;
		gotoxy(5,25) ; clreol() ;
		cout <<"Enter Designation of the Employee" ;
		gotoxy(20,17) ; clreol() ;
		gets(edesig) ;
		strupr(edesig) ;
		if (edesig[0] == '0')
			return ;
		if (strlen(edesig) < 1 || strlen(edesig) > 15)
		{
			valid = 0 ;
			gotoxy(5,25) ; clreol() ;
			cout < <"\7Enter correctly (Range: 1..15)" ;
			getch() ;
		}
	} while (!valid) ;
	do
	{
		gotoxy(5,25) ; clreol() ;
		cout <<"Enter Grade of the Employee (A,B,C,D,E)" ;
		gotoxy(20,18) ; clreol() ;
		egrade = getche() ;
		egrade = toupper(egrade) ;
		if (egrade == '0')
			return ;
	} while (egrade < 'A' || egrade > 'E') ;
	if (egrade != 'E')
	{
		gotoxy(5,19) ;
		cout < <"House (y/n)    : " ;
		gotoxy(5,20) ;
		cout <<"Convense (y/n) : " ;
		gotoxy(5,22) ;
		cout <<"Basic Salary   : " ;
		do
		{
			gotoxy(5,25) ; clreol() ;
			cout <<"ENTER IF HOUSE ALLOWANCE IS ALLOTED TO EMPLOYEE OR NOT" ;
			gotoxy(22,19) ; clreol() ;
			ehouse = getche() ;
			ehouse = toupper(ehouse) ;
			if (ehouse == '0')
				return ;
		} while (ehouse != 'Y' && ehouse != 'N') ;
		do
		{
			gotoxy(5,25) ; clreol() ;
			cout <<"ENTER IF CONVENCE ALLOWANCE IS ALLOTED TO EMPLOYEE OR NOT" ;
			gotoxy(22,20) ; clreol() ;
			econv = getche() ;
			econv = toupper(econv) ;
			if (econv == '0')
				return ;
		} while (econv != 'Y' && econv != 'N') ;
	}
	do
	{
		valid = 1 ;
		gotoxy(5,25) ; clreol() ;
		cout <<"ENTER LOAN AMOUNT IF ISSUED" ;
		gotoxy(22,21) ; clreol() ;
		gets(t1) ;
		t2 = atof(t1) ;
		eloan = t2 ;
		if (eloan > 50000)
		{
			valid = 0 ;
			gotoxy(5,25) ; clreol() ;
			cout < <"\7SHOULD NOT GREATER THAN 50000" ;
			getch() ;
		}
	} while (!valid) ;
	if (egrade != 'E')
	{
		do
		{
			valid = 1 ;
			gotoxy(5,25) ; clreol() ;
			cout <<"ENTER BASIC SALARY OF THE EMPLOYEE" ;
			gotoxy(22,22) ; clreol() ;
			gets(t1) ;
			t2 = atof(t1) ;
			ebasic = t2 ;
			if (t1[0] == '0')
				return ;
			if (ebasic > 50000)
			{
				valid = 0 ;
				gotoxy(5,25) ; clreol() ;
				cout < <"\7SHOULD NOT GREATER THAN 50000" ;
				getch() ;
			}
		} while (!valid) ;
	}
	gotoxy(5,25) ; clreol() ;
	do
	{
		gotoxy(5,24) ; clreol() ;
		cout <<"Do you want to save (y/n) " ;
		ch = getche() ;
		ch = toupper(ch) ;
		if (ch == '0')
			return ;
	} while (ch != 'Y' && ch != 'N') ;
	if (ch == 'N')
		return ;
	ADD_RECORD(ecode, ename, eaddress, ephone, d, m, y, edesig, egrade, ehouse, econv, eloan, ebasic) ;
}


//**********************************************************
// THIS FUNCTION GIVE CODE FOR THE DISPLAY OF THE RECORD
//**********************************************************

void EMPLOYEE :: DISPLAY(void)
{
	clrscr() ;
	char t1[10] ;
	int t2, ecode ;
	gotoxy(72,2) ;
	cout <<"<0>=EXIT" ;
	gotoxy(5,5) ;
	cout < <"Enter code of the Employee  " ;
	gets(t1) ;
	t2 = atoi(t1) ;
	ecode = t2 ;
	if (ecode == 0)
		return ;
	clrscr() ;
	if (!FOUND_CODE(ecode))
	{
		gotoxy(5,5) ;
		cout <<"\7Record not found" ;
		getch() ;
		return ;
	}
	DISPLAY_RECORD(ecode) ;
	gotoxy(5,25) ;
	cout <<"Press any key to continue..." ;
	getch() ;
}




//**********************************************************
// THIS FUNCTION GIVE DATA FOR THE MODIFICATION OF THE
// EMPLOYEE RECORD
//**********************************************************

void EMPLOYEE :: MODIFICATION(void)
{
	clrscr() ;
	char  ch, egrade, ehouse='N', econv='N' ;
	char  ename[26], eaddress[31], ephone[10], edesig[16], t1[10] ;
	float t2=0.0, eloan=0.0, ebasic=0.0 ;
	int   ecode, valid ;
	gotoxy(72,2) ;
	cout <<"<0>=EXIT" ;
	gotoxy(5,5) ;
	cout < <"Enter code of the Employee  " ;
	gets(t1) ;
	t2 = atoi(t1) ;
	ecode = t2 ;
	if (ecode == 0)
		return ;
	clrscr() ;
	if (!FOUND_CODE(ecode))
	{
		gotoxy(5,5) ;
		cout <<"\7Record not found" ;
		getch() ;
		return ;
	}
	gotoxy(72,2) ;
	cout <<"<0>=EXIT" ;
	gotoxy(22,3) ;
	cout < <"MODIFICATION OF THE EMPLOYEE RECORD" ;
	DISPLAY_RECORD(ecode) ;
	do
	{
		gotoxy(5,24) ; clreol() ;
		cout <<"Do you want to modify this record (y/n) " ;
		ch = getche() ;
		ch = toupper(ch) ;
		if (ch == '0')
			return ;
	} while (ch != 'Y' && ch != 'N') ;
	if (ch == 'N')
		return ;
	clrscr() ;
	fstream file ;
	file.open("EMPLOYEE.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	while (file.read((char *) this, sizeof(EMPLOYEE)))
	{
		if (code == ecode)
			break ;
	}
	file.close() ;
	gotoxy(5,5) ;
	cout <<"Employee Code # " < FOR NO CHANGE" ;
		gotoxy(20,7) ; clreol() ;
		gets(ename) ;
		strupr(ename) ;
		if (ename[0] == '0')
			return ;
		if (strlen(ename) > 25)
		{
			valid = 0 ;
			gotoxy(5,25) ; clreol() ;
			cout < <"\7Enter correctly (Range: 1..25)" ;
			getch() ;
		}
	} while (!valid) ;
	if (strlen(ename) == 0)
	{
		strcpy(ename,name) ;
		gotoxy(20,7) ;
		cout < FOR NO CHANGE" ;
		gotoxy(20,8) ; clreol() ;
		gets(eaddress) ;
		strupr(eaddress) ;
		if (eaddress[0] == '0')
			return ;
		if (strlen(eaddress) > 30)
		{
			valid = 0 ;
			gotoxy(5,25) ; clreol() ;
			cout < <"\7Enter correctly (Range: 1..30)" ;
			getch() ;
		}
	} while (!valid) ;
	if (strlen(eaddress) == 0)
	{
		strcpy(eaddress,address) ;
		gotoxy(20,8) ;
		cout < FOR NO CHANGE" ;
		gotoxy(20,9) ; clreol() ;
		gets(ephone) ;
		if (ephone[0] == '0')
			return ;
		if ((strlen(ephone) < 7 && strlen(ephone) > 0) || (strlen(ephone) > 9))
		{
			valid = 0 ;
			gotoxy(5,25) ; clreol() ;
			cout < <"\7Enter correctly" ;
			getch() ;
		}
	} while (!valid) ;
	if (strlen(ephone) == 0)
	{
		strcpy(ephone,phone) ;
		gotoxy(20,9) ;
		cout < FOR NO CHANGE" ;
		gotoxy(20,10) ; clreol() ;
		gets(edesig) ;
		strupr(edesig) ;
		if (edesig[0] == '0')
			return ;
		if (strlen(edesig) > 15)
		{
			valid = 0 ;
			gotoxy(5,25) ; clreol() ;
			cout < <"\7Enter correctly (Range: 1..15)" ;
			getch() ;
		}
	} while (!valid) ;
	if (strlen(edesig) == 0)
	{
		strcpy(edesig,desig) ;
		gotoxy(20,10) ;
		cout < FOR NO CHANGE" ;
		gotoxy(20,11) ; clreol() ;
		egrade = getche() ;
		egrade = toupper(egrade) ;
		if (egrade == '0')
			return ;
		if (egrade == 13)
		{
			egrade = grade ;
			gotoxy(20,11) ;
			cout <  'E') ;
	if (egrade != 'E')
	{
		gotoxy(5,12) ;
		cout < <"House (y/n)    : " ;
		gotoxy(5,13) ;
		cout <<"Convense (y/n) : " ;
		gotoxy(5,15) ;
		cout <<"Basic Salary   : " ;
		do
		{
			gotoxy(5,25) ; clreol() ;
			cout <<"ALLOTED HOUSE ALLOWANCE ? or  FOR NO CHANGE" ;
			gotoxy(22,12) ; clreol() ;
			ehouse = getche() ;
			ehouse = toupper(ehouse) ;
			if (ehouse == '0')
				return ;
			if (ehouse == 13)
			{
				ehouse = house ;
				gotoxy(22,12) ;
				cout <  FOR NO CHANGE" ;
			gotoxy(22,13) ; clreol() ;
			econv = getche() ;
			econv = toupper(econv) ;
			if (econv == '0')
				return ;
			if (econv == 13)
			{
				econv = convense ;
				gotoxy(22,13) ;
				cout <  FOR NO CHANGE" ;
		gotoxy(22,14) ; clreol() ;
		gets(t1) ;
		t2 = atof(t1) ;
		eloan = t2 ;
		if (eloan > 50000)
		{
			valid = 0 ;
			gotoxy(5,25) ; clreol() ;
			cout < <"\7SHOULD NOT GREATER THAN 50000" ;
			getch() ;
		}
	} while (!valid) ;
	if (strlen(t1) == 0)
	{
		eloan = loan ;
		gotoxy(22,14) ;
		cout < FOR NO CHANGE" ;
			gotoxy(22,15) ; clreol() ;
			gets(t1) ;
			t2 = atof(t1) ;
			ebasic = t2 ;
			if (t1[0] == '0')
				return ;
			if (ebasic > 50000)
			{
				valid = 0 ;
				gotoxy(5,25) ; clreol() ;
				cout < <"\7SHOULD NOT GREATER THAN 50000" ;
				getch() ;
			}
		} while (!valid) ;
		if (strlen(t1) == 0)
		{
			ebasic = basic ;
			gotoxy(22,15) ;
			cout <=EXIT" ;
	gotoxy(5,5) ;
	cout < <"Enter code of the Employee  " ;
	gets(t1) ;
	t2 = atoi(t1) ;
	ecode = t2 ;
	if (ecode == 0)
		return ;
	clrscr() ;
	if (!FOUND_CODE(ecode))
	{
		gotoxy(5,5) ;
		cout <<"\7Record not found" ;
		getch() ;
		return ;
	}
	gotoxy(72,2) ;
	cout <<"<0>=EXIT" ;
	gotoxy(24,3) ;
	cout < <"DELETION OF THE EMPLOYEE RECORD" ;
	DISPLAY_RECORD(ecode) ;
	do
	{
		gotoxy(5,24) ; clreol() ;
		cout <<"Do you want to delete this record (y/n) " ;
		ch = getche() ;
		ch = toupper(ch) ;
		if (ch == '0')
			return ;
	} while (ch != 'Y' && ch != 'N') ;
	if (ch == 'N')
		return ;
	DELETE_RECORD(ecode) ;
	LINES L ;
	L.CLEARDOWN() ;
	gotoxy(5,23) ;
	cout <<"\7Record Deleted" ;
	gotoxy(5,25) ;
	cout <<"Press any key to continue..." ;
	getch() ;
}


//**********************************************************
// THIS FUNCTION RETURN 0 IF THE GIVEN DATE IS INVALID
//**********************************************************

int EMPLOYEE :: VALID_DATE(int d1, int m1, int y1)
{
	int valid=1 ;
	if (d1>31 || d1<1)
		valid = 0 ;
	else
	if (((y1%4)!=0 && m1==2 && d1>28) || ((y1%4)==0 && m1==2 && d1>29))
		valid = 0 ;
	else
	if ((m1==4 || m1==6 || m1==9 || m1==11) && d1>30)
		valid = 0 ;
	return valid ;
}



//**********************************************************
// THIS FUNCTION PRINTS THE SALARY SLIP FOR THE EMPLOYEE
//**********************************************************

void EMPLOYEE :: SALARY_SLIP(void)
{
	clrscr() ;
	char t1[10] ;
	int t2, ecode, valid ;
	gotoxy(72,2) ;
	cout < <"<0>=EXIT" ;
	gotoxy(5,5) ;
	cout < <"Enter code of the Employee  " ;
	gets(t1) ;
	t2 = atoi(t1) ;
	ecode = t2 ;
	if (ecode == 0)
		return ;
	clrscr() ;
	if (!FOUND_CODE(ecode))
	{
		gotoxy(5,5) ;
		cout <<"\7Record not found" ;
		getch() ;
		return ;
	}
	fstream file ;
	file.open("EMPLOYEE.DAT", ios::in) ;
	file.seekg(0,ios::beg) ;
	while (file.read((char *) this, sizeof(EMPLOYEE)))
	{
		if (code == ecode)
			break ;
	}
	file.close() ;
	int d1, m1, y1 ;
	struct date d;
	getdate(&d);
	d1 = d.da_day ;
	m1 = d.da_mon ;
	y1 = d.da_year ;
	char *mon[12]={"January","February","March","April","May","June","July","August","September","November","December"} ;
	LINES L ;
	L.BOX(2,1,79,25,219) ;
	gotoxy(31,2) ;
	cout <<"SAM'S PVT. LTD." ;
	L.LINE_HOR(3,78,3,196) ;
	gotoxy(34,4) ;
	cout <<"SALARY SLIP" ;
	gotoxy(60,4) ;
	cout <<"Date: " < 8 || hours < 0)
			{
				valid = 0 ;
				gotoxy(10,21) ;
				cout <<"\7ENTER CORRECTLY                     " ;
				getch() ;
				gotoxy(10,13) ;
				cout <<"                    " ;
			}
		} while (!valid) ;
		gotoxy(10,21) ;
		cout <<"                                               " ;
		gotoxy(10,11) ;
		cout <<"                        " ;
		gotoxy(10,13) ;
		cout <<"                        " ;
	}
	gotoxy(10,10) ;
	cout <<"Basic Salary         : Rs." ;
	gotoxy(10,12) ;
	cout <<"ALLOWANCE" ;
	if (grade != 'E')
	{
		gotoxy(12,13) ;
		cout <<"HRA  : Rs." ;
		gotoxy(12,14) ;
		cout <<"CA   : Rs." ;
		gotoxy(12,15) ;
		cout <<"DA   : Rs." ;
	}
	else
	{
		gotoxy(12,13) ;
		cout <<"OT   : Rs." ;
	}
	gotoxy(10,17) ;
	cout <<"DEDUCTIONS" ;
	gotoxy(12,18) ;
	cout <<"LD   : Rs." ;
	if (grade != 'E')
	{
		gotoxy(12,19) ;
		cout <<"PF   : Rs." ;
	}
	gotoxy(10,21) ;
	cout <<"NET SALARY           : Rs." ;
	gotoxy(6,24) ;
	cout <<"CASHIER" ;
	gotoxy(68,24) ;
	cout <<"EMPLOYEE" ;
	float HRA=0.0, CA=0.0, DA=0.0, PF=0.0, LD=0.0, OT=0.0, allowance, deduction, netsalary ;
	if (grade != 'E')
	{
		if (house == 'Y')
			HRA = (5*basic)/100 ;
		if (convense == 'Y')
			CA  = (2*basic)/100 ;
		DA  = (5*basic)/100 ;
		PF  = (2*basic)/100 ;
		LD  = (15*loan)/100 ;
		allowance = HRA+CA+DA ;
		deduction = PF+LD ;
	}
	else
	{
		basic = days * 30 ;
		LD  = (15*loan)/100 ;
		OT  = hours * 10 ;
		allowance = OT ;
		deduction = LD ;
	}
	netsalary = (basic+allowance)-deduction ;
	gotoxy(36,10) ;
	cout <

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
If opportunity doesn't knock, build a door. - Milton Berle
March 29th, 2024 - Friday
background

Sign in to continue