C语言课程设计-工资管理系统 第4页


C语言课程设计
 {
      printf("\nout of memory");      /*如没有得到空间,内存溢出*/
      exit(0);                        /*退出程序*/
   }
   info->next=NULL;                   /*新结点的后继为空*/
   info->prior=NULL;                  /*新结点的前驱为空*/
   gotoxy(1,8);printf("|");
   gotoxy(12,8);printf("|");
   gotoxy(29,8);printf("|");
   gotoxy(38,8);printf("|");
   gotoxy(2,8);
   inputs(info->no,10);               /*输入新结点的编号,并校验*/
   gotoxy(13,8);
   inputs(info->name,14);             /*输入新结点的姓名,并校验*/
   gotoxy(30,8);
   scanf("%f",&temp);                 /*输入基本工资*/
   info->jbgz=temp;                   /*给基本工资字段赋值*/
   info->koukuan=0;                   /*扣款初始为0*/
   info->yfgz=0;                      /*应发工资初始为0*/
   info->shuijin=0;                   /*税金初始为0*/
   info->sfgz=0;                      /*实发工资初始为0*/
   printf("|----------|----------------|--------|");
   p=First;                           /*移动指针从头指针开始*/
   while(strcmp(p->no,s)&&p!=NULL)    /*查找结点确定插入位置*/
      p=p->next;                      /*指针后移,继续查找*/
   if(p==NULL)                        /*如p为空*/
      if(p==First)                    /*如p为头指针,说明链表为空*/
      {
         First=info;                  /*新结点为头指针*/
         First->prior=NULL;           /*头结点的前驱为空*/
         Last=First;                  /*唯一结点,尾指针等于头指针*/
      }
      else                            /*新结点插在尾部*/
      {
         Last->next=info;
         info->prior=Last;
         Last=info;                   /*尾指针指向新结点*/
      }
   else
      if(p==First)                    /*p不为空,但p为头指针,新结点插在第一个结点位置*/
      {
         info->prior=NULL;            /*新结点的前驱为空*/
         info->next=p;                /*新结点的后继为p*/
         p->prior=info;               /*p的前驱是新结点*/
         First=info;                  /*修改头指针指向新结点*/
      }
      else                            /*新结点插入在中间某一个位置p之前*/
      {
         info->next=p;                /*新结点的后继是p*/
         info->prior= p->prior;       /*新结点的前驱是p的前驱*/
         p->prior->next=info;         /*p的前驱的后继是新结点*/
         p->prior=info;               /*p的前驱是新结点*/
      }
   printf("\n\n\n ----have inserted %s SALARY----\n",info->name);
   printf("\n---Don't forget save---\n"); /*提醒调用保存文件存盘*/
}
/*保存文件*/
void save()
{
   FILE *fp;                          /*定义指向文件的指针*/
   SALARY *p;                         /*定义移动指针*/
   char outfile[10];                  /*保存输出文件名*/
   clrscr();                          /*清屏*/
   printf("Enter outfile name,for example c:\\f1\\te.txt:\n");/*提示输入文件名格式信息*/
   scanf("%s",outfile);
   if((fp=fopen(outfile,"wb"))==NULL) /*为输出打开一个二进制文件*/
   {
      printf("can not open file\n");
      return;                         /*返回*/
   }
   printf("\nSaving file......\n");
   p=First;                           /*移动指针从头指针开始*/
   while(p!=NULL)                     /*如p不为空*/
   {
      fwrite(p,sizeof(SALARY),1,fp);  /*写入一条记录*/
      p=p->next;                      /*指针后移,处理下一条记录*/
   }
   fclose(fp);                        /*关闭文件*/
   printf("-----save success!!-----\n");/*显示保存成功*/
}
/*排序*/
void sort()
{
   SALARY *p0,*p00,*p1,*p11,*p2;      /*定义临时指针*/
   int i=1;                           /*统计当前排第几个结点*/
   clrscr();                          /*清屏*/
   printf("\n\n start sort....\n");   /*开始排序*/
   p1=p11=p2=First;
   while(p1!=NULL)                    /*当p1不为空时*/
   {
      p0=p1;                          /*待比较结点从p1开始*/
      p2=p1;                          /*p2从当前待排序位置开始*/
      while(p2->next!=NULL) /*p2的后继不为空时*/
      {
         if(p0->sfgz>p2->next->sfgz)  /*找当前最小结点*/
         {
            p00=p2;                   /*找到当前最小结点记录其前驱指针*/
            p0=p2->next;              /*记录当前最小值结点的指针p0*/
         }
         p2=p2->next;                 /*指针后移*/
      }
      Last=p0;                        /*当前最小结点为尾结点*/
      if(p1!=p0)                      /*判断最小结点是否是当前排序位置,不是则作指针修改*/
      {
         p00->next=p0->next;          /*将p00的后继指向p0的后继*/
         p0->next->prior=p00;         /*p0的后继的前驱为p00*/
         p0->next=p1;                 /*p0的后继指向下个排序位置p1*/
         p1->prior=p0;                /*p1的前驱为p0*/
         if(i==1)
         {
            First=p0;                 /*作头指针*/
            First->prior=NULL;        /*头指针的前驱为空*/
         }
         else                         /*不是第一个结点*/
         {
            p11->next=p0;             /*p11的后继指向p0*/
            p0->prior=p11;            /*p0的前驱指向p11*/
         }
         p11=p1=p0;                   /*因p0是排好序的最后一个结点,p1是下一个将要排序的位置,所以将p0赋值给p1和p11*/
      }
      i++;                            /*排好序的结点数加1*/
      p1=p1->next;                    /*p1后移指向下一个待排序位置*/
   }
   printf("sort sucess!!!\n");        /*输出排序成功*/
}

/*初始化函数*/
void init()
{
   First=NULL;
   Last=NULL;
}
/*输入数据,创建双链表*/
void create()
{
751com.cn
   SALARY *info,*p;     /*定义临时变量*/
   if(First!=NULL)
   init();              /*如果头指针为空,调用初始化函数*/
   p=First;             /*从头指针开始*/
   for(;;)
   {
      if(flag==1)
         break;         /*如果flag=1,结束输入*/
      i=0;
      x=0;              /*确定移动的行坐标*/
      clrscr();         /*清屏*/
      gotoxy(1,3);
      printf("*************gongziguanli*************");/*输出标题*/
      gotoxy(1,4);
      printf("                      --Enter @ end--"); /*提示输入@结束*/
      gotoxy(1,5);
      printf("|------------------------------------|");/*输出表格的起始线*/
      gotoxy(1,6);
      printf("|    no    |      name      |  jbgz  |");/*输出字段标题,注意空格数*/
      for(;;)
      {
         gotoxy(1,7+x);
         printf("|----------|----------------|--------|");/*输出表格的水平线*/
         info=(SALARY *)malloc(sizeof(SALARY));        /*申请一个记录空间*/
         if(!info)
         {
            printf("\nout of memory");/*如没有得到空间,输出内存溢出信息*/
            exit(0);                  /*退出程序*/

上一页  [1] [2] [3] [4] [5] [6] 下一页

  • 上一篇文章:
  • 下一篇文章:
  • Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有