?? gzgl-newest.c
字號(hào):
}
return n;
}
/*修改記錄。先按輸入的職工編號(hào)查詢(xún)到該記錄,然后提示用戶(hù)修改編號(hào)之外的值,編號(hào)不能修改*/
void Modify(ZGGZ tp[],int n)
{
char findmess[20];
int p=0;
if(n<=0)
{ system("cls");
printf("\n=====>No employee record!\n");
getchar();
return ;
}
system("cls");
printf("modify employee recorder");
Disp(tp,n);
stringinput(findmess,10,"input the existing employee number:"); /*輸入并檢驗(yàn)該編號(hào)*/
p=Locate(tp,n,findmess,"num"); /*查詢(xún)到該數(shù)組元素,并返回下標(biāo)值*/
if(p!=-1) /*若p!=-1,表明已經(jīng)找到該數(shù)組元素*/
{
printf("Number:%s,\n",tp[p].num);
printf("Name:%s,",tp[p].name);
stringinput(tp[p].name,15,"input new name:");
printf("jbgz:%8.2f,",tp[p].jbgz);
tp[p].jbgz=numberinput("jbgz:");
printf("jiangjin:%8.2f,",tp[p].jj);
tp[p].jj=numberinput("jiangjin:");
printf("koukuan:%8.2f,",tp[p].kk);
tp[p].kk=numberinput("koukuan:");
tp[n].yfgz=tp[n].jbgz+tp[n].jj-tp[n].kk;
tp[n].sk=tp[n].yfgz*0.12;
tp[n].sfgz=tp[n].yfgz-tp[n].sk;
printf("\n=====>modify success!\n");
getchar();
Disp(tp,n);
getchar();
saveflag=1;
}
else
{Nofind();
getchar();
}
return ;
}
/*插入記錄:按職工編號(hào)查詢(xún)到要插入的數(shù)組元素的位置,然后在該編號(hào)之后插入一個(gè)新數(shù)組元素。*/
int Insert(ZGGZ tp[],int n)
{
char ch,num[10],s[10]; /*s[]保存插入點(diǎn)位置之前的編號(hào),num[]保存輸入的新記錄的編號(hào)*/
ZGGZ newinfo;
int flag=0,i=0,kkk=0;
system("cls");
Disp(tp,n);
while(1)
{ stringinput(s,10,"please input insert location after the Number:");
flag=0;i=0;
while(i<n) /*查詢(xún)?cè)摼幪?hào)是否存在,flag=1表示該編號(hào)存在*/
{
if(strcmp(tp[i].num,s)==0) {kkk=i;flag=1;break;}
i++;
}
if(flag==1)
break; /*若編號(hào)存在,則進(jìn)行插入之前的新記錄輸入操作*/
else
{ getchar();
printf("\n=====>The number %s is not existing,try again?(y/n):",s);
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
{continue;}
else
{return n;}
}
}
/*以下新記錄的輸入操作與Add()相同*/
while(1)
{ stringinput(num,10,"input new employee Number:");
i=0;flag=0;
while(i<n) /*查詢(xún)?cè)摼幪?hào)是否存在,flag=1表示該編號(hào)存在*/
{
if(strcmp(tp[i].num,num)==0) {flag=1;break;}
i++;
}
if(flag==1)
{
getchar();
printf("\n=====>Sorry,The number %s is existing,try again?(y/n):",num);
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
{continue;}
else
{return n;}
}
else
break;
}
strcpy(newinfo.num,num); /*將字符串num拷貝到newinfo.num中*/
stringinput(newinfo.name,15,"Name:");
newinfo.jbgz=numberinput("jbgz:"); /*輸入并檢驗(yàn)jbgz*/
newinfo.jj=numberinput("jiangjin:"); /*輸入并檢驗(yàn)jiangjin*/
newinfo.kk=numberinput("koukuan:"); /*輸入并檢驗(yàn)koukuan*/
newinfo.yfgz=newinfo.jbgz+newinfo.jj-newinfo.kk; /*計(jì)算yfgz*/
newinfo.sk=newinfo.yfgz*0.12; /*計(jì)算sk*/
newinfo.sfgz=newinfo.yfgz-newinfo.sk;
saveflag=1; /*在main()有對(duì)該全局變量的判斷,若為1,則進(jìn)行存盤(pán)操作*/
for(i=n-1;i>kkk;i--) /*從最后一個(gè)組織元素開(kāi)始往向移一個(gè)元素位置*/
{ strcpy(tp[i+1].num,tp[i].num);
strcpy(tp[i+1].name,tp[i].name);
tp[i+1].jbgz=tp[i].jbgz;
tp[i+1].jj=tp[i].jj;
tp[i+1].kk=tp[i].kk;
tp[i+1].yfgz=tp[i].yfgz;
tp[i+1].sk=tp[i].sk;
tp[i+1].sfgz=tp[i].sfgz;
}
strcpy(tp[kkk+1].num,newinfo.num); /*在kkk的元素位置后插入新記錄*/
strcpy(tp[kkk+1].name,newinfo.name);
tp[kkk+1].jbgz=newinfo.jbgz;
tp[kkk+1].jj=newinfo.jj;
tp[kkk+1].kk=newinfo.kk;
tp[kkk+1].yfgz=newinfo.yfgz;
tp[kkk+1].sk=newinfo.sk;
tp[kkk+1].sfgz=newinfo.sfgz;
n++;
Disp(tp,n);
printf("\n\n");
getchar();
return n;
}
/*統(tǒng)計(jì)公司的員工的工資在各等級(jí)的人數(shù)*/
void Tongji(ZGGZ tp[],int n)
{
int count10000=0,count5000=0,count2000=0,count0=0;
int i=0;
if(n<=0)
{ system("cls");
printf("\n=====>Not employee record!\n");
getchar();
return ;
}
system("cls");
Disp(tp,n);
i=0;
while(i<n)
{
if(tp[i].sfgz>=10000) {count10000++;i=i+1;continue;} /*實(shí)發(fā)工資>10000*/
if(tp[i].sfgz>=5000) {count5000++;i=i+1;continue;} /*5000<=實(shí)發(fā)工資<10000*/
if(tp[i].sfgz>=2000) {count2000++;i=i+1;continue;} /*2000<=實(shí)發(fā)工資<5000*/
if(tp[i].sfgz<2000) {count0++;i=i+1;continue;} /*實(shí)發(fā)工資<2000*/
}
printf("\n------------------------------the TongJi result--------------------------------\n");
printf("sfgz>= 10000:%d (ren)\n",count10000);
printf("5000<=sfgz<10000:%d (ren)\n",count5000);
printf("2000<=sfgz< 5000:%d (ren)\n",count2000);
printf("sfgz< 2000:%d (ren)\n",count0);
printf("-------------------------------------------------------------------------------\n");
printf("\n\npress any key to return");
getchar();
}
/*利用冒泡排序法實(shí)現(xiàn)數(shù)組的按實(shí)發(fā)工資字段的降序排序,從高到低*/
void Sort(ZGGZ tp[],int n)
{
int i=0,j=0,flag=0;
ZGGZ newinfo;
if(n<=0)
{ system("cls");
printf("\n=====>Not employee record!\n");
getchar();
return ;
}
system("cls");
Disp(tp,n); /*顯示排序前的所有記錄*/
for(i=0;i<n;i++)
{
flag=0;
for(j=0;j<n-1;j++)
if((tp[j].sfgz<tp[j+1].sfgz))
{ flag=1;
strcpy(newinfo.num,tp[j].num); /*利用結(jié)構(gòu)變量newinfo實(shí)現(xiàn)數(shù)組元素的交換*/
strcpy(newinfo.name,tp[j].name);
newinfo.jbgz=tp[j].jbgz;
newinfo.jj=tp[j].jj;
newinfo.kk=tp[j].kk;
newinfo.yfgz=tp[j].yfgz;
newinfo.sk=tp[j].sk;
newinfo.sfgz=tp[j].sfgz;
strcpy(tp[j].num,tp[j+1].num);
strcpy(tp[j].name,tp[j+1].name);
tp[j].jbgz=tp[j+1].jbgz;
tp[j].jj=tp[j+1].jj;
tp[j].kk=tp[j+1].kk;
tp[j].yfgz=tp[j+1].yfgz;
tp[j].sk=tp[j+1].sk;
tp[j].sfgz=tp[j+1].sfgz;
strcpy(tp[j+1].num,newinfo.num);
strcpy(tp[j+1].name,newinfo.name);
tp[j+1].jbgz=newinfo.jbgz;
tp[j+1].jj=newinfo.jj;
tp[j+1].kk=newinfo.kk;
tp[j+1].yfgz=newinfo.yfgz;
tp[j+1].sk=newinfo.sk;
tp[j+1].sfgz=newinfo.sfgz;
}
if(flag==0) break;/*若標(biāo)記flag=0,意味著沒(méi)有交換了,排序已經(jīng)完成*/
}
Disp(tp,n); /*顯示排序后的所有記錄*/
saveflag=1;
printf("\n =====>sort complete!\n");
}
/*數(shù)據(jù)存盤(pán),若用戶(hù)沒(méi)有專(zhuān)門(mén)進(jìn)行此操作且對(duì)數(shù)據(jù)有修改,在退出系統(tǒng)時(shí), 會(huì)提示用戶(hù)存盤(pán)*/
void Save(ZGGZ tp[],int n)
{
FILE* fp;
int i=0;
fp=fopen("c:\\zggz","wb");/*以只寫(xiě)方式打開(kāi)二進(jìn)制文件*/
if(fp==NULL) /*打開(kāi)文件失敗*/
{
printf("\n=====>open file error!\n");
getchar();
return ;
}
for(i=0;i<n;i++)
{
if(fwrite(&tp[i],sizeof(ZGGZ),1,fp)==1)/*每次寫(xiě)一條記錄或一個(gè)結(jié)構(gòu)數(shù)組元素至文件*/
{
continue;
}
else
{
break;
}
}
if(i>0)
{
getchar();
printf("\n\n=====>save file complete,total saved's record number is:%d\n",i);
getchar();
saveflag=0;
}
else
{system("cls");
printf("the current link is empty,no employee record is saved!\n");
getchar();
}
fclose(fp); /*關(guān)閉此文件*/
}
void main()
{
ZGGZ gz[N]; /*定義ZGGZ結(jié)構(gòu)體*/
FILE *fp; /*文件指針*/
int select; /*保存選擇結(jié)果變量*/
char ch; /*保存(y,Y,n,N)*/
int count=0; /*保存文件中的記錄條數(shù)(或元素個(gè)數(shù))*/
fp=fopen("C:\\zggz","ab+");
/*以追加方式打開(kāi)二進(jìn)制文件c:\zggz,可讀可寫(xiě),若此文件不存在,會(huì)創(chuàng)建此文件*/
if(fp==NULL)
{
printf("\n=====>can not open file!\n");
exit(0);
}
while(!feof(fp))
{
if(fread(&gz[count],sizeof(ZGGZ),1,fp)==1) /*一次從文件中讀取一條職工工資記錄*/
count++;
}
fclose(fp); /*關(guān)閉文件*/
printf("\n==>open file sucess,the total records number is : %d.\n",count);
getchar();
menu();
while(1)
{
system("cls");
menu();
printf("\n Please Enter your choice(0~9):"); /*顯示提示信息*/
scanf("%d",&select);
if(select==0)
{
if(saveflag==1) /*若對(duì)數(shù)組的數(shù)據(jù)有修改且未進(jìn)行存盤(pán)操作,則此標(biāo)志為1*/
{ getchar();
printf("\n==>Whether save the modified record to file?(y/n):");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
Save(gz,count);
}
printf("\n===>thank you for useness!");
getchar();
break;
}
switch(select)
{
case 1:count=Add(gz,count);break; /*增加職工工資記錄*/
case 2:count=Del(gz,count);break; /*刪除職工工資記錄*/
case 3:Qur(gz,count);break; /*查詢(xún)職工工資記錄*/
case 4:Modify(gz,count);break; /*修改職工工資記錄*/
case 5:count=Insert(gz,count);break; /*插入職工工資記錄*/
case 6:Tongji(gz,count);break; /*統(tǒng)計(jì)職工工資記錄*/
case 7:Sort(gz,count);break; /*排序職工工資記錄*/
case 8:Save(gz,count);break; /*保存職工工資記錄*/
case 9:system("cls");Disp(gz,count);break; /*顯示職工工資記錄*/
default: Wrong();getchar();break; /*按鍵有誤,必須為數(shù)值0-9*/
}
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -