排序和删除运行后会突然停止工作,求大神搭救。本人C语言菜鸟一枚,刚学C,写了个比较粗糙的系统,代码也是有参考别人的。毕竟水平有限,希望能有大神,帮我看看,指出其中的毛病。好的差的评价与建议都可留下,能给我留评论的都不甚感激,我一定会参考大家的意见,做出改进,努力地进步的.
#include<stdio.h>
#include<string.h>#include<stdlib.h>
/*-----------------------定义职工结构体-----------------------*/
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<d1)
{
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)<filelen) /*如果ftell(fp)计算出的此时文件位置标记的位置<staff文件长度执行while循环将新录入的内容打印出来。*/
{
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<filelen;ft=ftell(fp))
{ 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<filelen;ft=ftell(fp))
{
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<filelen)
{
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<filelen;ft=ftell(fp))
{
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<filelen;ft=ftell(fp))//从文件开头开始不断地移动文件位置标记载入数据
{
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<filelen;ft=ftell(fp))
{
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);
}
/*----------------------------结束--------------------------------*/