(排序和删除有问题,求大神!!!)C语言写的职工工资管理系统

排序和删除运行后会突然停止工作,求大神搭救。本人C语言菜鸟一枚,刚学C,写了个比较粗糙的系统,代码也是有参考别人的。毕竟水平有限,希望能有大神,帮我看看,指出其中的毛病。好的差的评价与建议都可留下,能给我留评论的都不甚感激,我一定会参考大家的意见,做出改进,努力地进步的.



#include
#include
#include
/*-----------------------定义职工结构体-----------------------*/
struct workerinf   //职工信息
{
  char name[30];   //职工姓名
  char sex[4];
  int ID;          //职工工号
  double salary1,salary2,salary3;  //基本工资,奖金,扣款
  double yfgz;       //保存职工应发工资
  double sk;         //保存职工税款
  double sfgz;       //保存职工实发工资
};


struct workerlink   //职工信息链节点
{
  char name[30];
  char sex[4];
  int ID;
  double salary1,salary2,salary3;//基本工资,奖金,扣款
  double yfgz;       //保存职工应发工资
  double sk;         //保存职工税款
  double sfgz;       //保存职工实发工资
  struct workerlink *next;
};


int sizeworker=sizeof(struct workerinf);
int sizeworlink=sizeof(struct workerlink);
/*------------------------计算文件长度-------------------------*/
int FileLenth(FILE  *fp)
{
    long flen;
  fseek(fp,0L,2);  /*到文件末尾*/
    flen=ftell(fp);  /*取位置*/
    rewind(fp);      /*回到文件头*/
    return flen;
}
/*------------------检测工号是否存在,若存在返回 1---------------*/
int exist(int n,FILE *fp) 
{  struct workerinf*p; 
   int cz=0;
   p=(struct workerinf*)malloc(sizeworker);     /*申请一个新节点,用于读文件内容*/
   rewind(fp);
   while(!feof(fp))
   {
     fread(p,sizeworker,1,fp);  /*读出文件内容*/
     if(p->ID==n)
     {cz=1;break;}
   }
   return cz;
}
/*-------------------------录入文字---------------------------*/
void InputWord(char *lx,char *p)
{
    char word[20];
    printf("请输入%s:",lx);
    scanf("%s",word);
    strcpy(p,word);
}//该函数的设定是为了后面编写代码不用重复啰嗦,以体现代码的简洁性
/*--------------------录入职工的工资-------------------------*/
float InputResult(char *lx,float d1,float d2)
{
    float result;
    printf("请输入职工%s:",lx);
    scanf("%f",&result);
    while(result>d2||result     {
       printf("%s在%6.2f--%6.2f之间,请重新输入:",lx,d1,d2);
       scanf("%f",&result);
    }
    return (result);
}//为了防止恶意操作,使操作系统更加的人性化。
/*--------------------创建职工数据表-----------------------*/
void CreatWorker()
{
  long start,filelen;     //定义long型位移量start
  FILE *fp;               //定义一个指向文件的指针变量
  struct workerinf *w;    //定义一个职工信息的结构体变量,用于记录职工信息
  int amount=0;           //记录职工个数


  if((fp=fopen("staff","a+"))==NULL) fp=fopen("staff","w+");//将fopen函数返回值(指向staff文件的指针,即staff文件信息区的起始地址)
  start=FileLenth(fp);     //FileLenth函数利用fp测出staff文件信息区的长度赋给start。
  w=(struct workerinf*)malloc(sizeworker);
                           //申请一个结构体空间,用于记录职工的数据。
  while(1)                 //如果真,就执行while循环
  {  
  printf("请输入职工的工号(输入0返回主菜单):\n");
     scanf("%d",&w->ID);
     if(w->ID==0)         //用户输入0,退出
       {
        if (amount==0) 
        break; //无数据输入,直接退出,不用在退出前打印新录入的数据。
         filelen=FileLenth(fp);//做为后面打印出刚输入的信息的参数
         fseek(fp,start,0);     /*在退出前,将文件位置标记向前移动到离文件开头start个字节处.即文件尾。*/
        printf("|工号\t|姓名\t|性别\t|基本工资|奖金\t |扣款\t|应发工资|税款\t|实发工资|\n");
         while(ftell(fp)           {
             fread(w,sizeworker,1,fp);     /*fread函数从fp所指向文件缓冲区的文件读入1个sizewoker个字节的数据,存储到w结构体中。即读出文件的内容。*/
             printf("|%d\t|%s\t|%s\t|%6.2f|%6.2f|%6.2f|%6.2f|%6.2f|%6.2f|\n",w->ID,w->name,w->sex,w->salary1,w->salary2,w->salary3,w->yfgz,w->sk,w->sfgz);
           }//在退出前将新录入的数据打印出来。
        break;//终止本次循环,直接退出输入数据的界面。
       }
     if(w->ID<0)
       {
        printf("\n输入的工号不能为0,请您重新输入:\n");
        continue;//结束本次循环。
        }
     if(exist(w->ID,fp)==1)   //检测工号是否存在。
       {
        printf("\n输入的工号已经存在!请您重新输入:\n"); 
        continue;
        }


       InputWord("姓名",w->name); //录入数据
       InputWord("性别",w->sex);//录入数据
       w->salary1=InputResult("基本工资",2000,10000);//录入数据
       w->salary2=InputResult("奖金",1000,5000);//录入数据
       w->salary3=InputResult("扣款",100,1000);//录入数据
       w->yfgz=w->salary1+w->salary2-w->salary3;//计算出应发的工资
       w->sk=w->yfgz*(0.05);//计算税款
       w->sfgz=w->yfgz*(0.95);//计算实发工资
       
       printf("职工工资信息录入完成,请查看:\n\n");
       printf("|%d\t|%s\t|%s\t|%6.2f|%6.2f|%6.2f|%6.2f|%6.2f|%6.2f|\n",w->ID,w->name,w->sex,w->salary1,w->salary2,w->salary3,w->yfgz,w->sk,w->sfgz);


       fwrite(w,sizeworker,1,fp);//把数据写入staff磁盘文件
       printf("系统已自动保存该职工的信息...\n\n");
       amount++;


    }
     fclose(fp);
}
/*-------------------------查找职工的数据-----------------------*/
void xmcz()//按姓名查找
{
 FILE *fp;
 struct workerinf *w;
 char name[20];
 int n=0;
 void search();
 
 if((fp=fopen("staff","r+"))==NULL) {printf("无数据可查\n");return;}


 while(1)
  {
     printf("请输入要查找的职工的姓名(输入0返回上一步):");
     scanf("%s",name);
     if(name[0]=='0')  break;//退出循环.退出按姓名查找的界面.
     rewind(fp);      //由于打开文件时,文件位置标记移动到了文件尾,因此将标记移动回文件开头。
     
        while(!feof(fp))       //打印找到的数据
            {  w=(struct workerinf*)malloc(sizeworker);     //申请一个新节点,用于读文件内容
              fread(w,sizeworker,1,fp);  //读出文件内容
               if(strcmp(w->name,name)==0)
                  {
                    printf("\n");
                    printf("|工号\t|姓名\t|性别\t|基本工资|奖金\t |扣款\t|应发工资|税款\t|实发工资|\n");
                    printf("|%d\t|%s\t|%s\t|%6.2f |%6.2f|%6.2f|%6.2f |%6.2f|%6.2f |\n",w->ID,w->name,w->sex,w->salary1,w->salary2,w->salary3,w->yfgz,w->sk,w->sfgz);
                    n++;
                  }
            }          
       if(n==0) 
         printf("无此职工数据!\n");   
    }
    fclose(fp);
   system("cls");
   search();
}


void ghcz()//工号查找
{
  FILE *fp;
  struct workerinf *w;
  int id;
  void search();


  if((fp=fopen("staff","r+"))==NULL) {printf("无数据可查\n");return;}
  w=(struct workerinf*)malloc(sizeworker);
  while(1)
  {
    printf("请输入要查找的工号(输入0返回上一步)\n");
    scanf("%d",&id);
    if(id==0)  break;
    
    while(exist(id,fp)==1)
     { 
       fseek(fp,-1L*sizeworker,1);
       fread(w,sizeworker,1,fp);
       printf("|工号\t|姓名\t|性别\t|基本工资|奖金\t |扣款\t|应发工资|税款\t|实发工资|\n");
       printf("|%d\t|%s\t|%s\t|%6.2f |%6.2f|%6.2f|%6.2f |%6.2f|%6.2f |\n",w->ID,w->name,w->sex,w->salary1,w->salary2,w->salary3,w->yfgz,w->sk,w->sfgz);
       break; 
      }
    if(exist(id,fp)!=1) 
      {printf("未找到该职工的记录!\n");}
  }
  fclose(fp);
  system("cls");
  search();
}


void search()//二级菜单
{
     int n=0;
     while(!n) 
    {     printf("\t\t\t-----职工工资查询-----\n\n"); 
            printf("            \t\t\t查找\n");
     printf("\t\t|------------------------------------|\n");
     printf("\t\t| 1按姓名查找   | 2按工号查找        |\n");
     printf("\t\t|------------------------------------|\n");
     printf("\t\t|          0返回主菜单               |\n");
     scanf("%d",&n);
     switch(n)
     {
       case 0:return;
       case 1:{xmcz();break;}
       case 2:{ghcz();break;}
       default:{printf("输入错误!请重新输入。\n");break;}
      }
    
    }
}
/*--------------------修改职工信息-------------------------*/
/*算法思想:
1.利用while()循环,从文件开头开始,(只要文件位置标记还没到文件尾)不断地移动文件位置标记,一
个记录一个记录的比较,直到找到相匹配的内容,然后再进行修改。
备注:进行新的记录的修改的时候,要将文件位置标记置于文件的开头.*/
/*2.或者用for循环,此处打算采用for循环。*/


void save(struct workerinf *w,FILE *fp)  //将数据写入文件中

   fseek(fp,-1L*sizeworker,1);            //回滚一个记录
   fwrite(w,sizeworker,1,fp);  //写新文件内容
   printf("系统已自动保存了数据...\n\n");
 }


void read(struct workerinf *w,FILE *fp)  //载入文件中的数据
{
   fseek(fp,-1L*sizeworker,1);
   fread(w,sizeworker,1,fp);
}


void xmxg()
{
      FILE *fp;
      struct workerinf *w;
      char name[20];
      char s[5];
      int ft=0L,filelen;
      int num=0;  //用来记录修改的职工信息数
      int flag;
      void Change();
      
      if((fp=fopen("staff","r+"))==NULL) printf("无数据可修改"); 
      filelen=FileLenth(fp);
      
      do
      {
          printf("请输入要修改的职工的姓名(输入0返回上一步):");
          scanf("%s",name);
          if(name[0]=='0') break;
        
          rewind(fp);/*由于是从头到尾读取staff文件中的内容与要查询的name进行比对文件位置标记不断
的移动到下一个字节。当完成修改后,进行新的修改时,要将文件位置标记置于
文件的开头,好进行新的一轮的比对修改。*/
         
         for(ft=0L;ft          {    w=(struct workerinf *)malloc(sizeworker);
              fread(w,sizeworker,1,fp);
              if(strcmp(w->name,name)==0)/*如果要查询的姓名与文件中的姓名一致,就先打印出该职工
的信息 */
                {
                     printf("|工号\t|姓名\t|性别\t|基本工资|奖金\t |扣款\t|应发工资|税款\t|实发工资|\n");
                     printf("|%d\t|%s\t|%s\t|%6.2f |%6.2f|%6.2f|%6.2f |%6.2f|%6.2f |\n",w->ID,w->name,w->sex,w->salary1,w->salary2,w->salary3,w->yfgz,w->sk,w->sfgz);
                     printf("确认修改?(Y/N)\n");
                scanf("%s",s);
                if(s[0]=='n'||s[0]=='N') break;
                printf("\n");




                     InputWord("姓名",w->name); //录入数据
                     InputWord("性别",w->sex);//录入数据
                     w->salary1=InputResult("基本工资",2000,10000);//录入数据
                     w->salary2=InputResult("奖金",1000,5000);//录入数据
                     w->salary3=InputResult("扣款",100,1000);//录入数据
                     w->yfgz=w->salary1+w->salary2-w->salary3;//计算出应发的工资
                     w->sk=w->yfgz*(0.05);//计算税款
                     w->sfgz=w->yfgz*(0.95);//计算实发工资
                     
                     save(w,fp);
                     read(w,fp);
                     printf("修改后的信息如下:\n");
                     printf("|工号\t|姓名\t|性别\t|基本工资|奖金\t |扣款\t|应发工资|税款\t|实发工资|\n");
                     printf("|%d\t|%s\t|%s\t|%6.2f |%6.2f|%6.2f|%6.2f |%6.2f|%6.2f |\n",w->ID,w->name,w->sex,w->salary1,w->salary2,w->salary3,w->yfgz,w->sk,w->sfgz);
                     num++; 
                     break;
                }
         }
           if(strcmp(w->name,name)!=0)      
           printf("无该职工的信息!\n");
           rewind(fp);
           printf("是否要继续修改职工信息:是(1)/否(0)?");
           scanf("%d",&flag);
      }while(flag!=0); 
     fclose(fp);
    system("cls");
    Change();
}


void ghxg()
{
      FILE *fp;
      struct workerinf *w;
      int flag;
      int id;
      int num=0;
      int ft=0L,filelen;
      char s[10];
      void Change();
      
      if((fp=fopen("staff","r+"))==NULL) printf("无职工信息可修改!");
      filelen=FileLenth(fp);
      do
      {
       printf("请输入你要修改的工号:(输入0返回上一步)");
       scanf("%d",&id);
       if(id==0) break;
       for(ft=0L;ft         {   
            w=(struct workerinf *)malloc(sizeworker);
            fread(w,sizeworker,1,fp);
            if(w->ID==id)
             {
                printf("|工号\t|姓名\t|性别\t|基本工资|奖金\t |扣款\t|应发工资|税款\t|实发工资|\n");
                printf("|%d\t|%s\t|%s\t|%6.2f |%6.2f|%6.2f|%6.2f |%6.2f|%6.2f |\n",w->ID,w->name,w->sex,w->salary1,w->salary2,w->salary3,w->yfgz,w->sk,w->sfgz);
                printf("是否要修改该职工的信息(Y/N)");
                scanf("%s",s);
                if(s[0]=='n'||s[0]=='N') break;
                printf("\n");
                


                InputWord("姓名",w->name); //录入数据
                InputWord("性别",w->sex);//录入数据
                w->salary1=InputResult("基本工资",2000,10000);//录入数据
                w->salary2=InputResult("奖金",1000,5000);//录入数据
                w->salary3=InputResult("扣款",100,1000);//录入数据
                w->yfgz=w->salary1+w->salary2-w->salary3;//计算出应发的工资
                w->sk=w->yfgz*(0.05);//计算税款
                w->sfgz=w->yfgz*(0.95);//计算实发工资
                 
                save(w,fp);
                read(w,fp);
                printf("修改后的信息如下:\n");
                printf("|工号\t|姓名\t|性别\t|基本工资|奖金\t |扣款\t|应发工资|税款\t|实发工资|\n");
                printf("|%d\t|%s\t|%s\t|%6.2f |%6.2f|%6.2f|%6.2f |%6.2f|%6.2f |\n",w->ID,w->name,w->sex,w->salary1,w->salary2,w->salary3,w->yfgz,w->sk,w->sfgz);
                num++;
                break;
              }
         }
        if(w->ID!=id) printf("无此职工的信息!\n");
        rewind(fp);
        printf("是否继续修改职工信息:是(1)/否(0)?");
       scanf("%d",&flag);
       }while(flag!=0);
    fclose(fp);
    system("cls");
    Change();
}


void Change()//二级菜单
{
     int n=0;


    
    while(!n) 
    {       
     printf("\t\t\t-----修改职工工资信息-----\n\n");
            printf("            \t\t\t修改\n");
     printf("\t\t|------------------------------------|\n");
     printf("\t\t| 1按姓名修改   | 2按工号修改        |\n");
     printf("\t\t|------------------------------------|\n");
     printf("\t\t|          0返回主菜单               |\n");
     scanf("%d",&n);
     switch(n)
     {
       case 0:return;
       case 1:{xmxg();break;}
       case 2:{ghxg();break;}
       default:{printf("输入错误!请重新输入:\n");break;}
      }


    }
}
/*------------------------删除职工信息----------------------*/
/*算法思想:*/


void Delete()
{
  int id,flag=1;
   char s[10];
    FILE *fp;
    struct workerinf *w;


    if((fp=fopen("staff","r+"))==NULL) {printf("无数据可删除\n");return;}
    w=(struct workerinf *)malloc(sizeworker);   


    do
    {   printf("请输入要删除的工号(输入0返回主菜单):");
        scanf("%d",&id);
        if(id==0)   break;          
        if(exist(id,fp)==1)        
            {  
                fseek(fp,-1L*sizeworker,1);
                fread(w,sizeworker,1,fp); 
            printf("|工号\t|姓名\t|性别\t|基本工资|奖金\t |扣款\t|应发工资|税款\t|实发工资|\n");
                printf("|%d\t|%s\t|%s\t|%6.2f |%6.2f|%6.2f|%6.2f |%6.2f|%6.2f |\n",w->ID,w->name,w->sex,w->salary1,w->salary2,w->salary3,w->yfgz,w->sk,w->sfgz);
            printf("职工工资数据非常重要,您确认要删除吗?(Y/N)");
               scanf("%s",s);
               if(s[0]=='n'||s[0]=='N') break;
               printf("再确认一次(Y/N)");
               scanf("%s",s);
               if(s[0]=='n'||s[0]=='N') break;
               w->ID=0;
               fseek(fp,-1L*sizeworker,1); 
               fwrite(w,sizeworker,1,fp);  
            }         
        else  
            printf("无此职工数据\n");
       printf("该职工工资信息已被删除!");
       printf("是否继续删除职工信息:是(1)/否(0)?");
       scanf("%d",&flag);
    }while(flag!=0);
    fclose(fp);  
}
/*------------------------排序职工信息----------------------*/
/*从指定的文件读入一条记录*/
void readrecord(struct workerlink *to,struct workerinf *w)
{
    to->ID=w->ID;
strcpy(to->name,w->name);
strcpy(to->sex,w->sex);
to->salary1=w->salary1;
to->salary2=w->salary2;
to->salary3=w->salary3;
to->yfgz=w->yfgz;
to->sk=w->sk;
to->sfgz=w->sfgz;
  return ;
}
void writerecord(struct workerinf *to,struct workerlink *w)
{
    to->ID=w->ID;
strcpy(to->name,w->name);
strcpy(to->sex,w->sex);
to->salary1=w->salary1;
to->salary2=w->salary2;
to->salary3=w->salary3;
to->yfgz=w->yfgz;
to->sk=w->sk;
to->sfgz=w->sfgz;
  return ;
}
/*构造链表*/
void makelist()
{
    FILE *fp;
    struct workerlink *r,*q,*head,*p;
    long ft=0L,filelen;
    struct workerinf *w;   
    int i;
    
     head=NULL;  // 分配两个结构的内存空间,用于构造链表
     head = (struct workerlink *) malloc(sizeworlink);
     head->next = (struct workerlink *) malloc(sizeworlink);
     head->next->next = NULL;// 构造一个结点p,用于插入链表
     p = (struct workerlink *) malloc(sizeworlink);
     
     if((fp=fopen("staff","r+"))==NULL)  {printf("没有职工的资料!");exit(0);}
     filelen=FileLenth(fp);
     for(i=0;i<2;i++)
    { 
       w=(struct workerinf *)malloc(sizeworker);
       readrecord(head,w);
     }


   while(ft    {  
    w=(struct workerinf *)malloc(sizeworker);  
        p->next=NULL;
        readrecord(p,w);
    // 第一种情况,链表为空
    if ((head)==NULL) head = p;// 链表头指向p
else // 链表不为空
{
        // 第二种情况,p结点ID值小于链表头结点的ID值
if ( head->ID > p->ID)
{     // 将p结点插到链表头部
      p->next = head;// 将p的next指针指向链表头(head)
     head = p; // 将链表头赋值为p
}
       // 第三种情况,循环查找正确位置
r = head; // r赋值为链表头
q = head->next; // q赋值为链表的下一个结点
while (q!=NULL) // 利用循环查找正确位置
{
// 判断当前结点ID是否小于p结点的ID
if (q->ID < p->ID)
{
r = q; // r赋值为q,即指向q所指的结点
q = q->next;// q指向链表中相邻的下一个结点
}
else // 找到了正确的位置
break; // 退出循环
}              // 将p结点插入正确的位置
r->next = p;
p->next = q;
}
   ft=ftell(fp);
  }
  p=head;
  rewind(fp);
  while(p!=NULL)
  {
    writerecord(w,p);
    p=p->next;   
    fwrite(w,sizeworker,1,fp);
   }
 fclose(fp);
 printf("排序成功!");
}
/*------------------------显示职工信息----------------------*/
void print()
{
    FILE *fp;
    struct workerinf *w;
    int ft=0L,filelen;
    
    if((fp=fopen("staff","r"))==NULL){ printf("无数据可显示!");return;}
    filelen=FileLenth(fp);
    for(ft;ft     {
        w=(struct workerinf *)malloc(sizeworker);
        fread(w,sizeworker,1,fp);
        printf("|工号\t|姓名\t|性别\t|基本工资|奖金\t |扣款\t|应发工资|税款\t|实发工资|\n");
        printf("|%d\t|%s\t|%s\t|%6.2f |%6.2f|%6.2f|%6.2f |%6.2f|%6.2f |\n\n",w->ID,w->name,w->sex,w->salary1,w->salary2,w->salary3,w->yfgz,w->sk,w->sfgz);


     }
    fclose(fp);    
}
/*------------------------清除已经删除的数据------------------------------------*/
void clean()
{
        FILE *fp;
        int ft=0L,filelen,n=0;
        struct workerlink *p,*head,*p2,*p3;//p向前指针;p2尾指针;head头指针;p3临时指针;




        if((fp=fopen("staff","r+"))==NULL) {printf("无法打开文件!");return;}//先将文件打开,以便下面的数据的读写
        filelen=FileLenth(fp);//计算出文件的长度
   
         
         /*.....................初始化头节点...........................*/
         
         p=(struct workerlink *)malloc(sizeworlink);      //分配一个内存用于临时存放职工的工资信息,并构造链表
         fread(p,sizeworker,1,fp);              //从fp文件指针所指向的文件信息区读取一个sizeworker个字节的记录,存入到w结构体中
         ft=ftell(fp);
         /*................将文件中的数据载入到链表中................*/     
         
        for(ft;ft          {
              
              if(n==0) head=p;
              else p2=p;
              p=(struct workerlink *)malloc(sizeworlink);p->next=NULL;
              fread(p,sizeworker,1,fp);//从fp文件指针所指向的文件信息区读取一个sizeworker个字节的记录,存入到w结构体中。
              p2->next=p;
              n++;
    
          }
         
        /*..................查找要删除的数据并删除.............*/
        
        p=p2=head;
        while(p->next!=NULL)
         {
      
             if(p->ID==0)
              {
                   /*...删除的节点是头节点....*/
                  if(head==p){ head=head->next; p->next=NULL;}
                  else
                   {
                   /*...删除的节点在链表中间...*/
                    p3=p->next;
                    p2->next=p3;
                    p->next=NULL;
                   }
                   /*...删除的节点是尾节点...*/
                   if(p->next==NULL)
                   p2->next=NULL;
                }    
                   
              if(p2->next==p) p2=p2->next;
              p=p->next;
          }


        /*............将链表中的数据从新写入文件中...........*/
         p=head;
         rewind(fp); 
         for(ft=0L;ft          {
            fwrite(p,sizeworker,1,fp);
            p=p->next;
          }
     fclose(fp);      
}
/*------------------------备份职工文件----------------------*/
void BackWorker()
{
    system("copy staff staffbak");    //调用DOS命令
}
/*------------------------恢复职工文件----------------------*/
void UpWorker()
{
    system("copy staffbak staff");   //调用DOS命令
}
/*------------------------作者信息-------------------------*/
void author()
{
  printf("\t|--<-<-<@  --<-<-<@  --<-<-<@  --<-<-<@  --<-<-<@ |\n");
  printf("\t|……………………广东石油化工学院…………………… |\n");
  printf("\t|^^^^^^^^^^^^^^^^信息与计算科学^^^^^^^^^^^^^^^^^^^|\n");
  printf("\t|----------------冯皓林__制作---------------------|\n");
  printf("\t|****************指导老师:梁国业老师*************|\n");
  printf("\t按回车返回主菜单...\n");
 
}
/*-----------------------主菜单----------------------------*/
int quit()            //退出函数
{
int choice=0;
char s[5];
    printf("确认退出?(Y/N)\n");
scanf("%s",s);
if(s[0]=='y'||s[0]=='Y')
    {system("cls");
     printf("\n\n\n\n\n\t\t°★.☆° .★·°∴°★.°·∴°☆ ·°∴° ☆..·\n");
     printf("\t\t☆°★°∴°°∴ ☆°.·★°∴°.\n");
     printf("\t\t   ◢◣。       ◢◣。     ☆天★\n");
     printf("\t\t ◢■■◣。   ◢■■◣。     ☆天★\n");
     printf("\t\t◢■■■◣。 ◢■■■◣。      ★快☆\n");
     printf("\t\t︸︸||︸︸ !!︸︸||︸︸        ☆乐★\n");
     printf("\n\t\t\t谢谢您使用职工工资管理系统!^_^!!再见~\n");
     printf("\t\t ☆°★°∴°°∴ ☆°.·★°∴°°☆ ·°∴° ☆..·\n");
     printf("\t\t                                                    \n ");
     printf("\t\t°★.☆° .★·°∴°★.°·∴°☆ ·°∴° ☆..·.\n"); 
     exit(0);} 
    else choice=1;
    return choice;
}


void main()
{
        int choice;
        char c;
       system("cls");            //刷屏
system("color 1e");
do                        //菜单函数循环
{   printf("\n\n\n\n");
printf("\t>>>>>>>>>>>>>>>>欢迎使用职工工资管理系统<<<<<<<<<<<<<<<<<\n");
            printf("\t^^^^^^^^^^^^^^^^^^^MENU功能菜单^^^^^^^^^^^^^^^^^^^^^^^^\n");
            printf("\t◤          ★。 |0. -->退出<--                      ◥\n");
            printf("\t◆          ★。 |1. -->录入职工工资信息<--          ◆\n");
            printf("\t◆          ★。 |2. -->修改职工工资信息<--          ◆\n");
            printf("\t◆          ★。 |3. -->查询职工工资信息<--          ◆\n");
            printf("\t◆          ★。 |4. -->职工工资排序<--              ◆\n");
            printf("\t◆          ★。 |5. -->职工工资信息显示<--          ◆\n");
            printf("\t◆          ★。 |6. -->删除职工工资信息<--          ◆\n");
            printf("\t◆          ★。 |7. -->职工工资信息备份<--          ◆\n");
            printf("\t◆          ★。 |8. -->职工工资信息恢复<--          ◆\n");
            printf("\t◣          ★。 |9. -->查看作者信息<--              ◢\n");               
  
            printf("\t^^^^^^^^^^^^^^^^^^^请选择(1-9):^^^^^^^^^^^^^^^^^^^^^^^^\n");               
  
            printf("\t>>>>>>>>>>>>>>>>>>>~可输入汉字~<<<<<<<<<<<<<<<<<<<<<<<<<<\n");   
            scanf("%d",&choice);
            switch(choice)                  //菜单函数
{
case 0:printf("\t\to     退出职工工资管理系统        o\n");
                      choice=quit();break;                           //退出系统函数
        case 1:system("cls");
               printf("\t\t\t-----职工工资信息录入-----\n\n");
                       CreatWorker();break;                    //录入函数
case 2:system("cls");
      Change();break; //修改函数
case 3:system("cls");
      search();break;                         //查找函数
case 4:printf("\t\t\t-----职工工资信息排序-----\n\n");                     
                       makelist();break; //排序函数
case 5:system("cls");
      printf("\t\t\t-----职工工资信息显示-----\n\n"); 
                       print();break;                     //显示职工信息
case 6:printf("\t\t\t-----删除职工的数据----\n\n");                            
                       Delete();clean();break;        //删除职工工资信息
case 7:printf("\t\t\t-----职工工资信息备份-----\n\n");                           
                       BackWorker();break;                     //备份文件
case 8:printf("\t\t\t-----职工工资信息恢复-----\n\n");                           
                       UpWorker();break;                       //恢复文件
case 9:system("cls");
      printf("\n\n\n\n\n\n\n\t\t\t-----查看作者信息---------\n\n"); 
                       author();break;                         //作者信息函数
default:printf("\t------输入有误,请重新输入-----\n");
         }
                printf("按回车键继续...\n");c=getchar();c=getchar();
           system("cls");/*清屏*/
}while(choice!=0);
}
/*----------------------------结束--------------------------------*/

你可能感兴趣的:(C语言学习)