#include<iostream.h>
#include<conio.h>
#include<string.h>
#include <dos.h>
#include<process.h>
#include<fstream.h>
#include<stdio.h>
#include<graphics.h>//FOR GRAPHICS
#include<stdlib.h>
#include<dos.h>//FOR DELAY ETC.
#include<string.h>
//#include "box.h"int gdriver = DETECT, gmode, errorcode; //Meant for the opening page//For the Welcome Screenvoid smile(void)
{
int midx,midy;
initgraph(&gdriver, &gmode, "d:\\turboc3");
errorcode = graphresult();
if (errorcode != grOk) /* an error occurred */
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(0);
}
setlinestyle(USERBIT_LINE,1,1);
rectangle(4,6,620,460);
midx = getmaxx() / 2;
midy = getmaxy() / 2;
settextjustify(CENTER_TEXT,CENTER_TEXT);
setbkcolor(9);
settextstyle(5,HORIZ_DIR,5);
outtextxy(midx,midy,"MASTERMIND PVT.LTD");
getch();
closegraph();
}
//structure declaration struct employee {
long code;
char name[30];
char address[60];
char dob[10];
char doj[10];
char desg[20];
char dept;
float sal;
char qlfn[20];
char flag;
}erec;
//function prototype declaration void newdata();
void accept_screen();
int generate_code();
void tabular_display();
void update();
void deldata();
void query();
void reports();
void gen_report();
void grp_report();
void pay_slip();
void smile();
fstream temp; //global open mode void main(void)
{
clrscr();
smile(); //to call the opening page fn // structure for implementing date struct date d;
getdate(&d);
int choice;
temp.open("emp.dat",ios::binary|ios::in|ios::out);
do
{
clrscr();
// mybox(2,1,4,77,3);
gotoxy(20,3);textcolor(YELLOW);cprintf("EMPLOYEE DATABASE MANAGEMENT SYSTEM");
gotoxy(2,5);textcolor(10);cprintf("Dated : %d/%d/%d",d.da_day,d.da_mon,d.da_year);
// mybox(6,1,21,77,3);// mybox(22,1,25,77,3);// section to set up a menu
gotoxy(33,7);textcolor(YELLOW); cprintf("M E N U");
gotoxy(27,12); textcolor(WHITE);cprintf("1. New Employee");
gotoxy(27,13); cprintf("2. Update Employee");
gotoxy(27,14); cprintf("3. Delete Employee");
gotoxy(27,15); cprintf("4. Query Information");
gotoxy(27,16); cprintf("5. Reports/Salary Slip");
gotoxy(27,17); cprintf("6. Quit");
// section to read and implement choice
gotoxy(24,23); textcolor(YELLOW); cprintf("Enter Choice 1/2/3/4/5/6 ?");
cin>>choice;
switch(choice)
{
case 1 : newdata();break;
case 2 : update(); break;
case 3 : deldata();break;
case 4 : query(); break;
case 5 : reports();break;
case 6 : exit(1);
}
}
while (choice != 6);
}
//function to add new data to the table void newdata(void)
{
char ch;
long emp_code;
//make the data Entry Screen Available
emp_code=generate_code();
accept_screen();
//open the file in append mode //Read the contents into the Records
erec.code=emp_code;
gotoxy(28,6); cout<<erec.code;
gotoxy(28,8); fflush(stdin); gets(erec.name);
gotoxy(28,10); fflush(stdin); gets(erec.address);
gotoxy(28,12); fflush(stdin); gets(erec.dob);
gotoxy(28,14); fflush(stdin); gets(erec.doj);
gotoxy(28,16); fflush(stdin); gets(erec.desg);
gotoxy(37,18); fflush(stdin); cin>>erec.dept;
gotoxy(28,20); fflush(stdin); cin>>erec.sal;
gotoxy(28,22); fflush(stdin); gets(erec.qlfn);
//write the record in to the table
gotoxy(20,24); cprintf("Confirm Y/N?"); fflush(stdin); cin>>ch;
if( ch=='y'|| ch=='Y')
{
erec.flag=' ';
temp.seekp(0L,ios::end);
temp.write((char*)&erec,sizeof(erec));
temp.clear();
}
getch();
}
//function to create data entry screen void accept_screen(void)
{ clrscr();
// mybox(2,1,4,77,11);
gotoxy(27,3); textcolor(YELLOW); cprintf("New Employee details");
// mybox(5,1,23,77,11);// mybox(23,1,25,77,11);//DETAILS
textcolor(WHITE);
gotoxy(10,6); cprintf("Code ");
gotoxy(10,8); cprintf("Name ");
gotoxy(10,10); cprintf("Address ");
gotoxy(10,12); cprintf("Date of Birth ");
gotoxy(10,14); cprintf("Date of Joining ");
gotoxy(10,16); cprintf("Designation :");
gotoxy(10,18); cprintf("Department [S/T/R/M/A ] ");
gotoxy(10,20); cprintf("Basic Pay ");
gotoxy(10,22); cprintf("Qualification ");
//selection to accept details
textbackground(BLUE); textcolor(WHITE);
gotoxy(28,6); cprintf(" ");
gotoxy(28,8); cprintf(" ");
gotoxy(28,10); cprintf(" ");
gotoxy(28,12); cprintf(" ");
gotoxy(28,14); cprintf(" ");
gotoxy(28,16); cprintf(" ");
gotoxy(37,18); cprintf(" ");
gotoxy(28,20); cprintf(" ");
gotoxy(28,22); cprintf(" ");
textbackground(BLACK);
}
//function to track the Employee code; int generate_code(void)
{
temp.seekg(0L,ios::beg);
if(!temp.read((char*)&erec,sizeof(erec)))
{
temp.clear();
return(100);
}
else
{
temp.seekg(0L,ios::beg); //point the pointer to the begining of the file while(temp.read((char*)&erec,sizeof(erec)));
{ }
temp.clear();
return(erec.code+1);
}
}
//function to query record void query(void)
{ int ch,row=9;
float tsal=0.0;
char dpt;
clrscr();
// mybox(2,1,4,77,3);
gotoxy(25,3); textcolor(YELLOW); cprintf("View/Query Employee Details");
// mybox(4,1,6,77,3);
textcolor(LIGHTGREEN);
gotoxy(10,5); cprintf(" (1) All Records (2) Criteria Based Choce[1/2] ?");
gotoxy(73,5); fflush(stdin); cin>>ch;
switch(ch)
{
case 1:
{
//create a tabular format for display using boxes
tabular_display();
//call file for display
temp.seekg(0L,ios::beg);
textcolor(WHITE);
while (temp.read((char *)&erec,sizeof(erec)))
{
gotoxy(2,row); cprintf("%d",erec.code);
gotoxy(6,row); cprintf("%s",erec.name);
gotoxy(28,row); cprintf("%s",erec.dob);
gotoxy(38,row); cprintf("%s",erec.doj);
gotoxy(48,row); cprintf("%s",erec.desg);
gotoxy(58,row); cprintf("%c",erec.dept);
gotoxy(62,row); cprintf("%8.2f",erec.sal);
gotoxy(71,row); cprintf("%s",erec.qlfn);
row++;
if(row>22)
{
gotoxy(25,25);
cprintf("More.....");
getch();
textcolor(WHITE);
clrscr();
// mybox(2,1,4,77,3);
gotoxy(25,3); textcolor(YELLOW);
cprintf("View/Query Employee Details");
textcolor(LIGHTGREEN);
gotoxy(10,5); cprintf(" (1) All Records (2) Criteria based Choice[1/2] ??");
gotoxy(73,5);
cout<<ch;
tabular_display();
row=9;
}
}
temp.clear();
}break;
case 2: {
tabular_display();
textcolor(WHITE);
gotoxy(26,6); cprintf("Department S/T/R/M/A >");
gotoxy(48,6); cprintf(" ");
fflush(stdin);
gotoxy(48,6);
cin>>dpt;
//call the file for display
temp.seekg(0L,ios::beg);
textcolor(WHITE);
//display section while(temp.read((char *)&erec,sizeof(erec)))
{
if(erec.dept==dpt)
{
tsal=tsal+erec.sal;
gotoxy(2,row); cprintf("%d",erec.code);
gotoxy(6,row); cprintf("%s",erec.name);
gotoxy(28,row); cprintf("%s",erec.dob);
gotoxy(38,row); cprintf("%s",erec.doj);
gotoxy(48,row); cprintf("%s",erec.desg);
gotoxy(58,row); cprintf("%c",erec.dept);
gotoxy(62,row); cprintf("%8.2f",erec.sal);
gotoxy(71,row); cprintf("%s",erec.qlfn);
row++;
if(row>22)
{
gotoxy(25,25);
cprintf("More.....");
getch();
textcolor(WHITE);
clrscr();
// mybox(2,1,4,77,3);
gotoxy(25,3); textcolor(YELLOW);
cprintf("View/Query Employee Details");
textcolor(LIGHTGREEN);
gotoxy(10,5); cprintf(" (1) All Records (2) Criteria based Choice[1/2] ??");
gotoxy(73,5);
cout<<ch;
tabular_display();
row=9;
}
}
}
temp.clear();
}
//display the grand total
textcolor(WHITE);
gotoxy(20,25); cprintf("Departmentwise Total");
gotoxy(60,25); cprintf("Rs.%.2f\n",tsal);
}
getch();
}
void tabular_display(void)
{
//draw boxes // mybox(6,1,24,5,3);// mybox(6,5,24,27,3);// mybox(6,27,24,37,3);// mybox(6,37,24,47,3);// mybox(6,47,24,57,3);// mybox(6,57,24,61,3);// mybox(6,61,24,70,3);// mybox(6,70,24,77,3);//display headings
textcolor(YELLOW);
gotoxy(2,7); cprintf("ID#");
gotoxy(12,7); cprintf("Name");
gotoxy(30,7); cprintf("DOB");
gotoxy(41,7); cprintf("DOJ");
gotoxy(51,7); cprintf("Desg");
gotoxy(58,7); cprintf("Dept");
gotoxy(63,7); cprintf("Pay");
gotoxy(72,7); cprintf("Qlfn");
textcolor(WHITE);
}
//section to delete a record from the table void deldata(void)
{
int check = 0;
long mcode;
longint pos;
int count=0;
clrscr();
// mybox(2,1,4,77,3);
gotoxy(25,3); textcolor(YELLOW); cprintf("Delete Employee Details");
// mybox(5,1,8,77,3);
textcolor(LIGHTGREEN);
gotoxy(25,7);
cprintf("Enter the Search Code:"); cin>>mcode;
temp.seekg(0L,ios::beg); //position the pointer to the begining of the file //search the employee code while(temp.read((char *)&erec,sizeof(erec)))
{
if(erec.code==mcode)
{ erec.flag='*';
check = 1;
pos=count*sizeof(erec);
temp.seekp(pos,ios::beg);
temp.write((char *)&erec,sizeof(erec));
break;
}
count++;
}
temp.clear();
//section to permanently remove the matching record if (check == 0)
{
gotoxy(25,15); cprintf("No matching Records For Deletion");
getch();
}
else
{
ofstream tp;
tp.open("temp.dat",ios::binary|ios::out);
//position the pointer to the begining of the file
temp.seekg(0L,ios::beg);
//search the record marked for deletion while(temp.read((char *)&erec,sizeof(erec)))
{
if(erec.flag!='*')
tp.write((char *)&erec,sizeof(erec));
}
tp.clear();
tp.close();
temp.close();
remove("emp.dat");
rename("temp.dat","emp.dat");
temp.open("emp.dat",ios::binary|ios::in|ios::out);
textcolor(YELLOW);
gotoxy(25,15); cprintf("Record Successfully Deleted");
getch();
}
}
//section to update record void update(void)
{
int count=0,check=0;
longint pos;
long mcode;
clrscr();
// mybox(2,1,4,77,3);
gotoxy(25,3); textcolor(YELLOW); cprintf("Update Employee Details");
// mybox(5,1,8,77,3);
textcolor(WHITE); gotoxy(25,7); cprintf("Enter Update Code >");
cin>>mcode;
// mybox(9,1,25,77,3);//read File, display the original details & provide space to update //position to the begining of the file
temp.seekg(0L,ios::beg);
textcolor(WHITE);
while(temp.read((char *)&erec,sizeof(erec)))
{
if(erec.code==mcode)
{
//first Display the original Contents
check=1;
gotoxy(2,12); cprintf("Code : %ld\n",erec.code);
gotoxy(2,13); cprintf("Name : %s\n",erec.name);
gotoxy(2,14); cprintf("Addr : %s\n",erec.address);
gotoxy(2,15); cprintf("Dob : %s\n",erec.dob);
gotoxy(2,16); cprintf("Doj : %s\n",erec.doj);
gotoxy(2,17); cprintf("Desg : %s\n",erec.desg);
gotoxy(2,18); cprintf("Dept : %c\n",erec.dept);
gotoxy(2,19); cprintf("Sal : %.2f\n",erec.sal);
gotoxy(2,20); cprintf("qlfn : %s\n",erec.qlfn);
//section to display pads for data entry
textbackground(BLUE);
textcolor(WHITE);
gotoxy(30,12); cprintf(" ");
gotoxy(30,13); cprintf(" ");
gotoxy(30,14); cprintf(" ");
gotoxy(30,15); cprintf(" ");
gotoxy(30,16); cprintf(" ");
gotoxy(30,17); cprintf(" ");
gotoxy(30,18); cprintf(" ");
gotoxy(30,19); cprintf(" ");
gotoxy(30,19); cprintf(" ");
//section to read data
gotoxy(30,12); cin>>erec.code;
gotoxy(30,13); fflush(stdin); gets(erec.name);
gotoxy(30,14); fflush(stdin); gets(erec.address);
gotoxy(30,15); fflush(stdin); gets(erec.dob);
gotoxy(30,16); fflush(stdin); gets(erec.doj);
gotoxy(30,17); fflush(stdin); gets(erec.desg);
gotoxy(30,18); fflush(stdin); cin>>erec.dept;
gotoxy(30,19); fflush(stdin); cin>>erec.sal;
gotoxy(30,20); fflush(stdin); gets(erec.qlfn);
textbackground(BLACK);
erec.flag=' ';
//position the put pointer so that the //existing record is qverwitten
pos=count*sizeof(erec);
temp.seekp(pos,ios::beg);
temp.write((char *)&erec,sizeof(erec));
break;
} //end of if statement
count++;
}//end of while loop if(check==0)
{
gotoxy(15,15); cprintf("No employee in File with matching code");
gotoxy(15,16); cprintf("Press Any Key .........");
getch();
}
temp.clear();
}
//section to print reports void reports(void)
{ int opt;
do
{
clrscr();
// mybox(2,1,4,77,3);
gotoxy(35,3); textcolor(YELLOW);
cprintf("R E P O R T S");
// mybox(5,1,20,77,3);
textcolor(WHITE);
gotoxy(27,9); cprintf("1> General Report");
gotoxy(27,11); cprintf("2> Grouped Report");
gotoxy(27,13); cprintf("3> Salary Slip");
gotoxy(27,15); cprintf("4> Exit");
gotoxy(27,18); cprintf("Option 1/2/3/4 ?"); cin>>opt;
switch(opt)
{
case 1:gen_report();break;
case 2:grp_report();break;
case 3:pay_slip();break;
}
}
while (opt != 4);
} // end of reportsvoid gen_report(void)
{
float tsum=0.0;
struct date d;
char stng[80];
ofstream temp_write_file;
getdate(&d);
// open the Report.dat file for reading
temp_write_file.open("temp.dat",ios::out);
temp_write_file<<" MASTERMIND PVT.LTD"<<endl;
temp_write_file<<" GENERAL EMPLOYEE REPORT"<<endl;
temp_write_file<<"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"<<endl;
// section to implement Date
sprintf(stng," Dated:%d/%d/%d\n",d.da_day,d.da_mon,d.da_year);
temp_write_file<<stng<<endl;
temp_write_file<<endl;
strcpy(stng," ");
temp_write_file<<" Code Name Dept Designation Salary"<<endl;
temp_write_file<<"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"<<endl;
strcpy(stng," ");
temp.seekg(0L,ios::beg); // reset the pointer to ther begining of the file while(temp.read((char *)&erec,sizeof(erec)))
{
sprintf(stng,"%11ld%19s%12c%21s%17.2f\n",erec.code,erec.name,erec.dept,erec.desg,erec.sal);
temp_write_file<<stng;
tsum = tsum + erec.sal;
strcpy(stng," ");
}
temp_write_file<<endl;
temp_write_file<<"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"<<endl;
//section to implement the grand Total
sprintf(stng," Grand total Rs.%.2f\n",tsum);
temp_write_file<<stng<<endl;
temp_write_file<<"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"<<endl;
temp_write_file<<"#"<<endl;
temp_write_file.close();
system("edit.com temp.dat");
remove("temp.dat");
temp.clear();
} // end of general report function void pay_slip(void)
{
char stng[80];
char line[80];
float hra,gp,tax,np;
int check = 0;
int mcode;
struct date d;
getdate(&d);
clrscr();
gotoxy(10,10);
textcolor(YELLOW);
cprintf("Salary Slip for code # :");
cin>>mcode;
textcolor(WHITE);
clrscr();
ofstream temp_file;
temp_file.open("temp.dat",ios::out);
temp.seekg(0L,ios::beg);
sprintf(stng," MASTERMIND PVT.LTD");
temp_file<<stng<<endl;
strcpy(stng," ");
sprintf(stng," SALARY SLIP");
temp_file<<stng<<endl;
strcpy(stng," ");
temp_file<<endl<<endl;
sprintf(stng," Dated : %d/%d/%d\n",d.da_day,d.da_mon,d.da_year);
temp_file<<stng<<endl;
temp_file<<" ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ\n\n";
// Now open the main file
temp.seekg(0L,ios::beg);
check = 0;
while(temp.read((char *)&erec,sizeof(erec)))
{
if (erec.code == mcode)
{
check = 1;
break; // if matching record is found break out
}
}
if (check == 0)
{
gotoxy(20,25);
cout<<"Sorry ! No matching Record!!!"<<endl;
getch();
}
elseif (check == 1)
{
sprintf(stng, " Name : %s Department : %c\n",erec.name,erec.dept);
temp_file<<stng;
temp_file<<" ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ\n\n";
// calculation section for hra,gp,tax and net pay switch(erec.dept)
{
case's':
case'S': hra = 15 * erec.sal/100; break;
case'T':
case't': hra = 18 * erec.sal/100;break;
case'R':
case'r': hra = 24 * erec.sal/100; break;
case'M':
case'm': hra = 16 * erec.sal/100;break;
case'A':
case'a': hra = 19 * erec.sal/100;break;
}
gp = erec.sal + hra;
// section to determine tax switch(erec.dept)
{
case'S':
case's': tax = 3.5 * gp/100; break;
case'T':
case't': tax = 5 * gp/100;break;
case'R':
case'r': tax = 7 * gp/100;break;
case'M':
case'm': tax = 4.5 * gp/100;break;
case'A':
case'a': tax = 5.5 * gp/100;break;
}
np = gp- tax;
// section to implement the remaining part of the file
sprintf(stng," Basic Salary Rs%12.2f\n",erec.sal);
temp_file<<stng;
strcpy(stng," ");
sprintf(stng," HRA Rs%12.2f\n",hra);
temp_file<<stng;
strcpy(stng," ");
sprintf(stng," Gross Salary Rs%12.2f\n",gp);
temp_file<<stng;
strcpy(stng," ");
sprintf(stng, " Tax Deducted Rs%12.2f\n",tax);
temp_file<<stng;
strcpy(stng," ");
temp_file<<" ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ\n\n";
sprintf(stng," Net Amount Rs%12.2f\n",np);
temp_file<<stng;
strcpy(stng," ");
temp_file<<" ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ";
temp_file<<"#"<<endl;
strcpy(stng," ");
temp_file.close();
system("edit.com temp.dat");
remove("temp.dat");
}
temp.clear();
temp.seekg(0L,ios::beg);
} // end of function body void grp_report(void) //for a grouped report
{
// Here the complete file is read into a linked list. The // linked list is read repeatedly for each group seperately struct date d;
getdate(&d);
float sub_total=0.0;
float grand_total =0.0;
// structure for the linked list struct lemp
{
int code;
char name[30];
char desg[30];
char dept;
float sal;
struct lemp *link;
}*p,*q,*r; // pointers to the structure // the first node is dummy
p = new lemp; q=p; r=p;p->link = NULL;
temp.seekg(0L,ios::beg);
while (temp.read((char *)&erec, sizeof(erec)))
{
p = new lemp;
p->code = erec.code;
strcpy(p->name,erec.name);
strcpy(p->desg,erec.desg);
p->dept = erec.dept;
p->sal = erec.sal;
//cout<<p->code<<" "<<p->name<<" "<<p->desg<<" "<<p->dept<<" "<<p->sal<<endl;
grand_total = grand_total + erec.sal;
q->link = p;
q = p;
}
q->link = NULL; // completed the linked list here
getch();
// open the file and prepare the grouped Report
ofstream temp_file;
temp_file.open("temp.dat",ios::out);
char ndept[5] = {'S','T','R','M','A'};
int i;
char line[80];
char stng[80];
//........... implement the top heading of the Report..........
sprintf(stng," MASTERMIND PVT.LTD");
temp_file<<stng<<endl;
strcpy(stng," ");
sprintf(stng," GROUPED REPORT");
temp_file<<stng<<endl;
strcpy(stng," ");
temp_file<<endl<<endl;
sprintf(stng," Dated : %d/%d/%d\n",d.da_day,d.da_mon,d.da_year);
temp_file<<stng<<endl;
temp_file<<" Code Name Dept Designation Salary"<<endl;
temp_file<<"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ\n\n";
// ............end of Heading of Report................... // Now to read the linked list based on Array for(i=0;i<5;++i)
{
p = r->link;
if (ndept[i] == 'S')
temp_file<<"Sales"<<endl;
elseif (ndept[i] == 'T')
temp_file<<"Training"<<endl;
elseif (ndept[i] == 'R')
temp_file<<"Research"<<endl;
elseif (ndept[i] == 'M')
temp_file<<"Marketing"<<endl;
elseif (ndept[i] == 'A')
temp_file<<"Administration"<<endl;
while (p->link != NULL)
{
if(p->dept == ndept[i])
{
sub_total = sub_total + p->sal;
sprintf(stng,"%11d%19s%12c%21s%17.2f\n",p->code,p->name,p->dept,p->desg,p->sal);
cout<<stng;
temp_file<<stng;
strcpy(stng," ");
}
p = p->link;
}
temp_file<<"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"<<endl;
sprintf(stng," Subtotal Rs %0.2f\n\n",sub_total);
temp_file<<stng;
strcpy(stng," ");
sub_total = 0;
}
temp_file<<"ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"<<endl;
sprintf(stng," GrandTotal Rs. %0.2f\n",grand_total);
temp_file<<stng<<endl;
strcpy(stng," ");
temp_file<<"#"<<endl;
temp_file.close();
system("edit.com temp.dat");
remove("temp.dat");
temp.clear();
}