#include "stdio.h" /*標準輸入輸出函數庫*/
#include "stdlib.h" /*標準函數庫*/
#include "string.h" /*字符串函數庫*/
#include "conio.h" /*屏幕操作函數庫*/
#定義標題1 " - ZGGZ - \n "
# define header 2“| number | name | jbgz | jj | kk | yfgz | sk | sfgz | \ n "
# define header 3 " |-|-|-|-|-|-|-|-|-| \ n "
# define FORMAT " | %-8s | %-10s | % 8.2f | % 8.2f | % 8.2f | % 8.2f | % 8.2f | % 8.2f | \ n "
#定義數據p-& gt;num,p->姓名,p-& gt;jbgz,p-& gt;jj,p-& gt;kk,p-& gt;yfgz,p-& gt;sk,p-& gt;sfgz
#定義結束"- \n "
#定義N 60
int save flag = 0;/*是否需要保存標誌變量*/
/*定義與員工相關的數據結構*/
Typedef結構雇員/*被標記為雇員*/
{
char num:");
scanf("%d ",& amp選擇);
If(select==1) /*按編號查詢*/
{
stringinput(searchinput,10,"輸入現有員工號:");
p=Locate(tp,n,searchinput," num ");/*在數組tp中查找值為searchinput的元素,返回數組元素的下標值*/
如果(p!=-1) /*如果找到記錄*/
{
print header();
print data(TP:");
scanf("%d ",& ampsel);
if(sel==1)
{
stringinput(findmess,10,"輸入現有員工號:");
p=Locate(tp,n,findmess," num ");
getchar();
如果(p!=-1)
{
for(I = p+1;我& ltn;I++) /*刪除此記錄,後續記錄將向前移動*/
{
strcpy(tp[i-1])。num,tp[i]。num);
strcpy(tp[i-1])。名稱,tp[i]。姓名);
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]。jbgz=tp[i]。sk;
tp[i-1]。sfgz=tp[i]。sfgz
}
printf(" \ n = = & gt;刪除成功!\ n ");
n-;
getchar();
保存標誌= 1;
}
其他
nofind();
getchar();
}
Else if(sel==2) /*首先按名稱*/查詢記錄所在數組元素的下標值
{
stringinput(findmess,15,"輸入現有員工姓名:");
p=Locate(tp,n,findmess," name ");
getchar();
如果(p!=-1)
{
for(I = p+1;我& ltn;I++) /*刪除此記錄,後續記錄將向前移動*/
{
strcpy(tp[i-1])。num,tp[i]。num);
strcpy(tp[i-1])。名稱,tp[i]。姓名);
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]。jbgz=tp[i]。sk;
tp[i-1]。sfgz=tp[i]。sfgz
}
printf(" \ n = = = = = & gt;刪除成功!\ n ");
n-;
getchar();
保存標誌= 1;
}
其他
nofind();
getchar();
}
返回n;
}
/*修改記錄。首先根據輸入的員工編號查詢記錄,然後提示用戶修改編號以外的值。該號碼不可修改*/
void Modify(ZGGZ tp[],int n)
{
char find mess[20];
int p = 0;
如果(n & lt=0)
{ system(" cls ");
printf(" \ n = = = = = & gt;沒有員工記錄!\ n ");
getchar();
返回;
}
系統(“cls”);
printf("修改員工記錄");
Disp(tp,n);
stringinput(findmess,10,"輸入現有員工號:");/*輸入並驗證號碼*/
p=Locate(tp,n,findmess," num ");/*查詢數組元素並返回下標值*/
如果(p!=-1) /* If P!=-1,表示已經找到數組元素*/
{
printf("編號:%s,\n ",tp[p]。num);
printf("名稱:%s,",tp[p]。姓名);
stringinput(tp[p]。姓名,15,"輸入新姓名:");
printf("jbgz:%8.2f,",tp[p]。jbgz);
tp[p]。jbgz = number input(" jbgz:");
printf("江津:%8.2f,",tp[p].jj);
tp[p]。jj=numberinput("江津:");
printf("koukuan:%8.2f,",tp[p].kk);
tp[p]。kk = number input(" kou Kuan:");
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 = = = = = & gt;修改成功!\ n ");
getchar();
Disp(tp,n);
getchar();
保存標誌= 1;
}
其他
{ Nofind();
getchar();
}
返回;
}
/* Insert record:根據員工編號查詢要插入的數組元素的位置,然後在編號後插入壹個新的數組元素。*/
int Insert(ZGGZ tp[],int n)
{
char ch,num[10],s[10];/*s[]保存插入點位置之前的編號,num[]保存輸入的新記錄的編號*/
ZGGZ newinfo
int flag=0,i=0,kkk = 0;
系統(“cls”);
Disp(tp,n);
while(1)
{ stringinput(s,10,"請在數字後輸入插入位置:");
flag = 0;I = 0;
while(我& ltN) /*查詢該號碼是否存在,flag=1表示該號碼存在*/
{
if(strcmp(tp[i].num,s)= = 0){ kkk = I;flag = 1;打破;}
i++;
}
if(flag==1)
打破;/*如果該號碼存在,請在插入之前輸入新記錄*/
其他
{ getchar();
printf(" \ n = = = = = & gt;號碼%s不存在,再試壹次嗎?(y/n):",s);
scanf("%c ",& ampch);
if(ch=='y'||ch=='Y ')
{繼續;}
其他
{ return n;}
}
}
/*以下新記錄的輸入操作與Add () */相同
while(1)
{ stringinput(num,10,"輸入新員工號:");
I = 0;flag = 0;
while(我& ltN) /*查詢該號碼是否存在,flag=1表示該號碼存在*/
{
if(strcmp(tp[i].num,num)= = 0){ flag = 1;打破;}
i++;
}
if(flag==1)
{
getchar();
printf(" \ n = = = = = & gt;對不起,號碼%s已存在,再試壹次嗎?(y/n):",num);
scanf("%c ",& ampch);
if(ch=='y'||ch=='Y ')
{繼續;}
其他
{ return n;}
}
其他
打破;
}
strcpy(newinfo.num,num);/*將字符串num復制到newinfo.num */
stringinput(newinfo.name,15," Name:");
new info . jbgz = number input(" jbgz:");/*輸入並驗證jbgz*/
newinfo.jj=numberinput("江津:");/*輸入並驗證江津*/
new info . kk = number input(" kou Kuan:");/*輸入並驗證扣款*/
new info . yfgz = new info . jbgz+new info . jj-new info . kk;/*計算yfgz*/
new info . sk = new info . yfgz * 0.12;/*計算sk*/
new info . sfgz = new info . yfgz-new info . sk;
保存標誌= 1;/*全局變量在main()中判斷。如果是1,保存*/
for(I = n-1;我& gtkkkI-)/*從最後壹個組織元素向前移動壹個元素位置*/
{ strcpy(tp[i+1])。num,tp[i]。num);
strcpy(tp[i+1]。名稱,tp[i]。姓名);
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,new info . num);/*在kkk的元素位置後插入壹條新記錄*/
strcpy(tp[kkk+1]。name,new info . name);
tp[kkk+1]。jbgz = new info . jbgz;
tp[kkk+1]。jj = newinfo.jj
tp[kkk+1]。kk = newinfo.kk
tp[kkk+1]。yfgz = new info . yfgz;
tp[kkk+1]。sk = newinfo.sk
tp[kkk+1]。sfgz = new info . sfgz;
n++;
Disp(tp,n);
printf(" \ n \ n ");
getchar();
返回n;
}
/*公司各級員工工資統計*/
void同濟(ZGGZ tp[],int n)
{
int count10000=0,count5000=0,count2000=0,count0 = 0
int I = 0;
如果(n & lt=0)
{ system(" cls ");
printf(" \ n = = = = = & gt;不是員工記錄!\ n ");
getchar();
返回;
}
系統(“cls”);
Disp(tp,n);
I = 0;
while(我& ltn)
{
if(tp[i].sfgz & gt= 10000){ count 10000++;I = I+1;繼續;}/*實際工資> 10000*/
if(tp[i].sfgz & gt= 5000){ count 5000++;I = I+1;繼續;}/* 5000 & lt;=實際工資
if(tp[i].sfgz & gt= 2000){ count 2000++;I = I+1;繼續;}/* 2000 & lt;=實際工資
if(tp[i].sfgz & lt2000){ count 0++;I = I+1;繼續;}/*實際工資< 2000*/
}
printf("\n -同濟結果-\ n ");
printf(" sfgz & gt;= 10000:%d (ren)\n ",count 10000);
printf(" 5000 & lt;= sfgz & lt10000:%d(任)\n ",count 5000);
printf(" 2000 & lt;= sfgz & lt5000:%d(任)\n ",count 2000);
printf(" sfgz & lt;2000:%d(任)\n ",count 0);
printf("-\ n ");
printf(" \ n \ n按任意鍵返回");
getchar();
}
/*使用冒泡排序法,按照實際薪資字段降序排列,從高到低*/
void Sort(ZGGZ tp[],int n)
{
int i=0,j=0,flag = 0;
ZGGZ newinfo
如果(n & lt=0)
{ system(" cls ");
printf(" \ n = = = = = & gt;不是員工記錄!\ n ");
getchar();
返回;
}
系統(“cls”);
Disp(tp,n);/*排序前顯示所有記錄*/
for(I = 0;我& ltn;i++)
{
flag = 0;
for(j = 0;j & ltn-1;j++)
if((tp[j].sfgz & lttp[j+1]。sfgz))
{ flag = 1;
strcpy(newinfo.num,tp[j].num);/*使用結構變量newinfo實現數組元素的交換*/
strcpy(newinfo.name,tp[j].姓名);
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].姓名,tp[j+1]。姓名);
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,new info . num);
strcpy(tp[j+1]。name,new info . name);
tp[j+1]。jbgz = new info . jbgz;
tp[j+1]。jj = newinfo.jj
tp[j+1]。kk = newinfo.kk
tp[j+1]。yfgz = new info . yfgz;
tp[j+1]。sk = newinfo.sk
tp[j+1]。sfgz = new info . sfgz;
}
if(flag = = 0)break;/*如果標誌=0,則表示沒有交換,排序已經完成*/
}
Disp(tp,n);/*顯示所有已排序的記錄*/
保存標誌= 1;
printf(" \ n = = = = = & gt;排序完成!\ n ");
}
/*保存數據。如果用戶沒有專門做這個操作而修改了數據,在退出系統時會提示用戶保存數據*/
void Save(ZGGZ tp[],int n)
{
FILE * fp
int I = 0;
fp=fopen("c:\\zggz "," WB ");/*以只寫方式打開二進制文件*/
If(fp==NULL) /*無法打開文件*/
{
printf(" \ n = = = = = & gt;打開文件錯誤!\ n ");
getchar();
返回;
}
for(I = 0;我& ltn;i++)
{
if(fwrite(& amp;TP [I],sizeof (zggz),1,FP) = = 1)/*壹次向文件中寫入壹條記錄或壹個結構數組元素*/
{
繼續;
}
其他
{
打破;
}
}
如果(i & gt0)
{
getchar();
printf(" \ n \ n = = = = = & gt;保存文件完成,保存的記錄總數為:%d\n ",I);
getchar();
保存標誌= 0;
}
其他
{ system(" cls ");
printf("當前鏈接為空,沒有保存員工記錄!\ n ");
getchar();
}
fclose(FP);/*關閉該文件*/
}
void main()
{
ZGGZ gz[N];/*定義ZGGZ結構*/
FILE * fp/*文件指針*/
int select/*保存選擇結果變量*/
char ch/* Save (y,Y,N,N)*/
int count = 0;/*保存的文件中記錄(或元素)的數量*/
fp=fopen("C:\\zggz "," a b+ ");
/*通過追加打開二進制文件c:\zggz,可讀可寫。如果該文件不存在,將會創建*/
if(fp==NULL)
{
printf(" \ n = = = = = & gt;無法打開文件!\ n ");
退出(0);
}
而(!feof(fp))
{
if(fread(& amp;Gz [count],sizeof (zggz),1,FP) = = 1)/*從文件中壹次讀取壹條員工薪資記錄*/
count++;
}
fclose(FP);/*關閉文件*/
printf(" \ n = = & gt;打開文件成功,總記錄數為:%d.\n ",計數);
getchar();
menu();
while(1)
{
系統(“cls”);
menu();
printf("\n請輸入您的選擇(0 ~ 9):");/*顯示提示信息*/
scanf("%d ",& amp選擇);
if(select==0)
{
If(saveflag==1) /*如果數組的數據被修改而沒有保存,則該標誌為1*/
{ getchar();
printf(" \ n = = & gt;是否將修改後的記錄保存到文件中?(y/n):);
scanf("%c ",& ampch);
if(ch=='y'||ch=='Y ')
保存(gz,計數);
}
printf(" \ n = = = & gt;謝謝有用!”);
getchar();
打破;
}
開關(選擇)
{
案例1:count=Add(gz,count);打破;/*添加員工薪資記錄*/
情況二:count=Del(gz,count);打破;/*刪除員工工資記錄*/
案例三:古蘭經(gz,計數);打破;/*查詢員工薪資記錄*/
情況四:修改(gz,計數);打破;/*修改員工薪資記錄*/
情況5:計數=插入(gz,計數);打破;/*插入員工薪資記錄*/
案例六:同濟(gz,count);打破;/*員工薪資記錄統計*/
案例7:Sort(gz,count);打破;/*對員工工資記錄進行排序*/
案例八:保存(gz,計數);打破;/*保存員工薪資記錄*/
案例9:系統(“cls”);Disp(gz,計數);打破;/*顯示員工薪資記錄*/
默認:錯誤();getchar();打破;/*鍵錯誤,必須是0-9*/
}
}
}