DSA Employee ledger sorting searching
Fri Aug 25 2023 06:25:34 GMT+0000 (Coordinated Universal Time)
Saved by @Astik
#include<stdio.h>
#include<string.h>
#include<conio.h>
struct emp{char name[20];
int empid;
int salary;
int exp;
};
int n, minindex, maxin,maxsal;
int i,j, targetempid,left,right,mid,found;
struct emp key, *ptr;
void enterdetails(struct emp employee[]){
for(i=0;i<n;i++){
printf("Enter name for emp %d ",i+1);
scanf("%s", employee[i].name);
printf("Enter empid for emp %d ",i+1);
scanf("%d ",&employee[i].empid);
printf("Enter salary of emp %d ",i+1);
scanf("%d", &employee[i].salary);
printf("Enter experience for emp %d ",i+1);
scanf("%d",&employee[i].exp);
}
}
void printdetails(struct emp employee[]){
for(i=0;i<n;i++){
printf("Details for emp %d:\n",i+1);
printf("Name: %s\n",employee[i].name);
printf("Empid : %d\n",employee[i].empid);
printf("Salary: %d\n",employee[i].salary);
printf("Experience: %d\n",employee[i].exp);
printf("\n");
}
}
void empidsort(struct emp employee[]){
for(i=0;i<n-1;i++){
minindex=i;
for(j=i+1;j<n;j++){
if(employee[j].empid<employee[minindex].empid)
minindex=j;
}
key=employee[i];
employee[i]=employee[minindex];
employee[minindex]=key;
}
printdetails(employee);
}
void salarysort(struct emp employee[]){
for(i=0;i<n-1;i++){
minindex=i;
for(j=i+1;j<n;j++){
if(employee[j].salary<employee[minindex].salary)
minindex=j;
}
key=employee[i];
employee[i]=employee[minindex];
employee[minindex]=key;
}
printdetails(employee);
}
void expsort(struct emp employee[]){
for(i=0;i<n-1;i++){
minindex=i;
for(j=i+1;j<n;j++){
if(employee[j].exp<employee[minindex].exp)
minindex=j;
}
key=employee[i];
employee[i]=employee[minindex];
employee[minindex]=key;
}
printdetails(employee);
}
void maxsalary(struct emp employee[]){
int maxin=0;
int maxsal=employee[0].salary;
for(i=1;i<n;i++){
if(employee[i].salary>maxsal)
maxin=i;
}
ptr=&employee[maxin];
printf("Max salary is %d of employee %s having empid %d. \n",ptr->salary,ptr->name,ptr->empid);
}
void searchemp(struct emp employee[]){
empidsort(employee);
printf("Enter the empid to search : ");
scanf("%d",&targetempid);
left=0,right=n-1,found=-1;
while(left<=right){
int mid=left+(right-left)/2;
if(employee[mid].empid==targetempid){
found=mid;
break;
} else if(employee[mid].empid<targetempid){
left=mid+1;
}else {
right=mid-1;
}
}if(found!=-1){
printf("Employee found\n");
printf("Name : %s\n",employee[found].name);
printf("Empid: %d\n",employee[found].empid);
printf("Salary : %d\n",employee[found].salary);
printf("Experience :%d\n",employee[found].exp);
}else{
printf("Employee with empid %d not found.\n",targetempid);
}
}
int main(){
int choice=1;
int ch;
struct emp employee[20];
clrscr();
printf("Enter count of employee: ");
scanf("%d",&n);
enterdetails(employee);
printdetails(employee);
do{
printf("Enter your choice:\n");
printf("Sorting using empid: 1\nSorting using exp: 2\nSorting using Salary: 3\n Search For max salary: 4\n search for empid: 5\n Display: 6\n");
scanf("%d",&ch);
switch(ch){
case 1:
empidsort(employee);
break;
case 2:
expsort(employee);
break;
case 3:
salarysort(employee);
break;
case 4:
maxsalary(employee);
break;
case 5:
searchemp(employee);
break;
case 6:
printdetails(employee);
break;
default:
printf("Enter valid choice\n");
break;
}
printf("Do you want to continue(1 for YES 0 for NO):");
scanf("%d",&choice);
}while(choice!=0);
getch();
return 0;
}



Comments