#include<stdio.h>
#include<stdlib.h>
struct stu{//定义行业信息结构体
char name[200];//行业名称
int num;//人数
};
int main(int argc,char *argv[]){
FILE *fp,*fq;//读文件指针fp和创建文件指针fq
struct stu *p,t;//结构体指针p和变量t
int i,j,k,n;
fq=fopen("employ-sort.txt","w");//创建一个排序之后的写文件employ-sort.txt
//打开读文件employ-data.txt并判断读写文件是否打开成功
if(!fq || (fp=fopen("employ-data.txt","r"))==NULL){
printf("Open the file failure, exit...\n");//不成功则提示并退出
return 0;
}
//检测一下文件中存储了多少个行业信息并记入变量n
for(n=0;fscanf(fp,"%s%d",t.name,&t.num),!feof(fp);n++);
if((p=(struct stu *)malloc(sizeof(t)*n))==NULL){//按n大小动态申请内存空间
printf("Application memory failure, exit...\n");//申请失败则提示退出
return 0;
}
rewind(fp);//读文件指针恢复到文件开头
for(i=0;i<n;i++){//读取n个行业信息并依次存入动态数组中
fscanf(fp,"%s%d",p[i].name,&p[i].num);
}
fclose(fp);//读取完毕关闭文件
for(i=0;i<n;i++){//对n个行业按人数降序排序并输出到文件及屏幕
for(k=i,j=k+1;j<n;j++)
if(p[k].num<p[j].num)
k=j;
if(i!=k)
t=p[k],p[k]=p[i],p[i]=t;
//输出到文件
fprintf(fq,"%s %d\n",p[i].name,p[i].num);
//输出到屏幕
printf("%s\t%d\n",p[i].name,p[i].num);
}
free(p);//释放所申请的内在空间
fclose(fq);//关闭写文件
//查询行业信息
while(1){
char name2[200]; //要输入查询的变量
int index=-1; //定义一个不存在的下标,查询到了就改变它的值
printf("请输入要查询的行业名称:");
scanf("%s",&name2);
getchar();
int i;
for (i=0;i<n;i++){
if(strcmp(p[i].name,name2)==0){//比较输入的名称和文件中的名称
index=i; // 匹配相同就返回对应下标
break;
}
}
if(index!=-1){//下标不等于-1则说明匹配成功,打印出人数
printf("查询到的就业人数为: %d\n",p[i].num);
}else
printf("查询不成功\n");
printf("是否继续查询?(y/n)");
if (getchar()=='n'){
break;
}
}
return 0;
}