龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

员工管理系统(链表)

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
#include #include #include #define OUTPUT temp->num,temp->name,temp->gender,temp->age,temp->department,temp->telephone,temp->wage #define FORMAT "%-10lu%-13s%-9c%-6u%-18s%-13lu%lu " #define INFO "number name genderage departmenttelephone wa

  #include

  #include

  #include

  #define OUTPUT temp->num,temp->name,temp->gender,temp->age,temp->department,temp->telephone,temp->wage

  #define FORMAT "%-10lu%-13s%-9c%-6u%-18s%-13lu%lu

"

  #define INFO "number name genderage departmenttelephone wage

"

  

  char ch;

  unsigned int mn,fn,find;

  unsigned long msum,fsum;

  strUCt workers

  {

   char name[15],department[18],gender;

   unsigned int age;

   unsigned long telephone,wage,num;

   struct workers *next;

  };struct workers *head,*bottom,*temp,*p;

  create()

  {

   int i;

   head=NULL;

   mn=fn=msum=fsum=0;

   for (i=0;;i++)

   {

   printf("

Information of worker NO.%d(Press '*' when input worker's name if finish)",i+1);

   insert();

   }

   getch();

   return main();

  }

  analysis()

  {

   clrscr();

   printf("

**********************************Wage report*********************************

");

   printf(INFO);

   temp=head;

   while(temp!=NULL)

   {

   printf(FORMAT,OUTPUT);

   temp=temp->next;

   }

   if(head==NULL)

   printf("

No worker in list,please entry first!");

   showreport();

  }

  showreport()

  {

   FILE *report;

   report=fopen("report.dat","w");

   fprintf(report,"

GenderFemaleMaleTotal");

   fprintf(report,"

Number%d%d%d",fn,mn,fn+mn);

   fprintf(report,"

Total wage%lu%lu%lu",fsum,msum,fsum+msum);

   if(mn==0&&fn==0)

   fprintf(report,"

Average wage0.000.000.00");

   else if(fn==0)

   fprintf(report,"

Average wage0.00%.2f%.2f",(float)(msum/mn),(float)(msum/mn));

   else if(mn==0)

   fprintf(report,"

Average wage%.2f0.00%.2f",(float)(fsum/fn),(float)(fsum/fn));

   else

   fprintf(report,"

Average wage%.2f%.2f%.2f",(float)(fsum/fn),(float)(msum/mn),(float)((fsum+msum)/(fn+mn)));

   ch=fgetc(report);

   fclose(report);

   report=fopen("report.dat","r");

   while(feof(report)==0)

   {

   putchar(ch);

   ch=fgetc(report);

   }

   fclose(report);

  }

  search()

  {

   unsigned long fnum;

   find=0;

   temp=head;

   do

   {

   printf("

Worker's number you want to find:");

   fflush(stdin);

   scanf("%lu",&fnum);

   if(fnum<1fnum>100000000)

   printf("Worker's number is required from 1 to 100000000!");

   }while(fnum<1fnum>100000000);

   while(temp->next!=NULL&&fnum!=temp->num)

   {

   p=temp;

   temp=temp->next;

   }

   if(fnum==temp->num)

   {

   find=1;

   printf("

");

   printf(INFO);

   printf(FORMAT,OUTPUT);

   }

   else

   {

   find=0;

   printf("

Not found this worker!");

   }

  }

  insert()

  {

   if(head==NULL)

   {

   bottom=temp=(struct workers *)malloc(sizeof(struct workers));

   head=temp;

   }

   else

   {

   temp=(struct workers *)malloc(sizeof(struct workers));

   bottom->next=temp;

   }

   do{

   printf("

Worker's name:");

   fflush(stdin);

   scanf("%s",temp->name);

   if(strlen(temp->name)>15)

   printf("The length of worker's name must less than 15!");

   }while(strlen(temp->name)>15);

   if (temp->name[0]!='*')

   {

   add();

   bottom->next=temp;

   bottom=temp;

   }

   else

   {

   free(temp);

   bottom->next=NULL;

   if(fn+mn==0)

   head=NULL;

   printf("

Entry finish,press any key to return...");

   getch();

   return main();

   }

   bottom->next=NULL;

  }

  add()

  {

   do{

   printf("Worker's number:");

   fflush(stdin);

   scanf("%lu",&temp->num);

   if(temp->num<1temp->num>100000000)

   printf("Worker's number is required from 1 to 100000000!

");

   }while(temp->num<1temp->num>100000000);

   do

   {

   printf("Worker's gender('m','f','M'or'F'):");

   fflush(stdin);

   scanf("%c",&temp->gender);

   if((temp->gender!='m')&&(temp->gender!='f')&&(temp->gender!='M')&&(temp->gender!='F'))

   printf("Please input as 'm','f','M'or'F'!

");

   }while((temp->gender!='m')&&(temp->gender!='f')&&(temp->gender!='M')&&(temp->gender!='F'));

   do

   {

   printf("Worker's age:");

   fflush(stdin);

   scanf("%u",&temp->age);

   if(temp->age<=18temp->age>=100)

   printf("Worker's age must more than 18 and less than 100!

");

   }while(temp->age<=18temp->age>=100);

   do{

   printf("Worker's department:");

   fflush(stdin);

   scanf("%s",&temp->department);

   if(strlen(temp->department)>18)

   printf("The length of worker's department must less than 18!

");

   }while(strlen(temp->department)>18);

   do

   {

   printf("Worker's telephone(8 digit):");

   fflush(stdin);

   scanf("%lu",&temp->telephone);

   if(temp->telephone>99999999temp->telephone<10000000)

   printf("Contact telephone is 8 digit!

");

   }while(temp->telephone>99999999temp->telephone<10000000);

   do

   {

   printf("Worker's wage(more than 100):");

   fflush(stdin);

   scanf("%lu",&temp->wage);

   if(temp->wage<100)

   printf("This worker's wage mustn't below 100!

");

   }while(temp->wage<100);

   if((temp->gender=='m')(temp->gender=='M'))

   {

   msum+=temp->wage;

   mn++;

   }

   else

   {

   fsum+=temp->wage;

   fn++;

   }

  }

  delete()

  {

   search();

   if(find==1)

   {

   printf("

Do you want to delete this worker?(Y/N)");

   fflush(stdin);

   ch=getchar();

   if(ch=='y'ch=='Y')

   {

   if(temp==head)

   head=temp->next;

   else

   p->next=temp->next;

   if(temp->gender=='m'temp->gender=='M')

   {

   msum-=temp->wage;

   mn--;

   }

   else if(temp->gender=='f'temp->gender=='F')

   {

   fsum-=temp->wage;

   fn--;

   }

   free(temp);

   analysis();

   printf("

Delete OK,press any key to return...");

   getch();

   return m

  

  

精彩图集

赞助商链接